I _think_ there are issues with generating a file that is later used by CMake. I think. The other issue is that every time you run CMake (by default) that file is going to be written, then configured by cmake which will most likely mean a larger recompile than might be necessary.
I don't see the problem here. Most projects just have a one-to-one relationship between the tests that they perform such as looking for include files, and the entries in their configuration file. So if you do a test looking for <sys/types.h> then you would also have an entry in your config.h.in file like this: #cmakedefine01 HAVE_SYSTYPES_H @HAVE_SYSTYPES_H@ Yes, this has a large initial "coming up to speed" but once you have it adding a few more tests is simple and fast. Take a look at http://scm.bluequartz.net/support-libraries/cmp I kind of tried what you are doing but ended up with just a bunch of templates that I can easily use with new CMake projects that will run all the same tests and create the same type of "Config.h" file for each project. ___________________________________________________________ Mike Jackson www.bluequartz.net Principal Software Engineer [email protected] BlueQuartz Software Dayton, Ohio On Jan 26, 2011, at 3:03 PM, luxInteg wrote: > On Tuesday 25 January 2011 03:32:36 luxInteg wrote: >> On Sunday 28 November 2010 16:03:33 luxInteg wrote: >>> I came across the useful wiki >>> http://www.cmake.org/Wiki/CMake:How_To_Write_Platform_Checks >> >> I need '1's in config.g and I dont know how these are generated. >> For gsl This the cmake output:- >> >> -- Looking for sys/types.h >> -- Looking for sys/types.h - found >> -- Looking for sys/stat.h >> -- Looking for sys/stat.h - found >> -- Looking for stdlib.h >> -- Looking for stdlib.h - found >> -- Looking for string.h >> -- Looking for string.h - found >> -- Looking for memory.h >> -- Looking for memory.h - found >> -- Looking for strings.h >> -- Looking for strings.h - found >> -- Looking for inttypes.h >> -- Looking for inttypes.h - found >> -- Looking for stdint.h >> -- Looking for stdint.h - found >> -- Looking for unistd.h >> -- Looking for unistd.h - found >> -- Looking for dlfcn.h >> -- Looking for dlfcn.h - found >> -- Looking for vprintf >> -- Looking for vprintf - found >> -- Looking for memcpy >> -- Looking for memcpy - found >> -- Looking for memmove >> -- Looking for memmove - found >> -- Looking for strdup >> -- Looking for strdup - found >> -- Looking for strtol >> -- Looking for strtol - found >> -- Looking for strtoul >> -- Looking for strtoul - found >> -- HAVE_EXIT_SUCCESS_AND_FAILURE >> -- Looking for cos in m >> -- Looking for cos in m - found >> -- HAVE_DECL_FEENABLEEXCEPT >> -- HAVE_DECL_HYPOT >> -- HAVE_DECL_EXPM1 >> -- HAVE_DECL_ACOSH >> -- HAVE_DECL_ASINH >> -- HAVE_DECL_ATANH >> -- Looking for ldexp >> -- Looking for ldexp - found >> -- Looking for frexp >> -- Looking for frexp - found >> -- Looking for isinf >> -- Looking for isinf - found >> -- Looking for finite >> -- Looking for finite - found >> -- Looking for isnan >> -- Looking for isnan - found >> -- HAVE_DECL_ISFINITE >> -- HAVE_DECL_LOG1P >> -- HAVE_PRINTF_LONGDOUBLE >> -- HAVE_EXTENDED_PRECISION_REGISTERS >> -- HAVE_FPU_X86_SSE >> -- Performing Test HAVE__FPU_SETCW >> -- Performing Test HAVE__FPU_SETCW - Success >> -- Performing Test HAVE_FPSETPREC >> -- Performing Test HAVE_FPSETPREC - Failed >> -- Performing Test HAVE__CONTROLFP >> -- Performing Test HAVE__CONTROLFP - Failed >> -- Performing Test HAVE__CONTROLFP_S >> -- Performing Test HAVE__CONTROLFP_S - Failed >> -- Performing Test HAVE_FPU_INLINE_ASM_X86 >> -- Performing Test HAVE_FPU_INLINE_ASM_X86 - Success >> -- HAVE_GNUX86_IEEE_INTERFACE >> -- HAVE_IEEE_COMPARISONS >> -- HAVE_IEEE_DENORMALS >> -- Configuring done >> -- Generating done >> -- Build files have been written to: ~/S_TESTS/gsl-1.14/build >> >> >> >> >> make fails like so >> >> ~/sys/infnan.c:98:3: error: #error "cannot define gsl_finite without >> HAVE_DECL_FINITE or HAVE_IEEE_COMPARISONS" >> ~/sys/infnan.c:115:3: error: #error "cannot define gsl_isnan without >> HAVE_DECL_ISNAN or HAVE_IEEE_COMPARISONS" >> >> I thought I ensured that HAVE_IEEE_COMPARISONS and HAVE_DECL_FINITE >> and HAVE_DECL_ISNAN etc were tested for and set to 1 in the config.h- >> generating file (when these were not not generated by 'standard cmake >> macros) and hoped that they would be with the latter. However there >> were no '1's in the config.h file and the make failed. A quick/crude >> substitute of appropriate '1's in the said file and the make >> progressed. So how do I ensure that '1's are set in the generated >> config.h file? >> >> > > I still have not seen a reproducible way of generating a config.h.in to > reflect results of 'platform' checks in cmake. Would a simple approach of > generating )dynamically) such a config.h.in not be useful? > > Suppose we were start with an empty file -call this config.h.cmake (for > instance) > > so to do a header file check for example > check_include_file(somefile.h HAVE_SOMEFILE_H) > > if the above is true > use the execute_process() > to add a line (for example ) like so :- > -------------- > cat>>config.h.cmake<<"EOF" > #define HAVE_SOMEFILE_H 1 > EOF > -------------- > > then repeat for other checks{and custom checks} > adding compile definitions (to the appropriate CMakeLists,txt file) as > required > > then in the end use configure_file() to transform this file in to the > required > config.h _______________________________________________ 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
