From e54d4c9381492d44a69469a0e719fea50e9914f3 Mon Sep 17 00:00:00 2001 From: Qyriad Date: Thu, 30 May 2024 17:10:10 -0600 Subject: build: fix static linking with a hack This causes libstore, libexpr, libfetchers, and libutil to be linked with -Wl,--whole-archive to executables, when building statically. libstore for the store backends, libexpr for the primops, libfetchers for the fetcher backends I assume(?), and libutil for the nix::logger initializer (which notably shows in pre-main constructors when HOME is not owned by the user. cursed.). This workaround should be removed when #359 is fixed. Fixes #306. Change-Id: Ie9ef0154e09a6ed97920ee8ab23810ca5e2de84c --- src/libexpr/meson.build | 10 ++++++++++ src/libfetchers/meson.build | 10 ++++++++++ src/libstore/meson.build | 10 ++++++++++ src/libutil/meson.build | 10 ++++++++++ src/nix/meson.build | 8 ++++---- 5 files changed, 44 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/libexpr/meson.build b/src/libexpr/meson.build index 9a18c7ab3..e60a85b5d 100644 --- a/src/libexpr/meson.build +++ b/src/libexpr/meson.build @@ -162,6 +162,16 @@ liblixexpr = declare_dependency( link_with : libexpr, ) +# FIXME: remove when https://git.lix.systems/lix-project/lix/issues/359 is fixed. +if is_static + liblixexpr_mstatic = declare_dependency( + include_directories : include_directories('.'), + link_whole : libexpr, + ) +else + liblixexpr_mstatic = liblixexpr +endif + # FIXME: not using the pkg-config module because it creates way too many deps # while meson migration is in progress, and we want to not include boost here configure_file( diff --git a/src/libfetchers/meson.build b/src/libfetchers/meson.build index 365bcd4a7..ee38b6cda 100644 --- a/src/libfetchers/meson.build +++ b/src/libfetchers/meson.build @@ -56,3 +56,13 @@ liblixfetchers = declare_dependency( include_directories : include_directories('.'), link_with : libfetchers, ) + +# FIXME: remove when https://git.lix.systems/lix-project/lix/issues/359 is fixed. +if is_static + liblixfetchers_mstatic = declare_dependency( + include_directories : include_directories('.'), + link_whole : libfetchers, + ) +else + liblixfetchers_mstatic = liblixfetchers +endif diff --git a/src/libstore/meson.build b/src/libstore/meson.build index 65ecacc20..7a129d22c 100644 --- a/src/libstore/meson.build +++ b/src/libstore/meson.build @@ -234,6 +234,16 @@ liblixstore = declare_dependency( link_with : libstore, ) +# FIXME: remove when https://git.lix.systems/lix-project/lix/issues/359 is fixed. +if is_static + liblixstore_mstatic = declare_dependency( + include_directories : include_directories('.'), + link_whole : libstore, + ) +else + liblixstore_mstatic = liblixstore +endif + # FIXME: not using the pkg-config module because it creates way too many deps # while meson migration is in progress, and we want to not include boost here configure_file( diff --git a/src/libutil/meson.build b/src/libutil/meson.build index cfdd0e52c..8c3377e76 100644 --- a/src/libutil/meson.build +++ b/src/libutil/meson.build @@ -155,3 +155,13 @@ liblixutil = declare_dependency( include_directories : include_directories('.'), link_with : libutil ) + +# FIXME: remove when https://git.lix.systems/lix-project/lix/issues/359 is fixed. +if is_static + liblixutil_mstatic = declare_dependency( + include_directories : include_directories('.'), + link_whole : libutil, + ) +else + liblixutil_mstatic = liblixutil +endif diff --git a/src/nix/meson.build b/src/nix/meson.build index 45303641f..8115a3d08 100644 --- a/src/nix/meson.build +++ b/src/nix/meson.build @@ -81,10 +81,10 @@ nix = executable( nix2_commands_sources, dependencies : [ liblixcmd, - liblixutil, - liblixstore, - liblixexpr, - liblixfetchers, + liblixutil_mstatic, + liblixstore_mstatic, + liblixexpr_mstatic, + liblixfetchers_mstatic, liblixmain, boehm, nlohmann_json, -- cgit v1.2.3