# ------------------------------------------------------------------------
# Makefile: module Global of the SpecC Reference Compiler
#	    (global definitions, error handling etc.)
# ------------------------------------------------------------------------
#
# Modifications: (most recent first)
#
# RD 11/30/01	added a missing EXE_SUFFIX
# RD 11/20/01	fixed dependencies for GL_String.o
# RD 11/15/01	added System.cc and GL_System.h
# RD 11/02/01	added GL_FileIO.h and GL_FileIO.cc
# RD 05/25/01	reduced contents to SCRC requirements
# ------------------------------------------------------------------------

# --- macros

include ../../Makefile.macros

MODULE	=	Global
BINARY	=	gl_debug
BINFILE	=	$(BINARY)$(EXE_SUFFIX)
PREFIX	=	GL_
LIBRARY	=	lib$(MODULE)
LIBOBJ	=	$(MODULE).o GL_String.o GL_FileIO.o
OBJECTS =	GL_String.o GL_FileIO.o
LIBDEP	=	$(SPECC_LIB)/lib$(LLONG_LIB_NAME).$(LIBSFX)
LIBS	=	-l$(LLONG_LIB_NAME)
INCLUDE	=	$(MODULE).h GL_String.h GL_FileIO.h GL_System.h
EXAMPLE	=
DIST	=	$(MODULE).cc $(MODULE).h \
		GL_String.cc GL_String.h \
		GL_FileIO.cc GL_FileIO.h \
		System.cc \
		Makefile .purify
ORIG	=	$(MODULE).cc $(MODULE).h \
		GL_String.cc GL_String.h \
		GL_FileIO.cc GL_FileIO.h \
		System.cc \
		Makefile


# --- compilation rules

all:		$(LIBRARY).$(LIBSFX) $(SPECC_LIB)/$(LIBRARY).$(LIBSFX)	\
		$(SPECC_INC)/GL_System.h

$(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).cc $(INCLUDE)
	$(CC) $(MODULE).cc

$(BINARY).o:	$(MODULE).cc $(INCLUDE)
	$(CC) $(DEBUG) -o $(BINARY).o $(MODULE).cc

System.o:	System.cc
	$(CC) System.cc -o System.o

System$(EXE_SUFFIX):	System.o
	$(LN) -o System$(EXE_SUFFIX) System.o $(STDLIB)

GL_System.h:	System$(EXE_SUFFIX)
	./System$(EXE_SUFFIX) > GL_System.h

# 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)

$(SPECC_INC)/GL_System.h:	GL_System.h
	$(CP) GL_System.h $(SPECC_INC)


# --- submodules

GL_String.o:	GL_String.cc $(INCLUDE)
	$(CC) GL_String.cc -o GL_String.o

GL_FileIO.o:	GL_FileIO.cc $(INCLUDE)
	$(CC) GL_FileIO.cc -o GL_FileIO.o

$(BINARY)_string$(EXE_SUFFIX):	$(BINARY)_string.o $(MODULE).o $(LIBDEP)
	$(LN) -o $(BINARY)_string$(EXE_SUFFIX) $(BINARY)_string.o	\
		$(MODULE).o $(LIBS) $(STDLIB)

$(BINARY)_string_pure:	$(BINARY)_string.o $(MODULE).o $(LIBDEP)
	$(LNPURE) -o $(BINARY)_string_pure $(BINARY)_string.o		\
		$(MODULE).o $(LIBS) $(STDLIB)

$(BINARY)_string.o:	GL_String.cc GL_String.h
	$(CC) $(DEBUG) -o $(BINARY)_string.o GL_String.cc



# --- service rules

clean:
	-$(RM) *.bak *.BAK *~
	-$(RM) *.o $(BINFILE) $(BINARY)_string* $(LIBRARY).* core
	-$(RM) System.o System$(EXE_SUFFIX) GL_System.h
	-$(RM) *.pure* *_pure* .pure

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

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

test:		$(BINARY)_string$(EXE_SUFFIX) $(BINFILE)
	./$(BINARY)_string$(EXE_SUFFIX)
	./$(BINFILE)

pure:		$(BINARY)_string_pure $(BINARY)_pure

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


# --- EOF Makefile ---
