Making non-standard OS checks in cmake?
Raphael Kubo da Costa
kubito at gmail.com
Sat Jan 2 23:18:33 CET 2010
On Friday 01 January 2010 16:43:10 Pau Garcia i Quiles wrote:
> On Fri, Jan 1, 2010 at 7:22 PM, Raphael Kubo da Costa <kubito at gmail.com>
wrote:
> > On Friday 01 January 2010 16:01:14 Alexander Neundorf wrote:
> >> On Friday 01 January 2010, Raphael Kubo da Costa wrote:
> >> > Hey there,
> >> >
> >> > As you can see on my.cdash.org, both kdeadmin and kdenetwork fail to
> >> > build
> >> >
> >> > cleanly on FreeBSD:
> >> > * kdeadmin/kuser's CMakeLists.txt's check for the need to link
> >> > against -
> >> >
> >> > lcrypt is broken on FreeBSD, since the crypt() function is defined in
> >> > unistd.h, not crypt.h, even though -lcrypt still must be passed to the
> >> > compiler
> >>
> >> Does crypt.h also exist ?
> >> You could also try check_symbol_exists() (
> >> http://www.cmake.org/cmake/help/cmake2.6docs.html#module:CheckSymbolExis
> >> ts ) to find out whether crypt() is in unistd.h or crypt.h
> >
> > No, crypt.h doesn't exist. Would check_symbol_exists() not work then? How
> > about using check_library_exists()?
>
> Something like this should work in all cases:
>
> find_file( CRYPT_HEADER crypt.h )
> find_library( CRYPT_LIBRARY crypt )
>
> if( NOT CRYPT_HEADER )
> set( CRYPT_HEADER unistd.h )
> endif( NOT CRYPT_HEADER)
>
> include(CheckFunctionExists)
> include(CheckLibraryExists)
>
> set(CMAKE_REQUIRED_INCLUDES ${CRYPT_HEADER})
> check_function_exists(crypt CRYPT3_EXISTS)
> if(NOT CRYPT3_EXISTS)
> if(CRYPT_LIBRARY)
> set(CMAKE_REQUIRED_LIBRARIES "crypt")
> set(CMAKE_REQUIRED_INCLUDES ${CRYPT_HEADER})
> check_function_exists(crypt CRYPT3_EXISTS_WITH_LIBRARY)
> endif(CRYPT_LIBRARY)
> endif(NOT CRYPT3_EXISTS)
>
> if(CRYPT3_EXISTS OR CRYPT3_EXISTS_WITH_LIBRARY)
> # add_executable, or whatever you should do if crypt(3) is available
> endif(CRYPT3_EXISTS OR CRYPT3_EXISTS_WITH_LIBRARY)
>
> if( CRYPT3_EXISTS_WITH_LIBRARY )
> target_link_libraries( yourtarget ${CRYPT_LIBRARY} )
> endif( CRYPT3_EXISTS_WITH_LIBRARY )
>
> It's probably possible to simplify it but I'm not in the mood just now :-)
Is this really necessary? What if we just check if libcrypt exists and link to
it if it does?
More information about the Kde-buildsystem
mailing list