#!/usr/bin/perl # # Add $DSV_HOME/bin to your PATH. # $DSV_HOME = $ENV{"DSV_HOME"}; $DSV_HOME = "/home/moko/dsv" unless defined $DSV_HOME; sub mkdir { mkdir($_[0]) && return; return if $!{EEXIST}; die "$_[0]: $!"; } sub mkbin { local ($pgm, $file) = @_; open(F, ">$pgm") || die "$pgm: $!"; print F "#!/bin/sh\n# MACHINE-GENERATED. DO NOT EDIT !\nxpdf \"$file\"\n" || die "$pgm: $!"; close(F) || die "$pgm: $!"; chmod(0777 & ~umask, $pgm) || die "chmod $pgm: $!"; } sub dl { $bin_dir = "$DSV_HOME/bin"; $ds_dir = "$DSV_HOME/ds/$sym"; $url =~ /[^\/?&]*$/; $name = $&; local ($p) = "$ds_dir/$name"; if (!-r "$p") { &mkdir($ds_dir); if (system("wget -nv -O \"$p-tmp\" \"$url\"")) { print STDERR "FAILED: $sym -> $url\n"; } else { rename("$p-tmp", $p) || die "rename: $!\n"; } } if (!-x "$bin_dir/dsv-$sym") { print STDERR "adding dsv-$sym\n"; &mkbin("$bin_dir/dsv-$sym", $p); } for (@alias) { if (!-x "$bin_dir/dsv-$_") { print STDERR "adding dsv-$_\n"; &mkbin("$bin_dir/dsv-$_", $p); } } } sub flush { &dl if defined($sym) && defined($url); undef @alias; undef $url; } if ($ARGV[0] eq "-d") { print "$DSV_HOME\n"; exit(0); } &mkdir("$DSV_HOME"); &mkdir("$DSV_HOME/ds"); &mkdir("$DSV_HOME/bin"); while (<>) { s/#.*//; next if /^\s*$/; if (/^S:\s+(\S+)\s*$/) { &flush if defined $sym; $sym = $1; } elsif (/^A:\s+(\S+)\s*$/) { push(@alias, $1); } elsif (/^D:\s+(.*?)\s*$/) { $url = $1 unless defined $url; die unless defined $sym; &flush; } elsif (/^M:\s+(.*?)\s*$/) { # ignore } else { die "bad syntax: \"$_\""; } } &flush if defined $sym;