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

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

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

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

### Programs:
CC      = gcc 
DEBUG	= -O
COPY    = cp -p
STRIP   = strip
RANLIB  = ranlib
AR      = ar ruv
int4    = int
int8    = long
SWAP    = 2

# Directories & Files:
BINDIR   = $(PREFIX)/bin
DATDIR   = $(PREFIX)/data
SHSDIR   = $(PREFIX)/bin
MANDIR   = $(PREFIX)/man
FILES    = \
    s0000 s0730 s1500 s2230 s3000 s3730 s4500 s5230 s6000 s6730 s7500 s8230 \
    n0000 n0730 n1500 n2230 n3000 n3730 n4500 n5230 n6000 n6730 n7500 n8230 

ROOTdir  =

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

# Dependencies:
default: ppmx

ppmx: ppmx.c ppmxsub.c ppmx.h catutil.c Makefile
	gawk -f vizSet.awk ppmx.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'"' ppmx.c ppmxsub.c catutil.c \
	-o $@ -lm
	$(STRIP) $@

ppmxsub: ppmxsub.c  ppmx.h catutil.c
	$(CC) $(CFLAGS) -DTEST ppmxsub.c catutil.c -o $@ -lm
	$(STRIP) $@

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

ppmxmake: ppmxmake.c ppmx_def.h ppmxsub.c catutil.c catutil.h
	$(CC) $(CFLAGS) ppmxmake.c catutil.c ppmxsub.c -o ppmxmake -lm

data: ppmxmake.c ppmx_def.h ppmxsub.c
	$(CC) $(CFLAGS) ppmxmake.c catutil.c ppmxsub.c -o ppmxmake -lm
	test -d $(DATDIR) || mkdir $(DATDIR)
	-rm -f /tmp/[ns]????.bin
	@echo "====Create all binary files from catalog I/312"
	for f in $(FILES); do \
	    rm -f $(DATDIR)/$$f.bin; \
	    echo ""; echo "====Dealing with: $$f"; \
	    catcat I/312/$$f.dat > $$f.dat; \
	    ppmxmake -v  -r $(DATDIR) $$f.dat ; \
	done
	ls -l $(DATDIR)
	date > $@.done

verify: ppmxsub.c
	$(CC) $(CFLAGS) -DTEST -DVERIFY ppmxsub.c catutil.c -o $@ -lm
	for f in $(FILES); do \
	    echo "====Verify $(DATDIR)/$$f.bin"; \
	    ppmxsub $(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 ppmxsub

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

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

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