1#-----------------------------------------------------------------------------
2# GNU makefile for building WCSLIB 7.7 and its test suite.
3#
4# Summary of the main targets
5# ---------------------------
6#   build:     Build the library.
7#
8#   clean:     Delete intermediate object files.
9#
10#   cleaner:   clean, and also delete the test executables.
11#
12#   cleanest (distclean or realclean): cleaner, and also delete the object
13#              library and the C source files generated by 'flex'.
14#
15#   check (or test): Compile and run the test programs.  By default they are
16#              executed in batch mode, and non-graphical tests only report
17#              "PASS" on success.  Use
18#
19#                make MODE=interactive check
20#
21#              to run them interactively with full diagnostic output.  To skip
22#              graphical tests even if PGPLOT is available, use
23#
24#                make CHECK=nopgplot check
25#
26#   tests:     Compile the test programs (but don't run them).
27#
28# Notes:
29#   1) If you need to make changes then preferably modify ../makedefs.in
30#      instead and re-run configure.
31#
32# Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
33# http://www.atnf.csiro.au/people/Mark.Calabretta
34# $Id: GNUmakefile,v 7.7 2021/07/12 06:36:49 mcalabre Exp $
35#-----------------------------------------------------------------------------
36# Get configure settings.
37SUBDIR := C
38include ../makedefs
39
40FLEXMODS := $(patsubst %.l,%.c,$(wildcard *.l))
41MODULES  := $(sort \
42              $(patsubst %.c,%.o, \
43                $(filter-out getwcstab.c,$(wildcard *.c)) $(FLEXMODS)))
44
45ifeq "$(WCSTRIG)" "MACRO"
46  CPPFLAGS += -DWCSTRIG_MACRO
47  MODULES  := $(filter-out wcstrig.o, $(MODULES))
48else
49  ifeq "$(WCSTRIG)" "NATIVE"
50    MODULES := $(filter-out wcstrig.o, $(MODULES))
51  endif
52endif
53
54LIBLOCK := lib.lock
55
56# For building the sharable library.
57PICLIB := libwcs-PIC.a
58
59CPPFLAGS += -I. -I..
60
61vpath %.c  test
62vpath %.h  ..
63vpath %.in ..
64
65
66# For building and exercising the test suite
67# ------------------------------------------
68# Test programs that don't require CFITSIO or PGPLOT...
69TEST_N := tlin tdis1 tdis2 tlog tprj1 tsph tsphdpa tspx ttab1 twcs twcssub \
70          tpih1 tbth1 tfitshdr tunits twcsfix twcscompare
71
72# ...and unofficial test programs.
73TEST_n := tdisiter tspcaips tspcspxe tspctrne twcs_locale
74
75# Test programs that require CFITSIO (they don't need PGPLOT).
76TEST_C := twcstab twcshdr tdis3 twcslint
77
78# Test programs that require PGPLOT but not PGSBOX.
79TEST_P := tspc tprj2 tcel1 tcel2 ttab2 ttab3 twcsmix
80
81# Test programs that require PGSBOX (and therefore PGPLOT).
82TEST_B := tpih2
83
84# Test program for POSIX threads (code development only).
85TEST_T := tpthreads
86
87# Test programs that are compiled but not automatically exercised.
88TEST_X := tsphdpa twcshdr
89
90
91TESTS  := $(TEST_N)
92
93# Do we have CFITSIO?
94DO_CFITSIO := 1
95ifeq "$(CFITSIOINC)" ""
96  DO_CFITSIO := 0
97else ifeq "$(CFITSIOLIB)" ""
98  DO_CFITSIO := 0
99endif
100
101ifeq "$(DO_CFITSIO)" "1"
102  # Yes, add test programs that use it.
103  TESTS += $(TEST_C)
104  CFITSIO_CFLAGS := $(filter-out -Wpadded,$(CFLAGS))
105else
106  # No, amend TEST_X.
107  TEST_X := $(filter-out $(TEST_C),$(TEST_X))
108endif
109
110# Do we have PGPLOT?
111DO_PGPLOT := 0
112ifneq "$(CHECK)" "nopgplot"
113  DO_PGPLOT := 1
114  ifeq "$(PGPLOTINC)" ""
115    DO_PGPLOT := 0
116  else ifeq "$(PGPLOTLIB)" ""
117    DO_PGPLOT := 0
118  endif
119
120  ifeq "$(DO_PGPLOT)" "1"
121    # Yes, add test programs that use it.
122    TESTS += $(TEST_P) $(TEST_B)
123  else
124    # No, amend TEST_X.
125    TEST_X := $(filter-out $(TEST_P) $(TEST_B),$(TEST_X))
126  endif
127endif
128
129# Remove tests that aren't automatically exercised.
130TESTS := $(filter-out $(TEST_X), $(TESTS))
131
132PGSBOXLIB := ../pgsbox/libpgsbox-$(LIBVER).a
133
134ADDRE := 0x[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]*
135
136# Pattern rules
137#--------------
138
139ifeq "$(FLEX)" "flex"
140  %.c : %.l
141	-@ echo ''
142	-@ $(RM) $@
143	   $(FLEX) $(FLFLAGS) -t $< | sed -e 's/^[	 ]*#/#/' > $@
144else
145  %.c : %.l
146	-@ echo ''
147	-@ $(RM) $@
148	   cp flexed/$@ .
149endif
150
151$(WCSLIB)(%.o) : %.c
152	-@ echo ''
153	   $(CC) $(CPPFLAGS) $(CFLAGS) -c $<
154	 @ if [ ! -f $(LIBLOCK) ] ; then \
155	     echo $(AR) r$(ARFLAGS) $(WCSLIB) $% ; \
156	     $(AR) r$(ARFLAGS) $(WCSLIB) $% ; \
157	     $(RM) $% ; \
158	   fi
159
160$(PICLIB)(%.o) : $(WCSLIB)(%.o)
161	-@ echo ''
162	   $(CC) $(CPPFLAGS) $(CFLAGS) $(SHRFLAGS) -c $(%:.o=.c)
163	 @ if [ ! -f $(LIBLOCK) ] ; then \
164	     echo $(AR) r$(ARFLAGS) $(PICLIB) $% ; \
165	     $(AR) r$(ARFLAGS) $(PICLIB) $% ; \
166	     $(RM) $% ; \
167	   fi
168
169# May need to create temporary symlinks to include file directories for
170# CFITSIO, etc. for the following two rules.
171%.i : %.c
172	-@ echo ''
173	-@ $(RM) $@
174	   $(CPP) $(CPPFLAGS) $(CFLAGS) $< > $@
175
176# Print out include file dependencies.
177%.d : %.c
178	-@ echo ''
179	-@ $(CPP) $(CPPFLAGS) $(CFLAGS) $< | \
180	   sed -n -e 's|^# 1 "\([^/].*\.h\)".*|\1|p' | \
181	   sed -e 's|.*/||' | \
182	   sort -u
183
184%.fits : test/%.keyrec ../utils/tofits
185	   ../utils/tofits < $< > $@
186
187# Use 'make VALGRIND=T run_%' to have VALGRIND defined (from flavours).
188# Use 'make VALGRIND=T check < /dev/null |& tee check_valgrind.log' to run
189# valgrind on the lot.
190run_% : %
191	-@ echo ''
192	-@ $(TIMER)
193	 @ if [ '$(MODE)' = interactive -o '$(VALGRIND)' ] ; then \
194	     printf 'Press <CR> to run $<: ' ; \
195	     read DUMMY ; \
196	   fi ; \
197	   if [ '$(VALGRIND)' ] ; then \
198	     if [ '$<' = tunits ] ; then \
199	       $(VALGRIND) ./$< < test/units_test ; \
200	     else \
201	       $(VALGRIND) ./$< ; \
202	     fi ; \
203	   else \
204	     if [ '$(filter $<, $(TEST_N) $(TEST_C))' ] ; then \
205	       if [ '$<' = tunits ] ; then \
206	         if [ '$(MODE)' = interactive ] ; then \
207	           ./$< < test/units_test 2>&1 | tee $<.out ; \
208	         else \
209	           ./$< < test/units_test > $<.out 2>&1 ; \
210	         fi ; \
211	       else \
212	         if [ '$(MODE)' = interactive ] ; then \
213	           ./$< < /dev/null 2>&1 | tee $<.out ; \
214	         else \
215	           ./$< < /dev/null > $<.out 2>&1 ; \
216	         fi ; \
217	       fi ; \
218	       if grep 'FAIL:' $<.out > /dev/null ; then \
219	         if [ '$(MODE)' != interactive ] ; then \
220	           head -2 $<.out ; \
221	           grep 'FAIL:' $<.out ; \
222	         fi ; \
223	         echo 'FAIL: C/$<' >> test_results ; \
224	       elif grep 'PASS:' $<.out > /dev/null ; then \
225	         if [ '$(MODE)' != interactive ] ; then \
226	           head -2 $<.out ; \
227	           grep 'PASS:' $<.out ; \
228	         fi ; \
229	         echo 'PASS: C/$<' >> test_results ; \
230	       elif [ -f 'test/$<.out' ] ; then \
231	         trap 'rm -f run_$<.tmp' 0 1 2 3 15 ; \
232	         sed -e 's/$(ADDRE)/0x<address>/g' $<.out > \
233	           run_$<.tmp ; \
234	         mv -f run_$<.tmp $<.out ; \
235	         if cmp -s $<.out test/$<.out ; then \
236	           if [ '$(MODE)' != interactive ] ; then \
237	             head -2 $<.out ; \
238	           fi ; \
239	           echo 'PASS: Output agrees with C/test/$<.out' ; \
240	           echo 'PASS: C/$<' >> test_results ; \
241	         else \
242	           if [ '$(MODE)' != interactive ] ; then \
243	             cat $<.out ; \
244	           fi ; \
245	           echo '' ; \
246	           echo 'FAIL: Output disagrees with C/test/$<.out' ; \
247	           echo 'FAIL: C/$<' >> test_results ; \
248	         fi ; \
249	       elif [ '$(MODE)' != interactive ] ; then \
250	         cat $<.out ; \
251	         echo 'FAIL: C/$<' >> test_results ; \
252	       fi ; \
253	     elif [ '$(MODE)' = interactive ] ; then \
254	       ./$< ; \
255	     else \
256	       if [ '$<' = tcel2 ] ; then \
257	         echo N | ./$< ; \
258	       else \
259	         ./$< < /dev/null 2>&1 ; \
260	       fi ; \
261	     fi ; \
262	   fi
263	-@ echo ''
264
265# Static and static pattern rules
266#--------------------------------
267
268.PHONY : build check clean cleaner cleanest distclean install lib realclean \
269         run_% test tests uninstall
270
271build : lib
272
273lib : $(FLEXMODS)
274	-@ echo ''
275	-@ echo 'Building WCSLIB C library...'
276	 @ $(MAKE) --no-print-directory $(WCSLIB)
277
278$(WCSLIB) : $(LIBLOCK) $(MODULES:%=$(WCSLIB)(%))
279	-@ echo ''
280	 @ set *.o ; \
281	     if [ "$$1" != "*.o" ] ; then \
282	       echo $(AR) r$(ARFLAGS) $@ *.o ; \
283	       $(AR) r$(ARFLAGS) $@ *.o ; \
284	       echo $(RANLIB) $@ ; \
285	       $(RANLIB) $@ ; \
286	       $(RM) *.o ; \
287	     fi
288	-@ $(RM) $<
289	 @ if [ "$(SHRLIB)" != "" ] ; then \
290	     $(MAKE) --no-print-directory $(SHRLIB) ; \
291	   fi
292
293$(SHRLIB) : $(PICLIB)
294	-@ echo ''
295	-@ $(RM) -r tmp
296	   mkdir tmp && \
297	     cd tmp && \
298	     trap 'cd .. ; $(RM) -r tmp' 0 1 2 3 15 ; \
299	     $(AR) x ../$(PICLIB) && \
300	     $(SHRLD) -o $@ *.o $(LDFLAGS) $(LIBS) && \
301	     mv $@ ..
302
303$(PICLIB) : $(LIBLOCK) $(MODULES:%=$(PICLIB)(%))
304	-@ echo ''
305	 @ set *.o ; \
306	     if [ "$$1" != "*.o" ] ; then \
307	       echo $(AR) r$(ARFLAGS) $@ *.o ; \
308	       $(AR) r$(ARFLAGS) $@ *.o ; \
309	       $(RM) *.o ; \
310	     fi
311	-@ $(RM) $<
312
313$(LIBLOCK) : FORCE
314	 @ $(RM) *.o
315	 @ touch $@
316
317install : build
318	-  if [ ! -d "$(LIBDIR)" ] ; then \
319	     $(INSTALL) -d -m 775 $(LIBDIR) ; \
320	   fi
321	   if [ "$(ARFLAGS)" = U ] ; then \
322	     $(RM) -r tmp ; \
323	     mkdir tmp && \
324	       cd tmp && \
325	       trap 'cd .. ; $(RM) -r tmp' 0 1 2 3 15 ; \
326	       $(AR) x ../$(WCSLIB) && \
327	       $(AR) rD $(WCSLIB) *.o && \
328	       $(INSTALL) -m 644 $(WCSLIB) $(LIBDIR) ; \
329	       cd .. ; \
330	       $(RM) -r tmp ; \
331	   else \
332	     $(INSTALL) -m 644 $(WCSLIB) $(LIBDIR) ; \
333	   fi
334	   $(RANLIB) $(LIBDIR)/$(WCSLIB)
335	-  if [ -h "$(LIBDIR)/libwcs.a" ] ; then \
336	     $(RM) $(LIBDIR)/libwcs.a ; \
337	   fi
338	   $(LN_S) $(WCSLIB) $(LIBDIR)/libwcs.a
339	   if [ "$(SHRLIB)" != "" ] ; then \
340	     $(INSTALL) -m 755 $(SHRLIB) $(LIBDIR) ; \
341	     if [ -h "$(LIBDIR)/$(SONAME)" ] ; then \
342	       $(RM) $(LIBDIR)/$(SONAME) ; \
343	     fi ; \
344	     $(LN_S) $(SHRLIB) $(LIBDIR)/$(SONAME) ; \
345	     if [ "$(SHRLN)" != "" ] ; then \
346	       if [ -h "$(LIBDIR)/$(SHRLN)" ] ; then \
347	         $(RM) $(LIBDIR)/$(SHRLN) ; \
348	       fi ; \
349	       $(LN_S) $(SONAME) $(LIBDIR)/$(SHRLN) ; \
350	     fi ; \
351	   fi
352	-  if [ ! -d "$(INCDIR)" ] ; then \
353	     $(INSTALL) -d -m 775 $(INCDIR) ; \
354	   fi
355	   $(INSTALL) -m 444 *.h $(INCDIR)
356	-  $(RM) $(INCLINK)
357	   $(LN_S) $(notdir $(INCDIR)) $(INCLINK)
358
359uninstall :
360	-  cd $(LIBDIR) && $(RM) $(WCSLIB) $(SHRLN) $(SONAME) $(SHRLIB)
361	-  $(RM) $(INCDIR)
362	-  $(RM) $(INCLINK)
363
364clean :
365	- $(RM) *.o $(LIBLOCK) *.i a.out t*.out core *.dSYM
366	- $(RM) -r $(EXTRA_CLEAN)
367
368cleaner : clean
369	-  $(RM) .gdb_history
370	-  $(RM) $(TEST_N) $(TEST_n) $(TEST_T) $(TEST_X)
371	-  $(RM) $(TEST_P) tdis3 tpih2 twcshdr twcslint twcstab
372	-  $(RM) bth.fits fitshdr.fits pih.fits wcslint.fits wcspcx.fits
373	-  $(RM) wcstab.fits SIP.fits SIPTPV.fits TPV3.fits TPV5.fits
374	-  $(RM) TPV7.fits DSS.fits TNX.fits ZPX.fits
375	-  $(RM) t*_cfitsio test_results
376
377cleanest distclean realclean : cleaner
378	-  $(RM) ../wcsconfig.h ../wcsconfig_tests.h
379	-  $(RM) fitshdr.c wcsbth.c wcspih.c wcsulex.c wcsutrn.c
380	-  $(RM) $(PICLIB) libwcs-*.a libwcs.so.* libwcs.*.dylib
381
382check test : tests $(TESTS:%=run_%)
383
384tests : $(TESTS) $(TEST_X)
385
386# TEST_N and TEST_n programs (no special libraries required).
387$(TEST_N) $(TEST_n) : % : test/%.c $(WCSLIB)
388	-@ echo ''
389	   $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $< $(LDFLAGS) $(WCSLIB) $(LIBS)
390	-@ $(RM) $@.o
391
392# TEST_N programs (optionally using CFITSIO).
393tpih1_cfitsio tbth1_cfitsio tfitshdr_cfitsio : %_cfitsio : test/%.c $(WCSLIB)
394	-@ echo ''
395	   $(CC) -DDO_CFITSIO $(CPPFLAGS) $(CFITSIOINC) $(CFITSIO_CFLAGS) \
396	     -o $@ $< $(LDFLAGS) $(CFITSIOLIB) $(WCSLIB) $(LIBS)
397	-@ $(RM) $@.o
398
399# TEST_C programs (using CFITSIO).
400twcstab : test/twcstab.c $(WCSLIB) $(GETWCSTAB)
401	-@ echo ''
402	   $(CC) $(CPPFLAGS) $(CFITSIOINC) $(CFITSIO_CFLAGS) -o $@ $< \
403	     $(GETWCSTAB) $(LDFLAGS) $(CFITSIOLIB) $(WCSLIB) $(LIBS)
404	-@ $(RM) $@.o $(GETWCSTAB)
405
406twcshdr : test/twcshdr.c $(WCSLIB) $(GETWCSTAB)
407	-@ echo ''
408	   $(CC) $(CPPFLAGS) $(CFITSIOINC) $(CFITSIO_CFLAGS) -o $@ $< \
409	     $(GETWCSTAB) $(LDFLAGS) $(CFITSIOLIB) $(WCSLIB) $(LIBS)
410	-@ $(RM) $@.o $(GETWCSTAB)
411
412tdis3 : test/tdis3
413	-@ echo ''
414	   cp $< .
415	-@ chmod a+x $@
416
417twcslint : test/twcslint
418	-@ echo ''
419	   cp $< .
420	-@ chmod a+x $@
421
422# TEST_P programs (using PGPLOT).
423$(TEST_P) : % : test/%.c $(WCSLIB)
424	-@ echo ''
425	   $(CC) $(CPPFLAGS) $(PGPLOTINC) $(CFLAGS) -c -o $@.o $<
426	   $(LD) -o $@ $@.o $(LDFLAGS) $(PGPLOTLIB) $(WCSLIB) $(FLIBS) $(LIBS)
427	-@ $(RM) $@.o
428
429# TEST_B programs (PGSBOX and PGPLOT).
430tpih2 : test/tpih2.c $(PGSBOXLIB) $(WCSLIB)
431	-@ echo ''
432	   $(CC) $(CPPFLAGS) -I../pgsbox $(PGPLOTINC) $(CFLAGS) -c -o $@.o $<
433	   $(LD) -o $@ $@.o $(LDFLAGS) $(PGSBOXLIB) $(PGPLOTLIB) $(WCSLIB) \
434	     $(FLIBS) $(LIBS)
435	-@ $(RM) $@.o
436
437tpih2_cfitsio : test/tpih2.c $(PGSBOXLIB) $(WCSLIB)
438	-@ echo ''
439	   $(CC) -DDO_CFITSIO $(CPPFLAGS) -I../pgsbox $(PGPLOTINC) \
440	     $(CFITSIOINC) $(CFITSIO_CFLAGS) -c -o $@.o $<
441	   $(LD) -o $@ $@.o $(LDFLAGS) $(PGSBOXLIB) $(PGPLOTLIB) \
442	     $(CFITSIOLIB) $(WCSLIB) $(FLIBS) $(LIBS)
443	-@ $(RM) $@.o
444
445# TEST_T programs (using POSIX threads).
446tpthreads : test/tpthreads.c $(WCSLIB)
447	-@ echo ''
448	   $(CC) $(CPPFLAGS) $(CFLAGS) -pthread -c -o $@.o $<
449	   $(LD) -o $@ $@.o $(LDFLAGS) -pthread $(WCSLIB) -lpthread $(LIBS)
450	-@ $(RM) $@.o
451
452getwcstab.o : getwcstab.c getwcstab.h
453	-@ echo ''
454	   $(CC) $(CPPFLAGS) $(CFITSIO_CFLAGS) $(CFITSIOINC) -c $<
455
456$(PGSBOXLIB) :
457	-@ echo ''
458	   $(MAKE) -C ../pgsbox $(notdir $@)
459
460../utils/tofits : ../utils/tofits.c
461	   $(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ $<
462
463GNUmakefile : ../makedefs ;
464
465../makedefs ../wcsconfig.h ../wcsconfig_tests.h : makedefs.in wcsconfig.h.in \
466    wcsconfig_tests.h.in ../config.status
467	-@ $(RM) ../wcsconfig.h ../wcsconfig_tests.h
468	   cd .. && ./config.status
469
470show ::
471	-@ echo '  FLEXMODS    := $(FLEXMODS)'
472	-@ echo '  MODULES     := $(MODULES)'
473	-@ echo '  DO_CFITSIO  := $(DO_CFITSIO)'
474	-@ echo '  DO_PGPLOT   := $(DO_PGPLOT)'
475	-@ echo '  TESTS       := $(TESTS)'
476	-@ echo '  TEST_X      := $(TEST_X)'
477
478# Dependencies (use the %.d pattern rule to list them)
479#-----------------------------------------------------
480
481$(WCSLIB)(cel.o)      : cel.h prj.h sph.h wcsconfig.h wcserr.h wcsmath.h \
482                        wcsprintf.h wcstrig.h
483$(WCSLIB)(dis.o)      : dis.h wcserr.h wcsprintf.h wcsutil.h
484$(WCSLIB)(fitshdr.o)  : fitshdr.h wcsconfig.h wcsutil.h
485$(WCSLIB)(lin.o)      : dis.h lin.h wcserr.h wcsprintf.h
486$(WCSLIB)(log.o)      : log.h
487$(WCSLIB)(prj.o)      : prj.h wcsconfig.h wcserr.h wcsmath.h wcsprintf.h \
488                        wcstrig.h wcsutil.h
489$(WCSLIB)(spc.o)      : spc.h spx.h wcsconfig.h wcserr.h wcsmath.h \
490                        wcsprintf.h wcstrig.h wcsutil.h
491$(WCSLIB)(sph.o)      : sph.h wcsconfig.h wcstrig.h
492$(WCSLIB)(spx.o)      : spx.h wcserr.h wcsmath.h
493$(WCSLIB)(tab.o)      : tab.h wcserr.h wcsmath.h wcsprintf.h wcsutil.h
494$(WCSLIB)(wcs.o)      : cel.h dis.h lin.h log.h prj.h spc.h sph.h spx.h \
495                        tab.h wcs.h wcsconfig.h wcserr.h wcsmath.h \
496                        wcsprintf.h wcstrig.h wcsunits.h wcsutil.h
497$(WCSLIB)(wcsbth.o)   : cel.h lin.h prj.h spc.h spx.h wcs.h wcshdr.h \
498                        wcsmath.h wcsprintf.h wcsutil.h
499$(WCSLIB)(wcserr.o)   : wcserr.h wcsprintf.h
500$(WCSLIB)(wcsfix.o)   : cel.h lin.h prj.h spc.h sph.h spx.h wcs.h wcserr.h \
501                        wcsfix.h wcsmath.h wcsunits.h wcsutil.h
502$(WCSLIB)(wcshdr.o)   : cel.h dis.h lin.h prj.h spc.h spx.h tab.h wcs.h \
503                        wcserr.h wcshdr.h wcsmath.h wcsutil.h
504$(WCSLIB)(wcspih.o)   : cel.h dis.h lin.h prj.h spc.h spx.h wcs.h wcshdr.h \
505                        wcsmath.h wcsprintf.h wcsutil.h
506$(WCSLIB)(wcsprintf.o): wcsprintf.h
507$(WCSLIB)(wcstrig.o)  : wcsconfig.h wcsmath.h wcstrig.h
508$(WCSLIB)(wcsulex.o)  : wcserr.h wcsmath.h wcsunits.h wcsutil.h
509$(WCSLIB)(wcsunits.o) : wcserr.h wcsunits.h
510$(WCSLIB)(wcsutil.o)  : wcsmath.h wcsutil.h
511$(WCSLIB)(wcsutrn.o)  : wcserr.h wcsunits.h
512
513tbth1 tbth1_cfitsio : cel.h lin.h prj.h spc.h spx.h wcs.h wcsconfig.h \
514                      wcsconfig_tests.h wcserr.h wcsfix.h wcshdr.h
515tcel1   : cel.h prj.h
516tcel2   : cel.h prj.h
517tfitshdr tfitshdr_cfitsio : cel.h fitshdr.h lin.h prj.h spc.h spx.h wcs.h \
518                            wcsconfig.h wcsconfig_tests.h wcshdr.h
519tlin    : lin.h
520tdis1   : cel.h dis.h lin.h prj.h spc.h spx.h wcs.h wcserr.h wcshdr.h \
521          wcsprintf.h
522tdis2   : cel.h lin.h prj.h spc.h spx.h wcs.h wcserr.h wcshdr.h wcsprintf.h
523tdisiter: cel.h dis.h lin.h prj.h spc.h spx.h wcs.h wcserr.h wcshdr.h \
524          wcsprintf.h
525tlog    : log.h
526tpih1 tpih1_cfitsio : cel.h lin.h prj.h spc.h spx.h wcs.h wcsconfig.h \
527                      wcsconfig_tests.h wcserr.h wcsfix.h wcshdr.h wcsprintf.h
528tpih2 tpih2_cfitsio : cel.h lin.h prj.h spc.h spx.h wcs.h wcsconfig.h \
529                      wcsconfig_tests.h wcshdr.h
530tprj1   : prj.h wcsconfig.h wcstrig.h
531tprj2   : prj.h
532tspc    : spc.h spx.h wcsconfig.h wcstrig.h
533tspcaips: spc.h spx.h
534tspctrne: spc.h spx.h wcserr.h
535tsph    : sph.h wcsconfig.h wcstrig.h
536tsphdpa : sph.h
537tspx    : spx.h
538ttab1   : tab.h
539ttab2   : tab.h
540ttab3   : prj.h tab.h
541tunits  : wcserr.h wcsunits.h
542twcs    : cel.h dis.h fitshdr.h lin.h log.h prj.h spc.h sph.h spx.h tab.h \
543          wcs.h wcsconfig.h wcsconfig_tests.h wcserr.h wcsfix.h wcshdr.h \
544	  wcslib.h wcsmath.h wcsprintf.h wcstrig.h wcsunits.h wcsutil.h
545twcs_locale : cel.h lin.h prj.h spc.h spx.h wcs.h wcserr.h wcshdr.h \
546              wcsprintf.h
547twcsfix : cel.h lin.h prj.h spc.h spx.h wcs.h wcserr.h wcsfix.h \
548          wcsprintf.h wcsunits.h
549twcshdr : cel.h dis.h fitshdr.h getwcstab.h lin.h log.h prj.h spc.h sph.h \
550          spx.h tab.h wcs.h wcsconfig.h wcserr.h wcsfix.h wcshdr.h wcslib.h \
551          wcsmath.h wcsprintf.h wcstrig.h wcsunits.h wcsutil.h
552twcsmix : cel.h lin.h prj.h spc.h sph.h spx.h wcs.h
553twcssub : cel.h lin.h prj.h spc.h spx.h wcs.h wcserr.h
554twcstab : cel.h dis.h fitshdr.h getwcstab.h lin.h log.h prj.h spc.h sph.h \
555          spx.h tab.h wcs.h wcsconfig.h wcserr.h wcsfix.h wcshdr.h wcslib.h \
556          wcsmath.h wcsprintf.h wcstrig.h wcsunits.h wcsutil.h
557
558run_tdis1 : TPV3.fits TPV5.fits TPV7.fits
559run_tdis2 : SIP.fits
560run_tdis3 : DSS.fits SIPTPV.fits TNX.fits ZPX.fits
561run_tbth1 run_tbth1_cfitsio : bth.fits
562run_tfitshdr run_tfitshdr_cfitsio : fitshdr.fits
563run_tpih1 run_tpih1_cfitsio : pih.fits
564run_tpih2 run_tpih2_cfitsio : pih.fits
565run_twcslint : wcslint.fits
566run_twcs_locale : pih.fits
567