From: Jarkko Hietaniemi Date: Wed, 13 Jan 1999 16:50:17 +0000 (+0000) Subject: Atari MiNT port by Guido Flohr X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=61ae2fbf8676dafa05a9a9a710fde421f30a2071;p=p5sagit%2Fp5-mst-13.2.git Atari MiNT port by Guido Flohr (the diffs were based on 5.004_02). Tested by Guido and Frank Naumann . p4raw-id: //depot/cfgperl@2594 --- diff --git a/MANIFEST b/MANIFEST index c0c48db..f3b87f9 100644 --- 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 index 0000000..9cd4808 --- /dev/null +++ b/README.mint @@ -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///cc1 + +where is probably something like "m68k-atari-mint" +and 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 --- 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 index 0000000..b975cbb --- /dev/null +++ b/ext/POSIX/hints/mint.pl @@ -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 index 0000000..22d854c --- /dev/null +++ b/hints/mint.sh @@ -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 diff --git a/malloc.c b/malloc.c index 168b17f..e8fe41e 100644 --- a/malloc.c +++ b/malloc.c @@ -185,7 +185,7 @@ #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 @@ -377,7 +377,7 @@ #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, diff --git a/miniperlmain.c b/miniperlmain.c index 4eb1dcd..cfbe95b 100644 --- a/miniperlmain.c +++ b/miniperlmain.c @@ -13,6 +13,12 @@ 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 index 0000000..1608b15 --- /dev/null +++ b/mint/Makefile @@ -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 index 0000000..85e8a75 --- /dev/null +++ b/mint/README @@ -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 index 0000000..5c19d0e --- /dev/null +++ b/mint/errno.h @@ -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 + +/* 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 index 0000000..c271199 --- /dev/null +++ b/mint/pwd.c @@ -0,0 +1,43 @@ +/* pwd.c - replacement for broken pwd command. + * Copyright 1997 Guido Flohr, . + * Do with it as you please. + */ +#include +#include +#include +#include +#include + +#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 index 0000000..7b2d65d --- /dev/null +++ b/mint/stdio.h @@ -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 + +#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 index 0000000..38806cc --- /dev/null +++ b/mint/sys/time.h @@ -0,0 +1,2 @@ +#include + diff --git a/mint/time.h b/mint/time.h new file mode 100644 index 0000000..d6b031d --- /dev/null +++ b/mint/time.h @@ -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 + +#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 --- 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 diff --git a/t/io/fs.t b/t/io/fs.t index a532be2..c15f772 100755 --- 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'; diff --git a/t/lib/safe2.t b/t/lib/safe2.t index c9e3880..6afc117 100755 --- a/t/lib/safe2.t +++ b/t/lib/safe2.t @@ -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"; diff --git a/t/op/groups.t b/t/op/groups.t index 8d5689e..824e88d 100755 --- a/t/op/groups.t +++ b/t/op/groups.t @@ -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: diff --git a/t/op/mkdir.t b/t/op/mkdir.t index 5ba0a0f..acf16c1 100755 --- a/t/op/mkdir.t +++ b/t/op/mkdir.t @@ -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"); diff --git a/t/op/taint.t b/t/op/taint.t index d2cae8e..379093f 100755 --- a/t/op/taint.t +++ b/t/op/taint.t @@ -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 --- 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