.\" Automatically generated by Pod::Man 4.10 (Pod::Simple 3.35) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "DBD::Oracle::Troubleshooting::Macos 3pm" .TH DBD::Oracle::Troubleshooting::Macos 3pm "2019-01-06" "perl v5.28.1" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" DBD::Oracle::Troubleshooting::Macos \- Tips and Hints to Troubleshoot DBD::Oracle on MacOs .SH "VERSION" .IX Header "VERSION" version 1.76 .SH "General Info" .IX Header "General Info" These instructions allow for the compilation and successful testing of DBD::Oracle on MacOS X 10.2.4 and higher, using Oracle 9iR2 \s-1DR\s0 (Release 9.2.0.1.0) or the 10g Instant Client release (10.1.0.3 at the time of writing). .PP MacOS X DBD::Oracle has been tested (and used) under Jaguar (10.2.x), Panther (10.3.x), Snow Leopard (10.6.x), Lion (10.7.x). Jaguar comes with a Perl version of 5.6.0., which I can report to work with DBD::Oracle 1.14 and higher once you take certain steps (see below). You may want to install a later perl, e.g., Perl 5.8.x. Please refer to: .PP .Vb 2 \& Installing Perl 5.8 on Jaguar \& http://developer.apple.com/internet/macosx/perl.html .Ve .PP for Perl 5.8.0 installation instructions. .PP DBD::Oracle is likely to not install out of the box on MacOS X 10.2. nor on 10.3. Manual but different changes will most likely be required on both versions. .PP The key problem on 10.2. (Jaguar) is a symbol clash (caused by a function \fBpoll()\fR named identically) between the \s-1IO\s0 library in at least Perl 5.6.0 (which is the version that comes with 10.2) and the Oracle client library in 9iR2 developer's release for MacOS X. The symptom is that your build appears to compile fine but then fails in the link stage. If you are running a (possibly self-installed) version of Perl other than 5.6.0, there's a chance that you are not affected by the symbol clash. So, try to build first without any special measures, and only resort to the instructions below if your build fails in the link stage with a duplicate symbol error. Note: if it fails to even compile, solve that problem first since it is not due to the symbol clash. .PP The key problem on 10.3 (Panther) is that the default perl that comes with the system is compiled with multi-threading turned on, which at least with the 9iR2 developer's release exposes a memory leak. Your DBD::Oracle build will compile, test, and install fine, but if you execute the same prepared statement multiple times, the process will quickly run up hundreds of megabytes of \s-1RAM,\s0 and depending on how much memory you have it will die sooner or later. .PP Oracle recently released an \*(L"Instant Client\*(R" for MacOSX 10.3 (Panther), which as far as I can attest has none of the problems above. Since it is also a very compact download (actually, a series of downloads) I highly recommend you install and use the Instant Client if you are on 10.3 (Panther) and you do not intend to run the Oracle database server on your MacOSX box. See below (Instructions for 10.3.x) for details. .SH "Instructions for 10.7.x (Lion)" .IX Header "Instructions for 10.7.x (Lion)" Perl on Lion and later is built with 64\-bit support, and therefore requires the 64\-bit Instant Client. As of this writing, only Instant Client 11.2 (64\-bit) actually works. The 64\-bit Instant Client 10.2 is incompatible with Lion . We therefore recommend the 11.2 client. If you must Instant Client 10.2, you may need to recompile Perl with 32\-bit support. .PP Either way, setup and configuration is the same: .IP "\(bu" 4 Download and install the basic, sqlplus, and sdk instantclient libraries and install them in a central location, such as \fI/usr/oracle_instantclient\fR. Downloads here .IP "\(bu" 4 Create a symlink from \fIlibclntsh.dylib.10.1\fR to \fIlibclntsh.dylib\fR: .Sp .Vb 3 \& cd /usr/oracle_instantclient/ \& ln \-s libclntsh.dylib.* libclntsh.dylib \& ln \-s libocci.dylib.* libocci.dylib .Ve .IP "\(bu" 4 Update your environment to point to the libraries: .Sp .Vb 2 \& export ORACLE_HOME=/usr/oracle_instantclient \& export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/usr/oracle_instantclient .Ve .IP "\(bu" 4 You should now be able to install DBD::Oracle from \s-1CPAN:\s0 .Sp .Vb 1 \& cpan DBD::Oracle .Ve .SH "Instructions for 10.6.x (Snow Leopard)" .IX Header "Instructions for 10.6.x (Snow Leopard)" These are taken from a stackoverflow answer by \*(L"nickisfat\*(R" who gave his/her permission for its inclusion here. You can see the original question and answers at http://stackoverflow.com/questions/5964999. .PP Getting a mac install of perl to play nicely with oracle is a bit of a pain \- once it's running it is fantastic, getting it running is a little frustrating.. .PP The below has worked for me on a few different intel macs, there could well be superfluous steps in there and it is likely not going to be the same for other platforms. .PP This will require use of shell, the root user and a bit of CPANing \- nothing too onerous .PP First off create a directory for the oracle pap \- libraries, instant client etc .PP sudo mkdir /usr/oracle_instantClient64 .PP Download and extract all 64 bit instant client packages from oracle to the above directory .PP Create a symlink within that directory for one of the files in there .PP sudo cd /usr/oracle_instantClient64 sudo ln \-s /usr/oracle_instantClient64/libclntsh.dylib.10.1 libclntsh.dylib .PP The following dir is hardcoded into the oracle instant client \- god knows why \- so need to create and symlink it .PP sudo mkdir \-p /b/227/rdbms/ sudo cd /b/227/rdbms/ sudo ln \-s /usr/oracle_instantClient64/ lib .PP Need to add a couple of environment variables, so edit /etc/profile and add them so they exist for all users: .PP export ORACLE_HOME=/usr/oracle_instantClient64 export DYLD_LIBRARY_PATH=/usr/oracle_instantClient64 .PP Now try and install DBD::Oracle through \s-1CPAN\s0 \- this will fail, but it means any dependencies will be downloaded and it retrieves the module for us .PP sudo perl \-MCPAN \-e shell install DBD::Oracle .PP When this fails exit \s-1CPAN\s0 and head to your .cpan/build dir \- if you used automatic config of \s-1CPAN\s0 it'll be .PP cd ~/.cpan/build .PP if you didn't auto configure you can find your build directory with the following command in \s-1CPAN\s0 .PP o conf build_dir .PP Once in the build dir look for the DBD::Oracle dir which has just been created (it'll be called something like DBD\-Oracle\-1.28\-?) and cd into it. .PP Now we need to switch to the root user. Root isn't enabled as default in osx \- for details on enabling see this post on the apple website .PP Once logged in as root we need to set the above environment variables for root: .PP export ORACLE_HOME=/usr/oracle_instantClient64 export DYLD_LIBRARY_PATH=/usr/oracle_instantClient64 .PP Now while still logged in as root we need to run the makefile for the module, then make, then install .PP perl Makefile.pl make install .PP Assuming that all worked without error log out of root: we're \s-1DBD\s0'd up! If this didn't work it's time to bust out google on whatever errors you're seeing .PP Now just to install the \s-1DBI\s0 module .PP sudo perl \-MCPAN \-e shell install \s-1DBI\s0 .PP Now you're all set \- enjoy your perly oracley new life .SH "Instructions for 10.2.x (Jaguar)" .IX Header "Instructions for 10.2.x (Jaguar)" 1) Install Oracle exactly per Oracle documentation. If you change install locations, then you'll need to modify paths accordingly. .PP 2) There are two ways to remedy the symbol clash. Either edit the symbol table of the Oracle client library \&\f(CW$ORACLE_HOME\fR/lib/libclntsh.dylib.9.0 such that the symbol _poll is no longer exported. Alternatively, download, patch, and re-install the perl \s-1IO\s0 modules. I could not successfully repeat the report for the former, but I did succeed by doing the latter. Instructions for both follow nonetheless. .PP .Vb 7 \& 2a) SKIP IF YOU WANT TO OR HAVE SUCCESSFULLY TRIED 2b). Make a \& backup copy of the $ORACLE_HOME/lib/libclntsh.dylib.9.0 file, or \& the file this name points to, since we\*(Aqre about to modify that \& library. Note that the ".9.0" suffix of the file name is version \& dependent, and that you want to work with the file pointed to \& through one or a series of symbolic links rather than any of the \& symbolic links (e.g., one will be called libclntsh.dylib). \& \& As user \*(Aqoracle\*(Aq execute the following command to fix namespace \& collisions in Oracle\*(Aqs dynamic libraries. \& \& nmedit \-R ./hints/macos_lib.syms $ORACLE_HOME/lib/libclntsh.dylib.9.0 \& \& *** Recall the above caveats regarding the file name. \& \& The problem with this is that the version of nm that comes with \& Jaguar doesn\*(Aqt support the \-R flag. I\*(Aqd be grateful to anyone who \& can suggest how to edit the symbol table of libraries on MacOS X. \& \& 2b) SKIP IF YOU WANT TO OR HAVE SUCCESSFULLY TRIED 2a). In this \& variant, we will patch the Perl IO modules to change the name of \& the poll() function, as that is where it is defined. In this case, \& we do not need to do anything with the Oracle libraries. Follow \& these steps: \& \& \- Download the module IO (IO.pm) from CPAN and unpack it. Check \& the documentation as to whether the version is compatible with \& your version of Perl; I used v1.20 with Perl 5.6.0 and had \& success. \& \& \- The files IO.xs, poll.c, and poll.h need to be patched. Apply \& the following patches, e.g., by cutting and pasting the marked \& section into a file perlio.patch and using that file as input \& for patch: \& \& $ patch \-p0 < perlio.patch \& \& The patch will basically rename the C implementation of poll() \& to io_poll(). The other patches were necessary to make v1.20 \& compile with Perl 5.6.0; they may not be necessary with other \& versions of IO and Perl, respectively. \& \& +=+=+=+=+=+=+= Cut after this line \& diff \-c ../IO\-orig/IO\-1.20/IO.xs ./IO.xs \& *** ../IO\-orig/IO\-1.20/IO.xs Mon Jul 13 23:36:24 1998 \& \-\-\- ./IO.xs Sat May 10 15:20:02 2003 \& *************** \& *** 205,211 **** \& ST(0) = sv_2mortal(newSVpv((char*)&pos, sizeof(Fpos_t))); \& } \& else { \& ! ST(0) = &sv_undef; \& errno = EINVAL; \& } \& \& \-\-\- 205,211 \-\-\-\- \& ST(0) = sv_2mortal(newSVpv((char*)&pos, sizeof(Fpos_t))); \& } \& else { \& ! ST(0) = &PL_sv_undef; \& errno = EINVAL; \& } \& \& *************** \& *** 249,255 **** \& SvREFCNT_dec(gv); /* undo increment in newRV() */ \& } \& else { \& ! ST(0) = &sv_undef; \& SvREFCNT_dec(gv); \& } \& \& \-\-\- 249,255 \-\-\-\- \& SvREFCNT_dec(gv); /* undo increment in newRV() */ \& } \& else { \& ! ST(0) = &PL_sv_undef; \& SvREFCNT_dec(gv); \& } \& \& *************** \& *** 272,278 **** \& i++; \& fds[j].revents = 0; \& } \& ! if((ret = poll(fds,nfd,timeout)) >= 0) { \& for(i=1, j=0 ; j < nfd ; j++) { \& sv_setiv(ST(i), fds[j].fd); i++; \& sv_setiv(ST(i), fds[j].revents); i++; \& \-\-\- 272,278 \-\-\-\- \& i++; \& fds[j].revents = 0; \& } \& ! if((ret = io_poll(fds,nfd,timeout)) >= 0) { \& for(i=1, j=0 ; j < nfd ; j++) { \& sv_setiv(ST(i), fds[j].fd); i++; \& sv_setiv(ST(i), fds[j].revents); i++; \& diff \-c ../IO\-orig/IO\-1.20/poll.c ./poll.c \& *** ../IO\-orig/IO\-1.20/poll.c Wed Mar 18 21:34:00 1998 \& \-\-\- ./poll.c Sat May 10 14:28:22 2003 \& *************** \& *** 35,41 **** \& # define POLL_EVENTS_MASK (POLL_CAN_READ | POLL_CAN_WRITE | POLL_HAS_EXCP) \& \& int \& ! poll(fds, nfds, timeout) \& struct pollfd *fds; \& unsigned long nfds; \& int timeout; \& \-\-\- 35,41 \-\-\-\- \& # define POLL_EVENTS_MASK (POLL_CAN_READ | POLL_CAN_WRITE | POLL_HAS_EXCP) \& \& int \& ! io_poll(fds, nfds, timeout) \& struct pollfd *fds; \& unsigned long nfds; \& int timeout; \& diff \-c ../IO\-orig/IO\-1.20/poll.h ./poll.h \& *** ../IO\-orig/IO\-1.20/poll.h Wed Apr 15 20:33:02 1998 \& \-\-\- ./poll.h Sat May 10 14:29:11 2003 \& *************** \& *** 44,50 **** \& #define POLLHUP 0x0010 \& #define POLLNVAL 0x0020 \& \& ! int poll _((struct pollfd *, unsigned long, int)); \& \& #ifndef HAS_POLL \& # define HAS_POLL \& \-\-\- 44,50 \-\-\-\- \& #define POLLHUP 0x0010 \& #define POLLNVAL 0x0020 \& \& ! int io_poll _((struct pollfd *, unsigned long, int)); \& \& #ifndef HAS_POLL \& # define HAS_POLL \& +=+=+=+=+=+=+= Cut to the previous line \& \& \- compile and install as you usually would, making sure that \& existing but conflicting modules get removed: \& \& $ perl Makefile.PL \& $ make \& $ make test \& $ make install UNINST=1 \& \& \- You are done. Continue with 3). .Ve .PP 3) Install the module \s-1DBI\s0 as per its instructions, if you haven't already done so. .PP 4) Install the DBD::Oracle module. .PP .Vb 4 \& $ perl Makefile.PL \& $ make \& $ make test \& $ make install .Ve .SH "Instructions for 10.3.x (Panther)" .IX Header "Instructions for 10.3.x (Panther)" I highly recommend you install and use the Oracle 10g Instant Client for MacOSX 10.3. Compared to traditional Oracle client installations it is a very compact download, and it has the memory leak problem fixed. As an added benefit, you will be able to seamlessly connect to 10g databases. Even if you do want to run the database server included in the 9iR2 Developer's Release, I'd still use the Instant Client for compiling \s-1OCI\s0 applications or drivers like DBD::Oracle. .PP If you still decide to use the full 9iR2 \s-1DR\s0 client, and if all you use DBD::Oracle for on MacOSX is development and test scripts that don't involve running the same query multiple times or many queries within the same perl process, then note that the memory leak will most likely never affect you in a serious way. In this case you may not need to bother and instead just go ahead, build and install DBD::Oracle straightforwardly without any special measures. .PP That said, here are the details. .PP 0) (If you decided for the 9iR2 \s-1DR\s0 client, skip to 1.) If you decided to use the 10g Instant Client, make sure you download and install all parts. (Given that this is perl land you may not need the \s-1JDBC\s0 driver, but why bother sorting out the 25% you may or may not ever need.) Follow the Oracle instructions and copy the contents of each part into the same destination directory. Change to this destination directory and create a symlink lib pointing to '.' (without the quotes): .PP .Vb 2 \& $ cd \& $ ln \-s lib . \& \& Also, set the environment variable ORACLE_HOME to the path to your \& instantclient destination directory. Makefile.PL needs it. \& \& Now return to your DBD::Oracle download. If the version is 1.16 or \& less you will need to patch Makefile.PL; in later versions this may \& be fixed already. Apply the following patch, e.g., by cutting and \& pasting into a file Makefile.PL.patch and then executing \& \& $ patch \-p0 < Makefile.PL.patch \& \& Here is the patch: \& \& +=+=+=+=+=+=+= Cut after this line \& *** Makefile.PL.orig Fri Oct 22 02:07:04 2004 \& \-\-\- Makefile.PL Fri May 13 14:28:53 2005 \& *************** \& *** 1252,1257 **** \& \-\-\- 1252,1258 \-\-\-\- \& print "Found $dir/$_\en" if $::opt_d; \& }, "$OH/rdbms", \& "$OH/plsql", # oratypes.h sometimes here (eg HPUX 11.23 Itanium Oracle 9.2.0) \& + "$OH/sdk", # Oracle Instant Client default location (10g) \& ); \& @h_dir = keys %h_dir; \& print "Found header files in @h_dir.\en" if @h_dir; \& *************** \& *** 1286,1292 **** \& \-\-\- 1287,1297 \-\-\-\- \& open FH, ">define.sql" or warn "Can\*(Aqt create define.sql: $!"; \& print FH "DEFINE _SQLPLUS_RELEASE\enQUIT\en"; \& close FH; \& + # we need to temporarily disable login sql scripts \& + my $sqlpath = $ENV{SQLPATH}; \& + delete $ENV{SQLPATH}; \& my $sqlplus_release = \`$sqlplus_exe \-S /nolog \e@define.sql 2>&1\`; \& + $ENV{SQLPATH} = $sqlpath if $sqlpath; \& unlink "define.sql"; \& print $sqlplus_release; \& if ($sqlplus_release =~ /^DEFINE _SQLPLUS_RELEASE = "(\ed?\ed)(\ed\ed)(\ed\ed)(\ed\ed)(\ed\ed)"/) { \& +=+=+=+=+=+=+= Cut to the previous line \& \& The first hunk allows Makefile.PL to find the header files which \& are in a subdirectory sdk, and the second temporarily disables any \& global and local login.sql scripts which may make the sqlplus call \& fail. If you don\*(Aqt have a local login.sql script you will most \& likely be fine without the second hunk. \& \& Now run Makefile.PL and make sure you provide the \-l flag: \& \& $ perl Makefile.PL \-l \& \& If you receive some ugly error message stating that some *.mk file \& couldn\*(Aqt be found you forgot to add the \-l flag. \& \& The continue the standard build process by running make. In \& DBD::Oracle versions 1.16 and earlier this will end in an error due \& to a failed execution of nmedit \-R. Ignore this error. Move on to \& running the tests, making sure the test scripts can log in to your \& database (e.g., by setting ORACLE_USERID). Note that by default the \& Instant Client does not have a network/admin/tnsnames.ora \& installed. Either install a suitable one, or point TNS_ADMIN to the \& directory where you keep your tnsnames.ora, or include the full \& SQLNET connection string in ORACLE_USERID. All three options are \& documented by Oracle in the README_IC.htm file that comes with the \& Instant Client, so be sure you read it if you don\*(Aqt understand what \& I\*(Aqm writing here. \& \& All tests should succeed. Complete by make install. You are done! \& Skip the other steps below, they do NOT apply to the Instant \& Client. (Although of course you may still install a later version \& of perl if you have the need.) .Ve .PP 1) Until the reason for the memory leak has been found and fixed, you need to remove the condition that exposes it. Apparently, this is multi-threading being enabled in Perl. The Perl 5.8.1RC3 that comes with Panther was compiled with multi-threading enabled, and \s-1AFAIK\s0 it cannot be turned off at runtime. Note that the problem is independent of whether you run multiple concurrent threads or not. .PP .Vb 5 \& Therefore, the solution is to build your own perl. I leave it up to \& you whether you want to replace the system perl or not. At least \& Perl 5.8.x comes with instructions as to how to replace the system \& perl on MacOS X, and what the caveats and risks are. I used 5.8.4, \& installed in /usr/local, and it worked perfectly fine. \& \& The key when configuring your custom build of perl is to disable \& multi\-threading (usethreads, useithreads, and usemultiplicity \& options). More precisely, do not enable them, as they are disabled \& by default, at least up to version 5.8.5. You can check whether \& threads are enabled or not by passing \-V to ther Perl interpreter: \& \& $ /path/to/your/perl \-V | grep usethreads \& \& You need to see a line saying, among other things, \& usethreads=undef. If you see usethreads=define then multi\-threading \& is enabled. .Ve .PP 2) If you choose not to replace the system perl, make sure that when you build \s-1DBI\s0 and DBD::Oracle you provide the full path to your own perl when running Makefile.PL, like so (assuming you installed in /usr/local, which is the default): .PP .Vb 1 \& $ /usr/local/bin/perl Makefile.PL \& \& Also, every time you run a DBD::Oracle script, you must use the \& full path too, unless your custom\-built perl comes before the \& system perl in the PATH environment. The easiest way to ensure you \& are using the right perl is to uninstall DBI from the system perl \& if you did install it under that as well. .Ve .PP 3) Continue with 3) as in instructions for Jaguar (making path substitutions for perl as discussed in 2). ====================================================================== .PP If you have any problems then follow the instructions in the \&\s-1README.\s0 Please post details of any problems (or changes you needed to make) to dbi\-users@perl.org and \s-1CC\s0 them to brooksch@mac.com on MacOSX specific problems. Rewrite of part of this readme, Panther instructions, and the Perl \s-1IO\s0 patch is credit to Hilmar Lapp, hlapp at gmx.net. .PP Earlier and original instructions thanks to: Andy Lester Steve Sapovits Tom Mornini .PP Date: Tue, 15 Apr 2003 16:02:17 +1000 Subject: Compilation bug in \s-1DBI\s0 on \s-1OSX\s0 with threaded Perl 5.8.0 From: Danial Pearce .PP In regards to a previous message on this list: .PP http://archive.develooper.com/dbi\-users@perl.org/msg16365.html .PP I have some more info: .PP I have compiled and installed Perl just fine with threads enabled: .PP \&./Configure \-de \-Dusethreads \-Dprefix=/usr make make test sudo make install .PP I have then successfully installed Apache and mod_perl as well. .PP When I try to compile and install \s-1DBI, I\s0 get a bus error, just like the people on this list have previously discussed on the thread above. .PP If I unpack the \s-1DBI,\s0 and run perl Makefile.pl, then alter the created Makefile so that it uses gcc2 rather than just \*(L"cc\*(R" then it compiles, installs and runs just fine. .PP The issue here is that Apple have just recently release 10.2.4, which updates /usr/bin/{gcc3,gcc2,g++3,g++2} and /usr/bin/cc is a symlink to /usr/bin/gcc3, so compilation of \s-1DBI\s0 under Apple's gcc3 does not work. It works find with gcc2 however. .PP I had the same problem with DBD::Pg, and was able to compile and install that using the same fix. .PP I am unsure if this is a problem with Apple's version of gcc, or a problem with the \s-1DBI/DBD\s0 code itself. Given that all my other open source applications are compiling and installing fine, I am thinking there isn't anything Apple are going to do about it. .PP cheers Danial .SH "AUTHORS" .IX Header "AUTHORS" .IP "\(bu" 4 Tim Bunce .IP "\(bu" 4 John Scoles .IP "\(bu" 4 Yanick Champoux .IP "\(bu" 4 Martin J. Evans .SH "COPYRIGHT AND LICENSE" .IX Header "COPYRIGHT AND LICENSE" This software is copyright (c) 2018, 2014, 2013, 2012, 2011, 2010 by Tim Bunce. .PP This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.