From fd7ac09f1073179d9ac439c3e9fb12a1bf00a7d5 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Wed, 19 Nov 2003 12:03:01 +0000 Subject: * Refactoring (step 2). --- configure.ac | 1 + src/Makefile.am | 2 +- src/libexpr/Makefile.am | 9 ++-- src/libexpr/main.cc | 117 ---------------------------------------- src/libexpr/parser.cc | 4 +- src/nix-instantiate/Makefile.am | 11 ++++ src/nix-instantiate/main.cc | 117 ++++++++++++++++++++++++++++++++++++++++ 7 files changed, 134 insertions(+), 127 deletions(-) delete mode 100644 src/libexpr/main.cc create mode 100644 src/nix-instantiate/Makefile.am create mode 100644 src/nix-instantiate/main.cc diff --git a/configure.ac b/configure.ac index 09e292e1b16f..54a251b2363f 100644 --- a/configure.ac +++ b/configure.ac @@ -35,6 +35,7 @@ AC_CONFIG_FILES([Makefile src/nix-store/Makefile src/nix-hash/Makefile src/libexpr/Makefile + src/nix-instantiate/Makefile scripts/Makefile corepkgs/Makefile corepkgs/fetchurl/Makefile diff --git a/src/Makefile.am b/src/Makefile.am index f06bb1f1d818..fe8cbf1e3283 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,2 +1,2 @@ SUBDIRS = bin2c boost libutil libstore libmain nix-store nix-hash \ - libexpr #nix-instantiate + libexpr nix-instantiate diff --git a/src/libexpr/Makefile.am b/src/libexpr/Makefile.am index 6fe79850116e..71c1f89f1dcd 100644 --- a/src/libexpr/Makefile.am +++ b/src/libexpr/Makefile.am @@ -1,12 +1,9 @@ -bin_PROGRAMS = nix-instantiate +noinst_LIBRARIES = libexpr.a -nix_instantiate_SOURCES = nixexpr.cc parser.cc eval.cc primops.cc main.cc -nix_instantiate_LDADD = ../libmain/libmain.a ../libstore/libstore.a ../libutil/libutil.a \ - ../boost/format/libformat.a -L../../externals/inst/lib -ldb_cxx \ - -lsglr -lATB -lconversion -lasfix2 -lmept -lATerm +libexpr_a_SOURCES = nixexpr.cc parser.cc eval.cc primops.cc AM_CXXFLAGS = \ - -I.. -I../../externals/inst/include -I../libutil -I../libstore -I../libmain + -I.. -I../../externals/inst/include -I../libutil -I../libstore # Parse table generation. diff --git a/src/libexpr/main.cc b/src/libexpr/main.cc deleted file mode 100644 index aa6883ff84b8..000000000000 --- a/src/libexpr/main.cc +++ /dev/null @@ -1,117 +0,0 @@ -#include -#include - -#include "globals.hh" -#include "normalise.hh" -#include "shared.hh" -#include "eval.hh" - - -#if 0 -static Path searchPath(const Paths & searchDirs, const Path & relPath) -{ - if (string(relPath, 0, 1) == "/") return relPath; - - for (Paths::const_iterator i = searchDirs.begin(); - i != searchDirs.end(); i++) - { - Path path = *i + "/" + relPath; - if (pathExists(path)) return path; - } - - throw Error( - format("path `%1%' not found in any of the search directories") - % relPath); -} -#endif - - -static Expr evalStdin(EvalState & state) -{ - startNest(nest, lvlTalkative, format("evaluating standard input")); - Expr e = ATreadFromFile(stdin); - if (!e) - throw Error(format("unable to read a term from stdin")); - return evalExpr(state, e); -} - - -static void printNixExpr(EvalState & state, Expr e) -{ - ATMatcher m; - ATermList es; - - if (atMatch(m, e) >> "Attrs" >> es) { - Expr a = queryAttr(e, "type"); - if (a && evalString(state, a) == "derivation") { - a = queryAttr(e, "drvPath"); - if (a) { - cout << format("%1%\n") % evalPath(state, a); - return; - } - } - } - - if (ATgetType(e) == AT_LIST) { - for (ATermIterator i((ATermList) e); i; ++i) - printNixExpr(state, evalExpr(state, *i)); - return; - } - - throw badTerm("top level does not evaluate to one or more Nix expressions", e); -} - - -void run(Strings args) -{ - EvalState state; - Strings files; - bool readStdin = false; - -#if 0 - state.searchDirs.push_back("."); - state.searchDirs.push_back(nixDataDir + "/nix"); -#endif - - for (Strings::iterator it = args.begin(); - it != args.end(); ) - { - string arg = *it++; - -#if 0 - if (arg == "--includedir" || arg == "-I") { - if (it == args.end()) - throw UsageError(format("argument required in `%1%'") % arg); - state.searchDirs.push_back(*it++); - } - else -#endif - if (arg == "--verbose" || arg == "-v") - verbosity = (Verbosity) ((int) verbosity + 1); - else if (arg == "-") - readStdin = true; - else if (arg[0] == '-') - throw UsageError(format("unknown flag `%1%`") % arg); - else - files.push_back(arg); - } - - openDB(); - - if (readStdin) { - Expr e = evalStdin(state); - printNixExpr(state, e); - } - - for (Strings::iterator it = files.begin(); - it != files.end(); it++) - { - Expr e = evalFile(state, absPath(*it)); - printNixExpr(state, e); - } - - printEvalStats(state); -} - - -string programId = "nix-instantiate"; diff --git a/src/libexpr/parser.cc b/src/libexpr/parser.cc index b2c74af33e77..22d76c263ac6 100644 --- a/src/libexpr/parser.cc +++ b/src/libexpr/parser.cc @@ -12,7 +12,6 @@ extern "C" { #include "aterm.hh" #include "parser.hh" -#include "shared.hh" #include "parse-table.h" @@ -100,8 +99,7 @@ Expr parseExprFromFile(Path path) ATprotect(&lang); lang = ATmake("Nix"); - if (!SGopenLanguageFromTerm( - (char *) programId.c_str(), lang, parseTable)) + if (!SGopenLanguageFromTerm("nix-parse", lang, parseTable)) throw Error(format("cannot open language")); SG_STARTSYMBOL_ON(); diff --git a/src/nix-instantiate/Makefile.am b/src/nix-instantiate/Makefile.am new file mode 100644 index 000000000000..91843f66341b --- /dev/null +++ b/src/nix-instantiate/Makefile.am @@ -0,0 +1,11 @@ +bin_PROGRAMS = nix-instantiate + +nix_instantiate_SOURCES = main.cc +nix_instantiate_LDADD = ../libmain/libmain.a ../libexpr/libexpr.a \ + ../libstore/libstore.a ../libutil/libutil.a \ + ../boost/format/libformat.a -L../../externals/inst/lib -ldb_cxx \ + -lsglr -lATB -lconversion -lasfix2 -lmept -lATerm + +AM_CXXFLAGS = \ + -I.. -I../../externals/inst/include -I../libutil -I../libstore \ + -I../libexpr -I../libmain diff --git a/src/nix-instantiate/main.cc b/src/nix-instantiate/main.cc new file mode 100644 index 000000000000..aa6883ff84b8 --- /dev/null +++ b/src/nix-instantiate/main.cc @@ -0,0 +1,117 @@ +#include +#include + +#include "globals.hh" +#include "normalise.hh" +#include "shared.hh" +#include "eval.hh" + + +#if 0 +static Path searchPath(const Paths & searchDirs, const Path & relPath) +{ + if (string(relPath, 0, 1) == "/") return relPath; + + for (Paths::const_iterator i = searchDirs.begin(); + i != searchDirs.end(); i++) + { + Path path = *i + "/" + relPath; + if (pathExists(path)) return path; + } + + throw Error( + format("path `%1%' not found in any of the search directories") + % relPath); +} +#endif + + +static Expr evalStdin(EvalState & state) +{ + startNest(nest, lvlTalkative, format("evaluating standard input")); + Expr e = ATreadFromFile(stdin); + if (!e) + throw Error(format("unable to read a term from stdin")); + return evalExpr(state, e); +} + + +static void printNixExpr(EvalState & state, Expr e) +{ + ATMatcher m; + ATermList es; + + if (atMatch(m, e) >> "Attrs" >> es) { + Expr a = queryAttr(e, "type"); + if (a && evalString(state, a) == "derivation") { + a = queryAttr(e, "drvPath"); + if (a) { + cout << format("%1%\n") % evalPath(state, a); + return; + } + } + } + + if (ATgetType(e) == AT_LIST) { + for (ATermIterator i((ATermList) e); i; ++i) + printNixExpr(state, evalExpr(state, *i)); + return; + } + + throw badTerm("top level does not evaluate to one or more Nix expressions", e); +} + + +void run(Strings args) +{ + EvalState state; + Strings files; + bool readStdin = false; + +#if 0 + state.searchDirs.push_back("."); + state.searchDirs.push_back(nixDataDir + "/nix"); +#endif + + for (Strings::iterator it = args.begin(); + it != args.end(); ) + { + string arg = *it++; + +#if 0 + if (arg == "--includedir" || arg == "-I") { + if (it == args.end()) + throw UsageError(format("argument required in `%1%'") % arg); + state.searchDirs.push_back(*it++); + } + else +#endif + if (arg == "--verbose" || arg == "-v") + verbosity = (Verbosity) ((int) verbosity + 1); + else if (arg == "-") + readStdin = true; + else if (arg[0] == '-') + throw UsageError(format("unknown flag `%1%`") % arg); + else + files.push_back(arg); + } + + openDB(); + + if (readStdin) { + Expr e = evalStdin(state); + printNixExpr(state, e); + } + + for (Strings::iterator it = files.begin(); + it != files.end(); it++) + { + Expr e = evalFile(state, absPath(*it)); + printNixExpr(state, e); + } + + printEvalStats(state); +} + + +string programId = "nix-instantiate"; -- cgit 1.4.1