-
-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #10955 from NixOS/meson-nix-util-c
Build nix-util-c with meson + unit tests
- Loading branch information
Showing
16 changed files
with
768 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
../../.version |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,117 @@ | ||
project('nix-util-c', 'cpp', | ||
version : files('.version'), | ||
default_options : [ | ||
'cpp_std=c++2a', | ||
# TODO(Qyriad): increase the warning level | ||
'warning_level=1', | ||
'debug=true', | ||
'optimization=2', | ||
'errorlogs=true', # Please print logs for tests that fail | ||
], | ||
meson_version : '>= 1.1', | ||
license : 'LGPL-2.1-or-later', | ||
) | ||
|
||
cxx = meson.get_compiler('cpp') | ||
|
||
# See note in ../nix-util/meson.build | ||
deps_private = [ ] | ||
|
||
# See note in ../nix-util/meson.build | ||
deps_public = [ ] | ||
|
||
# See note in ../nix-util/meson.build | ||
deps_other = [ ] | ||
|
||
configdata = configuration_data() | ||
|
||
add_project_arguments( | ||
# TODO(Qyriad): Yes this is how the autoconf+Make system did it. | ||
# It would be nice for our headers to be idempotent instead. | ||
'-include', 'config-util.h', | ||
# '-include', 'config-store.h', | ||
'-Wno-deprecated-declarations', | ||
'-Wimplicit-fallthrough', | ||
'-Werror=switch', | ||
'-Werror=switch-enum', | ||
'-Wdeprecated-copy', | ||
'-Wignored-qualifiers', | ||
# Enable assertions in libstdc++ by default. Harmless on libc++. Benchmarked | ||
# at ~1% overhead in `nix search`. | ||
# | ||
# FIXME: remove when we get meson 1.4.0 which will default this to on for us: | ||
# https://mesonbuild.com/Release-notes-for-1-4-0.html#ndebug-setting-now-controls-c-stdlib-assertions | ||
'-D_GLIBCXX_ASSERTIONS=1', | ||
language : 'cpp', | ||
) | ||
|
||
sources = files( | ||
'nix_api_util.cc', | ||
) | ||
|
||
include_dirs = [include_directories('.')] | ||
|
||
headers = files( | ||
'nix_api_util.h', | ||
'nix_api_util_internal.h', | ||
) | ||
|
||
if host_machine.system() == 'cygwin' or host_machine.system() == 'windows' | ||
# Windows DLLs are stricter about symbol visibility than Unix shared | ||
# objects --- see https://gcc.gnu.org/wiki/Visibility for details. | ||
# This is a temporary sledgehammer to export everything like on Unix, | ||
# and not detail with this yet. | ||
# | ||
# TODO do not do this, and instead do fine-grained export annotations. | ||
linker_export_flags = ['-Wl,--export-all-symbols'] | ||
else | ||
linker_export_flags = [] | ||
endif | ||
|
||
nix_util = dependency('nix-util') | ||
if nix_util.type_name() == 'internal' | ||
# subproject sadly no good for pkg-config module | ||
deps_other += nix_util | ||
else | ||
deps_public += nix_util | ||
endif | ||
|
||
# TODO rename, because it will conflict with downstream projects | ||
configdata.set_quoted('PACKAGE_VERSION', meson.project_version()) | ||
|
||
config_h = configure_file( | ||
configuration : configdata, | ||
output : 'config-util.h', | ||
) | ||
|
||
this_library = library( | ||
'nixutilc', | ||
sources, | ||
dependencies : deps_public + deps_private + deps_other, | ||
include_directories : include_dirs, | ||
link_args: linker_export_flags, | ||
install : true, | ||
) | ||
|
||
install_headers(headers, subdir : 'nix', preserve_path : true) | ||
|
||
libraries_private = [] | ||
|
||
import('pkgconfig').generate( | ||
this_library, | ||
filebase : meson.project_name(), | ||
name : 'Nix', | ||
description : 'Nix Package Manager', | ||
subdirs : ['nix'], | ||
extra_cflags : ['-std=c++2a'], | ||
requires : deps_public, | ||
requires_private : deps_private, | ||
libraries_private : libraries_private, | ||
) | ||
|
||
meson.override_dependency(meson.project_name(), declare_dependency( | ||
include_directories : include_dirs, | ||
link_with : this_library, | ||
compile_args : ['-std=c++2a'], | ||
dependencies : [], | ||
)) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
# vim: filetype=meson |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
prefix=@prefix@ | ||
libdir=@libdir@ | ||
includedir=@includedir@ | ||
|
||
Name: Nix libutil C API | ||
Description: Common functions for the Nix C API, such as error handling | ||
Version: @PACKAGE_VERSION@ | ||
Libs: -L${libdir} -lnixutil | ||
Cflags: -I${includedir}/nix -std=c++2a |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,96 @@ | ||
{ lib | ||
, stdenv | ||
, releaseTools | ||
, fileset | ||
|
||
, meson | ||
, ninja | ||
, pkg-config | ||
|
||
, nix-util | ||
|
||
# Configuration Options | ||
|
||
, versionSuffix ? "" | ||
|
||
# Check test coverage of Nix. Probably want to use with at least | ||
# one of `doCheck` or `doInstallCheck` enabled. | ||
, withCoverageChecks ? false | ||
}: | ||
|
||
let | ||
version = lib.fileContents ./.version + versionSuffix; | ||
|
||
mkDerivation = | ||
if withCoverageChecks | ||
then | ||
# TODO support `finalAttrs` args function in | ||
# `releaseTools.coverageAnalysis`. | ||
argsFun: | ||
releaseTools.coverageAnalysis (let args = argsFun args; in args) | ||
else stdenv.mkDerivation; | ||
in | ||
|
||
mkDerivation (finalAttrs: { | ||
pname = "nix-util-c"; | ||
inherit version; | ||
|
||
src = fileset.toSource { | ||
root = ./.; | ||
fileset = fileset.unions [ | ||
./meson.build | ||
./meson.options | ||
(fileset.fileFilter (file: file.hasExt "cc") ./.) | ||
(fileset.fileFilter (file: file.hasExt "hh") ./.) | ||
(fileset.fileFilter (file: file.hasExt "h") ./.) | ||
]; | ||
}; | ||
|
||
outputs = [ "out" "dev" ]; | ||
|
||
nativeBuildInputs = [ | ||
meson | ||
ninja | ||
pkg-config | ||
]; | ||
|
||
buildInputs = [ | ||
nix-util | ||
] | ||
; | ||
|
||
propagatedBuildInputs = [ | ||
nix-util | ||
]; | ||
|
||
preConfigure = | ||
# "Inline" .version so it's not a symlink, and includes the suffix | ||
'' | ||
echo ${version} > .version | ||
''; | ||
|
||
mesonFlags = [ | ||
]; | ||
|
||
env = lib.optionalAttrs (stdenv.isLinux && !(stdenv.hostPlatform.isStatic && stdenv.system == "aarch64-linux")) { | ||
LDFLAGS = "-fuse-ld=gold"; | ||
}; | ||
|
||
enableParallelBuilding = true; | ||
|
||
separateDebugInfo = !stdenv.hostPlatform.isStatic; | ||
|
||
# TODO Always true after https://github.com/NixOS/nixpkgs/issues/318564 | ||
strictDeps = !withCoverageChecks; | ||
|
||
hardeningDisable = lib.optional stdenv.hostPlatform.isStatic "pie"; | ||
|
||
meta = { | ||
platforms = lib.platforms.unix ++ lib.platforms.windows; | ||
}; | ||
|
||
} // lib.optionalAttrs withCoverageChecks { | ||
lcovFilter = [ "*/boost/*" "*-tab.*" ]; | ||
|
||
hardeningDisable = [ "fortify" ]; | ||
}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
../tests/unit/libutil/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
../tests/unit/libutil-support/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
../../../.version |
Oops, something went wrong.