[CMake] autoheader

Marcel Loose loose at astron.nl
Tue Mar 31 03:39:03 EDT 2009


Hi Bill,

Wouldn't it be better if CMake kept track of these variables internally.
I mean, usually the HAS_X variables are the result of calls to
check_include_file() and check_function_exists(). The Autotools handle
this under the hood.
CMake might keep a list of these variables, possibly one per check_*()
function. Or is there a reason to let the user handle this explicitly by
specifying the list of HAS_X variables in the call to
cmake_autoheader()?

Best regards,
Marcel Loose.

On Mon, 2009-03-30 at 11:58 -0400, Bill Hoffman wrote:
> Hendrik Sattler wrote:
> > Zitat von Bill Hoffman <bill.hoffman at kitware.com>:
> > 
> >> I have seen several requests for an autoheader type function to be
> >> added to CMake.  I have never used autoheader, but I gather it takes a
> >> list of variables and generates a config.h.in file automatically.  Does
> >> anyone on the list have experience with autoheader?   If so, what would
> >> a nice CMake api for something like this look like?
> > 
> > Well, autoheader just takes the result of certain tests and prepares a 
> > file that is usable e.g. with configure_file( .... @ONLY ). Usually, 
> > that contains much more than anyone needs or wants.
> > It addresses the problem of not having to keep to distinct lists of 
> > variables to replace (avoiding typos) but limits itself to a strict format.
> > 
> > A cmake-equalvalent could be a configure_file()-like function that takes 
> > a list of variables or mark variables and use all of them. There is no 
> > point in emulating the actual autoheader behaviour as that has the same 
> > problem as the configure script itself: an automatically created (and 
> > thus non-source) file in the source tree.
> > You can even make it better than autoheader and emit a file with 
> > #define/#undef for C and something with const variables for C++ (type 
> > safety) and something else for other supported languages. That would 
> > make it more complex but definitely better.
> > 
> 
> So, what would the API be?  I am thinking something that you just give a 
> list of variables and a file name.
> 
> set(VARS HAS_A HAS_B HAS_C)
> set(STRING_VARS STRING_A STRING_B)
> cmake_autoheader(CMAKEDEFINE_VARS ${VARS}
>                   STRING_VARS ${STRING_VARS}
>                   HEADER config.h.in)
> 
> 
> This would create:
> config.h.in
> #cmakedefine HAS_A
> #cmakedefine HAS_B
> #cmakedefine HAS_C
> #define STRING_A "@STRING_A@"
> #define STRING_B "@STRING_B@"
> 
> 
> I think you could do this pretty easily in a function, and a command 
> would not be needed.   Anyway, does the API look good?
> 
> -Bill
> _______________________________________________
> Powered by www.kitware.com
> 
> Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html
> 
> Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ
> 
> Follow this link to subscribe/unsubscribe:
> http://www.cmake.org/mailman/listinfo/cmake



More information about the CMake mailing list