PGPLOT
is a library of plotting subroutines written by Tim Pearson,
callable from Fortran and C,
that have been used in a variety of astronomy programs, and
some other software packages.
PGPLOT
is free for non-commercial use and downloadable as source.
Although a new version has not appeared for some time, it is
convenient, flexible, and many people and
a number of useful programs depend on it.
OS X issues
Historically you typically installed PGPLOT by either compiling
from source or installing a software package that included
a compiled library (libpgplot.a) and various other stuff like
fonts. This used to be fairly easy on Linux or Mac, but
starting around OS X 10.6 and/or 64-bit CPU Macs, I and other
people had difficulty compiling PGPLOT on OS X. Typically
one gets an error message like: /usr/bin/ranlib: archive member:
libpgplot.a(grdate.o) cputype (16777223) does not match previous
archive members cputype (7) (all members must match).
If you google
around you can find lots of puzzled people, and a number of web
pages that suggest workarounds (not all of which are specifically
for 10.6; none have solved the
problem for me). I've diagnosed the issue and provide here
a couple of configuration files which you can add to a regular
PGPLOT source distribution so it will compile correctly.
Instructions for fixing and installing PGPLOT
You will need a gcc compiler - Apple's gcc compiler is
known to work and is installed with Xcode -
and your favorite Fortran compiler, either g77 or gfortran.
If you don't have the compilers installed look at http://hpc.sourceforge.net.
Make the parent source directory, e.g. sudo mkdir
/usr/local/src
cd to this parent source directory, e.g. cd /usr/local/src , copy PGPLOT distribution there and untar it, which will create a pgplot/ subdirectory:
sudo tar zxvf pgplot5.2.tar.gz
NEW STEP: download a tar archive of my config files pgplot_macosx_conf.tar
and untar them in the /usr/local/src/pgplot directory: cd /usr/local/src/pgplot ; sudo tar
xvf pgplot_macosx_conf.tar. This will make a subdirectory
called sys_macosx with three configuration files.
make a directory in which to compile the library, e.g. sudo mkdir
/usr/local/lib/pgplot
cd to this compilation directory, e.g. cd /usr/local/lib/pgplot
edit drivers.list to uncomment the drivers you want (remove
the ! at the beginning of each desired line). I
recommend /GIF, /NULL, /PS, /VPS, /CPS, /VCPS, /XTERM, /XWINDOW, and
/XSERVE. Trying /PNG or /TPNG will cause a compilation failure; a
note on how to fix this is below.
run the makemake configuration script using one of my new config files:
choose one depending on whether you will compile other programs with
g77 or gfortran and in 32 or 64 bit.
Compile the library and demo programs: sudo make all
If you have a problem compiling the demo programs, you can skip
them and just make the libraries with sudo make lib grfont.dat pgplot.doc
pgxwin_server , but this should not usually
happen.
If you need the library libcpgplot.a for compatibility with C programs, you can make it with sudo make cpg.
If you mess up at some point and want to start over, in the
library directory do a sudo make clean ; sudo rm libpgplot.a
. This will remove any intermediate partially-compiled libraries.
You now have a library, libpgplot.a.
If you ran sudo make cpg you will also have libcpgplot.a.
Compiling and running programs
To compile
programs using it, link to /usr/local/lib/pgplot/libpgplot.a
/usr/X11/lib/libX11.dylib
For example g77 -o myprog myprog.f /usr/local/lib/pgplot/libpgplot.a
/usr/X11/lib/libX11.dylib
To run programs with PGPLOT, don't forget to set the environment
variable PGPLOT_DIR to the library directory. Otherwise it
can't find the fonts at runtime. This is best done in a startup file
like .bash_profile or .cshrc, for example for bash: export PGPLOT_DIR=/usr/local/lib/pgplot ; and for csh: setenv PGPLOT_DIR /usr/local/lib/pgplot
You must use the same compiler for
your program that you used for the library: g77 OR gfortran. You
could compile PGPLOT libraries with the two compilers in two different
directories and use one or the other as needed.
The /xs device should work when run from a mac Terminal, but /xt
won't. /xt will work when run from an xterm under X11.
If you want to get the /PNG driver to work, uncomment it in
drivers.list, and after running makemake and
before compiling, edit the makefile to comment out the following line:
pndriv.o : ./png.h ./pngconf.h ./zlib.h ./zconf.h . This has
an incorrect location for the PNG library header files which causes
compilation to fail.
If for some reason you need to make the libpgplot.so shared object
(dynamically loaded) library, you should be able to do this by uncommenting
the lines in the .conf file (gfortran_gcc_32.conf or similar)
that read SHARED_LIB="libpgplot.so" and SHARED_LD="gcc -shared -o $SHARED_LIB", before running the "makemake" step.
Configuration files on github
The new configuration files and these instructions are also available
from my github page for PGPLOT configuration. You can fork them or issue a pull request if you have modifications.
Why this works
Mac OS X for 64-bit machines allows you to run 32 or 64 bit
binaries. But the inexplicable error message from ranlib above is
complaining that it can't mix object files compiled for 32 bit cputype
(i386) and 64 bit (x86_64) into a single object library archive, the
libpgplot.a file.
The problem is that PGPLOT source is actually a mix of Fortran and
C. The Fortran compilers compile into 32-bit by default (g77
is only 32 bit capable) and the C compiler now compiles into 64 bit by
default. So ranlib has to mix 32 and 64 bit object files and it can't
do that. This is why it only became a problem with 64 bit Macs and
OS X 10.6. The new config files force the C compiler to compile in 32
bit with the "-m32" option. So then the files are all 32-bit
and it compiles ok. For 64 bit the config file forces gfortran to
compile in 64 bit with "-m64".
With Apple's C compiler you can also use "-arch i386" and "-arch
x86_64" to force 32 or 64 bit. The "-m32" and "-m64" options should
work with a non-Apple gcc, although I have not tested them.
Other notes: I have not tested all the
more exotic drivers and library locations, and if you do something arcane like use a
PGPLOT-Tk interface, it may require adjustment.
See above for how to get the PNG driver to work by editing the makefile.
I tested this on OS X 10.6 Snow Leopard, and have not tested PGPLOT on OS X 10.7 Lion myself, although users have reported it working on later OSes including Mavericks. I have a report
that forcing the 64-bit option by using a configuration similar to
"gfortran_gcc_64" will work, so try that.
Where to get compilers
Apple's gcc C compiler comes with Xcode, their development kit. Xcode
was on my OS X install CDs, but is not installed by default. You can
also download it from Apple.