# File:`Makefile'
#
# DESCRIPTION
# 
# 
# Peter Pilgrim
# Tue Jun 01 01:53:22 BST 1999
# 
# RCS HEADER ``Makefile''
# 
# $Author: pilgpe $
# $Date: 1998/01/16 18:41:08 $
# $Source: /home/pilgpe/Projects/SDOSR/RCS/Makefile,v $
# $Revision: 1.3 $    $State: Exp $    $Locker:  $
#
# --------------------------------------------------------------------------------
# History:
#	$Log: Makefile,v $
#
#


# ********************************************************************************
# Where do want to install the stuff!
# ********************************************************************************

#PREFIX 		= /usr/local/UNKNOWN

#PREFIX 		= $(HOME)
PREFIX 		= /usr/local/gnu
EXEC_PREFIX	= $(PREFIX)/bin

# What are this system's bootstrap flags for compilation ...
# This is `SunOS' make specific, not portable
# BOOTSTRAPFLAGS:sh= case `uname -r` in \
# 		  4*)	echo "-Dsparc -Dsun -D__SUNOS__" ;; \
# 		  5*)	echo "-Dsparc -Dsun -D__SOLARIS__" ;; \
# 		  *)	echo "__UNKNOWN__" ;;\
# 	  esac
### BOOTSTRAPFLAGS	= -Dsparc -Dsun -D__SOLARIS__

# Rest of the hierarchy
# The specify the binary directories etc.
BINDIR 		= $(EXEC_PREFIX)
LIBDIR 		= $(PREFIX)/lib
MANDIR 		= $(PREFIX)/man
DOCDIR 		= $(PREFIX)/doc

# Specify where Java classes or zipped archive should be installed.
CLASSES_DIR	= $(LIBDIR)/classes

# Specify where audio file  should be installed.
APPRES_DIR	= $(LIBDIR)/Humanoid

# Specify where to install property files
PROPERTIES_DIR	= $(LIBDIR)/Humanoid

# Specify the source directory.
SRCDIR		= `pwd`
# Specify the root directory for the Java Compiler to output classes.
# This is important of the `JCLASSES' make variable definitions, namely 
# the varibales JCLSS1, JCLSS2, etc, please see below:
SOURCE_CLASSES_DIR = ${SRCDIR}


#
# Makew Java interpreter run-time stub from class file.
#
MAKE_JRT_STUB		= make-jrt-stub
MAKE_JRT_STUB_FLAGS	= --verbose

#
# Make HTML Applet from Java Class file
#
MAKE_APPLET		= make-applet
MAKE_APPLET_FLAGS	= --verbose

#
# Java Compiler
#
JAVAC		= javac
JAVAC_CLASSPATH	= 
JAVAC_OPTIONS	= -deprecation -g
JAVAC_FLAGS	= $(JAVAC_CLASSPATH) $(JAVAC_OPTIONS)

# Rule to build java class

#
# Compiler to use
#
# CC		= cc
# CC_LINKER	= cc
CC		= gcc
CC_LINKER	= gcc

# Specify any include paths for the C compiler
INCLUDES	= -I.
SYS_INCLUDES	= -I$(SUMMITROOT)/include -I$(SYBASE)/include
# Specify any libraries paths for the C compiler/Linker
SYS_LIBRARIES	= -lnsl -ldl -lsunmath -lsocket -lrwtool -lsybdb -lm -lC

# CFLAGS		= -g -ansi
CDEBUGFLAGS	= 
DEFINES		= 
COPTIONS	= 
CFLAGS		= $(COPTIONS) $(CDEBUGFLAGS) $(DEFINES) $(INCLUDES) $(SYS_INCLUDES)

CPPFLAGS	= $(BOOTSTRAPFLAGS)

#
# System Specific Dependent Items
#
RM		= /bin/rm -f
MAKE		= make
MKDIR		= mkdir
MKDIRHIER	= mkdirhier
RMDIR		= rmdir
LN		= ln -s
CHMOD		= chmod
CP		= cp
MV		= mv

BSDINSTALL	= 
INSTALL		= bsdinstall
INSTALLFLAGS	= -c
INSTBINFLAGS	= -m 755
INSTDATFLAGS	= -m 444



# What is the name of the new file being packed
# WARNING: A percent make macro is used protect SCCS from corrupted
# date-stamped tar filename. *PP*
PERCENT		= %
PACKAGE_VERSION	= `cat appversion`

# PACK_TAR_FILE	= humanoid-$(PACKAGE_VERSION).tar
PACK_TAR_FILE	= humanoid-$(PACKAGE_VERSION)-`date "+$(PERCENT)Y$(PERCENT)m$(PERCENT)d"`.src.tar
RELEASE_TAR_FILE= humanoid-$(PACKAGE_VERSION).tar

TAR		= tar
MAKEJAR		= make-jar
TARBACKUP	= tarbackup
TARBACKUP_FLAGS	= --verbose --normal --gzip

THISMAKEFILE	= Makefile

#
# Setup sed commands and macro to auto-magically configure the stub
# scripts on sunos/solaris systems.
#
THISUSER=`logname`
THISHOST=`hostname`
THISDATE=`date`

SED		= sed
SED_ARGUMENTS = -e "s!+HOSTNAME+!$(THISHOST)!g" -e "s!+LOGNAME+!$(THISUSER)!g" \
		-e "s!+DATE+!$(THISDATE)!g" \

# ********************************************************************************
# Specify What To Build
# ********************************************************************************

# Programs to install
PROGRAMS= Humanoid  GuiTestSound

# Targets to build
TARGETS	 =  Humanoid Landscape  TestSound  GuiTestSound

# Java Classes
JCLASSES = $(JCLSS1) $(JCLSS2) $(JCLSS3) $(JCLSS4) $(JCLSS5)  
# Java SOURCE FILE
JSOURCES = $(JSRCS1) $(JSRCS2) $(JSRCS3) $(JSRCS4) $(JCRCS5)  


# **** Java Program 1 ****
JCLSS1	= xenon/humanoid/Landscape.class

JSRCS1	= xenon/humanoid/Landscape.java


# **** Java Program 2 ****
JCLSS2	= \
	xenon/soundkit/TestSound.class \
	xenon/soundkit/PPMCAudioPlayer.class \
	xenon/soundkit/SoundEngine.class \
	xenon/soundkit/Wave.class \
	xenon/soundkit/WhiteNoiseWave.class \
	xenon/soundkit/StaticWave.class \
	xenon/soundkit/AudioClipWave.class \
	xenon/soundkit/Envelope.class \
	xenon/soundkit/SoundFilterDataBuffer.class \
	xenon/soundkit/SoundFilter.class \
	xenon/soundkit/ReverseClipFilter.class \
	xenon/soundkit/DelaySoundFilter.class 


JSRCS2	= \
	xenon/soundkit/TestSound.java \
	xenon/soundkit/PPMCAudioPlayer.java \
	xenon/soundkit/SoundEngine.java \
	xenon/soundkit/Wave.java \
	xenon/soundkit/WhiteNoiseWave.java \
	xenon/soundkit/StaticWave.java \
	xenon/soundkit/Envelope.java \
	xenon/soundkit/SoundFilterDataBuffer.java \
	xenon/soundkit/SoundFilter.java \
	xenon/soundkit/DelaySoundFilter.java 


# **** Java Program 3 ****
JCLSS3	= \
	xenon/soundkit/gui/GuiTestSound.class \
	xenon/soundkit/gui/SliderPane.class \
	xenon/soundkit/gui/SimpleSliderPane.class \
	xenon/soundkit/gui/VerticalLayout.class \
	xenon/soundkit/gui/WholeNumberField.class \
	xenon/soundkit/gui/WaveformListCellRenderer.class \
	$(JCLSS2)

JSRCS3	= \
	xenon/soundkit/gui/GuiTestSound.java \
	xenon/soundkit/gui/SliderPane.java \
	xenon/soundkit/gui/SimpleSliderPane.java \
	xenon/soundkit/gui/VerticalLayout.java \
	xenon/soundkit/gui/WholeNumberField.java \
	xenon/soundkit/gui/WaveformListCellRenderer.java \
	$(JSRS2)



# **** Java Program 4 ****
JCLSS4	= \
	xenon/humanoid/Humanoid.class \
	xenon/humanoid/HumanoidApplet.class \
	xenon/humanoid/HumanoidGameEngine.class \
	xenon/humanoid/ApplicationVersion.class \
	xenon/humanoid/Starship.class \
	xenon/humanoid/LaserBlast.class \
	xenon/humanoid/Planetscape.class \
	xenon/humanoid/Lander.class \
	xenon/humanoid/Bomblet.class \
	xenon/humanoid/Implosion.class \
	xenon/humanoid/Explosion.class \
	xenon/humanoid/OvalExplosion.class \
	xenon/humanoid/PlanetExplosion.class \
	xenon/humanoid/Human.class \
	xenon/humanoid/BonusFlyer.class \
	xenon/humanoid/Baiter.class \
	xenon/humanoid/Bomber.class \
	xenon/humanoid/Pod.class \
	xenon/humanoid/Swarmer.class \
	xenon/humanoid/CollisionHandler.class \
	xenon/humanoid/GameUtilities.class \
	xenon/humanoid/BonusLevelTuple.class \
	xenon/gamekit/GameEngine.class \
	xenon/gamekit/WorldObject.class \
	xenon/gamekit/FriendObject.class \
	xenon/gamekit/EnemyObject.class \
	xenon/gamekit/GraphicsUtils.class \
	xenon/gamekit/ImageRenderer.class \
	xenon/gamekit/DoubleBufferedContainer.class \
	xenon/gamekit/ObjectCounter.class \
	xenon/gamekit/CollisionDetector.class \
	xenon/gamekit/CollisionMapDispatcher.class \
	xenon/gamekit/CollisionAdapter.class \
	xenon/gamekit/CollisionListener.class \
	xenon/gamekit/BulletinLayout.class \
	xenon/gamekit/ScoreTuple.class \
	xenon/gamekit/HighScore.class \
	xenon/gamekit/ScoreEntry.class \
	xenon/gamekit/UserKeyTuple.class \
	xenon/gamekit/AbstractUserKeyControl.class \
	xenon/gamekit/DefaultUserKeyControl.class \
	xenon/gamekit/UserKeyControlDialog.class \
	xenon/gamekit/ProgressBar.class \
	xenon/swing/RowColumnLayout.class \
	xenon/swing/RowColumnConstraints.class \
	xenon/swing/ImpossibleLayoutException.class \
	$(JCLSS3)


JSRCS4	= \
	xenon/humanoid/Humanoid.java \
	xenon/humanoid/HumanoidApplet.java \
	xenon/humanoid/HumanoidGameEngine.java \
	xenon/humanoid/ApplicationVersion.java \
	xenon/humanoid/Starship.java \
	xenon/humanoid/LaserBlast.java \
	xenon/humanoid/Planetscape.java \
	xenon/humanoid/Lander.java \
	xenon/humanoid/Bomblet.java \
	xenon/humanoid/Implosion.java \
	xenon/humanoid/Explosion.java \
	xenon/humanoid/OvalExplosion.java \
	xenon/humanoid/PlanetExplosion.java \
	xenon/humanoid/Human.java \
	xenon/humanoid/BonusFlyer.java \
	xenon/humanoid/Baiter.java \
	xenon/humanoid/Bomber.java \
	xenon/humanoid/Pod.java \
	xenon/humanoid/Swarmer.java \
	xenon/humanoid/CollisionHandler.java \
	xenon/humanoid/GameUtilities.java \
	xenon/gamekit/GameEngine.java \
	xenon/gamekit/WorldObject.java \
	xenon/gamekit/FriendObject.java \
	xenon/gamekit/EnemyObject.java \
	xenon/gamekit/GraphicsUtils.java \
	xenon/gamekit/ImageRenderer.java \
	xenon/gamekit/DoubleBufferedContainer.java \
	xenon/gamekit/ObjectCounter.java \
	xenon/gamekit/CollisionDetector.java \
	xenon/gamekit/CollisionMapDispatcher.java \
	xenon/gamekit/CollisionAdapter.java \
	xenon/gamekit/CollisionListener.java \
	xenon/gamekit/BulletinLayout.java \
	xenon/gamekit/ScoreTuple.java \
	xenon/gamekit/HighScore.java \
	xenon/gamekit/ScoreEntry.java \
	$(JSCRS3)

# For Netscape 4.51 we must have only ONE single JAR!
JARFILE1=humanoid.jar

#
# Shell scripts
#
SHELL_SCRIPTS	= 

SHELL_SOURCES	= 

# Add new suffixes
.SUFFIXES: .java .class .sh .html

#
# Rule to compile `java' files
#
.java.class:
	$(JAVAC) $(JAVAC_FLAGS) $<

#
# Rule to compile `class' files in `html' (embedded applet) files
#
# .class.html:
#	$(MAKE_APPLET) $(MAKE_APPLET_FLAGS)  $<

#
# Checking out from VCS
#
.SCCS_GET:
	co -s $@

#
# Default Rules
#

# Rule to make an executable shell script
.sh:
	$(RM) $@
	$(CP) $@.sh $@
	$(CHMOD) 755 $@


# Rule to compile `C' source files
.c.o:
	$(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $<  


# ********************************************************************************
# And how to build it
# ********************************************************************************

all:: first  $(TARGETS) 

all-jars: all $(JARFILE1)

first:: make-applet  make-jrt-stub  clean-java-class  version-counter


# --------------------------------------------------------------------------------
# Build Programs 
# --------------------------------------------------------------------------------

# **** Program #1 ****
Landscape:: $(JCLSS1)

Landscape:: xenon/humanoid/Landscape.class
	$(MAKE_JRT_STUB) $(MAKE_JRT_STUB_FLAGS) xenon/humanoid/Landscape.class 

# **** Program #2 ****
TestSound:: $(JCLSS2)

TestSound:: xenon/soundkit/TestSound.class
	   $(MAKE_JRT_STUB) $(MAKE_JRT_STUB_FLAGS) xenon/soundkit/TestSound.class 

# **** Program #3 ****
GuiTestSound:: $(JCLSS3)

GuiTestSound:: xenon/soundkit/gui/GuiTestSound.class
	   $(MAKE_JRT_STUB) $(MAKE_JRT_STUB_FLAGS) --force --srcdir ${SRCDIR} --jarfile ${PROPERTIES_DIR}:${CLASSES_DIR}/${JARFILE1} xenon/soundkit/gui/GuiTestSound.class 

# **** Program #4 ****
Humanoid:: $(JCLSS4) 
	version-counter --package xenon.humanoid

Humanoid:: xenon/humanoid/Humanoid.class
	$(MAKE_JRT_STUB) $(MAKE_JRT_STUB_FLAGS) --force --srcdir ${SRCDIR} --jarfile ${PROPERTIES_DIR}:${CLASSES_DIR}/${JARFILE1} xenon/humanoid/Humanoid.class 


# --------------------------------------------------------------------------------
# Tools
# --------------------------------------------------------------------------------

edit: DOWORK1 DOWORK2
	@echo "Make (GNU) Emacs Editor scripts complete ..."


# --------------------------------------------------------------------------------
# Install the programs, properties, and other resources
# --------------------------------------------------------------------------------
install:: $(JARFILE1)
	@if [ ! -d $(CLASSES_DIR) ]; then \
		$(MKDIRHIER) $(CLASSES_DIR); fi
	$(INSTALL) $(INSTDATFLAGS) $(JARFILE1) $(CLASSES_DIR)/$(JARFILE1)

uninstall::
	@if [ -d $(CLASSES_DIR) ]; then \
		(set -x; $(RM) $(CLASSES_DIR)/$(JARFILE1) ); fi


install:: $(PROGRAMS)
	@echo "Installing programs ..."
	@if [ ! -d $(BINDIR) ]; then \
		$(MKDIRHIER) $(BINDIR); fi
	@for f in $(PROGRAMS); do \
		(set -x; $(INSTALL) $(INSTBINFLAGS) $$f $(BINDIR)/$$f ) \
	done

uninstall::
	@echo "Uninstalling programs ..."
	@if [ -d $(BINDIR) ]; then \
		for f in $(PROGRAMS); do \
			(set -x; $(RM) $(BINDIR)/$$f ) \
		done; fi	

# --------------------------------------------------------------------------------
# Java class cleanup
# --------------------------------------------------------------------------------
clean::
	$(RM) $(TARGETS) $(JCLASSES) *.jar *.EXCLUDE *.TAR-EXCLUDE freeinst.log
	$(RM) -r jarbuild jarmerge
	sh clean-java-class.sh --verbose --force $(JCLASSES)
	@echo "Removing any remaining Java class files."
	find . -name "*.class" -type f -exec rm -f {} \;

# --------------------------------------------------------------------------------
# General Cleanup
# --------------------------------------------------------------------------------
distclean:: uninstall  reallyclean
	@ echo "Distribution cleaned up."

reallyclean:: purgeclean
	$(RM) *.bak *~ *.save a.DEPEND* *.dep *.olde mondieu* *.class ,* \#* 
	$(RM) core *.temp *.BAK *.log *.lst
	find . -name "*.class" -exec ${RM} {} \;

purgeclean:: clean
	$(RM) core rcs*.awk input*.txt output*.txt rlog1.* 
	$(RM) acnftest* ppcftest* *.tmp *.copy make.log dump.log

# --------------------------------------------------------------------------------
# General Stuff
# --------------------------------------------------------------------------------

# ********************************************************************************
# Miscellany
# ********************************************************************************

THISMAKEFILE=Makefile

help:: help-targets
	@echo "==================================================================="
	@echo "Help for $(THISMAKEFILE) complete for today"
	@echo "==================================================================="
	@echo 

# Generate list of make targets for this makefile.

help-targets::
	@echo "List of buildable targets in the file:\`$(THISMAKEFILE)':-"
	@echo "============================================================"
	@egrep '^[A-Za-z0-9][-A-Za-z0-9_.+$$]+[ ]*:([^s]|$$)' $(THISMAKEFILE) | awk -F: '{ printf "\t%s\n", $$1 }' | sort | uniq
	@echo 


# Packager for archiving the distributution

# Generate Java Archive #1
$(JARFILE1): $(MAKEJAR) $(JCLSS4) $(JCLSS3)
	@echo "Generating jar file ($@) NB:excluding java source files"
	$(MAKEJAR) --verbose --list --normal --exclude '\.xcf\.gz' $(JARFILE1) . xenon

clean:: clean.$(JARFILE1)
clean.$(JARFILE1):
	$(RM) $(JARFILE1)

pack:	tarbackup	
	@echo "Packing source files in archive file: \`$(PACK_TAR_FILE)' "
	@echo "First, cleaning source directories ..."
	$(MAKE) -f $(THISMAKEFILE) clean
	@CURRENT_DIR="`pwd`" ; \
	ARCHIVE_DIR=$$CURRENT_DIR ; \
	TAR_DIR=`basename $$ARCHIVE_DIR` ; \
	PARENT_DIR=`dirname $$ARCHIVE_DIR` ; \
	package_name=$(PACK_TAR_FILE) ; \
	export CURRENT_DIR  ARCHIVE_DIR TAR_DIR  PARENT_DIR; \
	cd $$PARENT_DIR ; if [ $$? -eq 0 ]; then \
	echo ">>>> Changed to directory:  \`$$PARENT_DIR'" ; \
	echo ">>>> Creating tape archive: \`$$package_name'" ; \
	( set -x ; $(RM) $$PARENT_DIR/$(PACK_TAR_FILE) ; \
	  $$CURRENT_DIR/$(TARBACKUP) $(TARBACKUP_FLAGS) $$PARENT_DIR/$$package_name . $$TAR_DIR; ) ; \
	else false; fi




release: $(JARFILE1) tarbackup
	@echo "======================================================================"
	@echo "Packing Release files in archive file: \`$(RELEASE_TAR_FILE)' "
	@echo "======================================================================"
	$(RM) *.EXCLUDE 
	@CURRENT_DIR="`pwd`" ; \
	ARCHIVE_DIR=$$CURRENT_DIR ; \
	TAR_DIR=`basename $$ARCHIVE_DIR` ; \
	PARENT_DIR=`dirname $$ARCHIVE_DIR` ; \
	package_name=$(RELEASE_TAR_FILE) ; \
	echo "CURRENT_DIR=$$CURRENT_DIR" ; \
	echo "ARCHIVE_DIR=$$ARCHIVE_DIR" ; \
	echo "PARENT_DIR=$$PARENT_DIR" ; \
	echo "TAR_DIR=$$TAR_DIR" ; \
	echo "package_name=$$package_name" ; \
	export CURRENT_DIR ARCHIVE_DIR TAR_DIR  PARENT_DIR; \
	cd $$PARENT_DIR ; if [ $$? -eq 0 ]; then \
	echo ">>>> Changed to directory:  \`$$PARENT_DIR'" ; \
	echo ">>>> Creating tape archive: \`$$package_name'" ; \
	( set -x ; $(RM) $$PARENT_DIR/$(RELEASE_TAR_FILE) ; \
	  $$CURRENT_DIR/$(TARBACKUP) $(TARBACKUP_FLAGS) --exclude '\.class$$' --incl-bin $$PARENT_DIR/$$package_name . $$TAR_DIR; ) ; \
	else false; fi


debug:
	@echo "Making *debuggable* versions ..."
	$(MAKE) all CDEBUGFLAGS='-g' DEFINES='-DXDEBUG'

new_debug:
	@echo "Making *debuggable* versions ..."
	$(MAKE) clean
	$(MAKE) all CDEBUGFLAGS='-g' DEFINES='-DXDEBUG'

#
# Defaults
# 
all::
	@ echo "make ($@) complete for today."

install-all:: install
	@ echo "make ($@) complete for today."

install::
	@ echo "make ($@) complete for today."

distclean::
	@ echo "make ($@) complete for today."

uninstall::
	@ echo "make ($@) complete for today."

install.man::
	@ echo "make ($@) complete for today."

install.private::
	@ echo "make ($@) complete for today."

depend::
	@ echo "make ($@) complete for today."

clean::
	@ echo "make ($@) complete for today."


# Dependencies

# fini
