NAME
Alien::libzookeeper - libzookeeper, with alien
VERSION
Version 0.04
SYNOPSIS
use Alien::libzookeeper;
Alien::libzookeeper->libs;
Alien::libzookeeper->libs_static;
Alien::libzookeeper->cflags;
# Or a more realistic example; in your makefile:
use Config;
my $zk_libs = Alien::libzookeeper->libs;
my $zk_libs_static = Alien::libzookeeper->libs_static;
my $lddflags = $Config{lddlflags} // '';
$lddlflags .= ' ';
my $libext = $Config{lib_ext};
if ( $libs_static =~ /libzookeeper\.\Q$libext\E/ ) {
# We can statically link against libzookeeper.
# To link statically, we need to pass arguments to `ld`, not to the C
# compiler, and we need to drop the dynamic version from the arguments:
$_ =~ s/-lzookeeper\b// for $zk_libs, $zk_libs_static;
$lddlflags .= ' ' . $zk_libs_static;
}
WriteMakefile(
INC => Alien::libzookeeper->cflags,
LIBS => [ $zk_libs ],
LDDLFLAGS => [ $lddlflags ],
...
);
DESCRIPTION
Alien::libzookeeper
is an Alien
interface to libzookeeper
.
Turns out that libzookeeper
is pretty hard to get hold of! It's source is shipped as part of ZooKeeper, so in some systems you need to install ZooKeeper -- and all the Java stack it needs -- just to get the C shared library.
In other systems, you can get it from package managers just fine, but it doesn't have a pkg-config
meta file, and so finding it ends up requiring writing and running C.
And in some systems (Alpine, Arch-Linux) there's just no way to get the library.
And even if you got it -- it might be called libzookeeper_mt
instead!
This module tries very hard to get a working libzookeeper
: It checks pkg-config, it checks by compiling code, and if there's nothing in the system that we can use, it builds version 3.5.6 from source.
NOTES
The built-from-source version comes with some caveats!
First, we use version 3.5.6 because that's the last official release that can be built from source without needing Java; see https://issues.apache.org/jira/browse/ZOOKEEPER-3530 for details.
Second, we patch a bug fixed upstream in the 3.6.x releases that lead to segfaults on connection errors; see https://issues.apache.org/jira/browse/ZOOKEEPER-3954
Third, we patch its CMakeLists.txt
with some missing make targets; see https://issues.apache.org/jira/browse/ZOOKEEPER-4012.
Fourth, we patch its CMakeLists.txt
to change how it generates the statically-linked libzookeeper.a
; see https://issues.apache.org/jira/browse/ZOOKEEPER-4014
Fifth, we patch its build process to generate a pkg-config
meta file; see https://issues.apache.org/jira/browse/ZOOKEEPER-4013
Hopefully as the above get addressed, there will be less and less cases where this module ends up building the library itself; or at least we'll be able to get rid of some of these patches!
AUTHOR
B Fraser, <fraserbn at gmail.com>
BUGS
Please report any bugs or feature requests to bug-alien-libzookeeper at rt.cpan.org
, or through the web interface at https://rt.cpan.org/NoAuth/ReportBug.html?Queue=Alien-libzookeeper. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.
LICENSE AND COPYRIGHT
This software is Copyright (c) 2020 by B Fraser.
This is free software, licensed under:
The Artistic License 2.0 (GPL Compatible)