This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
here-doc in quotes in multiline s//.../e in eval
[perl5.git] / os2 / perl2cmd.pl
index 2155549..07529ad 100644 (file)
@@ -2,6 +2,7 @@
 # Note that we cannot put hashbang to be extproc to make Configure work.
 
 use Config;
+use File::Compare;
 
 $dir = shift;
 $dir =~ s|/|\\|g ;
@@ -16,13 +17,38 @@ EOU
 $idir = $Config{installbin};
 $indir =~ s|\\|/|g ;
 
-foreach $file (<$idir/*.>) {
+my %seen;
+
+foreach $file (<$idir/*>) {
+  next if $file =~ /\.(exe|bak)/i;
   $base = $file;
   $base =~ s/\.$//;            # just in case...
   $base =~ s|.*/||;
-  $file =~ s|/|\\|g ;
-  print "Processing $file => $dir\\$base.cmd\n";
-  system "echo extproc perl -S > $dir\\$base.cmd";
-  system "type $file >> $dir\\$base.cmd";
+  $base =~ s|\.pl$||;
+  #$file =~ s|/|\\|g ;
+  warn "Clashing output name for $file, skipping" if $seen{$base}++;
+  my $new = (-f "$dir/$base.cmd" ? '' : ' (new file)');
+  print "Processing $file => $dir/$base.cmd$new\n";
+  my $ext = ($new ? '.cmd' : '.tcm');
+  open IN, '<', $file or warn, next;
+  open OUT, '>', "$dir/$base$ext" or warn, next;
+  my $firstline = <IN>;
+  my $flags = '';
+  $flags = $2 if $firstline =~ /^#!\s*(\S+)\s+-([^#]+?)\s*(#|$)/;
+  print OUT "extproc perl -S$flags\n$firstline";
+  print OUT $_ while <IN>;
+  close IN or warn, next;
+  close OUT or warn, next;
+  chmod 0444, "$dir/$base$ext";
+  next if $new;
+  if (compare "$dir/$base$ext", "$dir/$base.cmd") {    # different
+    chmod 0666, "$dir/$base.cmd";
+    unlink "$dir/$base.cmd";
+    rename "$dir/$base$ext", "$dir/$base.cmd";
+  } else {
+    chmod 0666, "$dir/$base$ext";
+    unlink "$dir/$base$ext";
+    print "...unchanged...\n";
+  }
 }