summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
authorPhilip Lowman <philip@yhbt.com>2009-07-18 03:31:17 (GMT)
committerPhilip Lowman <philip@yhbt.com>2009-07-18 03:31:17 (GMT)
commita94af4df640bca040f8694836a12583e647a3061 (patch)
tree36e8b891297ce3707bea165f1e3f7be821dede2e /Modules
parenteb5d0a7f61f8dbceab0e3c503d6dc057d64994e5 (diff)
downloadCMake-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.cmake235
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
- )
+)