| 
				
			 | 
			
			
				@@ -1,4 +1,4 @@ 
			 | 
		
	
		
			
			| 
				1
			 | 
			
				
			 | 
			
			
				-#!/bin/sh 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1
			 | 
			
			
				+#!/usr/bin/perl 
			 | 
		
	
		
			
			| 
				2
			 | 
			
				2
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				3
			 | 
			
				3
			 | 
			
			
				 # ============================================ 
			 | 
		
	
		
			
			| 
				4
			 | 
			
				4
			 | 
			
			
				 # mklinks 
			 | 
		
	
	
		
			
			| 
				
			 | 
			
			
				@@ -27,28 +27,42 @@ 
			 | 
		
	
		
			
			| 
				27
			 | 
			
				27
			 | 
			
			
				 # ============================================ 
			 | 
		
	
		
			
			| 
				28
			 | 
			
				28
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				29
			 | 
			
				29
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				30
			 | 
			
				
			 | 
			
			
				-if [ -z "$1" ]; 
			 | 
		
	
		
			
			| 
				31
			 | 
			
				
			 | 
			
			
				-    then echo "usage: $0: DOTROOT [PREFIX]"; 
			 | 
		
	
		
			
			| 
				32
			 | 
			
				
			 | 
			
			
				-    exit 1; 
			 | 
		
	
		
			
			| 
				33
			 | 
			
				
			 | 
			
			
				-fi; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				30
			 | 
			
			
				+use strict; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				31
			 | 
			
			
				+use warnings; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				32
			 | 
			
			
				+use Getopt::Long; 
			 | 
		
	
		
			
			| 
				34
			 | 
			
				33
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				35
			 | 
			
				
			 | 
			
			
				-dotroot=$1 
			 | 
		
	
		
			
			| 
				36
			 | 
			
				
			 | 
			
			
				-prefix=$HOME 
			 | 
		
	
		
			
			| 
				
			 | 
			
				34
			 | 
			
			
				+sub usage { print STDERR "usage: $0: DOTROOT [PREFIX]\n"; exit 1; } 
			 | 
		
	
		
			
			| 
				37
			 | 
			
				35
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				38
			 | 
			
				
			 | 
			
			
				-if [ -n "$2" ]; 
			 | 
		
	
		
			
			| 
				39
			 | 
			
				
			 | 
			
			
				-    then prefix=$2; 
			 | 
		
	
		
			
			| 
				40
			 | 
			
				
			 | 
			
			
				-fi; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				36
			 | 
			
			
				+my $dotroot; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				37
			 | 
			
			
				+my $prefix; 
			 | 
		
	
		
			
			| 
				41
			 | 
			
				38
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				
			 | 
			
				39
			 | 
			
			
				+my $opts = GetOptions( 
			 | 
		
	
		
			
			| 
				
			 | 
			
				40
			 | 
			
			
				+    'dotroot=s' =>  \$dotroot, 
			 | 
		
	
		
			
			| 
				
			 | 
			
				41
			 | 
			
			
				+    'prefix=s' =>   \$prefix 
			 | 
		
	
		
			
			| 
				
			 | 
			
				42
			 | 
			
			
				+) or usage; 
			 | 
		
	
		
			
			| 
				42
			 | 
			
				43
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				43
			 | 
			
				
			 | 
			
			
				-ls $dotroot | while read item; 
			 | 
		
	
		
			
			| 
				44
			 | 
			
				
			 | 
			
			
				-do 
			 | 
		
	
		
			
			| 
				45
			 | 
			
				
			 | 
			
			
				-    source=$dotroot/$item; 
			 | 
		
	
		
			
			| 
				46
			 | 
			
				
			 | 
			
			
				-    target=$prefix/.$item; 
			 | 
		
	
		
			
			| 
				47
			 | 
			
				
			 | 
			
			
				-    if [ -e $target ]; 
			 | 
		
	
		
			
			| 
				48
			 | 
			
				
			 | 
			
			
				-    then 
			 | 
		
	
		
			
			| 
				49
			 | 
			
				
			 | 
			
			
				-        echo "target exists: $target" 1>&2; 
			 | 
		
	
		
			
			| 
				50
			 | 
			
				
			 | 
			
			
				-    else 
			 | 
		
	
		
			
			| 
				51
			 | 
			
				
			 | 
			
			
				-        ln -s $source $target; 
			 | 
		
	
		
			
			| 
				52
			 | 
			
				
			 | 
			
			
				-    fi; 
			 | 
		
	
		
			
			| 
				53
			 | 
			
				
			 | 
			
			
				-done; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				44
			 | 
			
			
				+$dotroot = $dotroot // shift; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				45
			 | 
			
			
				+$prefix = $prefix // shift; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				46
			 | 
			
			
				+$prefix = $prefix // $ENV{HOME}; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				47
			 | 
			
			
				+$dotroot or usage; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				48
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				49
			 | 
			
			
				+sub mklinks { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				50
			 | 
			
			
				+    my $dotroot = shift; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				51
			 | 
			
			
				+    my $prefix = shift; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				52
			 | 
			
			
				+    -d $dotroot or die "not a directory: $dotroot"; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				53
			 | 
			
			
				+    my @dirs = `ls $dotroot`; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				54
			 | 
			
			
				+    foreach my $dir (@dirs) { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				55
			 | 
			
			
				+        chomp $dir; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				56
			 | 
			
			
				+        my $source = "$dotroot/$dir"; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				57
			 | 
			
			
				+        my $target = "$prefix/.$dir"; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				58
			 | 
			
			
				+        `mkdir -p $prefix`; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				59
			 | 
			
			
				+        if (-e $target) { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				60
			 | 
			
			
				+            warn "target exists: $target\n"; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				61
			 | 
			
			
				+        } else { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				62
			 | 
			
			
				+            `ln -s $source $target`; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				63
			 | 
			
			
				+        } 
			 | 
		
	
		
			
			| 
				
			 | 
			
				64
			 | 
			
			
				+    } 
			 | 
		
	
		
			
			| 
				
			 | 
			
				65
			 | 
			
			
				+} 
			 | 
		
	
		
			
			| 
				
			 | 
			
				66
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				67
			 | 
			
			
				+mklinks($dotroot, $prefix); 
			 | 
		
	
		
			
			| 
				54
			 | 
			
				68
			 | 
			
			
				  
			 |