Skip to content

Commit 2156b8e

Browse files
authored
Merge pull request #610 from NixOS/cmake
Add CMake build
2 parents f8621b6 + 51cf74c commit 2156b8e

File tree

7 files changed

+112
-21
lines changed

7 files changed

+112
-21
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ Makefile
1818
.deps
1919
*.o
2020

21+
CMakeLists.txt.user
22+
2123
/tests/*.log
2224
/tests/*.trs
2325
/tests/no-rpath

CMakeLists.txt

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
cmake_minimum_required(VERSION 3.5)
2+
3+
project(patchelf)
4+
5+
include(GNUInstallDirs)
6+
7+
set(CMAKE_CXX_STANDARD 17)
8+
set(CMAKE_CXX_EXTENSIONS OFF)
9+
10+
set(PAGESIZE 4096)
11+
12+
set(ADDITIONAL_HEADERS src/elf.h)
13+
14+
set(SOURCES src/patchelf.cc)
15+
16+
file(READ version VERSION)
17+
18+
add_executable(${PROJECT_NAME} ${SOURCES} ${ADDITIONAL_HEADERS})
19+
20+
target_compile_definitions(
21+
patchelf PRIVATE PAGESIZE=${PAGESIZE}
22+
PACKAGE_STRING="patchelf ${VERSION_STRING}")
23+
24+
install(TARGETS patchelf RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
25+
26+
install(FILES patchelf.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)
27+
28+
install(FILES README.md DESTINATION ${CMAKE_INSTALL_DOCDIR})
29+
30+
install(FILES completions/zsh/_patchelf
31+
DESTINATION ${CMAKE_INSTALL_DATADIR}/zsh/site-functions)

README.md

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ libraries. In particular, it can do the following:
7272

7373
## Compiling and Testing
7474

75-
### Via Autotools
75+
### Via [GNU Autotools](https://www.gnu.org/software/automake/manual/html_node/Autotools-Introduction.html)
7676
```console
7777
./bootstrap.sh
7878
./configure
@@ -81,6 +81,16 @@ make check
8181
sudo make install
8282
```
8383

84+
## Via [CMake](https://cmake.org/) (and [Ninja](https://ninja-build.org/))
85+
86+
```console
87+
mkdir build
88+
cd build
89+
cmake .. -GNinja
90+
ninja all
91+
sudo ninja install
92+
```
93+
8494
### Via Nix
8595

8696
You can build with Nix in several ways.

flake.nix

Lines changed: 48 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -30,27 +30,37 @@
3030
version = lib.removeSuffix "\n" (builtins.readFile ./version);
3131
pkgs = nixpkgs.legacyPackages.x86_64-linux;
3232

33-
src = lib.fileset.toSource {
33+
baseSrcFiles = [
34+
./COPYING
35+
./README.md
36+
./completions
37+
./patchelf.1
38+
./patchelf.spec.in
39+
./src
40+
./tests
41+
./version
42+
];
43+
44+
autotoolsSrcFiles = [
45+
./Makefile.am
46+
./configure.ac
47+
./m4
48+
];
49+
50+
cmakeSrcFiles = [
51+
./CMakeLists.txt
52+
];
53+
54+
autotoolsSrc = lib.fileset.toSource {
3455
root = ./.;
35-
fileset = lib.fileset.unions [
36-
./COPYING
37-
./Makefile.am
38-
./README.md
39-
./completions
40-
./configure.ac
41-
./m4
42-
./patchelf.1
43-
./patchelf.spec.in
44-
./src
45-
./tests
46-
./version
47-
];
56+
fileset = lib.fileset.unions (baseSrcFiles ++ autotoolsSrcFiles);
4857
};
4958

5059
patchelfFor =
5160
pkgs:
52-
pkgs.callPackage ./package.nix {
53-
inherit version src;
61+
pkgs.callPackage ./package-autotools.nix {
62+
inherit version;
63+
src = autotoolsSrc;
5464
};
5565

5666
# We don't apply flake-parts to the whole flake so that non-development attributes
@@ -76,7 +86,11 @@
7686
hydraJobs = {
7787
tarball = pkgs.releaseTools.sourceTarball rec {
7888
name = "patchelf-tarball";
79-
inherit version src;
89+
inherit version;
90+
src = lib.fileset.toSource {
91+
root = ./.;
92+
fileset = lib.fileset.unions (baseSrcFiles ++ autotoolsSrcFiles ++ cmakeSrcFiles);
93+
};
8094
versionSuffix = ""; # obsolete
8195
preAutoconf = "echo ${version} > version";
8296

@@ -117,6 +131,8 @@
117131
})
118132
);
119133

134+
build-cmake = forAllSystems (system: self.packages.${system}.patchelf-cmake);
135+
120136
# x86_64-linux seems to be only working clangStdenv at the moment
121137
build-sanitized-clang = lib.genAttrs [ "x86_64-linux" ] (
122138
system:
@@ -134,6 +150,7 @@
134150
self.hydraJobs.tarball
135151
self.hydraJobs.build.x86_64-linux
136152
self.hydraJobs.build.i686-linux
153+
self.hydraJobs.build-cmake.x86_64-linux
137154
# FIXME: add aarch64 emulation to our github action...
138155
#self.hydraJobs.build.aarch64-linux
139156
self.hydraJobs.build-sanitized.x86_64-linux
@@ -172,8 +189,10 @@
172189
}";
173190
};
174191
nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [
192+
#pkgs.buildPackages.cmake
193+
#pkgs.buildPackages.ninja
175194
modular.pre-commit.settings.package
176-
(pkgs.writeScriptBin "pre-commit-hooks-install" modular.pre-commit.settings.installationScript)
195+
(pkgs.buildPackages.writeScriptBin "pre-commit-hooks-install" modular.pre-commit.settings.installationScript)
177196
];
178197
}
179198
);
@@ -194,8 +213,9 @@
194213

195214
patchelfForWindowsStatic =
196215
pkgs:
197-
(pkgs.callPackage ./package.nix {
198-
inherit version src;
216+
(pkgs.callPackage ./package-autotools.nix {
217+
inherit version;
218+
src = autotoolsSrc;
199219
# On windows we use win32 threads to get a static binary,
200220
# otherwise `-static` below doesn't work.
201221
stdenv = pkgs.stdenv.override (old: {
@@ -217,6 +237,14 @@
217237
patchelf = patchelfFor pkgs;
218238
default = self.packages.${system}.patchelf;
219239

240+
patchelf-cmake = pkgs.callPackage ./package-cmake.nix {
241+
inherit version;
242+
src = lib.fileset.toSource {
243+
root = ./.;
244+
fileset = lib.fileset.unions (baseSrcFiles ++ cmakeSrcFiles);
245+
};
246+
};
247+
220248
# This is a good test to see if packages can be cross-compiled. It also
221249
# tests if our testsuite uses target-prefixed executable names.
222250
patchelf-musl-cross = patchelfFor pkgs.pkgsCross.musl64;

maintainers/flake-module.nix

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@
3737
fi
3838
''}";
3939
};
40+
cmake-format = {
41+
enable = true;
42+
};
4043
nixfmt-rfc-style = {
4144
enable = true;
4245
};
File renamed without changes.

package-cmake.nix

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

0 commit comments

Comments
 (0)