###
# Build up the 2MASS Programs
##############################

### Packages
SHELL=/bin/sh
PACKAGE = ppmxl

# Defaut rule (e.g. copy from a public directory)
.DEFAULT:

PREFIX   = ..
VERSION  = 0.9
DISTRIB  = $(PACKAGE)-$(VERSION)

### Programs:
CC      = gcc -Wall
DEBUG	= -O
COPY    = cp -p
STRIP   = strip
RANLIB  = ranlib
AR      = ar ruv
int4    = int
int8    = long
int8l   = 1
SWAP    = 2
DEFS    = -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_FCNTL_H=1 -DHAVE_TERMIO_H=1 -DHAVE_DIRENT_H=1 -DRETSIGTYPE=void -DHAVE_GETHOSTNAME=1 -DHAVE_SOCKET=1 -DHAVE_STRERROR=1 -DHAVE_STDLIB_H=1 -DHAVE_UNISTD_H=1 -DHAVE_GETPAGESIZE=1 -DHAVE_MMAP=1

# Directories & Files:
BINDIR   = $(PREFIX)/bin
DATDIR   = $(PREFIX)/dat
TXTDIR   = $(PREFIX)/txt
ORIDIR   = $(PREFIX)/ori
SHSDIR   = $(PREFIX)/bin
MANDIR   = $(PREFIX)/man
FILES    = s90a s00d n00a n89d

ROOTdir  =

# Options:
DEBUG = -O
C_OPT = -Dint8="$(int8)" -Dint8l="$(int8l)" -Dint4="$(int4)" -DSWAP=$(SWAP) \
        $(DEFS)
SYS =
CFLAGS = $(C_OPT) $(DEBUG) $(SYS) -I.
COMPILE= $(CC) $(CFLAGS) -c
LIBSYS = -lm

# Dependencies:
default: ppmxl

ppmxl: ppmxl.c ppmxlsub.c ppmxl.h catutil.c q3c.h Makefile ppmxl.h vizSet.awk
	gawk -f vizSet.awk ppmxl.h | grep -v '^%' | gawk '\
	 BEGIN{print "static char bin_struct[] = \"\\" }\
	 END { print "\";\n"}\
	 { gsub(/[\\\\"]/, "\\\\&"); print $$0 "\\n\\" } # add backslash \
	 ' > bin_struct.h
	if test -z "$(ROOTdir)"; then d=`pwd`; d=`dirname $$d`/data; fi; \
	$(CC) $(CFLAGS) -DROOTdir='"'$$d'"' ppmxl.c ppmxlsub.c catutil.c q3c.c \
	-o $@ -lm
	$(STRIP) $@

ppmxlsub: ppmxlsub.c  ppmxl.h catutil.c q3c.c
	$(CC) $(CFLAGS) -DTEST ppmxlsub.c catutil.c q3c.c -o $@ -lm
	$(STRIP) $@

install: ppmxl
	-mkdir $(BINDIR)
	-rm -f $(BINDIR)/ppmxl*
	cp -p ppmxl test.* $(BINDIR)
	-for p in `ls $(DATDIR) | fgrep data- | cut -d- -f2`; do \
	   test -d $(DATDIR)-$$p && ( cd $(BINDIR); \
	   ln -s ppmxl ppmxl-$$p);\
	done
	echo "....Making Tests...."; $(BINDIR)/test.sh

ppmxlmake: ppmxlmake.c ppmxl_def.h catutil.c catutil.h
	$(CC) $(CFLAGS) ppmxlmake.c catutil.c q3c.c -o ppmxlmake -lm

data: ppmxlmake
	test -d $(DATDIR) || mkdir $(DATDIR)
	-rm -f $(DATDIR)/[ns]???.bin
	@echo "====Create all binary files from $(ORIDIR)/ppmxl into $(DATDIR)"
	fcat $(ORIDIR)/ppmxl | ppmxlmake -r $(DATDIR) 2> $@.log2 | tee $@.log
	rm -f $(DATDIR)/*.binx
	ls -l $(DATDIR)
	date > $@.done

text: txt
txt: ppmxlsub $(DATDIR)
	test -d $(TXTDIR) || mkdir $(TXTDIR)
	-rm -f $(TXTDIR)/*
	z=0; while [ $$z -lt 720 ]; do echo $$z | ppmxlsub -z | acut -d\; -f1 \
	   > $(TXTDIR)/tmp.txt; \
	   fn=`head -1 $(TXTDIR)/tmp.txt \
	    | sed 's/^.*\([ns][0-9][0-9][abcd]\)[.]bin.*$$/\1/'`; \
	   grep -v '^#[.]' $(TXTDIR)/tmp.txt > $(TXTDIR)/$$fn.dat; \
	   gzip -v9 $(TXTDIR)/$$fn.dat;\
	   z=`expr $$z + 1`; done

verify: ppmxlsub.c
	$(CC) $(CFLAGS) -DTEST -DVERIFY ppmxlsub.c catutil.c q3c.c -o $@ -lm
	for f in $(FILES); do \
	    echo "====Verify $(DATDIR)/$$f.bin"; \
	    ppmxlsub $(DATDIR)/$$f.bin | gawk -v f=$$f.dat '/^#/{next}\
	     { r1=substr($$0,1,90) substr($$0,95); getline < f; \
	       r2=substr($$0,1,90) substr($$0,95); if(r1==r2) next; \
	       for (i=1; i<=length(r1); i++) { \
		   c1=substr(r1,i,1); c2=substr(r2,i,1); \
		   if (c1 == c2) continue; \
		   if ((c1 == " ") && (c2 == "0")) continue; \
		   if ((c1 == "0") && (c2 == " ")) continue; \
	           print "\n" r1 "\n" r2; break; \
	       } \
	     }' ; \
	done
	rm ppmxlsub

files.lis:
	cd $(DATDIR); \
	  ls n*[abcd].bin | sort -r  > $@; \
	  ls s*[abcd].bin | sort    >> $@; \
	  ls n*r.bin      | sort -r >> $@; \
	  ls s*r.bin      | sort    >> $@; 
	$(MAKE) summary

summary:
	(for f in $(DATDIR)/*.bin; do head -1 $$f; done) | gawk -F= '\
	    /r /{r += $$NF}{ n += $$NF}\
	    END{print "====Non-rejected:",n-r,"-- total:", n}'

test:
	$(BINDIR)/test.sh

q3c_test: q3c_test.c q3c.h q3c.c
	$(CC) $(CFLAGS) q3c_test.c q3c.c -o $@ -lm

clean:
	rm -f $(BIN) ppmxlsub ppmxl a.out *.o
	rm -rf config.status autom4*

export:
	tar cvf /tmp/ppmxl.tar test.* Makefile.in configure \
	      `ls *.h|fgrep -v _v` ppmxl.c ppmxlsub.c catutil.c q3c.c
	gzip -v9 /tmp/ppmxl.tar
	ls -l /tmp/ppmxl.tar.gz
