-
-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Package
libnixmain
and libnixcmd
with Meson
- Loading branch information
1 parent
b0bc2a9
commit e3753c3
Showing
12 changed files
with
435 additions
and
2 deletions.
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
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -51,6 +51,8 @@ let | |
"nix-expr-tests" | ||
"nix-flake" | ||
"nix-flake-tests" | ||
"nix-main" | ||
"nix-cmd" | ||
]; | ||
in | ||
{ | ||
|
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,120 @@ | ||
project('nix-cmd', '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') | ||
|
||
subdir('build-utils-meson/deps-lists') | ||
|
||
configdata = configuration_data() | ||
|
||
deps_private_maybe_subproject = [ | ||
] | ||
deps_public_maybe_subproject = [ | ||
dependency('nix-util'), | ||
dependency('nix-store'), | ||
dependency('nix-fetchers'), | ||
dependency('nix-expr'), | ||
dependency('nix-flake'), | ||
dependency('nix-main'), | ||
] | ||
subdir('build-utils-meson/subprojects') | ||
|
||
nlohmann_json = dependency('nlohmann_json', version : '>= 3.9') | ||
deps_public += nlohmann_json | ||
|
||
lowdown = dependency('lowdown', version : '>= 0.9.0', required : get_option('markdown')) | ||
deps_private += lowdown | ||
configdata.set('HAVE_LOWDOWN', lowdown.found().to_int()) | ||
|
||
readline_flavor = get_option('readline-flavor') | ||
if readline_flavor == 'editline' | ||
editline = dependency('libeditline', 'editline', version : '>=1.14') | ||
deps_private += editline | ||
elif readline_flavor == 'readline' | ||
readline = dependency('readline') | ||
deps_private += readline | ||
configdata.set( | ||
'USE_READLINME', | ||
1, | ||
description: 'Use readline instead of editline', | ||
) | ||
else | ||
error('illegal editline flavor', readline_flavor) | ||
endif | ||
|
||
config_h = configure_file( | ||
configuration : configdata, | ||
output : 'config-cmd.hh', | ||
) | ||
|
||
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.hh', | ||
'-include', 'config-store.hh', | ||
# '-include', 'config-fetchers.h', | ||
'-include', 'config-main.hh', | ||
'-include', 'config-cmd.hh', | ||
language : 'cpp', | ||
) | ||
|
||
subdir('build-utils-meson/diagnostics') | ||
|
||
sources = files( | ||
'built-path.cc', | ||
'command.cc', | ||
'common-eval-args.cc', | ||
'editor-for.cc', | ||
'installable-attr-path.cc', | ||
'installable-derived-path.cc', | ||
'installable-flake.cc', | ||
'installable-value.cc', | ||
'installables.cc', | ||
'legacy.cc', | ||
'markdown.cc', | ||
'repl-interacter.cc', | ||
'repl.cc', | ||
) | ||
|
||
include_dirs = [include_directories('.')] | ||
|
||
headers = [config_h] + files( | ||
'built-path.hh', | ||
'command.hh', | ||
'common-eval-args.hh', | ||
'editor-for.hh', | ||
'installable-attr-path.hh', | ||
'installable-derived-path.hh', | ||
'installable-flake.hh', | ||
'installable-value.hh', | ||
'installables.hh', | ||
'legacy.hh', | ||
'markdown.hh', | ||
'repl-interacter.hh', | ||
'repl.hh', | ||
) | ||
|
||
this_library = library( | ||
'nixcmd', | ||
sources, | ||
dependencies : deps_public + deps_private + deps_other, | ||
prelink : true, # For C++ static initializers | ||
install : true, | ||
) | ||
|
||
install_headers(headers, subdir : 'nix', preserve_path : true) | ||
|
||
libraries_private = [] | ||
|
||
subdir('build-utils-meson/export') |
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,15 @@ | ||
# vim: filetype=meson | ||
|
||
option( | ||
'markdown', | ||
type: 'feature', | ||
description: 'Enable Markdown rendering in the Nix binary (requires lowdown)', | ||
) | ||
|
||
option( | ||
'readline-flavor', | ||
type : 'combo', | ||
choices : ['editline', 'readline'], | ||
value : 'editline', | ||
description : 'Which library to use for nice line editting with the Nix language REPL', | ||
) |
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,112 @@ | ||
{ lib | ||
, stdenv | ||
, mkMesonDerivation | ||
, releaseTools | ||
|
||
, meson | ||
, ninja | ||
, pkg-config | ||
|
||
, nix-util | ||
, nix-store | ||
, nix-fetchers | ||
, nix-expr | ||
, nix-flake | ||
, nix-main | ||
, editline | ||
, readline | ||
, lowdown | ||
, nlohmann_json | ||
|
||
# Configuration Options | ||
|
||
, versionSuffix ? "" | ||
|
||
# Whether to enable Markdown rendering in the Nix binary. | ||
, enableMarkdown ? !stdenv.hostPlatform.isWindows | ||
|
||
# Which interactive line editor library to use for Nix's repl. | ||
# | ||
# Currently supported choices are: | ||
# | ||
# - editline (default) | ||
# - readline | ||
, readlineFlavor ? if stdenv.hostPlatform.isWindows then "readline" else "editline" | ||
}: | ||
|
||
let | ||
inherit (lib) fileset; | ||
|
||
version = lib.fileContents ./.version + versionSuffix; | ||
in | ||
|
||
mkMesonDerivation (finalAttrs: { | ||
pname = "nix-cmd"; | ||
inherit version; | ||
|
||
workDir = ./.; | ||
fileset = fileset.unions [ | ||
../../build-utils-meson | ||
./build-utils-meson | ||
../../.version | ||
./.version | ||
./meson.build | ||
./meson.options | ||
(fileset.fileFilter (file: file.hasExt "cc") ./.) | ||
(fileset.fileFilter (file: file.hasExt "hh") ./.) | ||
]; | ||
|
||
outputs = [ "out" "dev" ]; | ||
|
||
nativeBuildInputs = [ | ||
meson | ||
ninja | ||
pkg-config | ||
]; | ||
|
||
buildInputs = [ | ||
({ inherit editline readline; }.${readlineFlavor}) | ||
] ++ lib.optional enableMarkdown lowdown; | ||
|
||
propagatedBuildInputs = [ | ||
nix-util | ||
nix-store | ||
nix-fetchers | ||
nix-expr | ||
nix-flake | ||
nix-main | ||
nlohmann_json | ||
]; | ||
|
||
preConfigure = | ||
# "Inline" .version so it's not a symlink, and includes the suffix. | ||
# Do the meson utils, without modification. | ||
'' | ||
chmod u+w ./.version | ||
echo ${version} > ../../.version | ||
''; | ||
|
||
mesonFlags = [ | ||
(lib.mesonEnable "markdown" enableMarkdown) | ||
(lib.mesonOption "readline-flavor" readlineFlavor) | ||
]; | ||
|
||
env = lib.optionalAttrs (stdenv.isLinux && !(stdenv.hostPlatform.isStatic && stdenv.system == "aarch64-linux")) { | ||
LDFLAGS = "-fuse-ld=gold"; | ||
}; | ||
|
||
enableParallelBuilding = true; | ||
|
||
separateDebugInfo = !stdenv.hostPlatform.isStatic; | ||
|
||
# TODO `releaseTools.coverageAnalysis` in Nixpkgs needs to be updated | ||
# to work with `strictDeps`. | ||
strictDeps = true; | ||
|
||
hardeningDisable = lib.optional stdenv.hostPlatform.isStatic "pie"; | ||
|
||
meta = { | ||
platforms = lib.platforms.unix ++ lib.platforms.windows; | ||
}; | ||
|
||
}) |
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 |
Oops, something went wrong.