
##########################################################################
#
#  GNU Makefile for SANA2Meter
#
#  (C) Copyright 1996 Marius Gröger
#      All Rights Reserved


.SUFFIXES:

##########################################################################
#
# Misc. Definitions
#
INSTALL_DIR := AMITCP:SANA2Meter
BIN_DIR     := /bin
LOCALE_DIR  := /Catalogs
NAME        := SANA2Meter
BASENAME    := SANA2Meter
RELNAME     := SANA2Meter
IDS         := aminet.ids
VERSION     := 37

SRCDIR      := /Source
OBJDIR      := Objects

VPATH       = $(SRCDIR)

##########################################################################
#
# Compilation Flavours
#
# OPTIMIZE   should be one of "","ANY","000","010"..."060"
# GTL_STATIC should be one of "YES" or "NO"
#
GTL_STATIC  := NO
OPTIMIZE    :=


##########################################################################
#
# External Programs
#
CP          := C:Copy
MV          := C:Rename
RM          := C:Delete >NIL:
LD          := sc:c/slink
CC          := sc:c/sc
AS          := sc:c/sc
STRIP       := sc:c/slink
BUMPREV     := C:BumpRev
SETREV      := C:SetRev
CATCOMP     := C:CatComp
PROTECT     := C:Protect
BUILD_AMINET:= /s/build-aminet
ECHO        := echo


##########################################################################
#
# Some Configuration Evaluation
#

ifneq "$(OPTIMIZE)" ""
CPU_CFLAGS  = CPU=$(OPTIMIZE) PARAMETERS=REGISTERS OPT OPTTIME OPTINLINE\
	      OPTSCHEDULE STRINGMERGE STRUCTUREEQUIVALENCE
CPU_FILEID   = .$(OPTIMIZE)
else
SCCPU       =
CPU_FILEID  =
CPU_CFLAGS  =
endif

ifeq "$(GTL_STATIC)" "YES"
GTL_LIBS    = lib:gtlayout$(CPU_FILEID).lib
GTL_CFLAGS  = DEFINE LINK_LIB
GTL_FILEID  = .s
else
GTL_LIBS    =
GTL_CFLAGS  =
GTL_FILEID  =
endif

SUFFIX      = $(CPU_FILEID)$(GTL_FILEID)


##########################################################################
#
# Compiler flags
#

LIBS        = LIB lib:pools.lib LIB LIB:amiga.lib LIB lib:debug.lib \
	      $(GTL_LIBS) LIB lib:sc.lib

INCLUDE     = INCDIR "DOCS:pd" INCDIR "DOCS:poolsinclude" \
	      NOMULTIPLEINCLUDES

CFLAGS      = $(INCLUDE) ERRREXX COMMENTNEST NOSTKCHK NOCHKABORT  \
	      SMALLCODE SMALLDATA VERBOSE NOICONS NOSTRICT NOANSI \
	      DEBUG=SYMBOLFLUSH GST $(NAME)$(GTL_FILEID).gst      \
	      $(CPU_CFLAGS) $(GTL_CFLAGS)


##########################################################################
#
# linkage flags
#

LDFLAGS     = NOICONS SC SD $(LIBS) TO
STRIPFLAGS  = NOICONS ND TO


##########################################################################
#
# Files
#

CFILES      := $(wildcard *.c)
OFILES      = $(CFILES:%.c=$(OBJDIR)/%$(SUFFIX).o)
OBJECTS     = LIB:RXstartup.obj $(OFILES) LIB:extrdargs.o $(OBJDIR)/locale.o


##########################################################################
#
# Exported Targets
#

.PHONY: help
help:
	 -@$(ECHO) ""
	 -@$(ECHO) "SANA2Meter SMakefile usage:"
	 -@$(ECHO) ""
	 -@$(ECHO) "  make help ................... Print this message"
	 -@$(ECHO) "  make [flags] all ............ Build program"
	 -@$(ECHO) "  make [flags] install ........ Bild & install program to"
	 -@$(ECHO) "  make release ................ Build Aminet release"
	 -@$(ECHO) "  make newrev ................. Increment proram revision"
	 -@$(ECHO) "  make clean .................. Remove intermediate files"
	 -@$(ECHO) ""
	 -@$(ECHO) "Flags:"
	 -@$(ECHO) ""
	 -@$(ECHO) "  GTL_STATIC=YES -- Create a version with statically linked"
	 -@$(ECHO) "       gtlayout.library code. This requires the existence of"
	 -@$(ECHO) "       an object-library '$(GTL_LIBS)'. Defaults to 'NO'"
	 -@$(ECHO) ""
	 -@$(ECHO) "  OPTIMIZE=<CPU-Id> -- Create a version optimized for a certain"
	 -@$(ECHO) "       CPU type. Admissible values are 'ANY', '000',  '010'..."
	 -@$(ECHO) "       '060'. Defaults to making no special optimizations."
	 -@$(ECHO) ""

.PHONY: install
install: all
	 $(CP) $(BIN_DIR)/$(NAME)$(CPU_FILEID)$(GTL_FILEID) $(INSTALL_DIR)/$(NAME)

.PHONY: all
all: $(NAME)$(GTL_FILEID).gst $(BIN_DIR)/$(NAME)$(CPU_FILEID)$(GTL_FILEID) locale

.PHONY: newrev
newrev:
	 $(BUMPREV) $(VERSION) $(NAME)_rev

.PHONY: clean
clean:
	 -$(RM) "$(BIN_DIR)/#?"
	 -$(RM) "$(OBJDIR)/#?"

.PHONY: release
release:
	 $(MAKE) OPTIMIZE=000 GTL_STATIC=NO all
	 $(MAKE) OPTIMIZE=020 GTL_STATIC=NO all
	 $(MAKE) OPTIMIZE=040 GTL_STATIC=NO all
	 $(MAKE) OPTIMIZE=000 GTL_STATIC=YES all
	 $(BUILD_AMINET) "$(RELNAME)" "$(BASENAME)" "$(NAME)_rev.h" "/ReadMe" "//$(NAME)" "$(IDS)" CLEAN


##########################################################################
#
# Rules And Dependencies
#

$(OFILES): $(NAME)$(GTL_FILEID).gst

$(OFILES): $(OBJDIR)/%$(SUFFIX).o: %.c
	 $(CC) OBJECTNAME=T:$(notdir $@) $(CFLAGS) $<
	 $(CP) T:$(notdir $@) $@

$(NAME)$(GTL_FILEID).gst: $(NAME).preinc
	 $(CC) NOOBJNAME $(GTL_CFLAGS) MGST $@ $(STDFLAGS) $(NAME).preinc

$(BIN_DIR)/$(NAME)$(CPU_FILEID)$(GTL_FILEID): $(BIN_DIR)/$(NAME)$(CPU_FILEID)$(GTL_FILEID).ld
	 $(STRIP) $@.ld $(STRIPFLAGS) $@
	 $(PROTECT) $@ +p

$(BIN_DIR)/$(NAME)$(CPU_FILEID)$(GTL_FILEID).ld: $(OBJECTS)
	 $(LD) $^ $(LDFLAGS) $@

$(OBJECTS)/constdata$(CPU_FILEID)$(GTL_FILEID).o: $(NAME)_rev.h

##########################################################################
#
# Localisation
#

locale: blank.ct $(LOCALE_DIR)/deutsch/$(NAME).catalog

$(OBJDIR)/locale.o: locale.cd
	 $(CATCOMP) VERBOSITY=1 DESCRIPTOR locale.cd OBJFILE $@

blank.ct: locale.cd
	 $(CATCOMP) VERBOSITY=1 DESCRIPTOR locale.cd CTFILE $@

locale.h: locale.cd
	 $(CATCOMP) VERBOSITY=1 NOSTRINGS NOARRAY NOBLOCK NOCODE \
	 DESCRIPTOR locale.cd CFILE locale.h

$(LOCALE_DIR)/deutsch/$(NAME).catalog: $(LOCALE_DIR)/deutsch/$(NAME).ct
	 $(CATCOMP) VERBOSITY=1 DESCRIPTOR locale.cd $< CATALOG $@

