summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--pkgs/applications/audio/audacity/default.nix36
-rw-r--r--pkgs/applications/audio/ladspa-plugins/default.nix27
-rw-r--r--pkgs/applications/audio/ladspa-plugins/ladspah.nix29
-rw-r--r--pkgs/applications/window-managers/compiz/extra.nix1
-rw-r--r--pkgs/development/libraries/fftw/default.nix21
-rw-r--r--pkgs/games/fsg/alt-builder.nix36
-rw-r--r--pkgs/lib/default.nix3
-rw-r--r--pkgs/lib/strings-with-deps.nix19
-rw-r--r--pkgs/top-level/all-packages.nix44
-rw-r--r--pkgs/top-level/builder-defs.nix157
10 files changed, 356 insertions, 17 deletions
diff --git a/pkgs/applications/audio/audacity/default.nix b/pkgs/applications/audio/audacity/default.nix
new file mode 100644
index 00000000000..b8c28a0e22e
--- /dev/null
+++ b/pkgs/applications/audio/audacity/default.nix
@@ -0,0 +1,36 @@
+args: with args;
+	with (builderDefs { 
+	  src = 
+		fetchurl {
+			url = mirror://sourceforge/audacity/audacity-src-1.3.3.tar.gz;
+			sha256 = "17bjc2rnqspg1mbay4b1hhgg08iadapwf6w98gbv3r84rv1mhgls";
+		};
+
+  	buildInputs =[(wxGTK null) libogg libvorbis libsndfile libmad pkgconfig gtk 
+		gettext glib];
+	} null);
+	with stringsWithDeps; 
+let 
+	postInstall = FullDepEntry ("
+		old_rpath=$(patchelf --print-rpath \$out/bin/audacity);
+		patchelf --set-rpath \$old_rpath:${gtk}/lib:${glib}/lib \$out/bin/audacity;
+	") [minInit];
+	preBuild = FullDepEntry ("
+		sed -e '/\\/usr\\/local\\/lib\\/ladspa/awxGetApp()."+
+			"AddUniquePathToPathList(wxGetenv(wxT(\"HOME\"))+"+
+			"wxT(\"/.ladspa-plugins\"), pathList);'
+
+	") [minInit];
+in
+stdenv.mkDerivation {
+  name = "audacity-1.3.3";
+
+  builder = writeScript "audacity-1.3.3-builder"
+		(textClosure [addInputs (doDump "0") (noDepEntry "echo \$PATH; ar --version") doConfigure preBuild doMakeInstall postInstall doForceShare]);
+
+  meta = {
+    description = "
+	Audacity sound editor.
+";
+  };
+}
diff --git a/pkgs/applications/audio/ladspa-plugins/default.nix b/pkgs/applications/audio/ladspa-plugins/default.nix
new file mode 100644
index 00000000000..12722356d85
--- /dev/null
+++ b/pkgs/applications/audio/ladspa-plugins/default.nix
@@ -0,0 +1,27 @@
+args: with args;
+	with (builderDefs {
+		src = 
+		fetchurl {
+			url = http://plugin.org.uk/releases/0.4.15/swh-plugins-0.4.15.tar.gz;
+			sha256 = "0h462s4mmqg4iw7zdsihnrmz2vjg0fd49qxw2a284bnryjjfhpnh";
+		};
+		buildInputs = [fftw ladspaH pkgconfig];
+		configureFlags = [];
+	} null);
+	with stringsWithDeps;
+let
+	postInstall = FullDepEntry ("
+		ensureDir \$out/share/ladspa/
+		ln -s \$out/lib/ladspa \$out/share/ladspa/lib
+	") [minInit defEnsureDir];
+in
+stdenv.mkDerivation {
+	name = "swh-plugins-0.4.15";
+	builder = writeScript "swh-plugins-0.4.15-builder"
+		(textClosure [doConfigure doMakeInstall postInstall doForceShare]);
+	meta = {
+		description = "
+	LADSPA format audio plugins.
+";
+	};
+}
diff --git a/pkgs/applications/audio/ladspa-plugins/ladspah.nix b/pkgs/applications/audio/ladspa-plugins/ladspah.nix
new file mode 100644
index 00000000000..5ab77db3a2c
--- /dev/null
+++ b/pkgs/applications/audio/ladspa-plugins/ladspah.nix
@@ -0,0 +1,29 @@
+args: with args;
+	with stringsWithDeps;
+let 
+	src = 
+	fetchurl {
+		url = http://www.ladspa.org/ladspa_sdk/ladspa.h.txt;
+		sha256 = "1b908csn85ng9sz5s5d1mqk711cmawain2z8px2ajngihdrynb67";
+	};
+in
+	with builderDefs {
+		buildInputs = [];
+		inherit src;
+	} null;
+let
+	copyFile = FullDepEntry ("
+		ensureDir \$out/include
+		cp ${src} \$out/include/ladspa.h
+	") [minInit defEnsureDir];
+in
+stdenv.mkDerivation {
+	name = "ladspa.h";
+	builder = writeScript "ladspa.h-builder"
+		(textClosure [copyFile]);
+	meta = {
+		description = "
+	LADSPA format audio plugins.
+";
+	};
+}
diff --git a/pkgs/applications/window-managers/compiz/extra.nix b/pkgs/applications/window-managers/compiz/extra.nix
index 75d640ca1ca..501518d3f67 100644
--- a/pkgs/applications/window-managers/compiz/extra.nix
+++ b/pkgs/applications/window-managers/compiz/extra.nix
@@ -13,4 +13,5 @@ stdenv.mkDerivation {
   preBuild = "
     makeFlagsArray=(moduledir=$out/lib/compiz)
   ";
+  preConfigure = "touch m4/Makefile.in";
 }
diff --git a/pkgs/development/libraries/fftw/default.nix b/pkgs/development/libraries/fftw/default.nix
new file mode 100644
index 00000000000..66c78b3a1c0
--- /dev/null
+++ b/pkgs/development/libraries/fftw/default.nix
@@ -0,0 +1,21 @@
+args : with args;
+	with builderDefs {
+		src = 
+			fetchurl {
+				url = ftp://ftp.fftw.org/pub/fftw/fftw-3.1.2.tar.gz;
+				sha256 = "1gr63hf5vvsg50b2xwqaxwpvs1y9g8l0sb91a38wpvr7zsbjxfg1";
+			};
+		buildInputs = [];
+		configureFlags = ["--enable-float --enable-shared"];
+	} null;
+	with stringsWithDeps;
+stdenv.mkDerivation {
+	name = "fftw-3.1.2";
+	builder = writeScript "fftw-3.1.2-builder"
+		(textClosure [doConfigure doMakeInstall doForceShare]);
+	meta = {
+		description = "
+	Fastest Fourier Transform in the West library.
+";
+	};
+}
diff --git a/pkgs/games/fsg/alt-builder.nix b/pkgs/games/fsg/alt-builder.nix
new file mode 100644
index 00000000000..e0e006df073
--- /dev/null
+++ b/pkgs/games/fsg/alt-builder.nix
@@ -0,0 +1,36 @@
+args: with args; 
+	with (builderDefs 
+	{ 
+  		buildInputs =[(wxGTK null)];
+		  src = 
+			fetchurl {
+				url = http://www.piettes.com/fallingsandgame/fsg-src-4.4.tar.gz;
+				sha256 = "1756y01rkvd3f1pkj88jqh83fqcfl2fy0c48mcq53pjzln9ycv8c";
+			};
+	} null);
+	with stringsWithDeps; 
+let 
+	preBuild = FullDepEntry "
+		sed -e '
+		s@currentProbIndex != 100@0@;
+		' -i MainFrame.cpp;
+	" [minInit];
+
+  installPhase = FullDepEntry "
+		ensureDir \$out/bin \$out/libexec;
+		cp sand \$out/libexec;
+		echo -e '#! /bin/sh\nLC_ALL=C '\$out'/libexec/sand \"$@\"' >\$out/bin/fsg;
+		chmod a+x \$out/bin/fsg;
+	" [minInit defEnsureDir];
+in
+stdenv.mkDerivation {
+  name = "fsg-4.4";
+	builder = writeScript "fsg-4.4-builder"
+		(textClosure [doUnpack addInputs preBuild doMake installPhase doForceShare]);
+
+  meta = {
+    description = "
+	Falling Sand Game - a cellular automata engine tuned towards the likes of Falling Sand.
+";
+  };
+}
diff --git a/pkgs/lib/default.nix b/pkgs/lib/default.nix
index e631bca4c60..d9828a86917 100644
--- a/pkgs/lib/default.nix
+++ b/pkgs/lib/default.nix
@@ -95,6 +95,8 @@ rec {
     else if xs == [] || ys == [] then false
     else head xs == head ys && eqLists (tail xs) (tail ys);
 
+  # Workaround, but works in stable Nix now.
+  eqStrings = a: b: (a+(substring 0 0 b)) == ((substring 0 0 a)+b);
 
   # Determine whether a filename ends in the given suffix.
   hasSuffix = ext: fileName:
@@ -103,6 +105,7 @@ rec {
     in !(lessThan lenFileName lenExt) &&
        substring (sub lenFileName lenExt) lenFileName fileName == ext;
 
+  hasSuffixHack = a: b: hasSuffix (a+(substring 0 0 b)) ((substring 0 0 a)+b);
        
   # Bring in a path as a source, filtering out all Subversion and CVS
   # directories, as well as backup files (*~).
diff --git a/pkgs/lib/strings-with-deps.nix b/pkgs/lib/strings-with-deps.nix
index e5521eff642..584afae9838 100644
--- a/pkgs/lib/strings-with-deps.nix
+++ b/pkgs/lib/strings-with-deps.nix
@@ -4,6 +4,7 @@ args:
 	let 
 		inherit (builtins)	
 			head tail isList;
+in
 rec {
 
 /*
@@ -28,22 +29,20 @@ rec {
 	
 */
 	
-	textClosureDupList = arg:
+	textClosureDupList = arg: 
 	(
 		if isList arg then 
 			textClosureDupList {text = ""; deps = arg;} 
 		else
-			(if (arg ? deps) then 
-				map textClosureDupList arg.deps 
-			else []) 
-		++ [arg]
+			(concatLists (map textClosureDupList arg.deps)) ++ [arg]
 	);
 
-	textClosureList = arg: uniqList (textClosureDupList arg);
-	textClosure = arg: concatStringsSep "
-" (textClosureList arg);
+	textClosureList = arg:
+		(map	(x : x.text) 
+			(uniqList {inputList = textClosureDupList arg;}));
+	textClosure = arg: concatStringsSep "\n" (textClosureList arg);
 	
-	noDepEntry = text : {inherit text;};
-	FullDepEntry = text : deps: {inherit text args;};
+	noDepEntry = text : {inherit text;deps = [];};
+	FullDepEntry = text : deps: {inherit text deps;};
 	PackEntry = deps: {inherit deps; text="";};
 }
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 76ded87cbdc..8f8893be5e5 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -213,6 +213,14 @@ rec {
 			abort (toString result))
 		else x);
 
+	builderDefs = lib.sumArgs (import ./builder-defs.nix) {
+		inherit stringsWithDeps lib stdenv writeScript;
+	};
+
+	stringsWithDeps = import ../lib/strings-with-deps.nix {
+		inherit stdenv lib;
+	};
+
   ### STANDARD ENVIRONMENT
 
 
@@ -1605,6 +1613,10 @@ rec {
     inherit fetchurl stdenv;
   };
 
+  fftw = import ../development/libraries/fftw {
+    inherit fetchurl stdenv builderDefs stringsWithDeps;
+  };
+
 
   # commented out because it's using the new configuration style proposal which is unstable
   # needs some testing ..
@@ -3387,13 +3399,14 @@ rec {
     libstdcpp = gcc33.gcc;
   };
 
-#  audacity = import ../applications/audio/audacity {
-#    inherit fetchurl libogg libvorbis libsndfile libmad 
-#  	pkgconfig gettext;
-#  	inherit (gtkLibs) gtk glib;
-#	wxGTK = wxGTK28;
-#    stdenv = overrideGCC stdenv gcc41NPTL;
-#  };
+  audacity = import ../applications/audio/audacity {
+    inherit fetchurl libogg libvorbis libsndfile libmad 
+	pkgconfig gettext;
+	inherit (gtkLibs) gtk glib;
+	wxGTK = wxGTK28deps;
+    stdenv = overrideGCC stdenv gcc41NPTL;
+	inherit builderDefs stringsWithDeps;
+  };
 
   batik = import ../applications/graphics/batik {
     inherit fetchurl stdenv unzip;
@@ -3691,6 +3704,14 @@ rec {
     inherit fetchurl stdenv ;
   };
 
+  ladspaH = import ../applications/audio/ladspa-plugins/ladspah.nix {
+    inherit fetchurl stdenv builderDefs stringsWithDeps;
+  };
+
+  ladspaPlugins = import ../applications/audio/ladspa-plugins {
+    inherit fetchurl stdenv builderDefs stringsWithDeps fftw ladspaH pkgconfig;
+  };
+
   links = import ../applications/networking/browsers/links {
     inherit fetchurl stdenv;
   };
@@ -4121,6 +4142,15 @@ rec {
 	inherit (gtkLibs) glib gtk;
 	wxGTK = wxGTK28deps {unicode = false;};
   };
+	
+  fsgAltBuild = import ../games/fsg/alt-builder.nix {
+	inherit stdenv fetchurl;
+	wxGTK = wxGTK28deps {unicode = false;};
+	stringsWithDeps = import ../lib/strings-with-deps.nix {
+		inherit stdenv lib;
+	};
+	inherit builderDefs;
+  };
 
   gemrb = import ../games/gemrb {
     inherit fetchurl stdenv SDL openal freealut zlib libpng python;
diff --git a/pkgs/top-level/builder-defs.nix b/pkgs/top-level/builder-defs.nix
new file mode 100644
index 00000000000..c164aaae4fd
--- /dev/null
+++ b/pkgs/top-level/builder-defs.nix
@@ -0,0 +1,157 @@
+args: with args; with stringsWithDeps; with lib;
+rec
+{
+	inherit writeScript; 
+
+	forceShare = if args ? forceShare then args.forceShare else ["man" "doc" "info"];
+
+	archiveType = s: 
+		(if hasSuffixHack ".tar" s then "tar"
+		else if (hasSuffixHack ".tar.gz" s) || (hasSuffixHack ".tgz" s) then "tgz" 
+		else if (hasSuffixHack ".tar.bz2" s) || (hasSuffixHack ".tbz2" s) then "tbz2"
+		else (abort "unknown archive type : ${s}"));
+
+	minInit = noDepEntry ("
+		set -e
+		NIX_GCC=${stdenv.gcc}
+		export SHELL=${stdenv.shell}
+		# Set up the initial path.
+		PATH=
+		for i in \$NIX_GCC ${toString stdenv.initialPath}; do
+		    PATH=\$PATH\${PATH:+:}\$i/bin
+		done
+	" + (if ((stdenv ? preHook) && (stdenv.preHook != null) && 
+			((toString stdenv.preHook) != "")) then 
+		"
+		param1=${stdenv.param1}
+		param2=${stdenv.param2}
+		param3=${stdenv.param3}
+		param4=${stdenv.param4}
+		param5=${stdenv.param5}
+		source ${stdenv.preHook}
+
+		export TZ=UTC
+
+		prefix=${if args ? prefix then (toString args.prefix) else "\$out"}
+		"
+	else ""));
+
+	addInputs = FullDepEntry ("
+		# Recursively find all build inputs.
+		findInputs()
+		{
+		    local pkg=\$1
+
+		    case \$pkgs in
+			*\\ \$pkg\\ *)
+			    return 0
+			    ;;
+		    esac
+		    
+		    pkgs=\"\$pkgs \$pkg \"
+
+			echo \$pkg
+		    if test -f \$pkg/nix-support/setup-hook; then
+			source \$pkg/nix-support/setup-hook
+			cat \$pkg/nix-support/setup-hook
+			echo $PATH;
+		    fi
+		    
+		    if test -f \$pkg/nix-support/propagated-build-inputs; then
+			for i in \$(cat \$pkg/nix-support/propagated-build-inputs); do
+			    findInputs \$i
+			done
+		    fi
+		}
+
+		pkgs=\"\"
+		for i in \$NIX_GCC ${toString buildInputs} ${toString 
+		(if (args ? propagatedBuildInputs) then 
+		args.propagatedBuildInputs else "")}; do
+		    findInputs \$i
+		done
+
+
+		# Set the relevant environment variables to point to the build inputs
+		# found above.
+		addToEnv()
+		{
+		    local pkg=\$1
+		"+
+		(if !((args ? ignoreFailedInputs) && (args.ignoreFailedInputs == 1)) then "
+		    if [ -e \$1/nix-support/failed ]; then
+			echo \"failed input \$1\" >&2
+			fail
+		    fi
+		" else "")
+		+"
+		    if test -d \$1/bin; then
+			export _PATH=\$_PATH\${_PATH:+:}\$1/bin
+		    fi
+
+		    for i in \"\${envHooks[@]}\"; do
+			\$i \$pkg
+		    done
+		}
+
+		for i in \$pkgs; do
+		    addToEnv \$i
+		done
+
+
+		# Add the output as an rpath.
+		if test \"\$NIX_NO_SELF_RPATH\" != \"1\"; then
+		    export NIX_LDFLAGS=\"-rpath \$out/lib \$NIX_LDFLAGS\"
+		fi
+
+		PATH=\$_PATH\${_PATH:+:}\$PATH
+	") [minInit];
+	
+	defEnsureDir = FullDepEntry ("
+		# Ensure that the given directories exists.
+		ensureDir() {
+		    local dir
+		    for dir in \"\$@\"; do
+			if ! test -x \"\$dir\"; then mkdir -p \"\$dir\"; fi
+		    done
+		}
+	") [minInit];
+
+	toSrcDir = s : FullDepEntry (if (archiveType s) == "tar" then "
+			tar xvf ${s}
+			cd \"\$(tar tf ${s} | head -1 | sed -e 's@/.*@@' )\"
+	" else if (archiveType s) == "tgz" then "
+			tar xvzf ${s}
+			cd \"\$(tar tzf ${s} | head -1 | sed -e 's@/.*@@' )\"
+	" else if (archiveType s) == "tbz2" then "
+			tar xvjf ${s}
+			cd \"\$(tar tjf ${s} | head -1 | sed -e 's@/.*@@' )\"
+	" else (abort "unknown archive type : ${s}")) [minInit];
+
+	doConfigure = FullDepEntry ("
+		./configure --prefix=\"\$prefix\" ${toString (getAttr ["configureFlags"] "" args)}
+	") [minInit addInputs doUnpack];
+
+	doMake = FullDepEntry ("	
+		make ${toString (getAttr ["makeFlags"] "" args)}
+	") [minInit addInputs doUnpack];
+
+	doUnpack = toSrcDir (toString src);
+
+	doMakeInstall = FullDepEntry ("
+		make ${toString (getAttr ["makeFlags"] "" args)} "+
+			"${toString (getAttr ["installFlags"] "" args)} install") [doMake];
+
+	doForceShare = FullDepEntry (" 
+		ensureDir \$prefix/share
+		for d in ${toString forceShare}; do
+			if [ -d \$prefix/\$d -a ! -d \$prefix/share/\$d ]; then
+				mv -v \$prefix/\$d \$prefix/share
+				ln -sv share/\$d \$prefix
+			fi;
+		done;
+	") [minInit defEnsureDir];
+
+	doDump = n: noDepEntry "echo Dump number ${n}; set";
+
+}