#ident "@(#)rules1.top 1.54 17/12/06 " ########################################################################### # Written 1996-2017 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. # ########################################################################### # Copyright (c) J. Schilling ########################################################################### # The contents of this file are subject to the terms of the # Common Development and Distribution License, Version 1.0 only # (the "License"). You may not use this file except in compliance # with the License. # # See the file CDDL.Schily.txt in this distribution for details. # A copy of the CDDL is also available via the Internet at # http://www.opensource.org/licenses/cddl1.txt # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file CDDL.Schily.txt from this distribution. ########################################################################### # # 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, nor 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 ########################################################################### # # Set DEST_DIR # We use "DESTDIR" as external visible name to be compatible to other sw. # ########################################################################### DEST_DIR= $(DESTDIR:%/=%) ########################################################################### # # Set INSBASE # ########################################################################### INSBASE= $(INS_BASE:%/=%) ########################################################################### # # Standard default man install base # ########################################################################### DEFMANBASE_DEF= share _MANBASE= $(_UNIQ)$(DEFMANBASE) __MANBASE= $(_MANBASE:$(_UNIQ)=$(DEFMANBASE_DEF)) MANBASE= $(__MANBASE:$(_UNIQ)%=%) ########################################################################### # # 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)%=%) DEFOSINCDIRS_DEF= # _OSINCDIRS= $(_UNIQ)$(DEFOSINCDIRS) __OSINCDIRS= $(_OSINCDIRS:$(_UNIQ)=$(DEFOSINCDIRS_DEF)) OSINCDIRS= $(__OSINCDIRS:$(_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. # ########################################################################### include $(SRCROOT)/$(RULESDIR)/rules.prg $(SRCROOTSL)incs: $(MKDIR_SH) -p $@ $(SRCROOTSL)incs/Dnull: $(SRCROOTSL)incs @if [ ! -f $@ ]; then \ echo > $@; \ fi include $(SRCROOTSL)incs/Dnull _DCC= $(SRCROOTSL)incs/Dcc.$(PARCH)$(-O_ARCH) $(_DCC): sh $(SRCROOTSL)conf/cc-config.sh $(C_ARCH:%64=%) $(CCOM_DEF) $@ 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)$(SUBARCHDIR)$(SUBARCH)$(SHLDIR) OLIBSDIR_STATIC=$(SRCROOTSL)libs/$(OARCH)$(SUBARCHDIR)$(SUBARCH) OINCSDIR= $(SRCROOTSL)incs/$(OARCH) ########################################################################### # Location for targets: # # - all : see appropriate rules # - man installman : rules.man # - lint : rules.lnt # - clean, clobber, distclean, relink, rmtarget : rules.clr # - rel : rules.rel # - install, ibins, uninstall : rules.ins # - html, htmlx, htmlxn : rules.htm & sub.htm # - tarpkg tarpkg1 tarpkg2 : rules.sps # - depend, rmdep : rules.dep # - config : rules.cnf # - tags, TAGS : rules.tag # - .help : rules.hlp # - .version : rules.hlp # - tests : rules.tst # - tinfo : rules.dir/rules.rdi # - cstyle : rules.cst # # We do not put '.help', '.version' and 'tinfo' into 'ALLTARGETS' because: # # .help is not recursive # .version is not recursive # tinfo is handeled separately in rules1.dir # # If we would add .help and tinfo, we would get multiple defined target # messages. # # Use ALLTARGETS=$(ALLTARGETS_NT) if there should be no directory descend # for e.g. the "test" target. ########################################################################### ALLTARGETS= all man lint clean clobber cstyle distclean ibins depend rmdep \ config TAGS tags tests rmtarget relink rel \ $(INSTALLTARGETS) $(UNINSTALLTARGETS) $(MANTARGETS) $(PKGTARGETS) ALLTARGETS_NT= all man lint clean clobber cstyle distclean ibins depend rmdep \ config TAGS tags rmtarget relink rel \ $(INSTALLTARGETS) $(UNINSTALLTARGETS) $(MANTARGETS) $(PKGTARGETS) INSTALLTARGETS= install installman UNINSTALLTARGETS= uninstall uninstallman MANTARGETS= html htmlx htmlxn PKGTARGETS= tarpkg tarpkg1 tarpkg2 .PHONY: $(ALLTARGETS) .help tinfo shell ########################################################################### # Historic SunPro Make does not understand .PHONY: - use FRC # SunPro Make from Schilytools supports .PHONY: and sets MAKE_NAME=sunpro # $(MAKEPROG) is derived from $(SRCROOT)/$(RULESDIR)/mk-$(XMAKEPROG).id # # Make $(FRC) empty for all make programs (that usually support .PHONY) # except for the unfixed old SunPro Make from Sun. ########################################################################### _FRC= $(_UNIQ)$(MAKEPROG) __FRC= $(_FRC:$(_UNIQ)make=FRC) FRC= $(__FRC:$(_UNIQ)%=) $(ALLTARGETS) .help tinfo shell: $(FRC) FRC: ########################################################################### # Allow to start a shell in order to check the environment ########################################################################### shell: $(SHELL) ########################################################################### # Include a target definition for all official targets so calling # 'make' with a target that is not defined in the current makefiles # will cause the target to be ignored. ########################################################################### $(ALLTARGETS): include $(SRCROOT)/$(RULESDIR)/version