Well luckily there are a whole slew of projects to take a look at.
HDF5 is one. CMake, VTK, ITK, ParaView are some others. Basically you
have a .cmake file that runs all the tests like looking for headers,
structs, functions and stuff like that. Each result is put into a
cmake variable. Then after all of that is completed you
"configure_file(...)" using your .h.in file as input.
# test.cmake example
# --------------------------------------------------------------------
# Now check for needed Header files
# --------------------------------------------------------------------
INCLUDE (${CMAKE_ROOT}/Modules/CheckIncludeFile.cmake)
macro (CORE_CHECK_INCLUDE_FILE header var prefix)
CHECK_INCLUDE_FILE("${header}" ${prefix}_${var} )
endmacro()
CORE_CHECK_INCLUDE_FILE("stddef.h" HAVE_STDDEF_H MXA)
CORE_CHECK_INCLUDE_FILE("stdint.h" HAVE_STDINT_H MXA)
CORE_CHECK_INCLUDE_FILE("stdlib.h" HAVE_STDLIB_H MXA)
CORE_CHECK_INCLUDE_FILE("setjmp.h" HAVE_SETJMP_H MXA)
CORE_CHECK_INCLUDE_FILE("string.h" HAVE_STRING_H MXA)
CORE_CHECK_INCLUDE_FILE("stdio.h" HAVE_STDIO_H MXA)
CORE_CHECK_INCLUDE_FILE("math.h" HAVE_MATH_H MXA)
CORE_CHECK_INCLUDE_FILE("time.h" HAVE_TIME_H MXA)
CORE_CHECK_INCLUDE_FILE("sys/time.h" HAVE_SYS_TIME_H MXA)
CORE_CHECK_INCLUDE_FILE("sys/types.h" HAVE_SYS_TYPES_H MXA)
CORE_CHECK_INCLUDE_FILE("sys/socket.h" HAVE_SYS_SOCKET_H MXA)
CORE_CHECK_INCLUDE_FILE("sys/stat.h" HAVE_SYS_STAT_H MXA)
CORE_CHECK_INCLUDE_FILE("netinet/in.h" HAVE_NETINET_IN_H MXA)
CORE_CHECK_INCLUDE_FILE("arpa/inet.h" HAVE_ARPA_INET_H MXA)
CORE_CHECK_INCLUDE_FILE("unistd.h" HAVE_UNISTD_H MXA)
CORE_CHECK_INCLUDE_FILE("fcntl.h" HAVE_FCNTL_H MXA)
CORE_CHECK_INCLUDE_FILE("errno.h" HAVE_ERRNO_H MXA)
configure_file (Conf.h.in Conf.h @ONLY)
#--- End test.cmake file
// Example Conf.h.in file
/* Define to 1 if you have the <stddef.h> header file. */
#cmakedefine MXA_HAVE_STDDEF_H @MXA_HAVE_STDDEF_H@
/* Define to 1 if you have the <stdint.h> header file. */
#cmakedefine MXA_HAVE_STDINT_H @MXA_HAVE_STDINT_H@
/* Define to 1 if you have the <stdlib.h> header file. */
#cmakedefine MXA_HAVE_STDLIB_H @MXA_HAVE_STDLIB_H@
/* Define to 1 if you have the <setjmp.h> header file. */
#cmakedefine MXA_HAVE_SETJMP_H @MXA_HAVE_SETJMP_H@
/* Define to 1 if you have the <string.h> header file. */
#cmakedefine MXA_HAVE_STRING_H @MXA_HAVE_STRING_H@
/* Define to 1 if you have the <stdio.h> header file. */
#cmakedefine MXA_HAVE_STDIO_H @MXA_HAVE_STDIO_H@
/* Define to 1 if you have the <math.h> header file. */
#cmakedefine MXA_HAVE_MATH_H @MXA_HAVE_MATH_H@
/* Define to 1 if you have the <time.h> header file. */
#cmakedefine MXA_HAVE_TIME_H @MXA_HAVE_TIME_H@
/* Define to 1 if you have the <sys/time.h> header file. */
#cmakedefine MXA_HAVE_SYS_TIME_H @MXA_HAVE_SYS_TIME_H@
/* Define to 1 if you have the <sys/types.h> header file. */
#cmakedefine MXA_HAVE_SYS_TYPES_H @MXA_HAVE_SYS_TYPES_H@
/* Define to 1 if you have the <sys/socket.h> header file. */
#cmakedefine MXA_HAVE_SYS_SOCKET_H @MXA_HAVE_SYS_SOCKET_H@
/* Define to 1 if you have the <netinet/in.h> header file. */
#cmakedefine MXA_HAVE_NETINET_IN_H @MXA_HAVE_NETINET_IN_H@
/* Define to 1 if you have the <arpa/inet.h> header file. */
#cmakedefine MXA_HAVE_ARPA_INET_H @MXA_HAVE_ARPA_INET_H@
/* Define to 1 if you have the <unistd.h> header file. */
#cmakedefine MXA_HAVE_UNISTD_H @MXA_HAVE_UNISTD_H@
/* Define to 1 if you have the <fcntl.h> header file. */
#cmakedefine MXA_HAVE_FCNTL_H @MXA_HAVE_FCNTL_H@
/* Define to 1 if you have the <errno.h> header file. */
#cmakedefine MXA_HAVE_ERRNO_H @MXA_HAVE_ERRNO_H@
at least that is how I do it.
___________________________________________________________
Mike Jackson www.bluequartz.net
Principal Software Engineer mike.jack...@bluequartz.net
BlueQuartz Software Dayton, Ohio
On Jul 29, 2010, at 6:25 PM, Clifford Yapp wrote:
I'm now at the point in writing CMake logic where I need to handle the
config.h.in situation, and either have missed the autoheader
equivalent functionality in CMake or it doesn't exist yet. Can
anybody point me to the "right" approach to this? I have so-far
found:
The #cmakedefine mechanism and the various CHECK_* functions, which
work fine but aren't autogenerated a.l.a autoheader
A 2009 discussion about autoheader-style functionality:
http://www.cmake.org/pipermail/cmake/2009-March/028293.html
http://www.cmake.org/pipermail/cmake/2009-April/028417.html
and a still-open item in the tracker from 2008:
http://www.cmake.org/Bug/view.php?id=6438&nbn=1
Has there been any recent work on this that I missed? Our project has
quite a slew of these #defines created by autoheader, most of which
are apparently actually needed, so manually maintaining a list is
gonna be a bit of a tough sell.
Cheers, and any help appreciated,
CY
_______________________________________________
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
_______________________________________________
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