#!/usr/bin/env perl
use strict;
use File::Spec;
# probe env vars first, as you may have wanted to override
# any auto-discoverable values
probe_envvars();
probe_pkgconfig();
sub probe_envvars {
print "Probing environment variables:\n";
my $home = $ENV{"CZMQ_HOME"};
if (! $ENV{"CZMQ_INCLUDES"}) {
my @incpaths;
if ($ENV{INCLUDES}) {
print " + Detected CZMQ_INCLUDES from INCLUDES (deprecated)...\n";
push @incpaths, $ENV{INCLUDES};
}
if ($home) {
my $zmq_inc = File::Spec->catdir( $home, 'include' );
if (-e $zmq_inc) {
print " + Detected CZMQ_INCLUDES from CZMQ_HOME...\n";
push @incpaths, $zmq_inc;
}
}
if (@incpaths) {
$ENV{"CZMQ_INCLUDES"} = join ' ', @incpaths;
}
}
if (! $ENV{"CZMQ_H"}) {
if ($home) {
my $zmq_header = File::Spec->catfile( $home, 'include', 'czmq.h' );
if ( -f $zmq_header ) {
print " + Detected CZMQ_H from CZMQ_HOME...\n";
$ENV{"CZMQ_H"} = $zmq_header;
}
}
}
if (! $ENV{"CZMQ_LIBS"}) {
my @libs;
if ($ENV{LIBS}) {
print " + Detected CZMQ_LIBS from LIBS (deprecated)...\n";
push @libs, $ENV{LIBS};
}
if ($home) {
my $zmq_lib = File::Spec->catdir( $home, 'lib' );
if (-e $zmq_lib) {
print " + Detected CZMQ_LIBS from CZMQ_HOME...\n";
push @libs, sprintf '-L%s', $zmq_lib;
}
}
if (@libs) {
$ENV{"CZMQ_LIBS"} = join ' ', @libs;
}
}
}
# Note: At this point probe_envvars should have taken care merging
# deprecated INCLUDES/LIBS into %ENV
sub probe_pkgconfig {
my $pkg_config = $ENV{ PKGCONFIG_CMD } || 'pkg-config';
foreach my $pkg ( qw(libczmq) ) {
print "Probing $pkg via $pkg_config ...\n";
my $version = qx/$pkg_config --modversion $pkg/;
chomp $version;
if (! $version) {
print " - No $pkg found...\n";
next;
}
print " + found $pkg $version\n";
my ($major, $minor, $micro) = split /\./, $version;
if ($major == 1 && $minor <= 1) {
print " * detected a version of czmq where the following functions are declared with void return value...\n";
my @fucked = qw(
zsocket_connetct
zframe_send
zmsg_push
zmsg_add
zmsg_pushmem
zmsg_addmem
);
foreach my $fucked (@fucked) {
print " - $fucked\n";
}
$ENV{ CZMQ_VOID_RETURN_VALUES } = 1;
}
$ENV{CZMQ_VERSION_MAJOR} = $major;
$ENV{CZMQ_VERSION_MINOR} = $minor;
$ENV{CZMQ_VERSION_PATCH} = $micro;
if (! $ENV{CZMQ_INCLUDES}) {
if (my $cflags = qx/$pkg_config --cflags-only-I $pkg/) {
chomp $cflags;
print " + Detected CZMQ_INCLUDES from $pkg_config...\n";
my @paths = map { s/^-I//; $_ } split /\s+/, $cflags;
$ENV{CZMQ_INCLUDES} = join ' ', @paths;
if (! $ENV{CZMQ_H}) {
foreach my $path (@paths) {
my $zmq_h = File::Spec->catfile($path, 'zmq.h');
if (-f $zmq_h) {
print " + Detected CZMQ_H from $pkg_config...\n";
$ENV{CZMQ_H} = $zmq_h;
last;
}
}
}
}
}
if (! $ENV{CZMQ_LIBS}) {
if (my $libs = qx/$pkg_config --libs $pkg/) {
chomp $libs;
print " + Detected CZMQ_LIBS from $pkg_config...\n";
$ENV{CZMQ_LIBS} = $libs;
}
}
last;
}
}