Improve Boost path detection

This commit is contained in:
Alessandro Ranellucci 2015-11-06 11:03:45 +01:00
parent 97bf69ba7f
commit e7d2be842d

View File

@ -12,48 +12,65 @@ use Module::Build::WithXSpp;
# NOGDI : prevents inclusion of wingdi.h which defines functions Polygon() and Polyline() in global namespace # NOGDI : prevents inclusion of wingdi.h which defines functions Polygon() and Polyline() in global namespace
my @cflags = qw(-D_GLIBCXX_USE_C99 -DHAS_BOOL -DNOGDI -DSLIC3RXS); my @cflags = qw(-D_GLIBCXX_USE_C99 -DHAS_BOOL -DNOGDI -DSLIC3RXS);
my @INC = qw(); my @INC = qw(-Iinclude);
my @LIBS = qw(); my @LIBS = qw();
# search for Boost in a number of places
my @boost_include = my @boost_libs = ();
if (defined $ENV{BOOST_DIR}) { if (defined $ENV{BOOST_DIR}) {
if (-d "$ENV{BOOST_DIR}/include") { if (-d "$ENV{BOOST_DIR}/include") {
push @INC, '-I' . $ENV{BOOST_DIR} . '/include'; push @boost_include, $ENV{BOOST_DIR} . '/include';
} else { } else {
push @INC, '-I' . $ENV{BOOST_DIR}; push @boost_include, $ENV{BOOST_DIR};
} }
push @LIBS, '-L' . $ENV{BOOST_DIR}; push @boost_libs, $ENV{BOOST_DIR};
} else { } else {
push @INC, map "-I$_", grep { -d $_ } push @boost_include, grep { -d $_ }
qw(/opt/local/include /usr/local/include /opt/include), qw(/opt/local/include /usr/local/include /opt/include),
qw(/usr/include C:\Boost\include); qw(/usr/include C:\Boost\include);
push @LIBS, map "-L$_", grep { -d $_ } push @boost_libs, grep { -d $_ }
qw(/opt/local/lib /usr/local/lib /opt/lib /usr/lib), qw(/opt/local/lib /usr/local/lib /opt/lib /usr/lib),
qw(C:\Boost\lib /lib); qw(C:\Boost\lib /lib);
if ($^O eq 'MSWin32') { if ($^O eq 'MSWin32') {
for my $path (glob 'C:\dev\boost* C:\boost*') { for my $path (glob('C:\dev\boost*'), glob ('C:\boost*')) {
push @INC, "-I" . $path; push @boost_include, $path;
push @INC, "-L" . $path . "/stage/lib"; push @boost_libs, $path . "/stage/lib";
} }
} }
} }
push @INC, '-Iinclude'; # In order to generate the -l switches we need to know how Boost libraries are named
my @boost_libs = qw(thread system);
my $have_boost = 0; my $have_boost = 0;
for my $pattern ('boost_%s', 'boost_%s-mt', 'boost_%s-mgw47-mt-1_59') { foreach my $path (@boost_libs) {
my @files = glob "$path/libboost_system*";
next if !@files;
if ($files[0] =~ /libboost_system([^.]+)/) {
my $suffix = $1;
check_lib( check_lib(
lib => sprintf($pattern, 'system'), lib => "boost_system$suffix",
INC => join(' ', @INC), INC => join(' ', map "-I$_", @INC, @boost_include),
LIBS => join(' ', @LIBS), LIBS => "-L$path",
) or next; ) or next;
push @LIBS, map sprintf("-l$pattern", $_), @boost_libs;
push @cflags, '-DBOOST_LIBS'; push @INC, (map " -I$_", @boost_include); # TODO: only use the one related to the chosen lib path
push @LIBS, " -L$path", (map " -lboost_$_$suffix", qw(thread system)); # we need these
$have_boost = 1; $have_boost = 1;
last; last;
}
} }
die "No Boost!\n" if !$have_boost; die <<'EOF' if !$have_boost;
Slic3r requires the Boost libraries. Please make sure they are installed.
If they are installed, this script should be able to locate them in several
standard locations. If this is not the case, you might want to supply their
path through the BOOST_DIR environment variable:
BOOST_DIR=/path/to/boost perl Build.PL
EOF
if ($ENV{SLIC3R_DEBUG}) { if ($ENV{SLIC3R_DEBUG}) {
# only on newer GCCs: -ftemplate-backtrace-limit=0 # only on newer GCCs: -ftemplate-backtrace-limit=0
push @cflags, qw(-DSLIC3R_DEBUG -g); push @cflags, qw(-DSLIC3R_DEBUG -g);