From 38d3fe573f4d0ad2115eaca71a0b8f67fd01a580 Mon Sep 17 00:00:00 2001 From: aszlig Date: Thu, 30 Nov 2017 06:42:49 +0100 Subject: build-sandbox: Move to top-level build-support This is not only useful for packaging games, so let's make it available from the vuizvui scope, so we can use it from other packages as well. Signed-off-by: aszlig --- .../build-support/build-sandbox/src/nix-query.cc | 118 --------------------- 1 file changed, 118 deletions(-) delete mode 100644 pkgs/games/build-support/build-sandbox/src/nix-query.cc (limited to 'pkgs/games/build-support/build-sandbox/src/nix-query.cc') diff --git a/pkgs/games/build-support/build-sandbox/src/nix-query.cc b/pkgs/games/build-support/build-sandbox/src/nix-query.cc deleted file mode 100644 index 71208693..00000000 --- a/pkgs/games/build-support/build-sandbox/src/nix-query.cc +++ /dev/null @@ -1,118 +0,0 @@ -#include - -#if NIX_VERSION >= 112 -#include -#endif -#include -#include -#include - -#if NIX_VERSION < 112 -#include -#include -#endif - -using namespace nix; - -struct query_state { -#if NIX_VERSION >= 112 - std::shared_ptr store; -#else - std::shared_ptr store; -#endif - PathSet paths; - PathSet::iterator iter; -}; - -static Path get_store_path(query_state *qs, Path path) -{ - Path canonicalized = canonPath(path, true); -#if NIX_VERSION >= 112 - return qs->store->toStorePath(canonicalized); -#else - return toStorePath(canonicalized); -#endif -} - -static Path get_ancestor(query_state *qs, Path path) -{ - size_t pos = 0; - std::string tmp; - - while (pos != std::string::npos) { - if ((pos = path.find('/', pos + 1)) != std::string::npos) { - Path current = path.substr(0, pos); - - if (!isLink(current)) - continue; - - try { - current = get_store_path(qs, current); - } catch (...) { - continue; - } - - return current; - } - } - - return get_store_path(qs, path); -} - -extern "C" { - struct query_state *new_query(void) - { - query_state *initial = new query_state(); -#if NIX_VERSION >= 112 - initial->store = openStore(); -#else - settings.processEnvironment(); - settings.loadConfFile(); - initial->store = openStore(false); -#endif - return initial; - } - - void free_query(query_state *qs) - { - delete qs; - } - - bool query_requisites(query_state *qs, const char *path) - { - Path query(path); - - try { - query = get_ancestor(qs, query); - -#if NIX_VERSION >= 112 - qs->store->computeFSClosure( - qs->store->followLinksToStorePath(query), - qs->paths, false, true - ); -#else - computeFSClosure( - *qs->store, followLinksToStorePath(query), - qs->paths, false, true - ); -#endif - } catch (Error &e) { - std::cerr << "Error while querying requisites for " - << query << ": " << e.what() - << std::endl; - return false; - } - - qs->iter = qs->paths.begin(); - - return true; - } - - const char *next_query_result(query_state *qs) - { - if (qs->iter == qs->paths.end()) - return NULL; - - return (qs->iter++)->c_str(); - } -} -- cgit 1.4.1