diff options
Diffstat (limited to 'nixpkgs/pkgs/tools/typesetting/tex/nix/copy-includes.pl')
-rw-r--r-- | nixpkgs/pkgs/tools/typesetting/tex/nix/copy-includes.pl | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/nix/copy-includes.pl b/nixpkgs/pkgs/tools/typesetting/tex/nix/copy-includes.pl new file mode 100644 index 000000000000..2cec62fc7cb6 --- /dev/null +++ b/nixpkgs/pkgs/tools/typesetting/tex/nix/copy-includes.pl @@ -0,0 +1,43 @@ +use strict; +use File::Basename; + +sub createDirs; +sub createDirs { + my $path = shift; + return unless $path =~ /^(.*)\/([^\/]*)$/; + my $dir = $1; + return if -d $dir; + return if -e $dir; + createDirs $dir; + mkdir $dir or die "cannot create directory `$dir'"; +} + +my $maxParents = 0; +for (my $n = 0; $n < @ARGV; $n += 2) { + my $fullPath = $ARGV[$n]; + my $relPath = $ARGV[$n + 1]; + my $parents = 0; + foreach my $comp (split /\//, $relPath) { + $parents++ if ($comp eq "..") + } + $maxParents = $parents if $parents > $maxParents; +} + +my $startDir = "./"; +for (my $n = 0; $n < $maxParents; $n++) { + $startDir .= "dotdot/"; + mkdir "$startDir" or die "cannot create directory `$startDir': $!"; +} + +chdir $startDir or die; + +for (my $n = 0; $n < @ARGV; $n += 2) { + my $fullPath = $ARGV[$n]; + my $relPath = $ARGV[$n + 1]; + + createDirs $relPath; + + symlink $fullPath, $relPath or die "cannot create symlink `$relPath'"; +} + +print "$startDir\n"; |