#+ # Name: # makefile # # Version: # Library makefile Mk V # # Purpose: # Build and install the SLALIB package. # # Type of Module: # Description file for the make utility. # # Description: # This description file is used by the make utility to build the # SLALIB package from the distributed source files, to install # the resulting system for use, and to perform other housekeeping # tasks. # # Invocation: # This makefile is not intended to be used by make when invoked # directly (although this is possible), but instead to be used via # the accompanying mk script. This script sets up a number of # environment variables which are used as macros within the # makefile and which accommodate differences between machines and # operating systems (it invokes make with the -e option). Please # consult the mk script prologue for full details. # # Targets: # The following make targets are defined in this script for # external use: # # [help] # This is the default target. It outputs a message describing # the mk script and lists the targets provided. # # check # Performs a simple check that all necessary source files are # present, and displays the version number and current state # of the package (built/installed/tested, etc.). # # build # Compiles the source files and creates all files needed # prior to installing the package for use. # # install # Installs the package for use by putting the necessary files # into sub-directories of the $INSTALL directory (the $HOME # directory is used if the environment variable INSTALL is # not defined). Links to the installed files are left in the # source directory. # # deinstall # Reverses the action of the install target, removing files # from sub-directories of the $INSTALL directory and # restoring them to the source directory (the $HOME directory # is used by default if the environment variable INSTALL is # not defined). # # test # Builds and runs a simple test program to check for correct # installation of the package. # # export # Produces an export copy of the built package suitable for # passing to another user. A compressed tar file is created # in the $EXPORT directory containing copies of the source # files and built files for the package (the current # directory is used by default if the environment variable # EXPORT is not defined). The package should normally be # built, installed and tested (see above) before using this # target. After unpacking the exported file on a similar # machine, the recipient may simply install it for use. # # export_run # Produces an export copy of the built package suitable for # passing to another user. A compressed tar file is created # in the $EXPORT directory containing copies of the built # files for the package (the current directory is used by # default if the environment variable EXPORT is not defined). # The package should normally be built, installed and tested # (see above) before using this target. After unpacking the # exported file on a similar machine, the recipient may simply # install it for use. # # export_source # Produces an export copy of the source for the package # suitable for passing to another user to build (possibly on # a different type of machine). A compressed tar file is # created in the $EXPORT directory containing copies of just # the source files for the package (the current directory is # used by default if the environment variable EXPORT is not # defined). After unpacking the exported file, the recipient # must build the package before installing it for use. # # clean # Cleans up after building the package, removing all # intermediate files created during the building process, but # leaving the built files themselves. # # unbuild # Reverses the building process, removing all intermediate # files along with all the built files. # # External Dependencies: # The SLALIB package depends on the following other Starlink # packages which must previously have been installed into the # appropriate sub-directories of the $STARLINK directory (/star is # used if the environment variable STARLINK is not defined). # # None. # # Notes: # This makefile uses the presence/absence of the hidden files # .BUILT, .INSTALLED_$(SYSTEM) and .TESTED_$(SYSTEM) to record the # current state of the system during housekeeping operations. # # Implementation Deficiencies: # The method of generating the list of external libraries passed to # the $(BLD_SHR) command is still preliminary. # # Copyright: # Copyright (C) 1995 Rutherford Appleton Laboratory # # Authors: # RFWS: R.F.Warren-Smith (Starlink, RAL) # PMA: P.M.Allan (Starlink, RAL) # PTW: P.T.Wallace (Starlink, RAL) # AJC: A.J.Chipperfield (Starlink, RAL) # BLY: M.J.Bly (Starlink, RAL) # {enter_new_authors_here} # # History: # 1-DEC-1993 (RFWS/PMA): # Starlink template. # 1-DEC-1993 (PTW): # SLALIB version. # 18-JAN-1994 (PTW): # Corrections to if statements. # 10-MAR-1994 (PTW): # sla_RVLSR replaced by sla_RVLSRD and sla_RVLSRK # 8-AUG-1994 (PTW): # New routines added: sla_DE2H, sla_DH2E, sla_DTPRD, sla_E2H, # sla_H2E, sla_PRECL, sla_TPRD. Version number changed to 1.3-4. # Missing dependencies on source archive added. # 19-OCT-1994 (PTW): # New routines added: sla_ALTAZ, sla_PDA2H, sla_PDQ2H. Package # version number changed to 1.4-1. Library version number # changed to 1.4. # 26-OCT-1994 (PTW): # Package version number changed to 1.4-2. # 15-DEC-1994 (PTW): # New routines added: sla_PLANET, sla_RDPLAN, sla_DMOON, sla_DT, # sla_CLYD. Package version number changed to 1.4-4. # 3-JAN-1995 (PTW): # Package version number changed to 1.4-5. # 13-FEB-1995 (PTW): # New routines added: sla_DTP2V, sla_DTPXYZ, sla_DV2TP, sla_TP2V, # sla_TPXYZ, sla_V2TP. Package version number changed to 1.4-6. # 20-FEB-1995 (PTW): # Package version number changed to 1.4-7 (sla_OBS enhanced). # 23-MAR-1995 (PTW): # Unnecessary creation of INSTALL_INC removed. # 05-JUN-1995 (PTW): # Four routines replaced: sla_DTPRD, sla_DTPXYZ, sla_TPRD and # sla_TPXYZ become sla_DTPS2C, sla_DTPXYZ, sla_TPS2C and sla_TPV2C. # Package version number changed to 1.5-1. Library version # number changed to 1.5. # 06-JUN-1995 (BLY/AJC): # Updated to match Mk IVa makefile standard. # 02-JUL-1995 (PTW): # Package version number changed to 1.5-2. # 21-JUL-1995 (PTW): # Package version number changed to 1.5-3. # 14-SEP-1995 (PTW): # New routine added: sla_GMSTA. # Package version number changed to 1.6-1. # 04-OCT-1995 (PTW): # New routine added: sla_ATMDSP. # Package version number changed to 1.6-2. # 14-NOV-1995 (PTW): # Bug fix: sla_DAT. # Package version number changed to 1.6-3. # 21-FEB-1996 (PTW): # New routine: sla_POLMO. # Bug fix: sla_DC62S, sla_CC62S. # Comment corrections: sla_DH2E, sla_H2E. # New, html-compatible, document: SUN/67.34. # Package version number changed to 1.6-4. # 04-MAR-1996 (BLY): # Update makefile to Mk V specification. # Add special HLINK macro definitions. # No change to version number. # 24-APR-1996 (BLY): # Integrate ix86_Linux version. # Update version to v1.7-0. # 10-MAY-1996 (BLY): # Update version to v1.7-1. No changes to Fortran version. # 18-JUL-1996 (PTW): # Comment corrections: sla_DS2TP, sla_DV2TP, sla_S2TP, sla_V2TP # New, html-compatible, document: SUN/67.34. # Package version number changed to 1.7-2. # 26-NOV-1996 (PTW): # Minor corrections to sla_DV2TP and sla_V2TP. In sla_OBS, # revision of Parkes position and addition of ATNF Mopra. # Package version number changed to 1.7-3. # 28-MAY-1997 (PTW): # New routines: sla_PLANEL, sla_PLANTE. # Functionally enhanced: sla_PLANET, sla_RDPLAN. # Minor code improvements: several. # Comment corrections: numerous. # Revised document: SUN/67.36. # Package version number changed to 2.0-1. # 6-JAN-1998 (PTW): # Functionally enhanced: sla_DAT. # Revised document: SUN/67.38. # Package version number changed to 2.0-3. # 15-APR-1998 (PTW): # Code improvements: sla_GMSTA. # Revised document: SUN/67.40. # Package version number changed to 2.0-4. # 28-MAY-1998 (PTW): # Code improvements: sla_PLANEL. # New routine: sla_PV2EL # Revised document: SUN/67.41. # Package version number changed to 2.1-0. # 14-JUL-1998 (PTW): # Makefile updated - sla_PAV had been omitted. # 18-JUL-1998 (PTW): # 1999 January 1 leap second added to sla_DAT. # Package version number changed to 2.1-1. # 11-AUG-1998 (PTW): # Makefile updated - sla_DPAV had been omitted (!). # 30-SEP-1998 (PTW): # New routines: sla_FK52H, sla_H2FK5, sla_FK5HZ and sla_HFK5Z. # Revised document: SUN/67.43. # Package version number changed to 2.2-0. # 19-MAR-1999 (PTW): # New routines: sla_EL2UE, sla_PERTEL, sla_PERTUE, # sla_PV2UE, sla_UE2EL and sla_UE2PV # Revised document: SUN/67.44. # Package version number changed to 2.3-0. # 2-AUG-1999 (PTW): # New routines: sla_COMBN and sla_PERMUT # Revised document: SUN/67.45. # Package version number changed to 2.4-0. # 29-OCT-1999 (PTW): # The F_ROUTINES definition lacked entries for sla_EL2UE, # sla_PERTEL, sla_PERTUE, sla_PV2UE, sla_UE2EL, sla_UE2PV, # sla_COMBN and sla_PERMUT. # {enter_further_changes_here} # # Bugs: # {note_any_bugs_here} # #------------------------------------------------------------------------------- # Help target. # =========== # # This is the default target, so it appears first. # Display information about the mk script and the make targets. help: @ echo \ ' The makefile provided is intended to be used by the make utility when';\ echo \ ' invoked via the associated mk script. This script defines environment';\ echo \ ' variables which are used by make to accommodate differing machine and';\ echo \ ' operating system characteristics. Please see the mk script prologue';\ echo \ ' for full details.';\ echo;\ echo \ ' The following targets are provided:';\ echo;\ echo \ ' help - Display this message';\ echo \ ' check - Check source file presence and show current state';\ echo \ ' build - Build the package from source';\ echo \ ' install - Install the built package for use';\ echo \ ' deinstall - Deinstall the package';\ echo \ ' test - Perform a quick test of the installation';\ echo \ ' export - Make a compressed tar file for exporting the'\ 'built package';\ echo \ ' complete with source and documentation';\ echo \ ' export_run - Make a compressed tar file for exporting the'\ 'built package';\ echo \ ' with documentation but no source';\ echo \ ' export_source - Make a compressed tar file for exporting the'\ 'source files';\ echo \ ' clean - Tidy up after building the package';\ echo \ ' unbuild - Remove all the built files';\ echo;\ echo \ ' To build and install the $(PACK_NAME) package on a supported system:';\ echo;\ echo \ ' mk build; mk install; mk test; mk clean';\ echo #------------------------------------------------------------------------------- # Defaults. # ======== # # This section defines default macros and should rarely need changing. # The values given here should be overridden externally to adapt to # the local system setup (either use the mk script or use environment # variables and invoke "make" with the "-e" option). # Name of computer hardware/OS combination. SYSTEM = unknown # Name used to distinguish platform-specific source files. SOURCE_VARIANT = $(SYSTEM) # Pathname of the root directory beneath which other Starlink software # is currently installed. STARLINK = /star # Pathnames of Starlink sub-directories that may be referenced when # building this package. STAR_BIN = $(STARLINK)/bin STAR_DATES = $(STARLINK)/dates STAR_DOCS = $(STARLINK)/docs STAR_ETC = $(STARLINK)/etc STAR_HELP = $(STARLINK)/help STAR_INC = $(STARLINK)/include STAR_LIB = $(STARLINK)/lib # Pathname of the root directory beneath which the built files for # this package should be installed for use. This defaults to the # user's home directory. INSTALL = $(HOME) # Pathname of the directory into which exported tar files will be # placed. This defaults to the current working directory. EXPORT = . # Default macros for compiling C and Fortran source code. CC = c89 CFLAGS = -O FC = fort77 FFLAGS = -O # Command for forming a link to a file. LINK = ln # Command for "randomizing" an object library. The default acts as a # null command. RANLIB = : # Commands for adding to and extracting from an archive file (.tar). TAR_IN = pax -w -v -x ustar -f TAR_OUT = pax -r -f # Command for adding a file to an object archive (.a). AR_IN = ar -r # Default file type extension for a shareable library and command for # building a shareable library (the default acts as a null command). SHARE = .so BLD_SHR = : # Default command for linking hypertext document to others, including those # on the RAL document server. HLINK = : #------------------------------------------------------------------------------- ################################################################################ # # Define package source files. # =========================== # # This section defines the set of source files for the package. # Name of the package as specified in documentation # The value is used in messages from make to the user. PACK_NAME = SLALIB # Prefix for the package in lower-case as used in filenames etc. PKG_NAME = sla # Prefix for the package in upper-case as used in include file links. PKG_LINK = SLA # Version number (as in the documentation - i.e. not the same thing # as the shared library version number). # # The major component of the version number (before the dot) should # normally only be incremented following major changes to the package. # The minor version number (after the dot) is the number normally # incremented following development which introduces new documented # functionality. Any revision number (appended after a dash) should # be incremented for other minor changes (bug fixes, etc.) which do # not merit documentation changes. PKG_VERS = 2.4-0 # Library version number. # # n.b. Care needed - may affect existing applications. # # The minor component of this number (following the dot) should be # incremented whenever a new routine is added to a library or some # other change is made such that programs built with the latest # version would fail to run using an earlier version. The major number # should be incremented if a change is made such that existing # programs would have to be re-built in order to work with the new # version. LIB_VERS = 1.6 # List of files comprising the distributed source-only system. This # defines the minimum set of files required to rebuild completely the # package from source (including this makefile, the associated mk # script and any documentation files). SOURCE_FILES = $(PKG_NAME)_source.tar makefile mk $(DOCUMENTATION) # List of public script files. These are scripts which form part of # the package and will be required by users of it. They will be # installed in the $(INSTALL_BIN) directory with execute permission # set. PUBLIC_SCRIPTS = $(PKG_NAME)_link $(PKG_NAME)_link_adam # Startup script. This is the file that must be executed by a # programmer using this package in order to define links to include # files. It is listed separately from the public scripts as it is # edited by the installation procedure. STARTUP_SCRIPT = # List of public include files. These are include files which form # part of the package and may be required by users of it. They will be # installed in the $(INSTALL_INC) directory. PUBLIC_INCLUDES = # List of private include files. These are additional include files # which form part of the package and are required in order to build # it, but which are not required by users of it. PRIVATE_INCLUDES = # List of external include files. These are files which are required # in order to build the package but form part of other, externally # installed packages. This list should contain the names used to # reference the files within the source code, not the actual names of # the files. EXTERNAL_INCLUDES = # List of Fortran routines required for building the package. This is # just a list of all the Fortran source files (excluding BLOCK DATA # routines, which are treated separately). F_ROUTINES = \ addet.f \ afin.f \ airmas.f \ altaz.f \ amp.f \ ampqk.f \ aop.f \ aoppa.f \ aoppat.f \ aopqk.f \ atmdsp.f \ atms.f \ atmt.f \ av2m.f \ bear.f \ caf2r.f \ caldj.f \ calyd.f \ cc2s.f \ cc62s.f \ cd2tf.f \ cldj.f \ clyd.f \ combn.f \ cr2af.f \ cr2tf.f \ cs2c.f \ cs2c6.f \ ctf2d.f \ ctf2r.f \ daf2r.f \ dafin.f \ dat.f \ dav2m.f \ dbear.f \ dbjin.f \ dc62s.f \ dcc2s.f \ dcmpf.f \ dcs2c.f \ dd2tf.f \ de2h.f \ deuler.f \ dfltin.f \ dh2e.f \ dimxv.f \ djcal.f \ djcl.f \ dm2av.f \ dmat.f \ dmoon.f \ dmxm.f \ dmxv.f \ dpav.f \ dr2af.f \ dr2tf.f \ drange.f \ dranrm.f \ ds2c6.f \ ds2tp.f \ dsep.f \ dt.f \ dtf2d.f \ dtf2r.f \ dtp2s.f \ dtp2v.f \ dtps2c.f \ dtpv2c.f \ dtt.f \ dv2tp.f \ dvdv.f \ dvn.f \ dvxv.f \ e2h.f \ earth.f \ ecleq.f \ ecmat.f \ ecor.f \ eg50.f \ el2ue.f \ epb.f \ epb2d.f \ epco.f \ epj.f \ epj2d.f \ eqecl.f \ eqeqx.f \ eqgal.f \ etrms.f \ euler.f \ evp.f \ fitxy.f \ fk425.f \ fk45z.f \ fk524.f \ fk52h.f \ fk54z.f \ fk5hz.f \ flotin.f \ galeq.f \ galsup.f \ ge50.f \ geoc.f \ gmst.f \ gmsta.f \ h2e.f \ h2fk5.f \ hfk5z.f \ idchf.f \ idchi.f \ imxv.f \ intin.f \ invf.f \ kbj.f \ m2av.f \ map.f \ mappa.f \ mapqk.f \ mapqkz.f \ moon.f \ mxm.f \ mxv.f \ nut.f \ nutc.f \ oap.f \ oapqk.f \ obs.f \ pa.f \ pav.f \ pcd.f \ pda2h.f \ pdq2h.f \ permut.f \ pertel.f \ pertue.f \ planel.f \ planet.f \ plante.f \ pm.f \ polmo.f \ prebn.f \ prec.f \ precl.f \ preces.f \ prenut.f \ pv2el.f \ pv2ue.f \ pvobs.f \ pxy.f \ range.f \ ranorm.f \ rcc.f \ rdplan.f \ refco.f \ refro.f \ refv.f \ refz.f \ rverot.f \ rvgalc.f \ rvlg.f \ rvlsrd.f \ rvlsrk.f \ s2tp.f \ sep.f \ smat.f \ subet.f \ supgal.f \ svd.f \ svdcov.f \ svdsol.f \ tp2s.f \ tp2v.f \ tps2c.f \ tpv2c.f \ ue2el.f \ ue2pv.f \ unpcd.f \ v2tp.f \ vdv.f \ vn.f \ vxv.f \ xy2xy.f \ zd.f # List of Fortran BLOCK DATA routines. BLOCK_DATA = # List of platform specific Fortran routines. The source tar file will # contain a version of these files for each set of platforms. The names # given here are the general version of the file, e.g. pkg_open.f. The # names in the tar file will be pkg_open.f_sun4, pkg_open.f_mips, etc. PLATFORM_F = \ gresid.f \ random.f \ wait.f # C routines required for building the package. This is just a list of # all the C source files. C_ROUTINES = # Lists of Latex and hypertext documents. LATEX_DOCS = sun67.tex HYPERTEXT_DOCS = sun67.htx # List of documentation files. DOCUMENTATION = $(LATEX_DOCS) $(HYPERTEXT_DOCS:.htx=.htx_tar) \ $(PKG_NAME).news read.me ################################################################################ #------------------------------------------------------------------------------- # Define files required for building the package. # ============================================== # # This section defines the set of files produced from the source files # when the package is built and installed. # Use only .o, .c and .f suffix rules. .SUFFIXES: .SUFFIXES: .o .c .f # List of files which must be built from the source files before the # package can be installed for use. This should comprise all the files # that are required to use the package (but excluding the date stamp # file). BUILT_FILES = $(PUBLIC_SCRIPTS) $(PUBLIC_INCLUDES) $(OBJECT_LIBRARIES) \ $(SHAREABLE_LIBRARIES) $(STARTUP_SCRIPT) # List of links used to access include files during compilation. This # should comprise all the external include files and any other include # files whose names do not exactly match the names used in the source # code. INCLUDE_LINKS = $(EXTERNAL_INCLUDES) # Rules to set up links to locate each of the above include files. # Rules for extracting source files from the source archive. $(PUBLIC_SCRIPTS) $(PUBLIC_INCLUDES) $(F_ROUTINES) \ $(BLOCK_DATA) $(C_ROUTINES) $(STARTUP_SCRIPT): $(TAR_OUT) $(PKG_NAME)_source.tar $@ @ if test -f $@; then :;\ else echo $@ is not in the tar file; exit 1; fi # Rules for extracting platform specific source files from the source # archive. # It is quite likely that there are no platform-specific source files # and that the macro PLATFORM_F is empty. To prevent a syntax error in # make, a dummy target is present. $(PLATFORM_F) dummy_target1: $(TAR_OUT) $(PKG_NAME)_source.tar $@_$(SOURCE_VARIANT) @ if test -f $@_$(SOURCE_VARIANT); then :;\ else echo $@_$(SOURCE_VARIANT) is not in the tar file; exit 1; fi mv $@_$(SOURCE_VARIANT) $@ # List of object files produced by compiling the source code and rules # for performing the compilations. OBJECT_FILES = $(BLOCK_DATA:.f=.o) $(F_ROUTINES:.f=.o) \ $(PLATFORM_F:.f=.o) $(C_ROUTINES:.c=.o) .c.o: $(CC) $(CFLAGS) -c $< .f.o: $(FC) $(FFLAGS) -c $< # List of object library files to be built and rules for building # them. OBJECT_LIBRARIES = lib$(PKG_NAME).a lib$(PKG_NAME).a: $(OBJECT_FILES) $(AR_IN) $@ $? $(RANLIB) $@ # List of shareable library files to be built and rules for building # them. The third argument to $(BLD_SHR) should provide the information # necessary to link any libraries called by this package. SHAREABLE_LIBRARIES = lib$(PKG_NAME)$(SHARE) lib$(PKG_NAME)$(SHARE): $(OBJECT_FILES) touch $@ $(BLD_SHR) $@ '$(OBJECT_FILES)' # Name of the date stamp file. This is used to record the time of the # most recent build for use in subsequent operations that require it. # There must be no rule for generating this file; it is updated only # as a side effect of building the package. DATE_STAMP = $(PKG_NAME)_datestamp # Pathnames of directories into which files may be placed when the # package is installed. INSTALL_BIN = $(INSTALL)/bin INSTALL_DATES = $(INSTALL)/dates INSTALL_DOCS = $(INSTALL)/docs INSTALL_ETC = $(INSTALL)/etc INSTALL_HELP = $(INSTALL)/help INSTALL_INC = $(INSTALL)/include INSTALL_LIB = $(INSTALL)/lib INSTALL_SHARE = $(INSTALL)/share # List of directories actually used for installation (selected from # those above) and rules to create them. INSTALL_DIRS = $(INSTALL_BIN) $(INSTALL_DATES) $(INSTALL_DOCS) $(INSTALL_LIB) \ $(INSTALL_SHARE) $(INSTALL_DIRS): mkdir -p $@ #------------------------------------------------------------------------------- # Primary targets. # =============== # # These are the targets intended for normal external use (apart from # help, which appears at the start of the file). # check: Check source file presence and show current state. # -------------------------------------------------------- check: @ echo @ echo \ '*** This is $(PACK_NAME) version V$(PKG_VERS) on system $(SYSTEM)' @ echo @ nosource='';\ for f in $(SOURCE_FILES); do \ if test ! -f $$f; then \ nosource='1';\ break;\ else :; fi;\ done;\ if test -n "$$nosource"; then \ echo ' Source files are NOT present';\ else \ echo ' All essential source files are present';\ fi @ echo # # Display the current state. @ if test -f .BUILT;\ then echo ' The package is currently: built for system'\ `cat .BUILT`;\ else echo ' The package is currently: not built';fi @ if test -f .INSTALLED_$(SYSTEM);\ then echo ' installed in'\ `cat .INSTALLED_$(SYSTEM)`;\ else echo ' not installed';fi @ if test -f .TESTED_$(SYSTEM);\ then echo ' tested';\ else echo ' not tested';fi @ echo @ if test -f .BUILT;\ then if test "$(SYSTEM)" != "`cat .BUILT`";\ then echo '*** WARNING ***';\ echo \ ' The package is built for a system other than the current one';\ echo ;\ else :;fi;\ else :;fi # build: Build the system. # ----------------------- # # Compile the source and build the required files in the source # directory. # The build target first checks that the package is not installed. If # not, it then causes the .BUILT target to be made which ensures that # the package has been built. build: @ if test -f .INSTALLED_$(SYSTEM); then \ echo;\ echo \ '*** The $(PACK_NAME) package is currently installed -- please use the';\ echo ' "deinstall" target before re-building it';\ echo;\ elif $(MAKE) .BUILT; then \ echo;\ echo '*** The $(PACK_NAME) package has been built';\ echo;\ else \ echo;\ echo '*** "make" failed building the $(PACK_NAME) package';\ echo;\ exit 1;\ fi # The .BUILT target records the time of the most recent build which # modified any of the built files. It depends on all the built files # being up to date (which causes them to be built). .BUILT: $(BUILT_FILES) # # Enter information about the current machine and build environment # into the date stamp file. @ echo 'Package : $(PACK_NAME)' >$(DATE_STAMP) @ echo 'Version : V$(PKG_VERS)' >>$(DATE_STAMP) @ echo 'Library : V$(LIB_VERS)' >>$(DATE_STAMP) @ echo '' >>$(DATE_STAMP) @ echo "Built by: $(USER) on node `uname -n`" \ >>$(DATE_STAMP) @ echo "On : `date`" >>$(DATE_STAMP) @ echo '' >>$(DATE_STAMP) @ echo \ "Machine : `uname -m` running `uname -s` `uname -v` (release `uname -r`)" \ >>$(DATE_STAMP) @ echo '' >>$(DATE_STAMP) @ echo 'make macros:' >>$(DATE_STAMP) @ echo '' >>$(DATE_STAMP) @ echo ' SYSTEM : $(SYSTEM)' >>$(DATE_STAMP) @ echo '' >>$(DATE_STAMP) @ echo ' EXPORT : $(EXPORT)' >>$(DATE_STAMP) @ echo ' INSTALL : $(INSTALL)' >>$(DATE_STAMP) @ echo ' STARLINK: $(STARLINK)' >>$(DATE_STAMP) @ echo '' >>$(DATE_STAMP) @ echo ' AR_IN : $(AR_IN)' >>$(DATE_STAMP) @ echo ' BLD_SHR : $(BLD_SHR)' >>$(DATE_STAMP) @ echo ' CC : $(CC)' >>$(DATE_STAMP) @ echo ' CFLAGS : $(CFLAGS)' >>$(DATE_STAMP) @ echo ' FC : $(FC)' >>$(DATE_STAMP) @ echo ' FFLAGS : $(FFLAGS)' >>$(DATE_STAMP) @ echo ' LINK : $(LINK)' >>$(DATE_STAMP) @ echo ' RANLIB : $(RANLIB)' >>$(DATE_STAMP) @ echo ' SHARE : $(SHARE)' >>$(DATE_STAMP) @ echo ' SOURCE_VARIANT: $(SOURCE_VARIANT)' \ >>$(DATE_STAMP) @ echo ' TAR_IN : $(TAR_IN)' >>$(DATE_STAMP) @ echo ' TAR_OUT : $(TAR_OUT)' >>$(DATE_STAMP) @ echo '' >>$(DATE_STAMP) # # Record completion of the build. @ echo '$(SYSTEM)' > .BUILT # install: Install the package for use. # ------------------------------------ # # Copy the built files to their installation directories, from where # they may be accessed. # The install target first checks if any part of the package is # already installed. If not, it checks that the system is built for this # SYSTEM and, if it is, causes the .INSTALLED_$(SYSTEM) target to be made # which performs the installation. install: @ if test -f .INSTALLED_$(SYSTEM); then \ echo;\ echo \ '*** The $(PACK_NAME) package has already been installed -- please use the';\ echo \ ' "deinstall" target first if you wish to reinstall it';\ echo;\ elif test -f .BUILT; then \ if test "`cat .BUILT`" = "$(SYSTEM)"; then \ if $(MAKE) .INSTALLED_$(SYSTEM); then \ echo;\ echo \ '*** The $(PACK_NAME) package has been installed in directory $(INSTALL)';\ echo;\ else \ echo;\ echo \ '*** "make" failed installing the $(PACK_NAME) package in directory $(INSTALL)';\ echo;\ exit 1;\ fi;\ else \ echo;\ echo \ "*** The $(PACK_NAME) package is built for system `cat .BUILT` -"\ 'so cannot be installed on system $(SYSTEM)';\ echo;\ exit 1;\ fi;\ else \ echo;\ echo \ '*** The $(PACK_NAME) package is not built, so cannot be installed';\ echo;\ exit 1;\ fi # The .INSTALLED_$(SYSTEM) target copies each file from the source # directory using "cp -p" to preserve its date, and replaces each # original file by a link to the installed copy. .INSTALLED_$(SYSTEM): $(INSTALL_DIRS) # # Create .INSTALLED_$(SYSTEM), containing $INSTALL, to record that the # package is installed (at least in part). @ echo $(INSTALL) > .INSTALLED_$(SYSTEM) # # Install the public scripts, giving them world execute permission. for f in $(PUBLIC_SCRIPTS) ""; do \ if test -n "$$f"; then \ cp -p $$f $(INSTALL_BIN);\ chmod 755 $(INSTALL_BIN)/$$f;\ rm -f $$f;\ $(LINK) $(INSTALL_BIN)/$$f $$f;\ else :; fi;\ done # # Install the public include files, giving them world read permission. for f in $(PUBLIC_INCLUDES) ""; do \ if test -n "$$f"; then \ cp -p $$f $(INSTALL_INC);\ chmod 644 $(INSTALL_INC)/$$f;\ rm -f $$f;\ $(LINK) $(INSTALL_INC)/$$f $$f;\ else :; fi;\ done # # Install the object libraries, giving them world read permission. for f in $(OBJECT_LIBRARIES) ""; do \ if test -n "$$f"; then \ cp -p $$f $(INSTALL_LIB);\ chmod 644 $(INSTALL_LIB)/$$f;\ rm -f $$f;\ $(LINK) $(INSTALL_LIB)/$$f $$f;\ else :; fi;\ done # # Install shareable libraries, giving them read permission (unless # they are dummy, zero size, files in which case they are left in # place). for f in $(SHAREABLE_LIBRARIES) ""; do \ if test -n "$$f" -a -s "$$f"; then \ cp -p $$f $(INSTALL_SHARE);\ chmod 755 $(INSTALL_SHARE)/$$f;\ rm -f $$f;\ $(LINK) $(INSTALL_SHARE)/$$f $$f;\ else :; fi;\ done # # Install the package startup script. The name of the directory # containing the installed public include files must be edited into # this, and execute permission given. Leave the original file in # place. if test -n "$(STARTUP_SCRIPT)"; then \ sed -e 's#LINK#$(LINK)#' -e s#INSTALL_INC#$(INSTALL_INC)# \ $(STARTUP_SCRIPT) >$(INSTALL_BIN)/$(STARTUP_SCRIPT) ;\ chmod 755 $(INSTALL_BIN)/$(STARTUP_SCRIPT) ;\ else :; fi # # Install the Latex documentation, giving it world read permission, # leaving the source copy in place. for f in $(LATEX_DOCS) ""; do \ if test -n "$$f"; then \ cp -p $$f $(INSTALL_DOCS);\ chmod 644 $(INSTALL_DOCS)/$$f;\ else :; fi;\ done # # Install any hypertext documents, giving world read access to all the files # they contain and linking with other documents. if test -n "$(HYPERTEXT_DOCS)"; then \ pwd=`pwd`;\ (cd $(INSTALL_DOCS);\ for f in $(HYPERTEXT_DOCS) ""; do \ if test -n "$$f"; then\ $(TAR_OUT) $$pwd/$${f}_tar;\ chmod 755 `find $$f -type d -print`;\ chmod 644 `find $$f ! -type d -print`;\ touch $$f;\ else :; fi;\ done);\ HTX_PATH='$(STAR_DOCS):$(STAR_HELP)';\ export HTX_PATH;\ $(HLINK) $(INSTALL_DOCS) $(INSTALL_HELP);\ fi; # # Install the date stamp file and make it read-only to prevent its # date being changed. cp -p $(DATE_STAMP) $(INSTALL_DATES) chmod 444 $(INSTALL_DATES)/$(DATE_STAMP) chmod 644 $(DATE_STAMP) rm $(DATE_STAMP) $(LINK) $(INSTALL_DATES)/$(DATE_STAMP) $(DATE_STAMP) # deinstall: Deinstall the package. # -------------------------------- # # Reverse the action of the install target, removing the installed # files and returning them to the source directory. # The deinstall target checks that the package is installed in the INSTALL # directory. If so, it causes the do_deinstall target to be made which # performs the deinstallation. deinstall: @ if test ! -f .INSTALLED_$(SYSTEM); then \ echo;\ echo '*** The $(PACK_NAME) package is not currently installed';\ echo;\ else \ if test "`cat .INSTALLED_$(SYSTEM)`" = "$(INSTALL)"; then \ if $(MAKE) do_deinstall; then \ echo;\ echo \ '*** The $(PACK_NAME) package has been deinstalled from directory $(INSTALL)';\ echo;\ else \ echo;\ echo \ '*** "make" failed deinstalling the $(PACK_NAME) package from directory $(INSTALL)';\ echo;\ exit 1;\ fi;\ else \ echo;\ echo \ "*** The $(PACK_NAME) package is installed in `cat .INSTALLED_$(SYSTEM)`";\ echo \ "*** and not in your INSTALL directory ($(INSTALL))";\ echo '*** Not deinstalled';\ exit 1;\ fi;\ fi # The do_deinstall target (which should never exist) checks that an # installed version of each file exists (in case an install failed # part of the way through) and returns it to the source directory, # using "cp -p" to preserve file dates. Links are removed from the # source directory before copying. do_deinstall: # # Note the package will need to be tested again. @- if test -f .TESTED_$(SYSTEM); then rm -f .TESTED_$(SYSTEM); else :; fi # # Deinstall the public script files, if installed versions exist. - for f in $(PUBLIC_SCRIPTS) ""; do \ if test -n "$$f" -a -f $(INSTALL_BIN)/$$f; then \ rm -f $$f;\ cp -p $(INSTALL_BIN)/$$f .;\ rm -f $(INSTALL_BIN)/$$f;\ else :; fi;\ done # # Deinstall the public include files, if installed versions exist. - for f in $(PUBLIC_INCLUDES) ""; do \ if test -n "$$f" -a -f $(INSTALL_INC)/$$f; then \ rm -f $$f;\ cp -p $(INSTALL_INC)/$$f .;\ rm -f $(INSTALL_INC)/$$f;\ else :; fi;\ done # # Deinstall the object libraries, if installed versions exist. - for f in $(OBJECT_LIBRARIES) ""; do \ if test -n "$$f" -a -f $(INSTALL_LIB)/$$f; then \ rm -f $$f;\ cp -p $(INSTALL_LIB)/$$f .;\ rm -f $(INSTALL_LIB)/$$f;\ else :; fi;\ done # # Deinstall the shareable libraries, if installed versions exist. - for f in $(SHAREABLE_LIBRARIES) ""; do \ if test -n "$$f" -a -f $(INSTALL_SHARE)/$$f; then \ rm -f $$f;\ cp -p $(INSTALL_SHARE)/$$f .;\ rm -f $(INSTALL_SHARE)/$$f;\ else :; fi;\ done # # Deinstall the package startup file. Since it will have been edited # during installation, we remove the installed copy, if present, and # then ensure that the original exists. - if test -n "$(STARTUP_SCRIPT)"; then \ if test -f $(INSTALL_BIN)/$(STARTUP_SCRIPT); then\ rm -f $(INSTALL_BIN)/$(STARTUP_SCRIPT);\ else :; fi ;\ $(MAKE) $(STARTUP_SCRIPT);\ else :; fi # # Deinstall the Latex documentation, if installed versions exist. - for f in $(LATEX_DOCS) ""; do \ if test -n "$$f" -a -f $(INSTALL_DOCS)/$$f; then \ rm -f $(INSTALL_DOCS)/$$f;\ else :; fi;\ done # # Deinstall any hypertext documents, and relink the hypertext if required. - if test -n "$(HYPERTEXT_DOCS)"; then \ for f in $(HYPERTEXT_DOCS) ""; do \ if test -n "$$f" -a -d $(INSTALL_DOCS)/$$f; then \ rm -f -r $(INSTALL_DOCS)/$$f;\ else :; fi;\ done;\ HTX_PATH='$(STAR_DOCS):$(STAR_HELP)';\ export HTX_PATH;\ $(HLINK) $(INSTALL_DOCS) $(INSTALL_HELP);\ fi # # Deinstall the date stamp file after setting its protection so it may # be removed. - if test -f $(INSTALL_DATES)/$(DATE_STAMP); then \ chmod 644 $(DATE_STAMP); rm $(DATE_STAMP);\ chmod 644 $(INSTALL_DATES)/$(DATE_STAMP);\ cp -p $(INSTALL_DATES)/$(DATE_STAMP) .;\ rm $(INSTALL_DATES)/$(DATE_STAMP);\ else :; fi # # Note the system is no longer installed. Re-create .BUILT, since we have # returned the built files to the source directory but an unbuild may have # been done. @- rm -f .INSTALLED_$(SYSTEM) 1>/dev/null 2>/dev/null @ echo '$(SYSTEM)' > .BUILT # test: Perform an installation test. # ---------------------------------- # # Check that installed files are in their correct places and that a # simple test program will run correctly. # The test target checks that the package is currently installed. If # so, it causes the do_test target to be made, which performs the # installation test. test: @ if test ! -f .INSTALLED_$(SYSTEM); then \ echo;\ echo '*** The $(PACK_NAME) package is not currently installed';\ echo;\ elif $(MAKE) do_test; then\ echo;\ echo \ '*** Installation test for the $(PACK_NAME) package has been run';\ echo;\ else \ echo;\ echo \ '*** Installation test for the $(PACK_NAME) package failed';\ echo;\ exit 1;\ fi # The do_test target performs the installation test. A file named do_test # should never exist. do_test: $(EXTERNAL_INCLUDES) # # Note the test has not yet succeeded. @- if test -f .TESTED_$(SYSTEM); then rm -f .TESTED_$(SYSTEM); else :; fi # # Extract the test program from the archive and set up new links for # the include files which point at the installed versions. Remove any # pre-existing links first if necessary. $(TAR_OUT) $(PKG_NAME)_source.tar $(PKG_NAME)_test.f @ if test -f $(PKG_NAME)_test.f; then :;\ else echo $(PKG_NAME)_test.f is not in the tar file; exit 1; fi # # Build the test program, ensuring that the installed version of the library # and link files are used. $(FC) $(FFLAGS) $(PKG_NAME)_test.f -L$(INSTALL_LIB) -L$(STAR_LIB) \ `$(INSTALL_BIN)/$(PKG_NAME)_link` -o $(PKG_NAME)_test # # Remove the test program source and the include file links used to # build it. rm -f $(PKG_NAME)_test.f $(EXTERNAL_INCLUDES) # # Execute the test program and remove the binary file when done. Note # that any external mechanism for locating shareable libraries (e.g. a # search path) must previously have been set up. ./$(PKG_NAME)_test rm -f $(PKG_NAME)_test # # Note the test has been run. @ touch .TESTED_$(SYSTEM) # export: Export the installed system. # ----------------------------------- # # Export the source plus all the built files to a new user. # The export target depends on the resulting compressed tar file being # up to date. export: $(EXPORT)/$(PKG_NAME)_$(SYSTEM).tar.Z @ echo @ echo \ '*** Export copy of the built $(PACK_NAME) package is in the compressed' @ echo \ ' tar file $(EXPORT)/$(PKG_NAME)_$(SYSTEM).tar.Z' @ echo # The compressed tar file is up to date if it exists and is more # recent than all the source files and the date stamp file (which # records the time of the last build which modified any files). $(EXPORT)/$(PKG_NAME)_$(SYSTEM).tar.Z: $(SOURCE_FILES) $(DATE_STAMP) # # Issue a warning if the package has not been tested. @ if test ! -f .TESTED_$(SYSTEM); then \ echo;\ echo '*** Warning: the $(PACK_NAME) package has not been tested';\ echo;\ else :; fi # # Remove any pre-existing tar files before creating new ones. if test -f $(EXPORT)/$(PKG_NAME)_$(SYSTEM).tar.Z; then \ rm -f $(EXPORT)/$(PKG_NAME)_$(SYSTEM).tar.Z; else :; fi $(TAR_IN) - $(SOURCE_FILES) $(BUILT_FILES) $(DATE_STAMP) .BUILT \ | compress -v > $(EXPORT)/$(PKG_NAME)_$(SYSTEM).tar.Z # export_run: Export the built system (without source). # ----------------------------------------------------- # # Export all the built files to a new user. # The export_run target depends on the resulting compressed tar file being # up to date. export_run: $(EXPORT)/$(PKG_NAME)_$(SYSTEM)_run.tar.Z @ echo @ echo \ '*** Export copy of the "runtime" $(PACK_NAME) package is in the compressed' @ echo \ ' tar file $(EXPORT)/$(PKG_NAME)_$(SYSTEM)_run.tar.Z' @ echo # The compressed tar file is up to date if it exists and is more # recent than all the source files and the date stamp file (which # records the time of the last build which modified any files). $(EXPORT)/$(PKG_NAME)_$(SYSTEM)_run.tar.Z: $(SOURCE_FILES) $(DATE_STAMP) # # Issue a warning if the package has not been tested. @ if test ! -f .TESTED_$(SYSTEM); then \ echo;\ echo '*** Warning: the $(PACK_NAME) package has not been tested';\ echo;\ else :; fi # # Remove any pre-existing tar files before creating new ones. if test -f $(EXPORT)/$(PKG_NAME)_$(SYSTEM)_run.tar.Z; then \ rm -f $(EXPORT)/$(PKG_NAME)_$(SYSTEM)_run.tar.Z; else :; fi $(TAR_IN) - mk makefile $(DOCUMENTATION) $(BUILT_FILES) \ $(DATE_STAMP) .BUILT \ | compress -v > $(EXPORT)/$(PKG_NAME)_$(SYSTEM)_run.tar.Z # export_source: Export the source. # -------------------------------- # # Export the source files only to a new user. # This target depends on the resulting compressed tar file being up to # date. export_source: $(EXPORT)/$(PKG_NAME).tar.Z @ echo @ echo \ '*** Export copy of the $(PACK_NAME) package source is in the compressed' @ echo \ ' tar file $(EXPORT)/$(PKG_NAME).tar.Z' @ echo # The compressed tar file is up to date if it exists and is more # recent than all the source files. $(EXPORT)/$(PKG_NAME).tar.Z: $(SOURCE_FILES) # # Remove any pre-existing tar files before creating new ones. if test -f $(EXPORT)/$(PKG_NAME).tar.Z; then \ rm -f $(EXPORT)/$(PKG_NAME).tar.Z; else :; fi $(TAR_IN) - $(SOURCE_FILES) \ | compress -v > $(EXPORT)/$(PKG_NAME).tar.Z # clean: Clean up the source directory. # ------------------------------------ # # Remove all intermediate files. Do not remove built files. clean: @- rm -f $(INCLUDE_LINKS) $(F_ROUTINES) \ $(PLATFORM_F) $(BLOCK_DATA) 1>/dev/null 2>/dev/null @- rm -f $(C_ROUTINES) $(OBJECT_FILES) 1>/dev/null 2>/dev/null @ echo @ echo '*** Intermediate files removed' @ echo # unbuild: Reverse the build process. # ---------------------------------- # Remove all intermediate files and all built files, and note that the # package is no longer built or tested. unbuild: clean @- rm -f $(BUILT_FILES) $(DATE_STAMP) .BUILT 1>/dev/null 2>/dev/null @ echo '*** Built files removed' @ echo #------------------------------------------------------------------------------- # Include file dependencies. # ========================= # Object file dependencies on include files (or links to those include # files). These are normally generated automatically from the source # files. #------------------------------------------------------------------------------- # Private targets. # Targets for manipulating the hypertext documentation (creating, # generating tar files etc, cleaning etc). hypertext: sun67.tex sun67.aux star2html -aux -m ptw@star.rl.ac.uk sun67.tex hypertext_tar: $(TAR_IN) sun67.htx_tar sun67.htx/* hypertext_clean: rm -rf sun67.htx #------------------------------------------------------------------------------- # # End of makefile. #.