107 lines
3.9 KiB
CMake
107 lines
3.9 KiB
CMake
# 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 @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);
|
|
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}")
|
|
endif()
|
|
|
|
include(FindPackageHandleStandardArgs)
|
|
|
|
find_package_handle_standard_args(AlienWx
|
|
REQUIRED_VARS AlienWx_INCLUDE_DIRS AlienWx_LIBRARIES
|
|
# HANDLE_COMPONENTS
|
|
VERSION_VAR AlienWx_VERSION)
|