X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=bindings%2Fperl%2FMakefile.PL;h=98f93d838cdc4344ef4665c20d84a08b1be9f2c2;hb=b525c9c88c988fa45593700d9a4846faa388922a;hp=2d272a8fbb2064bf75e7b3e873b2e2c577954082;hpb=631ee82121da414fb6804fcb69496576c8b777f2;p=liboping.git diff --git a/bindings/perl/Makefile.PL b/bindings/perl/Makefile.PL index 2d272a8..98f93d8 100644 --- a/bindings/perl/Makefile.PL +++ b/bindings/perl/Makefile.PL @@ -1,9 +1,21 @@ use 5.006; use ExtUtils::MakeMaker; +use Config (%Config); my @OPING_PREFIX = (qw(/opt/oping /usr /usr/local)); my $OPING_PREFIX; +my $OPING_CPPFLAGS; +my $OPING_LDDLFLAGS; +my $OPING_LIBS; +my $OPING_DEPEND; + +# TOP_BUILDDIR is set by liboping's build system, so Net::Oping can link with +# the yet uninstalled library. +my $TOP_BUILDDIR; +my $TARGET_LIBDIR; + +# Parse custom command line arguments. for (my $i = 0; $i < @ARGV; $i++) { if ($ARGV[$i] =~ m#^OPING_PREFIX=(.*[^/])#) @@ -12,21 +24,74 @@ for (my $i = 0; $i < @ARGV; $i++) splice (@ARGV, $i, 1); $i--; } + elsif ($ARGV[$i] =~ m#^TOP_BUILDDIR=(.*[^/])#) + { + $TOP_BUILDDIR = $1; + # TOP_BUILDDIR is passed from bindings/, but we're currently in + # bindings/perl/. If it is a relative path, we need to add an + # extra `../' in order to compensate for this. + if ($TOP_BUILDDIR !~ m#^/#) + { + $TOP_BUILDDIR = "../$TOP_BUILDDIR"; + } + splice (@ARGV, $i, 1); + $i--; + } + elsif ($ARGV[$i] =~ m#^TARGET_LIBDIR=(.*[^/])#) + { + # Only save TARGET_LIBDIR if it's not a standard system library + # directory, such as /usr/lib. + if (!is_system_libdir ($1)) + { + $TARGET_LIBDIR = $1; + } + splice (@ARGV, $i, 1); + $i--; + } +} + +if (!$TOP_BUILDDIR) +{ + for (my $i = 0; $i < @OPING_PREFIX; $i++) + { + if (!-e $OPING_PREFIX[$i] . '/include/oping.h') + { + next; + } + + $OPING_PREFIX = $OPING_PREFIX[$i]; + print "Found in $OPING_PREFIX/include\n"; + last; + } } -for (my $i = 0; $i < @OPING_PREFIX; $i++) +if ($TOP_BUILDDIR) { - if (!-e $OPING_PREFIX[$i] . '/include/oping.h') + # Use LDDLFLAGS here instead of LIBS, because: + # 1) We need to make sure our library path comes first (and no locally + # installed version is used). + # 2) Prevent MakeMaker from stipping the -rpath option when the + # library is to be installed in a non-standard path. Standard-paths + # are read from $Config{'libsdirs'} above. + $OPING_CPPFLAGS = "-I$TOP_BUILDDIR/src"; + $OPING_LDDLFLAGS = "-L$TOP_BUILDDIR/src/.libs " . $Config{'lddlflags'}; + $OPING_LIBS = "-L$TOP_BUILDDIR/src/.libs -loping"; + + if ($TARGET_LIBDIR) { - next; + $OPING_LDDLFLAGS .= qq( -Wl,-rpath -Wl,"$TARGET_LIBDIR"); } - $OPING_PREFIX = $OPING_PREFIX[$i]; - print "Found in $OPING_PREFIX/include\n"; - last; + $OPING_DEPEND = { 'Oping.o' => "$TOP_BUILDDIR/src/liboping.la" }; +} +elsif ($OPING_PREFIX) +{ + # -rpath is automagically set in this case. + $OPING_CPPFLAGS = "-I$OPING_PREFIX/include"; + $OPING_LIBS = "-L$OPING_PREFIX/lib -loping"; } -if (!$OPING_PREFIX) +if (!$OPING_CPPFLAGS) { my $search_path = join (', ', @OPING_PREFIX); print STDERR < {}, ($] >= 5.005 ? (ABSTRACT_FROM => 'lib/Net/Oping.pm', - AUTHOR => 'Florian Forster ') + AUTHOR => 'Florian Forster ') : ()), - LIBS => ["-L$OPING_PREFIX/lib -loping"], + ($OPING_DEPEND ? (depend => $OPING_DEPEND) : ()), + LIBS => [$OPING_LIBS], + ($OPING_LDDLFLAGS ? (LDDLFLAGS => "$OPING_LDDLFLAGS") : ()), DEFINE => '', - INC => "-I$OPING_PREFIX/include" + INC => "$OPING_CPPFLAGS" ); + +sub is_system_libdir +{ + my $path = shift; + for (split (' ', $Config{'libsdirs'})) + { + if ($path eq $_) + { + return (1); + } + } + return; +}