/** * CHANGES (by Joost Visser) * * Strategy pack-modules(pack, dep-base) now takes two additonal * options: * -dep target * -nodep * * The first one specifies the maketarget and basename of the * dependency file that is created. If this option is not passed, * the argument dep-base is used instead. Finally, the -nodep option * can be used to disable this and prevent any dependency file to * be created. Note that -dep takes precendence over -nodep. * * An additional strategy pack-modules(pack) was added that behaves * like pack-modules, except no default for the dependency file * base name needs to be specified. Hence, only the command line * options are relevant. * * by Eelco Visser (2002-12-18): * Refactored using new (config-style) option handling. */ module strategy/pack/modules imports util/config/options strategy/pack/graph lang/dynamic-rules util/config/common util/config/verbose strategies pack-options = ArgOption("-I" + "--Include", where(<extend-config>("-I", ["-I", <id>])); !(), !"-I d | --Include d Include modules from directory d") + Option("--nodep" + "-nodep", where(<set-config> ("-nodep", "")); !(), !"--nodep Don't create dependency file") + ArgOption("--dep" + "-d" + "-dep", where(<set-config> ("-dep", <id>)); !(), !"--dep f | -d f Write dependency to file f") pack-modules(pack : (term -> term) * term -> term) = pack-modules(pack, fail) <+ <fatal-error> ["Packing modules failed"] pack-modules(pack : (term -> term) * term -> term, dep-base) = option-wrap(pack-options <+ io-options, (<get-config; filter(not("-I"))> "-I" <+ ![]) => path ; (<get-config> "-i" <+ !stdin()) => infile ; (<get-config> "-o" <+ !stdout()) => outfile ; <pack(!path)> infile => (files, spec) ; (<get-config> "-b"; <WriteToBinaryFile>(outfile, spec) <+ <WriteToTextFile>(outfile, spec)) ; try((<get-config> "-dep" <+ not(<get-config> "-nodep"); dep-base) => depfile ; <create-dep-file(!depfile)> (outfile, files)) ) create-dep-file(dep-base) : (outfile, files) -> (outfile, files) where <dep-base> outfile => out ; <fopen> (<add-extension> (out, "dep"), "w") => dep ; <fprintnl> (dep, [out | <separate-by(!" \\\n\t")> [" :" | files]]) ; <fclose> dep