summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorGurusamy Sarathy <gsar@cpan.org>2000-05-28 18:41:12 +0000
committerGurusamy Sarathy <gsar@cpan.org>2000-05-28 18:41:12 +0000
commitbf4acbe410c9fcc2bff9bfa63411be8c6c46902a (patch)
tree077f53c9756dde3500e84d80533c3a6a24300200 /ext
parent704ea872433dd6d5a1c650f509289fdea5c037ab (diff)
downloadperl-bf4acbe410c9fcc2bff9bfa63411be8c6c46902a.tar.gz
MacOS support, part 1 (from Matthias Neeracher
<neeri@iis.ee.ethz.ch>) p4raw-id: //depot/perl@6143
Diffstat (limited to 'ext')
-rw-r--r--ext/DB_File/Makefile.PL1
-rw-r--r--ext/DynaLoader/dl_mac.xs137
-rw-r--r--ext/NDBM_File/Makefile.PL1
-rw-r--r--ext/POSIX/POSIX.xs24
4 files changed, 156 insertions, 7 deletions
diff --git a/ext/DB_File/Makefile.PL b/ext/DB_File/Makefile.PL
index cac6578bb3..041416029a 100644
--- a/ext/DB_File/Makefile.PL
+++ b/ext/DB_File/Makefile.PL
@@ -17,6 +17,7 @@ WriteMakefile(
OBJECT => 'version$(OBJ_EXT) DB_File$(OBJ_EXT)',
XSPROTOARG => '-noprototypes',
DEFINE => $OS2 || "",
+ INC => ($^O eq "MacOS" ? "-i ::::db:include" : "")
);
sub MY::postamble {
diff --git a/ext/DynaLoader/dl_mac.xs b/ext/DynaLoader/dl_mac.xs
new file mode 100644
index 0000000000..136e6d58c3
--- /dev/null
+++ b/ext/DynaLoader/dl_mac.xs
@@ -0,0 +1,137 @@
+/* dl_mac.xs
+ *
+ * Platform: Macintosh CFM
+ * Author: Matthias Neeracher <neeri@iis.ee.ethz.ch>
+ * Adapted from dl_dlopen.xs reference implementation by
+ * Paul Marquess (pmarquess@bfsec.bt.co.uk)
+ * $Log: dl_mac.xs,v $
+ * Revision 1.3 1998/04/07 01:47:24 neeri
+ * MacPerl 5.2.0r4b1
+ *
+ * Revision 1.2 1997/08/08 16:39:18 neeri
+ * MacPerl 5.1.4b1 + time() fix
+ *
+ * Revision 1.1 1997/04/07 20:48:23 neeri
+ * Synchronized with MacPerl 5.1.4a1
+ *
+ */
+
+#define MAC_CONTEXT
+#include "EXTERN.h"
+#include "perl.h"
+#include "XSUB.h"
+
+#include <CodeFragments.h>
+
+
+#include "dlutils.c" /* SaveError() etc */
+
+typedef CFragConnectionID ConnectionID;
+
+static ConnectionID ** connections;
+
+static void terminate(void)
+{
+ int size = GetHandleSize((Handle) connections) / sizeof(ConnectionID);
+ HLock((Handle) connections);
+ while (size)
+ CloseConnection(*connections + --size);
+ DisposeHandle((Handle) connections);
+ connections = nil;
+}
+
+static void
+dl_private_init(pTHX)
+{
+ (void)dl_generic_private_init(aTHX);
+}
+
+MODULE = DynaLoader PACKAGE = DynaLoader
+
+BOOT:
+ (void)dl_private_init(aTHX);
+
+
+ConnectionID
+dl_load_file(filename, flags=0)
+ char * filename
+ int flags
+ PREINIT:
+ OSErr err;
+ FSSpec spec;
+ ConnectionID connID;
+ Ptr mainAddr;
+ Str255 errName;
+ CODE:
+ DLDEBUG(1,fprintf(stderr,"dl_load_file(%s):\n", filename));
+ err = GUSIPath2FSp(filename, &spec);
+ if (!err)
+ err =
+ GetDiskFragment(
+ &spec, 0, 0, spec.name, kLoadCFrag, &connID, &mainAddr, errName);
+ if (!err) {
+ if (!connections) {
+ connections = (ConnectionID **)NewHandle(0);
+ atexit(terminate);
+ }
+ PtrAndHand((Ptr) &connID, (Handle) connections, sizeof(ConnectionID));
+ RETVAL = connID;
+ } else
+ RETVAL = (ConnectionID) 0;
+ DLDEBUG(2,fprintf(stderr," libref=%d\n", RETVAL));
+ ST(0) = sv_newmortal() ;
+ if (err)
+ SaveError(aTHX_ "DynaLoader error [%d, %#s]", err, errName) ;
+ else
+ sv_setiv( ST(0), (IV)RETVAL);
+
+void *
+dl_find_symbol(connID, symbol)
+ ConnectionID connID
+ Str255 symbol
+ CODE:
+ {
+ OSErr err;
+ Ptr symAddr;
+ CFragSymbolClass symClass;
+ DLDEBUG(2,fprintf(stderr,"dl_find_symbol(handle=%x, symbol=%#s)\n",
+ connID, symbol));
+ err = FindSymbol(connID, symbol, &symAddr, &symClass);
+ if (err)
+ symAddr = (Ptr) 0;
+ RETVAL = (void *) symAddr;
+ DLDEBUG(2,fprintf(stderr," symbolref = %x\n", RETVAL));
+ ST(0) = sv_newmortal() ;
+ if (err)
+ SaveError(aTHX_ "DynaLoader error [%d]!", err) ;
+ else
+ sv_setiv( ST(0), (IV)RETVAL);
+ }
+
+void
+dl_undef_symbols()
+ PPCODE:
+
+
+
+# These functions should not need changing on any platform:
+
+void
+dl_install_xsub(perl_name, symref, filename="$Package")
+ char * perl_name
+ void * symref
+ char * filename
+ CODE:
+ DLDEBUG(2,fprintf(stderr,"dl_install_xsub(name=%s, symref=%x)\n",
+ perl_name, symref));
+ ST(0)=sv_2mortal(newRV((SV*)newXS(perl_name, (void(*)())symref, filename)));
+
+
+char *
+dl_error()
+ CODE:
+ RETVAL = LastError ;
+ OUTPUT:
+ RETVAL
+
+# end.
diff --git a/ext/NDBM_File/Makefile.PL b/ext/NDBM_File/Makefile.PL
index 6ceab55a4a..7b586017d7 100644
--- a/ext/NDBM_File/Makefile.PL
+++ b/ext/NDBM_File/Makefile.PL
@@ -5,4 +5,5 @@ WriteMakefile(
MAN3PODS => {}, # Pods will be built by installman.
XSPROTOARG => '-noprototypes', # XXX remove later?
VERSION_FROM => 'NDBM_File.pm',
+ INC => ($^O eq "MacOS" ? "-i ::::db:include" : "")
);
diff --git a/ext/POSIX/POSIX.xs b/ext/POSIX/POSIX.xs
index b33e9619a4..d309ecb134 100644
--- a/ext/POSIX/POSIX.xs
+++ b/ext/POSIX/POSIX.xs
@@ -55,6 +55,9 @@
#ifdef I_UNISTD
#include <unistd.h>
#endif
+#ifdef MACOS_TRADITIONAL
+#undef fdopen
+#endif
#include <fcntl.h>
#if defined(__VMS) && !defined(__POSIX_SOURCE)
@@ -142,7 +145,7 @@
#else
# ifndef HAS_MKFIFO
-# ifdef OS2
+# if defined(OS2) || defined(MACOS_TRADITIONAL)
# define mkfifo(a,b) not_here("mkfifo")
# else /* !( defined OS2 ) */
# ifndef mkfifo
@@ -151,12 +154,19 @@
# endif
# endif /* !HAS_MKFIFO */
-# include <grp.h>
-# include <sys/times.h>
-# ifdef HAS_UNAME
-# include <sys/utsname.h>
+# ifdef MACOS_TRADITIONAL
+ struct tms { time_t tms_utime, tms_stime, tms_cutime, tms_cstime; };
+# define times(a) not_here("times")
+# define ttyname(a) (char*)not_here("ttyname")
+# define tzset() not_here("tzset")
+# else
+# include <grp.h>
+# include <sys/times.h>
+# ifdef HAS_UNAME
+# include <sys/utsname.h>
+# endif
+# include <sys/wait.h>
# endif
-# include <sys/wait.h>
# ifdef I_UTIME
# include <utime.h>
# endif
@@ -3352,7 +3362,7 @@ modf(x)
PPCODE:
double intvar;
/* (We already know stack is long enough.) */
- PUSHs(sv_2mortal(newSVnv(modf(x,&intvar))));
+ PUSHs(sv_2mortal(newSVnv(Perl_modf(x,&intvar))));
PUSHs(sv_2mortal(newSVnv(intvar)));
double