common/tools/ats/make_junction.pl
author Shabe Razvi <shaber@symbian.org>
Tue, 19 May 2009 14:51:44 +0100
changeset 99 2c7b53b5228f
child 113 7f0174848f99
permissions -rw-r--r--
Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
99
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
     1
#!/usr/bin/perl
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
     2
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
     3
use strict;
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
     4
use Getopt::Long;
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
     5
use File::Spec;
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
     6
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
     7
my $link;
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
     8
my $target;
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
     9
my $help;
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    10
my $force = 0;
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    11
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    12
sub usage($);
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    13
sub help();
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    14
sub usage_error();
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    15
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    16
my %optmap = (  'link' => \$link,
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    17
			    'target' => \$target,
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    18
			    'force' => \$force, 
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    19
                'help' => \$help);
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    20
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    21
GetOptions(\%optmap,
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    22
          'link=s',
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    23
          'target=s',
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    24
          'force!',
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    25
          'help!') 
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    26
          or usage_error();
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    27
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    28
if ($help) {
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    29
	help();
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    30
}
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    31
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    32
usage_error(), unless (defined($link) && defined($target));
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    33
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    34
my $junction_help = `junction /?`;
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    35
die("Need command \"junction\". Not found\n"), if ($junction_help =~ /is not recognised/);
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    36
die("Directory \"$target\" not found\n"), unless -d "$target";
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    37
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    38
my ($vol,$dir,$file) = File::Spec->splitpath($target);
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    39
my @subst_lines = `subst`;
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    40
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    41
foreach (@subst_lines) {
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    42
    my $line = $_;
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    43
    chomp($line);
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    44
    $line =~ /^(.:)\\: => (.*)$/;
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    45
    die("Cannot parse output of 'subst'. Bailing out confused."), unless (defined($1) and defined($2));    
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    46
    my $subst_drive = $1;
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    47
    my $subst_targ = $2;
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    48
    if (lc($subst_drive) eq lc($vol)) {
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    49
        print("Target $target is in a substituted drive: $line\n");
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    50
        $target = File::Spec->catfile(($subst_targ,$dir),$file);
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    51
        print("Target $target will be used\n");
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    52
        last;
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    53
    }
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    54
}
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    55
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    56
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    57
if ( -e "$link") {
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    58
    print("\"$link\" already exists. ");
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    59
    if (!$force) {
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    60
        my $choice;
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    61
        while($choice ne 'y' and $choice ne 'n') {
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    62
            print "Delete? (y/n)? ";
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    63
            $choice = <STDIN>;
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    64
            chomp($choice);
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    65
            $choice = lc($choice);
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    66
        }
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    67
        $force = $choice eq 'y';
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    68
    }    
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    69
    if ($force) {
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    70
        system("junction -d \"$link\" > nul");
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    71
        if ($?) {
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    72
            die("Cannot delete \"$link\": $!\n");
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    73
        }
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    74
        else {
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    75
            print "Deleted \"$link\"\n";
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    76
        }
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    77
    }
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    78
} 
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    79
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    80
system("junction \"$link\" \"$target\" > nul");
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    81
if ($?) {
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    82
    die("Cannot cteate junction \"$link\" -> \"$target\": $!\n");
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    83
}
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    84
else {
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    85
    print("Created junction \"$link\" -> \"$target\"\n");
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    86
}
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    87
exit 0;
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    88
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    89
sub usage($)
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    90
{
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    91
    my $error = shift;
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    92
    my $fh = $error == 0 ? *STDOUT : *STDERR;
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    93
    print $fh "make_junction.pl\n" .
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    94
            "Create a Windows junction (a.k.a symbolic link)\n" .
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    95
            "usage:\n" .
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    96
            "  make_junction.pl --help\n" .
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    97
            "  make_junction.pl --link=LINKDIR --target=TARGDIR\n " .
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    98
            "options:\n" .
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
    99
            "  --help                        Display this help and exit\n" .
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
   100
            "  --link=LINKDIR                LINKDIR specifies the junction to be created. Last component is the junction. The rest must exist\n" .
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
   101
            "  --target=TARGDIR              TARGDIR is directory to which the junction will point.\n" .
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
   102
            "                                If TARGDIR is in a substed drive, the real path will be used.\n";
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
   103
    exit $error;            
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
   104
}
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
   105
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
   106
sub help()
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
   107
{
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
   108
    usage(0);
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
   109
}
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
   110
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
   111
sub usage_error()
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
   112
{
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
   113
    usage(1);
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
   114
}             
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
   115
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
   116
# EOF
2c7b53b5228f Add ATS test client target <sf-send-testpkg> to default configuration. Default is off.
Shabe Razvi <shaber@symbian.org>
parents:
diff changeset
   117