diff options
author | Qyriad <qyriad@qyriad.me> | 2024-03-21 13:41:23 -0600 |
---|---|---|
committer | Qyriad <qyriad@qyriad.me> | 2024-03-22 08:36:50 -0600 |
commit | b4d07656ff2c43b1144eb97658b9528dd39418ce (patch) | |
tree | d6aeb04613749884ca328f41bdbab16a4585e17f /src/libexpr | |
parent | a7161b6c0f6f9640acc065f0bd18579babacb0cf (diff) |
build: optionally build and install with meson
This commit adds several meson.build, which successfully build and
install Lix executables, libraries, and headers. Meson does not yet
build docs, Perl bindings, or run tests, which will be added in
following commits. As such, this commit does not remove the existing
build system, or make it the default, and also as such, this commit has
several FIXMEs and TODOs as notes for what should be done before the
existing autoconf + make buildsystem can be removed and Meson made the
default. This commit does not modify any source files.
A Meson-enabled build is also added as a Hydra job, and to
`nix flake check`.
Change-Id: I667c8685b13b7bab91e281053f807a11616ae3d4
Diffstat (limited to 'src/libexpr')
-rw-r--r-- | src/libexpr/meson.build | 153 |
1 files changed, 153 insertions, 0 deletions
diff --git a/src/libexpr/meson.build b/src/libexpr/meson.build new file mode 100644 index 000000000..baac9bb24 --- /dev/null +++ b/src/libexpr/meson.build @@ -0,0 +1,153 @@ +parser_tab = custom_target( + input : 'parser.y', + output : [ + 'parser-tab.cc', + 'parser-tab.hh', + ], + command : [ + 'bison', + '-v', + '-o', + '@OUTPUT0@', + '@INPUT@', + '-d', + ], + # NOTE(Qyriad): Meson doesn't support installing only part of a custom target, so we add + # an install script below which removes parser-tab.cc. + install : true, + install_dir : includedir / 'nix', +) + +lexer_tab = custom_target( + input : [ + 'lexer.l', + parser_tab, + ], + output : [ + 'lexer-tab.cc', + 'lexer-tab.hh', + ], + command : [ + 'flex', + '--outfile', + '@OUTPUT0@', + '--header-file=' + '@OUTPUT1@', + '@INPUT0@', + ], + # NOTE(Qyriad): Meson doesn't support installing only part of a custom target, so we add + # an install script below which removes lexer-tab.cc. + install : true, + install_dir : includedir / 'nix', +) + +# TODO(Qyriad): When the parser and lexer are rewritten this should be removed. +# NOTE(Qyriad): We do this this way instead of an inline bash or rm command +# due to subtleties in Meson. Check the comments in cleanup-install.bash for details. +meson.add_install_script( + bash, + meson.project_source_root() / 'meson/cleanup-install.bash', + '@0@'.format(includedir), +) + +imported_drv_to_derivation_gen = gen_header.process('imported-drv-to-derivation.nix') +fetchurl_gen = gen_header.process('fetchurl.nix') +derivation_gen = gen_header.process('primops/derivation.nix', preserve_path_from : meson.current_source_dir()) +call_flake_gen = gen_header.process('flake/call-flake.nix') + +libexpr_sources = files( + 'attr-path.cc', + 'attr-set.cc', + 'eval-cache.cc', + 'eval-error.cc', + 'eval-settings.cc', + 'eval.cc', + 'function-trace.cc', + 'get-drvs.cc', + 'json-to-value.cc', + 'nixexpr.cc', + 'paths.cc', + 'primops.cc', + 'print-ambiguous.cc', + 'print.cc', + 'search-path.cc', + 'value-to-json.cc', + 'value-to-xml.cc', + 'flake/config.cc', + 'flake/flake.cc', + 'flake/flakeref.cc', + 'flake/lockfile.cc', + 'primops/context.cc', + 'primops/fetchClosure.cc', + 'primops/fetchMercurial.cc', + 'primops/fetchTree.cc', + 'primops/fromTOML.cc', + 'value/context.cc', +) + +libexpr_headers = files( + 'attr-path.hh', + 'attr-set.hh', + 'eval-cache.hh', + 'eval-error.hh', + 'eval-inline.hh', + 'eval-settings.hh', + 'eval.hh', + 'flake/flake.hh', + 'flake/flakeref.hh', + 'flake/lockfile.hh', + 'function-trace.hh', + 'gc-small-vector.hh', + 'get-drvs.hh', + 'json-to-value.hh', + 'nixexpr.hh', + 'parser-state.hh', + 'pos-idx.hh', + 'pos-table.hh', + 'primops.hh', + 'print-ambiguous.hh', + 'print-options.hh', + 'print.hh', + 'repl-exit-status.hh', + 'search-path.hh', + 'symbol-table.hh', + 'value/context.hh', + 'value-to-json.hh', + 'value-to-xml.hh', + 'value.hh', +) + +libexpr = library( + 'nixexpr', + libexpr_sources, + parser_tab, + lexer_tab, + imported_drv_to_derivation_gen, + fetchurl_gen, + derivation_gen, + call_flake_gen, + dependencies : [ + liblixutil, + liblixstore, + liblixfetchers, + boehm, + boost, + ], + # for shared.hh + include_directories : [ + '../libmain', + ], + install : true, + # FIXME(Qyriad): is this right? + install_rpath : libdir, +) + +install_headers( + libexpr_headers, + subdir : 'nix', + preserve_path : true, +) + +liblixexpr = declare_dependency( + include_directories : include_directories('.'), + link_with : libexpr, +) |