See updates at bottom from building pgplot and cpgplot on phasshare virtual 64 bit machine
First, recall that there is a pgplot-32bits (obsolete as of 2021 Feb ) and a pgplot (now 64) directory
On Aug 2, 2016, Yuping suggested putting cpgplot.h into /usr/include . Note this is NOT a shared directory so will need to be done on whatever host one is working on. If it is not there and one tries to build cpgplot, it will fail.
Another possible problem could occur when trying to link pgplot or cpgplot to a program.
e.g; the (64 bit) linking command
gfortran -o LKBorig LKBorig.o -L/usr/share/astro/psrhome/
(cpgplot is just a c wrapper for pgplot and Yuping says it was actually pgplot that was damaged or missing.) (But see below 2021 Feb 3 update for a related prob- there we need to type ‘make cpg’ to make libcpgplot.a . I dont think we use lib….so any more)
–Joel (with help from Yuping)
Update 2021 Feb 3 JMW: Creating pgplot and cpgplot on phasshare 64 bit virtual machine:
First, don’t ignore above advice about certain special files and their placement.
Second, Bruce and Joel could only get cpgplot programs to work by seeing how libcpgplot.a was created and linked , in psrchive directory(much more below)!
To create a fresh pgplot and cpgplot that work, execute pgplot.csh in the bowels of psrchive:
/usr/share/astro/psrhome/src/psrchive/packages>
./pgplot.csh | tee /usr/share/astro/psrhome/pgplot/pgplot.csh.out
(tee sends the text output to the named file in addition to standard output). See a fuller description of what pgplot.csh does below.
(User must move the previous pgplot out of the way before running this script; ie
mv /usr/share/astro/psrhome/src/pgplot/ /usr/share/astro/psrhome/src/pgplot.older/)
(And I worry that maybe I need to move other random carcasses out of the way too.)
Some of the things done by pgplot.csh:
1. create a mother directory to put all necessary pgplot files into:
/usr/share/astro/psrhome/src/pgplot, after first moving aside the current tree there (see above).Actually it creates /usr/share/astro/psrhome/src/ and then will pour everything below it.)
2. Also create /usr/share/astro/psrhome/pgplot/ (I wonder if we should have moved old one out of way here too?)
3. get if necessary and gunzip and de-tar the pgplot 5.2 distribution (!) and put it into and under newly created mother dir.
4 patch the png routines: Interestingly, there is a file
/usr/share/astro/psrhome/src/psrchive/packages/pndriv.patch which seems to suggest that there might indeed be probs with standard png driver, and it is pulled in by pgplot.csh and does seem to enable the use of png routines with pgplot and I assume cpgplot.
5. fix psrchive.conf
6. enable good output drivers
7. run /usr/share/astro/psrhome/src/pgplot/makemake with appropriate flags, creating master makefile, and ‘make’ -ing it and ‘make cpg’ -ing it. As far as I can tell, the makefile made from this process is essentially identical to the earlier one(s), except that the earlier ones could not link in the png routines because they were broken, but the current ones are patched by pgplot.csh (perhaps not in makefile itself but rather in something it calls.)
But for now consider the following:
lots of pgplot source files are in
/usr/share/astro/psrhome/src/pgplot/src/
cpgplot files are in
/usr/share/astro/psrhome/src/pgplot/cpg/ (see cpgplot.doc here for important help and note that pgbind.c ,which is run by ‘make cpg’, actually makes the libcpgplot.a I believe)
Note that the two above directories are not parallel nor do they have any other logical relative location!!!
pgplot executable etc dir is /usr/share/astro/psrhome/pgplot/ One can find things like makefile (manually placed there), libpgplot.a, libcpgplot.a cpgdemo, pgplot.csh.out (the text output of the proper building of cpgplot (and pgplot) via running pgplot.csh as follows:
/usr/share/astro/psrhome/src/psrchive/packages>
./pgplot.csh | tee /usr/share/astro/psrhome/pgplot.csh.out (tee sends the output to the file in addition to standard output)
Note makefile can be created by makemake in /usr/share/astro/psrhome/pgplot/src/pgplot and in fact running makemake in that dir places makefile there too, so I manually moved it up two directories.
makemake /usr/share/astro/psrhome/src/pgplot/ linux psrchive [the latter three ‘words’ are the arguments of the makmake command], which erroneously dumped makefile into the above specified dir (upon its own reccomendation) so I had to manually mv it to /usr/share/astro/psrhome/pgplot/ . In the end I had to make from the above psrchive version in order successfully to create cpg or at least the png parts of it, and to successfully link cpgdemo.
then ‘make’ makes libpgplot.a and ‘make cpg’ makes libcpgplot.a (see steps near bottom of that file)! There is a problem with png routines though that crashes? (or at least reports errors in) the make cpg but the psrchive-generated makefile fixes this!
More serious problem with cpgplot (fixed by Bruce and Joel 20210204):
If I try to build any c (.c) or c++ (.C) program and link it with cpgplot up thru Feb 3, it failed because it couldn’t find ANY of the cpgplot routines that the program tries to call. (eg the creation of cpgdemo inside the make cpg part of the makefile, or the pglink64plkc.C script for compiling and linking plkc.C in usr4/lk-lookey). Note that cpgplot is just a c wrapper to fortran pgplot routines and that is what is failing. Long ago we had this problem and it was fixed by adding a trailing “_” to any fortran routine name. I see that that is being done now but it doesn’t fix the problem (maybe it exacerbates it?). One example of failure (there are many, one for each unique call of a cpgplot routine):
{phasshare.physics.carleton.edu}:{jweisber}:/data/psrdata/usr4/lk-lookey> pglink64plkc.C
/usr/share/astro/psrhome/pgplot/libcpgplot.a(cpgbeg.o): In function `cpgbeg’:
cpgbeg.c:(.text+0x34): undefined reference to `pgbeg_’
The fix of Feb 4 was to model our 64bit compile and link scripts
(like /usr/share/astro/pglink64cpgdemo.C), on the (more automated) steps that
successfully create it in the makefile. So now /usr/share/astro/pglink64cpgdemo.C is
my template for making other 64 bit, c compile and link scripts. . . .
I found on Feb 5 that .C (ie capital C) files like usr4/lk-lookey plkc.C can not use the same script as .c (ie lower case c) files because the .C files are c++. After a (too long) while, I got working a script to do so.
So for a c file <filename.c> one types pglink64.c <filename> (with extension stripped off), and
for a c++ file <filename.C> one types pglink64.C <filename> (with extension stripped off)
( There may be slight path issues. ) Both scripts are in /usr/share/astro on phasshare
Comments are closed.