diff options
Diffstat (limited to 'src/slalib/makefile.orig')
-rw-r--r-- | src/slalib/makefile.orig | 1426 |
1 files changed, 1426 insertions, 0 deletions
diff --git a/src/slalib/makefile.orig b/src/slalib/makefile.orig new file mode 100644 index 0000000..ff61e16 --- /dev/null +++ b/src/slalib/makefile.orig @@ -0,0 +1,1426 @@ +#+ +# 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. +#. |