#ident "@(#)rules1.top	1.27 04/07/11 "
###########################################################################
# Written 1996 by J. Schilling
###########################################################################
#
# Rules that should be included at top of every Makefile
# Do not include this file directly; this is the language independent
# version that may be included in special purpose versions.
#
###########################################################################
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along with
# this program; see the file COPYING.  If not, write to the Free Software
# Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
###########################################################################
#
# Global definitions:
#
# Define magic unique cookie
#
###########################################################################
_UNIQ= .XxZzy-

###########################################################################
#
# Make sure this becomes the default target
#
###########################################################################
all:

###########################################################################
#
# Build a macro $(SRCROOTSL) that allows to use file name
# $(SRCROOTSL)incs/Dcc.$(PARCH)$(-O_ARCH) instead of using
# the file name $(SRCROOT)/incs/Dcc.$(PARCH)$(-O_ARCH) 
#
# This is needed because of a serious bug in SunPRO make. We need to do some
# tricks in order to make code working that depends on including files where
# the file name is a macro and the file may be built as a result of a make
# rule.
#
# SunPRO make inconsistsently shortens rules that start with "./"
# and thus will not find existing rules for a file to be included.
# We use pattern matching macro expansions to consistently shorten the
# name if it starts with "./".  This allows to use the same textual
# string for both the rule and the include statement.
#
# Note that Thus bug has been reported to Sun in 1998 but Sun seems not
# interested to fix the bug.
#
###########################################################################
_SRCROOTSL=	$(SRCROOT)/
SRCROOTSL= 	$(_SRCROOTSL:./%=%)

###########################################################################
#
# Global handler for failed inludes
#
###########################################################################
.INCLUDE_FAILED:
	@echo " ==> AUTOMAKING \"$^\""; sh $(SRCROOTSL)conf/makeinc $^

###########################################################################
#
# Legacy support for old smake programs ...
#
###########################################################################
.INCLUDEFAILED:
	@echo " ==> AUTOMAKING \"$^\""; sh $(SRCROOTSL)conf/makeinc $^

###########################################################################
#
# Some global constants or pre-definitions
#
###########################################################################
_LCONFIG=	$(_UNIQ)$(LCONFIG)
__LCONFIG=	$(_LCONFIG:$(_UNIQ)=ldummy.cnf)
LOCAL_CNF=	$(__LCONFIG:$(_UNIQ)%=%)
###########################################################################

###########################################################################
#
# Standard (automatic) makeprog identification
#
# Each make program should define a macro: MAKE_NAME for identification.
# MAKE_NAME in this case is a built in macro like MAKE or MAKEFLAGS.
# Currently only 'smake' implements this feature.
#
###########################################################################
_MAKEPROG=	$(_UNIQ)$(MAKE_NAME)
__MAKEPROG=	$(_MAKEPROG:$(_UNIQ)=$(MAKEPROG))
_XMAKEPROG=	$(__MAKEPROG:$(_UNIQ)%=%)

# gmake defines a macro MAKE_COMMAND. If neither MAKE_NAME is defined by 
# the make program, not MAKEPROG is set, try this to recognize gmake.
#
_MAKE_COMMAND=	$(MAKE_COMMAND:%make=gmake)

__XMAKEPROG=	$(_UNIQ)$(_XMAKEPROG)
___XMAKEPROG=	$(__XMAKEPROG:$(_UNIQ)=$(_MAKE_COMMAND))
XMAKEPROG=	$(___XMAKEPROG:$(_UNIQ)%=%)

include		$(SRCROOT)/$(RULESDIR)/mk-$(XMAKEPROG).id

###########################################################################
#
# Standard (automatic) os identification
#
###########################################################################
include		$(SRCROOT)/$(RULESDIR)/os-$(OSNAME).id

###########################################################################
#
# Global os definitions
#
###########################################################################
include		$(SRCROOT)/$(RULESDIR)/os-$(O_ARCH).def

###########################################################################
#
# Some global project definitions that may be overwritten in 'Defaults'
#
###########################################################################
CWARNOPTS=	$(CWOPTS)

###########################################################################
#
# Global project definitions
#
###########################################################################
DEF_ROOT=	$(SRCROOT)
DEF_DIR=	DEFAULTS

_DEFAULTSROOT=	$(_UNIQ)$(DEFAULTSROOT)
__DEFAULTSROOT=	$(_DEFAULTSROOT:$(_UNIQ)=$(DEF_ROOT))
DEFLTSROOT=	$(__DEFAULTSROOT:$(_UNIQ)%=%)

_DEFAULTSDIR=	$(_UNIQ)$(DEFAULTSDIR)
__DEFAULTSDIR=	$(_DEFAULTSDIR:$(_UNIQ)=$(DEF_DIR))
DEFLTSDIR=	$(__DEFAULTSDIR:$(_UNIQ)%=%)

include		$(DEFLTSROOT)/$(DEFLTSDIR)/Defaults

###########################################################################
#
# Get curent directory name
#
###########################################################################
_DIRNAME=	$(_UNIQ)$(DIRNAME)
__DIRNAME=	$(_DIRNAME:$(_UNIQ)=...)
CURDIR=		$(__DIRNAME:$(_UNIQ)%=%)

###########################################################################
#
# Standard UNIX compiler name for use as architecture name.
#
# (this is not necessarily the name the compiler is called by)
# This is now defined in $(DEFAULTSROOT)/Defaults
# If not ... use 'cc'
#
###########################################################################
DEFCCOM_DEF=	cc

_DEFCCOM=	$(_UNIQ)$(DEFCCOM)
__DEFCCOM=	$(_DEFCCOM:$(_UNIQ)=$(DEFCCOM_DEF))
CCOM_DEF=	$(__DEFCCOM:$(_UNIQ)%=%)

_CCOM=		$(_UNIQ)$(CCOM)
__CCOM=		$(_CCOM:$(_UNIQ)=$(CCOM_DEF))
C_ARCH=		$(__CCOM:$(_UNIQ)%=%)

###########################################################################
#
# Standard default include directories
#
###########################################################################
DEFINCDIRS_DEF=	$(SRCROOT)/include

_INCDIRS=	$(_UNIQ)$(DEFINCDIRS)
__INCDIRS=	$(_INCDIRS:$(_UNIQ)=$(DEFINCDIRS_DEF))
INCDIRS=	$(__INCDIRS:$(_UNIQ)%=%)

###########################################################################
#
# Prepare come macros needed to build $(ARCHDIR)
#
# Build macros for:
#	- processor type
#	- operating system
#	- compiler identification
#
###########################################################################
KARCH_DEF=	$(K_ARCH)
MARCH_DEF=	$(M_ARCH)
PARCH_DEF=	$(P_ARCH)

KARCH=		K_ARCH

_MARCH=		$(_UNIQ)$(ARCH)
__MARCH=	$(_MARCH:$(_UNIQ)=$(MARCH_DEF))
MARCH=		$(__MARCH:$(_UNIQ)%=%)

_PARCH=		$(_UNIQ)$(ARCH)
__PARCH=	$(_PARCH:$(_UNIQ)=$(PARCH_DEF))
PARCH=		$(__PARCH:$(_UNIQ)%=%)

###########################################################################
#
# Now include the file $(SRCROOT)/incs/Dcc.$(PARCH)$(-O_ARCH) 
# which is needed if the C-complier from the manual default configutration 
# is not present on the current system. We try to use GCC as fallback
# in this case.
#
# Due to a serious bug in SunPRO make we need to do some tricks to make
# the following code working.
#
# See notes about $(SRCROOT)/ vs. $(SRCROOTSL) above.
#
###########################################################################
_DCC=	$(SRCROOTSL)incs/Dcc.$(PARCH)$(-O_ARCH)

$(_DCC):
	sh $(SRCROOTSL)conf/cc-config.sh $(C_ARCH) $@

include		$(_DCC)

###########################################################################
#
# Build $(ARCHDIR) which occupies a central role in the whole
# make file system. ARCHDIR is used as a sub directory name to keep
# platform dependent files on different places.
#
# It is built from:
#	- processor type
#	- operating system
#	- compiler identification
#
# A possible name could be:
#	mc68020-sunos4-cc
#
###########################################################################
#OARCH=		$(MARCH)$(-O_ARCH)-$(C_ARCH)
OARCH=		$(PARCH)$(-O_ARCH)-$(C_ARCH)
XARCH=		$(K_ARCH)$(-O_ARCH)-$(C_ARCH)
.print:
	echo $(XP_ARCH) $(P_ARCH) $(OARCH) $(XARCH)

###########################################################################
#
# All generated files are placed directly into this subdirectory.
# This includes e.g. yacc output (.c & .h files).
# SUBARCH is used if a object is conditional compiled in multiple ways.
#
###########################################################################
OARCHDIR=	OBJ/$(OARCH)
ARCHDIR=	OBJ/$(OARCH)$(SUBARCHDIR)$(SUBARCH)

###########################################################################
#
# See notes about $(SRCROOT)/ vs. $(SRCROOTSL) above.
#
###########################################################################
OLIBSDIR=	$(SRCROOTSL)libs/$(OARCH)
OINCSDIR=	$(SRCROOTSL)incs/$(OARCH)

###########################################################################
# Location for targets:
#
# - all						: see appropriate rules
# - lint					: rules.lnt
# - clean, clobber, distclean, relink, rmtarget	: rules.clr
# - install, ibins				: rules.ins
# - depend, rmdep				: rules.dep
# - config					: rules.cnf
# - tags, TAGS					: rules.tag
# - .help					: rules.hlp
# - tinfo					: rules.dir/rules.rdi
#
# We do not put '.help' and 'tinfo' into 'ALLTARGETS' because:
#
#	.help	is not recursive
#	tinfo	is handeled separately in rules1.dir
#
# If we would add .help and tinfo, we would get multiple defined target
# messages.
###########################################################################
ALLTARGETS=	all lint clean clobber distclean install ibins depend rmdep \
		config TAGS tags rmtarget relink rel

.PHONY:	$(ALLTARGETS) .help tinfo
