# Copyright (c) 1997-2004
# Ewgenij Gawrilow, Michael Joswig (Technische Universitaet Berlin, Germany)
# http://www.math.tu-berlin.de/polymake, mailto:polymake@math.tu-berlin.de
#
# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation; either version 2, or (at your option) any
# later version: http://www.gnu.org/licenses/gpl.txt.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#-----------------------------------------------------------------------------
# $Project: polymake $$Id: install_links.pl 4714 2004-06-22 16:23:15Z gawrilow $
use strict;
my $usage="$0 [ -m MASK ] SOURCE_DIR TARGET_DIR INSTALL_TOP [ DESTDIR ]\n";
my $mask=0777;
while (@ARGV && $ARGV[0] =~ /^-/) {
my $opt=shift;
if ($opt eq "--") {
last;
}
die $usage if !@ARGV;
if ($opt eq "-m") {
$mask=oct shift;
next;
}
die "$0: unknown option: $opt\n$usage";
}
die $usage if @ARGV<3 || @ARGV>4 || !-d $ARGV[0] || !-d $ARGV[1] || !-d $ARGV[2];
my ($from, $to, $top, $destdir)=(@ARGV);
$from eq $to and exit 0;
if ($from =~ s"^\Q$top\E/?"" && $to =~ s"^\Q$top\E/?"") {
while ((my ($dir, $rest)= split(m"/", $to, 2)) == 2) {
if ($from =~ s"^\Q$dir\E/"") {
$to=$rest;
} else {
last;
}
}
$to =~ s"[^/]+".."g;
$from="$to/$from";
$to=$ARGV[1];
} else {
$from=$ARGV[0];
if (defined $destdir) {
$destdir =~ s"/+$"";
$from =~ s"^\Q$destdir\E"";
}
}
opendir D, "$ARGV[0]" or die "$0: can't traverse $ARGV[0]: $!\n";
foreach my $f (readdir D) {
if (-f "$ARGV[0]/$f" and (stat(_))[2]&$mask) {
unlink "$to/$f";
symlink "$from/$f", "$to/$f"
or die "$0: can't create $to/$f: $!\n";
}
}
syntax highlighted by Code2HTML, v. 0.9.1