* Cleaned up the semantics of Fix expressions.
* Conditionals and variables in Fix expressions. This allows, e.g., Descr( [ Bind("pkgId", "subversion-0.21.0") , Bind("httpsClient", Bool(True)) , Bind("httpServer", Bool(True)) , Bind("ssl", If(Var("httpsClient"), Fix("./openssl-0.9.7b.fix"), "")) , Bind("httpd", If(Var("httpServer"), Fix("./httpd-2.0.45.fix"), "")) ... ]) which introduces domain feature variables httpsClient and httpServer (i.e., whether Subversion is built with https client and webdav server support); the values of the variables influences package dependencies and the build scripts. The next step is to allow that packages can express constraints on each other. E.g., StrategoXT is dependent on an ATerm library with the "gcc" variant enabled. In fact, this may cause several Nix instantiations to be created from a single Fix descriptor. If possible, Fix should try to find the least set of instantiations that obeys the constraints.
This commit is contained in:
parent
d6d930a975
commit
0ef4b6d0f8
18 changed files with 290 additions and 164 deletions
224
src/fix.cc
224
src/fix.cc
|
@ -16,6 +16,9 @@ static string nixDescriptorDir;
|
||||||
static string nixSourcesDir;
|
static string nixSourcesDir;
|
||||||
|
|
||||||
|
|
||||||
|
static bool verbose = false;
|
||||||
|
|
||||||
|
|
||||||
/* Mapping of Fix file names to the hashes of the resulting Nix
|
/* Mapping of Fix file names to the hashes of the resulting Nix
|
||||||
descriptors. */
|
descriptors. */
|
||||||
typedef map<string, string> DescriptorMap;
|
typedef map<string, string> DescriptorMap;
|
||||||
|
@ -23,10 +26,6 @@ typedef map<string, string> DescriptorMap;
|
||||||
|
|
||||||
/* Forward declarations. */
|
/* Forward declarations. */
|
||||||
|
|
||||||
string instantiateDescriptor(string filename,
|
|
||||||
DescriptorMap & done);
|
|
||||||
|
|
||||||
|
|
||||||
void registerFile(string filename)
|
void registerFile(string filename)
|
||||||
{
|
{
|
||||||
int res = system(("nix regfile " + filename).c_str());
|
int res = system(("nix regfile " + filename).c_str());
|
||||||
|
@ -74,80 +73,137 @@ string fetchURL(string url)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Term evaluation functions. */
|
Error badTerm(const string & msg, ATerm e)
|
||||||
|
|
||||||
string evaluateStr(ATerm e)
|
|
||||||
{
|
{
|
||||||
char * s;
|
char * s = ATwriteToString(e);
|
||||||
if (ATmatch(e, "<str>", &s))
|
return Error(msg + ", in `" + s + "'");
|
||||||
return s;
|
|
||||||
else throw Error("invalid string expression");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
ATerm evaluateBool(ATerm e)
|
/* Term evaluation. */
|
||||||
{
|
|
||||||
if (ATmatch(e, "True") || ATmatch(e, "False"))
|
|
||||||
return e;
|
|
||||||
else throw Error("invalid boolean expression");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
string evaluateFile(ATerm e, string dir)
|
|
||||||
{
|
|
||||||
char * s;
|
|
||||||
ATerm t;
|
|
||||||
if (ATmatch(e, "<str>", &s)) {
|
|
||||||
checkHash(s);
|
|
||||||
return s;
|
|
||||||
} else if (ATmatch(e, "Url(<term>)", &t)) {
|
|
||||||
string url = evaluateStr(t);
|
|
||||||
string filename = fetchURL(url);
|
|
||||||
registerFile(filename);
|
|
||||||
return hashFile(filename);
|
|
||||||
} else if (ATmatch(e, "Local(<term>)", &t)) {
|
|
||||||
string filename = absPath(evaluateStr(t), dir); /* !!! */
|
|
||||||
string cmd = "cp -p " + filename + " " + nixSourcesDir;
|
|
||||||
int res = system(cmd.c_str());
|
|
||||||
if (WEXITSTATUS(res) != 0)
|
|
||||||
throw Error("cannot copy " + filename);
|
|
||||||
registerFile(nixSourcesDir + "/" + baseNameOf(filename));
|
|
||||||
return hashFile(filename);
|
|
||||||
} else throw Error("invalid file expression");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
string evaluatePkg(ATerm e, string dir, DescriptorMap & done)
|
|
||||||
{
|
|
||||||
char * s;
|
|
||||||
ATerm t;
|
|
||||||
if (ATmatch(e, "<str>", &s)) {
|
|
||||||
checkHash(s);
|
|
||||||
return s;
|
|
||||||
} else if (ATmatch(e, "Fix(<term>)", &t)) {
|
|
||||||
string filename = absPath(evaluateStr(t), dir); /* !!! */
|
|
||||||
return instantiateDescriptor(filename, done);
|
|
||||||
} else throw Error("invalid pkg expression");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
ATerm evaluate(ATerm e, string dir, DescriptorMap & done)
|
|
||||||
{
|
|
||||||
ATerm t;
|
|
||||||
if (ATmatch(e, "Str(<term>)", &t))
|
|
||||||
return ATmake("Str(<str>)", evaluateStr(t).c_str());
|
|
||||||
else if (ATmatch(e, "Bool(<term>)", &t))
|
|
||||||
return ATmake("Bool(<term>)", evaluateBool(t));
|
|
||||||
else if (ATmatch(e, "File(<term>)", &t))
|
|
||||||
return ATmake("File(<str>)", evaluateFile(t, dir).c_str());
|
|
||||||
else if (ATmatch(e, "Pkg(<term>)", &t))
|
|
||||||
return ATmake("Pkg(<str>)", evaluatePkg(t, dir, done).c_str());
|
|
||||||
else throw Error("invalid expression type");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
typedef map<string, ATerm> BindingsMap;
|
typedef map<string, ATerm> BindingsMap;
|
||||||
|
|
||||||
|
struct EvalContext
|
||||||
|
{
|
||||||
|
string dir;
|
||||||
|
DescriptorMap * done;
|
||||||
|
BindingsMap * vars;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
ATerm evaluate(ATerm e, EvalContext ctx);
|
||||||
|
string instantiateDescriptor(string filename, EvalContext ctx);
|
||||||
|
|
||||||
|
|
||||||
|
string evaluateStr(ATerm e, EvalContext ctx)
|
||||||
|
{
|
||||||
|
e = evaluate(e, ctx);
|
||||||
|
char * s;
|
||||||
|
if (ATmatch(e, "Str(<str>)", &s))
|
||||||
|
return s;
|
||||||
|
else throw badTerm("string value expected", e);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool evaluateBool(ATerm e, EvalContext ctx)
|
||||||
|
{
|
||||||
|
e = evaluate(e, ctx);
|
||||||
|
if (ATmatch(e, "Bool(True)"))
|
||||||
|
return true;
|
||||||
|
else if (ATmatch(e, "Bool(False)"))
|
||||||
|
return false;
|
||||||
|
else throw badTerm("boolean value expected", e);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ATerm evaluate(ATerm e, EvalContext ctx)
|
||||||
|
{
|
||||||
|
char * s;
|
||||||
|
ATerm e2;
|
||||||
|
ATerm eCond, eTrue, eFalse;
|
||||||
|
|
||||||
|
/* Check for normal forms first. */
|
||||||
|
|
||||||
|
if (ATmatch(e, "Str(<str>)", &s) ||
|
||||||
|
ATmatch(e, "Bool(True)") || ATmatch(e, "Bool(False)"))
|
||||||
|
return e;
|
||||||
|
|
||||||
|
else if (
|
||||||
|
ATmatch(e, "Pkg(<str>)", &s) ||
|
||||||
|
ATmatch(e, "File(<str>)", &s))
|
||||||
|
{
|
||||||
|
checkHash(s);
|
||||||
|
return e;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Short-hands. */
|
||||||
|
|
||||||
|
else if (ATmatch(e, "<str>", &s))
|
||||||
|
return ATmake("Str(<str>)", s);
|
||||||
|
|
||||||
|
else if (ATmatch(e, "True", &s))
|
||||||
|
return ATmake("Bool(True)", s);
|
||||||
|
|
||||||
|
else if (ATmatch(e, "False", &s))
|
||||||
|
return ATmake("Bool(False)", s);
|
||||||
|
|
||||||
|
/* Functions. */
|
||||||
|
|
||||||
|
/* `Var' looks up a variable. */
|
||||||
|
else if (ATmatch(e, "Var(<str>)", &s)) {
|
||||||
|
string name(s);
|
||||||
|
ATerm e2 = (*ctx.vars)[name];
|
||||||
|
if (!e2) throw Error("undefined variable " + name);
|
||||||
|
return evaluate(e2, ctx); /* !!! update binding */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* `Fix' recursively instantiates a Fix descriptor, returning the
|
||||||
|
hash of the generated Nix descriptor. */
|
||||||
|
else if (ATmatch(e, "Fix(<term>)", &e2)) {
|
||||||
|
string filename = absPath(evaluateStr(e2, ctx), ctx.dir); /* !!! */
|
||||||
|
return ATmake("Pkg(<str>)",
|
||||||
|
instantiateDescriptor(filename, ctx).c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
/* `Source' copies the specified file to nixSourcesDir, registers
|
||||||
|
it with Nix, and returns the hash of the file. */
|
||||||
|
else if (ATmatch(e, "Source(<term>)", &e2)) {
|
||||||
|
string source = absPath(evaluateStr(e2, ctx), ctx.dir); /* !!! */
|
||||||
|
string target = nixSourcesDir + "/" + baseNameOf(source);
|
||||||
|
|
||||||
|
// Don't copy if filename is already in nixSourcesDir.
|
||||||
|
if (source != target) {
|
||||||
|
if (verbose)
|
||||||
|
cerr << "copying source " << source << endl;
|
||||||
|
string cmd = "cp -p " + source + " " + target;
|
||||||
|
int res = system(cmd.c_str());
|
||||||
|
if (WEXITSTATUS(res) != 0)
|
||||||
|
throw Error("cannot copy " + source + " to " + target);
|
||||||
|
}
|
||||||
|
|
||||||
|
registerFile(target);
|
||||||
|
return ATmake("File(<str>)", hashFile(target).c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
/* `Url' fetches a file from the network, caching it in
|
||||||
|
nixSourcesDir and returning the file name. */
|
||||||
|
else if (ATmatch(e, "Url(<term>)", &e2)) {
|
||||||
|
string url = evaluateStr(e2, ctx);
|
||||||
|
if (verbose)
|
||||||
|
cerr << "fetching " << url << endl;
|
||||||
|
string filename = fetchURL(url);
|
||||||
|
return ATmake("Str(<str>)", filename.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
/* `If' provides conditional evaluation. */
|
||||||
|
else if (ATmatch(e, "If(<term>, <term>, <term>)",
|
||||||
|
&eCond, &eTrue, &eFalse))
|
||||||
|
return evaluate(evaluateBool(eCond, ctx) ? eTrue : eFalse, ctx);
|
||||||
|
|
||||||
|
else throw badTerm("invalid expression", e);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
string getStringFromMap(BindingsMap & bindingsMap,
|
string getStringFromMap(BindingsMap & bindingsMap,
|
||||||
const string & name)
|
const string & name)
|
||||||
|
@ -164,15 +220,14 @@ string getStringFromMap(BindingsMap & bindingsMap,
|
||||||
|
|
||||||
/* Instantiate a Fix descriptors into a Nix descriptor, recursively
|
/* Instantiate a Fix descriptors into a Nix descriptor, recursively
|
||||||
instantiating referenced descriptors as well. */
|
instantiating referenced descriptors as well. */
|
||||||
string instantiateDescriptor(string filename,
|
string instantiateDescriptor(string filename, EvalContext ctx)
|
||||||
DescriptorMap & done)
|
|
||||||
{
|
{
|
||||||
/* Already done? */
|
/* Already done? */
|
||||||
DescriptorMap::iterator isInMap = done.find(filename);
|
DescriptorMap::iterator isInMap = ctx.done->find(filename);
|
||||||
if (isInMap != done.end()) return isInMap->second;
|
if (isInMap != ctx.done->end()) return isInMap->second;
|
||||||
|
|
||||||
/* No. */
|
/* No. */
|
||||||
string dir = dirOf(filename);
|
ctx.dir = dirOf(filename);
|
||||||
|
|
||||||
/* Read the Fix descriptor as an ATerm. */
|
/* Read the Fix descriptor as an ATerm. */
|
||||||
ATerm inTerm = ATreadFromNamedFile(filename.c_str());
|
ATerm inTerm = ATreadFromNamedFile(filename.c_str());
|
||||||
|
@ -184,6 +239,7 @@ string instantiateDescriptor(string filename,
|
||||||
|
|
||||||
/* Iterate over the bindings and evaluate them to normal form. */
|
/* Iterate over the bindings and evaluate them to normal form. */
|
||||||
BindingsMap bindingsMap; /* the normal forms */
|
BindingsMap bindingsMap; /* the normal forms */
|
||||||
|
ctx.vars = &bindingsMap;
|
||||||
|
|
||||||
char * cname;
|
char * cname;
|
||||||
ATerm value;
|
ATerm value;
|
||||||
|
@ -191,7 +247,7 @@ string instantiateDescriptor(string filename,
|
||||||
&cname, &value, &bindings))
|
&cname, &value, &bindings))
|
||||||
{
|
{
|
||||||
string name(cname);
|
string name(cname);
|
||||||
ATerm e = evaluate(value, dir, done);
|
ATerm e = evaluate(value, ctx);
|
||||||
bindingsMap[name] = e;
|
bindingsMap[name] = e;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -229,7 +285,10 @@ string instantiateDescriptor(string filename,
|
||||||
/* Register it with Nix. */
|
/* Register it with Nix. */
|
||||||
registerFile(outFilename);
|
registerFile(outFilename);
|
||||||
|
|
||||||
done[filename] = outHash;
|
if (verbose)
|
||||||
|
cerr << "instantiated " << outHash << " from " << filename << endl;
|
||||||
|
|
||||||
|
(*ctx.done)[filename] = outHash;
|
||||||
return outHash;
|
return outHash;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -239,11 +298,14 @@ void instantiateDescriptors(Strings filenames)
|
||||||
{
|
{
|
||||||
DescriptorMap done;
|
DescriptorMap done;
|
||||||
|
|
||||||
|
EvalContext ctx;
|
||||||
|
ctx.done = &done;
|
||||||
|
|
||||||
for (Strings::iterator it = filenames.begin();
|
for (Strings::iterator it = filenames.begin();
|
||||||
it != filenames.end(); it++)
|
it != filenames.end(); it++)
|
||||||
{
|
{
|
||||||
string filename = absPath(*it);
|
string filename = absPath(*it);
|
||||||
cout << instantiateDescriptor(filename, done) << endl;
|
cout << instantiateDescriptor(filename, ctx) << endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -274,7 +336,9 @@ void run(Strings::iterator argCur, Strings::iterator argEnd)
|
||||||
if (arg == "-h" || arg == "--help") {
|
if (arg == "-h" || arg == "--help") {
|
||||||
printUsage();
|
printUsage();
|
||||||
return;
|
return;
|
||||||
} if (arg == "--instantiate" || arg == "-i") {
|
} else if (arg == "-v" || arg == "--verbose") {
|
||||||
|
verbose = true;
|
||||||
|
} else if (arg == "--instantiate" || arg == "-i") {
|
||||||
command = cmdInstantiate;
|
command = cmdInstantiate;
|
||||||
} else if (arg[0] == '-')
|
} else if (arg[0] == '-')
|
||||||
throw UsageError("invalid option `" + arg + "'");
|
throw UsageError("invalid option `" + arg + "'");
|
||||||
|
|
12
test/build/httpd-build.sh
Executable file
12
test/build/httpd-build.sh
Executable file
|
@ -0,0 +1,12 @@
|
||||||
|
#! /bin/sh
|
||||||
|
|
||||||
|
export PATH=/bin:/usr/bin
|
||||||
|
|
||||||
|
top=`pwd`
|
||||||
|
tar xvfz $src || exit 1
|
||||||
|
cd httpd-* || exit 1
|
||||||
|
./configure --prefix=$top --enable-ssl --with-ssl=$ssl --enable-mods-shared=all || exit 1
|
||||||
|
make || exit 1
|
||||||
|
make install || exit 1
|
||||||
|
cd $top || exit 1
|
||||||
|
rm -rf httpd-* || exit 1
|
12
test/build/openssl-build.sh
Executable file
12
test/build/openssl-build.sh
Executable file
|
@ -0,0 +1,12 @@
|
||||||
|
#! /bin/sh
|
||||||
|
|
||||||
|
export PATH=/bin:/usr/bin
|
||||||
|
|
||||||
|
top=`pwd`
|
||||||
|
tar xvfz $src || exit 1
|
||||||
|
cd openssl-* || exit 1
|
||||||
|
./config --prefix=$top || exit 1
|
||||||
|
make || exit 1
|
||||||
|
make install || exit 1
|
||||||
|
cd $top || exit 1
|
||||||
|
rm -rf openssl-* || exit 1
|
|
@ -5,10 +5,22 @@ export PATH=/bin:/usr/bin
|
||||||
export LDFLAGS=-s
|
export LDFLAGS=-s
|
||||||
|
|
||||||
top=`pwd`
|
top=`pwd`
|
||||||
|
|
||||||
|
if test $httpsClient; then
|
||||||
|
extraflags="--with-ssl --with-libs=$ssl $extraflags"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test $httpServer; then
|
||||||
|
extraflags="--with-apxs=$httpd/bin/apxs --with-apr=$httpd --with-apr-util=$httpd $extraflags"
|
||||||
|
extrainst="APACHE_LIBEXECDIR=$top/modules $extrainst"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "extra flags: $extraflags"
|
||||||
|
|
||||||
tar xvfz $src || exit 1
|
tar xvfz $src || exit 1
|
||||||
cd subversion-* || exit 1
|
cd subversion-* || exit 1
|
||||||
./configure --prefix=$top --with-ssl || exit 1
|
./configure --prefix=$top $extraflags || exit 1
|
||||||
make || exit 1
|
make || exit 1
|
||||||
make install || exit 1
|
make install $extrainst || exit 1
|
||||||
cd $top || exit 1
|
cd $top || exit 1
|
||||||
rm -rf subversion-* || exit 1
|
rm -rf subversion-* || exit 1
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
Descr(
|
Descr(
|
||||||
[ Bind("pkgId", Str("aterm-2.0"))
|
[ Bind("pkgId", "aterm-2.0")
|
||||||
, Bind("releaseId", Str("1"))
|
, Bind("releaseId", "1")
|
||||||
|
|
||||||
, Bind("createGCC", Bool(True))
|
, Bind("createGCC", True)
|
||||||
|
|
||||||
, Bind("src", File(Url("http://www.cwi.nl/projects/MetaEnv/aterm/aterm-2.0.tar.gz")))
|
, Bind("src", Source(Url("http://www.cwi.nl/projects/MetaEnv/aterm/aterm-2.0.tar.gz")))
|
||||||
, Bind("build", File(Local("../build/aterm-build.sh")))
|
, Bind("build", Source("../build/aterm-build.sh"))
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
Descr(
|
Descr(
|
||||||
[ Bind("pkgId", Str("atk-1.2.0"))
|
[ Bind("pkgId", "atk-1.2.0")
|
||||||
, Bind("releaseId", Str("1"))
|
, Bind("releaseId", "1")
|
||||||
|
|
||||||
, Bind("pkgconfig", Pkg(Fix("./pkgconfig-0.15.0.fix")))
|
, Bind("pkgconfig", Fix("./pkgconfig-0.15.0.fix"))
|
||||||
, Bind("glib", Pkg(Fix("./glib-2.2.1.fix")))
|
, Bind("glib", Fix("./glib-2.2.1.fix"))
|
||||||
|
|
||||||
, Bind("src", File(Url("ftp://ftp.gtk.org/pub/gtk/v2.2/atk-1.2.0.tar.bz2")))
|
, Bind("src", Source(Url("ftp://ftp.gtk.org/pub/gtk/v2.2/atk-1.2.0.tar.bz2")))
|
||||||
, Bind("build", File(Local("../build/atk-build.sh")))
|
, Bind("build", Source("../build/atk-build.sh"))
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
Descr(
|
Descr(
|
||||||
[ Bind("pkgId", Str("glib-2.2.1"))
|
[ Bind("pkgId", "glib-2.2.1")
|
||||||
, Bind("releaseId", Str("1"))
|
, Bind("releaseId", "1")
|
||||||
|
|
||||||
, Bind("pkgconfig", Pkg(Fix("./pkgconfig-0.15.0.fix")))
|
, Bind("pkgconfig", Fix("./pkgconfig-0.15.0.fix"))
|
||||||
|
|
||||||
, Bind("src", File(Url("ftp://ftp.gtk.org/pub/gtk/v2.2/glib-2.2.1.tar.bz2")))
|
, Bind("src", Source(Url("ftp://ftp.gtk.org/pub/gtk/v2.2/glib-2.2.1.tar.bz2")))
|
||||||
, Bind("build", File(Local("../build/glib-build.sh")))
|
, Bind("build", Source("../build/glib-build.sh"))
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
Descr(
|
Descr(
|
||||||
[ Bind("pkgId", Str("gnet-1.1.8"))
|
[ Bind("pkgId", "gnet-1.1.8")
|
||||||
, Bind("releaseId", Str("1"))
|
, Bind("releaseId", "1")
|
||||||
|
|
||||||
, Bind("pkgconfig", Pkg(Fix("./pkgconfig-0.15.0.fix")))
|
, Bind("pkgconfig", Fix("./pkgconfig-0.15.0.fix"))
|
||||||
, Bind("glib", Pkg(Fix("./glib-2.2.1.fix")))
|
, Bind("glib", Fix("./glib-2.2.1.fix"))
|
||||||
|
|
||||||
, Bind("src", File(Url("http://www.gnetlibrary.org/src/gnet-1.1.8.tar.gz")))
|
, Bind("src", Source(Url("http://www.gnetlibrary.org/src/gnet-1.1.8.tar.gz")))
|
||||||
, Bind("build", File(Local("../build/gnet-build.sh")))
|
, Bind("build", Source("../build/gnet-build.sh"))
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
Descr(
|
Descr(
|
||||||
[ Bind("pkgId", Str("gtk+-2.2.1"))
|
[ Bind("pkgId", "gtk+-2.2.1")
|
||||||
, Bind("releaseId", Str("1"))
|
, Bind("releaseId", "1")
|
||||||
|
|
||||||
, Bind("pkgconfig", Pkg(Fix("./pkgconfig-0.15.0.fix")))
|
, Bind("pkgconfig", Fix("./pkgconfig-0.15.0.fix"))
|
||||||
, Bind("glib", Pkg(Fix("./glib-2.2.1.fix")))
|
, Bind("glib", Fix("./glib-2.2.1.fix"))
|
||||||
, Bind("atk", Pkg(Fix("./atk-1.2.0.fix")))
|
, Bind("atk", Fix("./atk-1.2.0.fix"))
|
||||||
, Bind("pango", Pkg(Fix("./pango-1.2.1.fix")))
|
, Bind("pango", Fix("./pango-1.2.1.fix"))
|
||||||
|
|
||||||
, Bind("src", File(Url("ftp://ftp.gtk.org/pub/gtk/v2.2/gtk+-2.2.1.tar.bz2")))
|
, Bind("src", Source(Url("ftp://ftp.gtk.org/pub/gtk/v2.2/gtk+-2.2.1.tar.bz2")))
|
||||||
, Bind("build", File(Local("../build/gtk+-build.sh")))
|
, Bind("build", Source("../build/gtk+-build.sh"))
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,15 +1,15 @@
|
||||||
Descr(
|
Descr(
|
||||||
[ Bind("pkgId", Str("gtkspell-2.0.2"))
|
[ Bind("pkgId", "gtkspell-2.0.2")
|
||||||
, Bind("releaseId", Str("1"))
|
, Bind("releaseId", "1")
|
||||||
|
|
||||||
, Bind("pkgconfig", Pkg(Fix("./pkgconfig-0.15.0.fix")))
|
, Bind("pkgconfig", Fix("./pkgconfig-0.15.0.fix"))
|
||||||
, Bind("glib", Pkg(Fix("./glib-2.2.1.fix")))
|
, Bind("glib", Fix("./glib-2.2.1.fix"))
|
||||||
, Bind("atk", Pkg(Fix("./atk-1.2.0.fix")))
|
, Bind("atk", Fix("./atk-1.2.0.fix"))
|
||||||
, Bind("pango", Pkg(Fix("./pango-1.2.1.fix")))
|
, Bind("pango", Fix("./pango-1.2.1.fix"))
|
||||||
, Bind("gtk", Pkg(Fix("./gtk+-2.2.1.fix")))
|
, Bind("gtk", Fix("./gtk+-2.2.1.fix"))
|
||||||
, Bind("pspell", Pkg(Fix("./pspell-.12.2.fix")))
|
, Bind("pspell", Fix("./pspell-.12.2.fix"))
|
||||||
|
|
||||||
, Bind("src", File(Url("http://pan.rebelbase.com/download/extras/gtkspell/SOURCES/gtkspell-2.0.2.tar.gz")))
|
, Bind("src", Source(Url("http://pan.rebelbase.com/download/extras/gtkspell/SOURCES/gtkspell-2.0.2.tar.gz")))
|
||||||
, Bind("build", File(Local("../build/gtkspell-build.sh")))
|
, Bind("build", Source("../build/gtkspell-build.sh"))
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
10
test/fixdescriptors/httpd-2.0.45.fix
Normal file
10
test/fixdescriptors/httpd-2.0.45.fix
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
Descr(
|
||||||
|
[ Bind("pkgId", "httpd-2.0.45")
|
||||||
|
, Bind("releaseId", "1")
|
||||||
|
|
||||||
|
, Bind("ssl", Fix("./openssl-0.9.7b.fix"))
|
||||||
|
|
||||||
|
, Bind("src", Source(Url("http://apache.cs.uu.nl/dist/httpd/httpd-2.0.45.tar.gz")))
|
||||||
|
, Bind("build", Source("../build/httpd-build.sh"))
|
||||||
|
]
|
||||||
|
)
|
8
test/fixdescriptors/openssl-0.9.7b.fix
Normal file
8
test/fixdescriptors/openssl-0.9.7b.fix
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
Descr(
|
||||||
|
[ Bind("pkgId", "openssl-0.9.7b")
|
||||||
|
, Bind("releaseId", "1")
|
||||||
|
|
||||||
|
, Bind("src", Source(Url("http://www.openssl.org/source/openssl-0.9.7b.tar.gz")))
|
||||||
|
, Bind("build", Source("../build/openssl-build.sh"))
|
||||||
|
]
|
||||||
|
)
|
|
@ -1,17 +1,17 @@
|
||||||
Descr(
|
Descr(
|
||||||
[ Bind("pkgId", Str("pan-0.13.95"))
|
[ Bind("pkgId", "pan-0.13.95")
|
||||||
, Bind("releaseId", Str("2"))
|
, Bind("releaseId", "2")
|
||||||
|
|
||||||
, Bind("pkgconfig", Pkg(Fix("./pkgconfig-0.15.0.fix")))
|
, Bind("pkgconfig", Fix("./pkgconfig-0.15.0.fix"))
|
||||||
, Bind("glib", Pkg(Fix("./glib-2.2.1.fix")))
|
, Bind("glib", Fix("./glib-2.2.1.fix"))
|
||||||
, Bind("atk", Pkg(Fix("./atk-1.2.0.fix")))
|
, Bind("atk", Fix("./atk-1.2.0.fix"))
|
||||||
, Bind("pango", Pkg(Fix("./pango-1.2.1.fix")))
|
, Bind("pango", Fix("./pango-1.2.1.fix"))
|
||||||
, Bind("gtk", Pkg(Fix("./gtk+-2.2.1.fix")))
|
, Bind("gtk", Fix("./gtk+-2.2.1.fix"))
|
||||||
, Bind("gnet", Pkg(Fix("./gnet-1.1.8.fix")))
|
, Bind("gnet", Fix("./gnet-1.1.8.fix"))
|
||||||
, Bind("pspell", Pkg(Fix("./pspell-.12.2.fix")))
|
, Bind("pspell", Fix("./pspell-.12.2.fix"))
|
||||||
, Bind("gtkspell", Pkg(Fix("./gtkspell-2.0.2.fix")))
|
, Bind("gtkspell", Fix("./gtkspell-2.0.2.fix"))
|
||||||
|
|
||||||
, Bind("src", File(Url("http://pan.rebelbase.com/download/releases/0.13.95/SOURCE/pan-0.13.95.tar.bz2")))
|
, Bind("src", Source(Url("http://pan.rebelbase.com/download/releases/0.13.95/SOURCE/pan-0.13.95.tar.bz2")))
|
||||||
, Bind("build", File(Local("../build/pan-build-2.sh")))
|
, Bind("build", Source("../build/pan-build-2.sh"))
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
Descr(
|
Descr(
|
||||||
[ Bind("pkgId", Str("pango-1.2.1"))
|
[ Bind("pkgId", "pango-1.2.1")
|
||||||
, Bind("releaseId", Str("1"))
|
, Bind("releaseId", "1")
|
||||||
|
|
||||||
, Bind("pkgconfig", Pkg(Fix("./pkgconfig-0.15.0.fix")))
|
, Bind("pkgconfig", Fix("./pkgconfig-0.15.0.fix"))
|
||||||
, Bind("glib", Pkg(Fix("./glib-2.2.1.fix")))
|
, Bind("glib", Fix("./glib-2.2.1.fix"))
|
||||||
|
|
||||||
, Bind("src", File(Url("ftp://ftp.gtk.org/pub/gtk/v2.2/pango-1.2.1.tar.bz2")))
|
, Bind("src", Source(Url("ftp://ftp.gtk.org/pub/gtk/v2.2/pango-1.2.1.tar.bz2")))
|
||||||
, Bind("build", File(Local("../build/pango-build.sh")))
|
, Bind("build", Source("../build/pango-build.sh"))
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
Descr(
|
Descr(
|
||||||
[ Bind("pkgId", Str("pkgconfig-0.15.0"))
|
[ Bind("pkgId", "pkgconfig-0.15.0")
|
||||||
, Bind("releaseId", Str("1"))
|
, Bind("releaseId", "1")
|
||||||
|
|
||||||
, Bind("src", File(Url("http://www.freedesktop.org/software/pkgconfig/releases/pkgconfig-0.15.0.tar.gz")))
|
, Bind("src", Source(Url("http://www.freedesktop.org/software/pkgconfig/releases/pkgconfig-0.15.0.tar.gz")))
|
||||||
, Bind("build", File(Local("../build/pkgconfig-build.sh")))
|
, Bind("build", Source("../build/pkgconfig-build.sh"))
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
Descr(
|
Descr(
|
||||||
[ Bind("pkgId", Str("pspell-.12.2"))
|
[ Bind("pkgId", "pspell-.12.2")
|
||||||
, Bind("releaseId", Str("1"))
|
, Bind("releaseId", "1")
|
||||||
|
|
||||||
, Bind("src", File(Url("http://unc.dl.sourceforge.net/sourceforge/pspell/pspell-.12.2.tar.gz")))
|
, Bind("src", Source(Url("http://unc.dl.sourceforge.net/sourceforge/pspell/pspell-.12.2.tar.gz")))
|
||||||
, Bind("build", File(Local("../build/pspell-build.sh")))
|
, Bind("build", Source("../build/pspell-build.sh"))
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,8 +1,16 @@
|
||||||
Descr(
|
Descr(
|
||||||
[ Bind("pkgId", Str("subversion-0.21.0"))
|
[ Bind("pkgId", "subversion-0.21.0")
|
||||||
, Bind("releaseId", Str("1"))
|
, Bind("releaseId", "1")
|
||||||
|
|
||||||
, Bind("src", File(Url("http://subversion.tigris.org/files/documents/15/3712/subversion-0.21.0.tar.gz")))
|
, Bind("httpsClient", Bool(True))
|
||||||
, Bind("build", File(Local("../build/subversion-build.sh")))
|
, Bind("httpServer", Bool(True))
|
||||||
|
, Bind("httpsServer", Bool(True))
|
||||||
|
|
||||||
|
, Bind("ssl", If(Var("httpsClient"), Fix("./openssl-0.9.7b.fix"), ""))
|
||||||
|
|
||||||
|
, Bind("httpd", If(Var("httpServer"), Fix("./httpd-2.0.45.fix"), ""))
|
||||||
|
|
||||||
|
, Bind("src", Source(Url("http://subversion.tigris.org/files/documents/15/3712/subversion-0.21.0.tar.gz")))
|
||||||
|
, Bind("build", Source("../build/subversion-build.sh"))
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
|
@ -2,18 +2,18 @@ Descr(
|
||||||
[ Bind("pkgId", Str("system"))
|
[ Bind("pkgId", Str("system"))
|
||||||
, Bind("releaseId", Str("2"))
|
, Bind("releaseId", Str("2"))
|
||||||
|
|
||||||
, Bind("actATerm", Pkg(Fix("./aterm-2.0.fix")))
|
, Bind("actATerm", Fix("./aterm-2.0.fix"))
|
||||||
, Bind("actPkgConfig", Pkg(Fix("./pkgconfig-0.15.0.fix")))
|
, Bind("actPkgConfig", Fix("./pkgconfig-0.15.0.fix"))
|
||||||
, Bind("actGlib", Pkg(Fix("./glib-2.2.1.fix")))
|
, Bind("actGlib", Fix("./glib-2.2.1.fix"))
|
||||||
, Bind("actAtk", Pkg(Fix("./atk-1.2.0.fix")))
|
, Bind("actAtk", Fix("./atk-1.2.0.fix"))
|
||||||
, Bind("actPango", Pkg(Fix("./pango-1.2.1.fix")))
|
, Bind("actPango", Fix("./pango-1.2.1.fix"))
|
||||||
, Bind("actGtk", Pkg(Fix("./gtk+-2.2.1.fix")))
|
, Bind("actGtk", Fix("./gtk+-2.2.1.fix"))
|
||||||
, Bind("actGnet", Pkg(Fix("./gnet-1.1.8.fix")))
|
, Bind("actGnet", Fix("./gnet-1.1.8.fix"))
|
||||||
, Bind("actPspell", Pkg(Fix("./pspell-.12.2.fix")))
|
, Bind("actPspell", Fix("./pspell-.12.2.fix"))
|
||||||
, Bind("actGtkspell", Pkg(Fix("./gtkspell-2.0.2.fix")))
|
, Bind("actGtkspell", Fix("./gtkspell-2.0.2.fix"))
|
||||||
, Bind("actPan", Pkg(Fix("./pan-0.13.95.fix")))
|
, Bind("actPan", Fix("./pan-0.13.95.fix"))
|
||||||
, Bind("actSubversion", Pkg(Fix("./subversion-0.21.0.fix")))
|
, Bind("actSubversion", Fix("./subversion-0.21.0.fix"))
|
||||||
|
|
||||||
, Bind("build", File(Local("../../scripts/nix-populate")))
|
, Bind("build", Source("../../scripts/nix-populate"))
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
Loading…
Reference in a new issue