amigaos4: install scripts
authorAndy Broad <andy@broad.ology.org.uk>
Fri, 14 Aug 2015 00:53:49 +0000 (20:53 -0400)
committerJarkko Hietaniemi <jhi@iki.fi>
Sat, 5 Sep 2015 15:12:48 +0000 (11:12 -0400)
- needs different mode for shared objects (libraries)
- needs running the os-specific utility
- no hard links but symlinks

install_lib.pl
installperl

index 1278ba7..ac17bd8 100644 (file)
@@ -4,7 +4,7 @@
 # Probably installhtml needs to join the club.
 
 use strict;
-use vars qw($Is_VMS $Is_W32 $Is_OS2 $Is_Cygwin $Is_Darwin $Is_NetWare
+use vars qw($Is_VMS $Is_W32 $Is_OS2 $Is_Cygwin $Is_Darwin $Is_NetWare $Is_AmigaOS
            %opts $packlist);
 use subs qw(unlink link chmod);
 require File::Path;
@@ -49,6 +49,7 @@ $Is_OS2 = $^O eq 'os2';
 $Is_Cygwin = $^O eq 'cygwin';
 $Is_Darwin = $^O eq 'darwin';
 $Is_NetWare = $Config{osname} eq 'NetWare';
+$Is_AmigaOS = $^O eq 'amigaos';
 
 sub unlink {
     my(@names) = @_;
@@ -58,7 +59,7 @@ sub unlink {
 
     foreach my $name (@names) {
        next unless -e $name;
-       chmod 0777, $name if ($Is_OS2 || $Is_W32 || $Is_Cygwin || $Is_NetWare);
+       chmod 0777, $name if ($Is_OS2 || $Is_W32 || $Is_Cygwin || $Is_NetWare || $Is_AmigaOS);
        print "  unlink $name\n" if $opts{verbose};
        ( CORE::unlink($name) and ++$cnt
          or warn "Couldn't unlink $name: $!\n" ) unless $opts{notify};
@@ -76,15 +77,16 @@ sub link {
     $xto =~ s/^\Q$opts{destdir}\E// if $opts{destdir};
     print $opts{verbose} ? "  ln $xfrom $xto\n" : "  $xto\n"
        unless $opts{silent};
+    my $link = $Is_AmigaOS ? \&CORE::symlink : \&CORE::link;
     eval {
-       CORE::link($from, $to)
-           ? $success++
-           : ($from =~ m#^/afs/# || $to =~ m#^/afs/#)
-             ? die "AFS"  # okay inside eval {}
-             : die "Couldn't link $from to $to: $!\n"
-         unless $opts{notify};
-       $packlist->{$xto} = { from => $xfrom, type => 'link' };
-    };
+      $link->($from, $to)
+        ? $success++
+          : ($from =~ m#^/afs/# || $to =~ m#^/afs/#)
+            ? die "AFS"  # okay inside eval {}
+              : die "Couldn't link $from to $to: $!\n"
+                unless $opts{notify};
+      $packlist->{$xto} = { from => $xfrom, type => 'link' };
+     };
     if ($@) {
        warn "Replacing link() with File::Copy::copy(): $@";
        print $opts{verbose} ? "  cp $from $xto\n" : "  $xto\n"
@@ -146,4 +148,58 @@ sub mkpath {
     File::Path::mkpath(shift , $opts{verbose}, 0777) unless $opts{notify};
 }
 
+sub unixtoamiga
+{
+       my $unixpath = shift;
+
+       my @parts = split("/",$unixpath);
+       my $isdir = 0;
+       $isdir = 1 if substr($unixpath,-1) eq "/";
+
+       my $first = 1;
+       my $amigapath = "";
+
+       my $i = 0;
+
+       for($i = 0; $i <= $#parts;$i++)
+       {
+               next if $parts[$i] eq ".";
+               if($parts[$i] eq "..")
+               {
+                       $parts[$i] = "/";
+               }
+               if($i == 0)
+               {
+                       if($parts[$i] eq "")
+                       {
+                               $amigapath .= $parts[$i + 1] . ":";
+                               $i++;
+                               next;
+                       }
+               }
+               $amigapath .= $parts[$i];
+               if($i != $#parts)
+               {
+                       $amigapath .= "/" unless $parts[$i] eq "/" ;
+               }
+               else
+               {
+                       if($isdir)
+                       {
+                               $amigapath .= "/" unless $parts[$i] eq "/" ;
+                       }
+               }
+       }
+
+       return $amigapath;
+}
+
+sub amigaprotect
+{
+       my ($file,$bits) = @_;
+       print "PROTECT: File $file\n";
+       system("PROTECT $file $bits")
+             unless $opts{notify};
+}
+
 1;
index 5c34264..a5df4d6 100755 (executable)
@@ -11,7 +11,7 @@ BEGIN {
 }
 
 use strict;
-use vars qw($Is_VMS $Is_W32 $Is_OS2 $Is_Cygwin $Is_Darwin $Is_NetWare
+use vars qw($Is_VMS $Is_W32 $Is_OS2 $Is_Cygwin $Is_Darwin $Is_NetWare $Is_AmigaOS
            %opts $packlist);
 my $versiononly;
 
@@ -19,6 +19,14 @@ BEGIN {
     if ($Is_VMS) { eval 'use VMS::Filespec;' }
 }
 
+# HP-UX (at least) needs to maintain execute permissions
+# on dynamically-loadable libraries. So we do it for all.
+#
+# In AmigaOS, the 0777 means 'rwed' (e = execute, d = delete),
+# (not 'rwx') and having the 'd' makes updates more convenient.
+my $SO_MODE     = $Is_AmigaOS ? 0777 : 0555;
+my $NON_SO_MODE = $Is_AmigaOS ? 0666 : 0444;
+
 my $scr_ext = ($Is_VMS ? '.Com' : $Is_W32 ? '.bat' : '');
 
 use File::Find;
@@ -372,15 +380,15 @@ elsif ($Is_Cygwin) { # On Cygwin symlink it to CORE to make Makefile happy
     # AIX needs perl.exp installed as well.
     push(@corefiles,'perl.exp') if $^O eq 'aix';
 }
+
+
 foreach my $file (@corefiles) {
-    # HP-UX (at least) needs to maintain execute permissions
-    # on dynamically-loadable libraries. So we do it for all.
     if (copy_if_diff($file,"$installarchlib/CORE/$file")) {
        if ($file =~ /\.(\Q$so\E|\Q$dlext\E)$/) {
            strip("-S", "$installarchlib/CORE/$file") if $^O eq 'darwin';
-           chmod(0555, "$installarchlib/CORE/$file");
+           chmod($SO_MODE, "$installarchlib/CORE/$file");
        } else {
-           chmod(0444, "$installarchlib/CORE/$file");
+           chmod($NON_SO_MODE, "$installarchlib/CORE/$file");
        }
     }
 }
@@ -495,6 +503,10 @@ if ($versiononly) {
        (my $base = $_) =~ s#.*/##;
        copy($_, "$installscript/$base");
        chmod(0755, "$installscript/$base");
+       if ($Is_AmigaOS) {
+            my $amigapath = unixtoamiga("$installscript/$base");
+            amigaprotect($amigapath,"+s");
+        }
     }
 
     for (@tolink) {
@@ -735,7 +747,8 @@ sub installlib {
             if (copy_if_diff($_, "$installlib/$name")) {
                 strip("-S", "$installlib/$name")
                     if $^O eq 'darwin' and /\.(?:so|$dlext|a)$/;
-                chmod(/\.(so|$dlext)$/ ? 0555 : 0444, "$installlib/$name");
+                chmod(/\.(so|$dlext)$/ ? $SO_MODE : $NON_SO_MODE,
+                      "$installlib/$name");
             }
        }
     }