##
## Sonnet - Self-Organizing-Neural-Net simulator
##

## platform specific definitions:

# -------------------------------------------------------------
# for LINUX
#CC = cc
#CFLAGS = -O -Wall -ansi
#CFLAGS = -O -Wall -g -ansi 
#LDFLAGS =
#LDLIBS = -lm
#GRAPHICLIBS = -lX11
#BINDIR = /home/wini/sonnet/bin
#MANDIR = /home/wini/sonnet/man
#INSTALL = /usr/bin/install -c -m 0755
#INSTALLMAN = /usr/bin/install -c -m 0644

# the following is used with GNU implementation of make (gmake)
#STRANGE = %: %.c

# -------------------------------------------------------------
# for Sun's Solaris 2.x and Sun's compiler
CC = cc
CFLAGS = -O -I/usr/openwin/include
LDFLAGS = -L/usr/openwin/lib
LDLIBS = -lm
GRAPHICLIBS = -lX11
BINDIR = /athome/pa2q/sonnet/bin
MANDIR = /athome/pa2q/sonnet/man
INSTALL = /usr/ucb/install -c -m 0755
INSTALLMAN = /usr/ucb/install -c -m 0644

# the following is used with SysV make utility
STRANGE = $$@.c

# -------------------------------------------------------------
# for IBM's AIX 
#CC = cc
#CFLAGS = -O 
#LDFLAGS =
#LDLIBS = -lm
#GRAPHICLIBS = -lX11
#BINDIR = /home/pa/pa2j/sonnet/bin
#MANDIR = /home/pa/pa2j/sonnet/man
#INSTALL = /usr/ucb/install -c -m 0755
#INSTALLMAN = /usr/ucb/install -c -m 0644

# the following is used with SysV make utility
#STRANGE = $$@.c

#
# -------------------------------------------------------------
# available defines for CFLAGS
#   -DUSE_DOUBLE    Use double precision numbers.


###
### I hope, you don't have to change lines below.
###

NONGRAPHICTARGETS = \
	gendata gennet vsom qerror sominfo clusterinfo

GRAPHICTARGETS = xscplot xsom

TARGETS = $(NONGRAPHICTARGETS) $(GRAPHICTARGETS)

SCRIPTS = scripts/getraw scripts/gethead scripts/sonnet.sh scripts/sonnet.csh \
	scripts/gp_plot scripts/gp_qerror scripts/gp_scplot \
	scripts/gp_patch_eps scripts/gp_blob scripts/gp_blob_m scripts/gp_blob_qe \
	scripts/uncomment scripts/normvar scripts/norm_getval scripts/scale \
	scripts/scale_inv scripts/getminmax

ROUTINES = misc.o types.o som_io.o som_net.o

GRAPHICROUTINES = xsom_rout.o 

HEADERS = misc.h types.h som_io.h som_net.h xsom_rout.h

MANPAGES1 = doc/gendata.1 doc/gennet.1 doc/qerror.1 doc/sominfo.1 doc/vsom.1 \
  doc/xsom.1 doc/xscplot.1

MANPAGES5 = doc/sonnet_net.5 doc/sonnet_data.5

MANPAGES_SCRIPTS = scripts/getraw.1 scripts/gethead.1 scripts/sonnet.sh.1 \
  scripts/sonnet.csh.1 \
	scripts/gp_plot.1 scripts/gp_qerror.1 scripts/gp_scplot.1 \
	scripts/gp_patch_eps.1 \
	scripts/gp_blob.1 scripts/gp_blob_m.1 scripts/gp_blob_qe.1 \
	scripts/uncomment.1 scripts/normvar.1 scripts/norm_getval.1 scripts/scale.1 \
	scripts/scale_inv.1 scripts/getminmax.1


##
#

all : $(NONGRAPHICTARGETS) $(GRAPHICTARGETS)

.c.o : ; $(CC) $(CFLAGS) -c $*.c

.c : ; $(CC) $(CFLAGS) $(LDFLAGS) $@.c $(ROUTINES) $(LDLIBS) -o $@

$(ROUTINES) $(GRAPHICROUTINES) : $(HEADERS) Makefile

$(NONGRAPHICTARGETS) : $(STRANGE) $(ROUTINES)
	$(CC) $(CFLAGS) $(LDFLAGS) $@.c $(ROUTINES) $(LDLIBS) -o $@

$(GRAPHICTARGETS):  $(STRANGE) $(ROUTINES) $(GRAPHICROUTINES)
	$(CC) $(CFLAGS) $(LDFLAGS) $@.c $(ROUTINES) $(GRAPHICROUTINES) \
	  $(LDLIBS) $(GRAPHICLIBS) -o $@

xsom: vsom.c

test_io: $(STRANGE) $(ROUTINES)
	$(CC) $(CFLAGS) $(LDFLAGS) $@.c $(ROUTINES) $(LDLIBS) -o $@

clean:
	-rm -f *.o $(TARGETS) $(MANPAGES_SCRIPTS)


##
#

install: install.bin install.scripts install.man

install.bin: $(TARGETS)
	@for i in $(TARGETS); do \
		echo Installing $$i; \
		$(INSTALL) $$i $(BINDIR); \
	done

install.scripts: $(SCRIPTS)
	@for i in $(SCRIPTS); do \
		echo Installing $$i; \
		$(INSTALL) $$i $(BINDIR); \
	done

install.man: install.cman1 install.cman5 install.sman

install.cman1: $(MANPAGES1)
	@for i in $(MANPAGES1); do \
		echo Installing $$i; \
		$(INSTALLMAN) $$i $(MANDIR)/cat1; \
	done
	
install.cman5: $(MANPAGES5)
	@for i in $(MANPAGES5); do \
		echo Installing $$i; \
		$(INSTALLMAN) $$i $(MANDIR)/cat5; \
	done
	
install.sman: $(MANPAGES_SCRIPTS)
	@for i in $(MANPAGES_SCRIPTS); do \
		echo Installing $$i; \
		$(INSTALLMAN) $$i $(MANDIR)/cat1; \
	done
	
$(MANPAGES_SCRIPTS): $(SCRIPTS)
	@echo Creating $@
	@cat `echo $@|sed -e 's/\.1//g'` \
	| awk '/^# ========/{if(s==0){s=1}else{s=2};next} s==1{print}' \
	| sed -e 's/^# //g' | sed -e 's/^#//g' > $@

package: clean
	@echo 'Creating package'
	rm -rf bin/* man/cat1/* man/cat5/* man/man1/* man/man5/*
	rm -rf examples/exa1* examples/exa2*
	@(cd ..; tar -cvf - sonnet | gzip > sonnet.tar.gz)
