Atari MiNT port by Guido Flohr <gufl0000@stud.uni-sb.de>
Jarkko Hietaniemi [Wed, 13 Jan 1999 16:50:17 +0000 (16:50 +0000)]
(the diffs were based on 5.004_02).  Tested by Guido
and Frank Naumann <fnaumann@prinz-atm.CS.Uni-Magdeburg.De>.

p4raw-id: //depot/cfgperl@2594

21 files changed:
MANIFEST
README.mint [new file with mode: 0644]
doio.c
ext/POSIX/hints/mint.pl [new file with mode: 0644]
hints/mint.sh [new file with mode: 0644]
malloc.c
miniperlmain.c
mint/Makefile [new file with mode: 0644]
mint/README [new file with mode: 0644]
mint/errno.h [new file with mode: 0644]
mint/pwd.c [new file with mode: 0644]
mint/stdio.h [new file with mode: 0644]
mint/sys/time.h [new file with mode: 0644]
mint/time.h [new file with mode: 0644]
perl.c
t/io/fs.t
t/lib/safe2.t
t/op/groups.t
t/op/mkdir.t
t/op/taint.t
util.c

index c0c48db..f3b87f9 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -35,6 +35,7 @@ README.beos           Notes about BeOS port
 README.cygwin32                Notes about Cygwin32 port
 README.dos             Notes about dos/djgpp port
 README.lexwarn         Notes about lexical warnings
+README.mint            Notes about Atari MiNT port
 README.mpeix           Notes about MPE/iX port
 README.os2             Notes about OS/2 port
 README.os390           Notes about OS/390 (nee MVS) port
@@ -284,10 +285,11 @@ ext/POSIX/POSIX.pod               POSIX extension documentation
 ext/POSIX/POSIX.xs             POSIX extension external subroutines
 ext/POSIX/hints/bsdos.pl       Hint for POSIX for named architecture
 ext/POSIX/hints/dynixptx.pl    Hint for POSIX for named architecture
-ext/POSIX/hints/freebsd.pl     Hint for POSIX for named architecture
-ext/POSIX/hints/linux.pl       Hint for POSIX for named architecture
-ext/POSIX/hints/netbsd.pl      Hint for POSIX for named architecture
-ext/POSIX/hints/next_3.pl      Hint for POSIX for named architecture
+ext/POSIX/hints/freebsd.pl      Hint for POSIX for named architecture
+ext/POSIX/hints/linux.pl        Hint for POSIX for named architecture
+ext/POSIX/hints/mint.pl         Hint for POSIX for named architecture
+ext/POSIX/hints/netbsd.pl       Hint for POSIX for named architecture
+ext/POSIX/hints/next_3.pl       Hint for POSIX for named architecture
 ext/POSIX/hints/openbsd.pl     Hint for POSIX for named architecture
 ext/POSIX/hints/sunos_4.pl     Hint for POSIX for named architecture
 ext/POSIX/typemap              POSIX extension interface types
@@ -417,6 +419,7 @@ hints/linux.sh              Hints for named architecture
 hints/lynxos.sh                Hints for named architecture
 hints/machten.sh       Hints for named architecture
 hints/machten_2.sh     Hints for named architecture
+hints/mint.sh          Hints for named architecture
 hints/mips.sh          Hints for named architecture
 hints/mpc.sh           Hints for named architecture
 hints/mpeix.sh         Hints for named architecture
@@ -817,6 +820,13 @@ mg.c                       Magic code
 mg.h                   Magic header
 minimod.pl             Writes lib/ExtUtils/Miniperl.pm
 miniperlmain.c         Basic perl w/o dynamic loading or extensions
+mint/errno.h           MiNT port
+mint/Makefile          MiNT port
+mint/pwd.c             MiNT port
+mint/README            MiNT port
+mint/stdio.h           MiNT port
+mint/sys/time.h                MiNT port
+mint/time.h            MiNT port
 mpeix/mpeixish.h       MPE/iX port
 mpeix/nm               MPE/iX port
 mpeix/relink           MPE/iX port
diff --git a/README.mint b/README.mint
new file mode 100644 (file)
index 0000000..9cd4808
--- /dev/null
@@ -0,0 +1,222 @@
+##########################################################################
+# *** README.mint
+##########################################################################
+
+If you want to build perl yourself on MiNT (or maybe on an Atari without
+MiNT) you may want to accept some advice from somebody who already did it...
+
+There was a perl port for Atari ST done by ++jrb bammi@cadence.com.
+This port tried very hard to build on non-MiNT-systems.  For the
+sake of efficiency I've left this way.  Yet, I haven't removed bammi's
+patches but left them intact.  Unfortunately some of the files that
+bammi contributed to the perl distribution seem to have vanished?
+
+So, how can you distinguish my patches from bammi's patches?  All of
+bammi's stuff is embedded in "#ifdef atarist" preprocessor macros.
+My MiNT port uses "#ifdef __MINT__" instead (and unconditionally
+undefines "atarist".  If you want to continue on bammi's port, all 
+you have to do is to swap the "-D" and "-U" switches for "__MINT__"  
+and "atarist" in the variable ccflags.
+
+However, I think that my version will still run on non-MiNT-systems
+provided that the user has a Eunuchs-like environment (i.e. the
+standard envariables like $PATH, $HOME, ... are set, there is a
+POSIX compliant shell in /bin/sh, and...)
+
+Known problems
+==============
+
+The problems you may encounter when building perl on your machine
+are most probably due to deficiencies in MiNT resp. the Atari
+platform in general.
+
+First of all, if you have less than 8 MB of RAM you shouldn't
+even try to build Perl yourself.  Better grab a binary pre-compiled
+version somewhere.  Even if you have more memory you should take
+some care.  Try to run in a fresh environment (without memory
+fragmented too much) with as few daemons, accessories, xcontrol
+modules etc. as possible.  If you run some AES you should 
+consider to start a console based environment instead.
+
+A problem has been reported with sed.  Sed is used to create
+some configuration files based on the answers you have given
+to the Configure script.  Unfortunately the Perl Configure script
+shows sed on MiNT its limits.  I have sed 2.05 with a stacksize
+of 64k and I have encountered no problems.  If sed crashes
+during your configuration process you should first try to
+augment sed's stacksize:
+
+       fixstk 64k /usr/bin/sed
+
+(or similar).  If it still doesn't help you may have a look
+which other versions of sed are installed on your system.
+If you have a KGMD 1.0 installation you will find three
+in /usr/bin.  Have a look there.
+
+Perl has some "mammut" C files.  If gcc reports "internal
+compiler error: program cc1 got fatal signal 10" this is very
+likely due to a stack overflow in program cc1. Find cc1 
+and fix its stack.  I have made good experiences with 
+
+       fixstk 2 cc1
+
+This doesn't establish a stack of 2 Bytes only as you might
+think.  It really reserves one half of the available memory
+for cc1's stack.  A setting of 1 would reserve the entire
+memory for cc1, 3 would reserve three thirds.  You will have
+to find out the value that suits to your system yourself.
+
+BTW, cc1 is maybe a little hard to find.  It is generally installed
+as
+       /usr/local/lib/gcc-lib/<platform>/<gcc-version>/cc1
+
+where <platform> is probably something like "m68k-atari-mint"
+and <version> is the gcc version you use (find out with
+"gcc --version").  Maybe "gcc-lib" is not installed in
+"/usr/local/lib" but "/usr/lib" on your system.
+
+Now run make (maybe "make -k").  If you get a fatal signal 10 
+increase cc1's stacksize, if you run out of memory you should 
+either decrease the stacksize or follow some more hints:
+
+Perl's building process is very handy on machines with a lot
+of virtual memory but may result in a desaster if you are short
+of memory.  If gcc fails to compile many source files you should
+reduce the optimization.  Grep for "optimize" in the file
+config.sh and change the flags.
+
+If only several huge files cause problems (actually it is not a
+matter of the file size resp. the amount of code but depends on
+the size of the individual funtions) it is useful to bypass
+the make program and compile these files directly from the
+command line.  For example if you got something like the
+following from make:
+
+       CCCMD = gcc -DPERL_CORE ....
+       ...
+       ...: virtual memory exhausted
+
+you should hack into the shell:
+
+       gcc -DPERL_CORE ... toke.c
+
+Please note that you have to add the name of the source file
+(here toke.c) at the end.
+
+If none of this helps, you're helpless.  Wait for a binary
+release.  If you have succeded you may encounter another problem
+at the linking process.  If gcc complains that it can't find
+some libraries within the perl distribution you probably have
+an old linker.  If it complains for example about "file not
+found for xxx.olb" you should cd into the directory in
+question and
+
+       ln -s libxxx.a xxx.olb
+
+This will fix the problem.
+
+This version (5.00402) of perl has passed most of the tests on my system:
+
+Failed Test  Status Wstat Total Fail  Failed  List of failed
+------------------------------------------------------------------------------
+io/pipe.t                    10    2  20.00%  7, 9
+io/tell.t                    13    1   7.69%  12
+lib/complex.t               762   13   1.71%  84-85, 248-251, 257, 272-273,
+                                              371, 380, 419-420
+lib/io_pipe.t                10    1  10.00%  9
+lib/io_tell.t                13    1   7.69%  12
+op/magic.t                   30    2   6.67%  29-30
+Failed 6/152 test scripts, 96.05% okay. 20/4359 subtests failed, 99.54% okay.
+
+Pipes always cause problems with MiNT, it's actually a surprise that
+most of the tests did work.  I've got no idea why the "tell" test failed,
+this shouldn't mean too big a problem however.
+
+Most of the failures of lib/complex seem to be harmless, actually errors
+far right to the decimal point...  Two failures seem to be serious:
+The sign of the results is reversed.  I would say that this is due
+to minor bugs in the portable math lib that I compiled perl with.
+
+I haven't bothered very much to find the reason for the failures
+with op/magic.t and op/stat.t.  Maybe you'll find it out.
+
+##########################################################################
+
+Another possible problem may arise from the implementation of  the "pwd" 
+command.  It happened to add a carriage return and newline to its output 
+no matter what the setting of $UNIXMODE is.  This is quite annoying since many
+library modules for perl take the output of pwd, chop off the
+trailing newline character and then expect to see a valid path in
+that.  But the carriage return (last but second character!) isn't
+chopped off.  You can either try to patch all library modules (at
+the price of performance for the extra transformation) or you can
+use my version of pwd that doesn't suffer from this deficiency.
+
+The fixed implementation is in the mint subdirectory.  Running
+"Configure" will attempt to build and install it if necessary
+(hints/mint.sh will do this work) but you can build and install it
+explicitly by:
+
+       cd mint
+       make install
+
+This is the fastest solution.
+
+Just in case you want to go the hard way: perl won't even build with a
+broken pwd!  You will have to fix the library modules
+(ext/POSIX/POSIX.pm, lib/Cwd.pm, lib/pwd.pl) at last after building
+miniperl.
+
+A major nuisance of current MiNTLib versions is the implementation
+of system() which is far from being POSIX compliant.  A real system()
+should fork and then exec /bin/sh with its argument as a command
+line to the shell.  The MiNTLib system() however doesn't expect
+that every user has a POSIX shell in /bin/sh.  It tries to work
+around the problem by forking and exec'ing the first token in its argument
+string.  To get a little bit of compliance to POSIX system() it
+tries to handle at least redirection ("<" or ">") on its own 
+behalf.  
+
+This isn't a good idea since many programs expect that they can
+pass a command line to system() that exploits all features of a
+POSIX shell.  If you use the MiNTLib version of system() with
+perl the Perl function system() will suffer from the same deficiencies.
+
+You will find a fixed version of system() in the mint subdirectory.
+You can easily insert this version into your system libc:
+
+       cd mint
+       make system.o
+       ar r /usr/lib/libc.a
+       ranlib /usr/lib/libc.a
+
+If you are suspicious you should either back up your libc before
+or extract the original system.o from your libc with 
+"ar x /usr/lib/libc.a system.o".  You can then backup the system.o
+module somewhere before you succeed.
+
+Anything missing?  Yep, I've almost forgotten...  
+No file in this  distribution without a fine saying.  Take this one:
+
+       "From a thief you should learn: (1) to work at night;
+       (2) if one cannot gain what one wants in one night to
+       try again the next night; (3) to love one's coworkers
+       just as thieves love each other; (4) to be willing to
+       risk one's life even for a little thing; (5) not to 
+       attach too much value to things even though one has 
+       risked one's life for them - just as a thief will resell
+       a stolen article for a fraction of its real value; 
+       (6) to withstand all kinds of beatings and tortures
+       but to remain what you are; and (7) to believe your
+       work is worthwhile and not be willing to change it."
+
+                       -- Rabbi Dov Baer, Maggid of Mezeritch
+
+OK, this was my motto while working on Perl for MiNT, especially rule (1)...
+
+Have fun with Perl!
+
+Guido Flohr
+--
+mailto:gufl0000@stud.uni-sb.de
+http://stud.uni-sb.de/~gufl0000
diff --git a/doio.c b/doio.c
index 08577a9..641046b 100644 (file)
--- a/doio.c
+++ b/doio.c
@@ -781,7 +781,7 @@ do_binmode(PerlIO *fp, int iotype, int flag)
     if (flag != TRUE)
        croak("panic: unsetting binmode"); /* Not implemented yet */
 #ifdef DOSISH
-#ifdef atarist
+#if defined(atarist) || defined(__MINT__)
     if (!PerlIO_flush(fp) && (fp->_flag |= _IOBIN))
        return 1;
     else
diff --git a/ext/POSIX/hints/mint.pl b/ext/POSIX/hints/mint.pl
new file mode 100644 (file)
index 0000000..b975cbb
--- /dev/null
@@ -0,0 +1,2 @@
+$self->{CCFLAGS} = $Config{ccflags} . ' -DNO_LOCALECONV_GROUPING -DNO_LOCALECONV_MON_GROUPING';
+
diff --git a/hints/mint.sh b/hints/mint.sh
new file mode 100644 (file)
index 0000000..22d854c
--- /dev/null
@@ -0,0 +1,94 @@
+# hints/mint.sh
+#
+# talk to gufl0000@stud.uni-sb.de if you want to change this file.
+# Please read the README.mint file.
+#
+# misc stuff
+
+case `uname -m` in
+       atarist*) archname="m68000-mint"
+                 ;;
+       *)        archname="m68k-mint"
+                 ;;
+esac             
+
+here=`pwd | tr -d '\015'`
+
+cc='gcc'
+
+# The weird include path is really to work around some bugs in
+# broken system header files.
+ccflags="-D__MINT__ -Uatarist -DDEBUGGING -I$here/../mint"
+
+# libs
+
+libpth="$prefix/lib /usr/lib /usr/local/lib"
+glibpth="$libpth"
+xlibpth="$libpth"
+
+libswanted='gdbm socket port m'
+so='none'
+
+#
+# compiler & linker flags
+#
+optimize='-O2 -fomit-frame-pointer -fno-defer-pop -fstrength-reduce'
+
+# The setlocale function in the MiNTLib is actually a bad joke.  We 
+# lend a workaround from Ultrix.  If neither LC_ALL nor LANG is
+# set in the environment, perl won't complain.  If one is set to
+# anything but "C" you will see a warning.  Note that you can
+# still use the GNU extension "$LANGUAGE" if you want to use
+# the i18n features of some GNU packages.
+util_cflags='ccflags="$ccflags -DLOCALE_ENVIRON_REQUIRED"'
+
+#
+# Some good answers to the questions in Configure:
+usenm='true'
+d_suidsafe='true'
+clocktype='long'
+usevfork='true'
+d_fsetpos='fpos_t'
+gidtype='gid_t'
+groupstype='gid_t'
+lseektype='long'
+models='none'
+modetype='mode_t'
+sizetype='size_t'
+timetype='time_t'
+uidtype='uid_t'
+
+# Don't remove that leading tab character (Configure Black Magic (TM)).
+    broken_pwd=
+case "`/bin/pwd|tr -d xy|tr '\015\012' 'xy'`" in
+*xy) broken_pwd=yes ;;
+esac
+
+if test X"$broken_pwd" = Xyes
+then
+    echo " "
+    echo "*** Building fixed 'pwd'... (as described in README.mint) ***"
+    echo " "
+    cd mint
+    make pwd
+    cd ..
+    if test -x mint/pwd -a -w /usr/bin
+    then
+       echo " "
+       echo "*** Installing fixed 'pwd'... ***"
+       echo " "
+       cd mint
+       make install
+       cd ..
+       if cmp -s mint/pwd /usr/bin/pwd
+       then
+           echo "*** Installed fixed 'pwd' successfully. ***"
+       else
+           echo "*** Failed to install fixed 'pwd'.  Aborting. ***"
+           exit 1
+       fi
+    else
+       echo "*** Cannot install fixed 'pwd'.  Aborting. ***"
+       exit 1
+    fi
+fi
index 168b17f..e8fe41e 100644 (file)
--- a/malloc.c
+++ b/malloc.c
 #define MIN_BUC_POW2 (sizeof(void*) > 4 ? 3 : 2) /* Allow for 4-byte arena. */
 #define MIN_BUCKET (MIN_BUC_POW2 * BUCKETS_PER_POW2)
 
-#if !(defined(I286) || defined(atarist))
+#if !(defined(I286) || defined(atarist) || defined(__MINT__))
        /* take 2k unless the block is bigger than that */
 #  define LOG_OF_MIN_ARENA 11
 #else
 #define u_short unsigned short
 
 /* 286 and atarist like big chunks, which gives too much overhead. */
-#if (defined(RCHECK) || defined(I286) || defined(atarist)) && defined(PACK_MALLOC)
+#if (defined(RCHECK) || defined(I286) || defined(atarist) || defined(__MINT__)) && defined(PACK_MALLOC)
 #  undef PACK_MALLOC
 #endif 
 
@@ -1093,7 +1093,7 @@ getpages(int needed, int *nblksp, int bucket)
        /* Second, check alignment. */
        slack = 0;
 
-#ifndef atarist /* on the atari we dont have to worry about this */
+#if !defined(atarist) && !defined(__MINT__) /* on the atari we dont have to worry about this */
 #  ifndef I286         /* The sbrk(0) call on the I286 always returns the next segment */
        /* WANTED_ALIGNMENT may be more than NEEDED_ALIGNMENT, but this may
           improve performance of memory access. */
@@ -1102,7 +1102,7 @@ getpages(int needed, int *nblksp, int bucket)
            add += slack;
        }
 #  endif
-#endif /* atarist */
+#endif /* !atarist && !MINT */
                
        if (add) {
            DEBUG_m(PerlIO_printf(Perl_debug_log, 
index 4eb1dcd..cfbe95b 100644 (file)
 static void xs_init _((void));
 static PerlInterpreter *my_perl;
 
+#if defined (__MINT__) || defined (atarist)
+/* The Atari operating system doesn't have a dynamic stack.  The
+   stack size is determined from this value.  */
+long _stksize = 64 * 1024;
+#endif
+
 int
 main(int argc, char **argv, char **env)
 {
diff --git a/mint/Makefile b/mint/Makefile
new file mode 100644 (file)
index 0000000..1608b15
--- /dev/null
@@ -0,0 +1,15 @@
+# IMPORTANT:  This Makefile is not intended to build Perl itself but
+#             only to replace a broken pwd command!
+
+all:   pwd
+
+pwd:   pwd.c
+       $(CC) -O3 -o pwd pwd.c
+
+install: pwd
+       (new_pwd=`which pwd` && cp -f $$new_pwd $$new_pwd.broken \
+               && cp -f pwd $$new_pwd) 
+
+clean:
+       rm -f pwd.o pwd
+
diff --git a/mint/README b/mint/README
new file mode 100644 (file)
index 0000000..85e8a75
--- /dev/null
@@ -0,0 +1,14 @@
+This subdirectory contains some additional files which are necessary
+(or at least useful) when compiling Perl on MiNT.
+
+"Makefile" and "pwd.c" will build and install a fixed version of the
+pwd command if your system pwd is broken.
+
+The header files are wrappers around broken system header files.  Make
+sure that this directory stands at first place in your include path
+when compiling Perl.
+
+The file system.c is an enhanced version of the system() function
+in the MiNTLib.  It is strongly recommended that you insert this
+version into your libc before you compile Perl (see README.MiNT
+in the toplevel directory for details).
diff --git a/mint/errno.h b/mint/errno.h
new file mode 100644 (file)
index 0000000..5c19d0e
--- /dev/null
@@ -0,0 +1,32 @@
+/* Wrapper around broken system errno.h.  */
+
+#ifndef _PERL_WRAPPER_AROUND_ERRNO_H
+# define _PERL_WRAPPER_AROUND_ERRNO_H 1
+
+/* First include the system file.  */
+#include_next <errno.h> 
+
+/* Now add the missing stuff.
+#ifndef EAGAIN
+# define EAGAIN EWOULDBLOCK
+#endif
+
+/* This one is problematic.  If you open() a directory with the
+   MiNTLib you can't detect from errno if it is really a directory
+   or if the file simply doesn't exist.  You'll get ENOENT 
+   ("file not found") in either case.
+   
+   Defining EISDIR as ENOENT is actually a bad idea but works fine
+   in general.  In praxi, if code checks for errno == EISDIR it
+   will attempt an opendir() call on the file in question and this
+   call will also file if the file really can't be found.  But
+   you may get compile-time errors if the errno checking is embedded
+   in a switch statement ("duplicate case value in switch").
+   
+   Anyway, here the define works alright.  */
+#ifndef EISDIR
+# define EISDIR ENOENT
+#endif
+
+#endif
+
diff --git a/mint/pwd.c b/mint/pwd.c
new file mode 100644 (file)
index 0000000..c271199
--- /dev/null
@@ -0,0 +1,43 @@
+/* pwd.c - replacement for broken pwd command.
+ * Copyright 1997 Guido Flohr, <gufl0000@stud.uni-sb.de>.
+ * Do with it as you please.
+ */
+#include <stdio.h>
+#include <limits.h>
+#include <unistd.h>
+#include <string.h>
+#include <errno.h>
+
+#if defined(__STDC__) || defined(__cplusplus)
+int main (int argc, char* argv[])
+#else
+int main (argc, argv)
+       int argc;
+       char* argv[];
+#endif
+{
+       char path_buf[PATH_MAX + 1];
+       
+       if (argc > 1) {
+               int i;
+               
+               fflush (stdout);
+               fputs (argv[0], stderr);
+               fputs (": ignoring garbage arguments\n", stderr);
+       }
+       
+       if (!getcwd (path_buf, PATH_MAX + 1)) {
+               fflush (stdout);
+               /* Save space, memory and the whales, avoid fprintf.  */
+               fputs (argv[0], stderr);
+               fputs (": can\'t get current working directory: ", stderr);
+               fputs (strerror (errno), stderr);
+               fputc ('\n', stderr);
+               return 1;
+       }
+       if (puts (path_buf) < 0) {
+               return 1;
+       }
+       return 0;
+}
+/* End of pwd.c.  */
diff --git a/mint/stdio.h b/mint/stdio.h
new file mode 100644 (file)
index 0000000..7b2d65d
--- /dev/null
@@ -0,0 +1,21 @@
+/* Wrapper around broken system stdio.h.  */
+
+#ifndef _PERL_WRAPPER_AROUND_STDIO_H
+# define _PERL_WRAPPER_AROUND_STDIO_H 1
+
+/* The MiNTLib has a macro called EOS in stdio.h.  This conflicts
+   with regnode.h.  Who had this glorious idea.  */
+#ifdef EOS
+# define PERL_EOS EOS
+#endif
+
+/* First include the system file.  */
+#include_next <stdio.h> 
+
+#ifdef EOS
+# undef EOS
+# define EOS PERL_EOS
+#endif
+
+#endif
+
diff --git a/mint/sys/time.h b/mint/sys/time.h
new file mode 100644 (file)
index 0000000..38806cc
--- /dev/null
@@ -0,0 +1,2 @@
+#include <time.h>
+
diff --git a/mint/time.h b/mint/time.h
new file mode 100644 (file)
index 0000000..d6b031d
--- /dev/null
@@ -0,0 +1,22 @@
+/* Wrapper around broken system time.h.  */
+
+#ifndef _PERL_WRAPPER_AROUND_TIME_H
+# define _PERL_WRAPPER_AROUND_TIME_H 1
+
+/* Recent versions of the MiNTLib have a macro HAS_TZNAME in 
+   time.h resp. sys/time.h.  Wow, I wonder why they didn't
+   define HAVE_CONFIG_H ...  */
+#ifdef HAS_TZNAME 
+# define PERL_HAS_TZNAME HAS_TZNAME
+#endif
+
+/* First include the system file.  */
+#include_next <time.h> 
+
+#ifdef HAS_TZNAME
+# undef HAS_TZNAME
+# define HAS_TZNAME PERL_HAS_TZNAME
+#endif
+
+#endif
+
diff --git a/perl.c b/perl.c
index bc73c3d..0671004 100644 (file)
--- a/perl.c
+++ b/perl.c
@@ -1758,6 +1758,9 @@ moreswitches(char *s)
 #ifdef POSIX_BC
        printf("BS2000 (POSIX) port by Start Amadeus GmbH, 1998\n");
 #endif
+#ifdef __MINT__
+       printf("MiNT port by Guido Flohr, 1997\n");
+#endif
 #ifdef BINARY_BUILD_NOTICE
        BINARY_BUILD_NOTICE;
 #endif
index a532be2..c15f772 100755 (executable)
--- a/t/io/fs.t
+++ b/t/io/fs.t
@@ -9,7 +9,7 @@ BEGIN {
 
 use Config;
 
-$Is_Dosish = ($^O eq 'dos' or $^O eq 'os2');
+$Is_Dosish = ($^O eq 'dos' or $^O eq 'os2' or $^O eq 'mint');
 
 # avoid win32 (for now)
 do { print "1..0\n"; exit(0); } if $^O eq 'MSWin32';
index c9e3880..6afc117 100755 (executable)
@@ -8,8 +8,8 @@ BEGIN {
         print "1..0\n";
         exit 0;
     }
-  # test 30 rather naughtily expects English error messages
-  $ENV{'LC_ALL'} = 'C';
+    # test 30 rather naughtily expects English error messages
+    $ENV{'LC_ALL'} = 'C';
 }
 
 # Tests Todo:
@@ -122,11 +122,9 @@ print $@ =~ /foo bar/ ? "ok 29\n" : "not ok 29\n";
   
 my $t = 30;
 $cpt->rdo('/non/existant/file.name');
-print +(($! =~ /No such file/ || $! =~ /file specification syntax error/) ||
-      $! =~ /A file or directory in the path name does not exist/ ||
-      $! =~ /Invalid argument/ ||
-      $! =~ /Device not configured/ ?
-      "ok $t\n" : "not ok $t # $!\n"); $t++;
+# The regexp is getting rather baroque.
+print $! =~ /No such file|file specification syntax error|A file or directory in the path name does not exist|Invalid argument|Device not configured|file not found/i ? "ok $t\n" : "not ok $t # $!\n"; $t++;
+# test #31 is gone.
 print 1 ? "ok $t\n" : "not ok $t\n#$@/$!\n"; $t++;
   
 #my $rdo_file = "tmp_rdo.tpl";
index 8d5689e..824e88d 100755 (executable)
@@ -1,6 +1,8 @@
 #!./perl
 
-$ENV{PATH} = '/bin:/usr/bin:/usr/xpg4/bin:/usr/ucb';
+$ENV{PATH} ="/bin:/usr/bin:/usr/xpg4/bin:/usr/ucb" .
+    exists $ENV{PATH} ? ":$ENV{PATH}" : "";
+$ENV{LC_ALL} = "C"; # so that external utilities speak English
 
 # We have to find a command that prints all (effective
 # and real) group names (not ids).  The known commands are:
index 5ba0a0f..acf16c1 100755 (executable)
@@ -15,4 +15,4 @@ print ($! =~ /exist|denied/ ? "ok 3\n" : "# $!\nnot ok 3\n");
 print (-d 'blurfl' ? "ok 4\n" : "not ok 4\n");
 print (rmdir('blurfl') ? "ok 5\n" : "not ok 5\n");
 print (rmdir('blurfl') ? "not ok 6\n" : "ok 6\n");
-print ($! =~ /such|exist/ ? "ok 7\n" : "not ok 7\n");
+print ($! =~ /such|exist|not found/i ? "ok 7\n" : "not ok 7\n");
index d2cae8e..379093f 100755 (executable)
@@ -366,7 +366,10 @@ else {
     test 72, $@ eq '', $@;             # NB: This should be allowed
 
     # Try first new style but allow also old style.
-    test 73, $!{ENOENT} || $! == 2 || ($Is_Dos && $! == 22); # File not found
+    test 73, $!{ENOENT} ||
+       $! == 2 || # File not found
+       ($Is_Dos && $! == 22) ||
+       ($^O eq 'mint' && $! == 33);
 
     test 74, eval { open FOO, "> $foo" } eq '', 'open for write';
     test 75, $@ =~ /^Insecure dependency/, $@;
diff --git a/util.c b/util.c
index 4b3d32d..2f5fcf8 100644 (file)
--- a/util.c
+++ b/util.c
@@ -2624,7 +2624,7 @@ find_script(char *scriptname, bool dosearch, char **search_ext, I32 flags)
            if (len + 1 + strlen(scriptname) + MAX_EXT_LEN >= sizeof tmpbuf)
                continue;       /* don't search dir with too-long name */
            if (len
-#if defined(atarist) || defined(DOSISH)
+#if defined(atarist) || defined(__MINT__) || defined(DOSISH)
                && tmpbuf[len - 1] != '/'
                && tmpbuf[len - 1] != '\\'
 #endif