summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: b0b7484)
raw | patch | inline | side by side (parent: b0b7484)
author | Florian Forster <octo@leeloo.lan.home.verplant.org> | |
Tue, 17 Feb 2009 10:29:43 +0000 (11:29 +0100) | ||
committer | Florian Forster <octo@leeloo.lan.home.verplant.org> | |
Tue, 17 Feb 2009 10:29:43 +0000 (11:29 +0100) |
It is now, at last, possible to build the Perl module before installing
liboping and still have it linked correctly.
liboping and still have it linked correctly.
bindings/Makefile.am | patch | blob | history | |
bindings/perl/Makefile.PL | patch | blob | history |
diff --git a/bindings/Makefile.am b/bindings/Makefile.am
index 2378c7482a8383cf27672f56665afe7cf5375541..0c1c6609b9292f54a3bf68c02802c2578a4feae0 100644 (file)
--- a/bindings/Makefile.am
+++ b/bindings/Makefile.am
perl/Oping.xs perl/README perl/lib/Net/Oping.pm perl/t/Oping.t \
perl/typemap
-all-local:
+all-local: @BINDINGS@
[ ! -f perl/Makefile ] || ( cd perl && $(MAKE) all )
install-exec-local:
perl-bindings: perl/Makefile
cd perl && $(MAKE)
+# Check if the `perl' directory exists in the _build_ directory. If not, copy
+# the files from the _source_ directory.
perl/Makefile: perl/Makefile.PL $(top_builddir)/config.status
if test ! -d perl; then \
for file in $(EXTRA_DIST); do \
cp $(srcdir)/$$file `dirname $$file`; \
done \
fi
-
- cd perl && @PERL@ Makefile.PL PREFIX=$(prefix) @PERL_BINDINGS_OPTIONS@
-
+ cd perl && @PERL@ Makefile.PL PREFIX="$(prefix)" TOP_BUILDDIR="$(top_builddir)" TARGET_LIBDIR="$(libdir)" @PERL_BINDINGS_OPTIONS@
.PHONY: perl perl-bindings
index 2d272a8fbb2064bf75e7b3e873b2e2c577954082..c4061128970c635330f2c18166f7c222b0b0e6be 100644 (file)
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;
+
+# 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=(.*[^/])#)
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--;
+ }
}
-for (my $i = 0; $i < @OPING_PREFIX; $i++)
+if (!$TOP_BUILDDIR)
{
- if (!-e $OPING_PREFIX[$i] . '/include/oping.h')
+ for (my $i = 0; $i < @OPING_PREFIX; $i++)
{
- next;
+ if (!-e $OPING_PREFIX[$i] . '/include/oping.h')
+ {
+ next;
+ }
+
+ $OPING_PREFIX = $OPING_PREFIX[$i];
+ print "Found <oping.h> in $OPING_PREFIX/include\n";
+ last;
}
+}
- $OPING_PREFIX = $OPING_PREFIX[$i];
- print "Found <oping.h> in $OPING_PREFIX/include\n";
- last;
+if ($TOP_BUILDDIR)
+{
+ # 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)
+ {
+ $OPING_LDDLFLAGS .= qq( -Wl,-rpath -Wl,"$TARGET_LIBDIR");
+ }
+}
+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 <<EOF;
? (ABSTRACT_FROM => 'lib/Net/Oping.pm',
AUTHOR => 'Florian Forster <octo@verplant.org>')
: ()),
- LIBS => ["-L$OPING_PREFIX/lib -loping"],
+ 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);
+ }
+ }
+}