1rules 2 3/* 4 * Glenn Fowler 5 * AT&T Research 6 * 7 * default make base rules 8 * 9 * conventions: 10 * 11 * internal make rule names match the RE \.[.A-Z][.A-Z0-9]* 12 * internal make variable names match the RE \.[.A-Z][.A-Z0-9]*\. 13 * internal make operator names match the RE :[A-Z]*: 14 * use $(tmp) (10 chars max) to generate shell tmp file names 15 * every (non-builtin shell) command should use a make variable 16 * the flags for command $(XYZ) are $(XYZFLAGS) 17 */ 18 19.ID. = "@(#)$Id: Makerules (AT&T Research) 2012-06-08 $" 20 21.RULESVERSION. := $(MAKEVERSION:@/.* //:/-//G) 22 23/* 24 * handy attributes 25 */ 26 27.FUNCTION : .USE .ATTRIBUTE .MAKE .FUNCTIONAL .VIRTUAL .FORCE .REPEAT 28 29.ANCESTOR.LIST = $(-ancestor-source) .SOURCE.a lib .SOURCE.h include 30tmp = ${COTEMP} 31 32/* 33 * rule option definitions 34 */ 35 36set option=';all-static;bp;-;Force the prerequisite libraries of static \b+l\b\aname\a library references to be static.' 37set option=';ancestor;n;-;Set the ancestor search directory depth to \adepth\a. \bMAKEPATH\b and variant recursive invocations may increase the depth.;depth:=3' 38set option=';ancestor-source;s;-;A list of \b.SOURCE\b\a.suffix\a \adirectory\a pairs added to the ancestor directory search.;.SOURCE.suffix directory...:=$(.ANCESTOR.LIST)' 39set option=';archive-clean;s;-;A catenation of edit operators that selects archive member files to be removed after being added to the archive.;edit-ops' 40set option=';archive-output;s;-;The output file name for archiving actions (\bpax\b, \bsave\b, \btgz\b, etc.) The default is based on the current directory and the VERSION variable.;file' 41set option=';cctype;s;-;Set the \bprobe\b(1) C compiler type identifier. The default value is based on the \bCC\b variable. To disable the C probe use \b--cctype=-\b or set \bCC=""\b.;[type]' 42set option=';clean-ignore;s;-;Ignore \bclean\b action generated target files matching \apattern\a.;pattern' 43set option=';clobber;sv;-;Replace existing \binstall\b action targets matching \apattern\a instead of renaming to \atarget\a\b.old\b.;pattern:!*' 44set option=';compare;b;-;Ignore \binstall\b action targets whose contents have not changed. On by default.' 45set option=';debug-symbols;bp;-;Compile and link with debugging symbol options enabled.' 46set option=';force-shared;b;-;Do not ignore \b-l\b\aname\a shared library reference modification times.' 47set option=';instrument;s;-;Enable compile-time, link-time and/or run-time code instrumentation. Instrumentation interfaces that replace the compiler command, and the \bapp\b, \binsight\b, \bpurecov\b, \bpurify\b, \bquantify\b and \bsentinel\b special-need interfaces, are supported.;command' 48set option=';ld-script;s;-;A space-separated list of suffixes of script files to be passed to the linker.;suffix' 49set option=';lib-type;bp;-;Bind library references to \b--debug-symbols\b or \b--profile\b specific variants.' 50set option=';link;s;-;Hard link \binstall\b action targets matching \apattern\a instead of copying.;pattern' 51set option=';local-static;bp;-;Compile and link against static library targets. The default links against shared library targets, but care must be taken to point runtime shared library binding to the current directory when executing command targets in the current directory.' 52set option=';native-pp;np;-;Force the use of the native C preprocessor and print a \alevel\a diagnostic message noting the override.;level' 53set option=';official-output;s;-;The \bdiff\b(1) log file name for the \bofficial\b action. If \afile\a is a relative path name then it is written in the next view level.;file:=OFFICIAL' 54set option=';prefix-include;b;-;Override the C preprocessor prefix include option. \b--noprefix-include\b may be needed for some compilers that misbehave when \b$$(CC.INCLUDE.LOCAL)\b is set and \b#include "..."\b assumes the subdirectory of the including file. The default value is based on the \bprobe\b(1) information.' 55set option=';preserve;sv;-;Move existing \binstall\b action targets matching \apattern\a to the \bETXTBSY\b subdirectory of the install target.;pattern:!*' 56set option=';profile;b;-;Compile and link with \bprof\b(1) instrumentation options enabled.' 57set option=';recurse;sa;-;Set the recursive \b:MAKE:\b \aaction\a:;[action:=1]{[+combine?Combine all recursive makefiles into one rooted at the current directory. \b::\b, \b:PACKAGE:\b, \b.SOURCE\b*, and \bLDLIBRARIES\b are intercepted to adjust relative directory and library references. Complex makefile hierarchies may not be amenable to combination.][+implicit?All makefiles in all subdirectories are treated as if they contained \b:MAKE:\b.][+list?List the recursion directories, one per line, on the standard output and exit. A \b-\b prerequisite separates groups that may be made concurrently and a \b+\b prerequisite separates leaf directories from intermediate directories.][+only?Disable component closure and operate on explicit prerequisites only.][+prereqs?List the recursion directory dependencies as a makefile on the standard output and exit.][+\anumber\a?Set the directory recursion concurrency level to \anumber\a.]}' 58set option=';recurse-enter;s;-;\atext\a prependeded to the \adirectory\a\b:\b message printed on the standard error upon entering a recursive \b:MAKE:\b directory.;text' 59set option=';recurse-leave;s;-;\atext\a prependeded to the \adirectory\a\b:\b message printed on the standard error upon leaving a recursive \b:MAKE:\b directory. If \b--recurse-leave\b is not specified then no message is printed upon leaving \b:MAKE:\b directories.;text' 60set option=';select;s;-;A catenation of edit operators that selects terminal source files.;edit-ops' 61set option=';separate-include;b;-;Allow \b$$(CC.INCLUDE.LOCAL)\b to be used with compilers that support it. On by default. If \b--noseparate-include\b is set then \b$$(CC.INCLUDE.LOCAL)\b will not be used, even if the current compiler supports it.' 62set option=';shared;bp;-;Set \b:LIBRARY:\b to generate shared libraries (dlls).' 63set option=';static-link;bp;-;Compile and link with a preference for static libraries.' 64set option=';strip-symbols;b;-;Strip link-time static symbols from executables.' 65set option=';threads;b;-;Compile and link with thread options enabled. Not implemented yet.' 66set option=';variants;sv;-;Select only \bcc-\b\avariant\a directories matching \apattern\a.;pattern:!*' 67set option=';view-verify;n;-;Verify that all view root directories exist. If there are any missing directories then a \alevel\a diagnostic is printed.;level' 68set option=';virtual;b;-;Allow \b:MAKE:\b to \bmkdir\b(1) recursive directories that do not exist in the top view. On by default. If \b--novirtual\b is set then \b:MAKE:\b warns about but ignores virtual recursive directories.' 69 70/* 71 * rule option defaults 72 */ 73 74set all-static:=1 75set archive-output:=$$(PWD:N=*[0-9].[0-9]*|*-$(VERSION:@N!=-):?$$(PWD:B:S:/---*\\([^-]*\\)/-\\1/)?$$(VERSION:@N!=-:Y%$$(PWD:B:S)-$$(VERSION)%$$(PWD:B)%)?) 76set compare:=1 77set lib-type:=1 78set official-output:=OFFICIAL 79set preserve:=$$(CC.SUFFIX.SHARED:+$$(CC.PREFIX.SHARED)*$$(CC.SUFFIX.SHARED).*)|$$(CC.SUFFIX.DYNAMIC:+$$(CC.PREFIX.DYNAMIC)*$$(CC.SUFFIX.DYNAMIC)) 80set recurse:=1 81set separate-include:=1 82set virtual:=1 83 84/* 85 * name=value => --option compatibility 86 */ 87 88.OPTION.COMPATIBILITY : .MAKE .VIRTUAL .FORCE 89 local N O 90 if .MAKEVERSION. < 20121221 91 O = 92 N = 93 if ! "$(-?clobber)" && "$("clobber":T=QV)" 94 O += clobber=$(clobber) 95 if clobber == "1" 96 N += --clobber 97 elif clobber == "0" 98 N += --noclobber 99 else 100 N += --clobber=$(clobber) 101 end 102 end 103 if ! "$(-?compare)" && "$("compare":T=QV)" 104 O += compare=$(compare) 105 if compare 106 N += --compare 107 else 108 N += --nocompare 109 end 110 end 111 if ! "$(-?debug-symbols)" && "$("debug":T=QV)" 112 O += debug=$(debug) 113 if debug 114 N += --debug-symbols 115 else 116 N += --nodebug-symbols 117 end 118 end 119 if ! "$(-?instrument)" && "$("instrument":T=QV)" 120 O += instrument=$(instrument) 121 if instrument != "" 122 N += --instrument=$(instrument) 123 else 124 N += --noinstrument 125 end 126 end 127 if ! "$(-?link)" && "$("link":T=QV)" 128 O += link=$(link) 129 if link == "1" 130 N += --link 131 elif link == "0" 132 N += --nolink 133 else 134 N += --link=$(link) 135 end 136 end 137 if ! "$(-?prefix-include)" && "$("prefixinclude":T=QV)" 138 O += prefixinclude=$(prefixinclude) 139 if prefixinclude 140 N += --prefix-include 141 else 142 N += --noprefix-include 143 end 144 end 145 if ! "$(-?static-link)" && "$("static":T=QV)" 146 O += static=$(static) 147 if static 148 N += --static-link 149 else 150 N += --nostatic-link 151 end 152 end 153 if N 154 set $(N) 155 if .MAKEVERSION. >= 20050701 156 error 1 $(O): obsolete: use $(N) 157 end 158 end 159 end 160 161/* 162 * made when the base rules are loaded 163 * 164 * makerules options are set up here 165 */ 166 167.MAKERULES.LOAD : .MAKE .VIRTUAL .FORCE .IMMEDIATE 168 local O N 169 170 /* 171 * rule vs. engine incompatibility is ethereal 172 * changes to edit ops and probe info are the main factors 173 * but changing the date should not be taken lightly 174 */ 175 176 .MAKEVERSION. := $(MAKEVERSION:@/.* //:/-//G) 177 if .MAKEVERSION. < 20040909 178 error 3 version $(.MAKEVERSION.:/^\(....\)\(..\)\(..\)$/\1-\2-\3/) incompatible with base rules version $(.RULESVERSION.:/^\(....\)\(..\)\(..\)$/\1-\2-\3/) 179 end 180 181 /* 182 * exported options 183 */ 184 185 if MAKE_OPTIONS && ! "$(-mam:N=static*)" 186 for O $(MAKE_OPTIONS) 187 if O == "-*" 188 set $(O) 189 else if O == "*([^=])[[:upper:].]*([^=])=*" 190 eval 191 $(O:V) 192 end 193 else 194 set --$(O:V) 195 end 196 end 197 end 198 if "$(-view-verify)" && ! "$(*.VIEW:O=2)" 199 error $(-view-verify) viewpath not set 200 end 201 if "$(-mam:N=(regress|static)*)" 202 .MAMROOT. := $(PWD:C@.*/src/@/src/@:C@/[^/]*@/..@G:C@/@@) 203 .MAKE : .MAM.LOAD 204 end 205 PAXFLAGS &= $$(MAKEPATH:C@:@ @G:N!=...*:C@.*@-s\@&/*\@\@@) $$(PWD:C@.*@-s\@&/*\@\@@) 206 .MAKE : .PROBE.LOAD 207 208/* 209 * binding directory lists 210 */ 211 212PKGDIRS = $(LIBDIR) $(*.VIEW:X=$(VROOT)/$(LIBDIR:B:S)) $(MAKERULESPATH:/:/ /G::D) 213LCLDIRS = /usr/local/arch/$(_hosttype_):/usr/local 214OPTDIRS = $(INSTALLROOT)/opt:/usr/add-on:/usr/addon:/usr/contrib:$(LCLDIRS):/opt 215STDDIRS = /:/usr 216USRDIRS = $(LCLDIRS):$(OPTDIRS):$(STDDIRS) 217 218/* 219 * common directories 220 */ 221 222INSTALLROOT = $(HOME) 223 224BINDIR = $(INSTALLROOT)/bin 225DLLDIR = $(CC.DLL.DIR) 226ETCDIR = $(INSTALLROOT)/etc 227FUNDIR = $(INSTALLROOT)/fun 228INCLUDEDIR = $(INSTALLROOT)/include 229LIBDIR = $(INSTALLROOT)/lib 230LOCALEDIR = $(INSTALLROOT)/lib/locale 231MANDIR = $(INSTALLROOT)/man/man 232SHAREDIR = $(INSTALLROOT)/share 233TMPDIR = /usr/tmp 234 235/* 236 * common files 237 */ 238 239CATALOG = $(.CATALOG.NAME.) 240HTMLINITFILES = 2HTML:$(HOME)/.2html 241LICENSE = 242LICENSEFILE = LICENSE 243LICENSEFILEDEFAULT = 244LICENSEFILES = $(.PACKAGE.license) $(LICENSE:/,.*//:N!=*=*:/.*/$(.PACKAGE.)-& &) $(LICENSEFILE) $(LICENSEFILEDEFAULT) $(.PACKAGE.:X=$$(.PACKAGE.):C,/,-,) $(.PACKAGE.:X=$$(PWD:C,^$(INSTALLROOT)/[^/]*/[^/]*/,,:C,/.*,,:/^lib//:/lib$//):C,/,-,) $(.PACKAGE.) 245LICENSEINFO = $(.FIND. lib/package .lic $(LICENSEFILES)) 246LICENSECLASS = $(LICENSEINFO:P=W=$(LICENSE),query=${type}.${class}) 247 248/* 249 * language processor suffix equivalences 250 */ 251 252.SUFFIX.c = .c 253.SUFFIX.HEADER.c = .h 254.SUFFIX.C = .C .cc .cpp .cxx .c++ 255.SUFFIX.f = .f .F 256.SUFFIX.r = .r .R 257 258.COMMAND.CC = g++ CC c++ cxx 259 260/* 261 * $(sh echo hello) may be handier than :COMMAND: 262 * $(.sh. ...) will not be frozen in .mo 263 */ 264 265.sh. : .SPECIAL .VIRTUAL .FUNCTIONAL .FORCE .REPEAT .ALWAYS .LOCAL 266 set - 267 $(%) 268 269/* 270 * $(.FIND. sibling suffix file ...) 271 * 272 * find file ... in sibling dir on PATH with suffix 273 * - sibling ignores sibling 274 * - suffix ignores suffix 275 */ 276 277.FIND. : .FUNCTION 278 local ( SIBLING SUFFIX FILES ... ) $(%:/:/ /G) 279 local D F P X 280 P = $(SIBLING:N=lib/package:+$(PACKAGEROOT)/bin) $(PATH) $(PKGDIRS) 281 P := $(P:/:/ /G:D:T=F) 282 for F $(FILES) 283 if X = "$(F:T=FR)" 284 return $(X) 285 end 286 if "$(X:S)" != "*.*" && SUFFIX != "-" 287 if X = "$(F:D:B:S=$(SUFFIX):T=FR)" 288 return $(X) 289 end 290 end 291 if F == "*/*" || SIBLING == "-" 292 D = 293 else 294 D = =$(SIBLING) 295 end 296 if X = "$(P:X=$(F:D$(D):B:S):T=FR)" 297 return $(X:O=1) 298 end 299 if "$(F:S)" != "*.*" && SUFFIX != "-" 300 if X = "$(P:X=$(F:D$(D):B:S=$(SUFFIX)):T=FR)" 301 return $(X:O=1) 302 end 303 end 304 end 305 306/* 307 * $(INSTRUMENT_$(-instrument:O=1:B)) is eval'd in .MAKEINIT 308 */ 309 310INSTRUMENT_app = : $(.INSTRUMENT.app) 311INSTRUMENT_insight = command=CC root=INSIGHT bin=bin.$(_hosttype_) 312INSTRUMENT_purecov = command=CCLD root=PURE_HOME CCFLAGS=$(CC.DEBUG) 313INSTRUMENT_purify = command=CCLD root=PURE_HOME 314INSTRUMENT_quantify = command=CCLD root=PURE_HOME CCFLAGS=$(CC.DEBUG) 315INSTRUMENT_sentinel = command=CCLD root=SE_HOME CCFLAGS=$(CC.DEBUG) 316 317.INSTRUMENT.app : .FUNCTION 318 if ! ( APP = "$(PATH:/:/ /G:X=../lib/app/cpp:P=X:O=1)" ) 319 error 3 app not found 320 end 321 CPP = $(APP) 322 CPPFLAGS = $(CCFLAGS:N=-[DIU]*) 323 LDLIBRARIES += -lapp 324 .SOURCE.a : $(APP:D:D) 325 326.INSTRUMENT.notfound : .FUNCTION 327 error 3 $(-instrument) not found 328 329/* 330 * standard versions to avoid ETXTBSY during installation 331 */ 332 333for .X. cat cmp cp ln mv rm 334 eval 335 STD$(.X.:F=%(upper)s) := $(STDDIRS:/:/ /G:X=bin/$(.X.):P=X:O=1) 336 end 337end 338.X. := $(STDLN) 339STDLN := $$(_feature_:N=ln:?$(.X.)?$$(STDCP)?) 340 341/* 342 * action related symbols 343 */ 344 345 346AR = $(CC.AR) $(CC.AR.ARFLAGS) 347ARFLAGS = $(ARHYPHEN)r 348ARHYPHEN = /* XXX: change to ``-'' when sun4 finally expires */ 349AS = as 350if "$(PATH:/:/ /G:X=awk:P=X)" 351AWK = awk 352elif "$(PATH:/:/ /G:X=nawk:P=X)" 353AWK = nawk 354elif "$(PATH:/:/ /G:X=gawk:P=X)" 355AWK = gawk 356else 357AWK = awk 358end 359BISON = bison 360BISONFLAGS = -d 361cc = cc 362CC = cc 363CCFLAGS = $(CC.OPTIMIZE) 364CCLD = $(CC) 365CCLDFLAGS = 366CCSPECIALIZE = 367CHGRP = chgrp 368CHMOD = chmod 369CHOWN = chown 370CMP = cmp 371CMPFLAGS = -s 372CP = cp 373CPIO = cpio 374CPP = $(MAKEPP) 375CPPFLAGS = $(CCFLAGS:N=-[DIU]*) 376CPR = cp 377CPRFLAGS = -pr 378 379if "$(PATH:/:/ /G:X=ctags:P=X)" 380 CTAGS = ctags 381end 382 383DIFF = diff 384DIFFFLAGS = -u 385EGREP = egrep 386F77 = f77 387FLEX = flex 388FLEXFLAGS = -l 389GREP = grep 390HOSTCC = $(CC) 391IFFE = iffe 392IFFESRCDIR = features 393IFFEGENDIR = FEATURE 394IFFEFLAGS = -v 395IFFECC = $(CC) 396IFFECCFLAGS = $(CCFLAGS) 397IFFELDFLAGS = $(LDFLAGS) 398IFFEREFS = 399IGNORE = ignore 400LD = $(CC.LD) 401LDFLAGS = 402LDSHARED = $(CC.SHARED.LD|CC.LD) 403LDRUNPATH = $(CC.RUNPATH) 404if "$(sh if $(FLEX) $(FLEXFLAGS) --version >/dev/null 2>&1; then echo 0; else echo 1; fi)" == "0" 405LEX = $(FLEX) 406LEXFLAGS = $(FLEXFLAGS) 407else 408LEX = lex 409LEXFLAGS = 410end 411 412.T. = $(USRDIRS:/:/ /G:X=lib/lint) $(USRDIRS:/:/ /G:X=lib/cmplrs/cc) $(USRDIRS:/:/ /G:X=ccs/lib) 413if .T. = "$(.T.:X=lint1:P=X:O=1)" 414LINTLIB := $(.T.:D) 415else 416LINTLIB = /usr/lib 417end 418LINTLIBRARIES = libc$(CC.SUFFIX.ARCHIVE) 419LINT1 = $(LINTLIB)/lint1 420LINT2 = $(LINTLIB)/lint2 421if ! "$(_release_:N=V)" 422LINTFLAGS = -bh 423end 424 425LN = $(_feature_:N=ln:?ln?$(CP)?) 426LPR = lpr 427 428if "$(PATH:/:/ /G:X=lprof:P=X)" 429LPROF = lprof 430end 431 432LS = ls 433M4 = m4 434 435if "$(PATH:/:/ /G:X=mcs:P=X)" 436MCS = mcs 437MCSFLAGS = -d 438end 439 440MKDIR = mkdir 441MM2HTML = mm2html 442MM2HTMLINFO = $(LICENSEINFO) 443MM2HTMLINIT = $(HTMLINITFILES:/:/ /G:T=F:O=1) 444MM2HTMLFLAGS = $(MM2HTMLINFO:@Q:/^/-l /) $(MM2HTMLINIT:@Q:/^/-h /) $(LICENSE:@/^/-o /:@Q) 445MV = mv 446MVFLAGS = -f 447if "$(PATH:/:/ /G:X=nawk:P=X)" 448NAWK = nawk 449elif "$(PATH:/:/ /G:X=gawk:P=X)" 450NAWK = gawk 451else 452NAWK = awk 453end 454NM = $(CC.NM) 455NMEDIT = $(CC.NMEDIT) -e '/^$(CC.PREFIX.SYMBOL)_STUB_/d' -e '/$(CC.PREFIX.SYMBOL)_already_defined$/d' 456NMFLAGS = $(CC.NMFLAGS) 457PACKAGE = 458PACKAGE_IGNORE = 459PACKAGE_LOCAL = $(.PACKAGE.:O=1)_ 460PACKAGE_PATH = $(PACKAGE) 461PAX = pax 462PERL = perl 463PPCC = $(MAKERULESPATH:/:/ /G:X=ppcc:P=X:O=1) 464PPCCFLAGS = 465PR = pr 466PROTO = proto 467PROTOEDIT = 468PROTOFLAGS = -s $(LICENSEINFO:$(PROTOEDIT):/^/-l /) $(LICENSE:@/^/-o /:@Q) 469RANLIB = $(IGNORE) ranlib 470REGRESS = regress 471REGRESSFLAGS = 472RM = rm 473RMFLAGS = -f 474RMRECURSEFLAGS = -r 475SED = sed 476SHAR = shar 477SHELLMAGIC = $(CC.SHELLMAGIC) 478SILENT = silent 479SORT = sort 480STRIP = $(CC.STRIP) 481STRIPFLAGS = $(CC.STRIP.FLAGS) 482TAR = tar 483TARFLAGS = v 484VARIANT = 485VARIANTID = 486 487if "$(PATH:/:/ /G:X=vgrind:P=X)" 488VGRIND = vgrind 489end 490 491if ! "$(PATH:/:/ /G:X=yacc:P=X)" && "$(PATH:/:/ /G:X=bison:P=X)" 492YACC = $(BISON) 493YACCFLAGS = -y $(BISONFLAGS) 494else 495YACC = yacc 496YACCFLAGS = -d 497end 498 499/* 500 * special symbols 501 */ 502 503.BUILT. = $(...:T=XU:A!=.TERMINAL:T=F:P=L:N!=/*$(.INSTALL.LIST.:@/ /|/G:/^./|&/)$(VROOT:?|$(VROOT)/*??)$(-global:@/:/|/G:/^./|&/)|$(CATALOG).msg:T=G) 504.CLOBBER. = $(".":L=*.([it]i|l[hn])) core 505.FILES. = $(LICENSEFILE) 506.MANIFEST.FILES. = $(*.COMMON.SAVE:T=F) $(.SELECT.:A!=.ARCHIVE|.COMMAND|.OBJECT|.TARGET) 507.MANIFEST. = $(.MANIFEST.FILES.:P=F:T=FR:P=C:H=U) 508.SOURCES. = $(.SELECT.:A=.REGULAR:A!=.ARCHIVE|.COMMAND|.OBJECT) 509 510/* 511 * stop expansion of certain state variables 512 */ 513 514(AR) (ARFLAGS) (AS) (ASFLAGS) (CPP) (CC) (CCFLAGS) (CCLD) \ 515 (CCLDFLAGS) (COATTRIBUTES) (COBOL) (COBOLDIALECT) (COBOLFLAGS) \ 516 (F77) (F77FLAGS) (IFFE) (IFFEFLAGS) (LD) (LDFLAGS) (LDLIBRARIES) \ 517 (LDSHARED) (LEX) (LEXFLAGS) (M4) (M4FLAGS) (PERLMAGIC) \ 518 (PROTO) (PROTOFLAGS) (SHELLMAGIC) \ 519 (YACC) (YACCFLAGS) : .PARAMETER 520 521/* 522 * mark actions that operate on built objects 523 */ 524 525.ONOBJECT : .ATTRIBUTE 526 527/* 528 * file attributes 529 */ 530 531.OBJECT : .ATTRIBUTE 532 533include "Scanrules.mk" 534 535/* 536 * pattern association attributes 537 */ 538 539.INSTALL. : 540.INSTALL.%.COMMAND : $$(BINDIR) 541.INSTALL.%.ARCHIVE : $$(LIBDIR) 542 543/* 544 * naming conventions 545 */ 546 547.CATALOG.NAME. : .FUNCTION 548 local N 549 if ID == "+([A-Za-z0-9_])" 550 N := $(ID) 551 if PWD == "*/lib/*" 552 N := lib$(N) 553 end 554 elif "$(PWD:B)" == "cc-*" 555 N := $(PWD:D::B) 556 elif "$(PWD:D::B)" == "?*lib" 557 N := $(PWD:D::B:/lib$//)$(PWD:B) 558 else 559 N := $(PWD:B) 560 end 561 return $(N) 562 563.DLL.NAME. : .FUNCTION .PROBE.INIT 564 local L 565 if "$(CC.DLL)" 566 if "$(.SHARED.DEF.:A=.TARGET)" 567 L := $($(.SHARED.DEF.) - $(%)) 568 else 569 L := $(CC.PREFIX.SHARED)$(%:O=1)$(CC.SUFFIX.SHARED) 570 if "$(%:O=2)" == "[0-9]*" 571 L := $(L).$(%:O=2) 572 end 573 end 574 end 575 return $(L) 576 577.LIB.NAME. : .FUNCTION .PROBE.INIT 578 local T 579 if ! .NO.LIB.TYPE && "$(-lib-type)" 580 if ! ( T = "$(.PACKAGE.$(%:O=1).type)" ) 581 T := $(CC.LIB.TYPE) 582 elif T == "-" 583 T = 584 end 585 end 586 return $(CC.PREFIX.ARCHIVE)$(%:O=1)$(T)$(CC.SUFFIX.ARCHIVE) 587 588/* 589 * bind overrides 590 */ 591 592+ldl : .VIRTUAL 593 594for .S. dl m /* dynamic unless explicitly overridden */ 595 -l$(.S.) : .DONTCARE 596 .PACKAGE.$(.S.).library := -l 597end 598 599.NO.LIB.TYPE = 0 600 601.LIB.TYPE. : .FUNCTION 602 local P T 603 if "$(%)" == "*/*" 604 if CC.PREFIX.DYNAMIC || CC.SUFFIX.DYNAMIC 605 T := $(%:D)/$(CC.PREFIX.DYNAMIC)$(%:B)$(CC.SUFFIX.DYNAMIC) 606 else 607 T := $(%:D)/$(CC.PREFIX.SHARED)$(%:B)$(CC.SUFFIX.SHARED) 608 end 609 if T = "$(*.SOURCE.%.ARCHIVE:X=$(T):T=F:O=1)" 610 return $(T) 611 end 612 end 613 if ! .NO.LIB.TYPE 614 if "$(-lib-type)" && "$(.PACKAGE.$(%).type)" != "-" 615 for P $(.PACKAGE.$(%).type) $(CC.LIB.TYPE) 616 /* libX-P.a or libX_P.a or libP/libX.a */ 617 T := $(CC.PREFIX.ARCHIVE)$(%)$(P)$(CC.SUFFIX.ARCHIVE) 618 if ! "$(T:A=.TARGET)" && ! "$(T:T=F)" 619 T := $(CC.PREFIX.ARCHIVE)$(%)(P:/-/_/)$(CC.SUFFIX.ARCHIVE) 620 if ! "$(T:A=.TARGET)" && ! "$(T:T=F)" 621 T := lib$(P:/-//)/$(CC.PREFIX.ARCHIVE)$(%)$(CC.SUFFIX.ARCHIVE) 622 end 623 end 624 if "$(T:A=.TARGET)" || "$(T:T=F)" 625 return $(T) 626 end 627 end 628 end 629 end 630 631.BIND.+l% : .FUNCTION 632 local A B L 633 B := $(%:/+l//) 634 A := $(CC.PREFIX.ARCHIVE)$(B)$(CC.SUFFIX.ARCHIVE) 635 if "$(-mam:N=static*,port*)" 636 if L = "$(A:A=.TARGET)" 637 return $(L) 638 end 639 L := -l$(B) 640 if "$(%:A=.DONTCARE)" 641 $(L) : .DONTCARE 642 end 643 return + $(L:T=F) 644 end 645 if ( L = "$(.LIB.TYPE. $(B))" ) 646 return $(L) 647 end 648 if ( L = "$(A:A=.TARGET)" ) 649 return $(L) 650 end 651 if ! "$(.LIBRARY.LIST.)" || "$(.PACKAGE.LIBRARY. $(B))" != "-l" 652 if "$(.REQUIRE.-l% -l$(B):/[-+]l//:N=$(B))" 653 if ( L = "$(A:T=F)" ) 654 return $(L) 655 end 656 end 657 end 658 A := $(%:/+l/-l/) 659 if ! ( L = "$(A:T=F)" ) 660 if "$(A:A=.DONTCARE)" 661 $(%) : .DONTCARE 662 end 663 end 664 return $(L) 665 666.BIND.-l% : .FUNCTION 667 local A B D T V X 668 if "$(%)" != "[-+]l*" 669 return $(%) 670 end 671 B := $(%:/[-+]l//) 672 if "$(-mam:N=static*,port*)" && ! .BIND.REAL. 673 if "$(%)" != "-l+([a-zA-Z0-9_])" 674 $(%) : .DONTCARE 675 return + $(%) 676 end 677 .BIND.REAL. = 1 678 A := $(.BIND.-l% $(%):T=F) 679 .BIND.REAL. = 680 V := ${mam_lib$(B)} 681 if "$(%:A=.DONTCARE)" && "$(A:N=/*)" 682 print -um bind -l$(B) dontcare 683 return + $(V) 684 elif T = "$(%:/-l\(.*\)/$(CC.PREFIX.ARCHIVE)\1$(CC.SUFFIX.ARCHIVE)/:A=.TARGET)" 685 return $(T) 686 else 687 $(V) : .DONTCARE 688 return $(V:T=F) 689 end 690 end 691 if ( T = "$(.LIB.TYPE. $(B))" ) 692 return $(T) 693 end 694 if ( "$(-static-link)" || "$(.PACKAGE.LIBRARY. $(B))" == "+l" ) && "$(<<)" != ".BIND.+l%" 695 V := $(CC.PREFIX.ARCHIVE)$(B)$(CC.SUFFIX.ARCHIVE) 696 if ( T = "$(V:A=.TARGET)" ) 697 return $(T) 698 end 699 if ( T = "$(V:T=F)" ) 700 if "$(T:D)" != "$(CC.STDLIB:/ /|/G)" && "$(T:D)" != "/usr/($(.PACKAGE.:/ /|/G))" 701 $(T) : -IGNORE 702 return $(T) 703 end 704 end 705 end 706 if "$(CC.DIALECT:N=DYNAMIC)" && ( "$(CCLDFLAGS:N=$(CC.DYNAMIC))" || ! "$(CCLDFLAGS:N=$(CC.STATIC))" ) 707 if ( CC.SUFFIX.DYNAMIC || ! "$(-local-static)" ) && CC.SUFFIX.SHARED && ! "$(.PLUGIN.$(B))" 708 if CC.SUFFIX.DYNAMIC 709 T := $(*$(B):N=*$(CC.SUFFIX.DYNAMIC)) 710 if "$(CC.PREFIX.DYNAMIC)" != "$(CC.PREFIX.SHARED)" 711 if CC.PREFIX.DYNAMIC 712 T := $(T:D:B=$(T:B:/$(CC.PREFIX.DYNAMIC)/$(CC.PREFIX.SHARED)/):S=$(CC.SUFFIX.SHARED)) 713 else 714 T := $(T:D:B=$(T:B:/^/$(CC.PREFIX.SHARED)/):S=$(CC.SUFFIX.SHARED)) 715 end 716 else 717 T := $(T:D:B:S=$(CC.SUFFIX.SHARED)) 718 end 719 else 720 T := $(*$(B):N=*$(CC.SUFFIX.SHARED)*(.+([0-9]))) 721 end 722 if "$(T:A=.TARGET)" 723 if ( X = "$(*.INSTALL:N=*/$(T))" ) 724 make $(X) 725 return - $(X) 726 end 727 return $(T) 728 end 729 if ( T = "$(*$(B):N=-l$(B):/-l//)" ) 730 T := $(T)$($(B).VERSION:/[^0-9]//G) 731 if ( T = "$(T:B:S=$(CC.SUFFIX.SHARED):A=.TARGET)" ) 732 if ( X = "$(*.INSTALL:N=*/$(T))" ) 733 make $(X) 734 return - $(X) 735 end 736 return $(T) 737 end 738 end 739 end 740 if ( T = "$(%:/-l\(.*\)/$(CC.PREFIX.ARCHIVE)\1$(CC.SUFFIX.ARCHIVE)/:A=.TARGET)" ) 741 if "$(PACKAGE_OPTIONS:N=optimize-space)" && "$(CC.SUFFIX.SHARED)" 742 if ( V = "$(*$(B):N=*$(CC.SUFFIX.SHARED)*:A=.TARGET)" ) 743 A := $(V:/\(.*$(CC.SUFFIX.SHARED)\).*/\1/) 744 if "$(A)" != "$(V)" 745 $(A) : $(V) 746 $(LN) -f $(*) $(<) 747 V := $(A) 748 end 749 .MAKE : $(V) 750 $(%) : .NULL 751 return $(%) 752 end 753 end 754 return $(T) 755 else 756 local H I J L P Q S Z 757 L := $(%) 758 V := 759 if P = "$(PACKAGE_$(B)_VERSION)" 760 P := ?([-.])$(P) 761 end 762 if T = "$(PACKAGE_$(B)_LIB)" 763 if ! "$(.PACKAGE.stdlib:N=$(T))" 764 .SOURCE.a : $(T) 765 end 766 end 767 for J $(CC.PREFIX.SHARED) '' 768 for I $(P) '' 769 if "$(CC.SUFFIX.DYNAMIC)" 770 if T = "$(*.SOURCE.%.ARCHIVE:L>$(CC.PREFIX.ARCHIVE)$(B)$(I)$(CC.SUFFIX.ARCHIVE)|$(J)$(B)$(I)$(CC.SUFFIX.SHARED))" 771 if "$(CC.SUFFIX.SHARED)" 772 if T != "*$(CC.SUFFIX.SHARED)" && T == "*$(CC.SUFFIX.ARCHIVE)" 773 if S = "$(T:D:B=$(J)$(T:B:/$(CC.PREFIX.ARCHIVE)//):S=$(CC.SUFFIX.SHARED):T=F)" 774 T := $(S) 775 end 776 end 777 end 778 T := $(T:T=F) 779 Q = .ARCHIVE 780 if ! "$(-force-shared)" && ! "$(-static-link)" && ! "$(CC.SUFFIX.DYNAMIC)" && "$(CC.SUFFIX.SHARED)" && T == "*$(CC.SUFFIX.SHARED)" 781 Q += .IGNORE 782 end 783 $(%) $(T) : $(Q) 784 return $(T) 785 end 786 elif "$(J)" || ! "$(CC.PREFIX.SHARED)" 787 if ! S 788 if "$(CC.SUFFIX.STATIC)" 789 S = |$(CC.SUFFIX.STATIC) 790 end 791 if "$(CC.SUFFIX.SHARED)" 792 S := $(S:V)|$(CC.SUFFIX.SHARED) 793 if "$(CC.SUFFIX.SHARED)" != "$(CC.SUFFIX.OBJECT)" 794 H = - 795 if "$(CC.DIALECT:N=VERSION)" 796 Z = 1 797 end 798 end 799 end 800 end 801 while 1 802 T := $(*.SOURCE.%.ARCHIVE:L!>$(L:/-l\(.*\)/$(CC.PREFIX.ARCHIVE)\1/)$(I)@($(V)$(CC.SUFFIX.ARCHIVE)$(S))) 803 if ! T && Z 804 T := $(*.SOURCE.%.ARCHIVE:L!>$(L:/-l\(.*\)/$(CC.PREFIX.ARCHIVE)\1/)$(I)@($(V)$(CC.SUFFIX.ARCHIVE)$(S)$(V)*)) 805 end 806 if T 807 if ! "$(CC.SUFFIX.SHARED)" || T != "*$(CC.SUFFIX.SHARED)" 808 if T == "*$(CC.SUFFIX.ARCHIVE)" 809 if "$(CC.STDLIB:N=$(T:D))" 810 return - $(T:T=F) 811 end 812 return $(H) $(T:B:S) 813 end 814 if "$(CC.SUFFIX.STATIC)" && T == "*$(CC.SUFFIX.STATIC)" 815 H = - 816 end 817 end 818 T := $(T:B:S) 819 Q = .ARCHIVE 820 if ! "$(-force-shared)" && ! "$(-static-link)" && ! "$(CC.SUFFIX.DYNAMIC)" && "$(CC.SUFFIX.SHARED)" && T == "*$(CC.SUFFIX.SHARED)" 821 Q += .IGNORE 822 end 823 $(%) $(T) : $(Q) 824 return $(H) $(T:T=F) 825 end 826 if ! "$(L:N=*+(.+([0-9])))" 827 break 828 end 829 T := $(L:/\.[0-9]*$//) 830 V := $(L:/$(T)//)$(V) 831 L := $(T) 832 end 833 end 834 end 835 end 836 end 837 else 838 T := $(CC.PREFIX.ARCHIVE)$(B)$(CC.SUFFIX.ARCHIVE) 839 if "$(%:A=.DONTCARE)" 840 $(T) : .DONTCARE 841 end 842 return $(T) 843 end 844 if ! "$(.BOUND.$(B))" 845 .BOUND.$(B) := 1 846 if T = "$(CC.REQUIRE.$(B))" 847 $(%) : .DONTCARE 848 return $(T) 849 elif T = "$(B:B:S=.req:T=F)" 850 $(%) : .DONTCARE 851 return $(T:T=I) 852 else 853 T := lib/$(B) 854 $(T) : .ARCHIVE 855 if ! "$(T:T=F)" 856 T := $(MAKELIB:D)/$(T) 857 end 858 if "$(T:T=F)" 859 T := $(T:T=I) 860 if ! "$(T:N=[-+]l$(B))" 861 $(%) : .DONTCARE 862 end 863 return $(T) 864 end 865 end 866 end 867 868.BIND.-u% : .FUNCTION 869 $(%) : .NULL 870 871.BIND.$"{"mam_lib%"}" : .FUNCTION 872 if "$(-mam:N=static*,port*)" 873 local L T 874 L := $(%:/\${mam_lib\(.*\)}/\1/) 875 T := $(CC.PREFIX.ARCHIVE)$(L)$(CC.SUFFIX.ARCHIVE) 876 if ( T = "$(T:T=F)" ) 877 print -um bind -l$(L) 878 return - $(T) 879 else 880 -l$(L) : .DONTCARE 881 return + $(%) 882 end 883 end 884 885/* 886 * .REQUIRE.-l% helper that includes pkg-*.mk of lib and prereqs 887 * before any -l bindings -- needed because the package lib is 888 * probably linked last but the pkg-*.mk rules may give binding 889 * hints for prereq libs 890 */ 891 892"{" "}" : .VIRTUAL .IGNORE .DONTCARE 893 894.REQUIRED. : .FUNCTION 895 local A L R 896 for L $(%) 897 if A = "$(L:A<.REQUIRE.)" 898 R += $($(A) $(L)) 899 end 900 end 901 return $(R) 902 903.REQUIRE.RULES. : .FUNCTION 904 local B R T D DL DR 905 B := $(%:/[-+]l//) 906 if "$(-mam:N=static*)" && "$(%)" != "[-+]l+([a-zA-Z0-9_])" 907 return 908 end 909 for D 1 2 910 if ( T = "$(CC.REQUIRE.$(B))" ) 911 if "$(-mam:N=static*)" 912 return 913 end 914 return $(T) 915 end 916 if ( T = "$(PACKAGE_$(B)_LIB)" ) 917 if T == "$(%:T=F:P=D)" 918 T := $(T)/lib/$(B) 919 if ( T = "$(T:T=F)" ) 920 return $(T:T=I) 921 end 922 return $(%) 923 end 924 end 925 if "$(.PACKAGE.$(B).rules)" 926 break 927 end 928 R := pkg-$(B).mk 929 if R = "$(R:T=F)" 930 include + $(R) 931 .PACKAGE.$(B).rules := $(R) 932 else 933 .PACKAGE.$(B).rules := - 934 break 935 end 936 end 937 if ! ( T = "$(%:/[-+]l\(.*\)/\1.req/:T=F)" ) 938 R := lib/$(B) 939 $(R) : .ARCHIVE 940 if ! ( T = "$(R:T=F)" ) 941 R := $(MAKELIB:D)/$(R) 942 if ! ( T = "$(R:T=F)" ) 943 return $(%) 944 end 945 end 946 .REQUIRED.$(B) := 1 947 if "$(-mam:N=static*,port*)" 948 return ${mam_lib$(B)} 949 end 950 /* req must be seen at or before the lib */ 951 DL := $(%:T=WF:P=D) 952 DR := $(T:P=D) 953 if DL != "$(DR)" 954 for D $(*.SOURCE.%.ARCHIVE:N!=.) 955 if D == "$(DR)" 956 break 957 end 958 if D == "$(DL)" 959 return $(%) 960 end 961 end 962 end 963 elif "$(-mam:N=static*,port*)" 964 return ${mam_lib$(B)} 965 end 966 .REQUIRED.$(B) := 1 967 T := $(T:T=I) 968 if "$(T:N=+l$(B))" 969 .PACKAGE.$(B).library := +l 970 end 971 return $(T) 972 973.REQUIRE.-l% : .FUNCTION 974 local B H L R S 975 R := $(.REQUIRE.RULES. $(%)) 976 for L $(R) 977 B := $(L:/-l//) 978 if ! "$(.PACKAGE.$(B).rules)" 979 H := pkg-$(B).mk 980 if H = "$(H:T=F)" 981 include + $(H) 982 .PACKAGE.$(B).rules := $(H) 983 else 984 .PACKAGE.$(B).rules := - 985 end 986 end 987 end 988 B := $(%:/[-+]l//) 989 if "$(.PACKAGE.LIBRARY. $(B))" == "+l" 990 if "$(-all-static)" 991 H = 992 for L $(R) 993 S := $(L:/-l/+l/) 994 if "$(S:A=.VIRTUAL)" || "$(.PACKAGE.LIBRARY. $(L:/[-+]l//))" == "-l" 995 H += $(L) 996 else 997 H += $(S) 998 end 999 end 1000 return { $(H) } 1001 end 1002 return { $(R:/-l$(B)/+l$(B)/) } 1003 end 1004 return { $(R) } 1005 1006.REQUIRE.+l% : .FUNCTION 1007 local A B L S 1008 B := $(%:/+l//) 1009 L := $(.REQUIRE.-l% -l$(B)) 1010 if "$(-all-static)" 1011 for B $(L) 1012 S := $(B:/-l/+l/) 1013 if "$(S:A=.VIRTUAL)" || "$(.PACKAGE.LIBRARY. $(B:/[-+]l//))" == "-l" 1014 A += $(B) 1015 else 1016 A += $(S) 1017 end 1018 end 1019 return $(A) 1020 end 1021 return $(L:/-l$(B)/+l$(B)/) 1022 1023.SOURCE.%.ARCHIVE : .FORCE $$(*.SOURCE.a) $$(*.SOURCE) 1024 1025/* 1026 * some actions cannot operate concurrently 1027 */ 1028 1029.LEX.SEMAPHORE .YACC.SEMAPHORE : .SEMAPHORE 1030 1031/* 1032 * target property metarules 1033 */ 1034 1035.LD.KEEP. = $(CC.SUFFIX.LD) $(-ld-script) 1036.ARCHIVE.OMIT. = $(CC.LD.STATIC)|$(CC.LD.DYNAMIC)$(.LD.KEEP.:/^/|*/:/ //G) 1037 1038.ARCHIVE.o : .USE .ARCHIVE (AR) (ARFLAGS) .ARPREVIOUS .ARUPDATE .ARCLEAN 1039 $(^:?$$(CP) $$(^) $$(<)$$("\n")??)$(.ARPREVIOUS.$(<:B:S):@?$(IGNORE) $$(AR) $$(ARHYPHEN)d $$(<) $$(.ARPREVIOUS.$$(<:B:S))$$("\n")??)$(>:N!=$(.ARCHIVE.OMIT.):K=$(AR) $(ARFLAGS) $(<)) 1040 1041.ARPREVIOUS : .MAKE .VIRTUAL .FORCE .REPEAT .IGNORE 1042 eval 1043 $(<).$(<<:B:S) = $(*$(<<:T=SR):N!=$(**:@/ /|/G)) 1044 end 1045 1046.ARUPDATE : .AFTER .IGNORE .VIRTUAL .FORCE .REPEAT 1047 $(<<:T=A) 1048 1049.ARCOPY : .AFTER .IGNORE .VIRTUAL .FORCE .REPEAT 1050 $(**:O=1:P=I=$(<<):?: $(<<) linked to $(**:O=1)?$(<<:T=AF)?) 1051 1052.ARCLEAN.LIST. : .FUNCTION 1053 local I V 1054 if ! .AR.RETAIN 1055 for I $(***:T=F:T=G:P=L:A!=.ARCHIVE|.TERMINAL:N!=$(.ARCHIVE.OMIT.):$(-archive-clean)) 1056 if ! "$(~$(I):A=.FORCE:A!=.IGNORE)" 1057 V += $(I) 1058 end 1059 end 1060 end 1061 return $(V) 1062 1063.ARCLEAN : .AFTER .IGNORE .VIRTUAL .FORCE .REPEAT 1064 $(.ARCLEAN.LIST.:K=$(RM) $(RMFLAGS)) 1065 1066.COMMAND.o : .USE .COMMAND (CCLD) (CCLDFLAGS) $$(LDLIBRARIES) 1067 $(CCLD) $(CCLDFLAGS) -o $(<) $(.SHARED.LIST. $(.SHARED.LIST.LIBS.)) 1068 1069.OBJECT.o : .USE (LD) (LDFLAGS) 1070 $(LD) -r $(LDFLAGS) -o $(<) $(*) 1071 1072/* 1073 * match-all metarules 1074 */ 1075 1076for .S. $(.SUFFIX.c) $(.SUFFIX.C) 1077 % : %$(.S.) (CC) (CCFLAGS) (CCLDFLAGS) $$(LDLIBRARIES) 1078 $(CC) $(CCFLAGS) $(CCLDFLAGS) -o $(<) $(.SHARED.LIST. $(.SHARED.LIST.LIBS.)) 1079end 1080 1081for .S. $(.SUFFIX.f) $(.SUFFIX.r) 1082 % : %$(.S.) (F77) (F77FLAGS) (LDFLAGS) $$(LDLIBRARIES) 1083 $(F77) $(F77FLAGS) $(LDFLAGS) -o $(<) $(.SHARED.LIST. $(.SHARED.LIST.LIBS.)) 1084end 1085 1086% : %.fql (F77) (CCFLAGS) (F77FLAGS) (LDFLAGS) $$(LDLIBRARIES) 1087 $(F77) $(CCFLAGS) $(F77FLAGS) $(LDFLAGS) -o $(<) $(.SHARED.LIST. $(.SHARED.LIST.LIBS.)) 1088 1089% : %.s (ASFLAGS) (LDFLAGS) $$(LDLIBRARIES) 1090 $(CC) $(ASFLAGS) $(LDFLAGS) -o $(<) $(.SHARED.LIST. $(.SHARED.LIST.LIBS.)) 1091 1092% : %.sh (SHELLMAGIC) 1093 case $(-mam:N=(regress|static)*:/:.*//)$(-regress):$OPTIND:$RANDOM in 1094 ?*:*:*|*::*|*:*:$RANDOM) 1095 ;; 1096 *) if ENV= LC_ALL=C x= $SHELL -nc '[[ a || b ]] && : ${list[level]} $$(( 1 + $x )) !(pattern)' 2>/dev/null 1097 then if $(GREP) '### .*archaic.* ###' >/dev/null 1098 then : $(<) contains archaic constructs : 1099 else ENV= LC_ALL=C $SHELL -n $(>) 1100 fi 1101 fi 1102 ;; 1103 esac 1104 case '$(SHELLMAGIC)' in 1105 "") case $(&:T=E:@O!) in 1106 0) $(CP) $(>) $(<) 1107 ;; 1108 *) { 1109 i=`(read x; echo $x) < $(>)` 1110 case $i in 1111 '#!'*|*'||'*|':'*|'":"'*|"':'"*) echo "$i" ;; 1112 esac 1113 cat - $(>) <<'!' 1114 $(&:T=E) 1115 ! 1116 } > $(<) 1117 ;; 1118 esac 1119 ;; 1120 *) cat - $(>) > $(<) <<'!' 1121 $(SHELLMAGIC) 1122 $(&:T=E) 1123 ! 1124 ;; 1125 esac 1126 $(SILENT) test -w $(<) -a -x $(<) || $(CHMOD) u+w,+x $(<) 1127 1128PERLMAGIC = $("#")!/usr/bin/perl 1129 1130% : %.pl (PERLMAGIC) 1131 case '$(PERLMAGIC)' in 1132 "") case $(&:T=E:@O!) in 1133 0) $(CP) $(>) $(<) 1134 ;; 1135 *) { 1136 i=`(read x; echo $x) < $(>)` 1137 case $i in 1138 '#!'*|*'||'*|':'*|'":"'*|"':'"*) echo "$i" ;; 1139 esac 1140 cat - $(>) <<'!' 1141 $(&:T=E) 1142 ! 1143 } > $(<) 1144 ;; 1145 esac 1146 ;; 1147 *) cat - $(>) > $(<) <<'!' 1148 $(PERLMAGIC) 1149 $(&:T=E) 1150 ! 1151 ;; 1152 esac 1153 $(SILENT) test -w $(<) -a -x $(<) || $(CHMOD) u+w,+x $(<) 1154 1155if "$("/bin/cat.exe":T=F)" 1156%.exe : % .NULL 1157end 1158 1159/* 1160 * double suffix metarules 1161 */ 1162 1163for .S. $(.SUFFIX.c) $(.SUFFIX.C) 1164 %.o : %$(.S.) (CC) (CCFLAGS) 1165 $(CC) $(CCFLAGS) -c $(>) 1166end 1167 1168for .S. $(.SUFFIX.f) $(.SUFFIX.r) 1169 %.o : %$(.S.) (F77) (F77FLAGS) 1170 $(F77) $(F77FLAGS) -c $(>) 1171end 1172 1173%.o : %.s (AS) (ASFLAGS) 1174 $(AS) $(ASFLAGS) -o $(<) $(>) 1175 1176%.o : %.S (CC) (CCFLAGS) 1177 $(CC) $(CCFLAGS) -c $(>) 1178 1179%.c %.h : %.y .YACC.SEMAPHORE (YACC) (YACCFLAGS) 1180 if silent $(YACC) --version >/dev/null 2>&1 1181 then $(YACC) $(YACCFLAGS) -o$(<:N=*.c) $(YACCFIX.$(%):?-p$(YACCFIX.$(%))??) $(>) 1182 else $(YACC) $(YACCFLAGS) $(>)$(YACCFIX.$(%):?$("\n")$(STDED) $(STDEDFLAGS) y.tab.c <<!$("\n")g/yytoken/s//yy_token/g$("\n")g/[yY][yY]/s//<<<<&>>>>/g$("\n")g/<<<<yy>>>>/s//$(YACCFIX.$(%))/g$("\n")g/<<<<YY>>>>/s//$(YACCFIX.$(%):F=%(invert)s)/g$("\n")w$("\n")q$("\n")!??)$(YACCHDR.$(%):?$("\n")$(STDED) $(STDEDFLAGS) y.tab.c <<!$("\n")1i$("\n")#include "$(YACCHDR.$(%))"$("\n").$("\n")g/extern.*malloc/d$("\n")w$("\n")q$("\n")!??) 1183 $(MV) y.tab.c $(%).c 1184 if $(SILENT) test -s y.tab.h 1185 then $(STDED) $(STDEDFLAGS) y.tab.h <<'!' 1186 1i 1187 $("#")ifndef _$(%:F=%(upper)s)_H 1188 $("#")define _$(%:F=%(upper)s)_H 1189 . 1190 $a 1191 $("#")endif $("/")* _$(%:F=%(upper)s)_H *$("/") 1192 . 1193 w 1194 q 1195 ! 1196 $(YACCFIX.$(%):?$(STDED) $(STDEDFLAGS) y.tab.h <<!$("\n")g/yytoken/s//yy_token/g$("\n")g/yy/s//$(YACCFIX.$(%))/g$("\n")g/YY/s//$(YACCFIX.$(%):F=%(invert)s)/g$("\n")w$("\n")q$("\n")!$("\n")$(PROTO) -frs y.tab.h$("\n")??)if $(SILENT) $(CMP) $(CMPFLAGS) y.tab.h $(%).h 1197 then $(RM) $(RMFLAGS) y.tab.h 1198 else $(MV) y.tab.h $(%).h 1199 fi 1200 fi 1201 if $(SILENT) test -f y.output 1202 then $(MV) y.output $(%).grammar 1203 fi 1204 fi 1205 1206%.c : %.l .LEX.SEMAPHORE (LEX) (LEXFLAGS) (CC) 1207 if silent $(LEX) --version >/dev/null 2>&1 1208 then $(LEX) $(LEXFLAGS) -o$(<) $(LEXFIX.$(%):?-P$(LEXFIX.$(%))??) $(>) 1209 else $(LEX) $(LEXFLAGS) $(>)$(LEXFIX.$(%):@?$("\n")$(STDED) $(STDEDFLAGS) lex.yy.c <<!$("\n")g/yy/s//$(LEXFIX.$(%))/g$("\n")g/YY/s//$(LEXFIX.$(%):F=%(invert)s)/g$("\n")w$("\n")q$("\n")!??) 1210 $(MV) lex.yy.c $(<) 1211 fi$(LEXHDR.$(%):?$("\n")$(STDED) $(STDEDFLAGS) $(<) <<!$("\n")1i$("\n")#include "$(LEXHDR.$(%))"$("\n").$("\n")w$("\n")q$("\n")!??) 1212 1213%.mo : %.mk 1214 $(MAKE) $(-+) --base --compile --file=$(>) $(CCFLAGS:N=-[I][!-]*) $(&:T=E) 1215 1216/* 1217 * library req support 1218 */ 1219 1220-L% : "" .MAKE .DONTCARE .VIRTUAL .FORCE .REPEAT .IGNORE 1221 /* we should be able to do just .SOURCE.a here */ 1222 .SOURCE.%.ARCHIVE .SOURCE.a : $(<:/-L//) 1223 if CC.SUFFIX.DYNAMIC 1224 .SOURCE.%$(CC.SUFFIX.SHARED) : $(<:/-L//) 1225 end 1226 1227/* 1228 * C alternate flags support 1229 */ 1230 1231cc-% : "" .ALWAYS .LOCAL .FORCE .RECURSE.SEMAPHORE 1232 set - 1233 if test -d $(<:V:Q) 1234 then $(-silent:Y%%echo $(-errorid:C%$%/%)$(<:V:Q): >&2%) 1235 cd $(<:V:Q) 1236 $(MAKE) --file=$(MAKEFILE) --keepgoing $(-) --errorid=$(<:V:Q) .ATTRIBUTE.$(IFFEGENDIR)/%:.ACCEPT MAKEPATH=..:$(MAKEPATH) $(=:V:N!=MAKEPATH=*) $(.RECURSE.ARGS.:N!=.CC-*:/^\.INSTALL$/.CC-INSTALL/) $(%:Y;$$(INSTRUMENT_$$(%:/,.*//):@?--instrument=$$(%:/,.*//)?$$(%:V:/,/ /G:/~/,/G:N!=[!-+]*=*:@/^./CCFLAGS=-&/:@Q) $$(%:V:/,/ /G:/~/,/G:N=[!-+]*=*)?);;) $(.VARIANT.$(<)) 1237 fi 1238 1239/* 1240 * feature test support -- the magic is in $(IFFE) 1241 */ 1242 1243$(IFFEGENDIR)/% : $(IFFESRCDIR)/%.c .SCAN.c (IFFE) (IFFEFLAGS) 1244 $(IFFE) $(IFFEFLAGS) run $(>) 1245 1246$(IFFEGENDIR)/% : $(IFFESRCDIR)/%.sh .SCAN.c (IFFE) (IFFEFLAGS) 1247 $(IFFE) $(IFFEFLAGS) run $(>) $(?$(>):T=F) 1248 1249$(IFFEGENDIR)/% : $(IFFESRCDIR)/% .SCAN.c (IFFE) (IFFEFLAGS) 1250 $(IFFE) $(IFFEFLAGS) run $(>) 1251 1252$(IFFEGENDIR)/% : %.iffe .SCAN.c (IFFE) (IFFEFLAGS) 1253 $(IFFE) $(IFFEFLAGS) run $(>) 1254 1255$(IFFEGENDIR)/% : "" .SCAN.c (IFFE) (IFFEFLAGS) 1256 $(IFFE) $(IFFEFLAGS) def $(%) 1257 1258%.h : %.iffe .SCAN.c (IFFE) (IFFEFLAGS) 1259 $(IFFE) -o $(<) $(IFFEFLAGS) run $(>) 1260 1261.IFFE.REF. : .FUNCTION 1262 local T 1263 set mam=hold 1264 T := $(...:N=*.req:A=.TARGET) 1265 .MAKE : $(T) 1266 T := $(T:T=F:T=I:/[[:space:]][[:space:]]*/ /G:N!=-l($(T:B:C, ,|,G))) 1267 T += $(LDLIBRARIES) $(IFFEREFS:N=-l*) 1268 .R. : .CLEAR .MAKE $(T) 1269 : $(*) 1270 .MAKE : .R. 1271 set mam=nohold 1272 T := $(*.SOURCE.%.STD.INCLUDE:N=*/($(.PACKAGE.build:A!=.TARGET:/ /|/G)):T=FD:U!) 1273 T := $(T:/^/-I/) $(T:D:U:/^/-I/) $(*.R.:N!=$(<:T=M:@/ /|/G):U) 1274 if T 1275 if "$(-mam:N=static*,port*)" 1276 return ref $(*.SOURCE.%.ARCHIVE:I=$$(T:N=${mam_lib+([a-zA-Z0-9_])}:P=D):$(.CC.NOSTDLIB.):/.*/${mam_cc_L+-L&}/) $(T) $(IFFEREFS:N!=-l*) : 1277 else 1278 return ref $(*.SOURCE.%.ARCHIVE:I=$$(T:N=-l*:P=D):$(.CC.NOSTDLIB.):P=A:/^/-L/) $(IFFEREFS:N!=-l*) $(T) : 1279 end 1280 end 1281 1282/* 1283 * C information abstractor support rules 1284 */ 1285 1286.SOURCE.db : $$(CIAFLAGS:N=-d*:/-d//) 1287 1288CIA = $(CC.ALTPP.ENV) $(CC.DIALECT:N=C++:?CIA?cia?) 1289CIALD = $(CIA) 1290CIADBFLAGS = 1291CIAFLAGS = 1292CIAFILES = $(CC.DIALECT:N=C++:?Ref.db Sym.db?reference.db symbol.db?) 1293DOT = dot 1294DOTFLAGS = -Tps 1295DAGGER = $(CC.DIALECT:N=C++:?Dagger?dagger?) 1296DAGGERFLAGS = 1297 1298(CIA) (CIADBFLAGS) (CIAFLAGS) : .PARAMETER 1299 1300%.A : %.c (CIA) (CIAFLAGS) 1301 $(CIA) $(CIAFLAGS) $(CPPFLAGS) -c $(>) 1302 1303%.A : %.C (CIA) (CIAFLAGS) 1304 $(CIA) $(CIAFLAGS) $(CPPFLAGS) -c $(>) 1305 1306.CIADB.AGAIN = 1307 1308.CIADB : .MAKE .VIRTUAL .FORCE .ONOBJECT .REPEAT .PROBE.INIT 1309 local A S T U X 1310 for S $(.SUFFIX.c) $(.SUFFIX.C) 1311 T += $(.SOURCES.:G=%$(S):B:S=$(CC.SUFFIX.OBJECT)) 1312 end 1313 if T 1314 .SOURCE.c : $(IFFESRCDIR) 1315 .CIA.REBIND : .MAKE .VIRTUAL .FORCE .AFTER .FOREGROUND 1316 .REBIND : $(CIAFILES) 1317 for U $(T) 1318 X = 1319 for S $(.SUFFIX.c) $(.SUFFIX.C) 1320 X += $(*$(U):G=%$(S)) 1321 end 1322 if ( X = "$(X:A!=.LCL.INCLUDE|.STD.INCLUDE)" ) 1323 $(U:B:S=.A) : .IMPLICIT $(X) $(~$(U):A=.STATEVAR) 1324 A += $(U:B:S=.A) 1325 end 1326 end 1327 $(CIAFILES:O=1) : (CIADBFLAGS) (CIAFLAGS) $(A) .CIA.REBIND 1328 $(CIALD) $(CIAFLAGS) $(*) 1329 .MAKE : $(CIAFILES:O=1) 1330 elif .CIADB.AGAIN 1331 error 3 ciadb: no source to generate database 1332 else 1333 .CIADB.AGAIN = 1 1334 .ARGS : .INSERT $(<) 1335 .MAKE : .ALL 1336 end 1337 1338.CIADOT : .CIADB 1339 $(DAGGER) $(DAGGERFLAGS) | $(DOT) $(DOTFLAGS) 1340 1341/* 1342 * .USE action scripts 1343 */ 1344 1345.DO.COPY : .USE 1346 $(CMP) $(CMPFLAGS) $(*:O=1) $(<) || { $(RM) $(RMFLAGS) $(<); $(SILENT) test -d $(<:D) || $(MKDIR) $(<:D); $(CP) $(*:O=1) $(<); } 1347 1348.DO.INSTALL.OPT. = $(~:N=user=*:@C,.*,\&\& { $(CHOWN) & $(<) || true ;},:@C, user=, ,G) \ 1349 $(~:N=group=*:@C,.*,\&\& { $(CHGRP) & $(<) || true ;},:@C, group=, ,G) \ 1350 $(~:N=mode=*:@C,.*,\&\& $(CHMOD) & $(<),:@C, mode=\([-+]\), ugo\1,G:@C, mode=, ,G) 1351 1352.DO.INSTALL.OLD.BUSY = { test -f $(%) && ignore $(RM) $(RMFLAGS) $(%).old* && $(MV) $(MVFLAGS) $(%) `echo $(%).old* | $(SED) -e 's/.* //' -e 's/old\(z*\)$/old\1z/' -e 's/\*$//'`; } 1353 1354.DO.INSTALL.OLD. : .FUNCTION 1355 if "$(-preserve)" == "\*" || "$(-preserve:N=*/*:?$$(%:N=$$(-preserve))?$$(%:B:S:N=$$(-preserve))?)" 1356 return $(SILENT) test -d $(%:D:B=ETXTBSY) || $(MKDIR) $(%:D:B=ETXTBSY); $(MV) $(MVFLAGS) $(%) $(%:D:B=ETXTBSY)/$(%:B)#$(%:P=I) 1357 elif "$(-clobber)" == "\*" || "$(-clobber:N=*/*:?$$(%:N=$$(-clobber))?$$(%:B:S:N=$$(-clobber))?)" 1358 return { $(RM) $(RMFLAGS) $(%) || $(.DO.INSTALL.OLD.BUSY); } 1359 else 1360 return { $(MV) $(MVFLAGS) $(%) $(%).old || $(.DO.INSTALL.OLD.BUSY); } 1361 end 1362 1363.DO.INSTALL : .USE $$(<:N=*$$(CC.SUFFIX.ARCHIVE):?.ARCOPY??) 1364 if $(SILENT) test '' != "$(*:O=1)" 1365 then if $(SILENT) test '' != "$(*:O=1:P=I=$(<))" 1366 then : $(<) linked to $(*:O=1) 1367 elif $(SILENT) test -d "$(*:O=1)" 1368 then $(-link:+$$(<:B:$$(<:A=.COMMAND:Y@@S@):N=$$(-link):+$$$(LN) $$$(_feature_:N=ln|ln-s:O=2:Y%-s $$$(*:O=1:D=$$$(<:D:P=R=$$$(*:O=1:D)):B:S)%$$$(*:O=1)%) $$$(<) || ))$(CPR) $(CPRFLAGS) $(*:O=1) $(<:D) 1369 else $(-compare:+$$(SILENT) $$(CMP) $$(CMPFLAGS) $$(*:O=1) $$(<) ||) 1370 { 1371 if $(SILENT) test -f "$(<)" 1372 then $(.DO.INSTALL.OLD. $(<)) 1373 fi 1374 $(-link:+$$(<:B:$$(<:A=.COMMAND:Y@@S@):N=$$(-link):+$$$(LN) $$$(_feature_:N=ln|ln-s:O=2:Y%-s $$$(*:O=1:D=$$$(<:D:P=R=$$$(*:O=1:D)):B:S)%$$$(*:O=1)%) $$$(<) || ))$(IGNORE) $(CP) $(*:O=1) $(<) $(.DO.INSTALL.OPT.) 1375 } 1376 fi 1377 fi 1378 1379.DO.INSTALL.DIR : .USE .DO.TOP.LEVEL 1380 if $(SILENT) test ! -d $(<) 1381 then $(MKDIR) -p $(<)$(.DO.INSTALL.OPT.) 1382 fi 1383 1384.DO.TOP.LEVEL : .MAKE .VIRTUAL .FORCE .REPEAT .IGNORE 1385 if ! "$(<<:A=.GLOBAL)" && ! "$(<<:P=L)" 1386 force $(<<) 1387 end 1388 1389.DO.LINK.OLD. : .FUNCTION 1390 if "$(-clobber)" == "\*" || "$(-clobber:N=*/*:?$$(%:N=$$(-clobber))?$$(%:B:S:N=$$(-clobber))?)" 1391 return $(RM) $(RMFLAGS) $(%) 1392 else 1393 return $(CP) $(%) $(%).old$("\n")$(RM) $(RMFLAGS) $(%) 1394 end 1395 1396.DO.LINK : .USE /* .ACCEPT .ACCEPT until dual-time implementation */ 1397 if $(SILENT) test -f "$(<)" 1398 then $(.DO.LINK.OLD. $(<)) 1399 fi 1400 $(LN) $(*:O=1) $(<) 1401 1402.DO.NOTHING : .USE .NULL 1403 1404.NOOPTIMIZE.c .CC.NOOPTIMIZE /* drop .CC.* in 2004 */ : .MAKE .LOCAL 1405 CCFLAGS := $(.MAM.CC.FLAGS|CCFLAGS:VP:N!=-O*|$(CC.OPTIMIZE)|$\(CC.OPTIMIZE\)) 1406 if "$(-mam)" 1407 CCFLAGS := ${mam_cc_FLAGS} ${-debug-symbols?1?${mam_cc_DEBUG} -D_BLD_DEBUG?${CCFLAGS.FORCE}?} $(<:A=.NOPROTECT.c:+${mam_cc_NOPROTECT}) $$(.MAM.STATE.VARS. $(<)) 1408 elif "$(-debug-symbols)" 1409 CCFLAGS := $(CC.DEBUG) $(CCFLAGS:VP:N!=-g|$(CC.DEBUG)|$\(CC.DEBUG\)) 1410 end 1411 1412.NOPROTECT.c : .MAKE .LOCAL 1413 if "$(-mam)" 1414 CCFLAGS := ${mam_cc_FLAGS} ${CCFLAGS.FORCE} ${mam_cc_NOPROTECT} 1415 else 1416 CCFLAGS += $(CC.NOPROTECT) 1417 end 1418 1419.READONLY. : .FUNCTION 1420 local ( .ROSRC. .ROOBJ. ... RO ) $(%) 1421 if RO == "-S.idat" 1422 .ROSED. = s/^\([ ]*[.a-zA-Z0-9_$:]*[ ]*\.*\)idat/\1code/ 1423 return $(@.DO.READONLY.c.sed) 1424 elif RO == "-S.data" 1425 .ROSED. = s/^\([ ]*\.*\)data/\\1text/ 1426 return $(@.DO.READONLY.c.sed) 1427 elif RO == "-S.rdata" 1428 .ROSED. = s/^\([ ]*\.*\)data/\1rdata/ 1429 return $(@.DO.READONLY.c.sed) 1430 end 1431 return $$(CC) $$(CCFLAGS:N!=$(CC.DEBUG)) $(RO) -c $(.ROSRC.) 1432 1433.READONLY.c : .USE .IMPLICIT 1434 $(.READONLY. $(>) $(<) $(CC.READONLY)) 1435 1436.DO.READONLY.c.sed : .USE 1437 $(CC) $(CCFLAGS:N!=$(CC.DEBUG)) -S $(.ROSRC.) 1438 $(.ROSRC.:B:N=$(<:B):?$(":") convert $(<:B:S=.c) data to readonly text in $(<:B:S)$("\n")??)set - 1439 $(SED) -e '$(.ROSED.)' \ 1440 -e 's/^\([ ]*[.a-zA-Z0-9_$:]*[ ]*\.*\)zero[ ][ ]*/\1set .,.+/' \ 1441 -e 's/^\([ ]*[.a-zA-Z0-9_$:]*[ ]*\.*\)space[ ][ ]*1/\1byte 0/' \ 1442 -e 's/^\([ ]*[.a-zA-Z0-9_$:]*[ ]*\.*\)space[ ][ ]*2/\1byte 0,0/' \ 1443 -e 's/^\([ ]*[.a-zA-Z0-9_$:]*[ ]*\.*\)space[ ][ ]*3/\1byte 0,0,0/' \ 1444 -e 's/^\([ ]*[.a-zA-Z0-9_$:]*[ ]*\.*\)space[ ][ ]*4/\1byte 0,0,0,0/' \ 1445 $(.ROSRC.:B:S=.s) > 1.$(tmp).s 1446 $(AS) $(ASFLAGS) -o $(.ROOBJ.) 1.$(tmp).s 1447 $(RM) $(RMFLAGS) $(.ROSRC.:B:S=.s) 1.$(tmp).s 1448 1449.READONLY.l : .USE .IMPLICIT 1450 $(".YYSUF.=.l":R)$(@.DO.READONLY.ly) 1451 1452.READONLY.y : .USE .IMPLICIT 1453 $(".YYSUF.=.y":R)$(@.DO.READONLY.ly) 1454 1455.DO.READONLY.ly : .USE 1456 : convert $(<:B:S=.c) tables to readonly text in $(<:B:S) 1457 set - 1458 $(CP) $(<:B:S=.c) 1.$(tmp).c 1459 $(STDED) $(STDEDFLAGS) 1.$(tmp).c > 2.$(tmp).c <<! 1460 $(@.YYSCRIPT$(.YYSUF.)) 1461 w 1462 q 1463 ! 1464 $(".ROSRC.=2.$(tmp).c":R)$(".ROOBJ.=2.$(tmp)$(CC.SUFFIX.OBJECT)":R)$(@.DO.READONLY.c.$(CC.READONLY)) 1465 $(CC) $(CCFLAGS) -c 1.$(tmp).c 1466 $(LD) -r $(LDFLAGS) $(&:T=D:N=-[!DIOUl]*) -o $(<:B:S) 1.$(tmp)$(CC.SUFFIX.OBJECT) 2.$(tmp)$(CC.SUFFIX.OBJECT) 1467 $(CHMOD) -x $(<:B:S) 1468 $(RM) $(RMFLAGS) [12].$(tmp).[cos] 1469 1470.YYSCRIPT.l : .USE 1471 /struct yysvf[ ]*{/;.,/}/p 1472 /define[ ][ ]*YYTYPE/p 1473 /struct yywork[ ]*{/s/^.*}/&;\\ 1474 struct yywork / 1475 -p 1476 $(@.YYFIX:@/YY/yycrank/G) 1477 $(@.YYFIX:@/YY/yyvstop/G) 1478 $(@.YYFIX:@/YY/yysvec/G) 1479 $(@.YYFIX:@/YY/yymatch/G) 1480 $(@.YYFIX:@/YY/yyextra/G) 1481 1482.YYSCRIPT.y : .USE .IMPLICIT 1483 g/typedef.*yyt[a-z]*;/p 1484 $(@.YYFIX:@/YY/yyexca/G) 1485 $(@.YYFIX:@/YY/yyact/G) 1486 $(@.YYFIX:@/YY/yypact/G) 1487 $(@.YYFIX:@/YY/yypgo/G) 1488 $(@.YYFIX:@/YY/yyr1/G) 1489 $(@.YYFIX:@/YY/yyr2/G) 1490 $(@.YYFIX:@/YY/yychk/G) 1491 $(@.YYFIX:@/YY/yydef/G) 1492 $(@.YYFIX.release) 1493 1494.YYFIX : 1495 /^\(.*\)YY[ ]*\[]/s//extern \1 YY[];\\ 1496 \1 YY []/ 1497 .ka 1498 /}/kb 1499 'a,'bp 1500 'a,'bd 1501 1502if "$(_release_:N=V)" 1503.YYFIX.release : 1504 /^#[ ]*ifndef[ ][ ]*YYDEBUG/;/^#[ ]*endif/p 1505 /^#[ ]*if[ ][ ]*YYDEBUG/p 1506 $(@.YYFIX:@/YY/yytoks/G) 1507 $(@.YYFIX:@/YY/yyreds/G) 1508 /^#[ ]*endif/p 1509end 1510 1511RECURSEROOT = . 1512 1513.RECURSE : .MAKE .VIRTUAL .FORCE .NULL 1514 1515.NORECURSE : .MAKE .VIRTUAL .FORCE .NULL 1516 1517.RECURSE.SEMAPHORE : .VIRTUAL .FORCE .IGNORE .NULL 1518 1519.RECURSE.ARGS. : .FUNCTION 1520 local A L V 1521 L = .TARGET 1522 for A $(.ORIGINAL.ARGS.) 1523 if ! "$(A:A=.TARGET)" && ( T = "$(A:/.*/.&/U:A=$(L))" ) 1524 A := $(T) 1525 else 1526 L = .ONOBJECT 1527 end 1528 if "$(A:A!=.ACTIVE:N!=.RECURSE)" || "$(A:A=.ONOBJECT)" 1529 V += $(A) 1530 end 1531 end 1532 if V && "$(~.ARGS:A=.ONOBJECT)" 1533 V := .RECURSE $(V) 1534 end 1535 return $(V) 1536 1537.RECURSE.OPTIONS. : .FUNCTION 1538 local L O R 1539 O = .. 1540 R = --include=.. 1541 for L $(.RWD.:C,/, ,G) 1542 O := $(O)/.. 1543 R += --include=$(O) 1544 end 1545 R := RECURSEROOT=$(O) /* += for --include -- not sure about that */ 1546 return $(R) 1547 1548.RECURSE.INIT. : .FUNCTION 1549 local D N P 1550 if ! "$(-recurse)" 1551 return 1552 end 1553 if ( D = "$(%)" ) 1554 .X. : .CLEAR 1555 for N $(D) 1556 if N == "-" 1557 .X. : $(N) 1558 elif "$(N:T=F=D)" 1559 .X. : $(N) 1560 else 1561 P := $(".":L=$(N):T=F=D) 1562 if P 1563 .X. : $(P) 1564 else 1565 .X. : $(N) 1566 end 1567 end 1568 end 1569 D := $(~.X.) 1570 else 1571 D = . 1572 end 1573 if "$(-recurse)" == "*prereqs*" 1574 print $(D:W=P=$(.RECURSE.ARGS.:A!=.ONOBJECT:N!=.RECURSE)) 1575 exit 0 1576 end 1577 if D == "." 1578 D := $(D:W=R=$(.RECURSE.ARGS.:A!=.ONOBJECT:N!=.RECURSE)) 1579 end 1580 if "$(-recurse)" == "*only*" 1581 D := $(D:N=?(*/)($(.RECURSE.ARGS.:/ /|/G))) 1582 end 1583 if "$(-recurse)" == "*list*" 1584 print $(D:/ /$("\n")/G) 1585 exit 0 1586 end 1587 $(D) : .OBJECT 1588 P := recurse .RECURSE $(D:B:S:N!=$(...:A=.ONOBJECT:N=.*:/.\(.*\)/\1/L:N!=*.*:/ /|/G)) $(<<) $(...:A>*.RECURSE.INIT.*) 1589 P := $(P:U:/ /|/G) 1590 .ORIGINAL.ARGS. := $(.ORIGINAL.ARGS.:N!=$(P)) 1591 .ARGS : .CLEAR $(~.ARGS:N!=$(P)) 1592 P := $(D:N!=-|.|.CC-*|cc-*) 1593 if P == "* + *" 1594 $(P:@/ + .*//:T!=FR) : .TERMINAL .RECURSE.DIR 1595 $(P:@/.* + //:T!=FR) : .TERMINAL .NORECURSE.DIR 1596 else 1597 $(P:T!=FR) : .TERMINAL .RECURSE.DIR 1598 end 1599 $(P:T=FR) : .TERMINAL .RECURSE.FILE 1600 .SELECT.EDIT. := $(.SELECT.EDIT.):N!=($(P:T=F:P=L=*:/ /|/G))?(/*) 1601 return $(D:N!=+) 1602 1603.RECURSE.FLUSH : .MAKE .VIRTUAL .FORCE .REPEAT .AFTER 1604 unbind $(<<) 1605 1606.RECURSE.DIR : .USE .ALWAYS .LOCAL .FORCE .RECURSE.FLUSH .RECURSE.SEMAPHORE 1607 set - 1608 if $(*.VIEW:O=2:N=...:+2d) test -d $(<) $(-virtual:+|| $(MKDIR) $(<)) 1609 then $(-silent:~echo $$(-recurse-enter) $$(.RWD.:+$$$(<:N!=/*:+$$$$(.RWD.)/))$$(<)$$(":") >&2) 1610 cd $(<) 1611 $(MAKE) $(-) --errorid=$(<:Q) $(=:V:N!=MAKEPATH=*|VPATH=*) .RWD.=$(.RWD.:C%$%/%)$(<) $(.RECURSE.OPTIONS.) $(.ORIGINAL.ARGS.) 1612 $(-recurse-leave:+$$(-silent:~echo $$$(-recurse-leave) $$$(.RWD.:+$$$$(<:N!=/*:+$$$$$(.RWD.)/))$$$(<)$$$(":") >&2)) 1613 else echo $(<): warning: cannot recurse on virtual directory >&2 1614 fi 1615 1616.NORECURSE.DIR : .USE .ALWAYS .LOCAL .FORCE .RECURSE.SEMAPHORE 1617 set - 1618 if $(*.VIEW:O=2:N=...:+2d) test -d $(<) $(-virtual:+|| $(MKDIR) $(<)) 1619 then $(-silent:~echo $(-recurse-enter) $(.RWD.:+$(<:N!=/*:+$(.RWD.)/))$(<)$$(":") >&2) 1620 cd $(<) 1621 $(MAKE) $(-) --norecurse --errorid=$(<:Q) $(=:V:N!=MAKEPATH=*|VPATH=*) .RWD.=$(.RWD.:C%$%/%)$(<) $(.RECURSE.ARGS.:N!=.RECURSE) 1622 $(-recurse-leave:+$(-silent:~echo $(-recurse-leave) $(.RWD.:+$(<:N!=/*:+$$(.RWD.)/))$(<)$$$(":") >&2)) 1623 else echo $(<): warning: cannot recurse on virtual directory >&2 1624 fi 1625 1626.RECURSE.FILE : .USE .ALWAYS .LOCAL .FORCE .RECURSE.FLUSH .RECURSE.SEMAPHORE 1627 set - 1628 $(-silent:~echo $(.RWD.:+$(<:N!=/*:+$(.RWD.)/))$(<)$$(":") >&2) 1629 $(MAKE) $(-) --errorid=$(<:B:Q) --file=$(<) $(=) .RWD.=$(.RWD.) $(.ORIGINAL.ARGS.) 1630 1631/* 1632 * source dependency operator 1633 */ 1634 1635"::" : .MAKE .OPERATOR .PROBE.INIT 1636 if ! "$(<)" 1637 if ! "$(>)" 1638 .FILES. += . 1639 else 1640 $(>:N=[!-.]*|.[!A-Z]*) : .SPECIAL 1641 .FILES. += $(>:N=.|[!-.]*|.[!A-Z]*) 1642 end 1643 elif "$(<:O=2)" 1644 error 2 $(<:O=2): only one target expected 1645 else 1646 local T0 T1 T2 T3 T4 TA TL TP TS OBJ STATIC 1647 if "$(>:V:G=%$(CC.SUFFIX.OBJECT))" 1648 OBJ = 1 1649 end 1650 if ! "$(<:N=*$(CC.SUFFIX.OBJECT))" 1651 $(<) : .COMMAND 1652 end 1653 T0 := $(.LD.KEEP.:/^/%/) 1654 STATIC = 0 1655 for T1 $(>:V:T=X) 1656 if "$(T1:V:A=.ARCHIVE)" || T1 == "[-+]l*" 1657 $(T1:V) : .ARCHIVE .MULTIPLE 1658 if T1 == "$(CC.LD.STATIC)" 1659 STATIC = 1 1660 if CC.SUFFIX.DYNAMIC == ".dll" 1661 continue 1662 end 1663 elif T1 == "$(CC.LD.DYNAMIC)" 1664 STATIC = 0 1665 if CC.SUFFIX.DYNAMIC == ".dll" 1666 continue 1667 end 1668 elif T1 == "+l*" && "$(<:A=.COMMAND)" 1669 .PACKAGE.$(T1:/+l//).library.$(<:B) := +l 1670 end 1671 TP += $(T1:V) 1672 elif T2 = "$(T1:G=$(T0))" 1673 TP += $(T2) 1674 elif T1 == ".[a-zA-Z]*|[!-+]*=*|$\(*\)" || "$(T1:A=.ATTRIBUTE|.STATE)" || "$(T1:A=.MAKE:A=.LOCAL)" 1675 TP += $(T1:V) 1676 if "$(T1:A!=.USE)" 1677 TA += $(T1:V) 1678 end 1679 elif T1 == "[-+]?*" 1680 .OPTIONS.$(<) += $(T1) 1681 elif T1 == "-" 1682 T4 = 1 1683 elif OBJ && ( T2 = "$(T1:G=%$(CC.SUFFIX.OBJECT))" ) 1684 if CC.SUFFIX.OBJECT == "$(T1:S)" 1685 T2 := $(T1) 1686 else 1687 if "$(-target-context)" 1688 T2 := $(T2:D=$(T1:D):B:S) 1689 elif "$(-target-prefix)" 1690 T2 := $(T2:D=$(T1:D):B:S:C%/%$(-target-prefix)%G) 1691 end 1692 $(T2) : .SPECIAL .IMPLICIT $(T1) 1693 $(T1) : .SPECIAL .TERMINAL 1694 end 1695 if T2 != "$(<)?($(CC.SUFFIX.COMMAND))" 1696 if STATIC 1697 $(T2) : .SPECIAL CC.DLL= CC.DLLBIG= 1698 if CC.SUFFIX.DYNAMIC == ".dll" 1699 TS += $(T2) 1700 continue 1701 end 1702 end 1703 TP += $(T2) 1704 end 1705 T3 += $(T2) 1706 elif "$(T1:N=*.*:G=%)" && T1 != "$(<)?($(CC.SUFFIX.COMMAND))" 1707 if "$(T1:G=$(<))" || "$(T1:G=$(<)$(CC.SUFFIX.COMMAND))" 1708 TP += .IMPLICIT 1709 end 1710 TP += $(T1) 1711 elif T4 1712 TP += $(T1) 1713 end 1714 end 1715 T0 := $(<) 1716 TL = 1717 if "$(<:A=.ARCHIVE)" || "$(TP:V:A=.ATTRIBUTE:A=.ARCHIVE)" 1718 TP += -COMMAND 1719 if ! "$(@:V)" && ! "$(~:A=.USE)" 1720 TP += .ARCHIVE$(CC.SUFFIX.OBJECT) 1721 end 1722 TL = 1 1723 else 1724 TA += $(.LIBRARY.ONLY.) 1725 if "$(T3:N=$(<)?($(CC.SUFFIX.COMMAND)))" 1726 TL = 1 1727 elif OBJ || "$(>:V:A=.ARCHIVE)" 1728 if "$(T0:N=*$(CC.SUFFIX.OBJECT))" 1729 TP += .OBJECT$(CC.SUFFIX.OBJECT) 1730 else 1731 if ! "$(<:S)" && CC.SUFFIX.COMMAND 1732 $(T0) : .VIRTUAL $(T0)$(CC.SUFFIX.COMMAND) 1733 T0 := $(T0)$(CC.SUFFIX.COMMAND) 1734 end 1735 TP += .COMMAND$(CC.SUFFIX.OBJECT) 1736 TL = 1 1737 end 1738 else 1739 TP += .OBJECT 1740 end 1741 end 1742 if TL 1743 TL := CC.SHARED.LIBS.$(T0) 1744 $(TL) := $$(*$(T0):VBFUI:A=.ARCHIVE:N=-l*:U) 1745 ($(TL)) : .PARAMETER 1746 TP += ($(TL)) 1747 end 1748 if T1 = "$(T3:A=.IMPLICIT)" 1749 $(T1) : .SPECIAL $(TA:V:Q) 1750 if "$(.OPTIONS.$(<))" 1751 (.OPTIONS.$(<)) : .PARAMETER 1752 $(T1) : .SPECIAL (.OPTIONS.$(<)) 1753 end 1754 end 1755 if TS 1756 .LIBRARY.STATIC.$(<:B:/^$(CC.PREFIX.ARCHIVE)//) : $(CC.LD.STATIC) $(TS) $(CC.LD.DYNAMIC) 1757 end 1758 $(T0) : $(TP:V:Q) 1759 if "$(@:V:?1??)" 1760 eval 1761 $$(T0) : 1762 $(@:V) 1763 end 1764 end 1765 if "$(<:N=*_*)" && ! "$(@$(<):V)" && ( T1 = "$(*$(<):@N=$(<:/.*_//).*)" ) 1766 T1 := $(T1:S) 1767 T2 := %$(T1)>% 1768 if "$(@$(T2):V)" 1769 eval 1770 $$(<) : 1771 $(@$(T2):V:/$$(>)/$$(*:N=*$(T1):O=1)/G) 1772 end 1773 end 1774 end 1775 : $(.INSTALL.COMMON. - $(<) $(T0) $(>)) : 1776 end 1777 1778/* 1779 * if no rhs then make all by default 1780 * otherwise add rhs to all 1781 */ 1782 1783":ALL:" : .MAKE .OPERATOR 1784 if "$(>:V)" 1785 .ALL : $(>:V) 1786 if ! "$(~.MAIN)" 1787 .MAIN : .ALL 1788 end 1789 else 1790 .MAIN : .CLEAR .ALL 1791 if "$(<:V)" 1792 $(<) : .ALL 1793 end 1794 end 1795 1796/* 1797 * DEPRECATED 1798 * lhs builds rhs as a side effect 1799 */ 1800 1801":BUILD:" : .MAKE .OPERATOR 1802 $(<) : $(>) 1803 eval 1804 $$(>) : .JOINT .FORCE 1805 $(@:V) 1806 end 1807 1808/* 1809 * DEPRECATED -- use $(sh ...) instead 1810 * lhs is a variable whose value is the result 1811 * of shell command substitution on the action 1812 * wrt prerequisites on the rhs 1813 */ 1814 1815":COMMAND:" : .MAKE .OPERATOR 1816 .RETAIN : $(<) 1817 eval 1818 $$(<) : .SPECIAL .VIRTUAL .FUNCTIONAL $$(-mam:N=static*:?.ALWAYS .LOCAL??) $$(>) 1819 $(@:V) 1820 end 1821 1822/* 1823 * lhs is a copy of rhs 1824 */ 1825 1826":COPY:" : .MAKE .OPERATOR 1827 $(<:V) : .SPECIAL .DO.COPY $(>:V) 1828 1829/* 1830 * make dll via cc- if not already made at this level 1831 */ 1832 1833.RECURSE.DLL : .MAKE .USE 1834 local DIR 1835 if .DLL.TOP. && ! "$(-mam:N=static*,port*)" && ! "$(.SHARED.ON.)" && ( CC.SUFFIX.DYNAMIC || CC.SUFFIX.SHARED ) 1836 DIR := $(<:/^.DLL.//) 1837 if ! "$(DIR:T=F)" 1838 { test -d $(DIR) || $(MKDIR) $(DIR) } 1839 end 1840 .ORIGINAL.ARGS. := .DLL.$(.ORIGINAL.ARGS.:N=install|.INSTALL:@?INSTALL?ALL?) 1841 make $(DIR) 1842 end 1843 1844":DLL:" : .MAKE .OPERATOR 1845 local DIR OPT 1846 if "$(PWD:B)" == "cc-*" 1847 .DLL.LIST. += $$(.LIBRARY.LIST.) 1848 else 1849 .DLL.TOP. = 1 1850 if ! ( OPT = "$(>:N=-*)" ) 1851 OPT := $(CC.OPTIMIZE) 1852 end 1853 if "$(>:N=big|BIG)" 1854 OPT += $(CC.DLLBIG) 1855 else 1856 OPT += $(CC.DLL) 1857 end 1858 DIR := cc$(OPT:/,/~/G:/ /,/G) 1859 .VARIANT.$(DIR) := VARIANT=DLL 1860 .ALL : .DLL.$(DIR) 1861 .DLL.$(DIR) : .RECURSE.DLL 1862 end 1863 1864.DLL.ALL : $$(.DLL.LIST.) 1865 1866.DLL.INSTALL. : .FUNCTION 1867 local L R 1868 for L $(.DLL.LIST.) 1869 R += $(*.INSTALL:N=*/$(.DLL.NAME. $(L))*) 1870 end 1871 return $(R) 1872 1873.DLL.INSTALL : $$(.DLL.INSTALL.) 1874 1875.DLL.CHECK : .USE .MAKE .VIRTUAL .FORCE 1876 local B L 1877 B := $(<:/.DLL.CHECK.//) 1878 if !.DLL.TOP. && ! .DLL.LIST. && ! "$(-mam:N=static*,port*)" && ! "$(.SHARED.ON.)" && ! "$(PWD:B:N=cc-*)" && ( L = "$(.DLL.NAME. $(B))" ) 1879 $(L) : .ARCHIVE 1880 if L = "$(L:T=F)" 1881 error 1 $(B): generating static library but dynamic $(L) already exists 1882 end 1883 end 1884 1885/* 1886 * lhs is a function 1887 */ 1888 1889":FUNCTION:" : .MAKE .OPERATOR 1890 eval 1891 $$(<:V) : .SPECIAL .FUNCTION $$(>:V) 1892 $(@:V) 1893 end 1894 1895/* 1896 * add an initialization make action 1897 * rhs is optional name 1898 */ 1899 1900":INIT:" : .MAKE .OPERATOR 1901 local T 1902 if ( T = $(>:O=1) ) 1903 T := $(.GENSYM.) 1904 end 1905 if T != ".*" 1906 T := .$(T) 1907 end 1908 if T != "*.(INIT|init)" 1909 T := $(T).init 1910 end 1911 .MAKEINIT : $(T) 1912 eval 1913 $$(T) : .MAKE .VIRTUAL .FORCE 1914 $(@:V) 1915 end 1916 1917/* 1918 * install lhs from rhs 1919 */ 1920 1921":INSTALL:" : .MAKE .OPERATOR 1922 local D O R S T X 1923 if ! "$(<:V)" && ! "$(>:V)" && ! "$(@:V)" 1924 .NO.INSTALL. = 1 1925 else 1926 if O = "$(>:N=*=*)" 1927 $(O) : .SPECIAL .VIRTUAL .DONTCARE 1928 end 1929 if T = "$(>:N=-*:N!=-)" 1930 error 1 use {user,group,mode}=... instead of -{u,g,m}... 1931 T := $(T:/-u/user=/:/-g/group=/:/-m/mode=/) 1932 $(T) : .SPECIAL .VIRTUAL .DONTCARE 1933 O += $(T) 1934 end 1935 S := $(>:T=XS) 1936 R := $(>:N!=-*|*=*:T!=XS) 1937 if ! "$(<:V)" 1938 if ! "$(R:V)" 1939 eval 1940 .DO.INSTALL : .USE 1941 $(@:V) 1942 end 1943 else 1944 .INSTALL : $(R) 1945 if "$(@:V)" 1946 eval 1947 $$(R) : 1948 $(@:V) 1949 end 1950 end 1951 end 1952 elif "$(.INSTALL.$(R:B:S))" != "." 1953 if $(R:O) == 1 1954 eval 1955 .INSTALL.$(R:B:S) = $(<:V:D) 1956 end 1957 end 1958 if "$(<:V:D)" 1959 $(<:V:D) : .SPECIAL .DO.INSTALL.DIR 1960 D := .DO.INSTALL.DIR.$(<:V:D:C,/,_,G) 1961 $(D) : .VIRTUAL .IGNORE $(<:V:D) 1962 .INSTALL : $(<:V:D) 1963 end 1964 .INSTALL : $(<:V) 1965 if "$(@:V)" 1966 eval 1967 $$(<:V) : .SPECIAL .SCAN.IGNORE $$(D:V) $(S) $(R) 1968 $(@:V) 1969 end 1970 elif "$(R)" 1971 if "$(R:A=.DONTCARE)" 1972 X = :T=F 1973 else 1974 X = 1975 end 1976 $(<:V) : .SPECIAL .SCAN.IGNORE $(D) $$("$(R)":N!=$$(<)|$$(<:P=U)$(X):@?$(O) $(S) $(R) .DO.INSTALL??) 1977 else 1978 $(<:V) : .SPECIAL .SCAN.IGNORE $(D) $$(<:B:S:N!=$$(<):@?$(O) $(S) $(R) $$(<:B:S) .DO.INSTALL??) 1979 end 1980 end 1981 end 1982 1983/* 1984 * install rhs into lhs dir 1985 */ 1986 1987":INSTALLDIR:" : .MAKE .OPERATOR 1988 local D O R T 1989 if O = "$(>:N=*=*)" 1990 $(O) : .SPECIAL .VIRTUAL .DONTCARE 1991 end 1992 if T = "$(>:N=-*:N!=-)" 1993 error 1 use {user,group,mode}=... instead of -{u,g,m}... 1994 T := $(T:/-u/user=/:/-g/group=/:/-m/mode=/) 1995 $(T) : .SPECIAL .VIRTUAL .DONTCARE 1996 O += $(T) 1997 end 1998 O += $(>:T=XS) 1999 R := $(>:N!=-*|*=*:T!=XS) 2000 if ! "$(<:V)" || "$(<:V)" == "." 2001 for T $(R) 2002 eval 2003 .INSTALL.$(T:B:S) = . 2004 end 2005 end 2006 elif ! "$(R)" 2007 $(<:V) : .SPECIAL .DO.INSTALL.DIR $(>) 2008 .INSTALL : $(<:V) 2009 else 2010 for T $(R) 2011 eval 2012 .INSTALL.$(T:B:S) = 2013 end 2014 for D $(<:V) 2015 eval 2016 $(T:D=$(D:V):B:S) :INSTALL: $(O) $(T) 2017 $(@:V) 2018 end 2019 end 2020 end 2021 end 2022 2023/* 2024 * install in lhs dir using rhs pattern to select 2025 */ 2026 2027":INSTALLMAP:" : .MAKE .OPERATOR 2028 if "$(<)" 2029 local D T 2030 T := $(.GENSYM.) 2031 .INSTALL : $(<) $(T) 2032 $(<) : .SPECIAL .DO.INSTALL.DIR 2033 D := .DO.INSTALL.DIR.$(<:C,/,_,G) 2034 $(D) : .VIRTUAL .IGNORE $(<) 2035 .INSTALL.MAPS. += $(>) 2036 eval 2037 $$(T) : .MAKE .FORCE .IGNORE 2038 local T 2039 for T $$(...:$(>):A!=.ATTRIBUTE|.FUNCTIONAL|.MAKE|.VIRTUAL:T=F:N!=$(<)/*) 2040 $$(T:D=$(<):B:S) : $$(T) .SPECIAL .SCAN.IGNORE $(D) .DO.INSTALL 2041 .INSTALL : $$(T:D=$(<):B:S) 2042 end 2043 end 2044 end 2045 2046/* 2047 * install $(PROTO) output of rhs in lhs dir 2048 */ 2049 2050":INSTALLPROTO:" : .MAKE .OPERATOR 2051 local A P T 2052 T := $(<:O=1) 2053 if "$(T)" == "*.h" 2054 A = :INSTALL: 2055 else 2056 A = :INSTALLDIR: 2057 end 2058 if P = "$(<:O=2)" 2059 P := -f -e $(P) 2060 end 2061 eval 2062 $(T) $(A) $(>) (PROTO) (PROTOFLAGS) 2063 $$(PROTO) -p $$(PROTOFLAGS) $(P) $$(*) $$(PROTOINSTALL) > 1.$(tmp).x 2064 if $$(CMP) $$(CMPFLAGS) $$(<) 1.$(tmp).x 2065 then $$(RM) $$(RMFLAGS) 1.$(tmp).x 2066 else $$(MV) 1.$(tmp).x $$(<) 2067 fi 2068 end 2069 2070/* 2071 * action jointly builds all targets on lhs wrt prerequisites on rhs 2072 */ 2073 2074":JOINT:" : .MAKE .OPERATOR 2075 eval 2076 $$(<:V) : .JOINT $$(>:V) 2077 $(@:V) 2078 end 2079 2080/* 2081 * <name> [<major.minor>] [option ...] :LIBRARY: <source> -[lL]* 2082 */ 2083 2084":LIBRARY:" : .MAKE .OPERATOR .PROBE.INIT 2085 local A B H I L M N P Q R S T V X 2086 P := $(.PACKAGE.plugin) 2087 B := $(<:O=1) 2088 M := $(B) 2089 I = 1 2090 for T $(<:O>1) 2091 if T == "+([-+.0-9])" 2092 V := $(T) 2093 elif T == "DLL*" 2094 if "$(PWD:B)" == "cc-*" 2095 .DLL.LIST. += $(B) 2096 else 2097 .DLL.TOP. = 1 2098 end 2099 .ALL : .$(B) 2100 else 2101 if T == "--*" 2102 T := $(T:/--//) 2103 end 2104 if T == "no*" 2105 T := $(T:/no//} 2106 X = 0 2107 else 2108 X = 1 2109 end 2110 if T == "id=*" 2111 M := $(T:/id=//) 2112 elif T == "install" 2113 I := $(X) 2114 elif T == "list=*" 2115 H := $(T:/list=//) 2116 elif T == "plugin=*" 2117 P := $(T:/plugin=//) 2118 elif T == "private" 2119 let I = ! X 2120 elif T == "shared=*" 2121 N := $(T:/shared=//) 2122 elif T == "static" 2123 A := $(X) 2124 end 2125 end 2126 end 2127 if ! V 2128 if P 2129 V = 0.0 2130 else 2131 V = 1.0 2132 end 2133 elif V == "-" 2134 V = 2135 elif ! VERSION 2136 VERSION := $(V) 2137 end 2138 if "$(B:A=.TARGET)" 2139 T := .ALL 2140 else 2141 T := $(B) 2142 .ALL : $(B) 2143 end 2144 .LIBRARY.LIST. += $(B) 2145 if ! .MAIN.TARGET. 2146 .MAIN.TARGET. := $(B:B:S) 2147 end 2148 L := $(.LIB.NAME. $(P)$(B) $(V)) 2149 $(L) : .ARCHIVE$(CC.SUFFIX.OBJECT) 2150 .PLUGIN.$(B) := $(P) 2151 .RETAIN : .PLUGIN.$(B) 2152 if ! I || P 2153 if ! I || ! A 2154 :INSTALLDIR: $(L) 2155 end 2156 if P 2157 X := $(.DLL.NAME. $(B) $(V):B:C%\..*%%) 2158 if I && CC.SHARED.REGISTRY 2159 .CC.SHARED.REGISTRY.$(X) := $(LIBDIR)/$(P)/registry.ld 2160 $(.DLL.NAME. $(B) $(V)) : .CC.DLL.DIR.INIT 2161 .CC.DLL.DIR.INIT : .VIRTUAL .IGNORE $(LIBDIR)/$(P) 2162 $(LIBDIR)/$(P) : .DO.INSTALL.DIR 2163 end 2164 .CC.DLL.DIR.$(X) := $(LIBDIR)/$(P) 2165 .INSTALL.$(X) := . 2166 end 2167 end 2168 if CC.SHARED.NAME && N != "-" 2169 if N == "-+([0-9])" 2170 .PACKAGE.soname := $(N) 2171 N = 2172 end 2173 if ! N 2174 N := $(.DLL.NAME. $(B) $(V)) 2175 elif N == "+([-+.0-9])" 2176 N := $(.DLL.NAME. $(B) $(N)) 2177 end 2178 X := $(.DLL.NAME. $(B) $(V):B:C%\..*%%) 2179 .CC.SHARED.NAME.$(X) := $(CC.SHARED.NAME)$(N) 2180 end 2181 if "$(>:G=%$(CC.SUFFIX.OBJECT):O=1)" 2182 if ! I 2183 X := $(.NO.INSTALL.) 2184 .NO.INSTALL. := 1 2185 end 2186 eval 2187 $(L) :: $(>:V:N!=[-+][lL]*) 2188 $(@:V) 2189 end 2190 if ! I 2191 .NO.INSTALL. := $(X) 2192 end 2193 end 2194 .INSTALL : .DLL.CHECK.$(B) 2195 .DLL.CHECK.$(B) : .DLL.CHECK 2196 $(B).VERSION := $(V) 2197 D := $(>:V:N=-L*) 2198 if ! P || A 2199 Q := $(P)$(B) 2200 S := $(Q) $(>:V:N=[-+]l*::N!=[-+]l$(Q)) $(.PACKAGE.LIBRARIES. $(.PACKAGE.build:A!=.TARGET):N!=[-+]l$(Q)) $(LDLIBRARIES:N=[-+]l*:N!=[-+]l$(Q)) 2201 eval 2202 if I && ! "$(.NO.INSTALL.)" 2203 $$(LIBDIR)/lib/$(Q) :INSTALL: $(Q).req 2204 end 2205 .REQUIRE.$(Q) = $(S:U) 2206 (.REQUIRE.$(Q)) : .PARAMETER 2207 if "$(-mam:N=static*,port*)" 2208 $(Q).req : (CC) (CCFLAGS) (LDFLAGS) (.REQUIRE.$(Q)) 2209 set - 2210 echo 'int main(){return 0;}' > 1.$(tmp).c 2211 $$(CC) $$(CCFLAGS) -c 1.$(tmp).c && 2212 x=`$$(CC) $$(CCFLAGS) $$(LDFLAGS) -o 1.$(tmp).x 1.$(tmp)$(CC.SUFFIX.OBJECT) -l'*' 2>&1 | $(SED) -e 's/[][()+@?]/#/g' || :` && 2213 { 2214 case "$(D)" in 2215 *?) echo " $(D)" ;; 2216 esac 2217 for i in $$(.MAM.REQ. $$(.REQUIRE.$(Q))) 2218 do case $i in 2219 "$(Q)"$(...:A=.ARCHIVE:A=.TARGET:N=$(CC.PREFIX.ARCHIVE)*$(CC.SUFFIX.ARCHIVE):/^$(CC.PREFIX.ARCHIVE)\(.*\)$(CC.SUFFIX.ARCHIVE)/|\1/:@/ //G)) 2220 ;; 2221 *) if test -f $$(LIBDIR)/lib/$i 2222 then y=`cat $$(LIBDIR)/lib/$i` 2223 case $y in 2224 *-?*) echo "" $y ;; 2225 esac 2226 continue 2227 elif test ! -f $$(LIBDIR)/$(CC.PREFIX.ARCHIVE)$i$(CC.SUFFIX.ARCHIVE) 2228 then case `{ $$(CC) $$(CCFLAGS) $$(*.SOURCE.%.ARCHIVE:$$(.CC.NOSTDLIB.):N=*/$(CC.PREFIX.ARCHIVE)*:P=L:/^/-L/) $$(LDFLAGS) -o 1.$(tmp).x 1.$(tmp)$(CC.SUFFIX.OBJECT) $(D) -l$i 2>&1 || echo '' $x ;} | $(SED) -e 's/[][()+@?]/#/g' || :` in 2229 *$x*) case `{ $$(CC) $$(CCFLAGS) $$(LDFLAGS) -o 1.$(tmp).x 1.$(tmp)$(CC.SUFFIX.OBJECT) $(D) -l$i 2>&1 || echo '' $x ;} | $(SED) -e 's/[][()+@?]/#/g' || :` in 2230 *$x*) continue ;; 2231 esac 2232 ;; 2233 esac 2234 fi 2235 ;; 2236 esac 2237 echo " -l$i" 2238 done 2239 } > $$(<) 2240 $$(RM) $$(RMFLAGS) 1.$(tmp).* 2241 else 2242 $(Q).req : (CC) (.REQUIRE.$(Q)) .PREQUIRE 2243 echo "" $$(.REQ. $$(.REQUIRE.$(Q))) > $$(<) 2244 end 2245 $(L) : .INSERT $(Q).req.REQUIRE 2246 $(Q).req.REQUIRE : .VIRTUAL .IGNORE .NULL $(Q).req 2247 end 2248 end 2249 eval 2250 _BLD_$(M:B:S:/[^a-zA-Z0-9_]/_/G) == 1 2251 end 2252 .LIBRARY.ONLY. += _BLD_$(B:B:S:/[^a-zA-Z0-9_]/_/G)= 2253 if P || ! A 2254 $(T) : $(L) $(.SHARED. $(L) $(B) $(V|"-") $(>:V:N=[!-+]*=*) $(>:V:N=[-+]l*)) 2255 else 2256 $(T) : $(L) 2257 end 2258 if H 2259 L := $(M:B) 2260 eval 2261 $(L)src = $$(*$$(*$$(*$(L))):N=*.c:T=F) 2262 $(L)list.h : ($(L)src) $$$(-mam:+$$$($(L)src)) 2263 { 2264 cat <<! 2265 $$("/")* 2266 $$(" ")* -l$(L) function list -- define your own CMDLIST() 2267 $$(" ")*/ 2268 ! 2269 $$(SED) \ 2270 -e '/^$(H)[a-z_][a-z_0-9]*(/!d' \ 2271 -e 's/^$(H)//' \ 2272 -e 's/(.*//' \ 2273 -e 's/.*/CMDLIST(&)/' \ 2274 $$($$(~):T=F) | 2275 $$(SORT) -u 2276 } > 1.$$(tmp).h 2277 if $$(CMP) $$(CMPFLAGS) 1.$$(tmp).h $$(<) 2278 then $$(RM) $$(RMFLAGS) 1.$$(tmp).h 2279 else $$(MV) 1.$$(tmp).h $$(<) 2280 fi 2281 end 2282 end 2283 2284/* 2285 * <pseudo-library> :REQUIRE: -[lL]* 2286 */ 2287 2288":REQUIRE:" : .MAKE .OPERATOR 2289 if ! "$(.NO.INSTALL.)" 2290 $$(LIBDIR)/lib/$(<) :INSTALL: $(<).req 2291 end 2292 .REQUIRE.$(<) := $(>) 2293 (.REQUIRE.$(<)) : .PARAMETER 2294 eval 2295 $$(<:B:S=.req) : (.REQUIRE.$$(<)) 2296 echo "" $$(.REQ. $$(.REQUIRE.$(<))) > $$(<) 2297 end 2298 2299.REQ. : .FUNCTION 2300 local B I Q R L 2301 for I $(%) 2302 if I == "[-+]l*" 2303 B := $(I:/^[-+]l//) 2304 else 2305 B := $(I) 2306 I := -l$(I) 2307 end 2308 if ! "$(.PACKAGE.$(B).private)" 2309 if "$(.REQUIRE.$(B))" 2310 R += $(I) 2311 else 2312 Q := $(.REQUIRE.-l% $(I)) 2313 if Q != "{ - }" 2314 for L $(Q) 2315 if "$(L:N=-l*)" 2316 if "$(.REQUIRED.$(L:/-l//))" 2317 R += $(I) 2318 break 2319 end 2320 end 2321 if "$(L:T=F)" 2322 R += $(I) 2323 break 2324 end 2325 end 2326 end 2327 end 2328 end 2329 end 2330 return $(R) 2331 2332.MAM.REQ. : .FUNCTION 2333 local B I R 2334 for I $(%) 2335 if I == "[-+]l*" 2336 B := $(I:/^[-+]l//) 2337 else 2338 B := $(I) 2339 end 2340 if ! "$(.PACKAGE.$(B).private)" 2341 R += $(B) 2342 end 2343 end 2344 return $(R) 2345 2346.PREQUIRE : .MAKE .IGNORE 2347 local B P R 2348 B := $(<<:B) 2349 P := $((.PREQUIRE.$(B))) 2350 R := $(.REQ. $(.REQUIRE.$(B))) 2351 if "$(R)" != "$(P)" 2352 (.PREQUIRE.$(B)) := $(R) 2353 force $(<<) 2354 end 2355 2356.SHARED.DEF. = .SHARED.DEF$(CC.SUFFIX.SHARED) 2357.SHARED.USE. = .SHARED$(CC.SUFFIX.SHARED) 2358.SHARED.FLAGS. = : $(CCFLAGS) : 2359 2360.SHARED.ON. : .FUNCTION 2361 if ! "$(-static-link)" && ! "$(CC.LIB.DLL:N=broken)" && "$(CC.DLL)" && ! "$(-mam:N=static*,port*)" && ( "$(-shared)" || "$(.SHARED.FLAGS.:@N=* ($(CC.DLL)|$(CC.DLLBIG)) *)" || "$(.SHARED.FLAGS.:V:@N=* ($\(CC.DLL\)|$\(CC.DLLBIG\)) *)" ) 2362 return 1 2363 end 2364 2365.SHARED.LIST.EXCLUDE. : .FUNCTION 2366 local A L T X 2367 T = <<< 2368 while "$($(T):A=.MAKE)" 2369 T := $(T)< 2370 end 2371 A := $(*$($(T)<):O=1) 2372 if CC.SUFFIX.ARCHIVE && "$(A:N=*@($(CC.SUFFIX.ARCHIVE)))" 2373 L := $(A:B) 2374 if CC.PREFIX.ARCHIVE 2375 L := $(L:/^$(CC.PREFIX.ARCHIVE)//) 2376 end 2377 else 2378 T := $($(T):O=1) 2379 if CC.SUFFIX.DYNAMIC && "$(T:N=*@($(CC.SUFFIX.DYNAMIC)))" 2380 L := $(T:B) 2381 if CC.PREFIX.DYNAMIC 2382 L := $(L:/$(CC.PREFIX.DYNAMIC)//) 2383 end 2384 elif CC.SUFFIX.SHARED && "$(T:N=*@($(CC.SUFFIX.SHARED)))" 2385 L := $(T:B) 2386 if CC.PREFIX.SHARED 2387 L := $(L:/$(CC.PREFIX.SHARED)//) 2388 end 2389 end 2390 end 2391 if L 2392 L := $(L:/[0-9._]*$//) 2393 X := N!=-l$(L) 2394 if CC.SUFFIX.DYNAMIC 2395 X := $(X)|?(*/)$(CC.PREFIX.DYNAMIC)$(L)*([0-9._])$(CC.SUFFIX.DYNAMIC) 2396 end 2397 if CC.SUFFIX.SHARED 2398 X := $(X)|?(*/)$(CC.PREFIX.SHARED)$(L)*([0-9._])$(CC.SUFFIX.SHARED) 2399 end 2400 end 2401 return $(X) 2402 2403.SHARED.LIST.LIBS. : .FUNCTION 2404 return $(~~:VBFUI) 2405 2406.SHARED.LIST. : .FUNCTION 2407 local A D L M R S T U N=0 X 2408 X := $(.SHARED.LIST.EXCLUDE.) 2409 M := [-+]l*|*$(CC.SUFFIX.ARCHIVE)|*$(CC.SUFFIX.SHARED) 2410 S := $(%:O=1) 2411 A := $(%:O>1:$(X):/^$(CC.PREFIX.ARCHIVE)\(.*\)\$(CC.SUFFIX.ARCHIVE)/+l\1/) 2412 for L $(A) 2413 if L == "{" 2414 let N = N + 1 2415 elif L == "}" 2416 let N = N - 1 2417 elif N <= 1 2418 T += $(L) 2419 end 2420 end 2421 N = 0 2422 for L $(A:H=O) 2423 if L == "}" 2424 let N = N + 1 2425 elif L == "{" 2426 let N = N - 1 2427 else 2428 if L == "+l*" 2429 if ! "$(T:N=$(L))" && ! "$(R:N=$(L))" 2430 D := $(L:/+/-/) 2431 if "$(R:N=$(D))" || ! "$(-all-static)" && "$(CC.STDLIB:N=$(D:T=F:P=D))" && "$(.PACKAGE.$(L:/+l//).library)" != "+l" 2432 L := $(D) 2433 end 2434 end 2435 end 2436 if L != "$(M)" || ! "$(R:N=$(L))" || N <= 1 && "$(T:N=$(L))" 2437 R += $(L) 2438 end 2439 end 2440 end 2441 return $(S:T=F) $(R:H=O:T=F) 2442 2443.SHARED. : .FUNCTION 2444 local A B D L S T 2445 if "$(.SHARED.ON.)" 2446 if "$(.SHARED.DEF.:A=.TARGET)" 2447 return $($(.SHARED.DEF.) $(%)) 2448 end 2449 A := $(%:O=1) 2450 B := $(CC.PREFIX.SHARED)$(%:O=2)$(CC.SUFFIX.SHARED) 2451 L := $(%:O>3:N=[-+]l*) 2452 $(L) : .DONTCARE 2453 if "$(%:O=3)" != "[0-9]*" 2454 S := $(B) 2455 else 2456 S := $(B).$(%:O=3) 2457 end 2458 $(S) : .SHARED.o $(%:N=[!-+]*=*) $(A) $$(.SHARED.BIND. $(%:O=2) $(L)) 2459 if ! "$(.INSTALL.$(S))" && ! "$(.NO.INSTALL.)" 2460 if ! ( D = "$(.CC.DLL.DIR.$(S:C%\..*%%))" ) 2461 D = $(DLLDIR) 2462 end 2463 $(D:V) :INSTALLDIR: $(S) 2464 $(LD_PRELOAD:N=$(<:C%\$(CC.SUFFIX.SHARED)\..*%$(CC.SUFFIX.SHARED)%):?LD_PRELOAD=""; _RLD_LIST=DEFAULT;?)if $(SILENT) test -f $(<:C%\$(CC.SUFFIX.SHARED)\.%.oo.%) 2465 then $(STDRM) $(RMFLAGS) $(<:C%\$(CC.SUFFIX.SHARED)\.%.oo.%) 2466 fi 2467 if $(SILENT) test -f $(<) 2468 then $(STDMV) $(<) $(<:C%\$(CC.SUFFIX.SHARED)\.%.oo.%) 2469 fi 2470 $(STDCP) $(<:B:S) $(<) 2471 if $(SILENT) test "$(<)" != "$(<:C%\$(CC.SUFFIX.SHARED)\..*%$(CC.SUFFIX.SHARED)%)" 2472 then if $(SILENT) test -f $(<:C%\$(CC.SUFFIX.SHARED)\..*%$(CC.SUFFIX.SHARED)%) 2473 then $(STDRM) $(RMFLAGS) $(<:C%\$(CC.SUFFIX.SHARED)\..*%$(CC.SUFFIX.SHARED)%) 2474 fi 2475 $(STDLN) $(<) $(<:C%\$(CC.SUFFIX.SHARED)\..*%$(CC.SUFFIX.SHARED)%) 2476 fi 2477 chmod -w $(<) 2478 end 2479 end 2480 return $(S) 2481 2482.SHARED.BIND. : .FUNCTION 2483 local ( B X ... ) $(%) 2484 local A F L P S N 2485 N := $(.SHARED.LIST.EXCLUDE.) 2486 X += $("$(B).req":T=F:P=X:T=I:N!=$("\n")|[-+]l$(B)|$(X:/ /|/G):$(N)) 2487 if "$(X)" 2488 let .NO.LIB.TYPE = .NO.LIB.TYPE + 1 2489 for F $(X) 2490 if "$(CC.SHARED)" 2491 if F == "+l*|-ldl|-liconv" /* XXX: probe!!! */ 2492 S += $(F) 2493 if F == "+l*" 2494 if ! ( P = "$(<:T=M:A=.COMMAND:O=1)" ) 2495 P := $(<:T=M:B:S:N=$(CC.PREFIX.ARCHIVE)*$(CC.SUFFIX.ARCHIVE)|$(CC.PREFIX.SHARED)*$(CC.SUFFIX.SHARED)*:O=1) 2496 end 2497 if P 2498 .PACKAGE.$(F:/+l//).library.$(P) := +l 2499 end 2500 end 2501 else 2502 L := $(F:T=F) 2503 if L == "-l*|*$(CC.SUFFIX.DYNAMIC|CC.SUFFIX.SHARED|"..")|*/libm.a" /* XXX: probe!!! */ 2504 S += $(L) 2505 if CC.SUFFIX.STATIC 2506 if A = "$(L:P=B:/\(.*\)\$(CC.SUFFIX.SHARED)\([0-9.]*\)$/\1$(CC.SUFFIX.STATIC)\2/)" 2507 S += $(A) 2508 end 2509 end 2510 elif L && "$(L:A=.TARGET)" 2511 S += $(.REQUIRE.-l% $(F)) 2512 else 2513 P := lib/$(L:B:/$(CC.PREFIX.SHARED)//) 2514 $(P) : .ARCHIVE 2515 if "$(P:T=F)" 2516 S += $(L) 2517 end 2518 end 2519 end 2520 else 2521 L := $(F:T=F) 2522 if L == "*$(CC.SUFFIX.ARCHIVE)" 2523 S += $(L) 2524 end 2525 end 2526 end 2527 let .NO.LIB.TYPE = .NO.LIB.TYPE - 1 2528 if S 2529 return $(.SHARED.LIST. $(S)) 2530 end 2531 end 2532 2533.SHARED.o : .USE (LDSHARED) (LDFLAGS) $$(LDLIBRARIES) 2534 $(LDSHARED) $(LDFLAGS) $(CC.SHARED) -o $(<) $(.CC.LIB.DLL.$(CC.LIB.DLL) $(.SHARED.LIST. $(.SHARED.LIST.LIBS.:$(CC.SHARED:@??:T=F:N=*$(CC.SUFFIX.ARCHIVE)?)))) $(CC.DLL.LIBRARIES) 2535 2536.SHARED.DEF.dll.a .SHARED.DEF.lib .SHARED.DEF.x : .FUNCTION 2537 local A B D G I L S W X Y Z 2538 Y := $(%:O=2) 2539 B := $(Y)$(%:O=3:/[^0-9]//G)$(dll.custom:?_$(dll.custom)??) 2540 D := $(CC.PREFIX.DYNAMIC)$(B:B)$(CC.SUFFIX.DYNAMIC) 2541 if "$(%:O=1)" != "-" 2542 L := $(CC.PREFIX.SHARED)$(Y:B)$(CC.SUFFIX.SHARED) 2543 S := $(CC.PREFIX.SHARED)$(B:B)$(CC.SUFFIX.SHARED) 2544 Z := $(%:O>3:N=+l*) 2545 X := 2546 if ! "$(.PLUGIN.$(Y))" 2547 X += $(Y) 2548 end 2549 X += $(Z:/^+l//) 2550 Z += $(%:O>3:/^[-+]l//:N!=*=*|$(X:/ /|/):/^/-l/) 2551 $(Z) : .DONTCARE 2552 A := $(%:O=1) 2553 if CC.DLL.DIR == "$\(BINDIR)" 2554 W := $(Y:B:S=.so) 2555 D := $(W)/$(D) 2556 S := $(W)/$(S) 2557 if CC.SUFFIX.DEBUG 2558 G := $(D:D:B:S=$(CC.SUFFIX.DEBUG)) 2559 end 2560 if "$(*.LIBRARY.STATIC.$(Y))" 2561 Z += .LIBRARY.STATIC.$(Y) 2562 .LIBRARY.STATIC.$(Y) : .VIRTUAL 2563 end 2564 if CC.HOSTTYPE == "win32.*" && ! "$(.NO.INSTALL.)" && "$(.INSTALL.$(S))" != "." && "$(ARFLAGS)" != "*I*" && ! "$(*$(A):G=%.def)" 2565 ARFLAGS := $(ARFLAGS)I 2566 end 2567 end 2568 $(D) $(S) $(G:+- $(G)) : .JOINT $(<:/DEF.//) $(*$(A):N=*@($(.LD.KEEP.:/ /|/G:/|$//))) $(A) $(Z) 2569 .ALL : $(D) $(S) 2570 if ! "$(.NO.INSTALL.)" 2571 X := $(D:B:C%\..*%%) 2572 if ! "$(.INSTALL.$(D))" 2573 if ! ( I = "$(.CC.DLL.DIR.$(X))" ) 2574 I = $(DLLDIR) 2575 end 2576 $(I:V) :INSTALLDIR: $(D) 2577 end 2578 if ! "$(.INSTALL.$(S))" && ! "$(.INSTALL.$(X))" 2579 $(LIBDIR)/$(L) :INSTALL: $(S) 2580 if G 2581 $(LIBDIR)/$(G:B:S) :INSTALL: $(G) 2582 end 2583 end 2584 end 2585 end 2586 return $(D) 2587 2588.SHARED.REF.dll.a .SHARED.REF.lib : .FUNCTION 2589 local K L 2590 K := *@($(.LD.KEEP.:/ /|/G:/|$//)) 2591 L := $(%:N=*$(CC.SUFFIX.ARCHIVE):O=1) 2592 return $(CC.LIB.ALL) $(L) $(CC.LIB.UNDEF) $(%:N=$(K):T=F) $(*.LIBRARY.STATIC.$(L:B:/^$(CC.PREFIX.ARCHIVE)//):T=*) $(.SHARED.LIST. $(%:N!=*$(L)|$(K))) 2593 2594.SHARED.dll.a .SHARED.lib : .USE (LDSHARED) (LDFLAGS) $$(LDLIBRARIES) 2595 $(SILENT) test -d $(<:O=1:D) || $(MKDIR) $(<:O=1:D) 2596 $(LDSHARED) $(LDFLAGS) $(CCFLAGS:N=-[gG]*) $(CC.SHARED) -o $(<:O=1) $(.SHARED.REF.lib $(.SHARED.LIST.LIBS.)) $(CC.DLL.LIBRARIES) 2597 2598.SHARED.REF.x : .FUNCTION 2599 local L 2600 L := $(%:N=*$(CC.SUFFIX.ARCHIVE):O=1) 2601 return $(.CC.LIB.DLL.symbol $(L)) $(.SHARED.LIST. $(*.LIBRARY.STATIC.$(L:B:/^$(CC.PREFIX.ARCHIVE)//):T=*) $(%:N!=$(L)|*$(CC.SUFFIX.OBJECT))) 2602 2603.SHARED.x : .USE (LDSHARED) (LDFLAGS) $$(LDLIBRARIES) 2604 $(LDSHARED) $(LDFLAGS) $(CCFLAGS:N=-[gG]*) $(CC.SHARED) -o $(<:O=1:B:S) $(.SHARED.REF.x $(.SHARED.LIST.LIBS.)) $(CC.DLL.LIBRARIES) 2605 2606/* 2607 * link lhs to rhs 2608 */ 2609 2610":LINK:" : .MAKE .OPERATOR 2611 local D L T U 2612 for L $(<) 2613 if "$(L:N=*/*)" 2614 .ALL : $(L:D) $(L) 2615 $(L:D) : .SPECIAL .DO.INSTALL.DIR 2616 D := .DO.INSTALL.DIR.$(L:D) 2617 $(D) : .VIRTUAL .IGNORE $(L:D) 2618 $(L) : .DO.LINK $(D) $(>) 2619 else 2620 if U = "$(L:N!=/*:T!=FD:O=1)" 2621 .ALL : $(U) 2622 $(U) : .SPECIAL .DO.LINK $(>) 2623 end 2624 if ( T = "$(.INSTALL.$(>:B:S):V)" ) != "." && "$(>:A=.ARCHIVE|.COMMAND)" 2625 if ! T 2626 if "$(>:A=.ARCHIVE)" 2627 T = $(LIBDIR) 2628 else 2629 T = $(BINDIR) 2630 end 2631 end 2632 .INSTALL : $(U:D=$(T:V):B:S) $(L:N=/*) 2633 $(U:D=$(T:V):B:S) $(L:N=/*) : .SPECIAL .SCAN.IGNORE .DO.LINK $(>:D=$(T:V):B:S) 2634 end 2635 end 2636 end 2637 2638/* 2639 * if rhs is dir then make recursively, else just make 2640 * rhs name=value are .SCRIPT for sub-makes 2641 */ 2642 2643":MAKE:" : .MAKE .OPERATOR 2644 if "$(-recurse)" != "*combine*" 2645 local ATT EXP LHS RHS SCR 2646 if ! ( LHS = "$(<)" ) 2647 LHS = .RECURSE 2648 .ALL .MAIN : $(LHS) 2649 end 2650 ATT := $(>:A=.ATTRIBUTE) 2651 for SCR $(>:N=*=*) 2652 eval 2653 $(SCR) 2654 end 2655 script $(SCR:/=.*//) 2656 end 2657 RHS = $(>:N!=*=*:A!=.ATTRIBUTE) 2658 eval 2659 $$(<) : 2660 $(@:V) 2661 end 2662 $(LHS) : $(ATT) $$(.RECURSE.INIT. $(RHS)) 2663 elif ! .NONRECURSIVE.PREFIX 2664 local A B I P INS APP NB NP OB OP 2665 A = :: 2666 A := $(@$(A):V) 2667 eval 2668 ":NONRECURSIVE_COMMAND:" : .MAKE .OPERATOR 2669 $(A:V) 2670 end 2671 "::" : .MAKE .OPERATOR 2672 if .NONRECURSIVE.PREFIX 2673 local I P 2674 .PACKAGE.build.$(<:O=1) := $(.PACKAGE.build) 2675 for I $(>) 2676 if I != "[-+]*|$(.NONRECURSIVE.PREFIX)/*" 2677 P += $(I:C,^,$(.NONRECURSIVE.PREFIX)/,) 2678 else 2679 P += $(I) 2680 end 2681 end 2682 eval 2683 $$(<) :NONRECURSIVE_COMMAND: $$(P) 2684 $(@:V) 2685 end 2686 else 2687 eval 2688 $$(<) :NONRECURSIVE_COMMAND: $$(>) 2689 $(@:V) 2690 end 2691 end 2692 .ASSERT..SOURCE% : ":NONRECURSIVE_SOURCE:" 2693 ":NONRECURSIVE_SOURCE:" : .MAKE .OPERATOR 2694 if .NONRECURSIVE.PREFIX 2695 local I P 2696 for I $(>) 2697 if I != "[-+]*|$(.NONRECURSIVE.PREFIX)/*" 2698 P += $(I:C,^,$(.NONRECURSIVE.PREFIX)/,) 2699 else 2700 P += $(I) 2701 end 2702 end 2703 eval 2704 $$(<) : $$(P) 2705 $(@:V) 2706 end 2707 else 2708 eval 2709 $$(<) : $$(>) 2710 $(@:V) 2711 end 2712 end 2713 A = 2714 for I $(".":W=R=$(.RECURSE.ARGS.:A!=.ONOBJECT:N!=.RECURSE):N!=-) 2715 A := $(I) $(A) 2716 end 2717 for I $(A) 2718 .NONRECURSIVE.PREFIX := $(I) 2719 OP := $(.PACKAGE.) 2720 .PACKAGE. = - 2721 OB := $(.PACKAGE.build) 2722 .PACKAGE.build = - 2723 include "$(I:X=$(MAKEFILES:/:/ /G):T=F:O=1)" 2724 APP = 2725 INS = 2726 for P $(.PACKAGE.build) 2727 if P == "-" 2728 INS := $(APP) 2729 APP = 2730 else if ! "$(OB:N=$(P))" 2731 APP += $(P) 2732 end 2733 end 2734 .PACKAGE.build := $(INS) $(OB) $(APP) 2735 APP = 2736 INS = 2737 for P $(.PACKAGE.) 2738 if P == "-" 2739 INS := $(APP) 2740 APP = 2741 else if ! "$(OP:N=$(P))" 2742 APP += $(P) 2743 end 2744 end 2745 .PACKAGE. := $(INS) $(OP) $(APP) 2746 end 2747 .NONRECURSIVE.PREFIX = 2748 .ASSERT. : .DELETE .SOURCE% 2749 eval 2750 .NONRECURSIVE.PACKAGE.LIBRARIES. : .FUNCTION 2751 $(@.PACKAGE.LIBRARIES.:V) 2752 end 2753 .PACKAGE.LIBRARIES. : .FUNCTION 2754 if ! "$(%)" 2755 return $(.NONRECURSIVE.PACKAGE.LIBRARIES. $(.PACKAGE.build.$(<<:O=1))) 2756 end 2757 LDLIBRARIES += $$(.PACKAGE.LIBRARIES.) 2758 end 2759 2760/* 2761 * rhs compilation with no optimization 2762 * lhs is CC.HOSTTYPE match pattern list to match 2763 * activated for all architectures if lhs omitted 2764 */ 2765 2766":NOOPTIMIZE:" : .MAKE .OPERATOR .PROBE.INIT 2767 local T P 2768 .P. : .CLEAR $(<) 2769 P := $(*.P.:/ /|/G) 2770 if ! "$(P)" || "$(-mam:N=static*)" || CC.HOSTTYPE == "$(P)" 2771 for T $(>) 2772 if "$(@.NOOPTIMIZE$(T:S):V)" 2773 $(T:B:S=$(CC.SUFFIX.OBJECT)) : .SPECIAL .NOOPTIMIZE$(T:S) 2774 else 2775 error 1 :NOOPTIMIZE: ignored for suffix $(T:S) 2776 end 2777 end 2778 end 2779 2780":NOPROTECT:" : .MAKE .OPERATOR .PROBE.INIT 2781 local T P 2782 .P. : .CLEAR $(<) 2783 P := $(*.P.:/ /|/G) 2784 if ! "$(P)" || "$(-mam:N=static*)" || CC.HOSTTYPE == "$(P)" 2785 for T $(>) 2786 if "$(@.NOPROTECT$(T:S):V)" 2787 $(T:B:S=$(CC.SUFFIX.OBJECT)) : .SPECIAL .NOPROTECT$(T:S) 2788 else 2789 error 1 :NOPROTECT: ignored for suffix $(T:S) 2790 end 2791 end 2792 end 2793 2794/* 2795 * force default and the usual suspects to do nothing 2796 */ 2797 2798":NOTHING:" : .MAKE .OPERATOR 2799 .ALL .INSTALL .MAIN all cc- install : .CLEAR .DO.NOTHING 2800 exit 0 2801 2802/* 2803 * var :OPTIONAL: src ... 2804 * 2805 * lhs var set to rhs src and rhs asserted on :: 2806 */ 2807 2808":OPTIONAL:" : .MAKE .OPERATOR 2809 $(<) := $(>) 2810 :: $(>) 2811 2812/* 2813 * rhs are package names used in compilation 2814 * a package consists of a library and include directory 2815 * the most recent :PACKAGE: assertion takes highest precedence 2816 * .PACKAGE. is the ordered package list used to alter 2817 * .SOURCE.h, INCLUDEDIR, LDLIBRARIES and ancestor 2818 * .PACKAGE.build is the package list to build against 2819 * $(PACKAGE_<package>_BIN) explicit bin dir for <package> 2820 * $(PACKAGE_<package>_INCLUDE) explicit include for <package> 2821 * $(PACKAGE_<package>_LIB) explicit lib dir for <package> 2822 * $(PACKAGE_<package>) root dir for include|lib for <package> 2823 * $(PACKAGE_PATH) default root dirs for all packages 2824 * _PACKAGE_<package>==1 state var defined for <package> 2825 * the following options either control all packages (: starts token) 2826 * or individual packages (: appended to package name) 2827 * 2828 * :version=xxx: attempt version xxx first 2829 * :noinstall: do not redefine INCLUDEDIR 2830 * :nolibrary: do not link with library 2831 * :static: attempt static library first 2832 * :dynamic: attempt dynamic library first 2833 * :insert: insert into package list 2834 * :noregistry: do not link dll against address registry 2835 * :soname: link dll with $(CC.SHARED.NAME), =-1 for :B: edit 2836 */ 2837 2838.PACKAGE. = 2839.PACKAGE.build = 2840.PACKAGE.install = 2841.PACKAGE.libraries = 2842.PACKAGE.license = 2843.PACKAGE.plugin = 2844.PACKAGE.registry = 1 2845.PACKAGE.soname = 2846.PACKAGE.stdlib = $(*.SOURCE.a) $(CC.STDLIB) /usr/lib /lib 2847.PACKAGE.strip = 2848 2849.PACKAGE.LIBRARY. : .FUNCTION 2850 local P R 2851 if ! ( P = "$(<:T=M:A=.COMMAND:O=1)" ) 2852 P := $(<:T=M:B:S:N=$(CC.PREFIX.ARCHIVE)*$(CC.SUFFIX.ARCHIVE)|$(CC.PREFIX.SHARED)*$(CC.SUFFIX.SHARED)*:O=1) 2853 end 2854 if P 2855 if R = "$(.PACKAGE.$(%).library.$(P))" 2856 return $(R) 2857 end 2858 if R = "$(.PACKAGE.$(%).library.weak.$(P))" 2859 return $(R) 2860 end 2861 end 2862 return $(.PACKAGE.$(%).library) 2863 2864.PACKAGE.LIBRARIES. : .FUNCTION 2865 local L P R 2866 for L $(%) 2867 if P = "$(.PACKAGE.LIBRARY. $(L))" 2868 if ! "$(**:B:S:N=[-+]l$(L)|$(.LIB.NAME. $(L)))" 2869 $(P)$(L) : .DONTCARE 2870 R += $(P)$(L) 2871 end 2872 end 2873 end 2874 .UNBIND : $(R) 2875 R += $(.PACKAGE.libraries) 2876 $(R) : .ARCHIVE .MULTIPLE 2877 return $(R) 2878 2879/* 2880 * initialize the package args 2881 * on return the following are set if found for package $(P) 2882 * PACKAGE_$(P)_BIN package bin dir 2883 * PACKAGE_$(P)_INCLUDE package include dir 2884 * PACKAGE_$(P)_LIB package lib dir 2885 * .PACKAGE.$(P).found 1 if at least one package lib or header found 2886 * the canonicalized last package name is returned 2887 */ 2888 2889.PACKAGE.CONFIG. = lib/pkgconfig 2890.PACKAGE.GLOBAL. = 2891.PACKAGE.LOCAL. = 2892.PACKAGE.PROBE. = 2893 2894.PACKAGE.INIT. : .FUNCTION .PROBE.INIT 2895 local T1 T2 T3 T4 T5 T6 T7 2896 local B D E G H I K L N P Q T V W X Y Z EP IP LP LPL LPV PFX SFX FOUND 2897 if ! .PACKAGE.GLOBAL. 2898 .PACKAGE.GLOBAL. := $(PATH:/:/ /G:D:N!=$(USRDIRS:/:/|/G)|/usr/*([!/])) $(INSTALLROOT:T=F:P=L=*) $(CC.STDLIB:D:N!=$(USRDIRS:/:/|/G)|/usr/*([!/])) $(PATH:/:/ /G:D) $(OPTDIRS:/:/ /G) 2899 .PACKAGE.GLOBAL. := $(.PACKAGE.GLOBAL.:N!=$(PACKAGE_IGNORE):T=F:U) 2900 .PACKAGE.CONFIG. := $(.PACKAGE.GLOBAL.:X=$(.PACKAGE.CONFIG.):T=F:U) 2901 : $(.PACKAGE.PROBE.:V:R) 2902 end 2903 for P $(%) 2904 if "$(_PACKAGE_$(P))" == "0" 2905 continue 2906 end 2907 if "$(PACKAGE_$(P)_found)" != "" 2908 .PACKAGE.$(P).found := $(PACKAGE_$(P)_found) 2909 end 2910 if "$(.PACKAGE.$(P).found)" != "" 2911 continue 2912 end 2913 FOUND = 0 2914 H := $(PACKAGE_$(P)) 2915 if ! H 2916 H := $($(P:F=%(upper)s)_HOME) 2917 if H && H == "*/*" 2918 PACKAGE_$(P) := $(H) 2919 end 2920 end 2921 E := $(PACKAGE_$(P)_BIN) 2922 EP := $(.PACKAGE.$(P).bin) 2923 if EP == "/*" 2924 if ! E 2925 E := $(EP) 2926 end 2927 EP = 2928 end 2929 if ! EP 2930 EP = bin 2931 end 2932 I := $(PACKAGE_$(P)_INCLUDE) 2933 IP := $(.PACKAGE.$(P).include) 2934 if IP == "/*" 2935 if ! I 2936 I := $(IP) 2937 end 2938 IP = 2939 end 2940 if ! IP 2941 IP = include 2942 end 2943 L := $(PACKAGE_$(P)_LIB) 2944 LP := $(.PACKAGE.$(P).lib) 2945 if LP == "/*" 2946 if ! L 2947 L := $(LP) 2948 end 2949 LP = 2950 end 2951 if ! LP 2952 LP := $(CC.STDLIB.BASE) 2953 end 2954 if ( I && L || "$(.PACKAGE.$(P).rules)" != "-" && ( "$(I:T=F)" || "$(L:T=F)" ) ) 2955 FOUND = 1 2956 else 2957 if ! "$(CC.REQUIRE.$(P))" 2958 if T1 = "$(.PACKAGE.CONFIG.:L!~?(lib)($(P)|$(P)-*).pc:O=1)" 2959 T1 := $(T1:T=I:/${\([^}]*\)}/$$(\1)/G) 2960 local $(T1:N=+([[:alnum:]_[:space:]])=*:/=.*//) 2961 $(T1:N=+([[:alnum:]_[:space:]])[:]*:/:.*//) : .CLEAR 2962 : $(T1:V:R) 2963 if !I 2964 I := $(~Cflags:N=-I*:/-I//) 2965 PACKAGE_$(P)_INCLUDE := $(I) 2966 end 2967 if !L 2968 L := $(~Libs:N=-L*:/-L//) 2969 PACKAGE_$(P)_LIB := $(L) 2970 end 2971 CC.REQUIRE.$(P) := $(~Libs:N=[-+]l*) 2972 PACKAGE_$(P) := / 2973 FOUND = 1 2974 end 2975 end 2976 T2 := $(PACKAGE_$(P)) 2977 if T2 2978 if !I 2979 T1 = $(T2)/$(IP) 2980 if "$(T1:P=X)" 2981 I := $(T1) 2982 end 2983 end 2984 if !L 2985 for T3 $(LP) 2986 T1 = $(T2)/$(T3) 2987 if "$(T1:P=X)" 2988 L := $(T1) 2989 break 2990 end 2991 end 2992 end 2993 elif !I && !L 2994 T1 = $(INSTALLROOT)/$(IP)/$(P) 2995 if "$(T1:P=X)" 2996 for K SHARED ARCHIVE 2997 for T3 $(LP) 2998 T1 = $(INSTALLROOT)/$(T3)/$(CC.PREFIX.$(K))$(P)$(CC.SUFFIX.$(K)) 2999 if "$(T1:P=X)" 3000 T2 := $(INSTALLROOT) 3001 PACKAGE_$(P) := $(T2) 3002 break 2 3003 end 3004 end 3005 end 3006 end 3007 end 3008 if !L || !I && !T2 3009 T4 := $(PACKAGE_PATH:/:/ /G) $(.PACKAGE.DIRS.) $(.PACKAGE.GLOBAL.) $(.PACKAGE.GLOBAL.:/:/ /G:C%$%/$(P)%) 3010 if P == "*[!0-9]+([0-9])" 3011 T4 += $(.PACKAGE.GLOBAL.:/:/ /G:C%$%/$(P:C,[0-9]*$,,)%) 3012 end 3013 V = 3014 if T5 = "$(PACKAGE_$(P)_VERSION)" 3015 N := $(P)-$(T5) $(P)$(T5) $(P)R$(T5) $(P)r$(T5) 3016 B = 3017 for T5 $(T5:/\./ /G) 3018 if V 3019 V := $(V)*(?(.)$(T5) 3020 B := $(B)) 3021 else 3022 V := $(T5) 3023 end 3024 end 3025 V := $(V)$(B) 3026 elif P == "*[0-9][rR]+([0-9])" 3027 N := $(P) 3028 P := $(N:/[rR][0-9]*$//) 3029 else 3030 N := 3031 end 3032 if B = "$(P:N=[!0-9]*+([0-9.]):/[0-9]*$//)" 3033 B := @($(P)|$(B)) 3034 else 3035 B := $(P) 3036 end 3037 N += $(P) 3038 if P == "*[!0-9]+([0-9])" 3039 N += $(P:C,[0-9]*$,,) 3040 end 3041 LPL := $(CC.STDLIB:B) $(T1) $(LP) 3042 LPL := $(LPL:U) 3043 T4 := $(T4:N!=//*:T=F:H=P:U) 3044 T7 := $(T4:X=$(IP)/$(P):N!=//*:T=F:D:D) 3045 T1 = 3046 for K SHARED ARCHIVE 3047 SFX := $(CC.SUFFIX.$(K)) 3048 PFX := $(CC.PREFIX.$(K)) 3049 for D $(N) / 3050 T5 := $(T7) $(T4:N=*/$(D):D) $(T4) 3051 T5 := $(T5:U) 3052 if ! V 3053 if ! .PACKAGE.LOCAL. 3054 .PACKAGE.LOCAL. := $(PKGDIRS:T=F:P=A:U) 3055 end 3056 for X $(.PACKAGE.LOCAL.) 3057 Y := $(X)/$(PFX)$(P)$(SFX) 3058 if ( T1 = "$(Y:P=X:O=1:D)" ) 3059 break 3 3060 end 3061 Y := $(X)/$(PFX)$(P)$(CC.LIB.TYPE)$(SFX) 3062 if ( T1 = "$(Y:P=X:O=1:D)" ) 3063 break 3 3064 end 3065 end 3066 end 3067 for LPV $(LPL) 3068 X := $(T5:C%$%/$(D)/$(LPV)/$(PFX)$(P)$(SFX)%:C%^//%/%) 3069 if ( T1 = "$(X:N!=//*:P=X:O=1:D)" ) 3070 break 3 3071 end 3072 if T6 = "$(X:D:N!=//*:P=X:O=1)" 3073 if Z = "$(T6:L>=?(lib)$(B)*$(SFX)*([0-9.]))" 3074 if V 3075 if W = "$(Z:N=*$(V)*:O=1)" 3076 T1 := $(T6) 3077 break 3 3078 end 3079 end 3080 T1 := $(T6) 3081 break 3 3082 end 3083 end 3084 end 3085 end 3086 end 3087 if "$(T1)" 3088 FOUND = 1 3089 L := $(T1) 3090 if T2 3091 T1 := $(T2) 3092 else 3093 T1 := $(T1:D) 3094 end 3095 elif T2 3096 T1 := $(T2) 3097 elif ! ( T1 = "$(T4:C%$%/$(IP)/$(P)%:N!=//*:P=X:O=1:D:D)" ) 3098 T1 := $(T4:N=*/$(P):C%$%/$(IP)%:N!=//*:P=X:O=1:D) 3099 end 3100 if T1 == "/" 3101 T1 = /usr 3102 end 3103 eval 3104 PACKAGE_$(P) = $(T1:P=C) 3105 end 3106 else 3107 T1 := $(T2) 3108 end 3109 if T1 3110 .PACKAGE.DIRS. += $(T1) 3111 if !I && IP != "-" 3112 I := $(T1)/$(IP) 3113 H := $(I)/$(P)/. 3114 if "$(H:P=X)" 3115 I := $(I)/$(P) 3116 end 3117 eval 3118 PACKAGE_$(P)_INCLUDE = $(I:P=C) 3119 end 3120 end 3121 if ! "$(PACKAGE_$(P)_LIB)" || !L && LP != "-" 3122 if !L 3123 L := $(T1)/$(LP:O=N) 3124 end 3125 eval 3126 PACKAGE_$(P)_LIB = $(L:P=C) 3127 end 3128 if ! "$(.PACKAGE.stdlib:N=$(L))" 3129 .SOURCE.a : $(L) 3130 end 3131 end 3132 if ! "$(PACKAGE_$(P)_INCLUDE)" && "$(PACKAGE_$(P)_LIB)" 3133 I := $(PACKAGE_$(P)_LIB:D)/$(IP) 3134 H := $(I)/. 3135 if "$(H:P=X)" 3136 eval 3137 PACKAGE_$(P)_INCLUDE = $(I:P=C) 3138 end 3139 end 3140 end 3141 eval 3142 _PACKAGE_$(P) $(.INITIALIZED.:?=?==?) 1 3143 end 3144 if ! FOUND 3145 for D $(I)/*.h*([!.]) $(I)/*/*.h*([!.]) 3146 if "$(D:P=G:O=1:P=X)" 3147 FOUND = 1 3148 break 3149 end 3150 end 3151 if ! FOUND && "$(PACKAGE_$(P)_VERSION)" 3152 PACKAGE_$(P)_VERSION := 3153 PACKAGE_$(P) := 3154 PACKAGE_$(P)_BIN := 3155 PACKAGE_$(P)_INCLUDE := 3156 PACKAGE_$(P)_LIB := 3157 return $(.PACKAGE.INIT. $(P)) 3158 end 3159 end 3160 end 3161 end 3162 if FOUND && ! "$(PACKAGE_$(P)_BIN)" 3163 if EP == "-" 3164 PACKAGE_$(P)_BIN := 3165 else 3166 PACKAGE_$(P)_BIN := $(PACKAGE_$(P)_LIB:D:B=$(EP)) 3167 end 3168 end 3169 error -1 PACKAGE_$(P)=$(PACKAGE_$(P)) PACKAGE_$(P)_BIN=$(PACKAGE_$(P)_BIN) PACKAGE_$(P)_INCLUDE=$(PACKAGE_$(P)_INCLUDE) PACKAGE_$(P)_LIB=$(PACKAGE_$(P)_LIB) 3170 .PACKAGE.$(P).found := $(FOUND) 3171 end 3172 return $(P) 3173 3174/* 3175 * evaluate a logical expression of package ids 3176 * used by :VARIANT: 3177 */ 3178 3179PACKAGES : .SPECIAL .FUNCTION 3180 local P M X 3181 if ! "$(%)" 3182 return 1 3183 end 3184 M := $(.PACKAGE.:/ /|/G) 3185 for P $(%:/[^a-zA-Z0-9_.]/ /G) 3186 if "$(P)" != "$(M)" 3187 : $(.PACKAGE.INIT. $(P)) 3188 end 3189 end 3190 X := $(%) 3191 for P $(.PACKAGE.) 3192 X := $(X:/\<$(P)\>/1/G) 3193 end 3194 return $(X:/\([A-Za-z_.][A-Za-z0-9_.]*\)/"$$(.PACKAGE.\1.found)"=="1"/G:@/" *"/" \&\& "/G:E) 3195 3196":PACKAGE:" : .MAKE .OPERATOR 3197 local A H I T N O P Q V version insert=0 install=1 this_install library=-l options=1 private 3198 if "$(<)" 3199 /* a separate include handles package definitions */ 3200 eval 3201 $$(<:V) :package: $$(>:V) 3202 $(@:V) 3203 end 3204 return 3205 end 3206 if ! "$(-?ancestor)" 3207 /* please convert me to long op names */ 3208 let I = $(".":P=L=*:C,[^/],,G:O!:H=N:O=1) - 2 3209 if I > 3 3210 I = 3 3211 elif I < 0 3212 I = 0 3213 end 3214 if I && "$(*.VIEW:O=2:P=I=..)" 3215 let I = I + 1 3216 end 3217 set ancestor:=$(I) 3218 end 3219 for T $(>) 3220 if T == "{" || T == "}" 3221 .PACKAGE.build += $(T) 3222 elif T == "+" 3223 break 3224 elif T == "-" 3225 install = 0 3226 elif T == "--" 3227 options = 0 3228 elif T == ":*" || T == "--*" && options || T != "--*" && T == "*=*" && T != "*:*" 3229 for O $(T:/:/ /G) 3230 N := $(O:/^--//) 3231 if N == "no*" 3232 V := 0 3233 N := $(N:/no//) 3234 else 3235 V := 1 3236 end 3237 if N == "*=*" 3238 V := $(N:/[^=]*=//) 3239 N := $(N:/=.*//) 3240 end 3241 S = 3242 Q := $(N) 3243 if N == "optimize" 3244 if "$(PACKAGE_OPTIONS:N=optimize-space)" 3245 N = dynamic 3246 .PACKAGE.strip = $(CC.LD.STRIP) 3247 elif "$(PACKAGE_OPTIONS:N=optimize-time)" 3248 N = static 3249 else 3250 N = 3251 end 3252 elif N == "private" 3253 private = 1 3254 N = static 3255 elif N == "space" 3256 if ! "$(PACKAGE_OPTIONS:N=optimize-time)" 3257 N = dynamic 3258 .PACKAGE.strip = $(CC.LD.STRIP) 3259 else 3260 N = 3261 end 3262 elif N == "time" 3263 if ! "$(PACKAGE_OPTIONS:N=optimize-space)" 3264 N = static 3265 else 3266 N = 3267 end 3268 end 3269 if N == "dynamic" 3270 library := -l 3271 if N == "$(Q)" 3272 .NO.LIB.TYPE = 1 3273 end 3274 elif N == "license" 3275 if V && ! .PACKAGE.license 3276 if V == "1" 3277 .PACKAGE.license := $(P) 3278 else 3279 .PACKAGE.license := $(V) 3280 end 3281 end 3282 elif N == "type" 3283 if V 3284 .NO.LIB.TYPE = 0 3285 else 3286 .NO.LIB.TYPE = 1 3287 end 3288 elif N == "static" 3289 if V 3290 library := +l 3291 else 3292 library := -l 3293 end 3294 elif N == "insert|install|version" 3295 $(N) := $(V) 3296 elif N == "registry|soname" 3297 .PACKAGE.$(N) := $(V) 3298 elif N == "ignore" 3299 if PACKAGE_IGNORE 3300 PACKAGE_IGNORE := $(PACKAGE_IGNORE)|$(V) 3301 else 3302 PACKAGE_IGNORE := $(V) 3303 end 3304 elif N == "latest" 3305 _API_DEFAULT == 99999999 3306 elif N == "api" 3307 if V == 0 3308 eval 3309 _$(P:F=%(upper)s)_API_H == 1 3310 end 3311 else 3312 if V == "latest" 3313 V = 99999999 3314 end 3315 if V >= 19700101 3316 eval 3317 _API_DEFAULT == $(V) 3318 end 3319 end 3320 fi 3321 elif O == "--*" || N == "debug|profile|threads" 3322 set $(O) 3323 end 3324 end 3325 elif T == "[-+]*" 3326 .PACKAGE.libraries += $(T) 3327 elif T == "CC.*=*|noCC.*" 3328 if T == "no*" 3329 T := $(T:V:/no//) = 3330 end 3331 if .PACKAGE.GLOBAL. 3332 eval 3333 $(T:V) 3334 end 3335 else 3336 .PACKAGE.PROBE. += $("\n")$(T:V) 3337 end 3338 elif T != "*:(command|force|order|prereq)" 3339 if T == "*:*" 3340 P := $(T:/:.*//) 3341 T := $(T:/[^:]*//) 3342 else 3343 P := $(T) 3344 T := 3345 end 3346 if P == "/*" 3347 V := $(P) 3348 P := $(P:B) 3349 if ! PACKAGE_$(P) 3350 PACKAGE_$(P) := $(V) 3351 end 3352 end 3353 if "$(_PACKAGE_$(P))" == "0" 3354 continue 3355 end 3356 I = pkg-$(P).mk 3357 V := $(version) 3358 this_install := $(install) 3359 while 1 3360 if H = "$(I:T=F)" 3361 .PACKAGE.$(P).rules := $(H) 3362 break 3363 elif "$(PACKAGE_$(P))$(PACKAGE_$(P)_INCLUDE)$(PACKAGE_$(P)_LIB)" 3364 break 3365 elif P == "*[0-9][rR]+([0-9.])" 3366 N := $(P:/[rR][0-9.]*$//) 3367 V := $(P:/$(N).\([0-9.]*\)$/\1/) 3368 P := $(N) 3369 elif P == "*?(-)+([0-9.])" 3370 N := $(P:/-*[0-9.]*$//) 3371 V := $(P:/$(N)-*\([0-9.]*\)$/\1/) 3372 P := $(N) 3373 else 3374 break 3375 end 3376 end 3377 if ! "$(.PACKAGE.$(P).rules)" 3378 .PACKAGE.$(P).rules := - 3379 end 3380 .PACKAGE.$(P).library := $(library) 3381 .PACKAGE.$(P).private := $(private) 3382 if "$(V)" 3383 PACKAGE_$(P)_VERSION := $(V) 3384 end 3385 I := $(insert) 3386 A := 0 3387 for N $(T:/:/ /G) 3388 if N == "no*" 3389 V := 0 3390 N := $(N:/no//) 3391 else 3392 V := 1 3393 end 3394 if N == "*=*" 3395 V := $(N:/[^=]*=//) 3396 N := $(N:/=.*//) 3397 end 3398 Q := $(N) 3399 if N == "optimize" 3400 if "$(PACKAGE_OPTIONS:N=optimize-space)" 3401 N = dynamic 3402 elif "$(PACKAGE_OPTIONS:N=optimize-time)" 3403 N = static 3404 else 3405 N = 3406 end 3407 elif N == "space" 3408 if ! "$(PACKAGE_OPTIONS:N=optimize-time)" 3409 N = dynamic 3410 else 3411 N = 3412 end 3413 elif N == "time" 3414 if ! "$(PACKAGE_OPTIONS:N=optimize-space)" 3415 N = static 3416 else 3417 N = 3418 end 3419 end 3420 if N == "dontcare" 3421 if V 3422 .PACKAGE.$(P).dontcare := 1 3423 end 3424 elif N == "dynamic" 3425 .PACKAGE.$(P).library := -l 3426 if N == "$(Q)" 3427 .PACKAGE.$(P).type := - 3428 end 3429 elif N == "static" 3430 .PACKAGE.$(P).library := +l 3431 elif N == "library" 3432 if V 3433 .PACKAGE.$(P).library := -l 3434 else 3435 .PACKAGE.$(P).library := 3436 end 3437 elif N == "private" 3438 if V 3439 .PACKAGE.$(P).library := +l 3440 .PACKAGE.$(P).private := 1 3441 else 3442 .PACKAGE.$(P).private := 3443 end 3444 elif N == "include|lib" 3445 if V != 1 3446 if V == 0 3447 V = - 3448 end 3449 .PACKAGE.$(P).$(N) := $(V) 3450 end 3451 elif N == "license" 3452 if V && ! .PACKAGE.license 3453 if V == "1" 3454 .PACKAGE.license := $(P) 3455 else 3456 .PACKAGE.license := $(V) 3457 end 3458 end 3459 elif N == "root" 3460 if V == 0 3461 .PACKAGE.$(P).include := - 3462 .PACKAGE.$(P).lib := - 3463 .PACKAGE.$(P).library := 3464 elif V 3465 .PACKAGE.$(P) := $(V) 3466 end 3467 elif N == "type" 3468 if V 3469 .PACKAGE.$(P).type := $(V) 3470 else 3471 .PACKAGE.$(P).type := - 3472 end 3473 elif N == "version" 3474 PACKAGE_$(P)_VERSION := $(V) 3475 elif N == "install" 3476 this_$(N) := $(V) 3477 elif N == "insert" 3478 I := 1 3479 elif N == "attributes" 3480 A := $(V) 3481 elif N == "plugin" 3482 A = 1 3483 .PACKAGE.$(N) := $(P) 3484 elif N == "api|[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]" 3485 if V == 0 3486 eval 3487 _$(P:F=%(upper)s)_API_H == 1 3488 end 3489 else 3490 if N != "api" 3491 V := $(N) 3492 end 3493 if V == "latest" 3494 V = 99999999 3495 end 3496 eval 3497 _API_$(P) == $(N) 3498 end 3499 end 3500 else 3501 .PACKAGE.$(P).option.$(N) := $(V) 3502 end 3503 end 3504 if ! A 3505 eval 3506 _PACKAGE_$(P) $(.INITIALIZED.:?=?==?) 1 3507 end 3508 if this_install && ! .PACKAGE.install 3509 if "$(INCLUDEDIR:V)" == "\$\(INSTALLROOT\)/include" 3510 .PACKAGE.install = 1 3511 .PACKAGE.$(P).dontcare := 1 3512 INCLUDEDIR := $(INCLUDEDIR:V)/$(P) 3513 end 3514 end 3515 if ! "$(.PACKAGE.:N=$(P))" 3516 if I 3517 .PACKAGE. := $(P) $(.PACKAGE.) 3518 .PACKAGE.build := $(P) $(.PACKAGE.build) 3519 else 3520 .PACKAGE. += $(P) 3521 .PACKAGE.build += $(P) 3522 end 3523 end 3524 if "$(H)" 3525 include + "$(H)" 3526 end 3527 end 3528 end 3529 end 3530 3531/* 3532 * :PACKAGE_INIT: foo.c bar.c ... 3533 * 3534 * for source that compiles either standalone or with richer libraries 3535 * rhs installed in $(BINDIR) using .ACCEPT semantics 3536 * rhs appear in $(BINDIR) for .LIST.PACKAGE.BINARY 3537 * lhs for pre-installed $(BINDIR) files listed by .LIST.PACKAGE.BINARY 3538 */ 3539 3540":PACKAGE_INIT:" : .MAKE .OPERATOR 3541 local I B 3542 .LIST.PACKAGE.BINARY : .LIST.PACKAGE.INIT 3543 eval 3544 .LIST.PACKAGE.INIT : .MAKE 3545 local I 3546 for I $$(*) 3547 print ;;;$$(I:T=F:P=A);$$(BINDIR)/$$(I:B) 3548 end 3549 for I $(<) 3550 if I != "/*" 3551 I := $$(I:D=$$(BINDIR):B:S) 3552 end 3553 if I = "$$(I:T=F:P=A)" 3554 print ;;;$$(I);$$(I) 3555 end 3556 end 3557 end 3558 for I $(>) 3559 B := $(I:B) 3560 if ! "$(.NO.INSTALL.)" 3561 $(BINDIR) :INSTALLDIR: $(B) 3562 $(BINDIR)/$(B) : .ACCEPT 3563 end 3564 $(B) :: $(I) 3565 .LIST.PACKAGE.INIT : $(B) 3566 end 3567 3568/* 3569 * rhs compilation to place tables and/or data in 3570 * readonly text object section -- should go away 3571 * when C const is used/implemented to do same 3572 * lhs is CC.HOSTTYPE match pattern to match 3573 * activated for all architectures if lhs omitted 3574 */ 3575 3576":READONLY:" : .MAKE .OPERATOR .PROBE.INIT 3577 local T 3578 if ! "$(<)" || "$(-mam:N=static*)" || CC.HOSTTYPE == "$(<)" 3579 for T $(>) 3580 if "$(@.READONLY$(T:S):V)" 3581 $(T:B:S=$(CC.SUFFIX.OBJECT)) : .SPECIAL .READONLY$(T:S) 3582 else 3583 error 1 :READONLY: ignored for suffix $(T:S) 3584 end 3585 end 3586 end 3587 3588/* 3589 * rhs are generated but still saved by save common actions 3590 */ 3591 3592":SAVE:" : .MAKE .OPERATOR 3593 .COMMON.SAVE : $(>) 3594 3595/* 3596 * rhs are metarule patterns that do not generate % 3597 */ 3598 3599":TERMINAL:" : .MAKE .OPERATOR 3600 .METARULE.X. : $(>) 3601 3602/* 3603 * cc-* variants 3604 * 3605 * id :VARIANT: [ package-expr ] 3606 * n1 = v1 3607 * n2 = v2 3608 * ... 3609 * 3610 * :VARIANT: [ arch:suffix:option ] 3611 */ 3612 3613":VARIANT:" : .MAKE .OPERATOR 3614 if "$(<)" 3615 .VARIANTS. += cc-$(<) 3616 .CLOBBER. += cc-$(<) 3617 eval 3618 cc-$$(<) : .ALWAYS .LOCAL .FORCE .SPECIAL .RECURSE.SEMAPHORE 3619 set - 3620 if test "0" != "$$(PACKAGES $(>))" 3621 then if test ! -d $$(<) 3622 then $(MKDIR) $$(<) 3623 fi 3624 $$(-silent:Y%%echo $$(.RWD.:C%$%/%)$$(<): >&2%) 3625 cd $$(<) 3626 $$(MAKE) --file=$$(MAKEFILE) --keepgoing $$(-) --errorid=$$(<) _BLD_$$(<:/cc-//:/[^a-zA-Z0-9_]/_/G)==1 VARIANT=$$(<:/cc-//) VARIANTID=$$(<:/cc-//:N=[a-zA-Z]*:?-??)$$(<:/cc-//) .ATTRIBUTE.$(IFFEGENDIR)/%:.ACCEPT MAKEPATH=..:$$(MAKEPATH) $$(=:V:N!=MAKEPATH=*) $$(.RECURSE.ARGS.:N!=.CC-*) $(@:V:@Q) 3627 fi 3628 end 3629 else 3630 local V 3631 for V $(>|CC.DLL.VARIANTS) 3632 local ( A S O ... ) $(V:/:/ /G) 3633 eval 3634 -$(S) :VARIANT: 3635 CC = cc $(O) 3636 end 3637 end 3638 end 3639 3640/* 3641 * external distribution workarounds 3642 * 3643 * target :WORKAROUND: target is empty 3644 * target :WORKAROUND: - target is .TERMINAL 3645 * target :WORKAROUND: prereq target copied from prereq 3646 * target :WORKAROUND: prereq target from action applied to prereq 3647 * action 3648 */ 3649 3650.WORKAROUND.COVERED. :FUNCTION: 3651 local T 3652 if T = "$(^^)" 3653 return $(T) 3654 end 3655 if T = "$(<<:P=L=*:O=2)" 3656 return $(T) 3657 end 3658 3659":WORKAROUND:" : .MAKE .OPERATOR 3660 if "$(>)" == "-" 3661 $(<) : .TERMINAL 3662 else 3663 eval 3664 $$(>) : .SCAN.NULL 3665 $$(<) : -TERMINAL $$(>) 3666 $(@:V:@?$$(>:V:@Y%%test "" != "$$$$(.WORKAROUND.COVERED.)" && { $$$$(SILENT) test -d $$$$(<:D) || $$$$(MKDIR) $$$$(<:D); $$$$(CP) $$$$(.WORKAROUND.COVERED.) $$$$(<) ;}$$("\n")%)$$(@:V)?$$(>:@Y%$$$$(SILENT) test -d $$$$(<:D) || $$$$(MKDIR) $$$$(<:D); $$$$(CP) $$$$(*)%: >%) $$$(<)?) 3667 end 3668 end 3669 3670/* 3671 * :YYPREFIX: [prefix] [header.h] a.y a.y.c a.y.h b.l b.l.c 3672 */ 3673 3674":YYPREFIX:" : .MAKE .OPERATOR 3675 local H P F PL PY PH B I O 3676 for F $(>) 3677 if "$(F)" != "*.*" 3678 P := $(F) 3679 elif "$(F)" == "*.l.c" 3680 PL := $(F) 3681 elif "$(F)" == "*.y.c" 3682 PY := $(F) 3683 elif "$(F)" == "*.y.h" 3684 PH := $(F) 3685 elif "$(F)" == "*.h" 3686 H := $(F) 3687 elif "$(F)" == "*.l" 3688 LEXFIX.$(F:B) := $(P) 3689 LEXHDR.$(F:B) := $(H) 3690 elif "$(F)" == "*.y" 3691 YACCFIX.$(F:B) := $(P) 3692 YACCHDR.$(F:B) := $(H) 3693 end 3694 end 3695 if PL 3696 :: $(PL) 3697 .PASS.AFTER.$(PL) : .VIRTUAL .FORCE .AFTER 3698 { 3699 echo "/* : : fallback $(<<) generated by $(LEX) -- do not edit : : */" 3700 cat $(<<) 3701 } > $(<<:B:S=.l.c) 3702 .FAIL.AFTER.$(PL) : .VIRTUAL .FORCE .AFTER .FAILURE $(PL) 3703 : $(<<) : falling back to previously generated $(*) : 3704 $(CP) $(*) $(<<) 3705 $(PL:B:B)$(PL:S) : .PASS.AFTER.$(PL) .FAIL.AFTER.$(PL) 3706 end 3707 if PY 3708 :: $(PY) 3709 O := $(PY:S) 3710 I := $(PY:B::S) 3711 B := $(PY:B:B) 3712 if PH 3713 .PASS.AFTER.$(PY) : .VIRTUAL .FORCE .AFTER 3714 { 3715 echo "/* : : fallback $(<<:N=*.c:B:S=.c) generated by $(YACC) -- do not edit : : */" 3716 cat $(<<:N=*.c) 3717 } > $(<<:N=*.c:B:S=.y.c) 3718 { 3719 echo "/* : : fallback $(<<:N=*.h:B:S=.h) generated by $(YACC) -- do not edit : : */" 3720 cat $(<<:N=*.h) 3721 } > $(<<:N=*.h:B:S=.y.h) 3722 .FAIL.AFTER.$(PY) : .VIRTUAL .FORCE .AFTER .FAILURE $(PY) $(PH) 3723 : $(<<) : falling back to previously generated { $(*) } : 3724 $(CP) $(*:O=1) $(<<:O=1) 3725 $(CP) $(*:O=2) $(<<:O=2) 3726 else 3727 .PASS.AFTER.$(PY) : .VIRTUAL .FORCE .AFTER 3728 { 3729 echo "/* : : fallback $(<<) generated by $(YACC) -- do not edit : : */" 3730 cat $(<<) 3731 } > $(<<:B:S=.y.c) 3732 .FAIL.AFTER.$(PY) : .VIRTUAL .FORCE .AFTER .FAILURE $(PY) 3733 : $(<<) : falling back to previously generated $(*) : 3734 $(CP) $(*) $(<<) 3735 end 3736 $(PY:B:B)$(PY:S) : .PASS.AFTER.$(PY) .FAIL.AFTER.$(PY) 3737 end 3738 3739/* 3740 * rhs are compiled using $(cc) rather than $(CC) 3741 * use like :: 3742 * NOTE: case ignorant filesystems make this a little tricky 3743 */ 3744 3745":cc:" : .MAKE .OPERATOR .PROBE.INIT 3746 if "$(CC)" != "$(cc)" 3747 local O S T 3748 for S $(.SUFFIX.$(CC.DIALECT:N=C++:?c?C?)) 3749 T := $(>:G=%$(S)) 3750 if T == "*$(S)" || S == ".c" && T != "*.C" || S == ".C" && T != "*.c" 3751 O += $(T:B:S=$(CC.SUFFIX.OBJECT)) 3752 end 3753 end 3754 O := $(O:U) 3755 .CLOBBER. += null.mo null.ms 3756 :: $(>) 3757 $(<) :: $(O) 3758 $(O) : .CLEAR .JOINT .DO.cc 3759 end 3760 3761.DO.cc : .USE .ALWAYS .LOCAL .FORCE 3762 $(-exec:?silent ??)$(MAKE) --file=/dev/null --file=$(MAKEFILE) $(-) --errorid=$(cc:N!=*=*:B) '.null : $(<)' .null $(=) CC=$(cc:@Q) CCFLAGS=$(CCFLAGS:VP:@Q) 3763 3764/* 3765 * make scripts 3766 */ 3767 3768.CLEARARGS : .MAKE .VIRTUAL .FORCE 3769 .ARGS : .CLEAR 3770 3771.SELECT. : .FUNCTION 3772 local T X 3773 .UNION. : .CLEAR 3774 if T = "$(*.ARGS)" 3775 .ARGS : .CLEAR 3776 .MAIN.TARGET. := $(T:O=1:B:S) 3777 for X $(T) 3778 T := $(.FILES.$(X:B:S):N!=[-+]l*:T=F:T!=G) 3779 $(T:N!=[-+]l*) : .SPECIAL -ARCHIVE -COMMAND -OBJECT 3780 .UNION. : .SPECIAL $(T) $(?$(X:B:S):N!=[-+]l*:T=F:P=S:T!=G) 3781 end 3782 else 3783 .UNION. : .SPECIAL $(.FILES.:V:T=F) $(.FILES.:T=F:T!=G) 3784 $(*.UNION.:N!=[-+]l*) : .SPECIAL -ARCHIVE -COMMAND -OBJECT 3785 .UNION. : .SPECIAL $(...:T!=XS:N!=[-+]l*:T=F:A=.REGULAR:P=S:T!=G) 3786 .UNION. : .SPECIAL $(...:T=XSFA:N!=[-+]l*:T=F:A=.REGULAR:P=S:T!=G) 3787 end 3788 return $(*.UNION.:$(-select):$(.SELECT.EDIT.)) 3789 3790.GENSYM.COUNT. = 0 3791 3792.RETAIN : .GENSYM.COUNT. 3793 3794.GENSYM. : .FUNCTION 3795 local N 3796 if ! ( N = "$(%)" ) 3797 N = .GENSYM 3798 end 3799 let $(N).COUNT. = $(N).COUNT. + 1 3800 return $(N).$($(N).COUNT.). 3801 3802.INSTALL.COMMON. : .FUNCTION 3803 local ( D T A P ... ) $(%) 3804 local B T1 T2 3805 if ! "$(A)" || "$(A)" == "-" 3806 A := $(T) 3807 end 3808 B := $(T:B:S) 3809 if B == "-" 3810 B := $(.GENSYM. X) 3811 end 3812 eval 3813 .FILES.$(B) = $(P:V:N=[!-.]*|.[!A-Z]*) 3814 .RHS.$(B) = $(P:V) 3815 end 3816 .FILES. += $$(.FILES.$(B)) 3817 if ! .MAIN.TARGET. 3818 .MAIN.TARGET. := $(B) 3819 end 3820 if ! "$(.NO.INSTALL.)" 3821 if "$(.INSTALL.$(B):V)" != "." 3822 .ALL : $(T) 3823 end 3824 if ! ( T1 = "$(.INSTALL.$(B):V)" ) 3825 if D != "-" 3826 T1 := $(D:) 3827 else 3828 for T2 $(.INSTALL.MAPS.) 3829 if "$(T:$(T2))" 3830 T1 = . 3831 break 3832 end 3833 end 3834 end 3835 if ! T1 3836 if ( T1 = "$(T:A<=.INSTALL.)" ) 3837 T1 := $(*$(T1):V) 3838 end 3839 end 3840 end 3841 if A != "-*" && T1 && T1 != "." && T1 != "$(A:V:D)" 3842 $(T1:V) :INSTALLDIR: $(A) 3843 end 3844 for T2 $(P:V:N=*.[[:digit:]]*([[:alpha:]])) 3845 if A == "-*" || ! "$(*$(A):V:N=$(T2:V))" 3846 $$(MANDIR)$(T2:V:/.*\.//) :INSTALLDIR: $(T2:V) 3847 end 3848 end 3849 for T2 $(P:V:N=*.man?(=*)) 3850 if T2 == "*.man=*" 3851 T1 := $(T2:V:/.*man=//) 3852 T2 := $(T2:V:/=.*//) 3853 else 3854 T1 = 1 3855 end 3856 $$(MANDIR)$(T1)/$(T2:V:D:B:S=.$(T1)) :INSTALL: $(T2:V) 3857 end 3858 end 3859 3860.INSTALL.LIST. : .FUNCTION 3861 set noalias /* don't tell dmr */ 3862 : $(!.INSTALL) 3863 .MAKE : $(~.INSTALL:A=.MAKE) 3864 return $(*.INSTALL:N=$(INSTALLROOT)/*) $(*.INSTALL:N=$(INSTALLROOT)/*$(CC.SUFFIX.SHARED).+([0-9.]):/\.[0-9.]*$//) 3865 3866.PROBE.LOAD : .MAKE .VIRTUAL .FORCE 3867 .PROBE.SPECIAL. = CC.HOSTTYPE CC.LD.DYNAMIC CC.LD.STATIC CC.STDLIB.BASE 3868 $(.PROBE.SPECIAL.) : .FUNCTION 3869 $(.PROBE.SPECIAL.) : -FUNCTIONAL 3870 make .PROBE.INIT 3871 return "$($(<))" 3872 3873.PROBE.INIT : .MAKE .VIRTUAL .FORCE .OPTION.COMPATIBILITY 3874 local I J K 3875 if "$(.COMMAND.CC:N=$(CC))" 3876 if ! "$(PATH:/:/ /G:X=$(CC):P=X)" 3877 for I $(.COMMAND.CC:N!=$(CC)) 3878 if "$(PATH:/:/ /G:X=$(I):P=X)" 3879 CC := $(I) 3880 break 3881 end 3882 end 3883 end 3884 end 3885 $(.PROBE.SPECIAL.) : -FUNCTIONAL 3886 if "$(-base)" || ! "$(CC)" || "$(-cctype)" == "[-0]" 3887 set cctype:=0 3888 .CC.PROBE. = 3889 else 3890 if ! "$(-cctype)" 3891 set cctype:="$(CC:N!=*=*)" 3892 if ! "$(-cctype)" 3893 set cctype:=cc 3894 end 3895 end 3896 I := $(-cctype:O=1:P=C) $(-cctype:O>1) 3897 set cctype:="$(I)" 3898 if ! ( .CC.PROBE. = "$(CC.PROBE)" ) 3899 .CC.PROBE. := $(-cctype|"cc":@P=P=C) 3900 end 3901 .CC.PROBE. : .VIRTUAL $(.CC.PROBE.) 3902 $(.CC.PROBE.) : .SPECIAL .ACCEPT .DONTCARE 3903 (AR) (AS) (CPP) (CC) (LD) : .CC.PROBE. 3904 if .CC.PROBE. 3905 include "$(.CC.PROBE.)" 3906 if ! "$(CC.HOSTTYPE)" 3907 CC.HOSTTYPE := $(_hosttype_) 3908 end 3909 else 3910 if "$(-cctype)" 3911 error 1 $(-cctype): C probe failed -- default assumed 3912 end 3913 if ! CC.STDINCLUDE 3914 CC.STDINCLUDE = /usr/include 3915 end 3916 if ! CC.MAKE.OPTIONS 3917 CC.MAKE.OPTIONS = nativepp=-1 3918 end 3919 end 3920 end 3921 if CC.MAKE.OPTIONS 3922 set $(CC.MAKE.OPTIONS) 3923 end 3924 $(CC.LD.DYNAMIC) $(CC.LD.STATIC) : .MULTIPLE .ARCHIVE .IGNORE .DO.NOTHING 3925 if ! CC.SUFFIX.ARCHIVE 3926 CC.SUFFIX.ARCHIVE = .a 3927 end 3928 .ATTRIBUTE.%$(CC.SUFFIX.ARCHIVE) : .ARCHIVE 3929 if CC.SUFFIX.STATIC 3930 .ATTRIBUTE.%$(CC.SUFFIX.STATIC) : .ARCHIVE 3931 end 3932 if CC.SUFFIX.DYNAMIC && CC.SUFFIX.SHARED 3933 .ATTRIBUTE.%$(CC.SUFFIX.SHARED) : .ARCHIVE .SCAN.IGNORE 3934 .SOURCE.%$(CC.SUFFIX.SHARED) : .FORCE $$(*.SOURCE.%.ARCHIVE) 3935 end 3936 if ! CC.SUFFIX.OBJECT 3937 CC.SUFFIX.OBJECT = .o 3938 end 3939 if ! CC.STDLIB.BASE 3940 CC.STDLIB.BASE := $(CC.STDLIB:N=?(/usr)/lib?(64):B) lib 3941 CC.STDLIB.BASE := $(CC.STDLIB.BASE:U) 3942 end 3943 if CCSPECIALIZE 3944 CC.OPTIMIZE := $(CCSPECIALIZE) 3945 end 3946 .ATTRIBUTE.%$(CC.SUFFIX.OBJECT) : .OBJECT 3947 if CC.SHARED.REGISTRY 3948 CC.SHARED += $$(.CC.SHARED.REGISTRY.) 3949 end 3950 if CC.SHARED.NAME 3951 CC.SHARED += $$(.CC.SHARED.NAME.) 3952 end 3953 if "$(-mam:N=static*,port*)" 3954 .NO.LIB.TYPE = 1 3955 end 3956 if ! .NO.LIB.TYPE && "$(-lib-type)" 3957 I := 3958 J := 3959 if "$(-instrument)" 3960 I := $(-instrument:B:/\(...\).*/-\1/) 3961 end 3962 if "$(-threads)" 3963 J := t$(J) 3964 end 3965 if "$(-debug-symbols)" || "$(CCFLAGS:N=$(CC.DEBUG))" && ! "$(CCFLAGS:N=-O*|$(CC.OPTIMIZE))" 3966 J := $(J)g 3967 end 3968 if ! "$(J)" 3969 if K = "$(CCFLAGS:N=-p|-pg)" 3970 J := $(K:O=1:/-//) 3971 elif K = "$(LDFLAGS:N=-O[1-9])" 3972 J := $(K:O=1:/-//) 3973 end 3974 end 3975 if J 3976 J := -$(J) 3977 end 3978 3979 /* 3980 * insert default flags 3981 */ 3982 3983 for K $(...:T=XQSV:N=\(*FLAGS\):/[()]//G) 3984 if "$($(K)_DEFAULT:V)" 3985 $(K) := $$($(K)_DEFAULT) $($(K):V) 3986 end 3987 end 3988 CC.LIB.TYPE := $(I)$(J) 3989 end 3990 .REQUIRE.$(CC.PREFIX.ARCHIVE)%$(CC.SUFFIX.ARCHIVE) : .FUNCTION 3991 if "$(%:N=-l*)" 3992 return $(.REQUIRE.-l% $(%)) 3993 elif "$(%:N=+l*)" 3994 return $(.REQUIRE.+l% $(%)) 3995 elif ! "$(%:A=.TARGET)" && CC.PREFIX.ARCHIVE && "$(%:B:S:N=$(CC.PREFIX.ARCHIVE)*.$(CC.SUFFIX.ARCHIVE))" 3996 return $(.REQUIRE.-l% -l$(%:B:S:/^$(CC.PREFIX.ARCHIVE)//:/$(CC.SUFFIX.ARCHIVE)$//:/$(CC.LIB.TYPE)$//)) 3997 end 3998 3999 /* 4000 * this is a workaround hack to help packages with broken compilers 4001 * don't rely on this hook 4002 * 4003 * sco.i386 may need 4004 * export _MAKE_PROBE_WORKAROUND_='CC.LIB.DLL=broken --static=1' 4005 */ 4006 4007 if "$(_MAKE_PROBE_WORKAROUND_)" 4008 local I 4009 for I $(_MAKE_PROBE_WORKAROUND_) 4010 eval 4011 $(I) 4012 end 4013 end 4014 end 4015 include - + pkg-default.mk 4016 4017.FLAGSINIT : .VIRTUAL 4018 4019.MAKEINIT : .MAKE .VIRTUAL .FORCE .OPTION.COMPATIBILITY 4020 local A T1 T2 T3 T4 T5 T6 TI 4021 4022 /* 4023 * .SOURCE.mk gets bound long before the first user makefile is read 4024 * this assertion ensures that any user specified dirs appear 4025 * before the internal defaults set in the initdynamic[] script 4026 */ 4027 4028 .SOURCE.mk : .CLEAR . $(*.SOURCE.mk:N!=$(*.SOURCE.mk.INTERNAL:/ /|/G)) $(*.SOURCE.mk.INTERNAL) 4029 .MAKE : .PROBE.INIT 4030 if "$(-instrument)" 4031 if ! ( instrument.root = "$(-instrument:O=1:D:N!=.:T=F)" ) 4032 T1 = $(PATH):$(OPTDIRS) 4033 instrument.root := $(T1:/:/ /G:N!=.:X=$(-instrument:O=1:B)/.:P=X:D) 4034 if ! instrument.root 4035 instrument.root = $(.INSTRUMENT.notfound) 4036 end 4037 end 4038 T2 := $(-instrument:O=1:B) 4039 T1 := $(INSTRUMENT_$(T2)) 4040 if ! T1 || ! "$(T1:N!=*=*)" 4041 T5 = 4042 T6 = 4043 for T3 $(T1:N=*=*:/command=/TI=/:/root=/T5=/:/bin=/T6=/) 4044 eval 4045 $(T3) 4046 end 4047 end 4048 if ! TI 4049 TI = CC 4050 CCFLAGS := $(CCFLAGS:N!=-g|-O*|-p*|$(CC.DEBUG)|$(CC.OPTIMIZE)) $(CC.DEBUG) 4051 end 4052 T1 := $(TI) = $($(TI):N=*=*) 4053 if ! T5 4054 T2 := $(T2:F=%(upper)s) 4055 T5 = $(T2)HOME 4056 for T3 $(T2) $(T2)HOME $(T2)_HOME $(T2)ROOT $(T2)_ROOT 4057 if "$($(T3):T=F)" 4058 T5 := $(T3) 4059 break 4060 end 4061 end 4062 end 4063 if "$($(T5))" 4064 T5 := $($(T5)) 4065 else 4066 T1 += $(T5)=$(instrument.root) 4067 T5 := $(instrument.root) 4068 end 4069 if ! "$(PATH:/:/ /G:X=$(-instrument):P=X)" 4070 if T6 4071 T5 := $(T5)/$(T6) 4072 end 4073 T1 += PATH=$(PATH):$(T5) 4074 end 4075 T1 += $(-instrument) $($(TI):N!=*=*) 4076 end 4077 if T1 4078 CC.READONLY = 4079 set expandview 4080 eval 4081 $(T1:V) 4082 end 4083 end 4084 end 4085 if "$(-mam:N=(regress|static)*)" 4086 set nativepp:=-1 4087 end 4088 if "$(-debug-symbols)" && ! "$(CCFLAGS:N=$(CC.DEBUG))" 4089 CCFLAGS := $(CCFLAGS:V:N!=-O*|$(CC.OPTIMIZE)|$\(CC.OPTIMIZE\)) $(CC.DEBUG) 4090 end 4091 if "$(-profile)" && ! "$(CCFLAGS:N=$(CC.PROFILE))" 4092 CCFLAGS += $(CC.PROFILE) 4093 end 4094 if ! CC.LIB.THREADS 4095 CC.LIB.THREADS = -lpthreads 4096 end 4097 $(CC.LIB.THREADS) : .DONTCARE 4098 if A = "$(-ancestor)" 4099 if "$(-mam:N=(regress|static)*)" 4100 T1 = .. 4101 let T2 = 1 4102 while T2 < A 4103 let T2 = T2 + 1 4104 T1 := ../$(T1) 4105 end 4106 .MAM.INSTALLROOT := $(T1) 4107 print -um setv INSTALLROOT $(T1) 4108 T4 = 4109 for T3 $(.ANCESTOR.LIST) 4110 if T4 4111 $(T4) : $(T1)/$(T3) 4112 T4 = 4113 else 4114 T4 := $(T3) 4115 end 4116 end 4117 end 4118 T1 = .. 4119 let T2 = 0 4120 while T2 < A 4121 let T2 = T2 + 1 4122 T4 = 4123 for T3 $(.ANCESTOR.LIST) 4124 if T4 4125 $(T4) : $(T1)/$(T3) 4126 T4 = 4127 else 4128 T4 := $(T3) 4129 end 4130 end 4131 T1 := ../$(T1) 4132 end 4133 elif "$(-mam:N=(regress|static)*)" 4134 .MAM.INSTALLROOT := $(INSTALLROOT:N=..*(/*):?$(INSTALLROOT)?$HOME?) 4135 print -um setv INSTALLROOT $(.MAM.INSTALLROOT) 4136 end 4137 for T3 $(.ANCESTOR.LIST) 4138 if T4 4139 $(T4) : $($(T3:F=%(upper)s)DIR) 4140 T4 = 4141 else 4142 T4 := $(T3) 4143 end 4144 end 4145 .SOURCE.h : $(INSTALLROOT)/include 4146 if "$(-mam:N=dynamic*)" 4147 .MAM.INSTALLROOT := $(INSTALLROOT:N=$(HOME):?$HOME?$(INSTALLROOT)?) 4148 print -um setv INSTALLROOT $(.MAM.INSTALLROOT) 4149 end 4150 .MAMEDIT. = 4151 if "$(INSTALLROOT:N=..*(/*))" 4152 .MAMROOT. := $(INSTALLROOT) 4153 else 4154 .MAMROOT. := $(PWD:C@.*/src/@/src/@:C@/[^/]*@/..@G:C@/@@) 4155 end 4156 .SOURCE.h : $(*.SOURCE.c:N!=.) $(*.SOURCE:N!=.) 4157 .SOURCE .SOURCE.a .SOURCE.c .SOURCE.h : .INSERT . 4158 if CC.PREROOT && "$(CC.PREROOT:P!=I=/)" 4159 T1 := $(CC.PREROOT) / 4160 CC.STDINCLUDE := $(T1:X=$$(CC.STDINCLUDE:C@^/@@)) 4161 CC.STDLIB := $(T1:X=$$(CC.STDLIB:C@^/@@)) 4162 end 4163 if T1 = "$(.PACKAGE.build:A!=.TARGET)" 4164 local B D H I L N P Q S T V W X Z K=0 K.0=0 KP IP LP 4165 LDLIBRARIES += $$(.PACKAGE.LIBRARIES. $(T1)) 4166 T2 = 4167 for P $(T1) 4168 if P == "{" 4169 if ! "$(-mam:N=static*)" 4170 if K 4171 KP := $(K.$(K)) 4172 else 4173 KP = 0 4174 end 4175 let K = K + 1 4176 local K.$(K)=$(KP) 4177 local L.$(K) 4178 end 4179 continue 4180 elif P == "}" 4181 if ! "$(-mam:N=static*)" && K 4182 if ! $(K.$(K)) 4183 error 3 at least one of the packages { $(L.$(K)) } must exist 4184 end 4185 let K = K - 1 4186 end 4187 continue 4188 elif $(K.$(K)) > 0 4189 continue 4190 end 4191 if K 4192 L.$(K) += $(P) 4193 end 4194 P := $(.PACKAGE.INIT. $(P)) 4195 I := $(PACKAGE_$(P)_INCLUDE) 4196 L := $(PACKAGE_$(P)_LIB) 4197 if "$(.PACKAGE.$(P).found)" == "1" 4198 if K 4199 K.$(K) := 1 4200 end 4201 elif ! K && ! "$(.PACKAGE.$(P).dontcare)" 4202 if ! "$(PKGDIRS:X=package/$(P).lic package/$(P).pkg:T=F)" && ! "$(.PACKAGE.$(P).library)" 4203 error 3 $(P): package not found 4204 end 4205 .PACKAGE.$(P).dontcare := 1 4206 end 4207 T2 += $(P) 4208 T4 = 4209 if "$(-mam:N=static*)" 4210 if "$(INCLUDEDIR:D:N=$(INSTALLROOT))" || "$(INCLUDEDIR:D:D:N=$(INSTALLROOT))" 4211 T4 += P 4212 end 4213 if I && ( "$(I:D)" == "$(L:D)" || "$(I:D:D)" == "$(L:D)" ) 4214 if "$(I:D)" == "$(L:D)" 4215 H := $(I:D) 4216 else 4217 H := $(I:D:D) 4218 end 4219 T := $(I:C,^$(H)/,,) 4220 print -um setv PACKAGE_$(P) $(T4:N=P:?${INSTALLROOT}?$(H)?) 4221 print -um setv PACKAGE_$(P)_INCLUDE ${PACKAGE_$(P)}/$(T) 4222 print -um setv PACKAGE_$(P)_LIB ${PACKAGE_$(P)}/$(L:B:S) 4223 T4 += I L 4224 end 4225 end 4226 if I 4227 if ! "$(CC.STDINCLUDE:N=$(I))" 4228 .SOURCE.h : $(I) 4229 if "$(I:B)" == "$(P)" && ! "$(CC.STDINCLUDE:N=$(I:D))" 4230 .SOURCE.h : $(I:D) 4231 end 4232 elif "$(-mam:N=static*)" 4233 .SOURCE.h : $(I) 4234 CC.STDINCLUDE := $(CC.STDINCLUDE:N!=$(I)) 4235 if "$(I:B)" == "$(P)" 4236 .SOURCE.h : $(I:D) 4237 CC.STDINCLUDE := $(CC.STDINCLUDE:N!=$(I:D)) 4238 end 4239 end 4240 if "$(-mam:N=(regress|static)*)" 4241 .MAMPACKAGE. += PACKAGE_$(P)_INCLUDE 4242 if ! "$(T4:N=I)" 4243 print -um setv PACKAGE_$(P)_INCLUDE $(T4:N=P:?${INSTALLROOT}/$(INSTALLROOT:P=R=$(I))?$(I)?) 4244 end 4245 end 4246 end 4247 if L && L != "/lib|/usr/lib" 4248 if ! "$(CC.STDLIB:N=$(L))" 4249 .SOURCE.a : $(L) 4250 elif "$(-mam:N=static*)" 4251 .SOURCE.a : $(L) 4252 CC.STDLIB := $(CC.STDLIB:N!=$(L)) 4253 end 4254 if "$(-mam:N=(regress|static)*)" 4255 .MAMPACKAGE. += PACKAGE_$(P)_LIB 4256 if ! "$(T4:N=L)" 4257 print -um setv PACKAGE_$(P)_LIB $(T4:N=P:?${INSTALLROOT}/$(INSTALLROOT:P=R=$(L))?$(L)?) 4258 end 4259 end 4260 end 4261 end 4262 T3 := $(*.SOURCE.h) 4263 .SOURCE.h : $(CC.STDINCLUDE) $(LCLDIRS:/:/ /G:C,$,/include,) 4264 T4 := $(*.SOURCE.a) 4265 .SOURCE.a : $(CC.STDLIB) 4266 if T2 4267 T2 += . 4268 T1 := $(*.SOURCE.h:C,.*,$$(T2:C%.*%&/\&%),) 4269 .SOURCE.h : .CLEAR . $(T1:P=C) 4270 T1 := $(*.SOURCE.a:C,.*,$$(T2:C%.*%&/\&%),) 4271 .SOURCE.a : .CLEAR . $(T1:P=C) 4272 end 4273 else 4274 T3 := $(*.SOURCE.h) 4275 .SOURCE.h : $(CC.STDINCLUDE) 4276 T4 := $(*.SOURCE.a) 4277 .SOURCE.a : $(CC.STDLIB) 4278 end 4279 if "$(-mam:N=(regress|static)*)" 4280 .CC.NOSTDINCLUDE. := $(CC.STDINCLUDE:V:N!=*[()]*|$(T3:@C@ @|@G):C@ @|@G:C@^@N!=@) 4281 .CC.NOSTDLIB. := $(CC.STDLIB:V:N!=*[()]*|$(T4:@C@ @|@G):C@ @|@G:C@^@N!=@) 4282 else 4283 .CC.NOSTDINCLUDE. := $(CC.STDINCLUDE:N!=$(T3:@C@ @|@G):C@ @|@G:C@^@N!=@) 4284 .CC.NOSTDLIB. := $(CC.STDLIB:N!=$(T4:@C@ @|@G):C@ @|@G:C@^@N!=@) 4285 end 4286 T3 = $(PACKAGE_PATH:/:/ /G) $(.PACKAGE.DIRS.) $(.PACKAGE.GLOBAL.) 4287 .SOURCE.a : $(T3:X=lib:N!=$(.PACKAGE.stdlib:/ /|/G):T=F) 4288 T3 = 4289 if ! "$(CC.DIALECT:N=ANSI)" 4290 stdarg.h : .SPECIAL .NULL .TERMINAL .DONTCARE .IGNORE /* courtesy to proto(1) */ 4291 end 4292 if "$(CC.REPOSITORY)" 4293 .PTR.PREREQS = $(!) $(!.PTR.CHECK) 4294 if ! "$(*.SOURCE.ptr)" 4295 .SOURCE.ptr : $(CC.REPOSITORY) 4296 end 4297 T3 += $$(.PTR.OPTIONS.) 4298 end 4299 if ! "$(CC.INCLUDE.LOCAL)" && "$(CC.DIALECT:N=-I-)" /* pre 2005-05-25 courtesy */ 4300 CC.INCLUDE.LOCAL = -I- 4301 end 4302 if "$(-separate-include)" 4303 CC.SEPARATEINCLUDE := $(CC.INCLUDE.LOCAL) 4304 end 4305 if ! "$(-nativepp)" 4306 if ! "$(-separate-include)" && "$(-?separate-include)" 4307 set nativepp:=-1 4308 if ! "$(-?prefix-include)" 4309 set prefix-include:=0 4310 end 4311 elif "$(CC.SEPARATEINCLUDE)" && !CC.ALTPP.FLAGS && !CC.ALTPP.ENV 4312 set nativepp:=1 4313 end 4314 end 4315 if ! "$(-nativepp)" 4316 if CC.CC && ! ( T4 = "$(CC.PROBEPP)" ) 4317 T4 := $(-cctype:@P=P=C,pp) 4318 end 4319 if ! "$(CC.DIALECT:N=LIBPP)" || CPP != "$\(MAKEPP\)" 4320 if ! "$(-?prefix-include)" && CPP != "$\(MAKEPP\)" 4321 set prefix-include:=1 4322 end 4323 (CC) : (CPP) 4324 if CC.ALTPP.FLAGS || CC.ALTPP.ENV 4325 T5 := $(CC.ALTPP.FLAGS) 4326 T3 += $(T5:V) 4327 if CC.ALTPP.ENV 4328 .BIND : (CC) 4329 CC := $$(CC.ALTPP.ENV) $(CC:V) 4330 end 4331 else 4332 .BIND : (CC) 4333 if "$(CCLD:V)" == "$$(CC)" 4334 CCLD := $(CC:V) 4335 end 4336 CC := $(CC:N=*=*) $$(PPCC) $$(PPCCFLAGS) $$(CC.DIALECT:/^/-o /) $$(CPP) $(TI:@N=CC:?$(-instrument)?$(-cctype)?) 4337 end 4338 if T4 4339 T5 := -I-D$(T4) 4340 T3 += $(T5:V) 4341 end 4342 end 4343 elif ! "$(-?prefix-include)" && ! "$(CC.SEPARATEINCLUDE)" 4344 set prefix-include:=1 4345 end 4346 if ! "$(-?prefix-include)" && "$(CCFLAGS:N=$(CC.INCLUDE.LOCAL)|-I-)" 4347 set prefix-include:=1 4348 end 4349 if "$(-prefix-include)" || ! "$(-separate-include)" || "$(-nativepp)" && ! "$(CC.SEPARATEINCLUDE)" 4350 T3 += $$(*:A=.SCAN.c:@?$$$(*.SOURCE.%.LCL.INCLUDE:I=$$$$(!$$$$(*):A=.LCL.INCLUDE|.STD.INCLUDE:P=D:U):$(.CC.NOSTDINCLUDE.):/^/-I/)??) $$(&:T=D) 4351 if "$(-nativepp)" == "[1-9]*" 4352 error 1 local include files may be ignored by the native C preprocessor 4353 end 4354 else 4355 if ! "$(-?prefix-include)" 4356 set prefix-include:=0 4357 end 4358 T3 += $$(*:A=.SCAN.c:@?$$$(*.SOURCE.%.LCL.INCLUDE:I=$$$$(!$$$$(*):A=.LCL.INCLUDE:P=D):$(.CC.NOSTDINCLUDE.):/^/-I/) $$(.PREFIX.SOURCE. $$(*):/^/-I/) $(CC.INCLUDE.LOCAL:--I-) $$$(!$$$(*):A=.STD.INCLUDE:A=.LCL.INCLUDE:@+-I.) $$$(*.SOURCE.%.STD.INCLUDE:I=$$$$(!$$$$(*):A=.STD.INCLUDE:P=D):$(.CC.NOSTDINCLUDE.):/^/-I/)??) $$(&:T=D) 4359 end 4360 if "$(CC.DIALECT:N=TOUCHO)" 4361 .TOUCHO : .MAKE .VIRTUAL .FORCE .REPEAT .AFTER .FOREGROUND 4362 .REBIND : $(*$(<<):N=*$(CC.SUFFIX.OBJECT)) 4363 .APPEND.%.COMMAND : .TOUCHO 4364 end 4365 if "$(CCFLAGS:N=-g|$(CC.DEBUG))" 4366 _BLD_DEBUG == 1 4367 end 4368 if "$(-instrument)" 4369 _BLD_INSTRUMENT == 1 4370 end 4371 if "$(-static-link)" 4372 _BLD_STATIC_LINK == 1 4373 end 4374 if "$(-shared)" && ! "$(CCFLAGS:VP:N=$\(CC.DLL\))" 4375 T4 = $(CC.DLL) 4376 else 4377 T4 = 4378 end 4379 if T3 4380 T4 += $$(-target-context:?$$$(!$$$(*):A=.PFX.INCLUDE:@Y%$$$(<:P=U:D:T=*:P=L=*:/^/-I/) %%)??)$$(-target-prefix:?$$$(<:O=1:N=$$$(*:O=1:B:S=$$$(CC.SUFFIX.OBJECT)):Y%%-o $$$$(<) %)??)$(T3:V) 4381 end 4382 if T3 || T4 4383 CCFLAGS &= $(T4:V) 4384 end 4385 T3 = 4386 T4 = 4387 if "$(CC.REPOSITORY)" 4388 T3 += $(T5:V) $$(CCFLAGS:N=-[D]*) $$(.PTR.PREREQS:A=.SCAN.c:@?$$$(*.SOURCE.%.LCL.INCLUDE:I=$$$$(.PTR.PREREQS:A=.LCL.INCLUDE:P=D):/^/-I/) $(CC.SEPARATEINCLUDE) $$$(*.SOURCE.%.LCL.INCLUDE:I=$$$$(.PTR.PREREQS:A=.LCL.INCLUDE|.STD.INCLUDE:P=D):$(.CC.NOSTDINCLUDE.):/^/-I/)??) $$(&.PTR.CHECK:T=D) 4389 .APPEND.%.COMMAND : .PTR.CHECK .PTR.UPDATE 4390 T3 := $$(@:V:N=*$\(CC*(LD)\)*:@?$(T3:V)??) 4391 end 4392 if "$(CC.ARFLAGS)" 4393 .ARCHIVE.o : .CLEAR .USE .ARPREVIOUS (CC) (AR) 4394 $(.ARPREVIOUS.$(<:B:S):@?$(IGNORE) $$(AR) $$(ARHYPHEN)d $$(<) $$(.ARPREVIOUS.$$(<:B:S))$$("\n")??)$(CC) $(CC.ARFLAGS) $(CCLDFLAGS) -o $(<) $(*) 4395 .SHARED.o : .CLEAR .USE (LDSHARED) 4396 $(LDSHARED) $(CC.SHARED) $(CCLDFLAGS) -o $(<) $(*$(**):N!=*$(CC.SUFFIX.ARCHIVE)) 4397 .ATTRIBUTE.%.a : -ARCHIVE 4398 end 4399 IFFEFLAGS += -c '$$(IFFECC) $$(IFFECCFLAGS) $$(IFFELDFLAGS)' $$(-mam:N=(regress|static)*:??-S '$$(CC.STATIC)') 4400 if "$(-cross)" || "$(CC.EXECTYPE)" && "$(CC.HOSTTYPE)" != "$(CC.EXECTYPE)" 4401 set cross 4402 IFFEFLAGS += -x $(CC.HOSTTYPE) 4403 end 4404 .BIND : (IFFEFLAGS) 4405 IFFEFLAGS += $$(.IFFE.REF.) 4406 if ! IFFE_huh 4407 /* can't figure out why this .PARAMETER must be repeated */ 4408 (IFFEFLAGS) : .PARAMETER 4409 end 4410 if "$(-mam:N=(regress|static)*)" 4411 LDFLAGS &= $(T3:V) 4412 else 4413 if "$(CC.LD.ORIGIN:V)" 4414 T4 += $$(CC.LD.ORIGIN) 4415 end 4416 if "$(CC.LD.RUNPATH:V)" 4417 T4 += $$(.CC.LD.RUNPATH.) 4418 end 4419 LDFLAGS &= $$(*.SOURCE.%.ARCHIVE:I=$$$(*:N=-l*:P=D):$(.CC.NOSTDLIB.):P=A:/^/-L/) $(T3:V) 4420 end 4421 CCLDFLAGS &= $$(CCFLAGS:N!=-[DIU]*:@C@$$(CC.ALTPP.FLAGS)@@) $$(LDFLAGS) $(T4:V) 4422 if "$(CC.LD.STRIP:V)" 4423 if "$(-strip-symbols)" || "$(PACKAGE_OPTIONS:N=optimize-space)" 4424 .PACKAGE.strip = $(CC.LD.STRIP) 4425 end 4426 CCLDFLAGS += $$(.PACKAGE.strip) 4427 end 4428 M4FLAGS &= $$(*.SOURCE.%.M4.INCLUDE:I=$$$(!$$$(*):P=D):/^/-I/) $$(&:T=D) 4429 make .FLAGSINIT 4430 4431 /* 4432 * state var defaults 4433 */ 4434 4435 if ERROR_CATALOG == "" 4436 ERROR_CATALOG == "$(CATALOG)" 4437 end 4438 if USAGE_LICENSE == "" 4439 USAGE_LICENSE == "$(LICENSEINFO:P=W=$(LICENSE),type=usage)$(CATALOG:N!=$(ID):Y%[--catalog?$(CATALOG)]%%)" 4440 end 4441 4442 /* 4443 * map unknown command line targets to common actions 4444 */ 4445 4446 for T3 .ARGS .MAIN 4447 T2 := $(~$(T3):V) 4448 eval 4449 .ORIGINAL$(T3). = $(T2:V) 4450 end 4451 $(T3) : .CLEAR .VIRTUAL 4452 T4 = 0 4453 for T1 $(T2) 4454 if ! T4 && "$(T1:A!=.IMMEDIATE|.TARGET)" 4455 T2 := $(".$(T1:F=%(upper)s)":A=.IMMEDIATE|.TARGET:A!=.ATTRIBUTE) 4456 if T2 4457 T1 := $(T2) 4458 else 4459 T4 = 1 4460 end 4461 end 4462 $(T3) : $(T1:V) 4463 end 4464 end 4465 4466 /* 4467 * pure recursion makefiles (only :MAKE:) make .RECURSE first by default 4468 * .NORECURSE inhibits the default .RECURSE first 4469 */ 4470 4471 if "$(~.MAIN:V)" == ".RECURSE" && "$(~.ALL:V)" == ".RECURSE" && ! "$(~.ARGS:V:N=.RECURSE|.NORECURSE)" && ! "$(~.ARGS:V:O=1:A=.IMMEDIATE)" 4472 .ARGS : .INSERT .RECURSE 4473 end 4474 4475 /* 4476 * check make recursion limits 4477 */ 4478 4479 T1 := $(-recurse:/:/ /G:N=[0-9]*:O=N) 4480 if T1 > 0 4481 T2 = 4482 while T1 > 0 4483 let T1 = T1 - 1 4484 T2 += .SEMAPHORE 4485 end 4486 .RECURSE.SEMAPHORE : $(T2) 4487 end 4488 .INITIALIZED. = 1 4489 4490.PTR.LOCAL = 4491 4492.PTR.OPTIONS. : .CLEAR .FUNCTION .PTR.INIT 4493 if ! "$(.PTR.LOCAL)" 4494 .PTR.LOCAL := $(*.SOURCE.ptr:N!=.:O=1) 4495 elif "$(.PTR.LOCAL)" != "$(*.SOURCE.ptr:N!=.:O=1)" 4496 .UNBIND : $(.PTR.LOCAL) 4497 .BIND : $(.PTR.LOCAL) 4498 end 4499 .UNION : .CLEAR $(*.SOURCE.ptr:N!=.:O=1) $(*.SOURCE.ptr:N!=.:O>1:T=F) 4500 return $(*.UNION:@N!=$(CC.REPOSITORY):$(CC.DIALECT:N=PTRIMPLICIT:?D??):/^/-ptr/) 4501 4502.PTR.DONTCARE : .MAKE .VIRTUAL .IGNORE .FORCE 4503 .DONTCARE.% : .FUNCTION 4504 if "$(<:T=M:N=.PTR.CHECK)" 4505 return ok 4506 end 4507 4508.PTR.CHECK : .VIRTUAL .PTR.INIT .PTR.DONTCARE $$(.PTR.LIST.) 4509 4510.PTR.INIT : .MAKE .VIRTUAL .FORCE .IGNORE 4511 if "$(CC.DIALECT:N=PTRMKDIR)" 4512 local X 4513 .PTR.DIR. := $(~.SOURCE.ptr:N!=.:O=1) 4514 $(.PTR.DIR.) : .MAKE .IGNORE 4515 if "$(^)" 4516 $(^) : -MAKE 4517 if "$(CC.DIALECT:N=PTRCOPY)" 4518 X := $("defmap":D=$(^):B:S:T=F) 4519 end 4520 .MAKE : 4521 $(MKDIR) $(<) 2>/dev/null $(X:?&& $(CP) -p $(X) $(<)) 4522 end 4523 .MAKE : $(.PTR.DIR.) 4524 $(.PTR.DIR.) : -MAKE 4525 end 4526 4527.PTR.UPDATE : .MAKE .VIRTUAL .FORCE .REPEAT .AFTER .FOREGROUND 4528 .PTR.CHECK : .CLEAR .VIRTUAL .IGNORE $$(.PTR.LIST.) 4529 .UNBIND : $(*.PTR.CHECK) 4530 .MAKE : .PTR.CHECK 4531 4532.PTR.LIST. : .FUNCTION 4533 local D 4534 .UNION : .CLEAR 4535 .UNBIND : $(*.SOURCE.ptr) 4536 for D $(*.SOURCE.ptr:N!=.) 4537 .UNION : $(D:T=F:L<=*@(.[cChH]*|$(CC.SUFFIX.SOURCE)|$(CC.SUFFIX.OBJECT)|$(CC.SUFFIX.ARCHIVE)):D=$(D):B:S) 4538 end 4539 $(*.UNION) : .TERMINAL 4540 for D $(*.UNION:N=*.c) 4541 $(D:D:B:S=$(CC.SUFFIX.OBJECT)) : $(D) 4542 $(<<<:N=.PTR.UPDATE:??$$(<:T=F:D:P=L:Y%$$(RM) $$(RMFLAGS) $$(<)%%)?) 4543 end 4544 return $(*.UNION) 4545 4546.NOSTATEFILE : .MAKE .VIRTUAL .FORCE 4547 set nowritestate 4548 4549.SETARGS : .MAKE .VIRTUAL .FORCE 4550 if ! "$(*.ARGS)" 4551 .ARGS : $(*.MAIN) 4552 end 4553 4554.MAMACTION. : .FUNCTION 4555 local V 4556 if ! .MAMEDIT. 4557 local E P 4558 .MAMEDIT. = : 4559 E = N!=-[DI]-*: 4560 for P $(.MAMPACKAGE.) 4561 E := $(E)@C%$($(P):C@\.@\\.@G)%$("$"){$(P)}%G: 4562 end 4563 if VOFFSET != "." 4564 V = INSTALLROOT 4565 for P $(".":P=L=*:C%/$(VOFFSET)$%%) 4566 E := $(E)@C%$(P)%$("$"){$(V)}%G: 4567 V = PACKAGEROOT 4568 end 4569 end 4570 if .MAMROOT. 4571 P := $(.MAMROOT.:C@\.@\\.@G) 4572 E := $(E)@C%$(P)/\.\./\.\.%$("$"){PACKAGEROOT}%G: 4573 E := $(E)@C%$(P)%$("$"){INSTALLROOT}%G: 4574 if VOFFSET == "." 4575 E := $(E)@C%$(PWD:X=$(.MAMROOT.)/../..)%$("$"){PACKAGEROOT}%G: 4576 E := $(E)@C%$(PWD:X=$(.MAMROOT.))%$("$"){INSTALLROOT}%G: 4577 end 4578 end 4579 .MAMEDIT. := $(E) 4580 end 4581 V := $(%:$(.MAMEDIT.:V)) 4582 if V != "setv +([! ]) ${\1}" 4583 return $(V:V) 4584 elif V == "setv INSTALLROOT ${INSTALLROOT}" 4585 return setv INSTALLROOT $(.MAM.INSTALLROOT) 4586 elif V == "setv PACKAGEROOT ${PACKAGEROOT}" 4587 if .MAM.INSTALLROOT == "$HOME" 4588 .MAM.PACKAGEROOT = $HOME 4589 end 4590 return setv PACKAGEROOT $(.MAM.PACKAGEROOT) 4591 end 4592 4593.MAMNAME. : .FUNCTION 4594 if "$(%)" == ".[A-Z]*" && "$(%)" != ".INIT|.DONE" 4595 return $(%:/.//:F=%(lower)s) 4596 end 4597 if "$(%)" == "/*|$(.MAMROOT.)/*)" 4598 return $(.MAMACTION. $(%)) 4599 end 4600 if "$(%)" == "-l+([a-zA-Z0-9_])" && "$(-mam:N=*,port*)" 4601 return $(%:/-l\(.*\)/${mam_lib\1}/) 4602 end 4603 4604.MAM.STATE.VARS. : .FUNCTION 4605 local V R 4606 for V $(?$(%):T=S:A!=.PARAMETER:T=U) 4607 if ! "$($(V))" 4608 R += $(V:/.*/${&+-D&=${&}}) 4609 end 4610 end 4611 return $(R) 4612 4613/* 4614 * common actions 4615 * 4616 * if the first command line target is not a known atom then 4617 * the function .UNKNOWN translates the atom name to upper 4618 * case preceded by a dot in an attempt to yield one of the 4619 * common actions described below 4620 * 4621 * .COMMON.SAVE prerequisite of all common save actions 4622 * 4623 * $(.BUILT.) list of built targets 4624 * $(.CLOBBER.) list of additional files to clobber 4625 * $(.FILES.) all :: source files 4626 * $(.FILES.targ) source files for :: target targ 4627 * $(.MAIN.TARGET.)first :: target name 4628 * $(.MANIFEST.) all source and miscellaneous files 4629 * $(.ORIGINAL.ARGS.) original command line args 4630 * $(.ORIGINAL.MAIN.) original .MAIN prereqs 4631 * $(.RWD.) current directory via .RECURSE 4632 * $(.SELECT.) list of all or selected source files 4633 * $(.SOURCES.) non-generated source files in $(.SELECT.) 4634 */ 4635 4636test : .SPECIAL .DONTCARE .ONOBJECT $$("check":A=.TARGET:A!=.ARCHIVE|.COMMAND|.OBJECT) 4637 4638.ALL : .VIRTUAL 4639 4640.RETAIN : .BASE. 4641 4642.BASE.DATE.FORMAT. = %Y%m%d 4643 4644.BASE.VERIFY : .MAKE .VIRTUAL .FORCE .REPEAT 4645 if ! "$(.BASE.)" 4646 error 3 $(-archive-output): no base archive for delta 4647 end 4648 4649.BASE.UPDATE : .MAKE .VIRTUAL .FORCE 4650 local B N 4651 N := $("":T=R:F=%($(.BASE.DATE.FORMAT.))T) 4652 if ( B = "$(N:T=F)" ) 4653 error $(-force:?1?3?) $(B): base archive already generated 4654 end 4655 .BASE. := $(N) 4656 4657.BASE : .BASE.UPDATE .COMMON.SAVE 4658 $(PAX) -d -w -f $(.BASE.) -z - $(PAXFLAGS) $(.MANIFEST.) 4659 4660.DELTA : .BASE.VERIFY .COMMON.SAVE 4661 $(PAX) -d -w -f $("":T=R:F=%($(.BASE.DATE.FORMAT.))T).$(.BASE.) -z $(.BASE.) $(PAXFLAGS) $(.MANIFEST.) 4662 4663/* 4664 * believe generated files and clean up archive intermediates 4665 */ 4666 4667.BELIEVE : .MAKE .VIRTUAL .ONOBJECT 4668 local A O 4669 set ignorelock keepgoing touch 4670 make .INSTALL 4671 set notouch 4672 for A $(...:A=.TARGET:A=.ARCHIVE.o) 4673 O += $(*$(A):N=*$(CC.SUFFIX.OBJECT):T=F) 4674 end 4675 if "$(O)" 4676 make { $(RM) $(RMFLAGS) $(O) } 4677 end 4678 4679.CC- .VARIANTS : .ONOBJECT $$(*.SOURCE:L<=cc-*:$$(-variants:+N=$$(-variants))) $$(.VARIANTS.:$$(-variants:+N=$$(-variants))) 4680 4681.CC-INSTALL : .ONOBJECT .ALL $$(CC.LIB.TYPE:+$$$(*.INSTALL:N=*$$$(CC.LIB.TYPE)$$$(CC.SUFFIX.ARCHIVE))) 4682 4683.CC.LD.RUNPATH. : .FUNCTION 4684 if "$(LDRUNPATH)" && CC.LD.RUNPATH && "$(CC.DIALECT:N=DYNAMIC)" && ( "$(CCLDFLAGS:V:N=$(CC.DYNAMIC)|$\(CC.DYNAMIC\))" || ! "$(CCLDFLAGS:V:N=$(CC.STATIC)|$\(CC.STATIC\))" ) 4685 local T 4686 T := $(LDRUNPATH:N!=.) $(*.SOURCE.%.ARCHIVE:I=$$(**:N=-l*:P=D):N!=.:$(.CC.NOSTDLIB.):P=A:N!=$(LIBDIR)) 4687 if T = "$(T:@/ /:/G)" 4688 return $(CC.LD.RUNPATH)$(T) 4689 end 4690 end 4691 4692.CC.LIB.DLL. : .FUNCTION 4693 return $(%) 4694 4695.CC.LIB.DLL.export : .FUNCTION 4696 local F J 4697 J := $(--jobs) /* XXX: multiple :LIBRARY: may get botched with jobs>0 */ 4698 set nojobs 4699 F := _$(%:O=1:B:/^$(CC.PREFIX.ARCHIVE)//:/$(CC.LIB.TYPE)$//:/[^a-zA-Z0-9_]/_/G)_ 4700 F := $(F:/___*/_/G) 4701 $(F).exp : .FORCE $(%:O=1) 4702 : generate $(*) export symbols in $(<) 4703 set - 4704 $(NM) $(NMFLAGS) $(*) | 4705 $(SED) $(NMEDIT) > $(<) 4706 .MAKE : $(F).exp 4707 set $(J) 4708 return $(F).exp $(%) 4709 4710.CC.LIB.DLL.object : .FUNCTION 4711 local F J 4712 J := $(--jobs) /* XXX: multiple :LIBRARY: may get botched with jobs>0 */ 4713 set nojobs 4714 F := _$(%:O=1:B:/^$(CC.PREFIX.ARCHIVE)//:/$(CC.LIB.TYPE)$//:/[^a-zA-Z0-9_]/_/G)_ 4715 F := $(F:/___*/_/G) 4716 $(F) : .FORCE $(%:O=1) 4717 : extract $(*) objects in $(<) 4718 set - 4719 $(RM) $(RMFLAGS) $(RMRECURSEFLAGS) $(<) 4720 $(MKDIR) $(<) 4721 cd $(<) 4722 $(AR) $(ARHYPHEN)x $(*:P=A) 4723 .MAKE : $(F) 4724 .DONE : .DONE.$(F) 4725 .DONE.$(F) : .FORCE 4726 $(RM) $(RMFLAGS) $(RMRECURSEFLAGS) $(<:/.DONE.//) 4727 set $(J) 4728 return $(F)/* $(%:O>1) 4729 4730.CC.LIB.DLL.option : .FUNCTION 4731 return $(CC.LIB.ALL) $(%:O=1) $(CC.LIB.UNDEF) $(%:O>1) 4732 4733.CC.LIB.DLL.symbol : .FUNCTION 4734 local F J 4735 J := $(--jobs) /* XXX: multiple :LIBRARY: may get botched with jobs>0 */ 4736 set nojobs 4737 F := _$(%:O=1:B:/^$(CC.PREFIX.ARCHIVE)//:/$(CC.LIB.TYPE)$//:/[^a-zA-Z0-9_]/_/G)_ 4738 F := $(F:/___*/_/G) 4739 $(F).c : .FORCE $(%:O=1) 4740 : generate $(*) export symbols in $(<) 4741 set - 4742 $(NM) $(NMFLAGS) $(*) | 4743 $(SED) $(NMEDIT) -e '/^[ ]*$/d' $(CC.PREFIX.SYMBOL:?-e 's/^$(CC.PREFIX.SYMBOL)//'??) | 4744 $(SORT) -u > $(<:B:S=.i) 4745 { 4746 echo '/* $(*) export symbols */' 4747 echo 4748 echo 'typedef int (*Export_t)();' 4749 echo 4750 echo '#if defined(__cplusplus)' 4751 echo 'extern "C" {' 4752 echo '#endif' 4753 echo 4754 while read sym 4755 do echo "extern int $sym();" 4756 done < $(<:B:S=.i) 4757 echo 4758 echo 'extern int $(<:B)();' 4759 echo 'extern Export_t $(<:B)export[];' 4760 echo 4761 echo '#if defined(__cplusplus)' 4762 echo '}' 4763 echo '#endif' 4764 echo 4765 echo 'Export_t $(<:B)export[] =' 4766 echo '{' 4767 while read sym 4768 do echo " $sym," 4769 done < $(<:B:S=.i) 4770 echo '};' 4771 echo 4772 echo 'int $(<:B)() { return 0; }' 4773 $(RM) $(RMFLAGS) $(<:B:S=.i) 4774 } > $(<) 4775 .MAKE : $(F)$(CC.SUFFIX.OBJECT) 4776 set $(J) 4777 return $(F)$(CC.SUFFIX.OBJECT) $(%) 4778 4779.CC.LIB.DLL.undef : .FUNCTION 4780 return `$(NM) $(NMFLAGS) $(%:O=1) | $(SED) $(NMEDIT) -e "s/^/-u /"` $(%) 4781 4782.CC.SHARED.NAME. : .FUNCTION 4783 local R E 4784 if ( R = "$(<<:B:C%\..*%%)" ) && ( E = "$(.PACKAGE.soname)" ) && "$(CC.DIALECT:N=DYNAMIC)" && ( "$(CCLDFLAGS:V:N=$(CC.DYNAMIC)|$\(CC.DYNAMIC\))" || ! "$(CCLDFLAGS:V:N=$(CC.STATIC)|$\(CC.STATIC\))" ) 4785 if R = "$(.CC.SHARED.NAME.$(R))" 4786 while E < 0 4787 let E = E + 1 4788 R := $(R:B) 4789 end 4790 return $(R) 4791 end 4792 end 4793 4794.CC.SHARED.REGISTRY. : .FUNCTION 4795 local R 4796 if ( R = "$(<<:B:C%\..*%%)" ) && .PACKAGE.registry && "$(CC.DIALECT:N=DYNAMIC)" && ( "$(CCLDFLAGS:V:N=$(CC.DYNAMIC)|$\(CC.DYNAMIC\))" || ! "$(CCLDFLAGS:V:N=$(CC.STATIC)|$\(CC.STATIC\))" ) 4797 if R = "$(.CC.SHARED.REGISTRY.$(R))" 4798 local CC.SHARED.REGISTRY.PATH 4799 CC.SHARED.REGISTRY.PATH := $(R) 4800 end 4801 return $(CC.SHARED.REGISTRY) 4802 end 4803 4804.COMMON.SAVE : .NULL .VIRTUAL .IGNORE .FOREGROUND 4805 4806.CLEAN : .CLEARARGS .ONOBJECT 4807 $(IGNORE) $(RM) $(RMFLAGS) $(.BUILT.:A=.REGULAR:A!=.ARCHIVE|.COMMAND:N!=*.(m[klos]|db$(CC.SUFFIX.SHARED:?|$(CC.SUFFIX.SHARED:/\.//).*??))$(-clean-ignore:+|($(-clean-ignore)))) 4808 4809.CLOBBER : .CLEARARGS .ONOBJECT .NOSTATEFILE 4810 $(IGNORE) $(RM) $(RMFLAGS) $(RMRECURSEFLAGS) $(.CLOBBER.:T=F:P=L) $(.BUILT.:A=.REGULAR) 4811 4812.CLOBBER.INSTALL : .ONOBJECT 4813 $(IGNORE) $(RM) $(RMFLAGS) $(RMRECURSEFLAGS) $(.INSTALL.LIST.:T=F:P=L:A=.REGULAR) 4814 4815if CPIO 4816.CPIO : .COMMON.SAVE 4817 echo $(.MANIFEST.) | tr ' ' '\012' | $(CPIO) -o $(CPIOFLAGS) > $(-archive-output)$(-?archive-output:~.cpio) 4818end 4819 4820if CTAGS 4821.CTAGS : 4822 $(CTAGS) $(CTAGSFLAGS) $(.SOURCES.:N=*.[cfhly]) 4823end 4824 4825if VGRIND 4826.GRIND : $(CTAGS:@?.GRINDEX?.COMMON.SAVE?) 4827 $(VGRIND) $(VGRINDFLAGS) $(.SOURCES.:N=*.[chly]|*.mk|$(MAKEFILE)) $(LPR:@?| $$(LPR) $$(LPRFLAGS)??) 4828 4829if CTAGS 4830.GRINDEX : .COMMON.SAVE 4831 $(CTAGS) $(CTAGSFLAGS) -v $(.SOURCES.:N=*.[chly]) | $(SORT) -f >index 4832 $(VGRIND) $(VGRINDFLAGS) -x index $(LPR:@?| $$(LPR) $$(LPRFLAGS)??) 4833end 4834end 4835 4836.INSTALL : .ALL .ONOBJECT 4837 4838.LINT : .MAKE .VIRTUAL .FORCE .SETARGS 4839 local T1 T2 LINT1ARGS 4840 set nojobs nowritestate override 4841 if "$(_release_:N=research|V)" 4842 if "$(_release_:N=V)" 4843 LINT1FLAGS += -H$$(<<:B:S=.lh) 4844 else 4845 LINT1FLAGS += -S$$(<<:B:S=.lh) 4846 end 4847 LINT1ARGS = $(*$(<):G=%$(<:S):O=2:??$(>)?O) 4848 end 4849 .LINTLIBRARIES. = $(*:A=.ARCHIVE) $(LINTLIBRARIES) 4850 .SOURCE.ln : $(LINTLIB) 4851 .INSERT.%.ARCHIVE .INSERT.%.COMMAND : .DO.NOTHING $$(<:A=.TARGET:?.LINT0??) 4852 .LINT0 : .VIRTUAL .FORCE 4853 $(SILENT) $(RM) $(RMFLAGS) $(<<:B:S=.l[hn]) 4854 for T1 % %.o 4855 for T2 $(.METARULE.I.$(T1)) 4856 $(T1) : $(T2) .NULL 4857 end 4858 end 4859 eval 4860 %.o : %.c .FORCE 4861 set - 4862 $(_release_:N=V:??echo $$$(>):$$$("\n")?){ $$(CPP) $$(CPPFLAGS) -C -Dlint $$(>) | $$(LINT1) $$(LINT1FLAGS) $$(LINTFLAGS) $(LINT1ARGS:V) >> $$(<<:B:S=.ln) ;} 2>&1 4863 end 4864 .ARCHIVE.o : .CLEAR .USE 4865 $(SILENT) $(RM) $(RMFLAGS) $(<:B:S=.lh) 4866 if "$(_release_:N=V)" 4867 .COMMAND.o : 4868 set - 4869 cat $(<:B:S=.ln) $(.LINTLIBRARIES.:B:S=.ln:/$(CC.PREFIX.ARCHIVE)\(.*\)/& llib-l\1/:T=F) > $(TMPDIR)/l$$.ln 4870 $(LINT2) -T$(TMPDIR)/l$$.ln $(<:B:S=.lh:T=F:/^/-H/) $(LINTFLAGS) 4871 $(RM) $(RMFLAGS) $(TMPDIR)/l$$.ln $(<:B:S=.l[hn]) 4872 elif "$(_release_:N=research)" 4873 .COMMAND.o : 4874 set - 4875 echo $(<):: 4876 cat $(<:B:S=.ln) $(.LINTLIBRARIES.:B:S=.ln:/$(CC.PREFIX.ARCHIVE)\(.*\)/& llib-l\1/:T=F) > $(TMPDIR)/l$$.ln 4877 $(LINT2) $(TMPDIR)/l$$.ln -S$(<:B:S=.lh) $(LINTFLAGS) 4878 $(RM) $(RMFLAGS) $(TMPDIR)/l$$.ln $(<:B:S=.l[hn]) 4879 else 4880 .COMMAND.o : 4881 set - 4882 echo $(<):: 4883 cat $(<:B:S=.ln) $(.LINTLIBRARIES.:B:S=.ln:/$(CC.PREFIX.ARCHIVE)\(.*\)/& llib-l\1/:T=F) > $(TMPDIR)/l$$.ln 4884 $(LINT2) $(TMPDIR)/l$$.ln $(LINTFLAGS) 4885 $(RM) $(RMFLAGS) $(TMPDIR)/l$$.ln $(<:B:S=.l[hn]) 4886 end 4887 4888.LIST.GENERATED : .ONOBJECT .MAKE 4889 print $(.INSTALL.LIST.:T=F:P=L:A=.REGULAR:/$/$("\n")/G) $(.CLOBBER.:T=F:P=L:/$/$("\n")/G) $(.BUILT.:A=.REGULAR:/ /$("\n")/G) 4890 4891.LIST.INSTALL : .ONOBJECT .MAKE 4892 print $(.INSTALL.LIST.:$(INSTALLROOT:N=.:?T=F?N=$(INSTALLROOT)/*:C%$(INSTALLROOT)/%%):C% %$("\n")%G) 4893 4894.LIST.INSTALLED : .ONOBJECT .MAKE 4895 print $(.INSTALL.LIST.:$(INSTALLROOT:N=.:?T=F?N=$(INSTALLROOT)/*:T=F:C%$(INSTALLROOT)/%%):C% %$("\n")%G) 4896 4897.LIST.MANIFEST : .ONOBJECT .COMMON.SAVE .MAKE 4898 if .RWD. 4899 print $(.MANIFEST.:C,^\([^/]\),$(.RWD.)/\1,:/ /$("\n")/G) 4900 else 4901 print $(.MANIFEST.:/ /$("\n")/G) 4902 end 4903 4904.LIST.PACKAGE.DIRS. = $(VROOT:T=F:P=L=*) $(INSTALLROOT) $(PACKAGEROOT) 4905 4906.LIST.PACKAGE.BINARY.EDIT. = $(.LIST.PACKAGE.DIRS.:T=F:P=A:C%\(.*\)/arch/$(CC.HOSTTYPE)$%\1%:C%\(.*\)/arch$%\1%:H=RU:C,.*,C%^&/%%,:C, ,:,G) 4907.LIST.PACKAGE.SOURCE.EDIT. = $(.LIST.PACKAGE.DIRS.:T=F:P=A:H=RU:C,.*,C%^&/%%,:C, ,:,G) 4908 4909.LIST.PACKAGE.LICENSE : .ONOBJECT .MAKE 4910 local I J E 4911 if "$(package.license.class)" 4912 if "$(LICENSECLASS)" != "$(package.license.class)" 4913 if "$(LICENSECLASS)" != "." 4914 error 1 $(LICENSECLASS): not a $(package.license.class) license -- ignored 4915 end 4916 exit 0 4917 end 4918 end 4919 E := $(.LIST.PACKAGE.SOURCE.EDIT.) 4920 if I = "$(LICENSEINFO:P!=S)" 4921 print ;;;$(I);$(I:$(E)) 4922 for J $(I:T=I:N=*.def:D=$(I:D):B:S:T=F) 4923 print ;;;$(J);$(J:$(E)) 4924 end 4925 I := $(I:D)/LICENSES/$(I:B) 4926 if I = "$(I:T=F)" 4927 print ;;;$(I);$(I:$(E)) 4928 end 4929 end 4930 4931.LIST.PACKAGE.LOCAL : .ONOBJECT .COMMON.SAVE .MAKE 4932 local I E 4933 E := $(.LIST.PACKAGE.SOURCE.EDIT.) 4934 for I $(.MANIFEST.:T=F:P=A) 4935 print ;;;$(I);$(I:$(E)) 4936 end 4937 4938.LIST.PACKAGE.BINARY : .ONOBJECT .MAKE .LIST.PACKAGE.LICENSE 4939 local I E 4940 .UNION : .CLEAR $(.INSTALL.LIST.:N=$(INSTALLROOT)/*:T=F) 4941 E := $(.LIST.PACKAGE.BINARY.EDIT.) 4942 if package.strip 4943 for I $(*.UNION:T=F:P=A:$(PACKAGE_OPTIONS:N=optimize-space:Y%:N=$(INSTALLROOT)/(bin|fun|lib)/*:N!=*$(CC.SUFFIX.ARCHIVE)|$(INSTALLROOT)/lib/lib?(/*)%%)) 4944 if "$(I:T=Y)" == "*/?(x-)(dll|exe)" 4945 print ;;filter $(STRIP) $(STRIPFLAGS) $(I);$(I);$(I:$(E)) 4946 else 4947 print ;;;$(I);$(I:$(E)) 4948 end 4949 end 4950 else 4951 for I $(*.UNION:T=F:P=A) 4952 print ;;;$(I);$(I:$(E)) 4953 end 4954 end 4955 4956.LIST.PACKAGE.RUNTIME : .ONOBJECT .MAKE .LIST.PACKAGE.LICENSE 4957 local E I X 4958 X := /lib/lib*(/*) $(CC.SUFFIX.ARCHIVE) $(CC.SUFFIX.DYNAMIC) $(CC.SUFFIX.SHARED:?$(CC.SUFFIX.SHARED)+([-.0-9])??) $(CC.SUFFIX.STATIC) 4959 .UNION : .CLEAR $(.INSTALL.LIST.:N=$(INSTALLROOT)/(bin|lib)/*:N!=*@($(X:N=?*:/ /|/G)):T=F) 4960 E := $(.LIST.PACKAGE.BINARY.EDIT.) 4961 if package.strip 4962 for I $(*.UNION:T=F:P=A) 4963 if "$(I:T=Y)" == "*/?(x-)(dll|exe)" 4964 print ;;filter $(STRIP) $(STRIPFLAGS) $(I);$(I);$(I:$(E)) 4965 else 4966 print ;;;$(I);$(I:$(E)) 4967 end 4968 end 4969 else 4970 for I $(*.UNION:T=F:P=A) 4971 print ;;;$(I);$(I:$(E)) 4972 end 4973 end 4974 4975.PROTO.LICENSE. : .FUNCTION 4976 local F G 4977 if .PACKAGE.license || LICENSE == "*=*" 4978 G = 1 4979 elif LICENSE 4980 G = 0 4981 elif F = "$(LICENSEFILE:T=F)" 4982 G := $(sh egrep -c "^(contributor|license)=\($" $(F) || true) 4983 else 4984 G = 0 4985 end 4986 return $(G) 4987 4988.LIST.PACKAGE.SOURCE : .ONOBJECT .COMMON.SAVE .MAKE .LIST.PACKAGE.LICENSE 4989 local E F G 4990 PROTOEDIT = P=A 4991 E := $(.LIST.PACKAGE.SOURCE.EDIT.) 4992 G := $(.PROTO.LICENSE.) 4993 for F $(.MANIFEST.:T=F:P=A) 4994 if G && F == "*.{1,3}(?)" 4995 print ;;$(PROTO) $(PROTOFLAGS) -o source=$(F:T=ZR=%Y) -c '' -dp $(F);$(F);$(F:$(E)) 4996 else 4997 print ;;;$(F);$(F:$(E)) 4998 end 4999 end 5000 5001.LIST.SOURCE.TGZ : .ONOBJECT .COMMON.SAVE .MAKE 5002 local E N F P # vs # I N T J 5003 PROTOEDIT = P=A 5004 E := $(.LIST.PACKAGE.SOURCE.EDIT.) 5005 N := $(.PROTO.LICENSE.) 5006 for F $(.MANIFEST.) 5007 P := $(F:T=F) 5008 if N && F == "*.{1,3}(?)" 5009 print ;;$(PROTO) $(PROTOFLAGS) -o source=$(F:T=ZR=%Y) -c '' -dp $(P);$(P);$(F:$(E)) 5010 else 5011 print ;;;$(P);$(F:$(E)) 5012 end 5013 end 5014 5015.LIST.SYMBOLS : .ALWAYS 5016 lib="$(...:A=.ARCHIVE:A=.TARGET:T=F:N!=*[-/]*)" 5017 for lib in $lib 5018 do $(NM) $(NMFLAGS) $lib | $(SED) $(NMEDIT) $(CC.PREFIX.SYMBOL:?-e 's/^$(CC.PREFIX.SYMBOL)//'??) | $(SORT) -u 5019 done 5020 5021if LPROF 5022.LPROF : .MAKE .VIRTUAL .FORCE .ONOBJECT .SETARGS 5023 local T1 T2 5024 set force noscan nowritestate override 5025 .INSERT.%.COMMAND : .LPROF0 .LPROF1 $$(<:B:S=.cnt) 5026 .LPROF0 : .MAKE .VIRTUAL .FORCE 5027 .LPROFFILES. = 5028 .LPROF1 : .AFTER .IGNORE $$(<<:B:S=.cnt) 5029 $(LPROF) $(LPROFFLAGS) -r "$(.LPROFFILES.:/^ //)" -o $(<<) -c $(*) 5030 for T1 % %.o 5031 for T2 $(.METARULE.I.$(T1)) 5032 $(T1) : $(T2) .NULL 5033 end 5034 end 5035 %.o : %.c .MAKE 5036 .LPROFFILES. += $(>) 5037 .ARCHIVE.o .COMMAND.o : .NULL 5038end 5039 5040.OFFICIAL : .ONOBJECT 5041 $(*.VIEW:O=2:@?$$(.MANIFEST.:P=L:N!=[-/]*:T=FR:T!=FL:C@.*@{ $$(DIFF) $$(DIFFFLAGS) $$(*.VIEW:O=2)/& & || true; } >> $(-official-output:D=$$(*.VIEW:O=2):B:S); $$(MV) $$(MVFLAGS) & $$(*.VIEW:O=2)/&;@)?: no lower view?) 5042 5043.PAX : .COMMON.SAVE $$(*.RECURSE:@?.PAX.RECURSE?.PAX.LOCAL) 5044 5045.PAX.LOCAL : .COMMON.SAVE 5046 $(PAX) -d -w -f $(-archive-output)$(-?archive-output:~.pax) $(PAXFLAGS) $(.MANIFEST.) 5047 5048.PAX.RECURSE : .COMMON.SAVE 5049 $(MAKE) --noexec --file=$(MAKEFILE) $(-) recurse list.manifest | 5050 $(SORT) -u | 5051 $(PAX) -w -f $(-archive-output)$(-?archive-output:~.pax) $(PAXFLAGS) 5052 5053.PRINT : .COMMON.SAVE 5054 $(PR) $(PRFLAGS) $(.SOURCES.:N!=*.[0-9]*([!./])) $(LPR:@?| $(LPR) $(LPRFLAGS)??) 5055 5056.SAVE : .COMMON.SAVE 5057 $(PAX) -d -w -f $(-archive-output)$(-?archive-output:~.$("":T=R:F=%($(.BASE.DATE.FORMAT.))T)) $(PAXFLAGS) $(.MANIFEST.) 5058 5059.SHAR : .COMMON.SAVE 5060 $(SHAR) $(SHARFLAGS) $(.MANIFEST.) > $(-archive-output)$(-?archive-output:~.shar) 5061 5062.TAR : .COMMON.SAVE 5063 $(TAR) cf$(TARFLAGS) $(-archive-output)$(-?archive-output:~.tar) $(.MANIFEST.) 5064 5065.TARBALL : .COMMON.SAVE 5066 $(PAX) -d -w -f $(-archive-output)$(-?archive-output:~.tgz) -x tar:gzip $(PAXFLAGS) -s ',^[^/],$(PWD:B:/-.*//)$(VERSION:@N!=-:?-$(VERSION)??)/,' $(.MANIFEST.) 5067 5068.TGZ : .COMMON.SAVE $$(*.RECURSE:@?.TGZ.RECURSE?.TGZ.LOCAL) 5069 5070.TGZ.LOCAL : .COMMON.SAVE 5071 { $(SILENT) print -r '$(.MANIFEST.:@/ /$("\n")/G)'; } | 5072 $(PAX) -d -w -f $(-archive-output)$(-?archive-output:~.tgz) -x tar:gzip $(PAXFLAGS) 5073 5074.TGZ.RECURSE : .COMMON.SAVE 5075 $(MAKE) --noexec --file=$(MAKEFILE) $(-) recurse list.manifest | 5076 $(SORT) -u | 5077 $(PAX) -w -f $(-archive-output)$(-?archive-output:~.tgz) -x tar:gzip $(PAXFLAGS) 5078 5079/* 5080 * make abstract machine support 5081 */ 5082 5083.MAM.LOAD : .MAKE .VIRTUAL .FORCE 5084 if "$(-mam:N=static*)" 5085 set noreadstate reread strictview 5086 set readonly 5087 INSTALLROOT = $(.MAMROOT.) 5088 PACKAGEROOT = $(.MAMROOT.)/../.. 5089 set noreadonly 5090 if "$(-mam:N=*,port*)" 5091 if ! "$(-?prefix-include)" 5092 set noprefix-include 5093 end 5094 if ! "$(-?separate-include)" 5095 set noseparate-include 5096 end 5097 end 5098 end 5099 .MAKEINIT : .MAM.INIT 5100 5101.MAM.INIT : .MAKE .VIRTUAL .FORCE .AFTER 5102 local T 5103 if ! "$(-mam)" 5104 return 5105 end 5106 LICENSEFILES := $(LICENSEINFO) 5107 if "$(-mam:N=*,port*)" 5108 for T $("<VARIABLES>":L=CC.+([[:upper:].])) 5109 $(T) := 5110 end 5111 CC.DEBUG = ${mam_cc_DEBUG} 5112 CC.DIALECT = 5113 CC.DLL = ${mam_cc_DLL} 5114 CC.DLLBIG = ${mam_cc_DLLBIG} 5115 CC.DYNAMIC = 5116 CC.EXPORT.DYNAMIC = ${mam_cc_EXPORT_DYNAMIC} 5117 CC.HOSTTYPE = ${mam_cc_HOSTTYPE} 5118 CC.OPTIMIZE = ${mam_cc_OPTIMIZE} 5119 CC.PIC = ${mam_cc_PIC} 5120 CC.PICBIG = ${mam_cc_PICBIG} 5121 CC.PREFIX.ARCHIVE = lib 5122 CC.PREFIX.DYNAMIC = ${mam_cc_PREFIX_DYNAMIC} 5123 CC.PREFIX.SHARED = ${mam_cc_PREFIX_SHARED} 5124 CC.SHARED = 5125 CC.SHELLMAGIC = ${mam_cc_SHELLMAGIC} 5126 CC.STATIC = 5127 CC.SUFFIX.ARCHIVE = .a 5128 CC.SUFFIX.DYNAMIC = ${mam_cc_SUFFIX_DYNAMIC} 5129 CC.SUFFIX.SHARED = ${mam_cc_SUFFIX_SHARED} 5130 _hosttype_ = ${mam_cc_HOSTTYPE} 5131 end 5132 .MAM.PACKAGEROOT := $(".":P=R=$(PACKAGEROOT)) 5133 print -um setv PACKAGEROOT $(PACKAGEROOT) 5134 PACKAGEROOT = ${PACKAGEROOT} 5135 print -um setv AR ${mam_cc_AR} ${mam_cc_AR_ARFLAGS} 5136 AR = ${AR} 5137 print -um setv ARFLAGS $(ARHYPHEN)rc 5138 ARFLAGS = $(ARHYPHEN)rc 5139 print -um setv AS as 5140 AS = ${AS} 5141 print -um setv ASFLAGS 5142 ASFLAGS = ${ASFLAGS} 5143 print -um setv CC $(-mam:N=static*,port*:?$(-cctype:O=1:B:S)?$(CC)?) 5144 CC = ${CC} 5145 .MAM.CC.FLAGS := $(CCFLAGS:VP:N!=-O*|$(CC.OPTIMIZE)|$\(CC.OPTIMIZE\)|-g|$(CC.DEBUG)|$\(CC.DEBUG\)) 5146 print -um setv mam_cc_FLAGS $(.MAM.CC.FLAGS) 5147 T := $(CCFLAGS:VP) 5148 if "$(T:N=-O*|$(CC.OPTIMIZE))" 5149 print -um setv CCFLAGS ${-debug-symbols?1?${mam_cc_DEBUG} -D_BLD_DEBUG?${mam_cc_OPTIMIZE}?} 5150 elif "$(T:N=-g|$(CC.DEBUG))" 5151 print -um setv CCFLAGS ${mam_cc_DEBUG} 5152 else 5153 print -um setv CCFLAGS ${-debug-symbols?1?${mam_cc_DEBUG} -D_BLD_DEBUG??} 5154 end 5155 CCFLAGS = ${mam_cc_FLAGS} ${CCFLAGS} 5156 print -um setv CCLDFLAGS $(CCLDFLAGS:VP:N!=$\(*\)) ${-strip-symbols?1?${mam_cc_LD_STRIP}??} 5157 CCLDFLAGS = ${CCLDFLAGS} 5158 CC.NATIVE = ${CC} 5159 CMP = cmp 2>/dev/null 5160 print -um setv COTEMP $$ 5161 print -um setv CPIO cpio 5162 CPIO = ${CPIO} 5163 print -um setv CPIOFLAGS 5164 CPIOFLAGS = ${CPIOFLAGS} 5165 print -um setv CPP "${CC} -E" 5166 CPP = ${CPP} 5167 print -um setv F77 f77 5168 F77 = ${F77} 5169 print -um setv HOSTCC ${CC} 5170 print -um setv IGNORE 5171 INSTALLROOT = ${INSTALLROOT} 5172 print -um setv LD ld 5173 LD = ${LD} 5174 print -um setv LDFLAGS $(LDFLAGS:VP:@Y&"$(LDFLAGS:VP)"&&) 5175 LDFLAGS = ${LDFLAGS} 5176 if "$(-mam:N=*,port*)" 5177 LDFLAGS &= $$(*.SOURCE.%.ARCHIVE:I=$$$(*:N=${mam_lib+([a-zA-Z0-9_])}:P=D):$(.CC.NOSTDLIB.):/.*/${mam_cc_L+-L&}/) 5178 end 5179 print -um setv LEX lex 5180 LEX = ${LEX} 5181 print -um setv LEXFLAGS 5182 LEXFLAGS = ${LEXFLAGS} 5183 print -um setv LPR lpr 5184 LPR = ${LPR} 5185 print -um setv LPRFLAGS 5186 LPRFLAGS = ${LPRFLAGS} 5187 M4 = ${M4} 5188 print -um setv M4FLAGS $(M4FLAGS:VP:@?"$(M4FLAGS:VP)"??) 5189 M4FLAGS = ${M4FLAGS} 5190 print -um setv NMAKE nmake 5191 MAKE := $(-never:?${NMAKE}?$$$(<:A=.ALWAYS:@Y%$(MAKE)%${NMAKE}%)?) 5192 print -um setv NMAKEFLAGS 5193 NMAKEFLAGS = ${NMAKEFLAGS} 5194 print -um setv PR pr 5195 PR = ${PR} 5196 print -um setv PRFLAGS 5197 PRFLAGS = ${PRFLAGS} 5198 print -um setv SHELL /bin/sh 5199 SHELL = ${SHELL} 5200 print -um setv SILENT 5201 STDCMP = ${STDCMP} 2>/dev/null 5202 STDCP = ${STDCP} 5203 STDED = ${STDED} 5204 STDEDFLAGS = ${STDEDFLAGS} 5205 STDLN = ${STDLN} 5206 STDMV = ${STDMV} 5207 STDRM = ${STDRM} 5208 print -um setv TAR tar 5209 TAR = ${TAR} 5210 print -um setv YACC yacc 5211 YACC = ${YACC} 5212 print -um setv YACCFLAGS -d 5213 YACCFLAGS = ${YACCFLAGS} 5214 .ARUPDATE .ARCOPY : 5215 $(<<:N=*$(CC.SUFFIX.ARCHIVE):?(ranlib $$(<<)) >/dev/null 2>&1 || true??) 5216 .ARCLEAN : .NULL 5217 .DO.INSTALL : 5218 test '' = '$(*)' || $(STDCMP) $(CMPFLAGS) $(*) $(<) || { $(STDMV) $(<) $(<).old 2>/dev/null || true; $(STDCP) $(*) $(<) $(.DO.INSTALL.OPT.) ;} 5219 for T .READONLY.* 5220 $(T) : .CLEAR .NULL .VIRTUAL 5221 end 5222 5223 /* 5224 * force some make...prev 5225 * bindfile() should probably do this 5226 * but right now its too noisy 5227 */ 5228 5229 make (USAGE_LICENSE) $(LICENSEFILES) 5230 5231/* 5232 * miscellaneous support 5233 */ 5234 5235include - "msgcat.mk" 5236 5237/* 5238 * local installation info 5239 */ 5240 5241include "Makeinstall.mk" 5242 5243/* 5244 * architecture specific additions 5245 */ 5246 5247include - "rules-$(_hosttype_).mk" 5248 5249if _hosttype_ != "$(_hosttype_:B)" 5250include - "rules-$(_hosttype_:B).mk" 5251 if "$(_hosttype_:B)" != "$(_hosttype_:B:/\([0-9][0-9]*\)[^0-9][^0-9]*[0-9]*$/\1/)" 5252 include - "rules-$(_hosttype_:B:/\([0-9][0-9]*\)[^0-9][^0-9]*[0-9]*$/\1/).mk" 5253 end 5254end 5255 5256/* 5257 * local additions 5258 */ 5259 5260include - "Localrules.mk" 5261