Merge "meson: implement perl bindings" into main
This commit is contained in:
commit
fa4a0fc6a4
4 changed files with 152 additions and 10 deletions
|
@ -316,6 +316,6 @@ in stdenv.mkDerivation (finalAttrs: {
|
|||
meta.platforms = lib.platforms.unix;
|
||||
|
||||
passthru.perl-bindings = pkgs.callPackage ./perl {
|
||||
inherit fileset stdenv;
|
||||
inherit fileset stdenv buildWithMeson;
|
||||
};
|
||||
})
|
||||
|
|
|
@ -3,6 +3,9 @@
|
|||
, perl, perlPackages
|
||||
, autoconf-archive, autoreconfHook, pkg-config
|
||||
, nix, curl, bzip2, xz, boost, libsodium, darwin
|
||||
, meson
|
||||
, ninja
|
||||
, buildWithMeson ? false,
|
||||
}:
|
||||
|
||||
perl.pkgs.toPerlModule (stdenv.mkDerivation {
|
||||
|
@ -10,23 +13,32 @@ perl.pkgs.toPerlModule (stdenv.mkDerivation {
|
|||
|
||||
src = fileset.toSource {
|
||||
root = ../.;
|
||||
fileset = fileset.unions [
|
||||
fileset = fileset.unions ([
|
||||
../.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
|
||||
../mk
|
||||
./MANIFEST
|
||||
./Makefile
|
||||
./Makefile.config.in
|
||||
./configure.ac
|
||||
./lib
|
||||
./local.mk
|
||||
];
|
||||
] ++ lib.optionals buildWithMeson [
|
||||
./meson.build
|
||||
]);
|
||||
};
|
||||
|
||||
nativeBuildInputs =
|
||||
[ autoconf-archive
|
||||
autoreconfHook
|
||||
nativeBuildInputs = [
|
||||
pkg-config
|
||||
] ++ lib.optionals (!buildWithMeson) [
|
||||
autoconf-archive
|
||||
autoreconfHook
|
||||
] ++ lib.optionals buildWithMeson [
|
||||
meson
|
||||
ninja
|
||||
];
|
||||
|
||||
buildInputs =
|
||||
|
@ -42,6 +54,9 @@ perl.pkgs.toPerlModule (stdenv.mkDerivation {
|
|||
++ lib.optional (stdenv.isLinux || stdenv.isDarwin) libsodium
|
||||
++ lib.optional stdenv.isDarwin darwin.apple_sdk.frameworks.Security;
|
||||
|
||||
# Nixpkgs' Meson hook likes to set this to "plain".
|
||||
mesonBuildType = "debugoptimized";
|
||||
|
||||
enableParallelBuilding = true;
|
||||
|
||||
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