meson: implement perl bindings
Change-Id: Ie1bfb0aa784e6136a82d518a652d0ae60c4b047a
This commit is contained in:
parent
d2aca15f31
commit
4f5e532b8b
4 changed files with 152 additions and 10 deletions
|
@ -316,6 +316,6 @@ in stdenv.mkDerivation (finalAttrs: {
|
||||||
meta.platforms = lib.platforms.unix;
|
meta.platforms = lib.platforms.unix;
|
||||||
|
|
||||||
passthru.perl-bindings = pkgs.callPackage ./perl {
|
passthru.perl-bindings = pkgs.callPackage ./perl {
|
||||||
inherit fileset stdenv;
|
inherit fileset stdenv buildWithMeson;
|
||||||
};
|
};
|
||||||
})
|
})
|
||||||
|
|
|
@ -3,6 +3,9 @@
|
||||||
, perl, perlPackages
|
, perl, perlPackages
|
||||||
, autoconf-archive, autoreconfHook, pkg-config
|
, autoconf-archive, autoreconfHook, pkg-config
|
||||||
, nix, curl, bzip2, xz, boost, libsodium, darwin
|
, nix, curl, bzip2, xz, boost, libsodium, darwin
|
||||||
|
, meson
|
||||||
|
, ninja
|
||||||
|
, buildWithMeson ? false,
|
||||||
}:
|
}:
|
||||||
|
|
||||||
perl.pkgs.toPerlModule (stdenv.mkDerivation {
|
perl.pkgs.toPerlModule (stdenv.mkDerivation {
|
||||||
|
@ -10,24 +13,33 @@ perl.pkgs.toPerlModule (stdenv.mkDerivation {
|
||||||
|
|
||||||
src = fileset.toSource {
|
src = fileset.toSource {
|
||||||
root = ../.;
|
root = ../.;
|
||||||
fileset = fileset.unions [
|
fileset = fileset.unions ([
|
||||||
../.version
|
../.version
|
||||||
|
./lib
|
||||||
|
] ++ lib.optionals (!buildWithMeson) [
|
||||||
|
# FIXME(Qyriad): What the hell is this?
|
||||||
|
# What is it used for and do we still need it?
|
||||||
|
./MANIFEST
|
||||||
../m4
|
../m4
|
||||||
../mk
|
../mk
|
||||||
./MANIFEST
|
|
||||||
./Makefile
|
./Makefile
|
||||||
./Makefile.config.in
|
./Makefile.config.in
|
||||||
./configure.ac
|
./configure.ac
|
||||||
./lib
|
|
||||||
./local.mk
|
./local.mk
|
||||||
];
|
] ++ lib.optionals buildWithMeson [
|
||||||
|
./meson.build
|
||||||
|
]);
|
||||||
};
|
};
|
||||||
|
|
||||||
nativeBuildInputs =
|
nativeBuildInputs = [
|
||||||
[ autoconf-archive
|
pkg-config
|
||||||
autoreconfHook
|
] ++ lib.optionals (!buildWithMeson) [
|
||||||
pkg-config
|
autoconf-archive
|
||||||
];
|
autoreconfHook
|
||||||
|
] ++ lib.optionals buildWithMeson [
|
||||||
|
meson
|
||||||
|
ninja
|
||||||
|
];
|
||||||
|
|
||||||
buildInputs =
|
buildInputs =
|
||||||
[ nix
|
[ nix
|
||||||
|
@ -42,6 +54,9 @@ perl.pkgs.toPerlModule (stdenv.mkDerivation {
|
||||||
++ lib.optional (stdenv.isLinux || stdenv.isDarwin) libsodium
|
++ lib.optional (stdenv.isLinux || stdenv.isDarwin) libsodium
|
||||||
++ lib.optional stdenv.isDarwin darwin.apple_sdk.frameworks.Security;
|
++ lib.optional stdenv.isDarwin darwin.apple_sdk.frameworks.Security;
|
||||||
|
|
||||||
|
# Nixpkgs' Meson hook likes to set this to "plain".
|
||||||
|
mesonBuildType = "debugoptimized";
|
||||||
|
|
||||||
enableParallelBuilding = true;
|
enableParallelBuilding = true;
|
||||||
|
|
||||||
postUnpack = "sourceRoot=$sourceRoot/perl";
|
postUnpack = "sourceRoot=$sourceRoot/perl";
|
||||||
|
|
58
perl/lib/Nix/meson.build
Normal file
58
perl/lib/Nix/meson.build
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
store_xs_cpp = custom_target(
|
||||||
|
input : 'Store.xs',
|
||||||
|
output : 'Store.cc',
|
||||||
|
command : [
|
||||||
|
xsubpp,
|
||||||
|
'@INPUT@',
|
||||||
|
'-output',
|
||||||
|
'@OUTPUT@',
|
||||||
|
],
|
||||||
|
build_by_default : true,
|
||||||
|
)
|
||||||
|
|
||||||
|
soname_args = []
|
||||||
|
if cxx.get_linker_id() in ['ld.bfd', 'ld.gold']
|
||||||
|
soname_args = ['-Wl,-soname=Store.so']
|
||||||
|
endif
|
||||||
|
|
||||||
|
perl_libstore = shared_module(
|
||||||
|
'Store',
|
||||||
|
store_xs_cpp,
|
||||||
|
# This library does NOT get the normal libprefix. it's just `Store.so`, not `libStore.so`.
|
||||||
|
name_prefix : '',
|
||||||
|
dependencies : [
|
||||||
|
libstore,
|
||||||
|
sodium,
|
||||||
|
perl_include,
|
||||||
|
],
|
||||||
|
link_args : [
|
||||||
|
# Nix doesn't provide a pkg-config file for libutil.
|
||||||
|
'-lnixutil',
|
||||||
|
soname_args,
|
||||||
|
],
|
||||||
|
install : true,
|
||||||
|
install_dir : perl_libdir / 'auto/Nix/Store',
|
||||||
|
)
|
||||||
|
|
||||||
|
config_pm = configure_file(
|
||||||
|
input : 'Config.pm.in',
|
||||||
|
output : 'Config.pm',
|
||||||
|
configuration : {
|
||||||
|
'PACKAGE_VERSION': meson.project_version(),
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
nix_perl_sources = files(
|
||||||
|
'Store.pm',
|
||||||
|
'Manifest.pm',
|
||||||
|
'SSH.pm',
|
||||||
|
'CopyClosure.pm',
|
||||||
|
'Utils.pm',
|
||||||
|
)
|
||||||
|
|
||||||
|
install_data(
|
||||||
|
nix_perl_sources,
|
||||||
|
config_pm,
|
||||||
|
install_dir : perl_libdir / 'Nix',
|
||||||
|
preserve_path : true,
|
||||||
|
)
|
69
perl/meson.build
Normal file
69
perl/meson.build
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
project('lix-perl', 'cpp',
|
||||||
|
version : run_command('bash', '-c', 'echo -n $(cat ../.version)$VERSION_SUFFIX', check : true).stdout().strip(),
|
||||||
|
default_options : [
|
||||||
|
'cpp_std=c++2a',
|
||||||
|
# TODO(Qyriad): increase the warning level
|
||||||
|
'debug=true',
|
||||||
|
# FIXME(Qyriad): should this be -O2? The main nix build was switched to -O2 in 3c5234430
|
||||||
|
'optimization=3',
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
fs = import('fs')
|
||||||
|
|
||||||
|
prefix = get_option('prefix')
|
||||||
|
libdir = get_option('libdir')
|
||||||
|
if not fs.is_absolute(libdir)
|
||||||
|
libdir = prefix / libdir
|
||||||
|
endif
|
||||||
|
|
||||||
|
cxx = meson.get_compiler('cpp')
|
||||||
|
|
||||||
|
# Really version 5.8.0, but Perl's version string is of the form
|
||||||
|
# "This is perl 5, version 38, subversion 2", for 5.38.2, so as far
|
||||||
|
# as Meson is concerned, the version of Perl we need is 8 or greater.
|
||||||
|
perl = find_program('perl', version : '>=8')
|
||||||
|
|
||||||
|
# "compiler to convert Perl XS code into C code"
|
||||||
|
xsubpp = find_program('xsubpp')
|
||||||
|
|
||||||
|
perl_version = run_command(
|
||||||
|
perl,
|
||||||
|
'-e',
|
||||||
|
'use Config; print $Config{version};',
|
||||||
|
capture : true,
|
||||||
|
check : true,
|
||||||
|
).stdout()
|
||||||
|
perl_arch_name = run_command(
|
||||||
|
perl,
|
||||||
|
'-e',
|
||||||
|
'use Config; print $Config{archname};',
|
||||||
|
capture : true,
|
||||||
|
check : true,
|
||||||
|
).stdout()
|
||||||
|
|
||||||
|
perl_libdir = f'@libdir@/perl5/site_perl/@perl_version@/@perl_arch_name@'
|
||||||
|
|
||||||
|
perl_incdir = run_command(
|
||||||
|
perl,
|
||||||
|
'-e',
|
||||||
|
'use Config; print $Config{archlibexp};',
|
||||||
|
capture : true,
|
||||||
|
check : true,
|
||||||
|
).stdout() + '/CORE'
|
||||||
|
|
||||||
|
perl_include = declare_dependency(
|
||||||
|
# This must have is_system : true, or #include "config.h" will get perl's config.h
|
||||||
|
# instead of Nix's.
|
||||||
|
include_directories : include_directories(perl_incdir, is_system : true),
|
||||||
|
)
|
||||||
|
|
||||||
|
sodium = dependency('libsodium', 'sodium', required : true)
|
||||||
|
|
||||||
|
if cxx.get_linker_id() in ['ld.bfd', 'ld.gold']
|
||||||
|
add_project_link_arguments('-Wl,--no-copy-dt-needed-entries', language : 'cpp')
|
||||||
|
endif
|
||||||
|
|
||||||
|
libstore = dependency('nixstore', 'nix-store', required : true)
|
||||||
|
|
||||||
|
subdir('lib/Nix')
|
Loading…
Reference in a new issue