123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- # Find the wxWidgets module based on the information provided by the Perl Alien::wxWidgets module.
- # Check for the Perl & PerlLib modules
- include(LibFindMacros)
- libfind_package(AlienWx Perl)
- libfind_package(AlienWx PerlLibs)
- if (AlienWx_DEBUG)
- message(STATUS " AlienWx_FIND_COMPONENTS=${AlienWx_FIND_COMPONENTS}")
- endif()
- # Execute an Alien::Wx module to find the relevant information regarding
- # the wxWidgets used by the Perl interpreter.
- # Perl specific stuff
- set(AlienWx_TEMP_INCLUDE ${CMAKE_CURRENT_BINARY_DIR}/AlienWx_TEMP_INCLUDE.txt)
- execute_process(
- COMMAND ${PERL_EXECUTABLE} -e "
- # Import Perl modules.
- use strict;
- use warnings;
- use Text::ParseWords;
- BEGIN {
- # CMake sets the environment variables CC and CXX to the detected C compiler.
- # There is an issue with the Perl ExtUtils::CBuilder, which does not handle whitespaces
- # in the paths correctly on Windows, so we rather drop the CMake auto-detected paths.
- delete \$ENV{CC};
- delete \$ENV{CXX};
- }
- use Alien::wxWidgets;
- use ExtUtils::CppGuess;
- # Test for a Visual Studio compiler
- my \$cpp_guess = ExtUtils::CppGuess->new;
- my \$mswin = \$^O eq 'MSWin32';
- my \$msvc = \$cpp_guess->is_msvc;
- # List of wxWidgets components to be used.
- my @components = split /;/, '${AlienWx_FIND_COMPONENTS}';
- # Query the available data from Alien::wxWidgets.
- my \$version = Alien::wxWidgets->version;
- my \$config = Alien::wxWidgets->config;
- my \$compiler = Alien::wxWidgets->compiler;
- my \$linker = Alien::wxWidgets->linker;
- my \$include_path = ' ' . Alien::wxWidgets->include_path;
- my \$defines = ' ' . Alien::wxWidgets->defines;
- my \$cflags = Alien::wxWidgets->c_flags;
- my \$linkflags = Alien::wxWidgets->link_flags;
- my \$libraries = ' ' . Alien::wxWidgets->libraries(@components);
- my \$gui_toolkit = Alien::wxWidgets->config->{toolkit};
- #my @libraries = Alien::wxWidgets->link_libraries(@components);
- #my @implib = Alien::wxWidgets->import_libraries(@components);
- #my @shrlib = Alien::wxWidgets->shared_libraries(@components);
- #my @keys = Alien::wxWidgets->library_keys; # 'gl', 'adv', ...
- #my \$library_path = Alien::wxWidgets->shared_library_path;
- #my \$key = Alien::wxWidgets->key;
- #my \$prefix = Alien::wxWidgets->prefix;
- my \$filename = '${AlienWx_TEMP_INCLUDE}';
- open(my $fh, '>', \$filename) or die \"Could not open file '\$filename' \$!\";
- # Convert a space separated lists to CMake semicolon separated lists,
- # escape the backslashes,
- # export the resulting list to a temp file.
- sub cmake_set_var {
- my (\$varname, \$content) = @_;
- # Remove line separators.
- \$content =~ s/\\r|\\n//g;
- # Escape the path separators.
- \$content =~ s/\\\\/\\\\\\\\\\\\\\\\/g;
- my @words = shellwords(\$content);
- print \$fh \"set(AlienWx_\$varname \\\"\" . join(';', @words) . \"\\\")\\n\";
- }
- cmake_set_var('VERSION', \$version);
- \$include_path =~ s/ -I/ /g;
- cmake_set_var('INCLUDE_DIRS', \$include_path);
- \$libraries =~ s/ -L/ -LIBPATH:/g if \$msvc;
- cmake_set_var('LIBRARIES', \$libraries);
- #cmake_set_var('LIBRARY_DIRS', );
- #\$defines =~ s/ -D/ /g;
- cmake_set_var('DEFINITIONS', \$defines);
- #cmake_set_var('DEFINITIONS_DEBUG', );
- cmake_set_var('CXX_FLAGS', \$cflags);
- cmake_set_var('GUI_TOOLKIT', \$gui_toolkit);
- close \$fh;
- ")
- include(${AlienWx_TEMP_INCLUDE})
- file(REMOVE ${AlienWx_TEMP_INCLUDE})
- unset(AlienWx_TEMP_INCLUDE)
- if (AlienWx_DEBUG)
- message(STATUS " AlienWx_VERSION = ${AlienWx_VERSION}")
- message(STATUS " AlienWx_INCLUDE_DIRS = ${AlienWx_INCLUDE_DIRS}")
- message(STATUS " AlienWx_LIBRARIES = ${AlienWx_LIBRARIES}")
- message(STATUS " AlienWx_LIBRARY_DIRS = ${AlienWx_LIBRARY_DIRS}")
- message(STATUS " AlienWx_DEFINITIONS = ${AlienWx_DEFINITIONS}")
- message(STATUS " AlienWx_DEFINITIONS_DEBUG = ${AlienWx_DEFINITIONS_DEBUG}")
- message(STATUS " AlienWx_CXX_FLAGS = ${AlienWx_CXX_FLAGS}")
- message(STATUS " AlienWx_GUI_TOOLKIT = ${AlienWx_GUI_TOOLKIT}")
- endif()
- include(FindPackageHandleStandardArgs)
- find_package_handle_standard_args(AlienWx
- REQUIRED_VARS AlienWx_INCLUDE_DIRS AlienWx_LIBRARIES
- # HANDLE_COMPONENTS
- VERSION_VAR AlienWx_VERSION)
|