diff options
author | Vincent Ambo <mail@tazj.in> | 2020-08-03T18·05+0100 |
---|---|---|
committer | tazjin <mail@tazj.in> | 2020-08-03T18·26+0000 |
commit | 1f12544179041b151f146fbb604e9af165ffe379 (patch) | |
tree | f1cba1958e25749cd9a85192c672d1ffb9aca82b | |
parent | 229c1ed820fe20515a69f749c38d5f9f89d20c8d (diff) |
refactor(3p/nix): Build nix-daemon as a separate binary r/1569
Skips over all the monobinary stuff and moves to a separate binary for nix-daemon. This also replaces the flag parsing logic with absl::flags. This causes a behaviour change for --help, which no longer tries to display a man page but instead shows the actual command-line help. Note: This binary no longer links to the Boehm GC. Change-Id: Ib852e994b82f2d56e91262878c10650e656427a9 Reviewed-on: https://cl.tvl.fyi/c/depot/+/1622 Tested-by: BuildkiteCI Reviewed-by: glittershark <grfn@gws.fyi>
-rw-r--r-- | third_party/nix/default.nix | 1 | ||||
-rw-r--r-- | third_party/nix/src/CMakeLists.txt | 3 | ||||
-rw-r--r-- | third_party/nix/src/nix-daemon/CMakeLists.txt | 26 | ||||
-rw-r--r-- | third_party/nix/src/nix-daemon/nix-daemon.cc (renamed from third_party/nix/src/nix-daemon/nix-daemon-main.cc) | 50 |
4 files changed, 46 insertions, 34 deletions
diff --git a/third_party/nix/default.nix b/third_party/nix/default.nix index adb1bd33d1ec..96c5c250e40d 100644 --- a/third_party/nix/default.nix +++ b/third_party/nix/default.nix @@ -121,7 +121,6 @@ in lib.fix (self: pkgs.llvmPackages.libcxxStdenv.mkDerivation { ln -s $out/bin/nix $out/bin/nix-channel ln -s $out/bin/nix $out/bin/nix-collect-garbage ln -s $out/bin/nix $out/bin/nix-copy-closure - ln -s $out/bin/nix $out/bin/nix-daemon ln -s $out/bin/nix $out/bin/nix-env ln -s $out/bin/nix $out/bin/nix-hash ln -s $out/bin/nix $out/bin/nix-instantiate diff --git a/third_party/nix/src/CMakeLists.txt b/third_party/nix/src/CMakeLists.txt index a142bfafb463..486c69fa2a3c 100644 --- a/third_party/nix/src/CMakeLists.txt +++ b/third_party/nix/src/CMakeLists.txt @@ -10,6 +10,7 @@ add_subdirectory(libutil) add_subdirectory(libstore) add_subdirectory(libmain) add_subdirectory(libexpr) +add_subdirectory(nix-daemon) if (PACKAGE_TESTS) add_subdirectory(tests) @@ -61,8 +62,6 @@ target_sources(nix nix-channel/nix-channel.cc nix-collect-garbage/nix-collect-garbage.cc nix-copy-closure/nix-copy-closure.cc - nix-daemon/nix-daemon-proto.cc - nix-daemon/nix-daemon-main.cc nix-env/nix-env.cc nix-env/user-env.cc nix-instantiate/nix-instantiate.cc diff --git a/third_party/nix/src/nix-daemon/CMakeLists.txt b/third_party/nix/src/nix-daemon/CMakeLists.txt new file mode 100644 index 000000000000..27a4a1254e77 --- /dev/null +++ b/third_party/nix/src/nix-daemon/CMakeLists.txt @@ -0,0 +1,26 @@ +# -*- mode: cmake; -*- + +# The nix-daemon is the binary running the gRPC server component to +# which other components of Nix talk to perform store and builder +# operations. + +add_executable(nix-daemon) +include_directories(${PROJECT_BINARY_DIR}) # for config.h +set_property(TARGET nix-daemon PROPERTY CXX_STANDARD 17) + +target_sources(nix-daemon + PRIVATE + nix-daemon-proto.hh + nix-daemon-proto.cc + nix-daemon.cc +) + +target_link_libraries(nix-daemon + nixutil + nixstore + nixmain + absl::flags + absl::flags_parse +) + +install(TARGETS nix-daemon DESTINATION bin) diff --git a/third_party/nix/src/nix-daemon/nix-daemon-main.cc b/third_party/nix/src/nix-daemon/nix-daemon.cc index e492c343b900..02b350c3d87b 100644 --- a/third_party/nix/src/nix-daemon/nix-daemon-main.cc +++ b/third_party/nix/src/nix-daemon/nix-daemon.cc @@ -1,5 +1,8 @@ #include <filesystem> +#include <absl/flags/flag.h> +#include <absl/flags/parse.h> +#include <absl/flags/usage_config.h> #include <absl/strings/str_format.h> #include <fcntl.h> #include <glog/logging.h> @@ -9,7 +12,7 @@ #include <sys/socket.h> #include <sys/un.h> -#include "libmain/shared.hh" +#include "libmain/shared.hh" // TODO(tazjin): can this be removed? #include "libstore/globals.hh" #include "libstore/store-api.hh" #include "libutil/util.hh" @@ -17,6 +20,8 @@ #include "nix-daemon/nix-daemon-proto.hh" #include "nix/legacy.hh" +ABSL_FLAG(bool, pipe, false, "Use pipes for daemon communication"); + namespace nix::daemon { using grpc::Server; @@ -105,39 +110,22 @@ int RunServer() { } } -static int main_(int argc, char** argv) { - auto pipe = false; - - // TODO(grfn): Replace with absl::flags - parseCmdLine(argc, argv, - [&](Strings::iterator& arg, const Strings::iterator& end) { - if (*arg == "--help") { - showManPage("nix-daemon"); - } else if (*arg == "--version") { - printVersion("nix-daemon"); - } else if (*arg == "--pipe") { - // Causes the daemon to forward stdin and stdout to and from - // the actual daemon socket - pipe = true; - } else { - return false; - } - return true; - }); - - if (pipe) { - if (getStoreType() == tDaemon) { - return ForwardToSocket(settings.nixDaemonSocketFile); +} // namespace nix::daemon + +int main(int argc, char** argv) { + absl::SetFlagsUsageConfig({.version_string = [] { return nix::nixVersion; }}); + absl::ParseCommandLine(argc, argv); + + if (absl::GetFlag(FLAGS_pipe)) { + if (nix::getStoreType() == nix::tDaemon) { + return nix::daemon::ForwardToSocket(nix::settings.nixDaemonSocketFile); } else { // TODO(grfn): Need to launch a server on stdin here - upstream calls // processConnection(true, "root", 0); - throw "Not implemented"; + LOG(ERROR) << "not implemented"; + return 1; } } - return RunServer(); -} - -// TODO(grfn): Replace this with something less magical -static RegisterLegacyCommand s1("nix-daemon", main_); -} // namespace nix::daemon + return nix::daemon::RunServer(); +} |