Skip to content

Hugmeir/p5-alien-libzookeeper

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

NAME

Alien::libzookeeper - libzookeeper, with alien

VERSION

Version 0.02

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.

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 segfault on connection errors.

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!

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)

About

libzookeeper.a in Alien:: form

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages