rules /* * Underlying work copyright 1996 AT&T Corp. and Lucent Technologies Inc. * All Rights Reserved; Derivative work copyright 2006 Lucent Technologies Inc. * All Rights Reserved. * See http://www.bell-labs.com/project/nmake/licenseagreement.html * for terms of use. */ /* * lu3.8 plus SGE support (010071). 11/01/2006 * * variables: * sge_qrsh - to enable sge support set sge_qrsh=1 (default '0') * QRSH - the qrsh command (default 'qrsh') * QRSHFLAGS - flags for the qrsh command (default '-cwd -noshell -V') * SGESHELL - the shell to use (default is $COSHELL, $SHELL, or ksh * in that order of precedence) */ /* * Lucent Technologies Bell Laboratories * * default Lucent(R) make base rules * * conventions: * * internal make rule names match the RE \.[.A-Z][.A-Z0-9]* * internal make variable names match the RE \.[.A-Z][.A-Z0-9]*\. * internal make operator names match the RE :[A-Z]*: * use $(tmp) (11 chars max) to generate shell tmp file names * every (non-builtin shell) command should use a make variable * the flags for command $(XYZ) are $(XYZFLAGS) */ .ID. = "@(#)Makerules.mk 7.1.2.5 (Lucent Technologies Bell Laboratories) 11/12/03" /* * made when base rules loaded */ .MAKERULES.LOAD : .MAKE .VIRTUAL .FORCE .IMMEDIATE local T1 T2 for T1 $(MAKE_OPTIONS) if T1 == "no*" T1 := $(T1:/no//) T2 := elif T1 == "*=*" T2 := $(T1:/[^=]*=//) T1 := $(T1:/=.*//) else T2 := 1 end $(T1) := $(T2) end if viewverify && ! "$(*.VIEW:O=2)" error $(viewverify) viewpath not set end if "$(-mam:N=(regress|static)*)" .MAMROOT. := $(PWD:C@.*/src/@/src/@:C@/[^/]*@/..@G:C@/@@) .MAKE : .MAM.LOAD end /* * handy attributes */ .FUNCTION : .USE .ATTRIBUTE .MAKE .FUNCTIONAL .VIRTUAL .FORCE .REPEAT /* * binding directory lists */ OPTDIRS = /usr/add-on:/usr/addon:/usr/local:/local:/opt:/home STDDIRS = /usr/bin:/bin USRDIRS = /usr/local:/local:/usr /* * common directories */ INSTALLROOT = $(HOME) BINDIR = $(INSTALLROOT)/bin ETCDIR = $(INSTALLROOT)/etc FUNDIR = $(INSTALLROOT)/fun INCLUDEDIR = $(INSTALLROOT)/include LIBDIR = $(INSTALLROOT)/lib MANDIR = $(INSTALLROOT)/man/man SHAREDIR = $(INSTALLROOT)/share TMPDIR = /usr/tmp /* * makerules control variables */ ancestor = ancestor_list = $(ancestor_source) .SOURCE.a lib .SOURCE.h include arclean = case_sensitive_file_system = 1 ccase_audit = 0 ccase_view = 0 ccase_message = clearaudit is turned on cctype = cleanignore = clobber = clobberignore = compare = 1 force_shared = implicit_include = instrument = link = makelog = nativepp = official_out = OFFICIAL output = $(.OUTPUT.) physical = prefixinclude = 1 preserve = $(CC.SUFFIX.SHARED:?lib*$(CC.SUFFIX.SHARED).*??) quoteinclude = recurse = 1 recurse_begin_message = recurse_end_message = save = save_out = $(output) select = sge_qrsh = 0 suffixsunwcch = symbolic_link = tmp = ${COTEMP} viewverify = localprobe = implicit_template_definition_warning = C++ implicit template definition enabled: nmake automatic dependency generation may not work (disable implicit template definition if necessary) kpic_warning = building a shared library without $(CC.PIC) may result in a nonfunctional or inefficient library - try CCFLAGS+=$$$(CC.PIC) sharedlib_name_warning = "lib" prefix missing from shared library $(<:B:S) - you may have trouble linking with this library sharedliblinks = 1 sharedlibvers = 1 disable_probe_message = 3 probe file non-existant or out-of-date - contact nmake administrator RECURSE_MESSAGE=$(.DIR.:?$(<:N!=/*:?$(.DIR.)/??)??)$(<): CC.PROFILE = $(-mam:N=static*,port*:??$(instrument:@Y%$(instrument:B:/\(...\).*/-\1/)%%) $(CCFLAGS:N=-p|-pg) $(CCFLAGS:N=-[gG]*([0-9]))?) CLEARAUDIT = clearaudit CLEARTOOL = cleartool QRSH = qrsh QRSHFLAGS += -cwd -noshell -V SGESHELL := $(SGESHELL|COSHELL|SHELL|"ksh") .SHAREDLIBSUFFIX. = .SHAREDLIBNAME. = .SHAREDLIBLIST. = /* UWIN variable definition */ .LD.PREREQ. = $(CC.SUFFIX.LD:/^/*/:/ /|/) /* * $(INSTRUMENT_$(instrument:O=1:B)) is eval'd in .MAKEINIT */ INSTRUMENT_app = : $(.INSTRUMENT.app) INSTRUMENT_insight = CC = $(CC:N=*=*) INSIGHT=$(instrument.root:D) PATH=$(PATH):$(instrument.root) $(instrument) INSTRUMENT_insure = CC = $(CC:N=*=*) INSIGHT=$(instrument.root:D) PATH=$(PATH):$(instrument.root) $(instrument) INSTRUMENT_codewizard = CC = $(CC:N=*=*) PARASOFT=$(instrument.root:D) PATH=$(PATH):$(instrument.root) $(instrument) INSTRUMENT_purecov = command=CCLD root=PURE_HOME CCFLAGS+=-g INSTRUMENT_purify = command=CCLD root=PURE_HOME INSTRUMENT_quantify = command=CCLD root=PURE_HOME CCFLAGS+=-g INSTRUMENT_sentinel = command=CCLD root=SE_HOME CCFLAGS+=-g /* * INSTRUMENT_cc_analyzers are those that do their analysis at compile time * Needed for case where 'ppcc' has to be called */ INSTRUMENT_cc_analyzers = insight insure codewizard .INSTRUMENT.app : .FUNCTION if ! ( APP = "$(PATH:/:/ /G:X=../lib/app/cpp:T=F:O=1)" ) error 3 app not found end CPP = $(APP) CPPFLAGS = $(CCFLAGS:N=-[DIU]*) LDLIBRARIES += -lapp .SOURCE.a : $(APP:D:D) .INSTRUMENT.notfound : .MAKE .FUNCTIONAL .VIRTUAL .FORCE error 3 $(instrument) not found /* * standard versions to avoid ETXTBSY during installation */ for .X. cmp cp ln mv rm eval STD$(.X.:F=%(upper)S) = $(STDDIRS:/:/ /g:X=$(.X.):T=F:O=1) end end /* * action related symbols */ AR = ar ARFLAGS = r AS = as AWK = awk BINED = ed BINEDFLAGS = BISON = bison BISONFLAGS = -y cc = cc CC = cc CCFLAGS = -O CCLD = $(CC) CCLDFLAGS = $(CCFLAGS:N!=-[DIU]*:@C@$(CC.ALTPP.FLAGS)@@) $(F77FLAGS:N!=-[DIU]*) $(LDFLAGS) CHGRP = chgrp CHMOD = chmod CHOWN = chown CMP = cmp CP = cp CPIO = cpio CPP = $(MAKEPP) CPPFLAGS = $(CCFLAGS:N=-[DIU]*) if "$(PATH:/:/ /G:X=ctags:T=F)" CTAGS = ctags end DIFF = diff DIFFFLAGS = EGREP = egrep F77 = f77 FLEX = flex FLEXFLAGS = -l GREP = grep HOSTCC = cc IFFE = iffe IFFESRCDIR = features IFFEGENDIR = FEATURE IFFEFLAGS = set cc $(CC) $(CCFLAGS) $(LDFLAGS) : $(-mam:N=static*:??set static $(CC.STATIC) : ?) IGNORE = ignore LD = $(CC.LD) LEX = lex LEXFLAGS = .T. = $(USRDIRS:/:/ /G:X=lib/lint) $(USRDIRS:/:/ /G:X=lib/cmplrs/cc) $(USRDIRS:/:/ /G:X=ccs/lib) if .T. = "$(.T.:X=lint1:T=F:O=1)" LINTLIB := $(.T.:D) else LINTLIB = /usr/lib end LINTLIBRARIES = libc$(CC.SUFFIX.ARCHIVE) LINT1 = $(LINTLIB)/lint1 LINT2 = $(LINTLIB)/lint2 if ! "$(_release_:N=V)" LINTFLAGS = -bh end LN = ln LPR = lpr if "$(PATH:/:/ /G:X=lprof:T=F)" LPROF = lprof end LS = ls M4 = m4 if "$(PATH:/:/ /G:X=mcs:T=F)" MCS = mcs MCSFLAGS = -d end MKDIR = mkdir MV = mv NM = $(CC.NM) NMEDIT = $(CC.NMEDIT) -e "/_STUB_/d" NMFLAGS = $(CC.NMFLAGS) PACKAGE = PAX = pax PPCC = ppcc PPCCFLAGS = PR = pr PROTO = proto PROTOFLAGS = -s -c $(PROTOCOPYRIGHT:@Q) PROTOCOPYRIGHT = $("$(HOME)/.copyright":T=F:T=I:@/$("\n")/ /G:@??Lucent Technologies Bell Laboratories?O) RANLIB = $(IGNORE) ranlib RM = rm RMFLAGS = -f SED = sed SHAR = shar SILENT = silent STRIP = strip TAR = tar TARFLAGS = v if "$(PATH:/:/ /G:X=vgrind:T=F)" VGRIND = vgrind end YACC = yacc YACCFLAGS = -d PROBE = probe /* * special symbols */ /* ._BUILT_RAW_. is a intermediate variable used to save processing time * for the evaluation of .BUILT. */ ._BUILT_RAW_. = $(...:T=XU:T=F:P=L:N!=/*$(.INSTALL.LIST.:@/ /|/G:/^./|&/)$(-global:@/:/|/G:/^./|&/):T=G:N!=*.mk) .BUILT. = $(VROOT:?$(._BUILT_RAW_.:N!=$(VROOT)/*) $(._BUILT_RAW_.:N=$(VROOT)/*:A=.TARGET)?$(._BUILT_RAW_.)?) .CLOBBER. = $(".":L=*.([it]i|l[hn])) core .MANIFEST. = $(*.COMMON.SAVE:T=F) $(.SOURCES.) $(save:T=F) .SOURCES. = $(.SELECT.:A=.REGULAR:A!=.ARCHIVE|.COMMAND|.OBJECT) /* * stop expansion of certain state variables */ (AR) (ARFLAGS) (AS) (ASFLAGS) (CPP) (CC) (CCFLAGS) (CCLD) \ (CCLDFLAGS) (COATTRIBUTES) (F77) (F77FLAGS) (IFFE) \ (IFFEFLAGS) (LD) (LDFLAGS) (LDLIBRARIES) (LEX) (LEXFLAGS) \ (M4) (M4FLAGS) (YACC) (YACCFLAGS) : .PARAMETER /* * mark actions that operate on built objects */ .ONOBJECT : .ATTRIBUTE .NOCCASEAUDIT : .ATTRIBUTE /* * file attributes */ .OBJECT : .ATTRIBUTE .SHARED : .ATTRIBUTE .JARMANIFEST : .ATTRIBUTE .ATTRIBUTE.%.mf : .JARMANIFEST .SHARED.DC : .ATTRIBUTE .NONSTANDARD : .ATTRIBUTE include "Scanrules.mk" /* * pattern association attributes */ .INSTALL. : .INSTALL.%.COMMAND : $$(BINDIR) .INSTALL.%.ARCHIVE : $$(LIBDIR) .INSTALL.%.SHARED : $$(LIBDIR) /* * bind overrides */ -ldl -lm : .DONTCARE .ARPROFILE. : .FUNCTION local P T for P $(CC.PROFILE) /* libX-P.a or libX_P.a or libP/libX.a */ T := lib$(%)$(P)$(CC.SUFFIX.ARCHIVE) if ! "$(T:A=.TARGET)" && ! "$(T:T=F)" T := lib$(%)$(P:/-/_/)$(CC.SUFFIX.ARCHIVE) if ! "$(T:A=.TARGET)" && ! "$(T:T=F)" T := lib$(P:/-//)/lib$(%)$(CC.SUFFIX.ARCHIVE) end end if "$(T:A=.TARGET)" || "$(T:T=F)" return $(T) end end .BIND.+l% : .FUNCTION local L V L1 if "$(-mam:N=static*,port*)" L := $(%:/+l/-l/) if "$(%:A=.DONTCARE)" $(L) : .DONTCARE end return + "${mam_cc_static} $(L:T=F) ${mam_cc_dynamic}" end if ( L = "$(.ARPROFILE. $(%:/+l//))" ) return $(L) end L := lib$(%:/+l//)$(CC.SUFFIX.ARCHIVE) if ( V = "$(L:T=F)" ) return $(V) end L1 := $(%:/+l//)$(CC.SUFFIX.ARCHIVE) if ( V = "$(L1:T=F)" ) return $(V) end return $(%:/+l/-l/:T=F) .BIND.-l% : .FUNCTION local D T V if "$(%)" == "-l:*" return - $(%:C/^-l://:T=F) end if "$(-mam:N=static*,port*)" if "$(%)" != "-l+([a-zA-Z0-9_])" $(%) : .DONTCARE return + $(%) end V := ${mam_lib$(%:/-l//)} if "$(%:A=.DONTCARE)" print -um setv mam_lib$(%:/-l//) $(.MAMACTION. $("`")(set -; cd /tmp; echo 'main(){return(0);}' > x.${!-$$}.c; $(CC) $(CCFLAGS) -o x.${!-$$}.x x.${!-$$}.c $(%) >/dev/null 2>&1 && echo ' $(%)'; rm -f x.${!-$$}.[cox])$("`")) return + $(V) elif T = "$(%:/-l\(.*\)/lib\1$(CC.SUFFIX.ARCHIVE)/:A=.TARGET)" return $(T) else $(V) : .DONTCARE return $(V:T=F) end end if ( T = "$(.ARPROFILE. $(%:/-l//))" ) .BIND : $(T) return $(T) end if "$(CC.DIALECT:N=DYNAMIC)" && ( "$(CCFLAGS:N=$(CC.DYNAMIC))" || ! "$(CCFLAGS:N=$(CC.STATIC))" ) local P Q P=$(%:/-l//) Q=$(.SHAREDLIBNAME.:N=$(P)*:C|$(P)||) if T = "$(%:/-l\(.*\)/lib\1$(CC.SUFFIX.SHARED)$(Q)/:A=.TARGET:T=F)" $(%): $(T) .SPECIAL .ACCEPT $(force_shared:N=1:@??.IGNORE?) if "$(CC.SUFFIX.SHARED)" && "$(CC.SUFFIX.SHARED)" != "$(CC.SUFFIX.OBJECT)" && "$(T:N=*$(CC.SUFFIX.SHARED)|*$(CC.SUFFIX.SHARED).*)" .SHAREDLIBLIST. += $(%) end return - $(T) end if T = "$(%:/-l\(.*\)/lib\1$(CC.SUFFIX.SHARED)/:A=.TARGET)" $(%): $(T) .SPECIAL .ACCEPT $(force_shared:N=1:@??.IGNORE?) return - $(T) elif "$(_hosttype_:N=uwin.*)" && T = "$(%:/-l\(.*\)/\1$(CC.SUFFIX.SHARED)/:A=.TARGET)" $(%): $(T) .SPECIAL .ACCEPT $(force_shared:N=1:@??.IGNORE?) return - $(T) elif "$(%:/-l\(.*\)/lib\1$(CC.SUFFIX.SHARED)/:B:C|^lib||:A=.TARGET)" && "$(CCFLAGS:F=%(lower)S:N=$(CC.PIC:F=%(lower)S))" W = "$(%:/-l\(.*\)/lib\1$(CC.SUFFIX.SHARED)/:B:C|^lib||:A=.TARGET)" if "$(_hosttype_:N=uwin.*)" && "$(CCFLAGS:N=$(CC.PIC))" T = $(%:/-l\(.*\)/\1$(CC.SUFFIX.SHARED)/) else T = $(%:/-l\(.*\)/lib\1$(CC.SUFFIX.SHARED)/) end $(%) : $(W) .SPECIAL .ACCEPT $(force_shared:N=1:@??.IGNORE?) return - $(T) elif T = "$(%:/-l\(.*\)/lib\1$(CC.SUFFIX.ARCHIVE)/:A=.TARGET)" .BIND : $(T) return $(T) else local H L S V D G L := $(%) if "$(CC.SUFFIX.SHARED)" if "$(CC.SUFFIX.SHARED)" == "$(CC.SUFFIX.OBJECT)" S = |$(CC.SUFFIX.SHARED) else H = - S = |$(CC.SUFFIX.SHARED)$(V)* end end while 1 D := $(*.SOURCE.%.ARCHIVE:L>$(L:/^-l//)$(CC.SUFFIX.SHARED)) G := $(D:Y?$(D)?$(*.SOURCE.%.ARCHIVE:L>$(L:/-l\(.*\)/lib\1/)@($(V)$(CC.SUFFIX.ARCHIVE)$(S)))?) T := $(G:Y?$(G)?$(*.SOURCE.%.ARCHIVE:L>$(L:/^-l//)$(CC.SUFFIX.ARCHIVE))?) if T if T == "*$(CC.SUFFIX.ARCHIVE)" && ! "$(CC.REQUIRE.$(%:/-l//))" .BIND : $(T) return $(T) end if "$(force_shared:N=1)" || "$(>>:N=$(%))" $(%) $(T) : .ARCHIVE else $(%) $(T) : .ARCHIVE .IGNORE end if "$(_hosttype_:N=uwin.*)" && T == "lib*$(CC.SUFFIX.SHARED)" H = end if "$(CC.SUFFIX.SHARED)" && "$(CC.SUFFIX.SHARED)" != "$(CC.SUFFIX.OBJECT)" && "$(T:T=F:N=*$(CC.SUFFIX.SHARED)|*$(CC.SUFFIX.SHARED).*)" .SHAREDLIBLIST. += $(%) end return $(H) $(T:T=F) end if T = "$(*.SOURCE.%.ARCHIVE:L>$(L:/^-l//))" .SOURCE : $(*.SOURCE.a) if "$(CC.LINK.OPTION)" == "-l:*" $(T:T=F) : .NONSTANDARD L := $(T:T=F:Y?-l:$(T)??) .BIND : $(L) return $(L) end end if ! "$(L:N=*+(.+([0-9])))" break end T := $(L:/\.[0-9]*$//) V := $(L:/$(T)//)$(V) L := $(T) end end else T := $(%:/-l\(.*\)/lib\1$(CC.SUFFIX.ARCHIVE)/) if "$(%:A=.DONTCARE)" $(T) : .DONTCARE end .BIND : $(T) return $(T) end if "$(CC.REQUIRE.$(%:/-l//))" $(%) : .DONTCARE elif ! ( T = "$(%:/-l\(.*\)/\1.req/:T=F)" ) T := lib/$(%:/-l//) $(T) : .ARCHIVE if ( T = "$(T:T=F)" ) $(%) : .DONTCARE end end .BIND.-u% : .FUNCTION $(%) : .NULL .BIND.$"{"mam_lib%"}" : .FUNCTION if "$(-mam:N=static*,port*)" local L T L := $(%:/\${mam_lib\(.*\)}/\1/) T := lib$(L)$(CC.SUFFIX.ARCHIVE) if ( T = "$(T:T=F)" ) if "$(CC.STDLIB:V:N=$(T:P=D))" print -um setv mam_lib$(L) -l$(L) else print -um setv mam_lib$(L) $(.MAMACTION. ${mam_cc_L+-l$(L)}${mam_cc_L-$(T)}) end return - $(T) else -l$(L) : .DONTCARE return + $(%) end end .CCPRIMARYFLAGS. : .FUNCTION local F F := $(CCFLAGS:V:VP:M!=[$][()][!#%&*;<>?@~^]) return $(F) .REQUIRE.-l% : .FUNCTION local T if "$(-mam:N=static*)" && "$(%)" != "-l+([a-zA-Z0-9_])" return end if ( T = "$(CC.REQUIRE.$(%:/-l//))" ) if "$(-mam:N=static*)" return end if "$(CC.DIALECT:N=TOUCHO)" return $(%) else return $(T) end end if ! ( T = "$(%:/-l\(.*\)/\1.req/:T=F)" ) T := lib/$(%:/-l//) $(T) : .ARCHIVE if ! ( T = "$(T:T=F)" ) || ( "$(CC.LINK.OPTION)" == "-l:*" && "$(T:B:S:A=.NONSTANDARD)" ) return end if "$(-mam:N=static*,port*)" print -um setv mam_lib$(%:/-l//) $(.MAMACTION. $("`")${mam_cc_L+cat} ${mam_cc_L-sed} ${mam_cc_L-s,$(%),$(LIBDIR)/lib$(%:/-l//).a,} $(T)$("`")) return ${mam_lib$(%:/-l//)} end elif "$(-mam:N=static*,port*)" print -um setv mam_lib$(%:/-l//) $(.MAMACTION. $("`")sed -e 's,$(%),$(%:/-l\(.*\)/lib\1$(CC.SUFFIX.ARCHIVE)),' $(T)$("`")) return ${mam_lib$(%:/-l//)} end return $(T:T=I) .REQUIRE.+l% : .FUNCTION local L L := $(.REQUIRE.-l% $(%:/+l/-l/)) return $(L:/$(%:/+l/-l/)/$(%)/:T=F) .SOURCE.%.ARCHIVE : .FORCE $$(*.SOURCE.a) $$(*.SOURCE) /* * some actions cannot operate concurrently */ .LEX.SEMAPHORE .YACC.SEMAPHORE : .SEMAPHORE /* * target property metarules */ .ARCHIVE.o : .USE .ARCHIVE (AR) (ARFLAGS) .ARPREVIOUS .ARUPDATE .ARCLEAN .ARBIND $(^:?$$(CP) $$(^) $$(<)$$("\n")??)$(.ARPREVIOUS.$(<:B:S):@?$(IGNORE) $$(AR) d $$(<) $$(.ARPREVIOUS.$$(<:B:S))$$("\n")??)$(>:A!=.ARCHIVE:N!=$(.LD.PREREQ.):K=$(AR) $(ARFLAGS) $(<)) .ARPREVIOUS : .MAKE .VIRTUAL .FORCE .REPEAT .IGNORE eval $(<).$(<<:B:S) = $(*$(<<:T=SR):N!=$(**:@/ /|/G)) end .ARUPDATE : .AFTER .IGNORE .VIRTUAL .FORCE .REPEAT $(<<:T=A) .ARCLEAN.LIST. : .FUNCTION local I V for I $(***:T=F:T=G:P=L:A!=.ARCHIVE|.TERMINAL:$(arclean)) if ! "$(~$(I):A=.FORCE:A!=.IGNORE)" V += $(I) end end return $(V) .ARCLEAN : .AFTER .IGNORE .VIRTUAL .FORCE .REPEAT $(.ARCLEAN.LIST.:K=$(RM) $(RMFLAGS)) /* if -lname was already bound to the target lib then rebind it after update */ .ARBIND : .MAKE .AFTER .IGNORE .VIRTUAL .FORCE .REPEAT local T T := $(<<:C|^lib\(.*\)$(CC.SUFFIX.ARCHIVE)|-l\1|:C|$(CC.PROFILE:O=1)$||) if "$(T:P=B:B:S)" == "$(<<:B:S)" .REBIND : $(T) end .FORCE.LD.CC.DYNAMIC. : .FUNCTION if "$(_hosttype_:N=interix.*)" && "$(CC.CC)" != "$(CC.LD)" && !"$(CC.DIALECT:N=-I-)" && "$(CC.SUFFIX.SHARED)" && "$(CC.SUFFIX.SHARED)" != "$(CC.SUFFIX.OBJECT)" && !"$(CCLDFLAGS:N=$(CC.DYNAMIC))" && !"$(CCLDFLAGS:N=$(CC.STATIC))" local sharedlib for sharedlib $(.SHAREDLIBLIST.) if "$(%:N=$(sharedlib))" return $(CC.DYNAMIC) end end end .COMMAND.o : .USE .COMMAND (CCLD) (CCFLAGS) (F77FLAGS) (LDFLAGS) $$(LDLIBRARIES) $(CCLD) $(.FORCE.LD.CC.DYNAMIC. $(*)) $(CCLDFLAGS) $(&:T=D:N!=-[DIUl]*) -o $(<) $(*) .OBJECT.o : .USE .COMMAND (LD) (CCFLAGS) (F77FLAGS) (LDFLAGS) $(LD) -r $(LDFLAGS) -o $(<) $(*) /* * match-all metarules */ % : %.c (CC) (CCFLAGS) (LDFLAGS) $$(LDLIBRARIES) $(CC) $(CCFLAGS) $(LDFLAGS:N!=-[DIU]*) -o $(<) $(*) % : %.f (F77) (F77FLAGS) (LDFLAGS) $$(LDLIBRARIES) $(F77) $(F77FLAGS) $(LDFLAGS) -o $(<) $(*) % : %.r (F77) (F77FLAGS) (LDFLAGS) $$(LDLIBRARIES) $(F77) $(F77FLAGS) $(LDFLAGS) -o $(<) $(*) % : %.F (F77) (CCFLAGS) (F77FLAGS) (LDFLAGS) $$(LDLIBRARIES) $(F77) $(CCFLAGS) $(F77FLAGS) $(LDFLAGS) -o $(<) $(*) % : %.s (ASFLAGS) (LDFLAGS) $$(LDLIBRARIES) $(CC) $(ASFLAGS) $(LDFLAGS) -o $(<) $(*) % : %.sh case $(-mam:N=static*:/:.*//):$OPTIND:$RANDOM in ?*:*:*|*::*|*:*:$RANDOM) ;; *) if ENV= x= $SHELL -n -c '${list[level]} $$(( 1 + $x ))' 2>/dev/null then ENV= $SHELL -n $(>) fi ;; esac case '$(&:T=E)' in "") $(CP) $(>) $(<) ;; *) { i=`(read x; echo $x) < $(>)` case $i in '#!'*|*'||'*|':'*|'":"'*|"':'"*) echo $i ;; esac echo $(&:T=E) cat $(>) } > $(<) ;; esac $(CHMOD) u+w,+x $(<) /* * double suffix metarules */ %.o : %.c (CC) (CCFLAGS) $(CC) $(CCFLAGS) -c $(>) %.o : %.r (F77) (F77FLAGS) $(F77) $(F77FLAGS) -c $(>) %.o : %.f (F77) (F77FLAGS) $(F77) $(F77FLAGS) -c $(>) %.o : %.F (F77) (F77FLAGS) $(F77) $(F77FLAGS) -c $(>) %.o : %.s (AS) (ASFLAGS) $(AS) $(ASFLAGS) -o $(<) $(>) %.o : %.cpp (CC) (CCFLAGS) $(CC) $(CCFLAGS) -c $(>) %.o : %.cxx (CC) (CCFLAGS) $(CC) $(CCFLAGS) -c $(>) %.c %.h : %.y .YACC.SEMAPHORE (YACC) (YACCFLAGS) $(YACC) $(YACCFLAGS) $(>)$(YACCFIX.$(%):?$("\n")$(BINED) $(BINEDFLAGS) y.tab.c <) $(MV) lex.yy.c $(<) %.o : %.C (CC) (CCFLAGS) $(CC) $(CCFLAGS) -c $(>) %.o : %.cc (CC) (CCFLAGS) $(CC) $(CCFLAGS) -c $(>) %.mo : %.mk $(MAKE) $(CCFLAGS:N=-[I][!-]*) $(&:T=E) $(-) -bc -f $(>) /* * C alternate flags support */ .SYNCBEFORECCX : .MAKE .BEFORE .VIRTUAL .FORCE .REPEAT .SYNC : cc-% : ccxopt "" .NULL cc+% : ccxopt "" .NULL cca-% : ccxopt "" .NULL cca+% : ccxopt "" .NULL ccxopt : .USE .ALWAYS .LOCAL .FORCE .RECURSE.SEMAPHORE set - if test -d $(<) then cd $(<) $(-silent:Y%%echo $(recurse_begin_message:@??$(RECURSE_MESSAGE)?o)%) $(MAKE) MAKEPATH=..:$(MAKEPATH) -f $(MAKEFILE) -o keepgoing .ATTRIBUTE.$(IFFEGENDIR)/%:.ACCEPT $(-) $(-debug:?-E $$(<)??) $(=:N!=MAKEPATH=*) $(.RECURSE.ARGS.:N!=cc[-+]*|cca[-+]*) $(INSTRUMENT_$(%):@?instrument=$(%)?$(<:N=cca[-+]*:Y%CCFLAGS+='$(<:/^cca//:/~/ /g)'%CCFLAGS='$(<:/^cc//:/~/ /g)'%)?) || (ERROR_NO=$?; $(recurse_end_message:@?$(-silent:Y%%echo $(recurse_end_message:Y%%$RECURSE_MESSAGE%o);%)??) exit $ERROR_NO) $(recurse_end_message:@?$(-silent:Y%%echo $(recurse_end_message:Y%%$RECURSE_MESSAGE%o)%)??) else echo $(<) not found fi /* * feature test support -- the magic is in $(IFFE) */ $(IFFEGENDIR)/% : $(IFFESRCDIR)/%.c .SCAN.c (IFFE) (IFFEFLAGS) $(IFFE) $(IFFEFLAGS) run $(>) $(IFFEGENDIR)/% : $(IFFESRCDIR)/%.sh .SCAN.c (IFFE) (IFFEFLAGS) $(IFFE) $(IFFEFLAGS) run $(>) $(?$(>):T=F) $(IFFEGENDIR)/% : $(IFFESRCDIR)/% .SCAN.c (IFFE) (IFFEFLAGS) $(IFFE) $(IFFEFLAGS) run $(>) $(IFFEGENDIR)/% : "" .SCAN.c (IFFE) (IFFEFLAGS) $(IFFE) $(IFFEFLAGS) def $(%) .IFFE.REF. : .FUNCTION local T T := $(...:N=*.req:A=.TARGET) .MAKE : $(T) T := $(T:T=I:/\n/ /G:N!=-l($(T:B:C, ,|,G))) T += $(LDLIBRARIES) .MAKE : $(T) T := $(T:T=F:N!=$(<:T=M:@/ /|/G)) if "$(-mam:N=static*,port*)" return $(T:@? ref $(*.SOURCE.%.ARCHIVE:I=$$(T:N=${mam_lib+([a-zA-Z0-9_])}:P=D):$(.CC.NOSTDLIB.):/.*/${mam_cc_L+-L&}/) $$(T) : ??) else return $(T:@?ref $$(*.SOURCE.%.ARCHIVE:I=$$(T:N=-l*:P=D):$(.CC.NOSTDLIB.):P=A:/^/-L/) $$(T) : ??) end /* * obsolete feature support */ FEATURESRCDIR = feature $(IFFEGENDIR)/% : $(FEATURESRCDIR)/%.c .SCAN.c (IFFE) (IFFEFLAGS) $(IFFE) $(IFFEFLAGS) run $(>) $(IFFEGENDIR)/% : $(FEATURESRCDIR)/%.sh .SCAN.c (IFFE) (IFFEFLAGS) $(IFFE) $(IFFEFLAGS) run $(>) $(?$(>):T=F) $(IFFEGENDIR)/% : $(FEATURESRCDIR)/% .SCAN.c (IFFE) (IFFEFLAGS) $(IFFE) $(IFFEFLAGS) run $(>) /* * C information abstractor support rules */ .SOURCE.db : $$(CIAFLAGS:N=-d*:/-d//) CIA = $(CC.ALTPP.ENV) $(CC.DIALECT:N=C++:?CIA?cia?) CIALD = $(CIA) CIADBFLAGS = CIAFLAGS = CIAFILES = $(CC.DIALECT:N=C++:?Ref.db Sym.db?reference.db symbol.db?) DOT = dot DOTFLAGS = -Tps DAGGER = $(CC.DIALECT:N=C++:?Dagger?dagger?) DAGGERFLAGS = (CIA) (CIADBFLAGS) (CIAFLAGS) : .PARAMETER %.A : %.c (CIA) (CIAFLAGS) $(CIA) $(CIAFLAGS) $(CPPFLAGS) -c $(>) %.A : %.C (CIA) (CIAFLAGS) $(CIA) $(CIAFLAGS) $(CPPFLAGS) -c $(>) .CIADB.AGAIN = .CIADB : .MAKE .VIRTUAL .FORCE .ONOBJECT .REPEAT .PROBEINIT local A T U X T := $(.SOURCES.:G=%.c:B:S=$(CC.SUFFIX.OBJECT)) $(.SOURCES.:G=%.C:B:S=$(CC.SUFFIX.OBJECT)) $(.SOURCES.:G=%.cxx:B:S=$(CC.SUFFIX.OBJECT)) if T .SOURCE.c : $(IFFESRCDIR) .CIA.REBIND : .MAKE .VIRTUAL .FORCE .AFTER .REBIND : $(CIAFILES) for U $(T) X := $(*$(U):G=%.c) $(*$(U):G=%.C) $(*$(U):G=%.cxx) if ( X = "$(X:A!=.LCL.INCLUDE|.STD.INCLUDE)" ) $(U:B:S=.A) : .IMPLICIT $(X) $(~$(U):A=.STATEVAR) A += $(U:B:S=.A) end end $(CIAFILES:O=1) : (CIADBFLAGS) (CIAFLAGS) $(A) .CIA.REBIND $(CIALD) $(CIAFLAGS) $(*) .MAKE : $(CIAFILES:O=1) elif .CIADB.AGAIN error 3 ciadb: no source to generate database else .CIADB.AGAIN = 1 .ARGS : .INSERT $(<) .MAKE : .ALL end .CIADOT : .CIADB $(DAGGER) $(DAGGERFLAGS) | $(DOT) $(DOTFLAGS) /* * .USE action scripts */ .DO.COPY : .USE $(CMP) -s $(*:O=1) $(<) || { $(RM) -f $(<); $(CP) $(*:O=1) $(<); } .DO.INSTALL.OPT. = $(~:N=group=*:@C,.*,\&\& { $(CHGRP) & $(<) || true ;},:@C, group=, ,G) \ $(~:N=mode=*:@C,.*,\&\& $(CHMOD) & $(<),:@C, mode=, ,G) \ $(~:N=user=*:@C,.*,\&\& { $(CHOWN) & $(<) || true ;},:@C, user=, ,G) .DO.INSTALL.OLD. : .FUNCTION if "$(preserve)" == "1" || "$(preserve:N=*/*:?$$(%:N=$$(preserve))?$$(%:B:S:N=$$(preserve))?)" return $(SILENT) test -d $(%:D:B=ETXTBSY) || $(MKDIR) $(%:D:B=ETXTBSY); $(MV) $(%) $(%:D:B=ETXTBSY)/$(%:B)#$(%:P=I) elif "$(clobber)" == "1" || "$(clobber:N=*/*:?$$(%:N=$$(clobber))?$$(%:B:S:N=$$(clobber))?)" return $(RM) $(RMFLAGS) $(%) else return $(MV) $(%) $(%).old end .DO.INSTALL : .USE $$(<:A=.ARCHIVE:?.ARUPDATE??) $(*:O=1:P=I=$(<):?: $(<) linked to $(*:O=1) ||?$$(compare:/^0$//:Y@$$$(SILENT) $$$(CMP) -s $$$(*:O=1) $(?:N=.DO.cc:Y@$$$$(<:P=L!)@$$$$(<)@) 2>/dev/null ||@@)?) { if $(SILENT) test -f "$(<)" then $(.DO.INSTALL.OLD. $(<)) fi $(link:/^0$//:?$$(<:B:$$(<:A=.COMMAND:Y@@S@):N=$$(link:/^1$/*/):Y@$$$(LN) $$$(_feature_:N=ln-s:Y%-s $$$(<:D:P=R=$(*:O=1:D:B:S))%$$$(*:O=1)%) $$$(<) || @@)??) $(CP) $(*:O=1) $(<) $(.DO.INSTALL.OPT.) } .DO.INSTALL.DIR : .USE .PLACEHOLDER set - if test ! -d $(<) then $(-silent:??set -x && ?)$(MKDIR) -p $(<) 2>/dev/null$(-silent:?? && set -?) || { test -d ./-p && $(RM) -rf ./-p p= for d in $(-mam:N=static*:?`echo $$(<) | $$(SED) -e 's%\\(.\\)/%\\1 %g'`?$$(".":P=R=$(<):C%/% %G)?) do case $p in "") p=$d ;; *) p=$p/$d ;; esac case $d in .|..) ;; *) if test ! -d $p then $(RM) $(RMFLAGS) $p $(-silent:??set -x && ?)$(MKDIR) $p$(-silent:?? && set -?) fi ;; esac done } $(-silent:??&& set -x?)$(.DO.INSTALL.OPT.) fi .PLACEHOLDER : .VIRTUAL .IGNORE .DO.LINK.OLD. : .FUNCTION if "$(clobber)" == "1" || "$(clobber:N=*/*:?$$(%:N=$$(clobber))?$$(%:B:S:N=$$(clobber))?)" return $(RM) $(RMFLAGS) $(%) else return $(CP) $(%) $(%).old$("\n")$(RM) $(RMFLAGS) $(%) end .DO.LINK : .USE .ACCEPT /* .ACCEPT until dual-time implementation */ if $(SILENT) test -f "$(<)" then $(.DO.LINK.OLD. $(<)) fi $(LN) $(.SYMLINK.OPTIONS.) $(*:O=1) $(<) .SYMLINK.OPTIONS. : .FUNCTION if "$(symbolic_link:/^0$//)" if "$(_feature_:N=ln-s)" return -s else error 1 platform does not support symbolic links end end return .DO.NOTHING : .USE .NULL .DO.READONLY.c. : .USE $(CC) $(CCFLAGS) -c $(.ROSRC.) .DO.READONLY.c.-R : .USE $(CC) $(CCFLAGS:N!=-g) -R -c $(.ROSRC.) .DO.READONLY.c.-Wa,-r : .USE $(CC) $(CCFLAGS:N!=-g) -Wa,-r -c $(.ROSRC.) .DO.READONLY.c.-xMerge : .USE $(CC) $(CCFLAGS:N!=-g) -xMerge -c $(.ROSRC.) .DO.READONLY.c.-S.data : .USE $(".ROSED.=s/^\\([ ]*\\.*\\)data/\\1text/":R)$(@.DO.READONLY.c.sed) .DO.READONLY.c.-S.rdata : .USE $(".ROSED.=s/^\\([ ]*\\.*\\)data/\\1rdata/":R)$(@.DO.READONLY.c.sed) .DO.READONLY.c.-S.idat : .USE $(".ROSED.=s/^\\([ ]*[.a-zA-Z0-9_$:]*[ ]*\\.*\\)idat/\\1code/":R)$(@.DO.READONLY.c.sed) .DO.READONLY.c.sed : .USE $(CC) $(CCFLAGS:N!=-g) -S $(.ROSRC.) $(.ROSRC.:B:N=$(<:B):?$(":") convert $(<:B:S=.c) data to readonly text in $(<:B:S)$("\n")??)set - $(SED) -e '$(.ROSED.)' \ -e 's/^\([ ]*[.a-zA-Z0-9_$:]*[ ]*\.*\)zero[ ][ ]*/\1set .,.+/' \ -e 's/^\([ ]*[.a-zA-Z0-9_$:]*[ ]*\.*\)space[ ][ ]*1/\1byte 0/' \ -e 's/^\([ ]*[.a-zA-Z0-9_$:]*[ ]*\.*\)space[ ][ ]*2/\1byte 0,0/' \ -e 's/^\([ ]*[.a-zA-Z0-9_$:]*[ ]*\.*\)space[ ][ ]*3/\1byte 0,0,0/' \ -e 's/^\([ ]*[.a-zA-Z0-9_$:]*[ ]*\.*\)space[ ][ ]*4/\1byte 0,0,0,0/' \ $(.ROSRC.:B:S=.s) > 1.$(tmp).s $(AS) $(ASFLAGS) -o $(.ROOBJ.) 1.$(tmp).s $(RM) $(RMFLAGS) $(.ROSRC.:B:S=.s) 1.$(tmp).s .READONLY : .USE .MAKE error 3 .READONLY has been replaced by :READONLY: source_file ... .READONLY.c : .USE .IMPLICIT $(.READONLY. $(CC.READONLY) $(>) $(<)) $(".ROSRC.:=$(>)":R)$(".ROOBJ.:=$(<)":R)$(@.DO.READONLY.c.$(CC.READONLY)) .READONLY.l : .USE .IMPLICIT $(".YYSUF.=.l":R)$(@.DO.READONLY.ly) .READONLY.y : .USE .IMPLICIT $(".YYSUF.=.y":R)$(@.DO.READONLY.ly) .DO.READONLY.ly : .USE : convert $(<:B:S=.c) tables to readonly text in $(<:B:S) set - $(CP) $(<:B:S=.c) 1.$(tmp).c $(BINED) $(BINEDFLAGS) 1.$(tmp).c > 2.$(tmp).c </$("(")D/G) for F $(T:/:/ /G) if "$(F:D=$(D):B:S:T=F)" $(D) : .TERMINAL .RECURSE.DIR .UNION : $(D) break end end end end else error 1 :MAKE: no match for $(T) or makefile not in 1st node of VPATH! end end return $(~.UNION) .RECURSE.DIR : .USE .ALWAYS .LOCAL .FORCE .RECURSE.SEMAPHORE .NOCCASEAUDIT set - if $(physical:?2d??) test -d "$(<)" && test -w "$(<)" && test -x "$(<)" then cd $(<) $(-silent:Y%%echo $(recurse_begin_message:@??$(RECURSE_MESSAGE)?o)%) $(MAKE) $(-:C|\(mam=dynamic[^:]*\):\([^:]*\):|\1:\2.$(<:B:S):|:C|:/dev/.*\.$(<:B:S):|::|:C|\.[0-3][0-9][0-9][0-9][0-9]\.\($(<:B:S)\):|.\1:|) $(-debug:?-E $$(<)??) $(=:N!=MAKEPATH=*|VPATH=*) .DIR.=$(.DIR.:?$(.DIR.)/??)$(<) $(.RECURSE.ARGS.) || (ERROR_NO=$?; $(recurse_end_message:@?$(-silent:Y%%echo $(recurse_end_message:Y%%$RECURSE_MESSAGE%o);%)??) exit $ERROR_NO) $(recurse_end_message:@?$(-silent:Y%%echo $(recurse_end_message:Y%%$RECURSE_MESSAGE%o)%)??) else echo $(<): cannot recurse on virtual directory, permission denied! >&2 fi .RECURSE.FILE : .USE .ALWAYS .LOCAL .FORCE .RECURSE.SEMAPHORE .NOCCASEAUDIT set - if test -d "$(<:D)" && test -w "$(<:D)" && test -x "$(<:D)" then cd $(<:D) $(-silent:Y%%echo $(recurse_begin_message:Y%%$(RECURSE_MESSAGE)%o)%) $(MAKE) $(-:C|\(mam=dynamic[^:]*\):\([^:]*\):|\1:\2.$(<:B:S):|:C|:/dev/.*\.$(<:B:S):|::|:C|\.[0-3][0-9][0-9][0-9][0-9]\.\($(<:B:S)\):|.\1:|) $(-debug:?-E $$(<:B)??) -f $(<:B:S) $(=) .DIR.=$(.DIR.) $(.RECURSE.ARGS.) $(recurse_end_message:@?$(-silent:Y%%echo $(recurse_end_message:Y%%$RECURSE_MESSAGE%o)%)??) else echo cannot recurse on the $(<:D) directory, permission denied! >&2 fi /* * source dependency operator */ "::" : .MAKE .OPERATOR .PROBEINIT if ! "$(<)" $(>:N=[!-.]*|.[!A-Z]*) : .SPECIAL .TERMINAL elif "$(<:O=2)" error 2 $(<:O=2): only one target expected else local T0 T1 T2 T3 T4 TA TP OBJ eval .FILES.$(<:B:S) = $(>:V:N=[!-.]*|.[!A-Z]*) .RHS.$(<:B:S) = $(>:V) end .FILES. += $$(.FILES.$(<:B:S)) .ALL : $(<) if ! .MAIN.TARGET. .MAIN.TARGET. := $(<:B:S) end if "$(>:V:G=%$(CC.SUFFIX.OBJECT))" OBJ = 1 end if ! OBJ || ! "$(<:N=*$(CC.SUFFIX.OBJECT))" $(<) : .COMMAND end for T1 $(>:V:T=X) if "$(T1:V:A=.ARCHIVE)" || T1 == "[-+]l*" $(T1:V) : .MULTIPLE TP += $(T1:V) elif T2 = "$(T1:N=$(.LD.PREREQ.))" TP += $(T2) elif T1== "[!-+]*=*" TP+=$(T1:V:@/\(.*=\)\(.*$\)/\1"\2"/) if "$(T1:A!=.USE)" TA+=$(T1:V:@/\(.*=\)\(.*$\)/\1"\2"/) end elif T1 == ".[a-zA-Z]*|*.ld|$\(*\)" || "$(T1:A=.ATTRIBUTE|.STATE)" || "$(T1:A=.MAKE:A=.LOCAL)" TP += $(T1:V) if "$(T1:A!=.USE)" TA += $(T1:V) end elif T1 == "[-+]?*" .OPTIONS.$(<) += $(T1) elif T1 == "-" T4 = 1 elif OBJ && ( T2 = "$(T1:G=%$(CC.SUFFIX.OBJECT))" ) if CC.SUFFIX.OBJECT == "$(T1:S)" T2 := $(T1) else if "$(-targetcontext)" T2 := $(T2:D=$(T1:D):B:S) end $(T2) : .SPECIAL .IMPLICIT $(T1) $(T1) : .SPECIAL .TERMINAL end if ! "$(T2:N=$(<)?($(CC.SUFFIX.COMMAND)))" TP += $(T2) end T3 += $(T2) elif "$(T1:N=*.*:G=%)" && T1 != "$(<)?($(CC.SUFFIX.COMMAND))" if "$(T1:G=$(<))" || "$(T1:G=$(<)$(CC.SUFFIX.COMMAND))" TP += .IMPLICIT end TP += $(T1) elif T4 TP += $(T1) elif "$(_hosttype_:N=uwin.*)" if "$(T1:N=*.res)" TP += $(T1:N=*.res) elif "$(T1:N=*.RES)" TP += $(T1:N=*.RES) end end end if T3 $(T3) : .SPECIAL $(TA:V) if "$(.OPTIONS.$(<))" $(T3) : .SPECIAL (.OPTIONS.$(<)) end end T0 := $(<) if "$(<:A=.ARCHIVE)" || "$(TP:V:A=.ATTRIBUTE:A=.ARCHIVE)" TP += -COMMAND .ARCHIVE$(CC.SUFFIX.OBJECT) elif "$(<:N=*$(CC.SUFFIX.SHARED))" && "$(CC.SUFFIX.SHARED)" || "$(<:V:N=*$(CC.SUFFIX.DYNAMIC))" && "$(CC.SUFFIX.DYNAMIC)" if ! "$(.CCPRIMARYFLAGS.:F=%(lower)S:N=$(CC.PIC:F=%(lower)S))" if "$(kpic_warning)" error 1 $(kpic_warning) end end if ! "$(<:B:N=lib*)" && !( "$(_hosttype_:N=uwin.*)" && "$(.CCPRIMARYFLAGS.:N=$(CC.PIC))" ) if "$(sharedlib_name_warning)" error 1 $(sharedlib_name_warning) end end TP += -COMMAND .SHARED$(CC.SUFFIX.OBJECT) .SHARED.DC end if ! "$(T3:N=$(<)?($(CC.SUFFIX.COMMAND)))" if OBJ && !( "$(TP:V:A=.ATTRIBUTE:A=.ARCHIVE)" || "$(<:V:N=*$(CC.SUFFIX.ARCHIVE))" || "$(<:V:N=*$(CC.SUFFIX.SHARED))" && "$(CC.SUFFIX.SHARED)" || "$(<:V:N=*$(CC.SUFFIX.DYNAMIC))" && "$(CC.SUFFIX.DYNAMIC)" ) /* || "$(>:V:A=.ARCHIVE)" */ if "$(T0:N=*$(CC.SUFFIX.OBJECT))" TP += .OBJECT$(CC.SUFFIX.OBJECT) else if CC.SUFFIX.COMMAND $(T0) : .VIRTUAL $(T0)$(CC.SUFFIX.COMMAND) T0 := $(T0)$(CC.SUFFIX.COMMAND) end TP += .COMMAND$(CC.SUFFIX.OBJECT) end else TP += .OBJECT end end if "$(_hosttype_:N=uwin.*)" && $(>:V:N!=-l*:N=$(.LD.PREREQ.):O) > 1 error 3 only .ign or .def prerequisite is allowed. end if "$(_hosttype_:N=uwin.*)" && "$(.CCPRIMARYFLAGS.:N=$(CC.PIC))" && "$(<:N=*.*:N=$(<:B)$(CC.SUFFIX.DYNAMIC)|$(<:B)$(CC.SUFFIX.SHARED))" lib$(<:B:S=$(CC.SUFFIX.ARCHIVE)) :: $(>:V:N!=-l*) lib$(<:B:S=$(CC.SUFFIX.ARCHIVE)) : -COMMAND .ARCHIVE$(CC.SUFFIX.OBJECT) .LDLIBS. := $(>:V:N=-l*) $(<:B) : lib$(<:B:S=$(CC.SUFFIX.ARCHIVE)) $$(.SHARED. $(<:B) 1.0 $(>:V:N=-l*:N!=$(<)) $(>:V:N=-l*)) $$(BINDIR) :INSTALLDIR: $(<:B:S=$(CC.SUFFIX.DYNAMIC)) $$(LIBDIR) :INSTALLDIR: $(<:B:S=$(CC.SUFFIX.SHARED)) .BUILT. += def cfile else $(T0) : $(TP:V) if "$(@:V:?1??)" eval $$(T0) : $(@:V) end end if ! ( T1 = "$(.INSTALL.$(<:B:S):V)" ) for T2 $(.INSTALL.MAPS.) if "$(<:$(T2))" T1 = . break end end if ! T1 if ( T1 = "$(<:A<=.INSTALL.)" ) T1 := $(*$(T1):V) end end end if T1 && T1 != "." && T1 != "$(T0:V:D)" && T1 != "$(.INSTALL.$(<:B:S):V)" $(T1:V) :INSTALLDIR: $(T0) .DOUBLE.COLON.INSTALL : $(T1)/$(T0) $(<) end end let T1 = 1 while T1 <= 9 if T2 = "$(>:V:N=*.$(T1)?([A-Za-z]))" if ! "$(*$(T0):N=$(T2:V))" $$(MANDIR)$(T1) :INSTALLDIR: $(T2:V) end end let T1 = T1 + 1 end end /* * if no rhs then make all by default * otherwise add rhs to all */ ":ALL:" : .MAKE .OPERATOR if "$(>:V)" local T1 T2 T2 := $(~.ALL:V) .ORIGINAL.ALL. := $(T2:V) .ALL : .CLEAR for T1 $(T2) $(>:V) if "$(T1:A!=.IMMEDIATE|.TARGET)" T2 := $(".$(T1:F=%(upper)S)":A=.IMMEDIATE|.TARGET:A!=.ATTRIBUTE:N!=.ALARM|.SYNC|.BIND) if T2 T1 := $(T2) end end .ALL : $(T1:V) end if ! "$(~.MAIN)" .MAIN : .ALL end else .MAIN : .CLEAR .ALL end /* * (DEPRECATED) lhs builds rhs as a side effect */ ":BUILD:" : .MAKE .OPERATOR /* DEPRECATED */ $(<) : $(>) /* DEPRECATED */ eval /* DEPRECATED */ $$(>) : .JOINT .FORCE /* DEPRECATED */ $(@:V) /* DEPRECATED */ end /* DEPRECATED */ /* * lhs is a variable whose value is the result * of shell command substitution on the action * wrt prerequisites on the rhs */ ":COMMAND:" : .MAKE .OPERATOR .RETAIN : $(<) eval $$(<) : .SPECIAL .VIRTUAL .FUNCTIONAL $$(-mam:N=static*:?.ALWAYS .LOCAL??) $$(>) $(@:V) end /* * lhs is a copy of rhs */ ":COPY:" : .MAKE .OPERATOR $(<:V) : .SPECIAL .DO.COPY $(>:V) /* * lhs is a function */ ":FUNCTION:" : .MAKE .OPERATOR eval $$(<:V) : .SPECIAL .FUNCTION $$(>:V) $(@:V) end /* * install lhs from rhs */ ":INSTALL:" : .MAKE .OPERATOR local O R T L P if O = "$(>:N=*=*)" $(O) : .SPECIAL .VIRTUAL .DONTCARE end if T = "$(>:N=-*)" error 1 use {user,group,mode}=... instead of -{u,g,m}... T := $(T:/-u/user=/:/-g/group=/:/-m/mode=/) $(T) : .SPECIAL .VIRTUAL .DONTCARE O += $(T) end R := $(>:N!=-*|*=*) if ! "$(<:V)" if ! "$(R:V)" eval .DO.INSTALL : .USE $(@:V) end else .INSTALL : $(R) if "$(@:V)" eval $$(R) : $(@:V) end end end elif "$(.INSTALL.$(R:B:S))" != "." eval .INSTALL.$(R:B:S) = $(<:V:D) end if L = "$(*.INSTALL:I=$(*.DOUBLE.COLON.INSTALL))" && P = "$(*.DOUBLE.COLON.INSTALL:I=$(R))" T = $(*.INSTALL:N!=*/$(P)) .INSTALL : .CLEAR $(T) T = $(*.DOUBLE.COLON.INSTALL:N!=*/$(P)|$(P)) .DOUBLE.COLON.INSTALL : .CLEAR $(T) end if "$(<:V:D)" $(<:V:D) : .SPECIAL .SCAN.IGNORE .DO.INSTALL.DIR .INSTALL : $(<:V:D) end .INSTALL : $(<:V) if "$(R)" $(<:V) : .SPECIAL .SCAN.IGNORE $$("$(R)":N!=$$(<)|$$(<:P=U):@?$(O) $(R) .DO.INSTALL??) else $(<:V) : .SPECIAL .SCAN.IGNORE $$(<:B:S:N!=$$(<):@?$(O) $(R) $$(<:B:S) .DO.INSTALL??) end if "$(@:V)" eval $$(<:V) : $(@:V) end end end /* * install rhs into lhs dir */ ":INSTALLDIR:" : .MAKE .OPERATOR local O R T if O = "$(>:N=*=*)" $(O) : .SPECIAL .VIRTUAL .DONTCARE end if T = "$(>:N=-*)" error 1 use {user,group,mode}=... instead of -{u,g,m}... T := $(T:/-u/user=/:/-g/group=/:/-m/mode=/) $(T) : .SPECIAL .VIRTUAL .DONTCARE O += $(T) end R := $(>:N!=-*|*=*) if ! "$(<:V)" || "$(<:V)" == "." for T $(R) eval .INSTALL.$(T:B:S) = . end end elif ! "$(R)" $(<:V) : .SPECIAL .SCAN.IGNORE .DO.INSTALL.DIR $(>) .INSTALL : $(<:V) else for T $(R) eval .INSTALL.$(T:B:S) = $(T:D=$(<:V):B:S) :INSTALL: $(O) $(T) $(@:V) end end end /* * install in lhs dir using rhs pattern to select */ ":INSTALLMAP:" : .MAKE .OPERATOR if "$(<)" local T T := $(.GENSYM.) .INSTALL : $(<) $(T) $(<) : .SPECIAL .DO.INSTALL.DIR .INSTALL.MAPS. += $(>) eval $$(T) : .MAKE .FORCE .IGNORE local T for T $$(...:$(>):T=F:N!=$(<)/*) $$(T:D=$(<):B:S) : $$(T) .SPECIAL .SCAN.IGNORE .DO.INSTALL .INSTALL : $$(T:D=$(<):B:S) end end end /* * install $(PROTO) output of rhs in lhs dir */ ":INSTALLPROTO:" : .MAKE .OPERATOR eval $(<) :INSTALLDIR: $(>) $$(PROTO) -p $$(PROTOFLAGS) $$(*) > 1.$(tmp).x if $$(CMP) -s $$(<) 1.$(tmp).x then $$(RM) -f 1.$(tmp).x else $$(MV) 1.$(tmp).x $$(<) fi end /* * action jointly builds all targets on lhs wrt prerequisites on rhs */ ":JOINT:" : .MAKE .OPERATOR eval $$(<) : .JOINT $$(>) $(@:V) end /* * [ []] :LIBRARY: -l* */ ":LIBRARY:" : .MAKE .OPERATOR .PROBEINIT if "$(<:O=1:N=*/*)" error 3 $(<:O=1): not a valid target for :LIBRARY: end if "$(<:O=1)" == "lib*" error 1 $(<:O=1): If creating lib$(<:O=1:/^lib//) ONLY "$(<:O=1:/^lib//)" is needed as the target to :LIBRARY: end local L S .ALL : $(<:O=1) L := lib$(<:O=1)$(CC.PROFILE:O=1)$(CC.SUFFIX.ARCHIVE) eval $(L) :: $(>:V:N!=-l*) $(@:V) $(L) : -COMMAND .ARCHIVE$(CC.SUFFIX.OBJECT) S = $(>:V:N=-l*:/-l//) $(<:O>2) end if S if ! "$(S:N=$(<:O=1))" S := $(<:O=1) $(S) end eval $$(LIBDIR)/lib/$(<:O=1) :INSTALL: $(<:O=1).req $(<:O=1).req : (CC) (CCFLAGS) (LDFLAGS) set +x echo 'main(){return(0);}' > 1.$(tmp).c $$(CC) $$(CCFLAGS) -c 1.$(tmp).c && x=`$$(CC) $$(CCFLAGS) $$(LDFLAGS) -o 1.$(tmp).x 1.$(tmp)$(CC.SUFFIX.OBJECT) -l_NULL_$(tmp) 2>&1 | $(SED) -e 's/[][()+@?]/#/g' -e "s/_NULL_$(tmp)/\*/g" || :` && for i in $(S) do case $i in "$(<:O=1)"$(...:A=.ARCHIVE:A=.TARGET:N=lib*$(CC.SUFFIX.ARCHIVE):/^lib\(.*\)$(CC.SUFFIX.ARCHIVE)/|\1/:@/ //G)) ;; *) if test ! -f $$(LIBDIR)/lib$i$(CC.SUFFIX.ARCHIVE) $(*.SOURCE.%.ARCHIVE:@?$(*.SOURCE.%.ARCHIVE:/^\.$//:C+.*+-a ! -f &/lib$i$(CC.SUFFIX.ARCHIVE)+)??) then if test ! -f $$(LIBDIR)/lib$i$(CC.SUFFIX.SHARED) $(*.SOURCE.%.ARCHIVE:@?$(*.SOURCE.%.ARCHIVE:/^\.$//:C+.*+-a ! -f &/lib$i$(CC.SUFFIX.SHARED)+)??) then case `$$(CC) $$(CCFLAGS) $$(LDFLAGS) -o 1.$(tmp).x 1.$(tmp)$(CC.SUFFIX.OBJECT) $(*.SOURCE.%.ARCHIVE:C|^|-L|g) -l$i 2>&1 | $(SED) -e 's/[][()+@?]/#/g' || :` in $x) continue ;; esac fi fi ;; esac echo " -l$i" done > $$(<) $$(RM) $$(RMFLAGS) 1.$(tmp).* set -x end end .SHAREDLIBSUFFIX.:=$(<:O=2:?$(<:O=2)?1.0?) .SHAREDLIBNAME.+=$(sharedlibvers:N=1:?$(<:O=1).$(.SHAREDLIBSUFFIX.)?$(<:O=1)?) if "$(_hosttype_:N=uwin.*)" && "$(CCFLAGS:N=$(CC.PIC))" .BUILT. += def cfile end $(<:O=1) : $(L) $$(.SHARED. $(<:O=1) $(<:O=2:?$(<:O=2)?1.0?) $(S:N!=$(<:O=1):/^/-l/)) .SHARED. : .FUNCTION local D L S L := $(%:O>2) $(L) : .DONTCARE if "$(CCFLAGS:F=%(lower)S:N=$(CC.PIC:F=%(lower)S))" if !( "$(_hosttype_:N=uwin.*)" && "$(CCFLAGS:N=$(CC.PIC))" ) S := lib$(%:O=1)$(CC.SUFFIX.SHARED)$(sharedlibvers:N=1:?.$(%:O=2)??) $(S) : .SHARED.o lib$(%:O=1)$(CC.PROFILE:O=1)$(CC.SUFFIX.ARCHIVE) $(L) else S := $(%:O=1)$(sharedlibvers:N=1:?.$(%:O=2)??)$(CC.SUFFIX.SHARED) D := $(S:B:S=$(CC.SUFFIX.DYNAMIC)) end if L && CC.SUFFIX.STATIC for L $(L:T=F:P=B:/\(.*\)\$(CC.SUFFIX.SHARED)\(\.[0-9.]*\)$/\1$(CC.SUFFIX.STATIC)\2) while 1 if "$(L:T=F)" $(S) : $(L) break end if "$(L)" != "*.+([0-9])" break end L := $(L:/\.[0-9]*$//) end end end if $(sharedliblinks) && $(sharedlibvers) && !( "$(_hosttype_:N=uwin.*)" && "$(CCFLAGS:N=$(CC.PIC))" ) $$(LIBDIR) :INSTALLDIR: $(S) silent test -f $(<) || $(STDRM) -f $(<:D:B:D:B:D:B:S=$(CC.SUFFIX.SHARED)) silent test -f $(<:D:B:D:B:D:B:S=$(CC.SUFFIX.SHARED)) || $(STDLN) -s $(<:B:S) $(<:D:B:D:B:D:B:S=$(CC.SUFFIX.SHARED)) $(STDCP) $(*) $(<:C%\$(CC.SUFFIX.SHARED)\.%.to.%) $(STDRM) -f $(<) $(STDLN) -s $(<:B:S:C%\$(CC.SUFFIX.SHARED)\.%.to.%) $(<) if silent test -f $(<:C%\$(CC.SUFFIX.SHARED)\.%.no.%) then $(STDMV) $(<:C%\$(CC.SUFFIX.SHARED)\.%.no.%) $(<:C%\$(CC.SUFFIX.SHARED)\.%.oo.%) fi $(STDLN) $(<:C%\$(CC.SUFFIX.SHARED)\.%.to.%) $(<:C%\$(CC.SUFFIX.SHARED)\.%.no.%) $(STDRM) -f $(<) $(STDLN) -s $(<:B:S:C%\$(CC.SUFFIX.SHARED)\.%.no.%) $(<) $(STDRM) $(<:C%\$(CC.SUFFIX.SHARED)\.%.to.%) elif "$(_hosttype_:N=uwin.*)" && "$(CCFLAGS:N=$(CC.PIC))" .BUILT. += def cfile ARFLAGS := $(ARFLAGS)I $(D) $(S) $(CC.SUFFIX.DLL:/^/$(D:B)/) : .JOINT .SHARED$(CC.SUFFIX.SHARED) lib$(%:O=1)$(CC.PROFILE:O=1)$(CC.SUFFIX.ARCHIVE) $(L:V:O>1) $(*$(T):N=$(.LD.PREREQ.)) $$(BINDIR) :INSTALLDIR: $(D) $(LIBDIR)/$(%:O=1)$(CC.SUFFIX.SHARED) :INSTALL: $(S) else $$(LIBDIR) :INSTALLDIR: $(S) end end return $(S) $(D) .SHARED.o : .USE (LD) (LDFLAGS) $(LD) $(LDFLAGS) $(CC.SHARED) -o $(<) $(*:N=*.o:@Y??$$(CC.MEMBERS)?) $(*:O=1) $(*:O>1:N!=*$(CC.SUFFIX.ARCHIVE)|*$(CC.SUFFIX.SHARED)|.*) /* * link lhs to rhs */ ":LINK:" : .MAKE .OPERATOR local T U if "$(<:N=*/*)" .ALL : $(<:D) $(<) $(<:D) : .SPECIAL .DO.INSTALL.DIR $(<) : .DO.LINK $(>:V) else if U = "$(<:N!=/*)" .ALL : $(U) $(U) : .SPECIAL .DO.LINK $(>:V) end if ( T = "$(.INSTALL.$(>:B:S):V)" ) != "." && "$(>:A=.ARCHIVE|.COMMAND)" if ! T if "$(>:A=.ARCHIVE)" T = $(LIBDIR) else T = $(BINDIR) end end .INSTALL : $(U:D=$(T:V):B:S) $(<:N=/*) $(U:D=$(T:V):B:S) $(<:N=/*) : .SPECIAL .SCAN.IGNORE .DO.LINK $(>:D=$(T:V):B:S) end end /* * if rhs is dir then make recursively, else just make */ ":MAKE:" : .MAKE .OPERATOR local LHS RHS if ! ( LHS = "$(<)" ) LHS = .RECURSE .ALL .MAIN : $(LHS) end if ! ( RHS = "$(>:A!=.ATTRIBUTE)" ) RHS = * end eval $$(<) : $(@:V) end $(LHS) : $(>:A=.ATTRIBUTE) $$(.RECURSE.INIT. $(RHS)) /* * rhs are package names used in compilation * a package consists of a library and include directory * the most recent :PACKAGE: assertion takes highest precedence * .PACKAGE. is the ordered package list used to alter * .SOURCE.h, INCLUDEDIR, LDLIBRARIES and ancestor * ``-'' first in the rhs inhibits the INCLUDEDIR redefinition * $(PACKAGE__INCLUDE) explicit include for * $(PACKAGE__LIB) explicit lib dir for * $(PACKAGE_) root dir for include|lib for * $(PACKAGE) default root dirs for all packages * _PACKAGE_==1 state var defined for */ .PACKAGE. = ":PACKAGE:" : .MAKE .OPERATOR local T if ! "$(ancestor)" ancestor = 3 end for T $(>:N!=[-+]) eval _PACKAGE_$(T) == 1 end end if "$(>:O=1:N=[-+])" if ! .PACKAGE. && .INCLUDEDIR.ORIGINAL. INCLUDEDIR := $(.INCLUDEDIR.ORIGINAL.:V) end else if ! .INCLUDEDIR.ORIGINAL. .INCLUDEDIR.ORIGINAL. := $(INCLUDEDIR:V) end if "$(.INCLUDEDIR.ORIGINAL.:V)" == "\$\(INSTALLROOT\)/include" INCLUDEDIR := $(.INCLUDEDIR.ORIGINAL.:V)/$(>:O=1) end end if "$(>:N=+)" .PACKAGE. += $(>:N!=[-+]) else .PACKAGE. := $(>:N!=[-+]) $(.PACKAGE.) end /* * rhs compilation to place tables and/or data in * readonly text object section -- should go away * when C const is used/implemented to do same */ ":READONLY:" : .MAKE .OPERATOR .PROBEINIT local T for T $(>) if "$(@.READONLY$(T:S):V)" $(T:B:S=$(CC.SUFFIX.OBJECT)) : .SPECIAL .READONLY$(T:S) else error 1 READONLY not implemented for suffix $(T:S) end end /* * rhs are generated but still saved by save common actions */ ":SAVE:" : .MAKE .OPERATOR .COMMON.SAVE : $(>) /* * rhs are metarule patterns that do not generate % */ ":TERMINAL:" : .MAKE .OPERATOR .METARULE.X. : $(>) /* * external distribution workarounds * * target :WORKAROUND: target is empty * target :WORKAROUND: - target is .TERMINAL * target :WORKAROUND: prereq target symlinked or copied from prereq * target :WORKAROUND: prereq target from action applied to prereq * action */ ":WORKAROUND:" : .MAKE .OPERATOR if "$(>)" == "-" $(<) : .TERMINAL else eval $$(>) : .SCAN.NULL $$(<) : -TERMINAL $$(>) $(@:V:@?$$(@:V)?$$(>:@Y%$$$$(_feature_:N=ln-s:Y,$$$$$(LN) -s,$$$$$(CP),) $$$$(*)%: >%) $$$(<)?) end end /* * rhs are compiled using $(cc) rather than $(CC) * use like :: */ ":cc:" : .MAKE .OPERATOR .PROBEINIT if "$(CC)" != "$(cc)" .CLOBBER. += null.mo null.ms :: $(>) $(<) :: $(>:G=%.c:B:S=$(CC.SUFFIX.OBJECT)) $(>:G=%.c:B:S=$(CC.SUFFIX.OBJECT)) : .CLEAR .JOINT .DO.cc end .DO.cc : .USE .ALWAYS .LOCAL .FORCE .SYNCBEFORECCX $(-exec:?silent ??)$(MAKE) -f /dev/null EXTRASTATE=$(MAKEFILE) $(-) -g $(MAKEFILE) $(=) $(-debug:?-E cc??) $(<) CC=$(cc:@Q) CCFLAGS=$(CCFLAGS:VP:@Q) /* * make scripts */ .CLEARARGS : .MAKE .VIRTUAL .FORCE .ARGS : .CLEAR .SELECT. : .MAKE .VIRTUAL .FORCE .FUNCTIONAL local T X .UNION. : .CLEAR if T = "$(*.ARGS)" .ARGS : .CLEAR .MAIN.TARGET. := $(T:O=1:B:S) for X $(T) .UNION. : $(.FILES.$(X:B:S):T=F:T!=G) $(?$(X:B:S):T=F:P=S:T!=G) end else .UNION. : $(.FILES.:T=F:T!=G) .UNION. : $(...:T!=XS:T=F:P=S:T!=G) .UNION. : $(...:T=XSFA:T=F:P=S:T!=G) end return $(*.UNION.:$(select)) .OUTPUT. : .MAKE .VIRTUAL .FORCE .FUNCTIONAL local T T := $(.SELECT.) /* expand for .MAIN.TARGET. side effect */ return $(.MAIN.TARGET.|"files") .GENSYM.COUNT. = 0 .RETAIN : .GENSYM.COUNT. .SOURCE.LCL.INCLUDE. : .FUNCTION local L P D L := $(*.SOURCE.%.LCL.INCLUDE:I=$(!$(**):A=.LCL.INCLUDE:P=D)) if "$(prefixinclude)" && "$(nativepp)" .SOURCE.%.LCL.INCLUDE : $(!$(**):A=.PFX.INCLUDE:D:P=L<$(*.VIEW:O)) P := $(*.SOURCE.%.LCL.INCLUDE:I=$(!$(**):A=.PFX.INCLUDE:D)) end for D $(P) L += $(L:N=$(D):??$(D)?) end return $(L:/^/-I/) .GENSYM. : .FUNCTION let .GENSYM.COUNT. = .GENSYM.COUNT. + 1 return .GENSYM.$(.GENSYM.COUNT.). .INSTALL.LIST. : .FUNCTIONAL .FORCE .MAKE /* set noalias */ : $(!.INSTALL) .MAKE : $(~.INSTALL:A=.MAKE) return $(*.INSTALL) /* return $(*.INSTALL:N=$(INSTALLROOT)/*) $(*.INSTALL:N=$(INSTALLROOT)/*$(CC.SUFFIX.SHARED).+([0-9.]):/\.[0-9.]*$//) */ .CALLPROBE : .VIRTUAL .FORCE .REPEAT .FUNCTIONAL $(-silent:?set - && ??)$(PROBE) $(%) .LOCALPROBE : .MAKE .FORCE .REPEAT .FUNCTIONAL local PROBEBASE PROBEFILE PATHPROBE TOPPROBE CCPROBE if "$(localprobe:N!=vpath)" && ! "$(PROBEPATH)" error 3 PROBEPATH variable not set end PROBEBASE := lib/probe/C/$(%)/$(.CALLPROBE -k C $(%) "$(cctype)":B:S) PROBEFILE := $(VROOT:N!=.:/.*/&\//)$(PROBEBASE) PATHPROBE := $(localprobe:N=vpath:?$(PWD:P=R=$(PROBEFILE:T=F))?$(PROBEPATH:/:/ /G:X=$(PROBEBASE):T=F:O=1)?) TOPPROBE := $(localprobe:N=vpath:?$(VROOT:N!=.:/.*/&\//)../$("$(PWD)/$(VROOT)":P=A:B:S)/$(PROBEBASE)?$(PROBEPATH:/:/ /G:O=1)/$(PROBEBASE)?) if "$(PATHPROBE:N!=.)" && ( ! "$(-force)" || "$(PATHPROBE:N=$(PROBEFILE))" || "$(PATHPROBE:N=$(TOPPROBE))" ) CCPROBE := $(PATHPROBE:N!=$(PROBEFILE):??$(TOPPROBE)?O) else $(TOPPROBE:D) : .SPECIAL .DO.INSTALL.DIR mode=0775 .MAKE : $(TOPPROBE:D) $(-silent:?set - && ??)[ ! "$(-force)" ] || $(RM) -f $(TOPPROBE) CCPROBE := $(TOPPROBE) end PATHPROBE := $(cctype:@P=P=C,$(%),$(CCPROBE:P=A:C%/$(PROBEBASE)%%)) if "$(localprobe:N=vpath)" return $(PROBEBASE) else return $(CCPROBE) end .PROBEINIT : .MAKE .VIRTUAL .FORCE if ! cctype cctype := $(CC:N!=[!-]*=*) if ! cctype cctype = cc end end cctype := $(cctype:O=1:P=C) $(cctype:O>1) if ! ( .CC.PROBE. = "$(CC.PROBE)" ) if ! localprobe .CC.PROBE. := $(cctype:@P=P=C) else .CC.PROBE. := $(.LOCALPROBE make) end end .CC.TS. := $(.CC.PROBE.:T=R) .CC.PROBE. : .CLEAR .VIRTUAL $(.CC.PROBE.) (.CC.TS.) .MAKE error -1 probe information change $(.CC.PROBE.) : .SPECIAL .ACCEPT .DONTCARE (AR) (AS) (CPP) (CC) (LD) : .CC.PROBE. if .CC.PROBE. if "$(localprobe:N=vpath)" include "$(VROOT)/$(.CC.PROBE.)" else include "$(.CC.PROBE.)" end else error 1 $(cctype): C probe failed -- default assumed if ! CC.STDINCLUDE CC.STDINCLUDE = /usr/include end if ! nativepp nativepp = -1 end end if ! CC.SUFFIX.ARCHIVE CC.SUFFIX.ARCHIVE = .a end .ATTRIBUTE.%$(CC.SUFFIX.ARCHIVE) : .ARCHIVE if ! CC.SUFFIX.OBJECT CC.SUFFIX.OBJECT = .o end .ATTRIBUTE.%$(CC.SUFFIX.OBJECT) : .OBJECT if CC.SUFFIX.SHARED && "$(CC.SUFFIX.SHARED)" != "$(CC.SUFFIX.OBJECT)" .ATTRIBUTE.%$(CC.SUFFIX.SHARED) : .SHARED end if CC.SUFFIX.DYNAMIC .ATTRIBUTE.%$(CC.SUFFIX.DYNAMIC) : .SHARED end if "$(_hosttype_:N=uwin.*)" include "WIN32.mk" if ! "$(nativepp:N=1|/usr/lib)" error 1 warning: set nativepp=/usr/lib or 1 in shell environment for UWIN cpp support. end .UNBIND : WIN32.mk end local T P P := $(*.SOURCE.h:L<=*.c|*.C|*.cc|*.cpp|*.CPP|*.cxx|*.CXX) implicit_include_C_files := if "$(CC.DIALECT:N=IMPLICITC)" CC.IMPLICIT.INCLUDE.DISABLED= for T $(CC.IMPLICIT.INCLUDE.DISABLE) if "$(CCFLAGS:N=$(T))" CC.IMPLICIT.INCLUDE.DISABLED=1 break end end if ! "$(CC.IMPLICIT.INCLUDE.DISABLED)" && "$(CC.IMPLICIT.INCLUDE.DISABLE)" if "$(implicit_template_definition_warning)" error 1 $(implicit_template_definition_warning) end end if ("$(implicit_include)" || ! "$(CC.IMPLICIT.INCLUDE.DISABLED)" && "$(CC.IMPLICIT.INCLUDE.DISABLE)") && "$(P)" implicit_include_C_files := $(*.SOURCE.h:X=$(P):P=X) $(implicit_include_C_files) : .DONTCARE .SPECIAL end elif "$(CC.DIALECT:N=C++)" for T $(CC.IMPLICIT.INCLUDE.ENABLE) if "$(CCFLAGS:N=$(T))" if "$(implicit_template_definition_warning)" error 1 $(implicit_template_definition_warning) end break end end if ("$(implicit_include)" || ! "$(CC.IMPLICIT.INCLUDE.DISABLED)" && "$(CC.IMPLICIT.INCLUDE.DISABLE)") && "$(P)" implicit_include_C_files := $(*.SOURCE.h:X=$(P):P=X) $(implicit_include_C_files) : .DONTCARE .SPECIAL end end .MAKEINIT : .MAKE .VIRTUAL .FORCE local T1 T2 T3 T4 T5 .MAKE : .PROBEINIT if "$(_hosttype_:N=uwin.*)" MAKEPP = /usr/lib/cpp end if "$(instrument)" if ! ( instrument.root = "$(instrument:O=1:D:N!=.:T=F)" ) instrument.root := $(OPTDIRS:/:/ /G:X=$(instrument:O=1:B)/.:T=F:O=1) if ! instrument.root instrument.root = $(.INSTRUMENT.notfound) end end T2 := $(instrument:O=1:B) T1 := $(INSTRUMENT_$(T2)) if ! T1 || ! "$(T1:N!=*=*)" T4 = T5 = $(T2:F=%(upper)S)HOME for T3 $(T1:N=*=*:/command=/T4=/:/root=/T5=/) eval $(T3) end end if ! T4 T4 = CC CCFLAGS := $(CCFLAGS:N!=-g|-O*|-p*) -g end if "$(CC.INSTRUMENT:N=*$(instrument:B:S))" T1 := $(T4) = $($(T4):N=[!-]*=*) $(T5)=$(instrument.root) PATH=$(instrument.root):$PATH $($(T4):N!=[!-]*=*) $(CC.INSTRUMENT:N=*$(instrument:B:S):O=1) else T1 := $(T4) = $($(T4):N=[!-]*=*) $(T5)=$(instrument.root) $(instrument:D=$(instrument.root):B:S) $($(T4):N!=[!-]*=*) end end if T1 CC.READONLY = set expandview eval $(T1:V) end end end if "$(-mam:N=static*)" nativepp = -1 end CC.PROFILE := $(CC.PROFILE) if ancestor if "$(*.VIEW:O=2:P=I=..)" let ancestor = ancestor + 1 end if "$(-mam:N=static*)" T1 = .. let T2 = 1 while T2 < ancestor let T2 = T2 + 1 T1 := ../$(T1) end print -um setv INSTALLROOT $(T1) T4 = for T3 $(ancestor_list) if T4 $(T4) : $(T1)/$(T3) T4 = else T4 := $(T3) end end end T1 = .. let T2 = 0 while T2 < ancestor let T2 = T2 + 1 T4 = for T3 $(ancestor_list) if T4 $(T4) : $(T1)/$(T3) T4 = else T4 := $(T3) end end T1 := ../$(T1) end elif "$(-mam:N=static*)" print -um setv INSTALLROOT $(INSTALLROOT:N=..*(/*):?$(INSTALLROOT)?$HOME?) end if "$(-mam:N=dynamic*)" print -um setv INSTALLROOT $(INSTALLROOT:N=$(HOME):?$HOME?$(INSTALLROOT)?) end .MAMEDIT. = if "$(INSTALLROOT:N=..*(/*))" .MAMROOT. := $(INSTALLROOT) else .MAMROOT. := $(PWD:C@.*/src/@/src/@:C@/[^/]*@/..@G:C@/@@) end .SOURCE.h : $(*.SOURCE.c:N!=.) $(*.SOURCE:N!=.) $(".SOURCE .SOURCE.a .SOURCE.c .SOURCE.h $(...:N=.SOURCE.*:N!=*.%.*|*.INTERNAL|.SOURCE.)":H1)?) end if T4 T3 += -I-D$(T4:P=A) T5 += -I-D$(T4:P=A) end end end if "$(CC.DIALECT:N=TOUCHO)" && "$(CC.PRELINK)" T3 += $$(CC.PRELINK) /* must be set before -I list */ end T3 += $$(-targetcontext:?$$$(!$$$(*):A=.PFX.INCLUDE:@Y%$$$(<:P=U:D:T=*:P=L*:/^/-I/)%%)??) if "$(CCFLAGS:N=-I-)" || nativepp && ! "$(CC.DIALECT:N=-I-)" T3 += $$(*:A=.SCAN.c:@?$$$(*.SOURCE.%.LCL.INCLUDE:I=$$$$(!$$$$(*):A=.LCL.INCLUDE|.STD.INCLUDE:P=D):$(.CC.NOSTDINCLUDE.):/^/-I/)??) $$(&:T=D) if nativepp > 0 && ("$(-disableautomaticprobe:N=0)" || "$(CC)") error 1 local include files may be ignored by the native C preprocessor end else if !prefixinclude && !nativepp T3 += -D:noprefix end T3 += $$(*:A=.SCAN.c:@?$$$(.SOURCE.LCL.INCLUDE.) -I- $$$(*.SOURCE.%.STD.INCLUDE:I=$$$$(!$$$$(*):A=.STD.INCLUDE:P=D):$(.CC.NOSTDINCLUDE.):/^/-I/)??) $$(&:T=D) end if "$(CC.DIALECT:N=TOUCHO)" .TOUCHO : .MAKE .VIRTUAL .FORCE .REPEAT .AFTER .REBIND : $(*$(<<):N=*$(CC.SUFFIX.OBJECT)) .APPEND.%.COMMAND : .TOUCHO end if "$(instrument)" T3 += -D_INSTRUMENT_ end if "$(CCFLAGS:N=-[gG])" T3 += -D_TRACE_ end if T3 CCFLAGS &= $(T3:V) end T3 = if "$(CC.REPOSITORY)" && "$(CC.DIALECT:N=PTRIMPLICIT|PTRMKDIR)" T3 += $(T5:V) $$(CCFLAGS:N=-[D]*) $$(.PTR.PREREQS:A=.SCAN.c:@?$$$(*.SOURCE.%.LCL.INCLUDE:I=$$$$(.PTR.PREREQS:A=.LCL.INCLUDE:P=D):/^/-I/) -I- $$$(*.SOURCE.%.LCL.INCLUDE:I=$$$$(.PTR.PREREQS:A=.LCL.INCLUDE|.STD.INCLUDE:P=D):$(.CC.NOSTDINCLUDE.):/^/-I/)??) $$(&.PTR.CHECK:T=D) .APPEND.%.COMMAND : .PTR.CHECK .PTR.UPDATE T3 := $$(@:V:N=*$\(CC*(LD)\)*:@?$(T3:V)??) end if "$(CC.ARFLAGS)" .ARCHIVE.o : .CLEAR .USE .ARPREVIOUS (CC) (AR) $(.ARPREVIOUS.$(<:B:S):@?$(IGNORE) $$(AR) d $$(<) $$(.ARPREVIOUS.$$(<:B:S))$$("\n")??)$(CC) $(CC.ARFLAGS) $(CCLDFLAGS:N=-pt*) -o $(<) $(*) .SHARED.o : .CLEAR .USE (CC) $(CC) $(CC.SHARED) $(CCLDFLAGS:N=-pt*|-L*) -o $(<) $(<:A=.SHARED.DC:Y?$(*)?$(*$(**))?:N!=*$(CC.SUFFIX.ARCHIVE)|*$(CC.SUFFIX.SHARED)) .ATTRIBUTE.%.a : -ARCHIVE end .BIND : (IFFEFLAGS) IFFEFLAGS += $$(.IFFE.REF.) if ! IFFE_huh /* can't figure out why this .PARAMETER must be repeated */ (IFFEFLAGS) : .PARAMETER end if "$(-mam:N=static*)" LDFLAGS &= $(T3:V) else LDFLAGS &= $$(*.SOURCE.%.ARCHIVE:I=$$$(*:N=-l*:P=D):$(.CC.NOSTDLIB.):P=A:/^/-L/) $(T3:V) end M4FLAGS &= $$(*.SOURCE.%.M4.INCLUDE:I=$$$(!$$$(*):P=D):/^/-I/) $$(&:T=D) if sge_qrsh .COSHELL.INIT : set +x alias ignore='ignore ' function ignore { set +x integer argc=0 typeset argv state=exp while : do case $# in 0) break ;; esac case $1 in *=*) ;; *) state=arg ;; esac case $state in exp) argv[argc]=${1%%=*}="'${1#*=}'" ;; arg) argv[argc]="'"$1"'" ;; esac ((argc=argc+1)) shift done eval "${argv[@]}" return 0 } alias silent='set +x X$- "$@";_coshell_flags_=$1;shift;silent ' function silent { case $_coshell_flags_ in *x*) trap ' _coshell_status_=$? if ((_coshell_status_==0)) then set -x else set -x;(set +x;exit $_coshell_status_) fi' 0 ;; esac "$@" } typeset -xf ignore silent set -x; .QUOTE.SHELL. = :@C|\'|\'\\\'\'|g end if sge_qrsh && makelog .ACTIONWRAP : set +x ( __sf_STCLU=${TMPDIR:-/tmp}/stf$COTEMP echo 2 1>$__sf_STCLU trap 'set +x; trap "" 0; set -- `cat $__sf_STCLU` rm $__sf_STCLU exit ${1:-3}' 0 HUP INT QUIT TERM { trap 'set +x $?; trap "" 0 echo $1 >$__sf_STCLU exit $1' 0 HUP INT QUIT TERM ERR export PCOTEMP makelog PCOTEMP=$COTEMP makelog=$(makelog) $(-silent:??set -x?) $(<:A=.READ|.FUNCTIONAL|.SCAN:?$$(@)?silent echo '$$("$$(@.COSHELL.INIT)$$(@)"$(.QUOTE.SHELL.))' | $(QRSH) $(QRSHFLAGS) $(SGESHELL)?) : } 2>&1 $(<:A=.READ|.FUNCTIONAL:?>&9 ??) | taglines $(PCOTEMP|"1111111111") $(<:O=1) >&2 ) $(<:A=.READ|.FUNCTIONAL:?9>&1??) elif makelog /* * Define .ACTIONWRAP to create serialized build log, * so that output of each (possibly concurrent) action is * kept together in the output log. Also, at a higher level, * keep output of each (possibly concurrent) recursive make * together in output log. * There are 2 variants: * 1) .READ/.FUNCTIONAL actions. Since nmake reads stdout * of these actions, capture stderr only and preserve * original stdout. * 2) Normal actions (everything else). * * Use shell wrapper script nmakelog to run nmake with logging. * * Notes: we set and export makelog because it is not * automatically inherited when COSHELL=coshell. * The subshell preserves traps in the surrounding command * stream. */ .ACTIONWRAP : set +x ( __sf_STCLU=${TMPDIR:-/tmp}/stf$COTEMP echo 2 1>$__sf_STCLU trap 'set +x; trap "" 0; set -- `cat $__sf_STCLU` rm $__sf_STCLU exit ${1:-3}' 0 HUP INT QUIT TERM { trap 'set +x $?; trap "" 0 echo $1 >$__sf_STCLU exit $1' 0 HUP INT QUIT TERM ERR export PCOTEMP makelog PCOTEMP=$COTEMP makelog=$(makelog) $(-silent:??set -x?) $(@) : } 2>&1 $(<:A=.READ|.FUNCTIONAL:?>&9 ??) | taglines $(PCOTEMP|"1111111111") $(<:O=1) >&2 ) $(<:A=.READ|.FUNCTIONAL:?9>&1??) elif sge_qrsh .ACTIONWRAP : $(<:A=.READ|.FUNCTIONAL|.SCAN:?$$(@)?silent echo '$$("$$(@.COSHELL.INIT)$$(@)"$(.QUOTE.SHELL.))' | $(QRSH) $(QRSHFLAGS) $(SGESHELL)?) end /* * map unknown command line targets to common actions */ for T3 .ARGS .MAIN T2 := $(~$(T3):V) eval .ORIGINAL$(T3). = $(T2:V) end $(T3) : .CLEAR for T1 $(T2) if "$(T1:A!=.IMMEDIATE|.TARGET)" T2 := $(".$(T1:F=%(upper)S)":A=.IMMEDIATE|.TARGET:A!=.ATTRIBUTE) if T2 T1 := $(T2) end end $(T3) : $(T1:V) end end /* * check make recursion limits */ if recurse > 0 T1 = 0 T2 = while T1 < recurse T2 += .SEMAPHORE let T1 = T1 + 1 end .RECURSE.SEMAPHORE : $(T2) end if ccase_audit ccase_view :COMMAND: silent ignore $(CLEARTOOL) pwv 2>/dev/null if !"$(ccase_view)" error 2 $(CLEARTOOL) error: $(CLEARAUDIT) canceled elif "$(ccase_view:N=NONE)" error 2 ERROR: Not in a dynamic view else if ccase_message error 1 $(ccase_message) end .ACTIONWRAP : $(<:A=.NOCCASEAUDIT|.READ|.FUNCTIONAL:?$$(@)?silent echo " set +x; alias silent='set +x X$- "$$@";shift;silent ';alias ignore='ignore '; set -x;"'$$(@:C|\'|\'\\\'\'|g)' | $(CLEARAUDIT) -x) end end /* * check and add .exe to the variables specified in .WINDOWSEXE. * on Interix if necessary */ if "$(_hosttype_:N=interix.*)" local VAREXE ARGCOUNTER CMDARG for VAREXE $(.WINDOWSEXE.:@/:/ /g) let ARGCOUNTER = 0 for CMDARG $($(VAREXE)) if ARGCOUNTER == 0 if "$(CMDARG:F=L:N=*.exe)" eval $(VAREXE) = $(CMDARG) end else if "$(CMDARG:B:S:F=U)" == "$(CMDARG:B:S)" eval $(VAREXE) = $(CMDARG).EXE end else eval $(VAREXE) = $(CMDARG).exe end end end else eval $(VAREXE) = $($(VAREXE)) $(CMDARG) end end let ARGCOUNTER = ARGCOUNTER + 1 end end end .PTR.LOCAL = .PTR.OPTIONS. : .CLEAR .FUNCTION .PTR.INIT if ! "$(.PTR.LOCAL)" .PTR.LOCAL := $(*.SOURCE.ptr:N!=.:O=1) elif "$(.PTR.LOCAL)" != "$(*.SOURCE.ptr:N!=.:O=1)" .UNBIND : $(.PTR.LOCAL) .BIND : $(.PTR.LOCAL) end .UNION : .CLEAR $(*.SOURCE.ptr:N!=.:O=1) $(*.SOURCE.ptr:N!=.:O>1:T=F) return $(*.UNION:@N!=$(CC.REPOSITORY):$(CC.DIALECT:N=PTRIMPLICIT:?D??):/^/-ptr/) .PTR.DONTCARE : .MAKE .VIRTUAL .IGNORE .FORCE .DONTCARE.% : .FUNCTION if "$(<:T=M:N=.PTR.CHECK)" return ok end .PTR.CHECK : .VIRTUAL .PTR.INIT .IGNORE .PTR.DONTCARE $$(.PTR.LIST.) .PTR.INIT : .MAKE .VIRTUAL .FORCE .IGNORE local X .PTR.DIR. := $(~.SOURCE.ptr:N!=.:O=1) $(.PTR.DIR.) : .MAKE .IGNORE if "$(^)" $(^) : -MAKE X := $("defmap":D=$(^):B:S:T=F) .MAKE : $(MKDIR) $(<) 2>/dev/null $(X:?&& $(CP) -p $(X) $(<)) end .MAKE : $(.PTR.DIR.) $(.PTR.DIR.) : -MAKE .PTR.UPDATE : .MAKE .VIRTUAL .FORCE .REPEAT .AFTER .PTR.CHECK : .CLEAR .VIRTUAL .IGNORE $$(.PTR.LIST.) .UNBIND : $(*.PTR.CHECK) .MAKE : .PTR.CHECK .PTR.LIST. : .FUNCTION local D .UNION : .CLEAR .UNBIND : $(*.SOURCE.ptr) for D $(*.SOURCE.ptr:N!=.) .UNION : $(D:T=F:L<=:D=$(D):B:S) end $(*.UNION) : .TERMINAL /* why remove? - edited by cgo for D $(*.UNION:N=*.c) $(D:D:B:S=$(CC.SUFFIX.OBJECT)) : $(D) $(<<<:N=.PTR.UPDATE:??$$(<:T=F:D:P=L:Y%$$(RM) $$(RMFLAGS) $$(<)%%)?) end */ return $(*.UNION) .NOSTATEFILE : .MAKE .VIRTUAL .FORCE set nowritestate .SETARGS : .MAKE .VIRTUAL .FORCE if ! "$(*.ARGS)" .ARGS : $(*.MAIN) end .MAMACTION. : .FUNCTION if ! .MAMEDIT. local P for P $(.MAMPACKAGE.) .MAMEDIT. := $(.MAMEDIT.)@C%$($(P))%$("$"){$(P)}%G: end if P = "$(.MAMROOT.:C@\.@\\.@G)" .MAMEDIT. := $(.MAMEDIT.)@C%$(P)%$("$"){INSTALLROOT}%G: end end return $(%:$(.MAMEDIT.)) .MAMNAME. : .FUNCTION if "$(%)" == ".[A-Z]*" && "$(%)" != ".INIT|.DONE" return $(%:/.//:F=%(lower)S) end if "$(%)" == "/*|$(.MAMROOT.)/*)" return $(.MAMACTION. $(%)) end if "$(%)" == "-l+([a-zA-Z0-9_])" && "$(-mam:N=*,port*)" return $(%:/-l\(.*\)/${mam_lib\1}/) end .UPDATE : .UPDATE0 $$(UTIME:??($$(<<))?) .UPDATE0 : .MAKE .VIRTUAL .FORCE local T1 T2 T1 := $(.SOURCES.) .SOURCES. = $(>) eval $$(UTIME:??($(<<<))?) : .CLEAR $$(T1) $$(@$(<<<:/\.U/./)) end .UPDATE.FILE : .MAKE .VIRTUAL .FORCE if ! "$(UTIME)" UTIME := $(output:D:B:S=$(<<:/\.U/./:F=%(lower)S)) end /* * common actions * * if the first command line target is not a known atom then * the function .UNKNOWN translates the atom name to upper * case preceded by a dot in an attempt to yield one of the * common actions described below * * $(clobber) clobber old files if non-null * $(select) edit op source file selector * * .COMMON.SAVE prerequisite of all common save actions * * $(.BUILT.) list of built targets * $(.CLOBBER.) list of additional files to clobber * $(.DIR.) current directory via .RECURSE * $(.FILES.) all :: source files * $(.FILES.targ) source files for :: target targ * $(.MAIN.TARGET.)first :: target name * $(.MANIFEST.) all source and miscellaneous files * $(.OUTPUT.) common action output base name * $(.ORIGINAL.ARGS.) original command line args * $(.SELECT.) list of all or selected source files * $(.SOURCES.) non-generated source files in $(.SELECT.) * $(UTIME) time stamp file for .U* actions */ .ALL : .RETAIN : .BASE. .BASE.VERIFY : .MAKE .VIRTUAL .FORCE .REPEAT if ! "$(.BASE.)" error 3 $(save_out:D:B): no base archive for delta end .BASE.UPDATE : .MAKE .VIRTUAL .FORCE local B N N := $("":T=R:F=%(%y%m%d)T) if ( B = "$(N:T=F)" ) error $(-force:?1?3?) $(B): base archive already generated end .BASE. := $(N) .BASE : .BASE.UPDATE .COMMON.SAVE $(PAX) -w -f $(.BASE.) -z - $(PAXFLAGS) $(.MANIFEST.) .DELTA : .BASE.VERIFY .COMMON.SAVE $(PAX) -w -f $("":T=R:F=%(%y%m%d)T).$(.BASE.) -z $(.BASE.) $(PAXFLAGS) $(.MANIFEST.) .CC- : .ONOBJECT $$(*.SOURCE:L<=cc-*) .CC+ : .ONOBJECT $$(*.SOURCE:L<=cc+*) .CCA- : .ONOBJECT $$(*.SOURCE:L<=cca-*) .CCA+ : .ONOBJECT $$(*.SOURCE:L<=cca+*) .CC.NOOPTIMIZE : .MAKE .LOCAL CCFLAGS := $(CCFLAGS:VP:N!=-O) .COMMON.SAVE : .NULL .VIRTUAL .IGNORE .FOREGROUND .CLEAN : .CLEARARGS .ONOBJECT $(IGNORE) $(RM) $(RMFLAGS) $(.BUILT.:A=.REGULAR:A!=.ARCHIVE|.COMMAND|.SHARED:N!=*.(m[klos]|db$(CC.SUFFIX.SHARED:?|$(CC.SUFFIX.SHARED:/\.//).*??))$(cleanignore:?|($(cleanignore))??)) .CLOBBERIGNORE. = $(MAKEFILE) $(MAKERULES:D:B:S=.mo) $(clobberignore) .CLOBBER.LIST. : .FUNCTION if "$(case_sensitive_file_system:N=0)" return $(.BUILT.:A=.REGULAR:F=L:N!=$(.CLOBBERIGNORE.:F=L:C/ /|/g)|$(.CLOBBER.:C/ /|/g)) else return $(.BUILT.:A=.REGULAR:N!=$(.CLOBBERIGNORE.:C/ /|/g)|$(.CLOBBER.:C/ /|/g)) end .CLOBBER : .CLEARARGS .ONOBJECT .NOSTATEFILE $(IGNORE) $(RM) $(RMFLAGS) $(.CLOBBER.:T=F:P=L) $(.CLOBBER.LIST.) .CLOBBER.INSTALL : .ONOBJECT $(IGNORE) $(RM) $(RMFLAGS) -r $(.INSTALL.LIST.:T=F:P=L:A=.REGULAR) if CPIO .CPIO : .COMMON.SAVE echo $(.MANIFEST.) | tr ' ' '\012' | $(CPIO) -o $(CPIOFLAGS) > $(output:D:B:S=.cpio) end if CTAGS .CTAGS : $(CTAGS) $(CTAGSFLAGS) $(.SOURCES.:N=*.[cfhly]) end if VGRIND .GRIND : $(CTAGS:@?.GRINDEX?.COMMON.SAVE?) $(VGRIND) $(VGRINDFLAGS) $(.SOURCES.:N=*.[chly]|*.mk|$(MAKEFILE)) $(LPR:@?| $$(LPR) $$(LPRFLAGS)??) if CTAGS .GRINDEX : .COMMON.SAVE $(CTAGS) $(CTAGSFLAGS) -v $(.SOURCES.:N=*.[chly]) | sort -f >index $(VGRIND) $(VGRINDFLAGS) -x index $(LPR:@?| $$(LPR) $$(LPRFLAGS)??) end end .INSTALL : .ALL .ONOBJECT .LINT : .MAKE .VIRTUAL .FORCE .SETARGS local T1 T2 LINT1ARGS set nojobs nowritestate override if "$(_release_:N=research|V)" if "$(_release_:N=V)" LINT1FLAGS += -H$$(<<:B:S=.lh) else LINT1FLAGS += -S$$(<<:B:S=.lh) end LINT1ARGS = $(*$(<):G=%$(<:S):O=2:??$(>)?O) end .LINTLIBRARIES. = $(*:A=.ARCHIVE) $(LINTLIBRARIES) .SOURCE.ln : $(LINTLIB) .INSERT.%.ARCHIVE .INSERT.%.COMMAND : .DO.NOTHING $$(<:A=.TARGET:?.LINT0??) .LINT0 : .VIRTUAL .FORCE $(SILENT) $(RM) $(RMFLAGS) $(<<:B:S=.l[hn]) for T1 % %.o for T2 $(.METARULE.I.$(T1)) $(T1) : $(T2) .NULL end end eval %.o : %.c .FORCE set - $(_release_:N=V:??echo $$$(>):$$$("\n")?){ $$(CPP) $$(CPPFLAGS) -C -Dlint $$(>) | $$(LINT1) $$(LINT1FLAGS) $$(LINTFLAGS) $(LINT1ARGS:V) >> $$(<<:B:S=.ln) ;} 2>&1 end .ARCHIVE.o : .CLEAR .USE $(SILENT) $(RM) $(RMFLAGS) $(<:B:S=.lh) if "$(_release_:N=V)" .COMMAND.o : set - cat $(<:B:S=.ln) $(.LINTLIBRARIES.:B:S=.ln:/lib\(.*\)/& llib-l\1/:T=F) > $(TMPDIR)/l$$.ln $(LINT2) -T$(TMPDIR)/l$$.ln $(<:B:S=.lh:T=F:/^/-H/) $(LINTFLAGS) $(RM) $(RMFLAGS) $(TMPDIR)/l$$.ln $(<:B:S=.l[hn]) elif "$(_release_:N=research)" .COMMAND.o : set - echo $(<):: cat $(<:B:S=.ln) $(.LINTLIBRARIES.:B:S=.ln:/lib\(.*\)/& llib-l\1/:T=F) > $(TMPDIR)/l$$.ln $(LINT2) $(TMPDIR)/l$$.ln -S$(<:B:S=.lh) $(LINTFLAGS) $(RM) $(RMFLAGS) $(TMPDIR)/l$$.ln $(<:B:S=.l[hn]) else .COMMAND.o : set - echo $(<):: cat $(<:B:S=.ln) $(.LINTLIBRARIES.:B:S=.ln:/lib\(.*\)/& llib-l\1/:T=F) > $(TMPDIR)/l$$.ln $(LINT2) $(TMPDIR)/l$$.ln $(LINTFLAGS) $(RM) $(RMFLAGS) $(TMPDIR)/l$$.ln $(<:B:S=.l[hn]) end .LIST.GENERATED : .ONOBJECT .ALWAYS silent echo "$(.INSTALL.LIST.:T=F:P=L:A=.REGULAR:/$/$("\n")/G)" "$(.CLOBBER.:T=F:P=L:/$/$("\n")/G)" "$(.BUILT.:A=.REGULAR:/ /$("\n")/G)" .LIST.INSTALL : .ONOBJECT .ALWAYS silent echo "$(.INSTALL.LIST.:$(INSTALLROOT:N=.:?T=F?N=$(INSTALLROOT)/*:C%$(INSTALLROOT)/%%):C% %$("\n")%G)" .LIST.SHIP : .ONOBJECT .ALWAYS ( cd $(INSTALLROOT); ls -d $(.INSTALL.LIST.:N=$(INSTALLROOT)/*:C%$(INSTALLROOT)/%%:C%$(CC.SUFFIX.ARCHIVE:/\./\\./g)$%.*%) ) | sort -u .LIST.SOURCE : .ONOBJECT .ALWAYS silent echo "$(.MANIFEST.:/ /$("\n")/G)" .LIST.SYMBOLS : .ALWAYS lib="$(...:A=.ARCHIVE:A=.TARGET:T=F:N!=*[-/]*)" for lib in $lib do $(NM) $(NMFLAGS) $lib | $(SED) $(NMEDIT) $(CC.SYMPREFIX:?-e 's/^$(CC.SYMPREFIX)//'??) | sort -u done if LPROF .LPROF : .MAKE .VIRTUAL .FORCE .ONOBJECT .SETARGS local T1 T2 set force noscan nowritestate override .INSERT.%.COMMAND : .LPROF0 .LPROF1 $$(<:B:S=.cnt) .LPROF0 : .MAKE .VIRTUAL .FORCE .LPROFFILES. = .LPROF1 : .AFTER .IGNORE $$(<<:B:S=.cnt) $(LPROF) $(LPROFFLAGS) -r "$(.LPROFFILES.:/^ //)" -o $(<<) -c $(*) for T1 % %.o for T2 $(.METARULE.I.$(T1)) $(T1) : $(T2) .NULL end end %.o : %.c .MAKE .LPROFFILES. += $(>) .ARCHIVE.o .COMMAND.o : .NULL end .OFFICIAL : .ONOBJECT $(*.VIEW:O=2:@?$$(.SOURCES.:P=L=0:C@.*@{ echo "=== & $$(&:T=R:F=%T) ==="; $$(DIFF) $$(DIFFFLAGS) $$(*.VIEW:O=2)/& & || true; } >> $(official_out); $$(MV) & $$(*.VIEW:O=2)/&;@)?: no lower view?) .PAX : .COMMON.SAVE $(PAX) -w -f $(save_out:D:B:S=.pax) $(PAXFLAGS) $(.MANIFEST.) .PRINT : .COMMON.SAVE $(PR) $(PRFLAGS) $(.SOURCES.:N!=*.[0-9]*([!./])) $(LPR:@?| $(LPR) $(LPRFLAGS)??) .SAVE : .COMMON.SAVE $(PAX) -w -f $(save_out:D:B:S=.$("":T=R:F=%(%y%m%d)T)) $(PAXFLAGS) $(.MANIFEST.) .SHAR : .COMMON.SAVE $(SHAR) $(SHARFLAGS) $(.MANIFEST.) > $(save_out:D:B:S=.shar) .TAR : .COMMON.SAVE $(TAR) cf$(TARFLAGS) $(save_out:D:B:S=.tar) $(.MANIFEST.) if CPIO .UCPIO : .COMMON.SAVE .UPDATE.FILE .UPDATE end .UPRINT : .COMMON.SAVE .UPDATE .UTAR : .COMMON.SAVE .UPDATE.FILE .UPDATE /* * make abstract machine support */ .MAM.LOAD : .MAKE .VIRTUAL .FORCE set noreadstate reread strictview if "$(-mam:N=static*)" INSTALLROOT = $(.MAMROOT.) end .MAKEINIT : .MAM.INIT .MAM.INIT : .MAKE .VIRTUAL .FORCE .AFTER local T if "$(-mam:N=*,port*)" CC.DIALECT = CC.DYNAMIC = CC.PIC = ${mam_cc_PIC} CC.SHARED = CC.STATIC = end print -um setv AR ar AR = ${AR} print -um setv ARFLAGS cr ARFLAGS = cr print -um setv AS as AS = ${AS} print -um setv ASFLAGS ASFLAGS = ${ASFLAGS} print -um setv CC $(-mam:N=static*,port*:?$(cctype:O=1:B:S)?$(CC)?) CC = ${CC} print -um setv CCFLAGS $(CCFLAGS:VP:@Y&"$(CCFLAGS:VP:C/\\/\\\\/G:C/\"/\\\"/G)"&&) CCFLAGS = ${CCFLAGS} print -um setv COTEMP $$ print -um setv CPIO cpio CPIO = ${CPIO} print -um setv CPIOFLAGS CPIOFLAGS = ${CPIOFLAGS} print -um setv CPP "${CC} -E" CPP = ${CPP} print -um setv F77 f77 F77 = ${F77} print -um setv HOSTCC ${CC} print -um setv IGNORE INSTALLROOT = ${INSTALLROOT} print -um setv LD ld LD = ${LD} print -um setv LDFLAGS $(LDFLAGS:VP:@Y&"$(LDFLAGS:VP)"&&) LDFLAGS = ${LDFLAGS} if "$(-mam:N=*,port*)" LDFLAGS &= $$(*.SOURCE.%.ARCHIVE:I=$$$(*:N=${mam_lib+([a-zA-Z0-9_])}:P=D):$(.CC.NOSTDLIB.):/.*/${mam_cc_L+-L&}/) end print -um setv LEX lex LEX = ${LEX} print -um setv LEXFLAGS LEXFLAGS = ${LEXFLAGS} print -um setv LPR lpr LPR = ${LPR} print -um setv LPRFLAGS LPRFLAGS = ${LPRFLAGS} M4 = ${M4} print -um setv M4FLAGS $(M4FLAGS:VP:@?"$(M4FLAGS:VP)"??) M4FLAGS = ${M4FLAGS} print -um setv MAKE nmake MAKE := $(-never:?${MAKE}?$$$(<:A=.ALWAYS:@Y%$(MAKE)%${MAKE}%)?) print -um setv MAKEFLAGS MAKEFLAGS = ${MAKEFLAGS} print -um setv PR pr PR = ${PR} print -um setv PRFLAGS PRFLAGS = ${PRFLAGS} print -um setv SHELL /bin/sh SHELL = ${SHELL} print -um setv SILENT print -um setv TAR tar TAR = ${TAR} print -um setv YACC yacc YACC = ${YACC} print -um setv YACCFLAGS -d YACCFLAGS = ${YACCFLAGS} .ARUPDATE : $(<<:A=.ARCHIVE:?(ranlib $$(<<)) >/dev/null 2>&1 || true??) .ARCLEAN : .NULL .DO.INSTALL : { $(MV) $(<) $(<).old 2>/dev/null; $(CP) $(*) $(<) 2>/dev/null $(.DO.INSTALL.OPT.) ;} || true for T .READONLY.* $(T) : .CLEAR .NULL .VIRTUAL end /* * local installation info */ include "Makeinstall.mk" /* * By default, case_sensitive_file_system is 0 on UWIN. */ if "$(_hosttype_:N=uwin.*)" case_sensitive_file_system = 0 end /* * By default, .WINDOWSEXE. = JAVAC:JAR on Interix. */ if "$(_hosttype_:N=interix.*)" .WINDOWSEXE. = JAVAC:JAR end /* * local additions */ include - "Localrules.mk"