]>
Dogcows Code - chaz/p5-Alien-ZMQ/blob - inc/My/Build.pm
4 use warnings FATAL
=> 'all';
10 use Digest
::SHA qw
/sha1_hex/;
11 use File
::Path qw
/remove_tree/;
12 use File
::Spec
::Functions qw
/catdir catfile/;
13 use IPC
::Cmd qw
/can_run run/;
14 use LWP
::Simple qw
/getstore RC_OK/;
17 use base
'Module::Build';
22 $self->SUPER::ACTION_code
;
24 return if -e
'build-zeromq';
25 $self->add_to_cleanup('build-zeromq');
27 my %args = $self->args;
30 $self->have_c_compiler or die "C compiler not found";
32 unless (exists $args{'zmq-skip-probe'}) {
34 %vars = $self->probe_zeromq;
37 if ($vars{inc_version
} && $vars{lib_version
}) {
38 say "Found ØMQ $vars{lib_version}; skipping installation";
40 say "ØMQ not found; building from source...";
41 %vars = $self->install_zeromq;
44 # write vars to ZMQ.pm
45 my $module = catfile qw
/blib lib Alien ZMQ.pm/;
46 open my $LIB, "<$module" or die "Cannot read module";
47 my $lib = do { local $/; <$LIB> };
49 $lib =~ s/^sub inc_dir.*$/sub inc_dir { "$vars{inc_dir}" }/m;
50 $lib =~ s/^sub lib_dir.*$/sub lib_dir { "$vars{lib_dir}" }/m;
51 $lib =~ s/^sub inc_version.*$/sub inc_version { v$vars{inc_version} }/m;
52 $lib =~ s/^sub lib_version.*$/sub lib_version { v$vars{lib_version} }/m;
53 my @stats = stat $module;
55 open $LIB, ">$module" or die "Cannot write config to module";
58 chmod $stats[2], $module;
60 open my $TARGET, ">build-zeromq";
61 print $TARGET time, "\n";
67 my $cb = $self->cbuilder;
68 my %config = $cb->get_config;
70 my $src = "test-$$.c";
71 open my $SRC, ">$src";
75 int main(int argc, char* argv[]) {
76 int major, minor, patch;
77 zmq_version(&major, &minor, &patch);
78 printf("%d.%d.%d %d.%d.%d",
79 ZMQ_VERSION_MAJOR, ZMQ_VERSION_MINOR, ZMQ_VERSION_PATCH,
89 my $cflags = $self->args('zmq-cflags');
90 my $libs = $self->args('zmq-libs');
94 my $pkg_config = $ENV{PKG_CONFIG_COMMAND
} || "pkg-config";
95 for my $pkg (qw
/libzmq zeromq3/) {
96 $pkg_version = `$pkg_config $pkg --modversion`;
98 next unless $pkg_version;
100 $cflags ||= `$pkg_config $pkg --cflags`;
101 $libs ||= `$pkg_config $pkg --libs`;
103 # use -I and -L flag arguments as extra search directories
104 my $inc = `$pkg_config $pkg --cflags-only-I`;
105 push @inc_search, map { s/^-I//; $_ } split(/\s+/, $inc);
106 my $lib = `$pkg_config $pkg --libs-only-L`;
107 push @lib_search, map { s/^-L//; $_ } split(/\s+/, $lib);
113 $cb->compile(source
=> $src, include_dirs
=> [@inc_search], extra_compiler_flags
=> $cflags);
119 $cb->link_executable(objects
=> $obj, extra_linker_flags
=> $libs);
126 my ($inc_version, $lib_version) = $out =~ /(\d\.\d\.\d) (\d\.\d\.\d)/;
128 # query the compiler for include and library search paths
129 push @lib_search, map {
133 -d $path ? realpath($path) : ();
134 } split /:/, `$config{cc
} -print-search-dirs
`;
135 push @inc_search, map {
137 $path =~ s/lib(32|64)?$/include/;
141 # search for the header and library files
142 my ($inc_dir) = grep { -f catfile($_, "zmq.h") } @inc_search;
143 my ($lib_dir) = grep { -f catfile($_, $cb->lib_file("libzmq")) } @lib_search;
146 inc_version => $inc_version,
147 lib_version => $lib_version,
148 pkg_version => $pkg_version,
157 can_run("libtool") or die "The libtool command cannot be found";
159 my $version = $self->notes('zmq-version');
160 my $sha1 = $self->notes('zmq-sha1');
161 my $archive = "zeromq-$version.tar.gz";
163 say "Downloading ØMQ $version source archive from download.zeromq.org...";
164 getstore("http://download.zeromq.org/$archive", $archive) == RC_OK
165 or die "Failed to download ØMQ source archive";
168 my $sha1sum = Digest::SHA->new;
169 open my $ARCHIVE, "<$archive";
171 $sha1sum->addfile($ARCHIVE);
173 $sha1sum->hexdigest eq $sha1 or die "Source archive checksum mismatch";
176 Archive::Tar->new($archive)->extract;
179 my $prefix = catdir($self->install_destination("lib"), qw/auto share dist Alien-ZMQ/);
180 my $basedir = $self->base_dir;
181 my $datadir = catdir($basedir, "share");
182 my $srcdir = catdir($basedir, "zeromq-$version");
184 say "Configuring...";
185 my @config = split(/\s/, $self->args('zmq-config') || "");
187 run(command => ["./configure", "--prefix=$prefix", @config])
188 or die "Failed to configure ØMQ";
191 run(command => ['make']) or die "Failed to make ØMQ";
194 run(command => [qw|make install prefix=/|, "DESTDIR=$datadir"])
195 or die "Failed to install ØMQ";
198 remove_tree($srcdir);
201 inc_version => $version,
202 lib_version => $version,
203 inc_dir => catdir($prefix, "include"),
204 lib_dir => catdir($prefix, "lib"),
This page took 0.046936 seconds and 5 git commands to generate.