# ------------------------------------------------------------------------
# Makefile: for CcDriver module
# ------------------------------------------------------------------------
#
# Modifications: (most recent first)
#
# RD 04/19/01	added -llonglong to the linker libraries (needed when
#		compiling without optimization -O2)
# RD 04/05/01	added support for settable THREAD_BASE
# RD 03/09/01	added option to create additional (shared/static) library
# AG 03/09/01	also create static library in shared lib environment
# RD 06/18/00	renamed String.h to GL_String.h
# RD 06/18/00	eliminated Makefile.macros (symb. link) in $SPECC/src
# AG 02/03/00	add dependency on String.h
# RD 03/28/99	added support for shared libraries
# RD 07/22/98	removed hard-coded CCD_SPECC_HOME
# RD 06/02/98	added support for systems without symbolic links
# RD 05/08/98	pass installation directory via CCD_SPECC_HOME to source
# RD 02/24/98	don't make binary for target all
# RD 09/22/97	update test target
# RD 08/31/97	initial version
# ------------------------------------------------------------------------

# --- macros

include ../../Makefile.macros

MODULE	=	CcDriver
BINARY	=	ccd_debug
BINFILE	=	$(BINARY)$(EXE_SUFFIX)
PREFIX	=	CCD_
LIBRARY	=	lib$(MODULE)
LIBOBJ	=	$(MODULE).o
OBJECTS =
LIBDEP	=	$(SPECC_LIB)/libGlobal.$(LIBSFX)	\
		$(SPECC_LIB)/lib$(LLONG_LIB_NAME).$(LIBSFX)
LIBS	=	-lGlobal -l$(LLONG_LIB_NAME)
INCLUDE	=	$(MODULE).h $(SPECC_INC)/Global.h $(SPECC_INC)/GL_String.h
EXAMPLE	=	HelloWorld.c
DIST	=	$(MODULE).c $(MODULE).h Makefile .purify \
		$(EXAMPLE)
ORIG	=	$(MODULE).c $(MODULE).h Makefile \
		$(EXAMPLE)


# --- compilation rules

all:		$(LIBRARY).$(LIBSFX) $(SPECC_LIB)/$(LIBRARY).$(LIBSFX)


$(BINFILE):	$(BINARY).o $(OBJECTS) $(LIBDEP)
	$(LN) -o $(BINFILE) $(BINARY).o $(OBJECTS) $(LIBS) $(STDLIB)

$(BINARY)_pure:	$(BINARY).o $(OBJECTS) $(LIBDEP)
	$(LNPURE) -o $(BINARY)_pure $(BINARY).o $(OBJECTS) $(LIBS) $(STDLIB)

$(LIBRARY).a:	$(LIBOBJ)
	$(RM) $(LIBRARY).a
	$(AR) $(LIBRARY).a $(LIBOBJ)
	$(RAN) $(LIBRARY).a
	if [ "$(ADDLIB)" = "so" ]; then					\
		$(MAKE) $(LIBRARY).so $(SPECC_LIB)/$(LIBRARY).so ;	\
		fi;

$(LIBRARY).so:	$(LIBOBJ)
	$(LNSO) -o $(LIBRARY).so $(LIBOBJ)
	if [ "$(ADDLIB)" = "a" ]; then					\
		$(MAKE) $(LIBRARY).a $(SPECC_LIB)/$(LIBRARY).a ;	\
		fi;

$(MODULE).o:	$(MODULE).c $(INCLUDE)
	$(CC) -DTHREAD_BASE=\"$(THREAD_BASE)\" $(MODULE).c

$(BINARY).o:	$(MODULE).c $(INCLUDE)
	$(CC) -DTHREAD_BASE=\"$(THREAD_BASE)\" $(DEBUG) \
		-o $(BINARY).o $(MODULE).c

# if there is no symbolic link already, create a copy in the public directory
$(SPECC_LIB)/$(LIBRARY).a:	$(LIBRARY).a
	$(CP) $(LIBRARY).a $(SPECC_LIB)

$(SPECC_LIB)/$(LIBRARY).so:	$(LIBRARY).so
	$(CP) $(LIBRARY).so $(SPECC_LIB)

# --- external sources

$(SPECC_LIB)/libGlobal.$(LIBSFX):
	cd $(SPECC_SRC)/Global ; $(MAKE) libGlobal.$(LIBSFX)


# --- service rules

clean:
	-$(RM) *.bak *.BAK
	-$(RM) *.o $(BINFILE) $(LIBRARY).* core
	-$(RM) *.pure* *_pure* .pure
	-$(RM) HelloWorld.i HelloWorld.o HelloWorld

dist:
	for file in $(DIST); do echo $(DISTPREFIX)/$$file >>$(DISTLIST); done

orig:
	for file in $(ORIG); do echo $(ORIGPREFIX)/$$file >>$(ORIGLIST); done

test:		$(BINFILE) $(EXAMPLE)
	./$(BINFILE)

pure:		$(BINARY)_pure

puretest:	$(BINARY)_pure $(EXAMPLE)
	./$(BINARY)_pure


# --- EOF Makefile ---
