X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fp5-Alien-ZMQ;a=blobdiff_plain;f=inc%2FMy%2FBuild.pm;h=c68ee63b5d30f854d200391c36aeb746ebd76475;hp=8c7d987b4c8410762c6b202227998ededb701e70;hb=9d4ada2dc00d0a5d549a5ab3e58355d06b01fd11;hpb=d1d1d4a38b4bf7ca878456bc3a6952bdec11a000 diff --git a/inc/My/Build.pm b/inc/My/Build.pm index 8c7d987..c68ee63 100644 --- a/inc/My/Build.pm +++ b/inc/My/Build.pm @@ -1,6 +1,6 @@ package My::Build; -use v5.10; +use v5.10.1; use warnings FATAL => 'all'; use strict; use utf8; @@ -10,7 +10,7 @@ use Cwd qw/realpath/; use Digest::SHA qw/sha1_hex/; use File::Path qw/remove_tree/; use File::Spec::Functions qw/catdir catfile/; -use IPC::Cmd qw/can_run run/; +use IPC::Run qw/run/; use LWP::Simple qw/getstore RC_OK/; use Module::Build; @@ -34,7 +34,7 @@ sub ACTION_code { %vars = $self->probe_zeromq; } - if ($vars{inc_version} && $vars{lib_version}) { + if ($vars{inc_version} && $vars{lib_version} && $vars{inc_dir} && $vars{lib_dir}) { say "Found ØMQ $vars{lib_version}; skipping installation"; } else { say "ØMQ not found; building from source..."; @@ -43,7 +43,7 @@ sub ACTION_code { # write vars to ZMQ.pm my $module = catfile qw/blib lib Alien ZMQ.pm/; - open my $LIB, "<$module" or die "Cannot read module"; + open my $LIB, '<', $module or die "Cannot read module"; my $lib = do { local $/; <$LIB> }; close $LIB; $lib =~ s/^sub inc_dir.*$/sub inc_dir { "$vars{inc_dir}" }/m; @@ -52,12 +52,12 @@ sub ACTION_code { $lib =~ s/^sub lib_version.*$/sub lib_version { v$vars{lib_version} }/m; my @stats = stat $module; chmod 0644, $module; - open $LIB, ">$module" or die "Cannot write config to module"; + open $LIB, '>', $module or die "Cannot write config to module"; print $LIB $lib; close $LIB; chmod $stats[2], $module; - open my $TARGET, ">build-zeromq"; + open my $TARGET, '>', "build-zeromq"; print $TARGET time, "\n"; close $TARGET; } @@ -65,9 +65,10 @@ sub ACTION_code { sub probe_zeromq { my $self = shift; my $cb = $self->cbuilder; + my %config = $cb->get_config; my $src = "test-$$.c"; - open my $SRC, ">$src"; + open my $SRC, '>', $src; print $SRC < #include @@ -101,9 +102,9 @@ END # use -I and -L flag arguments as extra search directories my $inc = `$pkg_config $pkg --cflags-only-I`; - push @inc_search, map { s/^-I//; $_ } split(/\s+/, $inc); + push @inc_search, map { s/^-I//; $_ } $cb->split_like_shell($inc); my $lib = `$pkg_config $pkg --libs-only-L`; - push @lib_search, map { s/^-L//; $_ } split(/\s+/, $lib); + push @lib_search, map { s/^-L//; $_ } $cb->split_like_shell($lib); last; } @@ -125,13 +126,12 @@ END my ($inc_version, $lib_version) = $out =~ /(\d\.\d\.\d) (\d\.\d\.\d)/; # query the compiler for include and library search paths - my $cc = $ENV{CC} || "cc"; push @lib_search, map { my $path = $_; $path =~ s/^.+ =?//; $path =~ s/\n.*$//; -d $path ? realpath($path) : (); - } split /:/, `$cc -print-search-dirs`; + } split /:/, `$config{cc} -print-search-dirs`; push @inc_search, map { my $path = $_; $path =~ s/lib(32|64)?$/include/; @@ -140,11 +140,7 @@ END # search for the header and library files my ($inc_dir) = grep { -f catfile($_, "zmq.h") } @inc_search; - my ($lib_dir) = grep { - -f catfile($_, "libzmq.so") || - -f catfile($_, "libzmq.dylib") || - -f catfile($_, "libzmq.dll") - } @lib_search; + my ($lib_dir) = grep { -f catfile($_, $cb->lib_file("libzmq")) } @lib_search; ( inc_version => $inc_version, @@ -157,8 +153,7 @@ END sub install_zeromq { my $self = shift; - - can_run("libtool") or die "The libtool command cannot be found"; + my $cb = $self->cbuilder; my $version = $self->notes('zmq-version'); my $sha1 = $self->notes('zmq-sha1'); @@ -170,7 +165,7 @@ sub install_zeromq { say "Verifying..."; my $sha1sum = Digest::SHA->new; - open my $ARCHIVE, "<$archive"; + open my $ARCHIVE, '<', $archive or die "Can't open source archive"; binmode $ARCHIVE; $sha1sum->addfile($ARCHIVE); close $ARCHIVE; @@ -184,18 +179,23 @@ sub install_zeromq { my $basedir = $self->base_dir; my $datadir = catdir($basedir, "share"); my $srcdir = catdir($basedir, "zeromq-$version"); + chdir $srcdir; + + say "Patching..."; + for my $patch (glob("$basedir/files/zeromq-$version-*.patch")) { + run [qw/patch -p1/], '<', $patch or die "Failed to patch ØMQ"; + } say "Configuring..."; - my @config = split(/\s/, $self->args('zmq-config') || ""); - chdir $srcdir; - run(command => ["./configure", "--prefix=$prefix", @config]) + my @config = $cb->split_like_shell($self->args('zmq-config') || ""); + $cb->do_system(qw/sh configure CPPFLAGS=-Wno-error/, "--prefix=$prefix", @config) or die "Failed to configure ØMQ"; say "Compiling..."; - run(command => ['make']) or die "Failed to make ØMQ"; + $cb->do_system("make") or die "Failed to make ØMQ"; say "Installing..."; - run(command => [qw|make install prefix=/|, "DESTDIR=$datadir"]) + $cb->do_system(qw|make install prefix=/|, "DESTDIR=$datadir") or die "Failed to install ØMQ"; chdir $basedir;