diff options
author | Philip Lowman <philip@yhbt.com> | 2009-07-18 03:31:17 (GMT) |
---|---|---|
committer | Philip Lowman <philip@yhbt.com> | 2009-07-18 03:31:17 (GMT) |
commit | a94af4df640bca040f8694836a12583e647a3061 (patch) | |
tree | 36e8b891297ce3707bea165f1e3f7be821dede2e /Modules | |
parent | eb5d0a7f61f8dbceab0e3c503d6dc057d64994e5 (diff) | |
download | CMake-a94af4df640bca040f8694836a12583e647a3061.zip CMake-a94af4df640bca040f8694836a12583e647a3061.tar.gz CMake-a94af4df640bca040f8694836a12583e647a3061.tar.bz2 |
ENH: Improve detection of perl.h/libperl, issue #7898
Diffstat (limited to 'Modules')
-rw-r--r-- | Modules/FindPerlLibs.cmake | 235 |
1 files changed, 199 insertions, 36 deletions
diff --git a/Modules/FindPerlLibs.cmake b/Modules/FindPerlLibs.cmake index 50a5629..cbc074c 100644 --- a/Modules/FindPerlLibs.cmake +++ b/Modules/FindPerlLibs.cmake @@ -3,63 +3,226 @@ # and libraries are. It also determines what the name of the library is. This # code sets the following variables: # +# PERLLIBS_FOUND = True if perl.h & libperl were found # PERL_INCLUDE_PATH = path to where perl.h is found +# PERL_LIBRARY = path to libperl # PERL_EXECUTABLE = full path to the perl binary # +# The following variables are also available if needed +# (introduced after CMake 2.6.4) +# +# PERL_SITESEARCH = path to the sitesearch install dir +# PERL_SITELIB = path to the sitelib install directory +# PERL_VENDORARCH = path to the vendor arch install directory +# PERL_VENDORLIB = path to the vendor lib install directory +# PERL_ARCHLIB = path to the arch lib install directory +# PERL_PRIVLIB = path to the priv lib install directory +# PERL_EXTRA_C_FLAGS = Compilation flags used to build perl +# + +# find the perl executable +include(FindPerl) -SET(PERL_POSSIBLE_INCLUDE_PATHS - /usr/lib/perl/5.8.3/CORE - /usr/lib/perl/5.8.2/CORE - /usr/lib/perl/5.8.1/CORE - /usr/lib/perl/5.8.0/CORE - /usr/lib/perl/5.8/CORE +if (PERL_EXECUTABLE) + ### PERL_PREFIX + execute_process( + COMMAND + ${PERL_EXECUTABLE} -V:prefix + OUTPUT_VARIABLE + PERL_PREFIX_OUTPUT_VARIABLE + RESULT_VARIABLE + PERL_PREFIX_RESULT_VARIABLE ) -SET(PERL_POSSIBLE_LIB_PATHS - /usr/lib + if (NOT PERL_PREFIX_RESULT_VARIABLE) + string(REGEX REPLACE "prefix='([^']+)'.*" "\\1" PERL_PREFIX ${PERL_PREFIX_OUTPUT_VARIABLE}) + endif (NOT PERL_PREFIX_RESULT_VARIABLE) + + ### PERL_VERSION + execute_process( + COMMAND + ${PERL_EXECUTABLE} -V:version + OUTPUT_VARIABLE + PERL_VERSION_OUTPUT_VARIABLE + RESULT_VARIABLE + PERL_VERSION_RESULT_VARIABLE ) + if (NOT PERL_VERSION_RESULT_VARIABLE) + string(REGEX REPLACE "version='([^']+)'.*" "\\1" PERL_VERSION ${PERL_VERSION_OUTPUT_VARIABLE}) + endif (NOT PERL_VERSION_RESULT_VARIABLE) -FIND_PATH(PERL_INCLUDE_PATH perl.h - ${PERL_POSSIBLE_INCLUDE_PATHS}) + ### PERL_ARCHNAME + execute_process( + COMMAND + ${PERL_EXECUTABLE} -V:archname + OUTPUT_VARIABLE + PERL_ARCHNAME_OUTPUT_VARIABLE + RESULT_VARIABLE + PERL_ARCHNAME_RESULT_VARIABLE + ) + if (NOT PERL_ARCHNAME_RESULT_VARIABLE) + string(REGEX REPLACE "archname='([^']+)'.*" "\\1" PERL_ARCHNAME ${PERL_ARCHNAME_OUTPUT_VARIABLE}) + endif (NOT PERL_ARCHNAME_RESULT_VARIABLE) -# find the perl executable -INCLUDE(FindPerl) -IF(PERL_EXECUTABLE) - EXEC_PROGRAM(${PERL_EXECUTABLE} - ARGS -e "'use Config; print \$Config{libperl}, \"\\n\"'" - OUTPUT_VARIABLE PERL_LIBRARY_OUTPUT_VARIABLE - RETURN_VALUE PERL_LIBRARY_RETURN_VALUE + ### PERL_EXTRA_C_FLAGS + execute_process( + COMMAND + ${PERL_EXECUTABLE} -V:cppflags + OUTPUT_VARIABLE + PERL_CPPFLAGS_OUTPUT_VARIABLE + RESULT_VARIABLE + PERL_CPPFLAGS_RESULT_VARIABLE ) - IF(NOT PERL_LIBRARY_RETURN_VALUE) - FOREACH(path ${PERL_POSSIBLE_LIB_PATHS}) - SET(PERL_POSSIBLE_LIBRARY_NAME ${PERL_POSSIBLE_LIBRARY_NAME} "${path}/${PERL_LIBRARY_OUTPUT_VARIABLE}") - ENDFOREACH(path ${PERL_POSSIBLE_LIB_PATHS}) - ENDIF(NOT PERL_LIBRARY_RETURN_VALUE) - EXEC_PROGRAM(${PERL_EXECUTABLE} - ARGS -e "'use Config; print \$Config{cppflags}, \"\\n\"'" - OUTPUT_VARIABLE PERL_CPPFLAGS_OUTPUT_VARIABLE - RETURN_VALUE PERL_CPPFLAGS_RETURN_VALUE + if (NOT PERL_CPPFLAGS_RESULT_VARIABLE) + string(REGEX REPLACE "cppflags='([^']+)'.*" "\\1" PERL_EXTRA_C_FLAGS ${PERL_CPPFLAGS_OUTPUT_VARIABLE}) + endif (NOT PERL_CPPFLAGS_RESULT_VARIABLE) + + ### PERL_SITESEARCH + execute_process( + COMMAND + ${PERL_EXECUTABLE} -V:installsitesearch + OUTPUT_VARIABLE + PERL_SITESEARCH_OUTPUT_VARIABLE + RESULT_VARIABLE + PERL_SITESEARCH_RESULT_VARIABLE + ) + if (NOT PERL_SITESEARCH_RESULT_VARIABLE) + string(REGEX REPLACE "install[a-z]+='([^']+)'.*" "\\1" PERL_SITESEARCH ${PERL_SITESEARCH_OUTPUT_VARIABLE}) + endif (NOT PERL_SITESEARCH_RESULT_VARIABLE) + + ### PERL_SITELIB + execute_process( + COMMAND + ${PERL_EXECUTABLE} -V:installsitelib + OUTPUT_VARIABLE + PERL_SITELIB_OUTPUT_VARIABLE + RESULT_VARIABLE + PERL_SITELIB_RESULT_VARIABLE + ) + if (NOT PERL_SITELIB_RESULT_VARIABLE) + string(REGEX REPLACE "install[a-z]+='([^']+)'.*" "\\1" PERL_SITELIB ${PERL_SITELIB_OUTPUT_VARIABLE}) + endif (NOT PERL_SITELIB_RESULT_VARIABLE) + + ### PERL_VENDORARCH + execute_process( + COMMAND + ${PERL_EXECUTABLE} -V:installvendorarch + OUTPUT_VARIABLE + PERL_VENDORARCH_OUTPUT_VARIABLE + RESULT_VARIABLE + PERL_VENDORARCH_RESULT_VARIABLE ) - IF(NOT PERL_CPPFLAGS_RETURN_VALUE) - SET(PERL_EXTRA_C_FLAGS ${PERL_CPPFLAGS_OUTPUT_VARIABLE}) - ENDIF(NOT PERL_CPPFLAGS_RETURN_VALUE) -ENDIF(PERL_EXECUTABLE) - -FIND_LIBRARY(PERL_LIBRARY - NAMES ${PERL_POSSIBLE_LIBRARY_NAME} perl5.8.0 - PATHS ${PERL_POSSIBLE_LIB_PATHS} + if (NOT PERL_VENDORARCH_RESULT_VARIABLE) + string(REGEX REPLACE "install[a-z]+='([^']+)'.*" "\\1" PERL_VENDORARCH ${PERL_VENDORARCH_OUTPUT_VARIABLE}) + endif (NOT PERL_VENDORARCH_RESULT_VARIABLE) + + ### PERL_VENDORLIB + execute_process( + COMMAND + ${PERL_EXECUTABLE} -V:installvendorlib + OUTPUT_VARIABLE + PERL_VENDORLIB_OUTPUT_VARIABLE + RESULT_VARIABLE + PERL_VENDORLIB_RESULT_VARIABLE + ) + if (NOT PERL_VENDORLIB_RESULT_VARIABLE) + string(REGEX REPLACE "install[a-z]+='([^']+)'.*" "\\1" PERL_VENDORLIB ${PERL_VENDORLIB_OUTPUT_VARIABLE}) + endif (NOT PERL_VENDORLIB_RESULT_VARIABLE) + + ### PERL_ARCHLIB + execute_process( + COMMAND + ${PERL_EXECUTABLE} -V:installarchlib + OUTPUT_VARIABLE + PERL_ARCHLIB_OUTPUT_VARIABLE + RESULT_VARIABLE + PERL_ARCHLIB_RESULT_VARIABLE ) + if (NOT PERL_ARCHLIB_RESULT_VARIABLE) + string(REGEX REPLACE "install[a-z]+='([^']+)'.*" "\\1" PERL_ARCHLIB ${PERL_ARCHLIB_OUTPUT_VARIABLE}) + endif (NOT PERL_ARCHLIB_RESULT_VARIABLE) + + ### PERL_PRIVLIB + execute_process( + COMMAND + ${PERL_EXECUTABLE} -V:installprivlib + OUTPUT_VARIABLE + PERL_PRIVLIB_OUTPUT_VARIABLE + RESULT_VARIABLE + PERL_PRIVLIB_RESULT_VARIABLE + ) + if (NOT PERL_PRIVLIB_RESULT_VARIABLE) + string(REGEX REPLACE "install[a-z]+='([^']+)'.*" "\\1" PERL_PRIVLIB ${PERL_PRIVLIB_OUTPUT_VARIABLE}) + endif (NOT PERL_PRIVLIB_RESULT_VARIABLE) + + + ### PERL_POSSIBLE_INCLUDE_PATHS + set(PERL_POSSIBLE_INCLUDE_PATHS + /usr/lib/perl5/${PERL_VERSION}/${PERL_ARCHNAME}/CORE + /usr/lib/perl/${PERL_VERSION}/${PERL_ARCHNAME}/CORE + /usr/lib/perl5/${PERL_VERSION}/CORE + /usr/lib/perl/${PERL_VERSION}/CORE + ) + + ### PERL_POSSIBLE_LIB_PATHS + set(PERL_POSSIBLE_LIB_PATHS + ${PERL_ARCHLIB}/CORE + /usr/lib/perl5/${PERL_VERSION}/${PERL_ARCHNAME}/CORE + /usr/lib/perl/${PERL_VERSION}/${PERL_ARCHNAME}/CORE + /usr/lib/perl5/${PERL_VERSION}/CORE + /usr/lib/perl/${PERL_VERSION}/CORE + ) + + ### PERL_POSSIBLE_LIBRARY_NAME + execute_process( + COMMAND + ${PERL_EXECUTABLE} -V:libperl + OUTPUT_VARIABLE + PERL_LIBRARY_OUTPUT_VARIABLE + RESULT_VARIABLE + PERL_LIBRARY_RESULT_VARIABLE + ) + if (NOT PERL_LIBRARY_RESULT_VARIABLE) + foreach(_perl_lib_path ${PERL_POSSIBLE_LIB_PATHS}) + string(REGEX REPLACE "libperl='([^']+)'" "\\1" PERL_LIBRARY_OUTPUT_VARIABLE ${PERL_LIBRARY_OUTPUT_VARIABLE}) + set(PERL_POSSIBLE_LIBRARY_NAME ${PERL_POSSIBLE_LIBRARY_NAME} "${_perl_lib_path}/${PERL_LIBRARY_OUTPUT_VARIABLE}") + endforeach(_perl_lib_path ${PERL_POSSIBLE_LIB_PATHS}) + endif (NOT PERL_LIBRARY_RESULT_VARIABLE) + + ### PERL_INCLUDE_PATH + find_path(PERL_INCLUDE_PATH + NAMES + perl.h + PATHS + ${PERL_POSSIBLE_INCLUDE_PATHS} + ) + + ### PERL_LIBRARY + find_library(PERL_LIBRARY + NAMES + ${PERL_POSSIBLE_LIBRARY_NAME} + perl${PERL_VERSION} + perl + PATHS + ${PERL_POSSIBLE_LIB_PATHS} + ) + +endif (PERL_EXECUTABLE) # handle the QUIETLY and REQUIRED arguments and set PERLLIBS_FOUND to TRUE if # all listed variables are TRUE INCLUDE(FindPackageHandleStandardArgs) FIND_PACKAGE_HANDLE_STANDARD_ARGS(PerlLibs DEFAULT_MSG PERL_LIBRARY PERL_INCLUDE_PATH) +# Introduced after CMake 2.6.4 to bring module into compliance +set(PERL_INCLUDE_DIR ${PERL_INCLUDE_PATH}) +set(PERL_INCLUDE_DIRS ${PERL_INCLUDE_PATH}) +set(PERL_LIBRARIES ${PERL_LIBRARY}) -MARK_AS_ADVANCED( +mark_as_advanced( PERL_INCLUDE_PATH PERL_EXECUTABLE PERL_LIBRARY - ) +) |