### ==================================================================== ### Makefile for files in /u/sy/beebe/public_html/software/ieee/ ### ### All GNU standard Makefile targets are supported. ### ### Supply additional compilation flags with command-line settings ### of XCFLAGS, XCXXFLAGS, and XFFLAGS. ### ### Because some test programs are not expected to compile and/or link ### successfully in some environments, use the make "-i" command-line ### option to ignore errors: e.g., "make -i all check". ### ### Current target list (excluding object file dependencies): ### all ### check ### check-all ### check-begin ### check-c ### check-cxx ### check-end ### check-f ### check-java ### clean ### clean-dist ### clean-programs ### clean-programs-c ### clean-programs-cxx ### clean-programs-f ### clean-programs-java ### clean-test ### clobber ### dist ### distclean ### docs ### install ### install-exe ### install-lib ### install-man ### install-show ### install-shrlib ### $(JAVATOPDOCS) ### ls-lR ### ls-lRt ### maintainer-clean ### mostlyclean ### ofl ### paranoia ### paranoia-dp ### paranoia-sp ### programs ### programs-c ### programs-cxx ### programs-f ### programs-java ### testdp ### testsp ### timdep ### timeps ### timtst ### tstdep ### tsteps ### update ### uninstall ### uninstall-exe ### uninstall-lib ### uninstall-man ### uninstall-shrlib ### ### [30-Nov-2001] ### ==================================================================== ### Program definitions PROGRAM = CHANGE-THIS-VALUE PROGLIB = CHANGE-THIS-VALUE VERSION = 1.0 ### ==================================================================== ### Installation locations prefix = /usr/local bindir = $(prefix)/bin catdir = $(prefix)/man/cat$(manext) libdir = $(libtop)/$(PROGRAM)-$(VERSION) libtop = $(prefix)/$(PROGLIB)/ mandir = $(prefix)/man/man$(manext) manext = 1 shrlibdir = $(libtop)/$(PROGRAM)-$(VERSION) shrlibtop = $(prefix)/share/$(PROGLIB)/ ### ==================================================================== ### Macro definitions AWK = awk CAT = cat CHMOD = chmod CMP = cmp CP = /bin/cp -p CP = rcp -p CP = scp -p DETEX = detex DETEXFLAGS = -m -n -s DIFF = diff DW = dw FIND = find GREP = grep GZIP = gzip HEAD = head HEADMAX = 50 ISPELL = ispell JAR = jar JAVA = java JAVAC = javac JAVADOC = javadoc JAVALD = javald LIBS = -lm LIBFILES = /dev/null LN = ln ### NB: we want GNU ls to get long time stamps LS = /usr/local/bin/ls -o --full-time LSTOHTML = $(AWK) -f lstohtml.awk LSTOHTMLFLAGS = -v PREFIX=. -v INDENT=1 MKDIR = mkdir -p MV = /bin/mv RM = /bin/rm -f SED = sed SHELL = /bin/sh SHRLIBFILES = /dev/null SORT = sort SPELL = spell SPELLFILTER = $(CAT) SPELLFILTER = $(SED) -e 's/[0-9,.:;?&]/ /g' TAR = tar TEST = test TIME = time ### NB: TMPDIR MUST be a directory other than the current one! TMPDIR = /tmp TOUCH = touch TRUE = true ZIP = zip ZOO = zoo ### ==================================================================== ### Subdirectories SUBDIRS = elefunt images SUBDIRLOOP = for subdir in $(SUBDIRS) ; \ do \ echo ============================== Making $@ in $$subdir ; \ ( cd $$subdir && $(MAKE) $(MFLAGS) $@ ) ; \ done SUBDIRLOOP = ### ==================================================================== ### Compiler flags and source files CDEFINES = -DHAVE_LONG_LONG -DHAVE_LONG_DOUBLE CINCLUDES = CFLAGS = $(COPT) $(CDEFINES) $(CINCLUDES) $(XCFLAGS) COPT = -g COBJS = $(CSRCS:.c=.o) CSRCS = adx2.c chkinexact.c copysign.c dadx2.c datasize.c deps2.c \ depsiter.c dintxp.c disden.c disinf.c disnan.c dsetxp.c \ eps2.c epsiter.c fpinfo2.c fpshow.c intxp.c isden.c \ isinf.c isnan.c ofl.c paranoia.c round-trip-problems.c \ rwfp2a.c rwfp2b.c rwinfnan2.c setxp.c signchar.c \ test-gradual-underflow.c testdp.c testsp.c timdep.c \ timeps.c timtst.c tstchr.c tstdep.c tsteps.c wchar.c \ zerocomp.c zerosd.c zerosdq.c CXXDEFINES = CXXINCLUDES = CXXFLAGS = $(CXXOPT) $(CXXDEFINES) $(CXXINCLUDES) $(XCXXFLAGS) CXXOPT = -g CXXOBJS = $(CXXSRCS:.cc=.o) CXXSRCS = rwinfnan3.cc FFLAGS = $(FOPT) FOPT = -g FOBJS = $(FSRCS:.f=.o) FSRCS = adx.f dadx.f deps.f dmachar.f dnxtaft.f dran.f drandl.f \ eps.f fpinfo.f fpinfosd.f infnani.f machar.f minmax.f \ mmsqrt.f nxtaft.f qtest.f ran.f randl.f rwfp.f rwinfnan1.f \ sqrt.f subnorm.f subnorm2.f tdsqrt1.f tdsqrt2.f tsqrt2.f \ zerosdb.f zerosdi.f zerosdqb.f zerosdqi.f FTNCOMMOND = dadx2.o deps.o dintxp.o disden.o disinf.o disnan.o dsetxp.o FTNCOMMONS = adx2.o eps.o intxp.o isden.o isinf.o isnan.o setxp.o HSRCS = args.h ieeeftn.h paranoia.h JAVACFLAGS = JAVADOCFLAGS = JAVADOCS = $(JAVASRCS:.java=.html) JAVAFLAGS = JAVALDFLAGS = JAVAOBJS = $(JAVASRCS:.java=.class) JAVASRCS = rwinfnanascii.java rwinfnanbinary.java JAVATOPDOCS = AllNames.html packages.html tree.html ### Source files that have main programs ### NB: paranoia.c is not included: it produces two executables, listed in ### PROGRAMSC below PROGCSRCS = chkinexact.c copysign.c datasize.c fpinfo2.c fpshow.c ofl.c \ round-trip-problems.c rwfp2a.c rwfp2b.c \ rwinfnan2.c signchar.c test-gradual-underflow.c testdp.c \ testsp.c timdep.c timeps.c timtst.c tstchr.c tstdep.c \ tsteps.c wchar.c zerocomp.c zerosdq.c PROGCXXSRCS = rwinfnan3.cc PROGFSRCS = fpinfo.f fpinfosd.f infnani.f minmax.f rwfp.f rwinfnan1.f \ subnorm.f subnorm2.f zerosdb.f zerosdi.f zerosdqb.f \ zerosdqi.f PROGJAVASRCS = $(JAVASRCS) PROGRAMSCXX = $(PROGCXXSRCS:.cc=) PROGRAMSC = $(PROGCSRCS:.c=) paranoia-dp paranoia-sp PROGRAMSF = $(PROGFSRCS:.f=) PROGRAMSJAVA = $(PROGJAVASRCS:.java=) XFFLAGS = -fpe3 XFFLAGS = -mieee XFFLAGS = XCFLAGS = -ieee XCFLAGS = -mieee XCFLAGS = XCXXFLAGS = -ieee XCXXFLAGS = -mieee XCXXFLAGS = ### ==================================================================== ### Suffixes and extra rule(s) .SUFFIXES: .class .html .java .i .c: $(CC) $(CFLAGS) $< -o $* $(LIBS) .cc: $(CXX) $(CXXFLAGS) $< -o $* $(LIBS) .c.i: $(CC) $(CFLAGS) -E $< > $@ .cc.i: $(CXX) $(CXXFLAGS) -E $< > $@ .java.class: $(JAVAC) $(JAVACFLAGS) $< .java.html: $(JAVADOC) $(JAVADOCFLAGS) $< .java: $(JAVAC) $(JAVACFLAGS) $< $(JAVALD) $(JAVALDFLAGS) $* || $(TRUE) ### ==================================================================== ### Targets: ### We build the programs with the make -i option, because a few are ### known not to compile on certain platforms. all: $(MAKE) -i programs check: check-begin check-all check-end check-all: check-c check-cxx check-f check-java check-begin: @echo ======================================================================== @echo ======================================================================== @echo '**IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT**' @echo @echo There should be little output from these tests, other than their names, @echo run times, and differences in run times. However, because of variations @echo in floating-point systems, some numerical differences are expected. @echo @echo In difference listings, only the first $(HEADMAX) lines are shown. @echo @echo 'Complete test output will be found in the files test/*.err and test/*.out.' @echo @echo Reference test output from Sun Solaris 2.7 with native compilers is @echo found in the directory test/okay. @echo ======================================================================== @echo ======================================================================== ### NB: Some of the test programs can take a very long time to run, ### and produce tens of megabytes of output files; we skip their tests ### for now. check-c: programs-c @-for f in $(PROGRAMSC) ; \ do \ echo =========== $$f ; \ $(TEST) ! -f $$f && echo Skipping unavailable test: $$f && continue ; \ $(TEST) $$f = "testdp" && echo Skipping long test: $$f && continue ; \ $(TEST) $$f = "testsp" && echo Skipping long test: $$f && continue ; \ $(TEST) $$f = "timdep" && echo Skipping long test: $$f && continue ; \ $(TEST) $$f = "timeps" && echo Skipping long test: $$f && continue ; \ $(TEST) $$f = "tstdep" && echo Skipping long test: $$f && continue ; \ $(TEST) $$f = "tsteps" && echo Skipping long test: $$f && continue ; \ $(TIME) ./$$f < /dev/null > test/$$f.out 2> test/$$f.err ; \ echo checking output to stdout... ; \ $(CMP) -s test/okay/$$f.out test/$$f.out || \ $(DIFF) test/okay/$$f.out test/$$f.out | $(HEAD) -$(HEADMAX) ; \ echo checking output to stderr... ; \ $(CMP) -s test/okay/$$f.err test/$$f.err || \ $(DIFF) test/okay/$$f.err test/$$f.err | $(HEAD) -$(HEADMAX); \ done check-cxx: programs-cxx @-for f in $(PROGRAMSCXX) ; \ do \ echo =========== $$f ; \ $(TEST) ! -f $$f && echo Skipping unavailable test: $$f && continue ; \ $(TIME) ./$$f < /dev/null > test/$$f.out 2> test/$$f.err ; \ echo checking output to stdout... ; \ $(CMP) -s test/okay/$$f.out test/$$f.out || \ $(DIFF) test/okay/$$f.out test/$$f.out | $(HEAD) -$(HEADMAX) ; \ echo checking output to stderr... ; \ $(CMP) -s test/okay/$$f.err test/$$f.err || \ $(DIFF) test/okay/$$f.err test/$$f.err | $(HEAD) -$(HEADMAX); \ done check-end: check-f: programs-f @-for f in $(PROGRAMSF) ; \ do \ echo =========== $$f ; \ $(TEST) ! -f $$f && echo Skipping unavailable test: $$f && continue ; \ $(TIME) ./$$f < /dev/null > test/$$f.out 2> test/$$f.err ; \ echo checking output to stdout... ; \ $(CMP) -s test/okay/$$f.out test/$$f.out || \ $(DIFF) test/okay/$$f.out test/$$f.out | $(HEAD) -$(HEADMAX) ; \ echo checking output to stderr... ; \ $(CMP) -s test/okay/$$f.err test/$$f.err || \ $(DIFF) test/okay/$$f.err test/$$f.err | $(HEAD) -$(HEADMAX); \ done check-java: programs-java @-for f in $(PROGRAMSJAVA) ; \ do \ echo =========== $$f ; \ $(TEST) ! -f $$f.class && echo Skipping unavailable test: $$f && continue ; \ $(TEST) -f $$f && $(TIME) ./$$f < /dev/null > test/$$f.out 2> test/$$f.err || \ $(TEST) ! -f $$f && $(TIME) $(JAVA) $$f < /dev/null > test/$$f.out 2> test/$$f.err ; \ echo checking output to stdout... ; \ $(CMP) -s test/okay/$$f.out test/$$f.out || \ $(DIFF) test/okay/$$f.out test/$$f.out | $(HEAD) -$(HEADMAX) ; \ echo checking output to stderr... ; \ $(CMP) -s test/okay/$$f.err test/$$f.err || \ $(DIFF) test/okay/$$f.err test/$$f.err | $(HEAD) -$(HEADMAX) ; \ done clean: -$(RM) $(JAVAOBJS) -$(RM) *.dw -$(RM) *.i -$(RM) *.ln -$(RM) *.o -$(RM) *.ser -$(RM) *.tmp -$(RM) *~ -$(RM) \#* -$(RM) a.out -$(RM) core -$(SUBDIRLOOP) clean-dist: clean-ls-files -$(RM) ieee.tar.gz ieee.jar ieee.zip ieee.zoo -$(RM) $(TMPDIR)/ieee.tar.gz $(TMPDIR)/ieee.jar $(TMPDIR)/ieee.zip $(TMPDIR)/ieee.zoo clean-ls-files: -$(RM) ls-lR ls-lR.html ls-lRt ls-lRt.html clean-programs: clean-programs-c clean-programs-cxx clean-programs-f \ clean-programs-java -$(RM) a.out clean-programs-c: -$(RM) $(PROGRAMSC) clean-programs-cxx: -$(RM) $(PROGRAMSCXX) clean-programs-f: -$(RM) $(PROGRAMSF) clean-programs-java: -$(RM) $(PROGRAMSJAVA) clean-test: -$(RM) test/*.out test/*.err rwinfnanbinary.tmp.* rwinfnanascii.tmp.* clobber: distclean -$(SUBDIRLOOP) copysign: copysign.o $(CC) $(CFLAGS) -o $@ $? $(LIBS) dist: dist-archives ls-lR ### Make the archive files outside this directory, to avoid mutual inclusion. ### zoo creates funny time stamps in the .zoo archive, so we touch it to make ### it current. dist-archives: clean-dist distclean (cd ../; $(TAR) cf - ieee | $(GZIP) -9 > $(TMPDIR)/ieee.tar.gz) (cd ../; $(JAR) cf $(TMPDIR)/ieee.jar ieee) (cd ../; $(ZIP) $(TMPDIR)/ieee.zip `find ieee -type f | sort`) (cd ../; $(ZOO) a $(TMPDIR)/ieee.zoo `find ieee -type f | sort`) $(MV) $(TMPDIR)/ieee.tar.gz $(TMPDIR)/ieee.jar $(TMPDIR)/ieee.zip $(TMPDIR)/ieee.zoo . $(TOUCH) ieee.zoo distclean: mostlyclean clean-programs clean-test -$(RM) ./#* ./.#* -$(RM) $(PROGRAM) -$(RM) $(JAVADOCS) $(JAVATOPDOCS) -$(SUBDIRLOOP) docs: $(JAVATOPDOCS) FRC: install: install-exe install-lib install-shrlib install-man install-show $(SUBDIRLOOP) install-exe: uninstall-exe #### $(CP) $(PROGRAM) $(bindir)/$(PROGRAM) #### $(LN) $(bindir)/$(PROGRAM) $(bindir)/$(PROGRAM)-$(VERSION) #### $(CHMOD) 775 $(bindir)/$(PROGRAM) $(bindir)/$(PROGRAM)-$(VERSION) install-lib: uninstall-lib #### $(MKDIR) $(libtop) #### @if test -d $(libtop) ; then true ; else echo Cannot create $(libtop) ; exit 1 ; fi #### $(MKDIR) $(libdir) #### @if test -d $(libdir) ; then true ; else echo Cannot create $(libdir) ; exit 1 ; fi #### $(CP) $(LIBFILES) $(libdir)/ #### $(CHMOD) 664 $(libdir)/* install-man: uninstall-man #### $(CP) $(PROGRAM).man $(mandir)/$(PROGRAM).$(manext) #### $(CHMOD) 664 $(mandir)/$(PROGRAM).$(manext) install-show: #### @echo '' #### @echo Installed files... #### @$(LS) -l $(bindir)/$(PROGRAM) $(bindir)/$(PROGRAM)-$(VERSION) \ #### $(mandir)/$(PROGRAM).$(manext) #### @if test -d $(libdir) ; then $(LS) -lR $(libdir) ; fi #### @echo '' install-shrlib: uninstall-shrlib #### $(MKDIR) $(shrlibtop) #### @if test -d $(shrlibtop) ; then true ; else echo Cannot create $(shrlibtop) ; exit 1 ; fi #### $(MKDIR) $(shrlibdir) #### @if test -d $(shrlibdir) ; then true ; else echo Cannot create $(shrlibdir) ; exit 1 ; fi #### $(CP) $(SHRLIBFILES) $(shrlibdir)/ #### $(CHMOD) 664 $(shrlibdir)/* $(JAVATOPDOCS): $(JAVASRCS) $(JAVADOC) $(JAVADOCFLAGS) $(JAVASRCS) ls-lR: clean-test FRC ls-lRt $(LS) -lR . | $(GREP) -v ls-lR >$(TMPDIR)/$@ $(LSTOHTML) $(LSTOHTMLFLAGS) $(TMPDIR)/$@ > $(TMPDIR)/$@.html $(CMP) -s $(TMPDIR)/$@ $@ 2>/dev/null || $(MV) $(TMPDIR)/$@ $(TMPDIR)/$@.html . @-$(RM) $(TMPDIR)/$@ $(TMPDIR)/$@.html ls-lRt: clean-test FRC $(LS) -lRt . | $(GREP) -v ls-lR >$(TMPDIR)/$@ $(LSTOHTML) $(LSTOHTMLFLAGS) $(TMPDIR)/$@ > $(TMPDIR)/$@.html $(CMP) -s $(TMPDIR)/$@ $@ 2>/dev/null || $(MV) $(TMPDIR)/$@ $(TMPDIR)/$@.html . @-$(RM) $(TMPDIR)/$@ $(TMPDIR)/$@.html maintainer-clean: distclean @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." -$(SUBDIRLOOP) mostlyclean: clean -$(SUBDIRLOOP) # special rule: need -lsunmath on Sun Solaris, but not elsewhere ofl: ofl.c $(CC) $(CFLAGS) $< -o $@ $(LIBS) 2>/dev/null || $(CC) $(CFLAGS) $< -o $@ -lsunmath $(LIBS) # special rule: paranoia can be compiled for single (-Dsingle) or # double (default) precision, so create two different executables paranoia: paranoia-dp paranoia-sp @-echo >/dev/null paranoia-dp: paranoia.c $(CC) $(CFLAGS) paranoia.c -o $@ $(LIBS) paranoia-sp: paranoia.c $(CC) $(CFLAGS) -DSingle paranoia.c -o $@ $(LIBS) programs: programs-java programs-f programs-c programs-cxx programs-c: $(PROGRAMSC) programs-cxx: $(PROGRAMSCXX) programs-f: $(PROGRAMSF) programs-java: $(PROGRAMSJAVA) round-trip-problems: round-trip-problems.o $(CC) $(CFLAGS) -o $@ $? $(LIBS) testdp: testdp.o $(FTNCOMMOND) $(CC) $(CFLAGS) -o $@ testdp.o $(FTNCOMMOND) $(LIBS) testsp: testsp.o $(FTNCOMMONS) $(CC) $(CFLAGS) -o $@ testsp.o $(FTNCOMMONS) $(LIBS) timdep: timdep.o $(FTNCOMMOND) second.o $(CC) $(CFLAGS) -o $@ timdep.o $(FTNCOMMOND) second.o $(LIBS) timeps: timeps.o $(FTNCOMMONS) second.o $(CC) $(CFLAGS) -o $@ timeps.o $(FTNCOMMONS) second.o $(LIBS) timops: timops.o second.o store.o $(CC) $(CFLAGS) -o $@ timops.o second.o store.o $(LIBS) timtst: timtst.o $(FTNCOMMOND) $(FTNCOMMONS) second.o $(CC) $(CFLAGS) -o $@ timtst.o $(FTNCOMMOND) $(FTNCOMMONS) second.o $(LIBS) tstdep: tstdep.o $(FTNCOMMOND) $(CC) $(CFLAGS) -o $@ tstdep.o $(FTNCOMMOND) $(LIBS) tsteps: tsteps.o $(FTNCOMMONS) $(CC) $(CFLAGS) -o $@ tsteps.o $(FTNCOMMONS) $(LIBS) update: dist uninstall: uninstall-exe uninstall-lib uninstall-shrlib uninstall-man #### -$(SUBDIRLOOP) uninstall-exe: #### -$(RM) $(bindir)/$(PROGRAM) #### -$(RM) $(bindir)/$(PROGRAM)-$(VERSION) uninstall-lib: #### -$(RM) -r $(libdir) uninstall-man: #### -$(RM) $(mandir)/$(PROGRAM).$(manext) #### -$(RM) $(catdir)/$(PROGRAM).$(manext) uninstall-shrlib: ##### -$(RM) -r $(shrlibdir) ### ==================================================================== ### File dependencies ### C/C++ header file dependencies adx2.o: adx2.c ieeeftn.h chkinexact.o: args.h chkinexact.c copysign.o: args.h copysign.c dadx2.o: dadx2.c ieeeftn.h datasize.o: args.h datasize.c deps2.o: deps2.c ieeeftn.h depsiter.o: depsiter.c ieeeftn.h dintxp.o: dintxp.c ieeeftn.h disden.o: disden.c ieeeftn.h disinf.o: disinf.c ieeeftn.h disnan.o: disnan.c ieeeftn.h dsetxp.o: dsetxp.c ieeeftn.h eps2.o: eps2.c ieeeftn.h epsiter.o: epsiter.c ieeeftn.h fpshow.o: fpshow.c ieeeftn.h intxp.o: ieeeftn.h intxp.c isden.o: ieeeftn.h isden.c isinf.o: ieeeftn.h isinf.c isnan.o: ieeeftn.h isnan.c ofl.o: args.h ofl.c paranoia.o: args.h paranoia.c paranoia.h round-trip-problems.o: args.h round-trip-problems.c rwfp2a.o: args.h rwfp2a.c rwfp2b.o: args.h rwfp2b.c rwinfnan2.o: args.h rwinfnan2.c second.o: ieeeftn.h second.c signchar.o: args.h signchar.c setxp.o: ieeeftn.h setxp.c testdp.o: ieeeftn.h testdp.c testsp.o: ieeeftn.h testsp.c timdep.o: ieeeftn.h timdep.c timeps.o: ieeeftn.h timeps.c timtst.o: ieeeftn.h timtst.c tstchr.o: ieeeftn.h tstchr.c tstdep.o: ieeeftn.h tstdep.c tsteps.o: ieeeftn.h tsteps.c wchar.o: args.h wchar.c zerocomp.o: args.h zerocomp.c zerosdq.o: args.h zerosdq.c ### ====================================================================