#
# This defines the location of the XModDevKit header files
#
# TAN:  Usually you will define the standard distribution location
#	which as of Beta 9 is in ~/Library/HyperSense/XModDevKit.
#	But in this example, it is located in the current directory.
XMODKIT_DIR = .

#
# Makefile.xproj contains all the info for each specific XModule project
#
PROJECTFILE= Makefile.xproj
-include $(PROJECTFILE)


SOURCEMODE = 444


-include Makefile.preamble

PRODUCT = $(NAME).hsxmod

OFILE_DIR = obj
SUPPORTFILES = Makefile makefile $(PROJECTFILE) \	Makefile.preamble Makefile.postamble
SRCFILES = $(CLASSES) $(CLASSES:.m=.h) \
	$(CATEGORIES) $(CATEGORIES:.m=.h) \
	$(MFILES) $(CFILES) $(HFILES) $(PSWFILES) $(PSWMFILES) \
	$(INTERFACES) $(TIFFFILES) $(EPSFILES) $(SNDFILES) \
	$(OTHERSRCS) $(OTHER_SOURCEFILES)
OFILES = $(PSWFILES:.psw=.o) $(PSWMFILES:.pswm=.o) $(CLASSES:.m=.o) \
	$(CATEGORIES:.m=.o) $(MFILES:.m=.o) $(CFILES:.c=.o) \
	$(OTHER_OFILES) 
EARLY_HEADERS = $(PSWFILES:.psw=.h) $(PSWMFILES:.pswm=.h) \
	$(OTHER_EARLY_HEADERS)
PRODUCT_DEPENDS =  $(EARLY_HEADERS) $(OFILE_DIR) \
	$(OFILES) $(INTERFACES) $(TIFFFILES) $(EPSFILES) $(SNDFILES) \
	$(OTHER_PRODUCT_DEPENDS)
INSTALL_DEPENDS = $(DSTROOT)$(INSTALLDIR) all $(OTHER_INSTALL_DEPENDS)
NIBLIBDIR = /usr/lib/nib
GARBAGE = $(PSWFILES:.psw=.c) $(PSWMFILES:.pswm=.m) \
	  $(PRODUCT) obj \
	  $(OTHER_GARBAGE) gmon.out

_CFLAGS = $(CFLAGS) -I$(XMODKIT_DIR) -O -Wall

# use -r ld flag when making an object file.....
_LDFLAGS = $(LDFLAGS) -r



#
# user level targets
#

all::
	@$(MAKE) $(PRODUCT)
	
clean:: $(NAME).clean

depend:: Makefile.dependencies


VPATH = $(OFILE_DIR)

.SUFFIXES: .m .o .c .psw .pswm .clean .depend $(OTHER_SUFFIXES)
.c.o:
	$(CC) $(_CFLAGS) -c $*.c -o $(OFILE_DIR)/$*.o
.m.o:
	$(CC) $(_CFLAGS) $(OBJCFLAGS) -c $*.m -o $(OFILE_DIR)/$*.o
.psw.h:
	$(PSWRAP) $(PSWFLAGS) -a -h $*.h -o $*.c $*.psw
.psw.o:
	$(PSWRAP) $(PSWFLAGS) -a -h $*.h -o $*.c $*.psw
	$(CC) $(_CFLAGS) -c $*.c -o $(OFILE_DIR)/$*.o
.pswm.h:
	$(PSWRAP) $(PSWFLAGS) -a -h $*.h -o $*.m $*.pswm
.pswm.o:
	$(PSWRAP) $(PSWFLAGS) -a -h $*.h -o $*.m $*.pswm
	$(CC) $(_CFLAGS) $(OBJCFLAGS) -c $*.m -o $(OFILE_DIR)/$*.o

$(NAME).clean::
	@if [ ! -r $(PROJECTFILE) ] ; then \
	    echo '*** No XModule project file $(PROJECTFILE) in' `pwd` ; \
	    exit 1 ; \
	fi ;
	
	@if [ ! -w . ] ; then echo '***' `pwd` 'not writable'; exit 1 ; fi
	-rm -rf $(GARBAGE)

$(OFILE_DIR):
	mkdirs $(OFILE_DIR)

SRCROOT:
	@if [ -n "${$@}" ]; then exit 0; \
	else echo Must define $@; exit 1; fi

$(SRCROOT)::
	-rm -rf $(SRCROOT)
	mkdirs $(SRCROOT)
	chmod 755 $(SRCROOT)

diff: SRCROOT
	@echo Compare directories: `pwd` and $(SRCROOT)
	@csh -f -c "diff -r `pwd` $(SRCROOT); exit 0"	


Makefile.dependencies:: $(CLASSES) $(CATEGORIES) $(MFILES) $(CFILES)
	-rm -f Makefile.dependencies
	$(CC) -MM $(CFLAGS) $(CLASSES) $(CATEGORIES) $(MFILES) $(CFILES) | \
	    awk '{ if ($$1 != prev) { if (rec != "") print rec; \
		rec = $$0; prev = $$1; } \
		else { if (length(rec $$2) > 78) { print rec; rec = $$0; } \
		else rec = rec " " $$2 } } \
		END { print rec }' > Makefile.dependencies

$(DSTROOT)$(INSTALLDIR):
	mkdirs $(DSTROOT)$(INSTALLDIR)


$(PRODUCT):: $(PRODUCT_DEPENDS)
	@if [ ! -r $(PROJECTFILE) ] ; then \
	    echo '*** No XModule project file $(PROJECTFILE) in' `pwd` ; \
	    exit 1 ; \
	fi ;

	@if [ ${NOMACHO} ] ; then \
	    ldflags="$(_LDFLAGS)"; \
	else \
	    ldflags="$(_LDFLAGS)"; \
	    nibseg=no; tiffseg=no; epsseg=no; sndseg=no; \
	    for i in $(INTERFACES) nonibfiles ; do \
		    if [ $$i = nonibfiles ] ; then continue; fi; \
		    nibseg=yes; \
		    ldflags="$$ldflags -sectcreate __NIB $$i $$i"; \
	    done; \
	    for i in $(TIFFFILES) notifffiles ; do \
		    if [ $$i = notifffiles ] ; then continue; fi; \
		    tiffseg=yes; \
		    ldflags="$$ldflags -sectcreate __TIFF $$i $$i"; \
	    done; \
	    for i in $(EPSFILES) noepsfiles ; do \
		    if [ $$i = noepsfiles ] ; then continue; fi; \
		    epsseg=yes; \
		    ldflags="$$ldflags -sectcreate __EPS $$i $$i"; \
	    done; \
	    for i in $(SNDFILES) nosndfiles ; do \
		    if [ $$i = nosndfiles ] ; then continue; fi; \
		    sndseg=yes; \
		    ldflags="$$ldflags -sectcreate __SND $$i $$i"; \
	    done; \
	    for i in $(LIBINTERFACES) nonibfiles ; do \
		    if [ $$i = nonibfiles ] ; then continue; fi; \
		    nibseg=yes; \
		    ldflags="$$ldflags -sectcreate __NIB $$i $(NIBLIBDIR)/$$i"; \
	    done; \
	    for i in $(LIBTIFFFILES) notifffiles ; do \
		    if [ $$i = notifffiles ] ; then continue; fi; \
		    tiffseg=yes; \
		    ldflags="$$ldflags -sectcreate __TIFF $$i $(NIBLIBDIR)/$$i"; \
	    done; \
	fi ; \
	echo $(LD) $$ldflags -o $(PRODUCT) $(OFILES) $(OTHER_LIBS) ; \
	$(LD) $$ldflags -o $(PRODUCT) $(OFILES) $(OTHER_LIBS)


-include Makefile.postamble

-include Makefile.dependencies
