Skip to content

Commit a252740

Browse files
authored
Merge pull request #604 from obsidiansystems/meson
Add Meson build
2 parents 2156b8e + a7c595d commit a252740

File tree

7 files changed

+141
-3
lines changed

7 files changed

+141
-3
lines changed

flake.nix

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,25 @@
3636
./completions
3737
./patchelf.1
3838
./patchelf.spec.in
39-
./src
40-
./tests
39+
(lib.fileset.difference ./src (
40+
lib.fileset.unions [
41+
./src/Makefile.am
42+
./src/meson.build
43+
]
44+
))
45+
(lib.fileset.difference ./tests (
46+
lib.fileset.unions [
47+
./tests/Makefile.am
48+
#./tests/meson.build
49+
]
50+
))
4151
./version
4252
];
4353

4454
autotoolsSrcFiles = [
4555
./Makefile.am
56+
./src/Makefile.am
57+
./tests/Makefile.am
4658
./configure.ac
4759
./m4
4860
];
@@ -51,6 +63,12 @@
5163
./CMakeLists.txt
5264
];
5365

66+
mesonSrcFiles = [
67+
./meson.build
68+
./meson.options
69+
./src/meson.build
70+
];
71+
5472
autotoolsSrc = lib.fileset.toSource {
5573
root = ./.;
5674
fileset = lib.fileset.unions (baseSrcFiles ++ autotoolsSrcFiles);
@@ -89,7 +107,7 @@
89107
inherit version;
90108
src = lib.fileset.toSource {
91109
root = ./.;
92-
fileset = lib.fileset.unions (baseSrcFiles ++ autotoolsSrcFiles ++ cmakeSrcFiles);
110+
fileset = lib.fileset.unions (baseSrcFiles ++ autotoolsSrcFiles ++ cmakeSrcFiles ++ mesonSrcFiles);
93111
};
94112
versionSuffix = ""; # obsolete
95113
preAutoconf = "echo ${version} > version";
@@ -133,6 +151,8 @@
133151

134152
build-cmake = forAllSystems (system: self.packages.${system}.patchelf-cmake);
135153

154+
build-meson = forAllSystems (system: self.packages.${system}.patchelf-meson);
155+
136156
# x86_64-linux seems to be only working clangStdenv at the moment
137157
build-sanitized-clang = lib.genAttrs [ "x86_64-linux" ] (
138158
system:
@@ -151,6 +171,7 @@
151171
self.hydraJobs.build.x86_64-linux
152172
self.hydraJobs.build.i686-linux
153173
self.hydraJobs.build-cmake.x86_64-linux
174+
self.hydraJobs.build-meson.x86_64-linux
154175
# FIXME: add aarch64 emulation to our github action...
155176
#self.hydraJobs.build.aarch64-linux
156177
self.hydraJobs.build-sanitized.x86_64-linux
@@ -190,6 +211,7 @@
190211
};
191212
nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [
192213
#pkgs.buildPackages.cmake
214+
#pkgs.buildPackages.meson
193215
#pkgs.buildPackages.ninja
194216
modular.pre-commit.settings.package
195217
(pkgs.buildPackages.writeScriptBin "pre-commit-hooks-install" modular.pre-commit.settings.installationScript)
@@ -245,6 +267,14 @@
245267
};
246268
};
247269

270+
patchelf-meson = pkgs.callPackage ./package-meson.nix {
271+
inherit version;
272+
src = lib.fileset.toSource {
273+
root = ./.;
274+
fileset = lib.fileset.unions (baseSrcFiles ++ mesonSrcFiles);
275+
};
276+
};
277+
248278
# This is a good test to see if packages can be cross-compiled. It also
249279
# tests if our testsuite uses target-prefixed executable names.
250280
patchelf-musl-cross = patchelfFor pkgs.pkgsCross.musl64;

maintainers/flake-module.nix

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,29 @@
4040
cmake-format = {
4141
enable = true;
4242
};
43+
meson-format =
44+
let
45+
meson = pkgs.meson.overrideAttrs {
46+
doCheck = false;
47+
doInstallCheck = false;
48+
patches = [
49+
(pkgs.fetchpatch {
50+
url = "https://github.com/mesonbuild/meson/commit/38d29b4dd19698d5cad7b599add2a69b243fd88a.patch";
51+
hash = "sha256-PgPBvGtCISKn1qQQhzBW5XfknUe91i5XGGBcaUK4yeE=";
52+
})
53+
];
54+
};
55+
in
56+
{
57+
enable = true;
58+
files = "(meson.build|meson.options)$";
59+
entry = "${pkgs.writeScript "format-meson" ''
60+
#!${pkgs.runtimeShell}
61+
for file in "$@"; do
62+
${lib.getExe meson} format -ic ${../meson.format} "$file"
63+
done
64+
''}";
65+
};
4366
nixfmt-rfc-style = {
4467
enable = true;
4568
};

meson.build

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
project(
2+
'patchelf',
3+
'cpp',
4+
'c',
5+
version : files('version'),
6+
default_options : {
7+
'cpp_std' : 'c++17',
8+
'warning_level' : '2',
9+
},
10+
meson_version : '>=1.2',
11+
)
12+
13+
subdir('src')
14+
#subdir('tests') # TODO
15+
16+
install_man('patchelf.1')
17+
18+
#specfile = configure_file(
19+
# output : 'patchelf.spec',
20+
# configuration : {'PACKAGE_VERSION' : meson.project_version()},
21+
#)
22+
23+
# Commented things out should only be for `meson dist`. Need to
24+
# reimplement for that.
25+
install_data(
26+
'README.md',
27+
#'COPYING',
28+
#specfile,
29+
#'version',
30+
install_dir : get_option('datadir') / 'doc' / 'patchelf',
31+
)
32+
33+
install_data(
34+
'completions/zsh/_patchelf',
35+
install_dir : get_option('datadir') / 'zsh' / 'site-functions',
36+
)

meson.format

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
indent_by = ' '
2+
space_array = true
3+
kwargs_force_multiline = false
4+
wide_colon = true
5+
group_arg_value = true
6+
indent_before_comments = ' '
7+
use_editor_config = true

meson.options

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
option(
2+
'page_size',
3+
type : 'combo',
4+
value : 'auto',
5+
choices : [ 'auto', '4096', '65536', '16384', '8192' ],
6+
description : 'Default page size, or "auto" to detect at runtime',
7+
)

package-meson.nix

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
{
2+
stdenv,
3+
meson,
4+
ninja,
5+
version,
6+
src,
7+
}:
8+
9+
stdenv.mkDerivation {
10+
pname = "patchelf";
11+
inherit version src;
12+
nativeBuildInputs = [
13+
meson
14+
ninja
15+
];
16+
doCheck = true;
17+
}

src/meson.build

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Configure DEFAULT_PAGESIZE via config.h
2+
confdata = configuration_data()
3+
page_size = get_option('page_size')
4+
if page_size != 'auto'
5+
confdata.set_quoted('DEFAULT_PAGESIZE', page_size)
6+
else
7+
# For "auto", leave it undefined so runtime detection happens
8+
endif
9+
10+
config_h = configure_file(output : 'config.h', configuration : confdata)
11+
12+
executable(
13+
'patchelf',
14+
[ 'patchelf.cc', 'patchelf.h', config_h ],
15+
include_directories : include_directories('.'),
16+
cpp_args : [ '-include', meson.current_build_dir() / 'config.h' ],
17+
install : true,
18+
)

0 commit comments

Comments
 (0)