From 33f773c97ad36a2b9f9c9599f12ca12d655517f1 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Fri, 31 Oct 2003 13:12:20 +0000 Subject: [PATCH] * Improved prototype. svn path=/nixpkgs/trunk/; revision=447 --- .../system/{default.fix => all-packages.fix} | 0 pkgs-ng/system/i686-suse-linux.fix | 2 +- pkgs-ng/system/populate-linkdirs.pl | 72 +++++++++++++++++++ pkgs-ng/system/user-environment.fix | 8 +++ 4 files changed, 81 insertions(+), 1 deletion(-) rename pkgs-ng/system/{default.fix => all-packages.fix} (100%) create mode 100755 pkgs-ng/system/populate-linkdirs.pl create mode 100644 pkgs-ng/system/user-environment.fix diff --git a/pkgs-ng/system/default.fix b/pkgs-ng/system/all-packages.fix similarity index 100% rename from pkgs-ng/system/default.fix rename to pkgs-ng/system/all-packages.fix diff --git a/pkgs-ng/system/i686-suse-linux.fix b/pkgs-ng/system/i686-suse-linux.fix index 71f10ebe76b..dc5f426b5f5 100644 --- a/pkgs-ng/system/i686-suse-linux.fix +++ b/pkgs-ng/system/i686-suse-linux.fix @@ -1 +1 @@ -(import ./.) { system = "i686-suse-linux" } +(import ./user-environment.fix) { system = "i686-suse-linux" } diff --git a/pkgs-ng/system/populate-linkdirs.pl b/pkgs-ng/system/populate-linkdirs.pl new file mode 100755 index 00000000000..6462c543e07 --- /dev/null +++ b/pkgs-ng/system/populate-linkdirs.pl @@ -0,0 +1,72 @@ +#! /usr/bin/perl -w + +use strict; +use Cwd; + +my $selfdir = $ENV{"out"}; +mkdir "$selfdir", 0755 || die "error creating $selfdir"; + +# For each activated package, create symlinks. + +sub createLinks { + my $srcdir = shift; + my $dstdir = shift; + + my @srcfiles = glob("$srcdir/*"); + + foreach my $srcfile (@srcfiles) { + my $basename = $srcfile; + $basename =~ s/^.*\///g; # strip directory + my $dstfile = "$dstdir/$basename"; + if ($srcfile =~ /\/envpkgs$/) { + } elsif (-d $srcfile) { + # !!! hack for resolving name clashes + if (!-e $dstfile) { + mkdir $dstfile, 0755 || + die "error creating directory $dstfile"; + } + -d $dstfile or die "$dstfile is not a directory"; + createLinks($srcfile, $dstfile); + } elsif (-l $dstfile) { + my $target = readlink($dstfile); + die "collission between $srcfile and $target"; + } else { +# print "linking $dstfile to $srcfile\n"; + symlink($srcfile, $dstfile) || + die "error creating link $dstfile"; + } + } +} + +my %done; + +sub addPkg { + my $pkgdir = shift; + + return if (defined $done{$pkgdir}); + $done{$pkgdir} = 1; + + print "merging $pkgdir\n"; + + createLinks("$pkgdir", "$selfdir"); + +# if (-f "$pkgdir/envpkgs") { +# my $envpkgs = `cat $pkgdir/envpkgs`; +# chomp $envpkgs; +# my @envpkgs = split / +/, $envpkgs; +# foreach my $envpkg (@envpkgs) { +# addPkg($envpkg); +# } +# } +} + + +foreach my $name (keys %ENV) { + + next unless $name =~ /^act.*$/; + + my $pkgdir = $ENV{$name}; + next unless $pkgdir =~ /^\//; + + addPkg($pkgdir); +} diff --git a/pkgs-ng/system/user-environment.fix b/pkgs-ng/system/user-environment.fix new file mode 100644 index 00000000000..6bc6ef25bce --- /dev/null +++ b/pkgs-ng/system/user-environment.fix @@ -0,0 +1,8 @@ +{system}: derivation + { name = "user-environment" + , system = system + , builder = ./populate-linkdirs.pl + , pkgs = + [ ((import ./all-packages.fix) {system = system}).aterm + ] + } \ No newline at end of file