1# - try to find perl modules, passed as COMPONENTS
2#
3# Non-cache variable you might use in your CMakeLists.txt:
4#  PERLMODULES_FOUND
5#
6# Requires these CMake modules:
7#  FindPackageHandleStandardArgs (known included with CMake >=2.6.2)
8#
9# Original Author:
10# 2012 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
11# http://academic.cleardefinition.com
12# Iowa State University HCI Graduate Program/VRAC
13#
14# Copyright Iowa State University 2012.
15# Distributed under the Boost Software License, Version 1.0.
16# (See accompanying file LICENSE_1_0.txt or copy at
17# http://www.boost.org/LICENSE_1_0.txt)
18
19if(NOT PERL_FOUND)
20	find_package(Perl QUIET)
21endif()
22
23set(_deps_check)
24if(PERL_FOUND)
25	foreach(module ${PerlModules_FIND_COMPONENTS})
26		string(REPLACE "::" "/" modfilename "${module}.pm")
27		string(REPLACE "::" "_" modvarname "PERLMODULES_${module}_MODULE")
28		string(TOUPPER "${modvarname}" modvarname)
29		list(APPEND _deps_check ${modvarname})
30		if(NOT ${modvarname})
31			if(NOT PerlModules_FIND_QUIETLY)
32				message(STATUS "Checking for perl module ${module}")
33			endif()
34			execute_process(COMMAND
35				"${PERL_EXECUTABLE}"
36				"-e"
37				"use ${module}; print \$INC{\"${modfilename}\"}"
38				RESULT_VARIABLE result_code
39				OUTPUT_VARIABLE filename
40				ERROR_VARIABLE error_info
41				OUTPUT_STRIP_TRAILING_WHITESPACE)
42			if(result_code EQUAL 0)
43				if(NOT PerlModules_FIND_QUIETLY)
44					message(STATUS
45						"Checking for perl module ${module} - found at ${filename}")
46				endif()
47				set(${modvarname}
48					"${filename}"
49					CACHE
50					FILEPATH
51					"Location found for module ${module}"
52					FORCE)
53				mark_as_advanced(${modvarname})
54			else()
55				if(NOT PerlModules_FIND_QUIETLY)
56					message(STATUS "Checking for perl module ${module} - failed")
57				endif()
58				set(${modvarname}
59					"NOTFOUND"
60					CACHE
61					FILEPATH
62					"No location found for module ${module}"
63					FORCE)
64				file(APPEND
65					${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
66					"Determining if the Perl module ${module} exists failed with the following error output:\n"
67					"${error_info}\n\n")
68			endif()
69		endif()
70	endforeach()
71endif()
72
73include(FindPackageHandleStandardArgs)
74find_package_handle_standard_args(PerlModules
75	DEFAULT_MSG
76	PERL_FOUND
77	${_deps_check})
78
79