# Makefile for the Unidata units library udunits(3). # # $Id: Makefile.in,v 1.7 2003/09/25 18:33:35 steve Exp $ .POSIX: LIBRARY = udunits FLEX = /usr/bin/flex cpp_path = -DUT_DEFAULT_PATH='"$(prefix)/etc/udunits.dat"' CPPFLAGS = -I../port/misc -I../port/cfortran $(cpp_path) -Df2cFortran CFLAGS = -fno-common OBJS = udunits.o LIBOBJS = utlib.o utparse.o utscan.o udalloc.o HEADERS = udunits.h udunits.inc ETCFILES = udunits.dat MANUALS = udunits.3 udunits.3f prefix = ../.. exec_prefix = $(prefix)/bin links_udalloc = udalloc.c udalloc.h links = $(links_udalloc) GARBAGE = y.output y.output *.log MANIFEST = Makefile.in \ depend \ udunits.3 udunits.3f udunits.3fi testcal2.f \ udunits.dat udunits.h udunits.inc.in utlib.c \ utparse.y utparse.c utparse.h \ utprivate.h utscan.h utscan.l utscan.c all: $(links) library udunits.3f $(links_udalloc): ln -s ../port/misc/$@ . install: installed_library installed_headers \ installed_etcfiles installed_manuals clean: default_clean distclean: default_distclean rm -f $(links) udunits.3f: udunits.3fi soelim udunits.3fi >$@ tags: FORCE utlib.c utparse.c ctags -t *.h *.c # The following emits shift/reduce warning messages that may safely # be ignored. # # A specific yacc(1)-compatible utility is used in order to generate # a package-specific parser (i.e. one that won't interfere # with other parsers). # # cat(1) and rm(1) are used rather than mv(1) because the destination might # be a symbolic link. # utparse.c: utparse.y case `uname -s` in \ OSF1) \ yacc -d -p ut utparse.y; \ cat y.tab.c > $@; \ rm y.tab.c; \ cat y.tab.h > utparse.h; \ rm y.tab.h; \ ;; \ *) \ echo 1>&2 "$@ needs to be (re)created using OSF/1's yacc(1)"; \ false; \ ;; \ esac # In the following, a specific utility is used in order to # generate a package-specific scanner (i.e. one that won't interfere # with other scanners). # utscan.c: utscan.l @ok=no; \ if id=`"$(FLEX)" -V 2>/dev/null | \ sed 's/[^0-9.]*\([0-9.]*\).*/\1/'`; then \ maj=`echo $$id | sed 's/\..*//'`; \ min=`echo $$id | sed 's/[0-9]*\.\([0-9]*\).*/\1/'`; \ if test "$$maj" -gt 2 -o \ \( "$$maj" -eq 2 -a "$$min" -ge 4 \); then \ set -x; \ $(FLEX) -Put -t utscan.l > $@ && ok=yes; \ set +x; \ fi \ fi; \ case $$ok in \ no) echo 1>&2 \ "$@ needs to be (re)created using flex(1) 2.4 or later"; \ exit 1;; \ esac # This is the master makefile. It contains general rules. # # $Id: master.mk.in,v 1.44 2003/09/30 18:39:28 steve Exp $ .SUFFIXES: .SUFFIXES: .so .o .S .ln .i .c .fc .f .F .cc .l .y .cdl .nc .sh ############################################################################ # General Macros: ############################################################################ prefix = /mnt/gmirror/ports/science/udunits/work/udunits-1.12.4 exec_prefix = /mnt/gmirror/ports/science/udunits/work/udunits-1.12.4 AR = ar CC = cc CPP = cc -E CC_MAKEDEPEND = cc -M CXX = @CXX@ FC = @FC@ LINT = lint LINTFLAGS = -u MAKEINFO = @MAKEINFO@ NCDUMP = @NCDUMP@ NCGEN = @NCGEN@ NEQN = neqn OS = Darwin SHELL = /bin/sh TBL = tbl WHICH = @WHICH@ ############################################################################ # Recursive make(1)s in Subdirectories: ############################################################################ subdir_dummy_target $(SUBDIR_TARGETS): @echo "" @dir=`echo $@ | sed 's,/.*,,'`; \ target=`echo $@ | sed "s,$$dir/,,"`; \ cd $$dir && \ echo "making \`$$target' in directory `pwd`" && \ echo "" && \ $(MAKE) $(MFLAGS) \ prefix=$(prefix) exec_prefix=$(exec_prefix) \ $$target || exit 1 @echo "" @echo "returning to directory `pwd`" @echo "" subdirs/all \ subdirs/test \ subdirs/install \ subdirs/clean \ subdirs/distclean: FORCE @case "$(SUBDIRS)" in \ '') ;; \ *) filename=`echo $@ | sed 's:.*/::'`; \ targets=`echo $(SUBDIRS) | tr ' ' '\012' | \ sed 's:$$:/'$$filename':'`; \ $(MAKE) $$targets;; \ esac ############################################################################ # Compilation: ############################################################################ FORTC = @FORTC@ # Compile C++ code. .cc.o: $(CXX) -c $(CXXFLAGS) $(CXXCPPFLAGS) $< # Compile FORTRAN code. # .f.o: $(FC) -c $(FFLAGS) $< .F.o: ln -s $< $*.c && \ ($(CPP) -DUD_FORTRAN_SOURCE $(CPPFLAGS) $*.c >$*.i && \ sed '/^# *[0-9]/d' $*.i > $*.f) || \ (rm -f $*.f $*.i $*.c ; exit 1) && \ rm $*.i $(FC) -c $(FFLAGS) $*.f && rm $*.f $*.c .F.f: ln -s $< $*.c && \ ($(CPP) -DUD_FORTRAN_SOURCE $(CPPFLAGS) $*.c >$*.i && \ grep -v '^#' $*.i > $@) || \ (rm -f $@ $*.i $*.c; exit 1) && \ rm $*.i $*.c .F.i: ln -s $< $*.c && \ $(CPP) -DUD_FORTRAN_SOURCE $(CPPFLAGS) $*.c >$*.i # Generate FORTRAN-callable C code. # .fc.o: $(FORTC) -O $(OS) $< > $*.c \ || ( rm -f $*.c; exit 1) $(CC) -c $(CFLAGS) $(CPPFLAGS) $*.c .fc.c: $(FORTC) -O $(OS) $< > $@ \ || (rm -f $*.c; exit 1) # Compile assembler code. # .S.o: $(CC) -c $(CFLAGS) $(CPPFLAGS) $< # Compile C code. # .c.o: $(CC) -c $(CFLAGS) $(CPPFLAGS) $< # Compile lex(1) code. This rule is here to ensure the use of CPPFLAGS. # .l.o: rm -f $*.c $(LEX) -t $< > $*.c $(CC) -c $(CFLAGS) $(CPPFLAGS) $*.c rm $*.c # C preprocess. # NB: # 1. Line numbering information is kept. # .c.i: $(CPP) $(CPPFLAGS) $< > $@ .cdl.nc: $(NCGEN) -o $*.nc $*.cdl .sh: cp $< $@; chmod +x $@ ############################################################################ # Lint: ############################################################################ .c.ln: $(LINT) -c $(LINTFLAGS) $(CPPFLAGS) $< ############################################################################ # Libraries: ############################################################################ RANLIB = ranlib LIBDIR = $(exec_prefix)/lib LIB_A = lib$(LIBRARY).a LIBFILE = dummy-libfile # to silence GNU make(1) library: $(LIB_A) remote_library: $(REMOTE_LIBRARY) # The following rule is forced because the library can be created by a # makefile in another directory prior to the execution of the following rule. # $(LIB_A): $(LIBOBJS) $(LIBOBJS2) FORCE $(AR) rcuv $@ $(LIBOBJS) case "$(LIBOBJS2)" in \ '') ;; \ *) $(AR) rucv $@ $(LIBOBJS2);; \ esac $(RANLIB) $@ # The following rule is for those makefiles needing to install object # modules in a library in another directory. They need only define # REMOTE_LIBRARY and LIBOBJS. The rule is forced for the same reason as the # $(LIB_A) rule. # lib_dummy $(REMOTE_LIBRARY): $(LIBOBJS) FORCE $(AR) rcuv $@ $(LIBOBJS) $(RANLIB) $@ installed_libfiles: FORCE @if [ -n "$(LIBFILES)" ]; then \ libfiles="$(LIBFILES)"; \ for libfile in $$libfiles; do \ $(MAKE) $(MFLAGS) \ LIBDIR=$(LIBDIR) LIBFILE=$$libfile \ installed_libfile || exit 1; \ done; \ else \ :; \ fi installed_library: FORCE @$(MAKE) $(MFLAGS) \ LIBDIR=$(LIBDIR) LIBFILE=$(LIB_A) \ installed_libfile # The following target decouples the previous targets from the actual rule; # thus, eliminating extraneous make(1) messages. # installed_libfile: $(LIBDIR)/$(LIBFILE) $(LIBDIR)/dummy.a $(LIBDIR)/$(LIBFILE): $(LIBDIR) $(LIBFILE) cp $(LIBFILE) $@ dummy_libdir $(LIBDIR): mkdir -p $@ chmod u+rwx,g+rws,o=rx $@ LIB_SO = lib$(LIBRARY).so.$(MAJOR_NO).$(MINOR_NO) LIB_SA = lib$(LIBRARY).sa.$(MAJOR_NO).$(MINOR_NO) #library: FORCE # @so_objs=`echo $(LIBOBJS) | sed 's/\.o/.so/g'`; \ # if [ -z "$$so_objs" ]; then \ # :; \ # else \ # $(MAKE) $(MFLAGS) $(LIB_SO) \ # SO_OBJS="$$so_objs"; \ # fi # @if [ -z "$(SA_OBJS)" ]; then \ # :; \ # else \ # $(MAKE) $(MFLAGS) $(LIB_SA); \ # fi $(LIB_SO): $(SO_OBJS) ld -assert pure-text $(SO_OBJS) -o $@ $(LIB_SA): $(SA_OBJS) FORCE $(AR) rcuv $@ $(SA_OBJS) .fc.so: $(FORTC) -O $(OS) $< > $*.c \ || (rm -f $*.c; exit 1) $(CC) -c -o $$$$.o -pic $(CFLAGS) $(CPPFLAGS) $*.c \ || (rm -f $$$$.o; exit 1) mv $$$$.o $@ .c.so: $(CC) -c -o $$$$.o -pic $(CFLAGS) $(CPPFLAGS) $< \ || (rm -f $$$$.o; exit 1) mv $$$$.o $@ #installed_library: $(LIBDIR)/$(LIB_SO) # @if [ -z "$(SA_OBJS)" ]; then \ # :; \ # else \ # $(MAKE) $(MFLAGS) $(LIBDIR)/$(LIB_SA); \ # fi $(LIBDIR)/dummy.so $(LIBDIR)/$(LIB_SO): $(LIBDIR) $(LIB_SO) cp $(LIB_SO) $(LIBDIR)/$(LIB_SO) $(LIBDIR)/dummy.sa $(LIBDIR)/$(LIB_SA): $(LIBDIR) $(LIB_SA) cp $(LIB_SA) $(LIBDIR)/$(LIB_SA) ############################################################################ # Programs: ############################################################################ BINDIR = $(exec_prefix)/bin BINFILE = dummy-binfile programs: $(PROGRAMS) program: @if [ -z "$(PROGRAM)" ]; then \ : true; \ else \ $(MAKE) $(MFLAGS) $(PROGRAM); \ fi dummy_prog $(PROGRAM): $(OBJS) @if [ -r $@.f -o -r $@.F ]; then \ ld='$(FC) -o $@ $(FFLAGS)'; \ elif [ -r $@.cc ]; then \ ld='$(CXX) -o $@ $(CXXFLAGS)'; \ else \ ld='$(CC) -o $@ $(CFLAGS)'; \ fi; \ cmd="$$ld $(LDFLAGS) $(OBJS) $(LIBS)"; \ echo $$cmd; \ $$cmd \ || (rm -f $@; exit 1) installed_programs: FORCE @$(MAKE) $(MFLAGS) installed_binfiles \ BINDIR=$(BINDIR) BINFILES="$(PROGRAMS)" installed_binfiles: FORCE @if [ -n "$(BINFILES)" ]; then \ binfiles="$(BINFILES)"; \ for binfile in $$binfiles; do \ $(MAKE) $(MFLAGS) \ BINDIR=$(BINDIR) BINFILE=$$binfile \ installed_binfile || exit 1; \ done; \ else \ :; \ fi installed_program: FORCE @$(MAKE) $(MFLAGS) \ BINDIR=$(BINDIR) BINFILE=$(PROGRAM) \ installed_binfile # The following target decouples the previous targets from the actual rule; # thus, eliminating extraneous make(1) messages. # installed_binfile: $(BINDIR)/$(BINFILE) $(BINDIR)/dummy $(BINDIR)/$(BINFILE): $(BINDIR) $(BINFILE) cp $(BINFILE) $@ dummy_bindir $(BINDIR): mkdir -p $@ chmod u+rwx,g+rws,o=rx $@ $(PROGRAM).pure: $(OBJS) purify -best-effort $(PURIFYFLAGS) $(CC) -o $@ \ $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) $(OBJS) $(LIBS) pure: purify purify: $(PROGRAM).pure FORCE $(MAKE) $(MFLAGS) PROGRAM=$(PROGRAM).pure test.pure.out ############################################################################ # Header files: ############################################################################ INCDIR = $(prefix)/include HEADER = dummy-header # to silence GNU make(1) installed_headers: FORCE @if [ -n "$(HEADERS)" ]; then \ headers="$(HEADERS)"; \ for header in $$headers; do \ $(MAKE) $(MFLAGS) \ INCDIR=$(INCDIR) HEADER=$$header \ installed_header || exit 1; \ done; \ else \ :; \ fi # The following target decouples the previous targets from the actual rule; # thus, eliminating extraneous make(1) messages. # installed_header: $(INCDIR)/$(HEADER) $(INCDIR)/dummy.h $(INCDIR)/$(HEADER): $(INCDIR) $(HEADER) cp $(HEADER) $@ dummy_incdir $(INCDIR): mkdir -p $@ chmod u+rwx,g+rws,o=rx $@ ############################################################################ # `etc/' files: ############################################################################ ETCDIR = $(prefix)/etc ETCFILE = dummy-etcfile # to silence GNU make(1) installed_etcfiles: @if [ -n "$(ETCFILES)" ]; then \ etcfiles="$(ETCFILES)"; \ for etcfile in $$etcfiles; do \ $(MAKE) $(MFLAGS) \ ETCDIR=$(ETCDIR) ETCFILE=$$etcfile \ installed_etcfile || exit 1; \ done; \ else \ :; \ fi # The following target decouples the previous targets from the actual rule; # thus, eliminating extraneous make(1) messages. # installed_etcfile: $(ETCDIR)/$(ETCFILE) $(ETCDIR)/dummy $(ETCDIR)/$(ETCFILE): $(ETCDIR) $(ETCFILE) cp $(ETCFILE) $@ dummy_etcdir $(ETCDIR): mkdir -p $@ chmod u+rwx,g+rws,o=rx $@ ############################################################################ # Manual Pages: ############################################################################ MANDIR = $(prefix)/man MANUAL = dummy-manual # to slience GNU make WHATIS = whatis # The following macro should be empty on systems that don't # allow users to create their own manual-page indexes. MAKEWHATIS_CMD = installed_manuals: FORCE @if [ -n "$(MANUALS)" ]; then \ manuals="$(MANUALS)"; \ for manual in $$manuals; do \ extension=`echo $$manual | sed 's/[^.]*\.//'`; \ chapter=`echo $$extension | sed 's/\(.\).*/\1/'`; \ subchapter=`echo $$extension | sed 's/.//'`; \ mandir=$(MANDIR)/man$$chapter; \ $(MAKE) $(MFLAGS) \ MANDIR=$$mandir MANUAL=$$manual \ installed_manual || exit 1; \ done; \ else \ :; \ fi # The following target decouples the previous targets from the actual rule; # thus, eliminating extraneous make(1) messages. # installed_manual: $(MANDIR)/$(MANUAL) # The first sed(1) editing command in the following replaces the expanded # RCS keyword `$Date ...' in the `.TH' macro line with something more # appropriate to a manual page. # # We don't preprocess the manual page with tbl(1) and neqn(1) on OSF1 # IRIX, and HP-UX systems because their man(1) always does that. # # NB: Manual pages like `man3/udunits.3f' cause the subdirectory man3f/ # to be created as a symbolic link to man3/. This accomodates # operating-systems like SunOS 5.4 which require files like *.3f to be in # their own man3f/ subdirectory. # $(MANDIR)/dummy.man $(MANDIR)/$(MANUAL): $(MANDIR) $(MANUAL) case `uname -s` in \ OSF1*|IRIX*|HP-UX) \ sed \ -e '/^\.TH/s/$$D\ate: \([0-9]*\)\/\([0-9]*\)\/\([0-9]*\).*\$$/\1-\2-\3/'\ $(MANUAL) > $@;; \ *) \ sed \ -e '/^\.TH/s/$$D\ate: \([0-9]*\)\/\([0-9]*\)\/\([0-9]*\).*\$$/\1-\2-\3/'\ $(MANUAL) | $(TBL) | $(NEQN) > $@;; \ esac dummy_mandir $(MANDIR): mkdir -p $@ chmod u+rwx,g+rws,o=rx $@ whatis: $(MANDIR)/$(WHATIS) $(MANDIR)/$(WHATIS): $(MANDIR) ############################################################################ # Documents: ############################################################################ DOCDIR = $(prefix)/doc DOCUMENT = dummy-document # to silence GNU make(1) installed_documents: FORCE case "$(DOCUMENTS)" in \ '') : true \ ;; \ *) documents="$(DOCUMENTS)"; \ for document in $$documents; do \ $(MAKE) $(MFLAGS) \ DOCUMENT=$$document installed_document || exit 1; \ done \ ;; \ esac # The following target decouples the previous targets from the actual rule; # thus, eliminating extraneous make(1) messages. # installed_document: $(DOCDIR)/$(DOCUMENT) $(DOCDIR)/dummy.doc $(DOCDIR)/$(DOCUMENT): $(DOCDIR) $(DOCUMENT) cp $(DOCUMENT) $(DOCDIR) dummy_docdir $(DOCDIR): mkdir -p $@ chmod u+rwx,g+rws,o=rx $@ ############################################################################ # TeX-Info Pages: ############################################################################ INFODIR = $(prefix)/info INFO = dummy-info # to silence GNU make(1) installed_infos: FORCE if [ -z "$(MAKEINFO)" ]; then \ echo 1>&2 "GNU info-pages won't be installed" \ "because makeinfo program doesn't exist"; \ else \ if [ -n "$(INFOS)" ]; then \ infos="$(INFOS)"; \ for info in $$infos; do \ $(MAKE) $(MFLAGS) \ INFODIR=$(INFODIR) INFO=$$info \ installed_info || exit 1; \ done; \ else \ :; \ fi; \ fi; # The following target decouples the previous targets from the actual rule; # thus, eliminating extraneous make(1) messages. # installed_info: $(INFODIR)/$(INFO) $(INFODIR)/dummy.info $(INFODIR)/$(INFO): $(INFODIR) $(INFO) cp $(INFO) $@ dummy_infodir $(INFODIR): mkdir -p $@ chmod u+rwx,g+rws,o=rx $@ # Rules for generating info pages: # .SUFFIXES: .info .texi .texinfo .txn .texi.info: @if [ -z "$(MAKEINFO)" ]; then \ echo 1>&2 "Can't create $@ because no makeinfo(1)"; \ else \ $(MAKEINFO) $< --no-split --output=$@; \ fi .texinfo.info: @if [ -z "$(MAKEINFO)" ]; then \ echo 1>&2 "Can't create $@ because no makeinfo(1)"; \ else \ $(MAKEINFO) $< --no-split --output=$@; \ fi .txn.info: @if [ -z "$(MAKEINFO)" ]; then \ echo 1>&2 "Can't create $@ because no makeinfo(1)"; \ else \ $(MAKEINFO) $< --no-split --output=$@; \ fi # Ensure that info page depends on canonical TeX-Info macros. # dummy_info $(INFO): texinfo.tex ############################################################################ # Cleanup: ############################################################################ clean: default_clean distclean: realclean realclean: default_realclean default_clean: FORCE rm -f $(GARBAGE) $(PROGRAM) a.out core *.o *.i *.a *.so.* *.sa.* \ *.so *.u *.pure *.pure_hardlink *.pure_linkinfo conftest* \ test.out test.pure.out \ *.aux *.toc *.dvi \ config.cache *.Z tags MANIFEST *~ default_distclean: default_realclean default_realclean: FORCE rm -f $(GARBAGE) $(PROGRAM) a.out core *.o *.i *.a *.so.* *.sa.* \ *.so *.u *.pure *.pure_hardlink *.pure_linkinfo conftest* \ test.out \ *.aux *.toc *.dvi \ config.cache *.Z *.log tags TAGS MANIFEST *~ \ Makefile config.status cc_id ############################################################################ # Configuration: ############################################################################ # The following target is touched because config.status won't update it if # it hasn't changed. # # The following is commented-out because the HPUX make(1) goes into a loop. # #Makefile: config.status # ./config.status # touch $@ config.status: cc_id configure ./configure --no-create cc_id: FORCE if test -r $@ && test "`cat $@`" = "$(CC)"; then \ :; \ else \ echo "$(CC)" > $@; \ fi # The following is commented-out because autoconf is currently only # available on Zero. # #configure: configure.in # autoconf ############################################################################ # Dependency maintenance: ############################################################################ .PRECIOUS: depend # # Note: The following rule will only work if the C compiler behaves correctly # when given the `-M' option. AIX's cc(1) and SunOS's acc(1) behave # incorrectly. --Steve Emmerson 1992-09-24 # # Furthermore, we do not attempt to maintain dependencies on installed # header files (e.g. those in $(INCDIR)) for two reasons: 1) the dependency # list generated at Unidata mightn't correspond to the situation at a client # site; and 2) clients using broken compilers (c.f. previous note) can't # regenerate the dependency list. # # We try to ensure that all C files exist in a distribution that # includes fortc(1), yacc(1), or lex(1) sources. # depend: FORCE # csrcs=`echo $(MANIFEST) | tr ' ' '\012' | egrep -s '\.fc|\.y|\.l'`; \ if [ "$$csrcs" ]; then \ echo 1>&2 "Ensuring that all C files exist for target depend"; \ echo 1>&2 "csrcs = $$csrcs"; \ $(MAKE) $(MFLAGS) $$csrcs; \ fi -incdir=`echo $(INCDIR) | sed s',/,\\\/,g'`; \ (case $(OS) in \ aix*) \ $(CC) -M -E $(CPPFLAGS) *.c > /dev/null; \ cat *.u; \ ;; \ *) \ $(CC_MAKEDEPEND) $(CPPFLAGS) *.c *.S 2> /dev/null; \ ;; \ esac) | awk '{ \ if ($$0 ~ /:/) { \ target = $$1; \ if (target ~ /:/) { \ target = substr(target,1,length(target)-1); \ start = 2; \ } else { \ start = 3; \ } \ } else { \ start = 1; \ } \ for (i = start; i <= NF; ++i) { \ if ($$i !~ /^\\/ && \ $$i !~ /port\// && \ $$i !~ /^\//) \ { \ if ($$i ~ /^\.\//) \ $$i = substr($$i, 3, 99); \ print target ": " $$i \ } \ } \ }' >>$@ sort -u -o $@ $@ tag='### DO NOT DELETE THIS LINE. make depend DEPENDS ON IT ###'; \ sed -e "/^$$tag$$/r depend" \ -e "/^$$tag$$/q" Makefile > Makefile.new mv Makefile.new Makefile ############################################################################ # Distributions: ############################################################################ FTPDIR = /pub/udunits FTPBINDIR = /home/ftp/pub/binary/dummy_system VERSION = @VERSION@ TARFLAGS = -chof zip: FORCE version=`cat VERSION | sed 's/\.//g;s/-//g`; \ $(MAKE) $(MFLAGS) $(PACKAGE)$$version.zip VERSION=$$version $(PACKAGE)$(VERSION).zip: MANIFEST id=$(PACKAGE)$(VERSION) \ && rm -rf $$id \ && mkdir $$id \ && ln -s .. $$id/src \ && sed "s|^|$$id/src/|" MANIFEST | zip -@ $@ \ && rm -r $$id tar.Z: FORCE version=`cat VERSION`; \ $(MAKE) $(MFLAGS) $(PACKAGE)-$$version.tar.Z VERSION=$$version $(FTPDIR)/$(PACKAGE)-$(VERSION).tar.Z: $(PACKAGE)-$(VERSION).tar.Z cp $(PACKAGE)-$(VERSION).tar.Z $@ chmod u+rw,g+rw,o=r $@ ftp: FORCE version=`cat VERSION`; \ $(MAKE) $(MFLAGS) $(FTPDIR)/$(PACKAGE)-$$version.tar.Z \ VERSION=$$version; \ test -r $(FTPDIR)/$(PACKAGE).tar.Z || exit 0; \ cd $(FTPDIR) || exit 1; \ rm $(PACKAGE).tar.Z || exit 1; \ ln -s $(PACKAGE)-$$version.tar.Z $(PACKAGE).tar.Z; $(PACKAGE)-$(VERSION).tar.Z: MANIFEST id=$(PACKAGE)-$(VERSION) \ && rm -rf $$id \ && mkdir $$id \ && ln -s .. $$id/src \ && tar $(TARFLAGS) - `sed "s|^|$$id/src/|" MANIFEST` | compress > $@ \ && rm -r $$id binftp: FORCE version=`cat VERSION`; \ $(MAKE) $(MFLAGS) $(FTPBINDIR)/$(PACKAGE)-$$version.tar.Z \ VERSION=$$version ftpbin: binftp $(FTPBINDIR)/$(PACKAGE)-$(VERSION).tar.Z: FORCE id=$(PACKAGE)-$(VERSION) \ && rm -f $$id \ && ln -s $(prefix) $$id \ && tar $(TARFLAGS) - README $$id/bin $$id/doc $$id/etc $$id/include \ $$id/lib $$id/man | compress > $@ \ && rm $$id chmod u+rw,g+rw,o=r $@ test -r $(FTPBINDIR)/$(PACKAGE).tar.Z || exit 0; \ cd $(FTPBINDIR) || exit 1; \ rm $(PACKAGE).tar.Z || exit 1; \ ln -s $(PACKAGE)-$(VERSION).tar.Z $(PACKAGE).tar.Z; MANIFEST: FORCE @echo 1>&2 Creating MANIFEST @$(MAKE) -s $(MFLAGS) MANIFEST.echo > $@ MANIFEST.echo: FORCE @echo $(MANIFEST) | tr ' ' '\012' @if [ -n "$(SUBDIRS)" ]; then \ subdirs="$(SUBDIRS)"; \ for subdir in $$subdirs; do \ (cd $$subdir && \ echo 1>&2 Creating $@ in `pwd` && \ $(MAKE) $(MFLAGS) MANIFEST.echo | \ sed "s|^|$$subdir/|") || exit 1; \ done; \ else \ :; \ fi ensure_manifest: FORCE @$(MAKE) $(MFLAGS) \ `echo $(MANIFEST) | sed 's/MANIFEST//'` @if [ -n "$(SUBDIRS)" ]; then \ subdirs="$(SUBDIRS)"; \ for subdir in $$subdirs; do \ (cd $$subdir && \ echo 1>&2 Creating $@ in `pwd` && \ $(MAKE) $(MFLAGS) ensure_manifest ) || \ exit 1; \ done; \ else \ :; \ fi ############################################################################ # Miscellaneous: ############################################################################ # The following dummy target is useful as a dependency to ensure that a # rule is always executed. # FORCE: ### Everything after the following line might be overwritten ### ### DO NOT DELETE THIS LINE. make depend DEPENDS ON IT ### harry-bug.o: harry-bug.c julnum.o: julnum.c testcal.o: testcal.c testcal.o: udunits.h testcal2.o: testcal2.c testcal2.o: udunits.h udalloc.o: udalloc.c udalloc.o: udalloc.h udunits.o: udunits.c udunits.o: udunits.h unitsvers.o: unitsvers.c utparse.o: udunits.h utparse.o: utparse.c utparse.o: utprivate.h utparse.o: utscan.h utscan.o: udunits.h utscan.o: utparse.h utscan.o: utprivate.h utscan.o: utscan.c utscan.o: utscan.h