We’ll after neglecting this blog for quite some time, I’m now back. I had to swap my laptop during the summer, and I decided to give one of the MacBook Pros a try. So I’ll be adding Perl on the Mac and the Mac in general to the topics covered here. My first dilemma with the new Mac was which perl to use.
Leopard only had 5.8 installed, and I’ve been hooked on 5.10 for a while now. (Snow Leopard has added 5.10, but by the time I got the upgrade I was commited to the ideal of keeping the system perl separate from my development perl.)
Having come from Arch Linux, I stumbled upon and really liked Arch OS/X. Unfortunately, it appears that it isn’t as well tested as MacPorts. In order to build any Perl modules that us XS with the Arch OS/X perl, I needed to use:
$ perl Makefile.PL \
LDDLFLAGS="-arch x86_64 -arch i386 -arch ppc \
-bundle -undefined dynamic_lookup -L/usr/local/lib" \
LDFLAGS="-arch x86_64 -arch i386 -arch ppc -L/usr/local/lib" \
CCFLAGS="-arch x86_64 -arch i386 -arch ppc -g -pipe \
-fno-common -DPERL_DARWIN -fno-strict-aliasing \
-I/usr/local/include -I." \
OPTIMIZE="-Os"
Ummm… I don’t think so! While I created an bash alias for it, cpan/cpanp where requiring constant tweaks. I assume I could have exported those variable from my bashrc, but I would rather avoid global changes like that.
Next I tried compiling my own perl. I ended up doing it several times as I learned where to put it, and realized I had forgotten to enable things like threads. This really seems to be the best way to go, but I would rather someone else keep up with security patches, new versions, etc.
So finally I tried MacPorts. So far so good. I have had trouble remembering
to check the variants (port variants <port-file>
), but otherwise thumbs
up.
One thing I realized that I want, is a record of all the ports that I have
installed (not a list of all the installed ports, just those that I had
purposely installed). So, I wrote a short bash script that I stuck in
~/bin/port
to keep a log:
#!/bin/bash
case "$1" in
install|uninstall|upgrade|activate )
echo "`date` $@" >> ~/.macports.log
;;
*)
esac
/opt/local/bin/port $@
Now anytime I run port install perl5.10 +shared +threads
it is
added to a log file. Rebuilding the system should be a snap. (I’m sure I could
have gotten this by grepping for sudo
and port
install
from the /var/log/system.log* files, but I like having it all in
one place and not worrying about log files being rotated out.)
One other tweak I need to make, was for CPANPLUS
. I wanted to
be able to install modules in either the system perl (by running
/usr/bin/cpanp
) or the MacPort perl
(/opt/local/bin/cpanp
), but both of those read my user config file
(~/.cpanplus/lib/CPANPLUS/Config/User.pm
) which need a full path
for perlwrapper => '/usr/bin/cpanp-run-perl'
. So I moved just
that part of the config to the system config file by runnning the following in
each cpanp:
$ s save system
$ s edit system
Then removing everything but the perlwrapper
configuration. And finally
taking the perlwrapper
configuration out of my User.pm
file. One other
thing I needed to do to make 5.10 the default perl. MacPort defaults to
perl5.8, but the following took care of that:
$ cd /opt/local/bin
$ sudo mv perl perl.bak
$ sudo cp perl-5.10 perl
# make cpanp -> cpanp-5.10, etc.
$ for i in *-5.10 ; do x=${i%%-5.10} ; sudo mv $x $x-5.8 ; sudo ln -s $i $x ; done
I see Python has a python_select
port-file. Maybe we need something like that
for Perl.
The contents of this blog are licensed under the Creative Commons “Attribution-Noncommercial-Share Alike 3.0″ license.