1# ProjectBuilder Jambase 2# Copyright (c) 1999,2000 Apple Computer, Inc. 3# All rights reserved. 4 5CROSS_ROOT default = "" ; 6 7JAMBASE_DIR default = $(JAMBASE:D) ; 8 9OS default = macos ; 10if $(OS) = MACOS { 11 OS = macos ; 12} 13 14if OS != "" { 15 include $(JAMBASE_DIR)/platform-$(OS).jam ; 16} 17 18# Copyright (c) 1999-2003 Apple Computer, Inc. 19# All rights reserved. 20 21# This file defines various functions for transforming text and 22# manipulating variables 23 24/ default = / ; 25 26# NonObjectFiles <non-object files returned> : <list of files> 27# Returns only files not in $(OBJECT_FILES_$(VARIANT) 28# or $(OBJECT_FILES_$(VARIANT)_$(ARCH)) for ARCH in $(ARCHS) 29rule NonObjectFiles 30{ 31 $(1) = ; 32 for X in $(2) { 33 if ! $(X) in $(OBJECT_FILES_$(VARIANT)) { 34 REJECT = ; 35 for ARCH in $(ARCHS) { 36 if $(X) in $(OBJECT_FILES_$(VARIANT)_$(ARCH)) { 37 REJECT = YES ; 38 } 39 } 40 if ! $(REJECT) { 41 $(1) += $(X) ; 42 } 43 } 44 } 45} 46 47# 48# RemovePrefixPath <variable> : <prefix> : <path-with-prefix> 49# removes the given prefix from the path and puts the result 50# in the given variable 51# 52rule RemovePrefixPath 53{ 54 local newname = $(3:BS) ; 55 local newdir = $(3:D) ; 56 local INDEX ; 57 if $(2) != "." { 58 for INDEX in 1 2 3 4 5 6 7 8 9 10 { 59 if $(newdir) != $(2) { 60 newname = $(newdir:BS)/$(newname) ; 61 newdir = $(newdir:D) ; 62 } 63 } 64 } 65 else { 66 newname = $(3) ; 67 } 68 $(1) = $(newname) ; 69} 70# Copyright (c) 1999-2003 Apple Computer, Inc. 71# All rights reserved. 72 73# Built-in definitions of common build settings. These can be 74# overridden by any higher layer (project-level, target-level, 75# build-phase-level, command-line etc). 76 77# the four 'root' directories 78export deferred SRCROOT = $(PWD) ; 79export deferred OBJROOT = $(SYMROOT) ; 80export deferred SYMROOT = $(SRCROOT)/build ; 81export deferred DSTROOT = /tmp/$(PROJECT_NAME).dst ; 82 83# synonyms for the above 84export deferred SOURCE_ROOT = $(SRCROOT) ; 85export deferred TEMP_ROOT = $(OBJROOT) ; 86export deferred BUILD_ROOT = $(SYMROOT) ; 87export deferred INSTALL_ROOT = $(DSTROOT) ; 88 89# more specific directories inside the TEMP_ROOT 90export deferred TEMP_DIR = $(OBJROOT)/$(PROJECT_NAME).build/$(TARGET_NAME).build ; 91export deferred DERIVED_FILE_DIR = $(TEMP_DIR)/DerivedSources ; 92 deferred OBJECT_FILE_DIR = $(TEMP_DIR)/Objects ; 93 deferred CLASS_FILE_DIR = $(TEMP_DIR)/JavaClasses ; 94 deferred FILE_LIST = $(OBJECT_FILE_DIR)/LinkFileList ; 95 deferred PRECOMP_TRUSTFILE = $(TEMP_DIR)/TrustedPrecomps.txt ; 96 97# more specific directories inside the BUILD_ROOT 98export deferred BUILD_DIR = $(SYMROOT) ; 99 100# more specific directories inside the INSTALL_ROOT 101export deferred INSTALL_DIR = $(DSTROOT)/$(INSTALL_PATH) ; 102 103# installation parameters 104export deferred INSTALL_OWNER = $(USER) ; 105export deferred INSTALL_GROUP = $(GROUP) ; 106export deferred INSTALL_MODE_FLAG = "ugo-w,o+rX" ; 107 108# language-independent code generation settings 109 deferred OPTIMIZATION_LEVEL = 0 ; 110 deferred OPTIMIZATION_CFLAGS = -Os ; 111 deferred DEBUGGING_SYMBOLS = YES ; 112 deferred PROFILING_CODE = NO ; 113 deferred PREBINDING = YES ; 114 115# Java-specific (some are marginally obsolete) 116 deferred JAVA_ARCHIVE_CLASSES = YES ; 117 deferred JAVA_ARCHIVE_TYPE = JAR ; 118 deferred JAVA_APP_STUB = $(SYSTEM_LIBRARY_DIR)/Frameworks/JavaVM.framework/Resources/MacOS/JavaApplicationStub ; 119 deferred JAVA_JAR_FLAGS = cv ; 120 deferred JAVA_SOURCE_SUBDIR = . ; 121 deferred JAVA_FRAMEWORK_RESOURCES_DIRS = Resources ; 122 deferred JAVA_FRAMEWORK_JARS = ; 123 deferred JAVA_USE_DEPENDENCIES = YES ; 124 deferred JAVA_ZIP_FLAGS = -urg ; 125 deferred JAVAC_SOURCE_FILE_ENCODING = MACINTOSH ; 126 127# miscellaneous 128export deferred DEVELOPMENT_LANGUAGE = English ; 129export deferred FRAMEWORK_VERSION = A ; 130 deferred REMOVE_CVS_FROM_RESOURCES = YES ; 131 deferred COPY_PHASE_STRIP = NO ; 132 deferred CLONE_HEADERS = NO ; 133 deferred KEEP_PRIVATE_EXTERNS = YES ; # this currently affects the master.o file only 134 deferred USE_GCC3_PFE_SUPPORT = YES ; 135# We avoid setting a default value for this for Project Builder 2.1, so that lower-level tools can pick their own default. 136#export deferred MACOSX_DEPLOYMENT_TARGET = 10.2 ; 137 138 139rule ConditionalDefinitions 140{ 141 # default mapping of build actions to build variants 142 switch $(ACTION) { 143 case build : deferred BUILD_COMPONENTS = headers build ; 144 case copysrc : deferred BUILD_COMPONENTS = source ; 145 case copyhdrs : deferred BUILD_COMPONENTS = headers ; 146 case copyrsrcs : deferred BUILD_COMPONENTS = resources ; 147 case install : deferred BUILD_COMPONENTS = headers build ; 148 deferred DEPLOYMENT_LOCATION = YES ; 149 deferred DEPLOYMENT_POSTPROCESSING = YES ; 150 case installdebugonly : deferred BUILD_COMPONENTS = build ; 151 deferred DEPLOYMENT_LOCATION = YES ; 152 deferred DEPLOYMENT_POSTPROCESSING = YES ; 153 deferred BUILD_VARIANTS = debug ; 154 case installprofileonly : deferred BUILD_COMPONENTS = build ; 155 deferred DEPLOYMENT_LOCATION = YES ; 156 deferred DEPLOYMENT_POSTPROCESSING = YES ; 157 deferred BUILD_VARIANTS = profile ; 158 case installdebugprofileonly : deferred BUILD_COMPONENTS = build ; 159 deferred DEPLOYMENT_LOCATION = YES ; 160 deferred DEPLOYMENT_POSTPROCESSING = YES ; 161 deferred BUILD_VARIANTS = debug profile ; 162 case installhdrs : deferred BUILD_COMPONENTS = headers ; 163 deferred DEPLOYMENT_LOCATION = YES ; 164 deferred DEPLOYMENT_POSTPROCESSING = YES ; 165 case installsrc : deferred BUILD_COMPONENTS = source ; 166 deferred DEPLOYMENT_LOCATION = YES ; 167 deferred DEPLOYMENT_POSTPROCESSING = YES ; 168 case installrsrcs : deferred BUILD_COMPONENTS = resources ; 169 deferred DEPLOYMENT_LOCATION = YES ; 170 deferred DEPLOYMENT_POSTPROCESSING = YES ; 171 } 172 173 # conditional locations enabling install-in-place 174 if $(DEPLOYMENT_LOCATION) = YES { 175 if $(SKIP_INSTALL) || ! $(INSTALL_PATH) { 176 export deferred TARGET_BUILD_DIR = $(TEMP_ROOT)/UninstalledProducts ; 177 } 178 else { 179 export deferred TARGET_BUILD_DIR = $(INSTALL_ROOT)/$(INSTALL_PATH) ; 180 } 181 deferred BASE_PROJECT_HEADER_DIR = $(TEMP_ROOT)/ProjectHeaders ; 182 if $(INSTALLED_PRODUCT_ASIDES) = YES { 183 # built products go in subfolder when there are asides 184 export deferred BUILT_PRODUCTS_DIR = $(BUILD_ROOT)/BuiltProducts ; 185 } 186 else { 187 # built products go in build folder when there are no asides 188 export deferred BUILT_PRODUCTS_DIR = $(BUILD_ROOT) ; 189 } 190 } 191 else { 192 export deferred TARGET_BUILD_DIR = $(BUILD_DIR) ; 193 export deferred BUILT_PRODUCTS_DIR = $(BUILD_DIR) ; 194 deferred BASE_PROJECT_HEADER_DIR = $(BUILD_ROOT)/ProjectHeaders ; 195 } 196} 197# Copyright (c) 1999-2003 Apple Computer, Inc. 198# All rights reserved. 199 200# Maps legacy Makefile variables to modern Jambase variables 201# Set global C flags, architectures, and architecture flags for linking 202GLOBAL_CFLAGS default = $(RC_NONARCH_CFLAGS) ; 203ARCHITECTURES default = $(RC_ARCHS) ; 204SUPPORTED_ARCHITECTURES default = i386 ppc ; 205VALID_ARCHS default = i386 ppc ; 206for ARCH in $(SUPPORTED_ARCHITECTURES) { 207 if $(RC_$(ARCH)) = YES { 208 $(ARCH) = YES ; 209 } 210} 211 212# More compatibility definitions for things that we have 213# renamed that we had already told external users about 214export deferred TEMP_FILES_DIR = $(TEMP_DIR) ; 215export deferred DERIVED_SOURCES_DIR = $(DERIVED_FILE_DIR) ; 216export deferred BUILD_PATH = $(TEMP_ROOT) ; 217 218export deferred PROJECT = $(PROJECT_NAME) ; 219export deferred TARGETNAME = $(TARGET_NAME) ; 220 221# (the following four are build settings to the generated package files 222# written by PBXCore -- the new names have underscores to indicate that 223# they are private, and they have more consistent names -- we should 224# be able to remove the old compatibility settings soon) 225export deferred PRODUCT_SETTINGS_PATH = $(_INFO_PLIST_FILE_PATH) ; 226export deferred PKGINFO_FILE_PATH = $(_PKGINFO_FILE_PATH) ; 227export deferred VERSION_SETTINGS_PATH = $(_VERSION_PLIST_FILE_PATH) ; 228export deferred DEVELOPMENT_SETTINGS_PATH = $(_PBDEVELOPMENT_PLIST_FILE_PATH) ; 229# Copyright (c) 1999-2003 Apple Computer, Inc. 230# All rights reserved. 231 232# !!!cmolick:20000821 hardcoded tool paths because variables not set yet 233APPLE_INTERNAL_TOOLS default = /AppleInternal/Developer/Tools ; 234SYSTEM_DEVELOPER_TOOLS default = /Developer/Tools ; 235# Variables for invoking commands using explict paths 236# except where built in shell functions should be used 237ASM default = /usr/bin/as ; 238BRIDGET default = /usr/bin/bridget ; 239# CC defined in BeginProduct rule based on value of GCC_VERSION and other settings 240CD default = cd ; 241CHMOD default = /bin/chmod ; 242CHOWN default = /usr/sbin/chown ; 243CP default = /bin/cp ; 244DITTO default = /usr/bin/ditto ; 245ECHO default = echo ; 246EGREP default = /usr/bin/egrep ; 247FASTCP default = /usr/lib/fastcp ; 248FIXPRECOMPS default = /usr/bin/fixPrecomps ; 249FIND default = /usr/bin/find ; 250GATHERHEADERDOC default = /usr/bin/gatherHeaderDoc ; 251HEADERDOC2HTML default = /usr/bin/headerdoc2html ; 252INTERFACER default = $(APPLE_INTERNAL_TOOLS)/Interfacer ; 253JAR default = /usr/bin/jar ; 254export JAVA_COMPILER default = /usr/bin/javac ; 255export JAVACONFIG default = /usr/bin/javaconfig ; 256# LD defined in BeginProduct rule based value of GCC_VERSION and other settings 257LEX default = /usr/bin/lex ; 258LIBTOOL default = /usr/bin/libtool ; 259LN default = /bin/ln ; 260LNRESOLVE default = $(SYSTEM_DEVELOPER_TOOLS)/lnresolve ; 261MAKEPSEUDOLIB default = $(APPLE_INTERNAL_TOOLS)/MakePseudoLibrary ; 262MERGEINFO default = /usr/lib/mergeInfo ; 263MKDIR default = /bin/mkdir ; 264MIG default = /usr/bin/mig ; 265MV default = /bin/mv ; 266NMEDIT default = /usr/bin/nmedit ; 267OSAC default = /usr/bin/osacompile ; 268OSAL default = /usr/bin/osalang ; 269OSAS default = /usr/bin/osascript ; 270PBXCP default = $(SYSTEM_DEVELOPER_TOOLS)/pbxcp ; 271RANLIB default = /usr/bin/ranlib ; 272REGGEN default = reggen ; 273RESMERGER default = $(SYSTEM_DEVELOPER_TOOLS)/ResMerger ; 274RESOURCE_PRESERVING_CP default = $(SYSTEM_DEVELOPER_TOOLS)/CpMac ; 275REZ default = $(SYSTEM_DEVELOPER_TOOLS)/Rez ; 276RM default = /bin/rm ; 277RPCGEN default = /usr/bin/rpcgen ; 278SED default = /usr/bin/sed ; 279SETFILE default = $(SYSTEM_DEVELOPER_TOOLS)/SetFile ; 280SH default = /bin/sh ; 281STRIP default = /usr/bin/strip ; 282TOUCH default = /usr/bin/touch ; 283UNZIP default = /usr/bin/unzip ; 284XARGS default = /usr/bin/xargs ; 285YACC default = /usr/bin/yacc ; 286ZIP default = /usr/bin/zip ; 287 288# Basic operations: 289 290# Rm <files> 291# Removes <files> from the filesystem. Note that the actions are only 292# executed once, no matter how many times the rule is invoked. 293actions together piecemeal Rm 294{ 295 $(RM) -r $(1:Q) 296} 297 298# Mkdir <directory> 299# Creates <directory> 300rule Mkdir 301{ 302 # Only existence of the directory matters 303 NOUPDATE $(1) ; 304} 305actions together piecemeal Mkdir 306{ 307 $(MKDIR) -p $(1:Q) 308} 309 310# MkEmptyDir <directory> 311# Makes a directory if necessary, and insures it is empty 312actions together MkEmptyDir 313{ 314 ( $(MKDIR) -p $(1:Q) && $(CD) $(1:Q) && $(RM) -rf "*" ) 315} 316 317# SymLink <link> : <to> 318# Makes a symbolic link to the path indicated. 319# Link target is treated as a nonfile to preserve the value 320rule SymLink 321{ 322 if ! $(2) in $(PRODUCT_FILES) && $(2) != $(PRODUCT_CLASS_FILE_DIR) { 323 NOTFILE $(2) ; 324 } 325} 326actions SymLink 327{ 328 $(LN) -sf $(2:Q) $(1:Q) 329} 330 331# Touch <files> 332# Touches files in the filesystem. 333actions Touch 334{ 335 $(TOUCH) $(1:Q) 336} 337 338# TouchConditionally <fileToTouch> : <fileToCompareAgainst> 339# Touches a file in the filesystem if <fileToCompareAgainst> is newer. 340rule TouchConditionally 341{ 342 DEPENDS $(1) : $(2) ; 343} 344actions TouchConditionally 345{ 346 $(TOUCH) $(1:G=:Q) 347} 348 349# Echo <file> : <text> 350# Echoes text into a file. 351rule Echo 352{ 353 local FILE ; 354 NOTFILE $(2) ; 355 Echo.remove $(1) ; 356 for FILE in $(2) { 357 Echo.append $(1) : $(FILE) ; 358 } 359} 360actions together piecemeal quietly Echo.remove 361{ 362 $(RM) -rf $(1:Q) 363} 364actions quietly Echo.append 365{ 366 $(ECHO) $(2:Q) >> $(1:Q) 367} 368 369# ChangeOwnerAndGroup and ChangeMode to use when installing files 370# All these use the -H option to avoid traversing bad symbolic links 371rule ChangeOwnerAndGroup 372{ 373 if $(INSTALL_OWNER) { 374 if $(INSTALL_GROUP) { 375 ChangeOwnerAndGroup.Action $(1) ; 376 } 377 else { 378 ChangeOwner.Action $(1) ; 379 } 380 } 381} 382actions ChangeOwnerAndGroup.Action 383{ 384 if [ -e $(1:Q) ] 385 then $(CHOWN) -RH $(INSTALL_OWNER):$(INSTALL_GROUP) $(1:Q) 386 fi 387} 388actions ChangeOwner.Action 389{ 390 if [ -e $(1:Q) ] 391 then $(CHOWN) -RH $(INSTALL_OWNER) $(1:Q) 392 fi 393} 394actions ChangeMode 395{ 396 if [ -e $(1:Q) ] 397 then $(CHMOD) -RH $(INSTALL_MODE_FLAG) $(1:Q) 398 fi 399} 400 401# Strip <target> 402# Runs strip to remove debugging symbols from the executable of the target 403actions Strip 404{ 405 $(STRIP) $(STRIPFLAGS:Q) $(1:Q) 406} 407 408# SetFile <fork file> 409# Appends type and creator to a file 410rule SetFile 411{ 412 local MACOS_TYPE_ARG ; 413 local MACOS_CREATOR_ARG ; 414 if $(MACOS_TYPE) { 415 MACOS_TYPE_ARG = -t '$(MACOS_TYPE)' ; 416 } 417 if $(MACOS_CREATOR) { 418 MACOS_CREATOR_ARG = -c '$(MACOS_CREATOR)' ; 419 } 420 SETFILEFLAGS on $(1) = $(MACOS_TYPE_ARG) $(MACOS_CREATOR_ARG) ; 421} 422actions SetFile 423{ 424 $(SETFILE) $(SETFILEFLAGS:Q) "$(OTHER_SETFILEFLAGS)" $(1:Q) 425} 426 427# Rez <fork file> : <target file> 428# Appends resource fork data to a file 429rule Rez 430{ 431 local MACOS_TYPE_ARG ; 432 local MACOS_CREATOR_ARG ; 433 DEPENDS $(1) : $(2) ; 434 if $(MACOS_TYPE) { 435 MACOS_TYPE_ARG = -t '$(MACOS_TYPE)' ; 436 } 437 if $(MACOS_CREATOR) { 438 MACOS_CREATOR_ARG = -c '$(MACOS_CREATOR)' ; 439 } 440 REZFLAGS on $(1) = -append -d SystemSevenOrLater=1 $(MACOS_TYPE_ARG) $(MACOS_CREATOR_ARG) "$(OTHER_REZFLAGS)" ; 441 if ! $(REZ_EXECUTABLE) = "YES" { 442 # by default use data forks 443 REZFLAGS on $(1) += -useDF ; 444 } 445} 446actions Rez 447{ 448 $(REZ) $(2:Q) $(REZFLAGS) -o $(1:Q) 449} 450 451# ResMerge <fork file> : <rsrc file> 452# Merges the resources from binary resource file 'rsrc file' into 'fork file' 453# CAUTION: OTHER_RESMERGERFLAGS (with R) are used for RESMERGEFLAGS (no R) 454rule ResMerge 455{ 456 local MACOS_TYPE_ARG ; 457 local MACOS_CREATOR_ARG ; 458 DEPENDS $(1) : $(2) ; 459 if $(MACOS_TYPE) { 460 MACOS_TYPE_ARG = -fileType '$(MACOS_TYPE)' ; 461 } 462 if $(MACOS_CREATOR) { 463 MACOS_CREATOR_ARG = -fileCreator '$(MACOS_CREATOR)' ; 464 } 465 RESMERGEFLAGS on $(1) = -append $(MACOS_TYPE_ARG) $(MACOS_CREATOR_ARG) "$(OTHER_RESMERGERFLAGS)" ; 466 if ! $(REZ_EXECUTABLE) = "YES" { 467 # by default use data forks 468 RESMERGEFLAGS on $(1) += -dstIs DF ; 469 } 470} 471actions ResMerge 472{ 473 $(RESMERGER) $(2:Q) $(RESMERGEFLAGS) -o $(1:Q) 474} 475 476# RezCollector and ResMergerCollector either compile 477# resource manager resources together, or split compiles 478# by file with the first compile being treated differently. 479# This code assumes collectors will be declared product files 480# only after the first Collector rule evaluation. 481rule RezCollector 482{ 483 DEPENDS $(1) : $(2) ; 484 REZFLAGS on $(1) = -d SystemSevenOrLater=1 -useDF ; 485 REZPATHFLAGS on $(1) = ; 486 for _REZ_PATH in $(REZ_SEARCH_PATHS) { 487 REZPATHFLAGS on $(1) += -i $(_REZ_PATH) ; 488 } 489 if $(REZ_TOGETHER) = YES { 490 RezCollector.together $(1) : $(2) ; 491 } 492 else { 493 if ! $(1) in $(PRODUCT_FILES) { 494 RezCollector.initial $(1) : $(2) ; 495 } 496 else { 497 RezCollector.append $(1) : $(2) ; 498 } 499 } 500} 501actions together piecemeal RezCollector.together 502{ 503 if [ -f $(1:Q) ]; then 504 _appendoption=-append 505 fi 506 $(REZ) -o $(1:Q) $_appendoption $(REZFLAGS:Q) "$(OTHER_REZFLAGS)" $(REZPATHFLAGS:Q) $(2:Q) 507} 508actions RezCollector.initial 509{ 510 $(RM) -f $(1:Q) && \ 511 $(REZ) -o $(1:Q) $(REZFLAGS:Q) "$(OTHER_REZFLAGS)" $(REZPATHFLAGS:Q) $(2:Q) 512} 513actions RezCollector.append 514{ 515 $(REZ) -o $(1:Q) -append $(REZFLAGS:Q) "$(OTHER_REZFLAGS)" $(REZPATHFLAGS:Q) $(2:Q) 516} 517 518rule ResMergerCollector 519{ 520 DEPENDS $(1) : $(2) ; 521 RESMERGEFLAGS on $(1) = -dstIs DF ; 522 if $(REZ_TOGETHER) = YES { 523 ResMergerCollector.together $(1) : $(2) ; 524 } 525 else { 526 if ! $(1) in $(PRODUCT_FILES) { 527 ResMergerCollector.initial $(1) : $(2) ; 528 } 529 else { 530 ResMergerCollector.append $(1) : $(2) ; 531 } 532 } 533} 534actions together piecemeal ResMergerCollector.together 535{ 536 if [ -f $(1:Q) ]; then 537 _appendoption=-append 538 fi 539 $(RESMERGER) -o $(1:Q) $_appendoption $(RESMERGEFLAGS:Q) "$(OTHER_RESMERGERFLAGS)" $(2:Q) 540} 541actions ResMergerCollector.initial 542{ 543 $(RM) -f $(1:Q) && $(RESMERGER) -o $(1:Q) $(RESMERGEFLAGS:Q) "$(OTHER_RESMERGERFLAGS)" $(2:Q) 544} 545actions ResMergerCollector.append 546{ 547 $(RESMERGER) -o $(1:Q) -append $(RESMERGEFLAGS:Q) "$(OTHER_RESMERGERFLAGS)" $(2:Q) 548} 549 550# ResMergerProduct - used to transfer collector resources to final destination 551rule ResMergerProduct 552{ 553 local MACOS_TYPE_ARG ; 554 local MACOS_CREATOR_ARG ; 555 DEPENDS $(1) : $(2) ; 556 if $(MACOS_TYPE) { 557 MACOS_TYPE_ARG = -fileType '$(MACOS_TYPE)' ; 558 } 559 if $(MACOS_CREATOR) { 560 MACOS_CREATOR_ARG = -fileCreator '$(MACOS_CREATOR)' ; 561 } 562 RESMERGEFLAGS on $(1) = $(MACOS_TYPE_ARG) $(MACOS_CREATOR_ARG) -srcIs DF "$(OTHER_RESMERGERFLAGS)" ; 563 if $(REZ_EXECUTABLE) = "YES" { 564 ResMergerProductResourceFork $(1) : $(2) ; 565 } 566 else { 567 RESMERGEFLAGS on $(1) += -dstIs DF ; 568 ResMergerProductDataFork $(1) : $(2) ; 569 } 570} 571actions ResMergerProductResourceFork 572{ 573 $(REZ) -o $(1:Q) < /dev/null && \ 574 $(RESMERGER) $(2:Q) $(RESMERGEFLAGS) -o $(1:Q) 575} 576actions ResMergerProductDataFork 577{ 578 $(RM) -f $(1:Q) && \ 579 $(RESMERGER) $(2:Q) $(RESMERGEFLAGS) -o $(1:Q) 580} 581 582# Fixprecomps <precomp> : <header> 583# Ensures that the precompiled header is up to date 584if $(FIXPRECOMPS) { 585 rule Fixprecomps 586 { 587 DEPENDS $(1) : $(2) ; 588 } 589 actions Fixprecomps 590 { 591 $(FIXPRECOMPS) -precomps $(1:Q) 592 } 593} else { 594 rule Fixprecomps 595 { 596 # if we don't have a fixprecomps command, we'll just 597 # quietly do nothing 598 NOTFILE $(1) ; 599 } 600} 601 602 603# Copy operations: 604 605# Cp <destination> : <source> 606# Reliably copies files only. 607# Leaf names of the source and destination are expected to match. 608rule Cp 609{ 610 DEPENDS $(1) : $(2) ; 611} 612actions together piecemeal Cp 613{ 614 $(CP) $(CPFLAGS:Q) $(2:Q) $(1:Q) 615} 616 617# PBXCp <destination-file> : <source-file> 618# Reliably copies files only. Does not currently respect Mac OS 619# Finder info or resource forks, but it does skip CVS directories 620# and it does optionally strip Mach-O executables. 621# Leaf names of the source and destination are expected to match. 622rule PBXCp 623{ 624 if $(ACTION) != installhdrs { 625 DEPENDS $(1) : $(2) ; 626 } 627 PBXCP_FLAGS on $(1) = ; 628 VERBOSE_PBXCP default = NO ; 629 if $(VERBOSE_PBXCP) = YES { 630 PBXCP_FLAGS on $(1) += -V ; 631 } 632 PBXCP_FLAGS on $(1) += -exclude .DS_Store ; 633 if $(REMOVE_CVS_FROM_RESOURCES) = YES { 634 PBXCP_FLAGS on $(1) += -exclude CVS ; 635 } 636 if $(COPY_PHASE_STRIP) = YES && $(ACTION) != installhdrs { 637 PBXCP_FLAGS on $(1) += -strip-debug-symbols ; 638 } 639 # Because any content copied may have been generated, and so may be 640 # in the form of a symlink to the actual content, it is necessary 641 # to resolve one level of symbolic link for all sources copied. 642 PBXCP_FLAGS on $(1) += -resolve-src-symlinks ; 643} 644actions together piecemeal PBXCp 645{ 646 $(PBXCP) $(PBXCP_FLAGS:Q) $(2:Q) $(1:DQ) 647} 648 649# Ditto <destination> : <source> 650# Directory to directory copies. 651rule Ditto 652{ 653 DEPENDS $(1) : $(2) ; 654} 655actions Ditto 656{ 657 $(DITTO) $(2:Q) $(1:Q) 658} 659 660# RobustCp <destination> : <source> 661# RobustCp is like Cp, but is made more robust by first removing 662# any previous copy results and then conditionally removing CVS 663# directories from the destination. 664rule RobustCp 665{ 666 if ! $(ACTION) = installhdrs { 667 DEPENDS $(1) : $(2) ; 668 } 669 if $(REMOVE_CVS_FROM_RESOURCES) = YES && $(DEPLOYMENT_POSTPROCESSING) = YES { 670 RobustCp.CleanBeforeAndAfter $(1) : $(2) ; 671 } 672 else { 673 RobustCp.CleanBefore $(1) : $(2) ; 674 } 675 if $(COPY_PHASE_STRIP) = YES && ! $(ACTION) = installhdrs { 676 StripBinaries $(1) ; 677 } 678} 679actions RobustCp.CleanBeforeAndAfter 680{ 681 if [ -d $(1:Q) ] 682 then $(RM) -r $(1:Q) 683 fi 684 if [ -e $(2:Q) ] 685 then 686 _source=`$(LNRESOLVE) $(2:Q)` 687 $(CP) -fRP "$_source" $(1:Q) 688 if [ -d "$_source" ] 689 then 690 $(FIND) $(1:Q) -name CVS -type d -prune -print0 | $(XARGS) -0 rm -r 691 fi 692 fi 693} 694actions RobustCp.CleanBefore 695{ 696 if [ -d $(1:Q) ] 697 then $(RM) -r $(1:Q) 698 fi 699 if [ -e $(2:Q) ] 700 then _source=`$(LNRESOLVE) $(2:Q)` 701 $(CP) -fRP "$_source" $(1:Q) 702 fi 703} 704 705# StripBinaries <starting directory> 706# Uses find to run strip -s on all binaries starting from a file or directory 707actions StripBinaries 708{ 709 if [ -f $(1:Q) ]; then 710 filetype=`file $(1:Q)` 711 macho=`echo $filetype | fgrep Mach-O | sed 's/:.*//'` 712 ararch=`echo $filetype | fgrep ar\ archive | sed 's/:.*//'` 713 if [ "x$macho" != "x" ]; then 714 $(STRIP) -S "$macho" 715 fi 716 if [ "x$ararch" != "x" ]; then 717 $(STRIP) -S "$ararch" 718 fi 719 else 720 machos=`cd $(1:Q); $(FIND) . -type f -print0 | xargs -0 file | fgrep Mach-O | sed 's/:.*//'` 721 ararchs=`cd $(1:Q); $(FIND) . -type f -print0 | xargs -0 file | fgrep ar\ archive | sed 's/:.*//'` 722 if [ "x$machos" != "x" ]; then 723 cd $(1:Q); 724 origIFS=$IFS 725 IFS=" 726" 727 for curbinary in $machos ; do 728 $(STRIP) -S "$curbinary" 729 done 730 IFS=$oldIFS 731 fi 732 if [ "x$ararchs" != "x" ]; then 733 cd $(1:Q); 734 origIFS=$IFS 735 IFS=" 736" 737 for curbinary in $ararchs ; do 738 $(STRIP) -S "$curbinary" 739 done 740 IFS=$oldIFS 741 fi 742 fi 743} 744 745# ResourcePreservingCp <destination> : <source> 746# where the leaf names of <destination> and <source> are the same 747# and CpMac is to be used to insure resources are preserved. 748# Although CpMac is invoked with -r, this command is only reliable 749# for individual file copies becaues there is no preremove of 750# a directory destination which could cause nesting of the copy. 751rule ResourcePreservingCp 752{ 753 DEPENDS $(1) : $(2) ; 754} 755actions together piecemeal ResourcePreservingCp 756{ 757 $(RESOURCE_PRESERVING_CP) -r $(2:Q) $(1:Q) 758} 759 760# ResourcePreservingMv <destination> : <source> : <junk> 761# where the leaf names of <destination> and <source> are the same 762# and CpMac is to be used to insure resources are preserved. 763# The <junk> is removed after copying. 764rule ResourcePreservingMv 765{ 766 DEPENDS $(1) : $(2) ; 767} 768actions together piecemeal ResourcePreservingMv 769{ 770 $(RESOURCE_PRESERVING_CP) -r $(2:Q) $(1:Q) 771} 772 773# AbsolutePathImportStub <stub file> : <stub import file> 774# Generates a file with one line which is an #import directive 775# and the second parameter quoted which should be a full path 776# to the real file to be imported. 777# If $2 is not an absolute path, $(SRCROOT) will be prepended to make 778# it absolute. 779rule AbsolutePathImportStub 780{ 781 DEPENDS $(1) : $(2) ; 782 NOUPDATE $(1) ; 783} 784actions AbsolutePathImportStub 785{ 786 firstChar=`echo "$(2)" | colrm 2` 787 if [ z$firstChar = z"/" -o z$firstChar = z"~" ] ; then 788 includePath="$(2)" 789 else 790 includePath="$(SRCROOT)/$(2)" 791 fi 792 echo "#include" \""${includePath}"\" > "$(1)" 793} 794 795# HeaderDoc <headerdoc target (table of contents for header)> : <header> 796rule HeaderDoc 797{ 798 DEPENDS $(1) : $(2) ; 799} 800actions HeaderDoc 801{ 802 $(HEADERDOC2HTML) -o $(HEADERDOC_DIR:Q) $(2:Q) 803} 804 805# GatheredHeaderDoc <gathered headerdoc target> 806rule GatheredHeaderDoc 807{ 808} 809actions GatheredHeaderDoc 810{ 811 $(GATHERHEADERDOC) $(HEADERDOC_DIR:Q) 812} 813 814# Source derivation operations: 815 816# Lex <file>.{c|m} : <file>.l[m] 817# Runs lex to generate <file>.c or <file>.m based on scanner input 818rule Lex 819{ 820 DEPENDS $(1) : $(2) ; 821} 822 823actions Lex 824{ 825 $(LEX) $(LEXFLAGS) "-o$(1)" $(2:Q) 826} 827 828# Yacc <file>.{c|m} <file>.h : <file>.y[m] 829# Uses yacc to generate parser from description 830rule Yacc 831{ 832 DEPENDS $(1) : $(2) ; 833} 834 835actions Yacc 836# Generate result by noting location, going to derived source directory, 837# running yacc, then copying the results to what is desired. 838{ 839 origin=`/bin/pwd` && $(CD) "$(1[1]:D)" && $(YACC) $(YACCFLAGS) -d "$origin/$(2)" && $(CP) y.tab.h "$(1[2])" && $(CP) y.tab.c "$(1[1])" 840} 841 842# RPCGen <proto>_xdr.c <proto>.h : <proto>.x 843# Generates RPC stubs from specifications 844# 845rule RPCGen 846{ 847 DEPENDS $(1) : $(2) ; 848} 849 850# Generate header and C code with two calls to rpcgen 851actions RPCGen 852{ 853 $(RPCGEN) $(RPCGENFLAGS) -h -o "$(1[2])" $(2:Q) 854 $(RPCGEN) $(RPCGENFLAGS) -c -o "$(1[1])" $(2:Q) 855} 856 857# Mig <file>User.c <file>.h : <file>.defs OR 858# Mig <file>Server.c <file>Server.h : <file>.defs 859# Runs mig to create client and server files from a definition file. 860rule Mig 861{ 862 DEPENDS $(1) : $(2) ; 863 if Server in $($(2)_ATTRIBUTES) { 864 Mig.server $(1) : $(2) ; 865 } 866 else { 867 Mig.client $(1) : $(2) ; 868 } 869} 870actions Mig.client 871{ 872 origin=`pwd` && $(CD) "$(1[1]:D)" && $(MIG) "$(OTHER_MIGFLAGS)" "$origin/$(2)" 873} 874actions Mig.server 875{ 876 origin=`pwd` && $(CD) "$(1[1]:D)" && $(MIG) "$(OTHER_MIGFLAGS)" -sheader "$(2:B)Server.h" "$origin/$(2)" 877} 878 879# Bridget <primary target> : <jobs file> 880rule Bridget 881{ 882 # set up common settings and paths needed for bridget usage 883 JAVA_HEADERS default = /Developer/Java/Headers /System/Library/Frameworks/JavaVM.framework/Headers ; 884 if ! $(BRIDGET_FILES_DIR) { 885 BRIDGET_FILES_DIR = $(DERIVED_FILE_DIR)$(/)JavaBridgeFiles ; 886 Mkdir $(BRIDGET_FILES_DIR) ; 887 ProductFile $(BRIDGET_FILES_DIR) ; 888 } 889 if $(BRIDGE_JAVA) = YES { 890 # produce the file list draft 891 # conditionally update the file list from the draft 892 BRIDGET_DERIVED_JAVA_FILE_LIST = $(FILE_LIST:G=BridgetDerivedJavaFileList)BridgetDerivedJavaFileList ; 893 NOTFILE $(BRIDGET_DERIVED_JAVA_FILE_LIST) ; 894 DEPENDS $(1) : $(BRIDGET_DERIVED_JAVA_FILE_LIST) ; 895 DEPENDS $(BRIDGET_DERIVED_JAVA_FILE_LIST) : $(2) ; 896 DEPENDS $(BRIDGET_DERIVED_JAVA_FILE_LIST) : $(BRIDGET_FILES_DIR) ; 897 DEPENDS $(BRIDGET_DERIVED_JAVA_FILE_LIST) : $(OBJECT_FILE_DIR) ; 898 Bridget.UpdateJavaFileList $(BRIDGET_DERIVED_JAVA_FILE_LIST) : $(2) ; 899 # derive files using file list 900 # compile derived files (nonfile target?) 901 BRIDGET_DERIVE_AND_COMPILE_JAVA_TAG = $(FILE_LIST:G=BridgetDeriveAndCompileJavaTag)BridgetDeriveAndCompileJavaTag ; 902 ProductFile $(BRIDGET_DERIVE_AND_COMPILE_JAVA_TAG) ; 903 DEPENDS $(1) : $(BRIDGET_DERIVE_AND_COMPILE_JAVA_TAG) ; 904 DEPENDS $(BRIDGET_DERIVE_AND_COMPILE_JAVA_TAG) : $(BRIDGET_DERIVED_JAVA_FILE_LIST) ; 905 DEPENDS $(BRIDGET_DERIVE_AND_COMPILE_JAVA_TAG) : $(BRIDGET_FILES_DIR) ; 906 DEPENDS $(BRIDGET_DERIVE_AND_COMPILE_JAVA_TAG) : $(CLASS_FILE_DIR) ; 907 DEPENDS $(BRIDGET_DERIVE_AND_COMPILE_JAVA_TAG) : $(2) ; 908 if $(JAVA_COMPILER:B) = jikes { 909 Bridget. DeriveAndCompileJava.jikes $(BRIDGET_DERIVE_AND_COMPILE_JAVA_TAG) : $(2) ; 910 } 911 else { 912 Bridget.DeriveAndCompileJava.javac $(BRIDGET_DERIVE_AND_COMPILE_JAVA_TAG) : $(2) ; 913 } 914 } 915 if $(BRIDGE_OBJC) = YES { 916 # Produce the derived C file list draft 917 # and conditionally update the file list from the draft. 918 BRIDGET_DERIVED_C_FILE_LIST = $(FILE_LIST:G=BridgetDerivedCFileList)BridgetDerivedCFileList ; 919 NOTFILE $(BRIDGET_DERIVED_C_FILE_LIST) ; 920 DEPENDS $(1) : $(BRIDGET_DERIVED_C_FILE_LIST) ; 921 DEPENDS $(BRIDGET_DERIVED_C_FILE_LIST) : $(2) ; 922 DEPENDS $(BRIDGET_DERIVED_C_FILE_LIST) : $(BRIDGET_FILES_DIR) ; 923 DEPENDS $(BRIDGET_DERIVED_C_FILE_LIST) : $(OBJECT_FILE_DIR) ; 924 Bridget.UpdateCFileList $(BRIDGET_DERIVED_C_FILE_LIST) : $(2) ; 925 BRIDGET_DERIVE_AND_COMPILE_C_TAG = $(FILE_LIST:G=BridgetDeriveAndCompileCTag)BridgetDeriveAndCompileCTag ; 926 ProductFile $(BRIDGET_DERIVE_AND_COMPILE_C_TAG) ; 927 DEPENDS $(1) : $(BRIDGET_DERIVE_AND_COMPILE_C_TAG) ; 928 DEPENDS $(BRIDGET_DERIVE_AND_COMPILE_C_TAG) : $(BRIDGET_DERIVED_C_FILE_LIST) ; 929 DEPENDS $(BRIDGET_DERIVE_AND_COMPILE_C_TAG) : $(BRIDGET_FILES_DIR) ; 930 DEPENDS $(BRIDGET_DERIVE_AND_COMPILE_C_TAG) : $(OBJECT_FILE_DIR) ; 931 DEPENDS $(BRIDGET_DERIVE_AND_COMPILE_C_TAG) : $(2) ; 932 # derive files using file list 933 # compile derived files (nonfile target?) 934 BRIDGET_FILE_LIST default = $(FILE_LIST)Bridget ; 935 BRIDGET_CFLAGS on $(1) = -arch $(ARCH) $(PER_ARCH_CFLAGS) -fno-common -fpascal-strings $(OPTIMIZATION_CFLAGS) $(WARNING_CFLAGS) ; 936 BRIDGET_CFLAGS on $(1) += -pipe ; 937 # seed search paths with target-wide values 938 HEADER_SEARCH_PATHS on $(1) = $(HEADER_SEARCH_PATHS) ; 939 FRAMEWORK_SEARCH_PATHS on $(1) = $(FRAMEWORK_SEARCH_PATHS) ; 940 941 # We must compile with the extension-specific build flags 942 BRIDGET_CFLAGS on $(1) += $($(2:S)_CFLAGS) ; 943 # Add debug flags, if appropriate. 944 if $(DEBUGGING_SYMBOLS) = YES { 945 BRIDGET_CFLAGS on $(1) += -g ; 946 } 947 # Add profiling flags, if appropriate. 948 if $(PROFILING_CODE) = YES { 949 BRIDGET_CFLAGS on $(1) += -pg ; 950 } 951 # Pass the trusted-precomp file name to the compiler to keep track 952 # of which precompiled headers it has already sanity checked. 953 if $(OS) in MACOS DARWIN { 954 BRIDGET_CFLAGS on $(1) += -precomp-trustfile $(PRECOMP_TRUSTFILE) ; 955 } 956 if $(CPP_HEADERMAP_FILE) { 957 BRIDGET_CFLAGS on $(1) += "-Wp,-header-mapfile,$(CPP_HEADERMAP_FILE)" ; 958 } 959 if YES in $(GENERATE_CPP_ILOG_FILES) { 960 local INCLUSION_LOG_FILE default = $(OBJECT_FILE_DIR)-$(VARIANT)$(/)$(ARCH)$(/)$(1:DB).ilog ; 961 BRIDGET_CFLAGS on $(1) += "-Wp,-inclusion-log-file,$(INCLUSION_LOG_FILE)" ; 962 } 963 if $(PREFIX_HEADER) { 964 PREFIX_HEADER_CFLAGS on $(1) += -include $(PREFIX_HEADER) ; 965 } 966 Bridget.DeriveAndCompileC $(BRIDGET_DERIVE_AND_COMPILE_C_TAG) : $(2) ; 967 } 968} 969# Bridget.UpdateJavaFileList <list update target> <bridget file> generates draft 970# and updates definitive list if it is missing or out of date 971actions Bridget.UpdateJavaFileList 972{ 973 $(BRIDGET) -listjava "-I$(BRIDGET_FILES_DIR)" "-I$(SOURCE_ROOT)" "-I$(HEADER_SEARCH_PATHS)" "-F$(FRAMEWORK_SEARCH_PATHS)" "-I$(JAVA_HEADERS_DIR)" "$(BRIDGETFLAGS)" "$(OTHER_BRIDGETFLAGS)" "$(2)" >> "$(1:G=)Draft" && \ 974 if [ ! -e "$(1:G=)" ]; then 975 cp "$(1:G=)Draft" "$(1:G=)" 976 else 977 _file_list_diffs=`diff --brief "$(1:G=)Draft" "$(1:G=)"` 978 if [ "x$_file_list_diffs" != "x" ]; then 979 cp "$(1:G=)Draft" "$(1:G=)" 980 fi 981 fi 982} 983actions Bridget.DeriveAndCompileJava.javac 984{ 985 $(BRIDGET) -java -o "$(BRIDGET_FILES_DIR)" "-I$(BRIDGET_FILES_DIR)" "-I$(SOURCE_ROOT)" "-I$(HEADER_SEARCH_PATHS)" "-F$(FRAMEWORK_SEARCH_PATHS)" "-I$(JAVA_HEADERS_DIR)" "$(BRIDGETFLAGS)" "$(OTHER_BRIDGETFLAGS)" "$(2)" && \ 986 frameworkjars="" && \ 987 for i in `echo $(JAVA_FRAMEWORK_JARS)/*.jar $(JAVA_FRAMEWORK_JARS)/*.zip ` ; do if [ -f "$i" ] ; then frameworkjars="$frameworkjars":"$i" ; fi ; done && \ 988 classpath="$(CLASS_FILE_DIR)$(LINKED_CLASS_ARCHIVES)$frameworkjars:"`$(JAVACONFIG) DefaultClasspath` && \ 989 cd "$(BRIDGET_FILES_DIR)" && \ 990 $(JAVA_COMPILER) $(JAVAC_FLAGS) -sourcepath "$(JAVA_SOURCE_PATH)" -classpath "$classpath" -d "$(CLASS_FILE_DIR)" @"$(BRIDGET_DERIVED_JAVA_FILE_LIST:G=)" && \ 991 /usr/bin/touch "$(1:G=)" 992} 993actions Bridget.DeriveAndCompileJava.jikes 994{ 995 $(BRIDGET) -java -o "$(BRIDGET_FILES_DIR)" "-I$(BRIDGET_FILES_DIR)" "-I$(SOURCE_ROOT)" "-I$(HEADER_SEARCH_PATHS)" "-F$(FRAMEWORK_SEARCH_PATHS)" "-I$(JAVA_HEADERS_DIR)" "$(BRIDGETFLAGS)" "$(OTHER_BRIDGETFLAGS)" "$(2)" && \ 996 frameworkjars="" && \ 997 for i in `echo $(JAVA_FRAMEWORK_JARS)/*.jar $(JAVA_FRAMEWORK_JARS)/*.zip ` ; do if [ -f "$i" ] ; then frameworkjars="$frameworkjars":"$i" ; fi ; done && \ 998 classpath="$(CLASS_FILE_DIR)$(LINKED_CLASS_ARCHIVES)$frameworkjars:"`$(JAVACONFIG) DefaultClasspath` && \ 999 cd "$(BRIDGET_FILES_DIR)" && \ 1000 $(JAVA_COMPILER) +E $(JAVAC_FLAGS) -classpath "$classpath" -d "$(CLASS_FILE_DIR)" `cat "$(BRIDGET_DERIVED_JAVA_FILE_LIST:G=)"` && \ 1001 /usr/bin/touch "$(1:G=)" 1002} 1003 1004# Bridget.CompileC.UpdateFileList <list update target> <bridget file> generates draft 1005# and updates definitive list if it is missing or out of date 1006actions Bridget.UpdateCFileList 1007{ 1008 $(BRIDGET) -listobjc "-I$(BRIDGET_FILES_DIR)" "-I$(SOURCE_ROOT)" "-I$(HEADER_SEARCH_PATHS)" "-F$(FRAMEWORK_SEARCH_PATHS)" "-I$(JAVA_HEADERS_DIR)" "$(BRIDGETFLAGS)" "$(OTHER_BRIDGETFLAGS)" "$(2)" >> "$(1:G=)Draft" && \ 1009 if [ ! -e "$(1:G=)" ]; then 1010 cp "$(1:G=)Draft" "$(1:G=)" 1011 else 1012 _file_list_diffs=`diff --brief "$(1:G=)Draft" "$(1:G=)"` 1013 if [ "x$_file_list_diffs" != "x" ]; then 1014 cp "$(1:G=)Draft" "$(1:G=)" 1015 fi 1016 fi 1017} 1018actions Bridget.DeriveAndCompileC 1019{ 1020 $(BRIDGET) -stub -init -o "$(BRIDGET_FILES_DIR)" "-I$(BRIDGET_FILES_DIR)" "-I$(SOURCE_ROOT)" "-I$(HEADER_SEARCH_PATHS)" "-F$(FRAMEWORK_SEARCH_PATHS)" "-I$(JAVA_HEADERS_DIR)" "$(BRIDGETFLAGS)" "$(OTHER_BRIDGETFLAGS)" "$(2)" && \ 1021 cd "$(BRIDGET_FILES_DIR)" && \ 1022 $(CC) -c $(ARCH_FLAGS) -O -fno-common -no-cpp-precomp -dynamic "$(FLAGS)" $(GLOBAL_CFLAGS) "-I$(DERIVED_PATHS)" "-I$(HEADER_SEARCH_PATHS)" "-I$(JAVA_HEADERS)" "-F$(FRAMEWORK_SEARCH_PATHS)" "-I$(TARGET_BUILD_DIR)/$(PUBLIC_HEADER_DIR:G=)" "-I$(TARGET_BUILD_DIR)/$(PRIVATE_HEADER_DIR:G=)" "$(BRIDGET_CFLAGS)" $(PREFIX_HEADER_CFLAGS) `cat "$(BRIDGET_DERIVED_C_FILE_LIST:G=)"` && \ 1023 find "$(BRIDGET_FILES_DIR)" -type f -name '*.o' -print > "$(BRIDGET_FILE_LIST:G=)" && \ 1024 /usr/bin/touch "$(1:G=)" 1025} 1026 1027# GenerateVectorLibraryIntermediates <vector stub> <vector object file> : <exports file> 1028# Generates and compiles vector stub 1029rule GenerateVectorLibraryIntermediates 1030{ 1031 DEPENDS $(1) : $(2) ; 1032 LOCATE on $(2) = $(SOURCE_ROOT) ; 1033 VECTOR_STUB on $(1) = $(VECTOR_STUB) ; 1034 VECTOR_OBJECT_FILE on $(1) = $(VECTOR_OBJECT_FILE) ; 1035 VECTOR_FRAGMENT_NAME on $(1) = $(VECTOR_FRAGMENT_NAME) ; 1036 DYLIB_INSTALLED_NAME on $(1) = $(DYLIB_INSTALLED_NAME) ; 1037 DEPENDS $(VECTOR_STUB) : $(DERIVED_FILE_DIR) ; 1038} 1039actions GenerateVectorLibraryIntermediates 1040{ 1041 $(MAKEPSEUDOLIB) $(2:Q) -p -strip -fragname $(VECTOR_FRAGMENT_NAME:Q) -vector $(VECTOR_STUB:Q) -dylibpath "$(DYLIB_INSTALLED_NAME)" 1042 $(CC) -Wa,-L -c $(ARCH_FLAGS) -O -fno-common -no-cpp-precomp -dynamic "$(FLAGS)" $(GLOBAL_CFLAGS) -o $(VECTOR_OBJECT_FILE:Q) $(VECTOR_STUB:Q) 1043} 1044 1045MASTER_INTERFACES default = /AppleInternal/Carbon/interfaces ; 1046# !!!:cmolick:20010412 Apple internal RC_ settings nonempty in offical builds 1047INTERFACER_TARGET_UPDATE default = \"$(RC_ProjectName)-$(RC_ProjectSourceVersion)~$(RC_ProjectBuildVersion)\" ; 1048 1049rule InterfacerHeaders 1050{ 1051 INTERFACER_CACHE default = $(TEMP_DIR)$(/)InterfacerCache ; 1052 local BUILD_DIR_AND_SEPARATOR = $(TARGET_BUILD_DIR)$(/) ; 1053 INTERFACER_HEADERS = $(1:G=InterfacerHeaders) ; 1054 if $(INTERFACER_TARGET_UPDATE) { 1055 INTERFACER_HEADER_OPTIONS += -externalHeader $(INTERFACER_TARGET_UPDATE) ; 1056 } 1057 FULL_PUBLIC_HEADER_DIR = $(BUILD_DIR_AND_SEPARATOR)$(PUBLIC_HEADER_DIR:G=) ; 1058 FULL_PUBLIC_HEADER_DIR on $(INTERFACER_HEADERS) = $(FULL_PUBLIC_HEADER_DIR) ; 1059 FULL_PRIVATE_HEADER_DIR = $(BUILD_DIR_AND_SEPARATOR)$(PRIVATE_HEADER_DIR:G=) ; 1060 FULL_PRIVATE_HEADER_DIR on $(INTERFACER_HEADERS) = $(FULL_PRIVATE_HEADER_DIR) ; 1061 # Create symlink to public header dir in versioned frameworks 1062 if $(PUBLIC_HEADER_LINK) 1063 && ! $(PUBLIC_HEADER_LINK) in $(PRODUCT_FILES) { 1064 SymLink $(PUBLIC_HEADER_LINK) : $(PUBLIC_HEADER_LINK_PATH) ; 1065 ProductFile $(PUBLIC_HEADER_LINK) ; 1066 if $(INSTALLED_PRODUCT_ASIDES) = YES && $(DEPLOYMENT_LOCATION) = YES { 1067 ASIDE_PUBLIC_HEADER_LINK default = $(PUBLIC_HEADER_LINK:G=aside) ; 1068 SymLink $(ASIDE_PUBLIC_HEADER_LINK) : $(PUBLIC_HEADER_LINK_PATH) ; 1069 ProductFileAside $(ASIDE_PUBLIC_HEADER_LINK) ; 1070 } 1071 NOUPDATE $(PUBLIC_HEADER_LINK) ; 1072 } 1073 # Create symlink to private header dir in versioned frameworks 1074 if $(PRIVATE_HEADER_LINK) 1075 && ! $(PRIVATE_HEADER_LINK) in $(PRODUCT_FILES) { 1076 SymLink $(PRIVATE_HEADER_LINK) : $(PRIVATE_HEADER_LINK_PATH) ; 1077 ProductFile $(PRIVATE_HEADER_LINK) ; 1078 if $(INSTALLED_PRODUCT_ASIDES) = YES && $(DEPLOYMENT_LOCATION) = YES { 1079 ASIDE_PRIVATE_HEADER_LINK default = $(PRIVATE_HEADER_LINK:G=aside) ; 1080 SymLink $(ASIDE_PRIVATE_HEADER_LINK) : $(PRIVATE_HEADER_LINK_PATH) ; 1081 ProductFileAside $(ASIDE_PRIVATE_HEADER_LINK) ; 1082 } 1083 NOUPDATE $(PRIVATE_HEADER_LINK) ; 1084 } 1085 1086 if $(_BUILD_PHASING) = YES { 1087 BUILD_PHASE_PRODUCTS += $(INTERFACER_HEADERS) ; 1088 } 1089 # Create a public header directory 1090 if ! $(PUBLIC_HEADER_DIR) in $(PRODUCT_FILES) { 1091 Mkdir $(PUBLIC_HEADER_DIR) ; 1092 ProductFile $(PUBLIC_HEADER_DIR) ; 1093 DEPENDS $(INTERFACER_HEADERS) : $(PUBLIC_HEADER_DIR) ; 1094 if $(INSTALLED_PRODUCT_ASIDES) = YES && $(DEPLOYMENT_LOCATION) = YES { 1095 ASIDE_PUBLIC_HEADER_DIR default = $(PUBLIC_HEADER_DIR:G=aside) ; 1096 Mkdir $(ASIDE_PUBLIC_HEADER_DIR) ; 1097 ProductFileAside $(ASIDE_PUBLIC_HEADER_DIR) ; 1098 } 1099 } 1100 # Create a private header directory 1101 if ! $(PRIVATE_HEADER_DIR) in $(PRODUCT_FILES) { 1102 Mkdir $(PRIVATE_HEADER_DIR) ; 1103 ProductFile $(PRIVATE_HEADER_DIR) ; 1104 DEPENDS $(INTERFACER_HEADERS) : $(PRIVATE_HEADER_DIR) ; 1105 if $(INSTALLED_PRODUCT_ASIDES) = YES && $(DEPLOYMENT_LOCATION) = YES { 1106 ASIDE_PRIVATE_HEADER_DIR default = $(PRIVATE_HEADER_DIR:G=aside) ; 1107 Mkdir $(ASIDE_PRIVATE_HEADER_DIR) ; 1108 ProductFileAside $(ASIDE_PRIVATE_HEADER_DIR) ; 1109 } 1110 } 1111 1112 # install .i files if requested 1113 if $(FRAMEWORK_INTERFACES) { 1114 INTERFACER_INSTALL_OPTIONS = -frameworkInterfaces $(SRCROOT)$(/)$(FRAMEWORK_INTERFACES)$(/) -installMasterInterfaces $(DSTROOT)/AppleInternal/Carbon/interfaces/ ; 1115 } 1116 1117 Interfacer.Headers $(INTERFACER_HEADERS) ; 1118 # Interfacer headers are required (ideally these should be phase products) 1119 DEPENDS $(1) : $(INTERFACER_HEADERS) ; 1120} 1121 1122actions Interfacer.Headers 1123{ 1124 $(INTERFACER) -masterInterfaces "$(MASTER_INTERFACES)/" -cacheFolder "$(INTERFACER_CACHE)/" $(INTERFACER_HEADER_OPTIONS) -c -rez -framework "$(1:D=:S=:G=)" -p -generated "c=$(FULL_PUBLIC_HEADER_DIR:G=)/" -generatedPriv "c=$(FULL_PRIVATE_HEADER_DIR:G=)/" -generated "rez=$(FULL_PUBLIC_HEADER_DIR:G=)/" -generatedPriv "rez=$(FULL_PRIVATE_HEADER_DIR:G=)/" $(INTERFACER_INSTALL_OPTIONS) 1125} 1126 1127rule InterfacerExportSetsAndGlue 1128{ 1129 INTERFACER_CACHE default = $(TEMP_DIR)$(/)InterfacerCache ; 1130 EXPORT_SETS_DIR default = $(DERIVED_FILE_DIR)$(/)ExportSets ; 1131 UPP_GLUE_DIR default = $(DERIVED_FILE_DIR)$(/)UPPGlue ; 1132 COMPONENT_GLUE_DIR default = $(DERIVED_FILE_DIR)$(/)ComponentGlue ; 1133 RAW_GENERATED_EXPORTS_FILE default = $(EXPORT_SETS_DIR)$(/)fw_$(PRODUCT_NAME)_X.exp ; 1134 RAW_GENERATED_PRIVATE_EXPORTS_FILE default = $(EXPORT_SETS_DIR)$(/)fw_$(PRODUCT_NAME)Priv_X.exp ; 1135 # !!!:cmolick:20000602 private exports file optional...bad depend? 1136 PROCESSED_EXPORTS_FILE default = $(DERIVED_FILE_DIR)$(/)$(PRODUCT_NAME).exp ; 1137 DEPENDS $(RAW_GENERATED_EXPORTS_FILE) : $(DERIVED_FILE_DIR) ; 1138 DEPENDS $(RAW_GENERATED_PRIVATE_EXPORTS_FILE) : $(DERIVED_FILE_DIR) ; 1139 DEPENDS $(PROCESSED_EXPORTS_FILE) : $(DERIVED_FILE_DIR) ; 1140 # object file dir needs to be in place for glue object file list 1141 # !!!:cmolick:20020105 this dependence appears superfluous 1142 # DEPENDS $(PROCESSED_EXPORTS_FILE) : $(RAW_GENERATED_EXPORTS_FILE) ; 1143 DEPENDS $(1) : $(PROCESSED_EXPORTS_FILE) ; 1144 if $(GENERATE_HEADERS) = YES { 1145 DEPENDS $(RAW_GENERATED_EXPORTS_FILE) : $(INTERFACER_HEADERS) ; 1146 DEPENDS $(PROCESSED_EXPORTS_FILE) : $(INTERFACER_HEADERS) ; 1147 } 1148 if $(_BUILD_PHASING) = YES { 1149 BUILD_PHASE_PRODUCTS += $(RAW_GENERATED_EXPORTS_FILE) $(PROCESSED_EXPORTS_FILE) ; 1150 } 1151 HEADER_SEARCH_PATHS on $(RAW_GENERATED_EXPORTS_FILE) = $(HEADER_SEARCH_PATHS) ; 1152 FRAMEWORK_SEARCH_PATHS on $(RAW_GENERATED_EXPORTS_FILE) = $(FRAMEWORK_SEARCH_PATHS) ; 1153 if $(GENERATE_COMPONENT_GLUE) = YES { 1154 INTERFACER_FLAGS += -componentGlueC ; 1155 INTERFACER_COMPONENT_GLUE_FLAGS = -generated "componentGlueC=$(COMPONENT_GLUE_DIR)/" -generatedPriv "componentGlueC=$(COMPONENT_GLUE_DIR)/" ; 1156 } 1157 for VARIANT in $(BUILD_VARIANTS) { 1158 DEPENDS $(PROCESSED_EXPORTS_FILE) : $(OBJECT_FILE_DIR_$(VARIANT)) ; 1159 } 1160 GLUE_FILE_LIST default = $(TEMP_DIR)$(/)GlueFileList ; 1161 Interfacer.RawExportSetsAndGlue $(RAW_GENERATED_EXPORTS_FILE) $(GLUE_FILE_LIST) : $(1) ; 1162 ProductFile $(RAW_GENERATED_EXPORTS_FILE) ; 1163 ProductFile $(GLUE_FILE_LIST) ; 1164 ADDITIONAL_EXPORTS_FILE on $(PROCESSED_EXPORTS_FILE) = $(ADDITIONAL_EXPORTS_FILE) ; 1165 ADDITIONAL_TRADITIONAL_EXPORTS_FILE on $(PROCESSED_EXPORTS_FILE) = $(ADDITIONAL_TRADITIONAL_EXPORTS_FILE) ; 1166 Interfacer.PrepareExportList $(PROCESSED_EXPORTS_FILE) : $(RAW_GENERATED_EXPORTS_FILE) ; 1167 ProductFile $(PROCESSED_EXPORTS_FILE) ; 1168 #!!!:cmolick:200203019 this dependence is necessary to ensure correct order 1169 DEPENDS $(PROCESSED_EXPORTS_FILE) : $(RAW_GENERATED_EXPORTS_FILE) ; 1170 EXPORTED_SYMBOLS_FILE default = $(PROCESSED_EXPORTS_FILE) ; 1171 ProcessFile $(1) : $(EXPORTED_SYMBOLS_FILE) ; 1172} 1173 1174actions Interfacer.RawExportSetsAndGlue 1175# Generates export sets and UPP glue with Interfacer, 1176# then attempts to compile UPP glue and add resulting 1177# object files to a list to use at link time. 1178{ 1179 $(INTERFACER) -masterInterfaces "$(MASTER_INTERFACES)/" -cacheFolder "$(INTERFACER_CACHE)/" -uppGlueC "$(INTERFACER_FLAGS)" -framework "$(2[1]:G=:D=:S=)" -frameworkExports -p -generated "frameworkExports=$(EXPORT_SETS_DIR)/" -generatedPriv "frameworkExports=$(EXPORT_SETS_DIR)/" -generated "uppGlueC=$(UPP_GLUE_DIR)/" -generatedPriv "uppGlueC=$(UPP_GLUE_DIR)/" $(INTERFACER_COMPONENT_GLUE_FLAGS) $(INTERFACER_INSTALL_OPTIONS) 1180 if [ -e "$(UPP_GLUE_DIR)" ]; then 1181 _upp_glue_modules=`ls "$(UPP_GLUE_DIR)"` 1182 if [ ! "$_upp_glue_modules" = x"$_upp_glue_modules" ]; then 1183 cd "$(UPP_GLUE_DIR)" 1184 for _upp_glue in *.c ; do 1185 $(CC) -c $(ARCH_FLAGS) -O -fno-common -no-cpp-precomp -dynamic -Wmost -Wno-four-char-constants -fpascal-strings -fwritable-strings -fexceptions -DCARBON_THRASH=1 -DforCarbon=1 -DACCESSORS_CALLS_ARE_FUNCTIONS=1 -DUSE_INVOKEUPP_C_GLUE=1 "$(FLAGS)" $(GLOBAL_CFLAGS) "-I$(DERIVED_PATHS)" "-I$(HEADER_SEARCH_PATHS)" "-F$(FRAMEWORK_SEARCH_PATHS)" "-I$(BUILT_PRODUCTS_DIR)/$(PUBLIC_HEADER_DIR:G=)" "-I$(BUILT_PRODUCTS_DIR)/$(PRIVATE_HEADER_DIR:G=)" $_upp_glue 1186 done 1187 find "$(UPP_GLUE_DIR)" -type f -name '*.i.o' -print > "$(GLUE_FILE_LIST)" 1188 fi 1189 fi 1190 if [ -e "$(COMPONENT_GLUE_DIR)" ]; then 1191 _component_glue_modules=`ls "$(COMPONENT_GLUE_DIR)"` 1192 if [ ! "$_component_glue_modules" = x"$_component_glue_modules" ]; then 1193 cd "$(COMPONENT_GLUE_DIR)" 1194 for _component_glue in *.c ; do 1195 $(CC) -c $(ARCH_FLAGS) -O -fno-common -no-cpp-precomp -dynamic -Wmost -Wno-four-char-constants -fpascal-strings -fwritable-strings -fexceptions -DCARBON_THRASH=1 -DforCarbon=1 -DACCESSORS_CALLS_ARE_FUNCTIONS=1 -DUSE_INVOKEUPP_C_GLUE=1 "$(FLAGS)" $(GLOBAL_CFLAGS) "-I$(DERIVED_PATHS)" "-I$(HEADER_SEARCH_PATHS)" "-F$(FRAMEWORK_SEARCH_PATHS)" "-I$(BUILT_PRODUCTS_DIR)/$(PUBLIC_HEADER_DIR:G=)" "-I$(BUILT_PRODUCTS_DIR)/$(PRIVATE_HEADER_DIR:G=)" $_component_glue 1196 done 1197 find "$(COMPONENT_GLUE_DIR)" -type f -name '*.i.o' -print >> "$(GLUE_FILE_LIST)" 1198 fi 1199 fi 1200} 1201 1202actions Interfacer.PrepareExportList 1203# Translates PEF-oriented Interfacer export list output into 1204# nmedit-compatible export lists for use with mach-o. 1205{ 1206 cat "$(EXPORT_SETS_DIR)$(/)$(PRODUCT_NAME).exp" "$(EXPORT_SETS_DIR)$(/)$(PRODUCT_NAME)Priv.exp" > $(1:Q) 1207 _additional_exports_file="$(ADDITIONAL_EXPORTS_FILE)" 1208 if [ "x$_additional_exports_file" != "x" ]; then 1209 if [ -f "$_additional_exports_file" ]; then 1210 cat "$_additional_exports_file" >> $(1:Q) 1211 fi 1212 fi 1213 _additional_traditional_exports_file="$(ADDITIONAL_TRADITIONAL_EXPORTS_FILE)" 1214 if [ "x$_additional_traditional_exports_file" != "x" ]; then 1215 if [ -f "$_additional_traditional_exports_file" ]; then 1216 cat "$_additional_traditional_exports_file" | 1217 grep -v ^\* | grep -v ^# | grep -v ^\$ | sort | uniq -u | sed -e '1,$ s/^/_/' >> "$(1)" 1218 fi 1219 fi 1220} 1221 1222 1223# Linking, class archive generation, and related operations: 1224# 1225# Variables used by linking operations: 1226# FLAGS.o of target, LDFLAGS, SECTORDER_FLAGS 1227# LIBRARY_SEARCH_PATHS, FRAMEWORK_SEARCH_PATHS, 1228# and optionally LINK_FILE_LIST and INIT_ROUTINE 1229 1230# ClassArchive <archive> : <class file dir> 1231# Generates an archive that stores class files in the given directory 1232rule ClassArchive { 1233 if $(JAVA_ARCHIVE_TYPE) = JAR { 1234 local JARFLAGS = $(JAVA_JAR_FLAGS) ; 1235 if $(JAVA_MANIFEST_FILE) { 1236 DEPENDS $(1) : $(JAVA_MANIFEST_FILE) ; 1237 JAVA_MANIFEST_FILE on $(1) = $(SOURCE_ROOT)$(/)$(JAVA_MANIFEST_FILE) ; 1238 JARFLAGS = $(JARFLAGS)m ; 1239 } 1240 JARFLAGS = $(JARFLAGS)f ; 1241 if $(JAVA_ARCHIVE_COMPRESSION) != YES { 1242 JARFLAGS = $(JARFLAGS)0 ; 1243 } 1244 JARFLAGS += -J-Dfile.encoding=UTF8 ; 1245 JARFLAGS on $(1) = $(JARFLAGS) ; 1246 CLASS_FILE_DIR on $(1) = $(CLASS_FILE_DIR) ; 1247 ClassArchive.jarArchive $(1) : $(2) ; 1248 } 1249 else { 1250 if $(JAVA_ARCHIVE_TYPE) = ZIP { 1251 local ZIPFLAGS = $(JAVA_ZIP_FLAGS) ; 1252 if $(JAVA_ARCHIVE_COMPRESSION) != YES { 1253 ZIPFLAGS = $(ZIPFLAGS)0 ; 1254 } 1255 ZIPFLAGS on $(1) = $(ZIPFLAGS) ; 1256 CLASS_FILE_DIR on $(1) = $(CLASS_FILE_DIR) ; 1257 ClassArchive.zipArchive $(1) : $(2) ; 1258 } 1259 } 1260} 1261# Use jar command to generate an archive 1262# from the class file list after removing "./" from each file path 1263actions ClassArchive.jarArchive { 1264 cd $(2:Q) && $(MKDIR) -p $(1:DQ) && $(JAR) $(JARFLAGS:Q) "$(OTHER_JARFLAGS)" $(JAVA_MANIFEST_FILE:Q) $(1:Q) . 1265} 1266# Use zip command to generate an archive 1267# from the class file list after removing "./" from each file path 1268actions ClassArchive.zipArchive { 1269 cd $(2:Q) && $(MKDIR) -p $(1:DQ) && $(ZIP) $(ZIPFLAGS:Q) "$(OTHER_ZIPFLAGS)" $(1:Q) . 1270} 1271 1272# Unarchive <location> : <archive> 1273rule Unarchive 1274{ 1275 _DESTINATION_DIR = $(1:G=) ; 1276 if ! $(_DESTINATION_DIR) in $(PRODUCT_FILES) { 1277 Mkdir $(_DESTINATION_DIR) ; 1278 ProductFile $(_DESTINATION_DIR) ; 1279 } 1280 DEPENDS $(1) : $(_DESTINATION_DIR) ; 1281 DEPENDS $(1) : $(2) ; 1282 switch $(2:S) { 1283 case ".jar" : UnarchiveJar $(1) : $(2) ; 1284 case ".zip" : UnarchiveZip $(1) : $(2) ; 1285 } 1286} 1287 1288# we use unzip to unarchive jars since it's much faster than jar, and we can exclude the manifest file 1289actions UnarchiveJar 1290{ 1291 $(UNZIP) -oq $(2:Q) -x META-INF/MANIFEST.MF -d $(1:G=:Q) 1292} 1293 1294actions UnarchiveZip 1295{ 1296 $(UNZIP) -oq $(2:Q) -d $(1:G=:Q) 1297} 1298 1299# ProcessSingleObjectLink <executable> : <inputs> : <rule> 1300# Calls link rule which then calls ProcessLink 1301# in order to generate a master object file 1302# which is also used for symbol editing 1303rule ProcessSingleObjectLink 1304{ 1305 local OTHER_LINKED_FILES ; 1306 # Master object file kept in other directory to avoid name conflict 1307 1308 MASTER_OBJECT_FILE_$(VARIANT) default = $(OBJECT_FILE_DIR_$(VARIANT))$(/)ProjectBuilderMasterObjectFile.o ; 1309 NonObjectFiles OTHER_LINKED_FILES : $(LINKED_FILES_$(VARIANT)) ; 1310 MasterObjectFile $(MASTER_OBJECT_FILE_$(VARIANT)) : $(OBJECT_FILES_$(VARIANT)) : $(EXPORTED_SYMBOLS_FILE) ; 1311 if $(OTHER_LINKED_FILES) = "" { 1312 OTHER_LINKED_FILES = $(MASTER_OBJECT_FILE_$(VARIANT)) ; 1313 } 1314 else { 1315 OTHER_LINKED_FILES += $(MASTER_OBJECT_FILE_$(VARIANT)) ; 1316 } 1317 if $(VECTOR_OBJECT_FILE) { 1318 OTHER_LINKED_FILES += $(VECTOR_OBJECT_FILE) ; 1319 } 1320 $(3) $(INNER_PRODUCT_$(VARIANT)) : $(OTHER_LINKED_FILES) ; 1321} 1322 1323# ProcessLinkWithArchitectureSpecificEditing <executable> : <inputs> : <rule> 1324# !!!:cmolick:20021115 arch-specific editing is no longer used because symbols should uniform on all architectures 1325rule ProcessLinkWithArchitectureSpecificEditing 1326{ 1327 for ARCH in $(ARCHS) { 1328 MASTER_OBJECT_FILE_$(ARCH)_$(VARIANT) default = $(OBJECT_FILE_DIR_$(VARIANT))$(/)ProjectBuilderMasterObjectFile$(ARCH).o ; 1329 MasterObjectFile $(MASTER_OBJECT_FILE_$(ARCH)_$(VARIANT)) : $(OBJECT_FILES_$(ARCH)_$(VARIANT)) : $(EXPORTED_SYMBOLS_FILE_$(ARCH)) ; 1330 } 1331 NonObjectFiles OTHER_LINKED_FILES : $(LINKED_FILES_$(VARIANT)) ; 1332 for ARCH in $(ARCHS) { 1333 if $(OTHER_LINKED_FILES) = "" { 1334 OTHER_LINKED_FILES = $(MASTER_OBJECT_FILE_$(ARCH)_$(VARIANT)) ; 1335 } 1336 else { 1337 OTHER_LINKED_FILES += $(MASTER_OBJECT_FILE_$(ARCH)_$(VARIANT)) ; 1338 } 1339 } 1340 if $(VECTOR_OBJECT_FILE) { 1341 OTHER_LINKED_FILES += $(VECTOR_OBJECT_FILE) ; 1342 } 1343 $(3) $(INNER_PRODUCT_$(VARIANT)) : $(OTHER_LINKED_FILES) ; 1344} 1345 1346# ProcessLink <executable> : <inputs> : <rule> 1347# Processes <inputs> into <rule>.ARGUMENTS for later use by the <rule> rule 1348# where <inputs> are object files, libraries, frameworks, object file lists, 1349# and such and where <rule> is one of StaticLibrary, DynamicLibrary, or 1350# StandaloneExecutable. 1351rule ProcessLink 1352{ 1353 local RULE = $(3) ; 1354 # Link as standalone executable unless another rule is specified 1355 RULE default = StandaloneExecutable ; 1356 # Set rule-specific flags such as StandaloneExecutable.FILELIST_FLAG 1357 # and store the values in local variables 1358 local FILELIST_FLAG = $($(RULE).FILELIST_FLAG:G=) ; 1359 local LIBRARY_FLAG = $($(RULE).LIBRARY_FLAG:G=) ; 1360 local FRAMEWORK_FLAG = $($(RULE).FRAMEWORK_FLAG:G=) ; 1361 local FILELIST_NOSPACE = $($(RULE).FILELIST_FLAG:G) ; 1362 local LIBRARY_NOSPACE = $($(RULE).LIBRARY_FLAG:G) ; 1363 local FRAMEWORK_NOSPACE = $($(RULE).FRAMEWORK_FLAG:G) ; 1364 local BATCH_OFILES = $($(RULE).BATCH_OFILES) ; 1365 # The product depends on all of the input files, although 1366 # library and framework references may not be resolvable. 1367 DEPENDS $(1) : $(2) ; 1368 # link depends on file list 1369 LINK_FILE_LIST_$(VARIANT) = $(FILE_LIST_$(VARIANT)) ; 1370 DEPENDS $(1) : $(LINK_FILE_LIST_$(VARIANT)) ; 1371 # Deal with each input file in turn 1372 local LINKED ; 1373 local ARGUMENT ; 1374 for LINKED in $(2) { 1375 $(RULE).FILES$(LINKED:S) on $(1) += $(LINKED) ; 1376 switch $(LINKED:BS) { 1377 case *.o : 1378 # If $(BATCH_OFILES) is true then object file lists are generated. 1379 if $(BATCH_OFILES) != NO { 1380 ClearFileList $(LINK_FILE_LIST_$(VARIANT)) ; 1381 AppendToFileList $(LINK_FILE_LIST_$(VARIANT)) : $(LINKED) ; 1382 DEPENDS $(LINK_FILE_LIST_$(VARIANT)) : $(LINKED) ; 1383 } else { 1384 $(RULE).ARGUMENTS on $(1) += $(LINKED) ; 1385 } 1386 case *.objects : 1387 if $(FILELIST_NOSPACE) { 1388 ARGUMENT = $(FILELIST_FLAG)$(LINKED) ; 1389 NOTFILE $(ARGUMENT) ; 1390 } else { 1391 NOTFILE $(FILELIST_FLAG) ; 1392 ARGUMENT = $(FILELIST_FLAG) $(LINKED) ; 1393 } 1394 $(RULE).ARGUMENTS on $(1) += $(ARGUMENT) ; 1395 case lib*.a : 1396 if $(LIBRARY_FLAG) { 1397 LINKED = $(LINKED:A) ; 1398 } 1399 NOCARE $(LINKED) ; 1400 if $(LIBRARY_NOSPACE) { 1401 ARGUMENT = $(LIBRARY_FLAG)$(LINKED) ; 1402 } else { 1403 ARGUMENT = $(LIBRARY_FLAG) $(LINKED) ; 1404 } 1405 $(RULE).ARGUMENTS on $(1) += $(ARGUMENT) ; 1406 NOTFILE $(ARGUMENT) ; 1407 case *.lib : 1408 NOCARE $(LINKED) ; 1409 if $(LIBRARY_FLAG) { 1410 if $(LIBRARY_NOSPACE) { 1411 ARGUMENT = $(LIBRARY_FLAG)$(LINKED:A) ; 1412 } else { 1413 ARGUMENT = $(LIBRARY_FLAG) $(LINKED:A) ; 1414 } 1415 $(RULE).ARGUMENTS on $(1) += $(ARGUMENT) ; 1416 NOTFILE $(ARGUMENT) ; 1417 } else { 1418 ECHO jam: warning: For target $(1), rule $(RULE) will ignore $(LINKED) ; 1419 } 1420 case *.dylib : 1421 NOCARE $(LINKED) ; 1422 if $(LIBRARY_FLAG) { 1423 if $(LIBRARY_NOSPACE) { 1424 ARGUMENT = $(LIBRARY_FLAG)$(LINKED:A) ; 1425 } else { 1426 ARGUMENT = $(LIBRARY_FLAG) $(LINKED:A) ; 1427 } 1428 $(RULE).ARGUMENTS on $(1) += $(ARGUMENT) ; 1429 NOTFILE $(ARGUMENT) ; 1430 } else { 1431 ECHO jam: warning: For target $(1), rule $(RULE) will ignore $(LINKED) ; 1432 } 1433 case *.framework : 1434 NOCARE $(LINKED) ; 1435 if $(FRAMEWORK_FLAG) { 1436 if $(FRAMEWORK_NOSPACE) { 1437 ARGUMENT = $(FRAMEWORK_FLAG)$(LINKED:B) ; 1438 } else { 1439 ARGUMENT = $(FRAMEWORK_FLAG) $(LINKED:B) ; 1440 } 1441 $(RULE).ARGUMENTS on $(1) += $(ARGUMENT) ; 1442 NOTFILE $(ARGUMENT) ; 1443 } else { 1444 ECHO jam: warning: For target $(1), rule $(RULE) will ignore $(LINKED) ; 1445 } 1446 case *.jar : 1447 # silently ignore Java archives since they are valid, but not used for native linking 1448 case *.zip : 1449 # silently ignore Java archives since they are valid, but not used for native linking 1450 case * : 1451 ECHO Warning: $(RULE): Unknown extension on "$(LINKED:BS)" when linking with $(RULE) ; 1452 } 1453 } 1454 # include any object files compiled from objc generated with bridget 1455 if $(BRIDGET_FILE_LIST) { 1456 AppendFileToFileList $(LINK_FILE_LIST_$(VARIANT)) : $(BRIDGET_FILE_LIST) ; 1457 } 1458 if $(BATCH_OFILES) != NO { 1459 $(RULE).LinkUsingFileList $(1) : $(LINK_FILE_LIST_$(VARIANT)) ; 1460 } 1461 else { 1462 $(RULE).Link $(1) ; 1463 } 1464} 1465 1466actions quietly together piecemeal ClearFileList 1467{ 1468 $(RM) -rf "$(1)" 1469} 1470 1471actions quietly together piecemeal AppendToFileList 1472{ 1473 for file_reference in "$(2)" 1474 do 1475 $(ECHO) "$file_reference" >> "$(1)" 1476 done 1477} 1478 1479actions quietly together piecemeal AppendFileToFileList 1480{ 1481 cat "$(2)" >> "$(1)" 1482} 1483 1484# StaticLibrary <library> : <inputs> 1485# Stores <inputs> in <library> where <inputs> are object files, 1486# libraries, frameworks, object file lists, and such 1487rule StaticLibrary 1488{ 1489 LIBRARY_SEARCH_PATHS on $(1) = $(LIBRARY_SEARCH_PATHS) ; 1490 ProcessLink $(1) : $(2) : StaticLibrary ; 1491 FLAGS.o on $(1) = $(LDFLAGS) $(SECTORDER_FLAGS) ; 1492} 1493actions together StaticLibrary 1494{ 1495} 1496actions quietly together piecemeal StaticLibrary.Link bind StaticLibrary.ARGUMENTS 1497{ 1498 ( $(LIBTOOL) -o $(1:Q) $(2:Q) "-L$(LIBRARY_SEARCH_PATHS)" "$(StaticLibrary.ARGUMENTS)" "$(FLAGS.o)" $(INSTALLED_NAME_FLAG) && $(RANLIB) $(1:Q) ) 1499} 1500actions quietly together piecemeal StaticLibrary.LinkUsingFileList bind StaticLibrary.ARGUMENTS 1501{ 1502 ( $(LIBTOOL) -o $(1:Q) "-L$(LIBRARY_SEARCH_PATHS)" -filelist $(2:Q) "$(StaticLibrary.ARGUMENTS)" "$(FLAGS.o)" $(INSTALLED_NAME_FLAG) && $(RANLIB) $(1:Q) ) 1503} 1504StaticLibrary.FRAMEWORK_FLAG = ; 1505StaticLibrary.LIBRARY_FLAG = ; 1506StaticLibrary.BATCH_OFILES default = YES ; 1507 1508# StandaloneExecutable <executable> : <inputs> 1509# Links <inputs> to produce <executable>, where <inputs> are objects, 1510# libraries, frameworks, and such. 1511rule StandaloneExecutable 1512{ 1513 ProcessLink $(1) : $(2) ; 1514 FRAMEWORK_SEARCH_PATHS on $(1) = $(FRAMEWORK_SEARCH_PATHS) ; 1515 LIBRARY_SEARCH_PATHS on $(1) = $(LIBRARY_SEARCH_PATHS) ; 1516 FLAGS.o on $(1) = $(ARCH_FLAGS) $(LDFLAGS) $(SECTORDER_FLAGS) ; 1517 if $(INIT_ROUTINE) { 1518 FLAGS.o on $(1) += -init $(INIT_ROUTINE) ; 1519 } 1520} 1521StandaloneExecutable.FILELIST_FLAG = -filelist ; 1522StandaloneExecutable.FRAMEWORK_FLAG = -framework ; 1523StandaloneExecutable.LIBRARY_FLAG = <nospace>-l ; 1524StandaloneExecutable.BATCH_OFILES default = YES ; 1525actions together StandaloneExecutable 1526{ 1527} 1528actions quietly together StandaloneExecutable.Link bind StandaloneExecutable.ARGUMENTS 1529{ 1530 $(_LD_FOR_LINKING) -o $(1:Q) "-L$(LIBRARY_SEARCH_PATHS)" "-F$(FRAMEWORK_SEARCH_PATHS)" "$(FLAGS.o)" $(INSTALLED_NAME_FLAG) "$(StandaloneExecutable.ARGUMENTS)" 1531} 1532actions quietly together StandaloneExecutable.LinkUsingFileList bind StandaloneExecutable.ARGUMENTS 1533{ 1534 $(_LD_FOR_LINKING) -o $(1:Q) "-L$(LIBRARY_SEARCH_PATHS)" "-F$(FRAMEWORK_SEARCH_PATHS)" -filelist $(2:Q) "$(FLAGS.o)" $(INSTALLED_NAME_FLAG) "$(StandaloneExecutable.ARGUMENTS)" 1535} 1536 1537 1538# DynamicLibrary <library> : <objects> : <libraries> 1539# Links <objects> and <libraries> to produce <library>, using $(FLAGS.o) 1540rule DynamicLibrary 1541{ 1542 LIBRARY_SEARCH_PATHS on $(1) = $(LIBRARY_SEARCH_PATHS) ; 1543 FRAMEWORK_SEARCH_PATHS on $(1) = $(FRAMEWORK_SEARCH_PATHS) ; 1544 ProcessLink $(1) : $(2) : DynamicLibrary ; 1545 FLAGS.o on $(1) = $(ARCH_FLAGS) $(LDFLAGS) $(SECTORDER_FLAGS) ; 1546 if $(INIT_ROUTINE) { 1547 FLAGS.o on $(1) += -init $(INIT_ROUTINE) ; 1548 } 1549} 1550actions together DynamicLibrary 1551{ 1552} 1553actions quietly together DynamicLibrary.Link bind DynamicLibrary.ARGUMENTS DynamicLibrary.DEFFILE 1554{ 1555 $(_LD_FOR_LINKING) -o $(1:Q) $(DynamicLibrary.DEFFILE_FLAG)"$(DynamicLibrary.DEFFILE)" "-L$(LIBRARY_SEARCH_PATHS)" "-F$(FRAMEWORK_SEARCH_PATHS)" "$(DynamicLibrary.ARGUMENTS)" "$(FLAGS.o)" $(INSTALLED_NAME_FLAG) 1556} 1557actions quietly together DynamicLibrary.LinkUsingFileList bind DynamicLibrary.ARGUMENTS DynamicLibrary.DEFFILE 1558{ 1559 $(_LD_FOR_LINKING) -o $(1:Q) $(DynamicLibrary.DEFFILE_FLAG)"$(DynamicLibrary.DEFFILE)" "-L$(LIBRARY_SEARCH_PATHS)" "-F$(FRAMEWORK_SEARCH_PATHS)" -filelist $(2:Q) "$(DynamicLibrary.ARGUMENTS)" "$(FLAGS.o)" $(INSTALLED_NAME_FLAG) 1560} 1561DynamicLibrary.DEFFILE_FLAG = "-Xlinker -DEF:" ; 1562DynamicLibrary.FILELIST_FLAG = -filelist ; 1563DynamicLibrary.FRAMEWORK_FLAG = -framework ; 1564DynamicLibrary.LIBRARY_FLAG = <nospace>-l ; 1565DynamicLibrary.BATCH_OFILES default = YES ; 1566 1567# MasterObjectFile <master object file> : <object files> : <exports file> : [<arch>] 1568# Merges many object files into one in order to edit 1569# the list of exported symbols 1570rule MasterObjectFile 1571{ 1572 local OBJECT_FILE ; 1573 if $(4) { 1574 LINK_FILE_LIST_$(VARIANT) = $(FILE_LIST_$(VARIANT))Prelink_$(4) ; 1575 } 1576 else { 1577 LINK_FILE_LIST_$(VARIANT) = $(FILE_LIST_$(VARIANT))Prelink ; 1578 } 1579 # object files must be present before master can be assembled 1580 DEPENDS $(1) : $(2) ; 1581 # list object files in a file to limit link line length 1582 DEPENDS $(1) : $(LINK_FILE_LIST_$(VARIANT)) ; 1583 ClearFileList $(LINK_FILE_LIST_$(VARIANT)) ; 1584 for LINKED in $(2) { 1585 AppendToFileList $(LINK_FILE_LIST_$(VARIANT)) : $(LINKED) ; 1586 DEPENDS $(LINK_FILE_LIST_$(VARIANT)) : $(LINKED) ; 1587 } 1588 if $(KEEP_PRIVATE_EXTERNS) != NO { 1589 KEEP_PRIVATE_EXTERNS_FLAG on $(1) = -keep_private_externs ; 1590 } 1591 if $(GLUE_FILE_LIST) { 1592 DEPENDS $(LINK_FILE_LIST_$(VARIANT)) : $(GLUE_FILE_LIST) ; 1593 AppendFileToFileList $(LINK_FILE_LIST_$(VARIANT)) : $(GLUE_FILE_LIST) ; 1594 } 1595 PRELINK_FLAGS on $(1) = $(PRELINK_FLAGS) ; 1596 PRELINK_LIBS on $(1) = $(PRELINK_LIBS) ; 1597 # !!!:cmolick:20021021 provide an optional way for the target to depend on the PRELINK_LIBS? 1598 if $(_BUILD_PHASING) = YES { 1599 BUILD_PHASE_PRODUCTS += $(1) ; 1600 } 1601 MasterObjectFile.Combine $(1) : $(LINK_FILE_LIST_$(VARIANT)) ; 1602 if $(3) { 1603 INCLUDES $(1) : $(3) ; 1604 MasterObjectFile.EditExports $(1) : $(3) ; 1605 } 1606} 1607actions MasterObjectFile.Combine 1608{ 1609 $(_LD_FOR_LINKING) $(ARCH_FLAGS) $(KEEP_PRIVATE_EXTERNS_FLAG) $(GLOBAL_CFLAGS) -L$(LIBRARY_SEARCH_PATHS:Q) -F$(FRAMEWORK_SEARCH_PATHS:Q) $(PRELINK_FLAGS:Q) $(WARNING_LDFLAGS) -nostdlib -filelist $(2:Q) -r -o $(1:Q) $(PRELINK_LIBS:Q) 1610} 1611actions MasterObjectFile.EditExports 1612{ 1613 $(NMEDIT) -s $(2:Q) $(1:Q) -o $(1:Q) 1614} 1615 1616# EditSymbols <binary> : <symbols file> 1617# !!!:cmolick:20021022 rule for invoking nmedit needed until exported symbols flags available for linker 1618rule EditSymbols 1619{ 1620 DEPENDS $(1) : $(2) ; 1621} 1622actions EditSymbols 1623{ 1624 $(NMEDIT) -s $(2:Q) $(1:Q) -o $(1:Q) 1625} 1626 1627# Ranlib <library> 1628# Ranlib for static library 1629actions Ranlib 1630{ 1631 $(RANLIB) $(1:Q) 1632} 1633 1634# VersioningSystem_next-cvs <product> 1635# Handles automatic generation of CVSVersionInfo.txt file for projects that use NeXT CVS-style versioning. 1636rule VersioningSystem_next-cvs 1637{ 1638 local VERSION_INFO_FILE ; 1639 VERSION_INFO_FILE default = $(1:B)_vers.c ; 1640 # Make sure that the C file containing the version string gets created. 1641 VersioningSystem_next-cvs.Create $(VERSION_INFO_FILE) : $(1:B) ; 1642 DerivedFiles $(VERSION_INFO_FILE) ; 1643 SUPPRESS_PREFIX_HEADER = YES ; 1644 ProcessFile $(1) : $(VERSION_INFO_FILE) ; 1645 SUPPRESS_PREFIX_HEADER = NO ; 1646 1647 # Set up default values for the variables. 1648 CVS_VERS_FILE default = CVSVersionInfo.txt ; 1649} 1650rule VersioningSystem_next-cvs.Create 1651{ 1652 DEPENDS $(1) : $(CVS_VERS_FILE) ; 1653} 1654actions VersioningSystem_next-cvs.Create 1655{ 1656 versFile="$(CVS_VERS_FILE)" 1657 awk=/usr/bin/awk 1658 user=`$awk '/\\$\Id:/ {print $7;}' $versFile` 1659 timestamp=`$awk '/\\$\Id:/ {print $5 " " $6;}' $versFile` 1660 fileVers=`$awk '/\\$\Id:/ {print $4;}' $versFile` 1661 name=`$awk '/^ProjectName:/ {print $2;}' $versFile` 1662 tag=`$awk '/\\$\Name:/ {print $3;}' $versFile` 1663 versNum=`$awk '/^ProjectVersion:/ {print $2;}' $versFile` 1664 proj="$(2:B)" 1665 clean_proj_name=`echo $proj | sed 's/[^0-9A-Za-z]/_/g'` 1666 # the keyword name is the current tag and only gets filled in if the files are extracted at 1667 # that tag. If the tag has a value, then it is a released version, if the tag is '$' then 1668 # it has no value and is a development version. 1669 case $tag in '$') vers="$versNum.dev";; *) vers=$versNum;; esac 1670 q='"' 1671 vers_str="Project:$proj Version:$vers (Checkpoint by:$user on:$timestamp revision:$fileVers)" 1672 vers_suffix="$(CURRENT_PROJECT_VERSION_SUFFIX)" 1673 echo "const char "$clean_proj_name"_VERS_STRING[] = $q@(#)$vers_str$q;" > "$(1)" 1674 echo "const char "$clean_proj_name"_VERS_NUM[] = $q$vers$vers_suffix$q;" >> "$(1)" 1675} 1676 1677# VersioningSystem_apple-generic <product> 1678# Generates <product>_vers.c to define version symbol 1679rule VersioningSystem_apple-generic 1680{ 1681 # Set values to use 1682 local VERSION_INFO_FILE ; 1683 VERSION_INFO_FILE default = $(1:B)_vers.c ; 1684 1685 # variables used need to be defined on the version info file target 1686 CURRENT_PROJECT_VERSION on $(VERSION_INFO_FILE) = $(CURRENT_PROJECT_VERSION) ; 1687 VERSION_INFO_EXPORT_DECL on $(VERSION_INFO_FILE) default = $(VERSION_INFO_EXPORT_DECL) ; 1688 VERSION_INFO_PREFIX on $(VERSION_INFO_FILE) default = $(VERSION_INFO_PREFIX) ; 1689 VERSION_INFO_SUFFIX on $(VERSION_INFO_FILE) default = $(VERSION_INFO_SUFFIX) ; 1690 VERSION_INFO_BUILDER on $(VERSION_INFO_FILE) default = $(USER) ; 1691 1692 # Create versioning code 1693 VersioningSystem_apple-generic.Create $(VERSION_INFO_FILE) : $(1) ; 1694 DerivedFiles $(VERSION_INFO_FILE) ; 1695 SUPPRESS_PREFIX_HEADER = YES ; 1696 ProcessFile $(1) : $(VERSION_INFO_FILE) ; 1697 SUPPRESS_PREFIX_HEADER = NO ; 1698} 1699actions VersioningSystem_apple-generic.Create 1700{ 1701 raw_project_name=$(PROJECT:Q) 1702 project_name=`echo $raw_project_name | sed 's/[^0-9A-Za-z]/_/g'` 1703 raw_target_name=$(2:BQ) 1704 target_name=`echo $raw_target_name | sed 's/[^0-9A-Za-z]/_/g'` 1705 project_vers="$(CURRENT_PROJECT_VERSION)" 1706 vers_info_export_decl="$(VERSION_INFO_EXPORT_DECL)" 1707 vers_info_prefix="$(VERSION_INFO_PREFIX)" 1708 vers_info_suffix="$(VERSION_INFO_SUFFIX)" 1709 vers_info_builder="$(VERSION_INFO_BUILDER)" 1710 echo ${vers_info_export_decl} " const unsigned char ${vers_info_prefix}${target_name}VersionString${vers_info_suffix}[] = \"@(#)PROGRAM:${target_name} PROJECT:${project_name}-${project_vers} DEVELOPER:${vers_info_builder} BUILT:\" __DATE__ \" \" __TIME__ \"\n\";" > "$(1)" 1711 echo ${vers_info_export_decl} " const double ${vers_info_prefix}${target_name}VersionNumber${vers_info_suffix} = (double)${project_vers};" >> $(1:Q) 1712} 1713 1714# KernelModuleGeneratedSource 1715# Creates a kernel module source stub based on the values 1716# of MODULE_VERSION, MODULE_START, and MODULE_STOP 1717rule KernelModuleGeneratedSource 1718{ 1719 MODULE_INFO_FILE_$(VARIANT) default = $(1:B)_info.c ; 1720 DerivedFiles $(MODULE_INFO_FILE_$(VARIANT)) ; 1721 DEPENDS $(MODULE_INFO_FILE_$(VARIANT)) : $(MODULE_INFO_PLIST) ; 1722 MODULE_VERSION on $(MODULE_INFO_FILE_$(VARIANT)) = $(MODULE_VERSION) ; 1723 MODULE_NAME on $(MODULE_INFO_FILE_$(VARIANT)) = $(MODULE_NAME) ; 1724 if $(MODULE_IOKIT) = "YES" { 1725 MODULE_START on $(MODULE_INFO_FILE_$(VARIANT)) = 0 ; 1726 MODULE_STOP on $(MODULE_INFO_FILE_$(VARIANT)) = 0 ; 1727 } 1728 else { 1729 if $(MODULE_START) = "" { 1730 MODULE_START on $(MODULE_INFO_FILE_$(VARIANT)) = 0 ; 1731 } else { 1732 MODULE_START on $(MODULE_INFO_FILE_$(VARIANT)) = $(MODULE_START) ; 1733 } 1734 if $(MODULE_STOP) = "" { 1735 MODULE_STOP on $(MODULE_INFO_FILE_$(VARIANT)) = 0 ; 1736 } else { 1737 MODULE_STOP on $(MODULE_INFO_FILE_$(VARIANT)) = $(MODULE_STOP) ; 1738 } 1739 } 1740 KernelModuleGeneratedSource.Create $(MODULE_INFO_FILE_$(VARIANT)) ; 1741 SUPPRESS_PREFIX_HEADER = YES ; 1742 ProcessFile $(1) : $(MODULE_INFO_FILE_$(VARIANT)) ; 1743 SUPPRESS_PREFIX_HEADER = NO ; 1744} 1745actions KernelModuleGeneratedSource.Create 1746{ 1747 /bin/echo "#include <mach/mach_types.h>" > $(1:Q) 1748 /bin/echo " " >> $(1:Q) 1749 /bin/echo "extern kern_return_t _start(kmod_info_t *ki, void *data);" >> $(1:Q) 1750 /bin/echo "extern kern_return_t _stop(kmod_info_t *ki, void *data);" >> $(1:Q) 1751 if [ $(MODULE_START) != 0 ]; then 1752 /bin/echo "__private_extern__ kern_return_t $(MODULE_START)(kmod_info_t *ki, void *data);" >> $(1:Q) 1753 fi 1754 if [ $(MODULE_STOP) != 0 ]; then 1755 /bin/echo "__private_extern__ kern_return_t $(MODULE_STOP)(kmod_info_t *ki, void *data);" >> $(1:Q) 1756 fi 1757 /bin/echo " " >> $(1:Q) 1758 /bin/echo "KMOD_EXPLICIT_DECL($(MODULE_NAME), \"$(MODULE_VERSION)\", _start, _stop)" >> $(1:Q) 1759 /bin/echo "__private_extern__ kmod_start_func_t *_realmain = $(MODULE_START);" >> $(1:Q) 1760 /bin/echo "__private_extern__ kmod_stop_func_t *_antimain = $(MODULE_STOP);" >> $(1:Q) 1761 /bin/echo "__private_extern__ int _kext_apple_cc = __APPLE_CC__ ;" >> $(1:Q) 1762} 1763 1764# GenerateFrameworkStub <framework stub> 1765# Invokes a custom tool to generate a Mach-O framework executable stub at the specified path 1766# Also be sure to the FRAMEWORK_INSTALL_NAME variable on the <framework stub> 1767actions GenerateFrameworkStub 1768{ 1769 $(MKDIR) -p $(DERIVED_FILE_DIR:Q) 1770 dummy_class_name=`echo -n $(1:B) | tr -c '[:alnum:]' '_'` 1771 $(ECHO) "@interface NSFramework_${dummy_class_name}" > $(DERIVED_FILE_DIR:Q)/framework_stub.m 1772 $(ECHO) "@end" >> $(DERIVED_FILE_DIR:Q)/framework_stub.m 1773 $(ECHO) "@implementation NSFramework_${dummy_class_name}" >> $(DERIVED_FILE_DIR:Q)/framework_stub.m 1774 $(ECHO) "@end" >> $(DERIVED_FILE_DIR:Q)/framework_stub.m 1775 $(CC) -c $(DERIVED_FILE_DIR:Q)/framework_stub.m $(ARCH_FLAGS) -o $(DERIVED_FILE_DIR:Q)/framework_stub.o 1776 $(_LD_FOR_LINKING) $(ARCH_FLAGS) -dynamiclib $(INSTALLED_NAME_FLAG) $(DYLIB_VERSION_FLAGS:Q) -L$(LIBRARY_SEARCH_PATHS:Q) -F$(FRAMEWORK_SEARCH_PATHS:Q) $(DynamicLibrary.ARGUMENTS:Q) $(DERIVED_FILE_DIR:Q)/framework_stub.o -o $(1:Q) 1777 $(STRIP) $(STRIPFLAGS:Q) $(1:Q) 1778} 1779# Copyright (c) 1999-2003 Apple Computer, Inc. 1780# All rights reserved. 1781 1782# Define reasonable base locations, to be overridden by default 1783 1784# Build intermediates go into TEMP_ROOT which defaults to 1785# build/intermediates in current directory, or OBJROOT if defined 1786TEMP_ROOT default = $(OBJROOT) ; 1787 1788# Builds go into the BUILD_ROOT which defaults to 1789# build/products in current directory, or SYMROOT if defined 1790BUILD_ROOT default = $(SYMROOT) ; 1791 1792# Installation root defaults to root, or DSTROOT if defined 1793INSTALL_ROOT default = $(DSTROOT) ; 1794 1795# Set initial values for installation information and framework version 1796_BUILD_PHASING default = YES ; 1797export INSTALL_OWNER default = $(USER) ; 1798export INSTALL_GROUP default = $(GROUP) ; 1799export FRAMEWORK_VERSION default = "A" ; 1800REMOVE_CVS_FROM_RESOURCES default = YES ; 1801COPY_PHASE_STRIP default = NO ; 1802PREBINDING default = YES ; 1803SET_DIR_MODE_OWNER_GROUP default = YES ; 1804SET_FILE_MODE_OWNER_GROUP default = NO ; 1805 1806# Set initial optimization level, debug, and profile settings 1807export OPTIMIZATION_LEVEL default = 0 ; 1808export DEBUGGING_SYMBOLS default = YES ; 1809export PROFILING_CODE default = NO ; 1810 1811# Default linker warnings 1812WARNING_LDFLAGS default = -Wl,-no_arch_warnings ; 1813 1814# Default settings for Java builds 1815JAVA_ARCHIVE_CLASSES default = YES ; 1816JAVA_ARCHIVE_TYPE default = JAR ; 1817JAVA_APP_STUB default = /System/Library/Frameworks/JavaVM.framework/Resources/MacOS/JavaApplicationStub ; 1818JAVA_JAR_FLAGS default = cv ; 1819JAVA_SOURCE_SUBDIR default = . ; 1820JAVA_FRAMEWORK_RESOURCES_DIRS default = Resources ; 1821export JAVA_FRAMEWORK_JARS default = ; 1822JAVA_USE_DEPENDENCIES default = YES ; 1823JAVA_ZIP_FLAGS default = -urg ; 1824 1825JAVA_COMPILER_DEBUGGING_SYMBOLS default = YES ; 1826JAVA_COMPILER_DISABLE_WARNINGS default = NO ; 1827JAVA_COMPILER_DEPRECATED_WARNINGS default = NO ; 1828 1829# These default flags probably shouldn't be overridden by users. 1830JAVAC_DEFAULT_FLAGS default = -J-Xms64m -J-XX:NewSize=4M -J-Dfile.encoding=UTF8 ; 1831JIKES_DEFAULT_FLAGS default = +E +OLDCSO ; 1832 1833# Default variants and flags 1834BUILD_VARIANTS default = normal ; 1835_BUILD_PHASES = ; 1836 1837# BeginProduct <product> 1838# 1839# Initializes the directory and file list variables 1840# 1841# Variable references: 1842# BUILD_ROOT Base directory for builds 1843# TARGET_NAME Name of the target that builds this product 1844# PRODUCT_NAME Name of the product that's built 1845# TEMP_ROOT Base directory for intermediates 1846# BASE_PROJECT_HEADER_DIR Base directory for project headers 1847# HEADER_SUBDIRECTORY Path prefix in header #include lines 1848# INSTALL_ROOT Base directory for installations 1849# INSTALL_PATH Subdirectory where product is installed 1850# PUBLIC_HEADER_DIR Location for public headers 1851# 1852# Variables set: 1853# HEADER_SUBDIRECTORY Base product name 1854# BUILD_COMPONENTS List may include: headers, build, source 1855# OPTIMIZATION_CFLAGS Optimization flags for C compiles 1856# OTHER_CPLUSPLUSFLAGS C++ flags default to C values 1857# WARNING_CPLUSPLUSFLAGS 1858# INCLUDED_ARCHS Architectures intended for this build 1859# NATIVE_ARCH Architecture of the build machine 1860# ARCHS Architectures used for this build 1861# ARCH_FLAGS Architecture flags used for most tools 1862# SOURCE_DIR 1863# BUILD_DIR Target-specific directory for builds 1864# TEMP_DIR For target-specific intermediates 1865# PROJECT_HEADER_DIR Project header file directory in $(TEMP_DIR) 1866# OBJECT_FILE_DIR Object file directory in $(TEMP_DIR) 1867# CLASS_FILE_DIR Class file directory in $(TEMP_DIR) 1868# FILE_LIST Base name for lists of files generated 1869# DERIVED_FILE_DIR Derived source directory in $(TEMP_DIR) 1870# INSTALL_DIR Directory in $(INSTALL_ROOT) for installations 1871# HEADER_SEARCH_PATHS Project header directories prepended 1872# FRAMEWORK_SEARCH_PATHS Product build root appended 1873# DERIVED_FILES Initialized empty 1874# OBJECT_FILES Initialized empty 1875# LINKED_FILES Initialized empty 1876# PRODUCT_FILES Initialized empty 1877# PRECOMP_TRUSTFILE List of trusted precompiled headers 1878# 1879rule BeginProduct 1880{ 1881 # target representing the build must be a nonfile pseudotarget 1882 NOTFILE $(1) ; 1883 1884 # define the header subdirectory early since we'll use it to 1885 # compute the project header directory 1886 HEADER_SUBDIRECTORY = $(1:B) ; 1887 1888 # the following sequence of tests sets up CC, CPLUSPLUS, LD, and LDPLUSPLUS appropriately, 1889 # depending on whether we're using GCC 2.95.2, 3.1, or 3.3 (either explicitly or implicitly) 1890 1891 # a hack to detect attempt to use GCC 3, and to set the 'GCC_VERSION' build setting accordingly 1892 if $(USE_GCC3) = YES || $(USE_GCC2) = NO || $(CC) = "/usr/bin/gcc3" { 1893 # use either the default gcc version if available or default to 3.1 1894 if $(_DEFAULT_GCC_VERSION) = 3.1 || $(_DEFAULT_GCC_VERSION) = 3.3 { 1895 GCC_VERSION default = $(_DEFAULT_GCC_VERSION) ; 1896 } 1897 else { 1898 GCC_VERSION default = 3.1 ; 1899 } 1900 } 1901 else if $(USE_GCC2) = YES || $(USE_GCC3) = NO || $(CC) = "/usr/bin/gcc2" { 1902 GCC_VERSION default = 2.x ; 1903 } 1904 else { 1905 if $(_DEFAULT_GCC_VERSION) = 3.1 || $(_DEFAULT_GCC_VERSION) = 3.3 { 1906 GCC_VERSION default = $(_DEFAULT_GCC_VERSION) ; 1907 } 1908 else if $(_DEFAULT_GCC_VERSION) = 2.95.2 { 1909 GCC_VERSION default = 2.x ; 1910 } 1911 else { 1912 GCC_VERSION default = unknown ; 1913 } 1914 } 1915 1916 # set up CC, CPLUSPLUS, LD, and LDPLUSPLUS appropriately (this logic is temporary, and is 1917 # expected to be phased out once we have per-build-phase compiler choices) 1918 if $(GCC_VERSION) = 3.3 { 1919 CC default = /usr/bin/gcc-3.3 ; 1920 CPLUSPLUS default = /usr/bin/g++-3.3 ; 1921 } 1922 else if $(GCC_VERSION) = 3.1 { 1923 CC default = /usr/bin/gcc3 ; 1924 CPLUSPLUS default = /usr/bin/g++3 ; 1925 } 1926 else if $(GCC_VERSION) = 2.x { 1927 CC default = /usr/bin/gcc2 ; 1928 CPLUSPLUS default = /usr/bin/g++2 ; 1929 } 1930 else { 1931 CC default = /usr/bin/cc ; 1932 CPLUSPLUS default = /usr/bin/c++ ; 1933 } 1934 LD default = $(CC) ; 1935 LDPLUSPLUS default = $(CPLUSPLUS) ; 1936 _LD_FOR_LINKING = $(LD) ; # this might get reset to $(LDPLUSPLUS) in the CompileCplusplus rule 1937 1938 # Set reasonable optimization flags for installs if not already set 1939 OPTIMIZATION_CFLAGS default = -Os ; 1940 # precompiled header, C++, Assembly, and Fortran options match C options by default 1941 OTHER_PRECOMP_CPLUSPLUSFLAGS default = $(OTHER_PRECOMP_CFLAGS) ; 1942 OTHER_CPLUSPLUSFLAGS default = $(OTHER_CFLAGS) ; 1943 WARNING_CPLUSPLUSFLAGS default = $(WARNING_CFLAGS) ; 1944 OTHER_ASFLAGS default = $(OTHER_CFLAGS) ; 1945 WARNING_ASFLAGS default = $(WARNING_CFLAGS) ; 1946 OTHER_FFLAGS default = $(OTHER_CFLAGS) ; 1947 WARNING_FFLAGS default = $(WARNING_CFLAGS) ; 1948 # Variant flags and suffixes 1949 for VARIANT in $(BUILD_VARIANTS) { 1950 if $(VARIANT) = profile { 1951 OTHER_CFLAGS_$(VARIANT) default = $(OTHER_CFLAGS) -pg ; 1952 OTHER_ASFLAGS_$(VARIANT) default = $(OTHER_CFLAGS) -pg ; 1953 OTHER_CPLUSPLUSFLAGS_$(VARIANT) default = $(OTHER_CPLUSPLUSFLAGS) -pg ; 1954 OTHER_LDFLAGS_$(VARIANT) default = $(OTHER_LDFLAGS) -pg ; 1955 } 1956 else { 1957 OTHER_CFLAGS_$(VARIANT) default = $(OTHER_CFLAGS) ; 1958 OTHER_ASFLAGS_$(VARIANT) default = $(OTHER_CFLAGS) ; 1959 OTHER_CPLUSPLUSFLAGS_$(VARIANT) default = $(OTHER_CPLUSPLUSFLAGS) ; 1960 OTHER_LDFLAGS_$(VARIANT) default = $(OTHER_LDFLAGS) ; 1961 } 1962 if $(VARIANT) = normal { 1963 VARIANT_SUFFIX_$(VARIANT) = "" ; 1964 } 1965 else { 1966 VARIANT_SUFFIX_$(VARIANT) = _$(VARIANT) ; 1967 } 1968 } 1969 # Set up architecture options for product 1970 INCLUDED_ARCHS default = $(SUPPORTED_ARCHITECTURES) ; 1971 SUPPORTED_ARCHITECTURE_FLAGS = ; 1972 ARCHS = ; 1973 for SUPPORTED_ARCHITECTURE in $(SUPPORTED_ARCHITECTURES) { 1974 if $($(SUPPORTED_ARCHITECTURE)) = YES 1975 && ( $(SUPPORTED_ARCHITECTURE) in $(INCLUDED_ARCHS) ) 1976 && ( $(SUPPORTED_ARCHITECTURE) in $(VALID_ARCHS) ) { 1977 SUPPORTED_ARCHITECTURE_FLAGS += -arch $(SUPPORTED_ARCHITECTURE) ; 1978 ARCHS += $(SUPPORTED_ARCHITECTURE) ; 1979 } 1980 } 1981 # if somehow no architecture was found, then use the native architecture 1982 if ! $(ARCHS) { 1983 $(NATIVE_ARCH) = YES ; 1984 RC_$(NATIVE_ARCH) = YES ; 1985 SUPPORTED_ARCHITECTURE_FLAGS += -arch $(NATIVE_ARCH) ; 1986 ARCHS += $(NATIVE_ARCH) ; 1987 } 1988 1989 ARCH_FLAGS default = $(SUPPORTED_ARCHITECTURE_FLAGS) ; 1990 # Initialize the directory variables 1991 # SOURCE_DIR is the location of installed sources 1992 SOURCE_DIR default = $(INSTALL_ROOT) ; 1993 BUILD_DIR default = $(BUILD_ROOT) ; 1994 # create base build dir 1995 Mkdir $(BUILD_DIR) ; 1996 ProductFile $(BUILD_DIR) ; 1997 # create active build dir 1998 if $(TARGET_BUILD_DIR) && ($(TARGET_BUILD_DIR) != $(BUILD_DIR)) { 1999 Mkdir $(TARGET_BUILD_DIR) ; 2000 } 2001 # asides 2002 if $(INSTALLED_PRODUCT_ASIDES) = YES && $(DEPLOYMENT_LOCATION) = YES { 2003 SEPARATE_STRIP = YES ; 2004 ASIDE_DIR default = $(BUILD_ROOT) ; 2005 Mkdir $(ASIDE_DIR) ; 2006 ProductFile $(ASIDE_DIR) ; 2007 } 2008 # define other important locations 2009 TEMP_DIR default = $(TEMP_ROOT)$(/)$(PROJECT_NAME).build$(/)$(TARGET_NAME).build ; 2010 OBJECT_FILE_DIR default = $(TEMP_DIR)$(/)Objects ; 2011 export CLASS_FILE_DIR default = $(TEMP_DIR)$(/)JavaClasses ; 2012 for VARIANT in $(BUILD_VARIANTS) { 2013 OBJECT_FILE_DIR_$(VARIANT) default = $(OBJECT_FILE_DIR)-$(VARIANT) ; 2014 FILE_LIST_$(VARIANT) default = $(OBJECT_FILE_DIR_$(VARIANT))$(/)LinkFileList ; 2015 # initialize file lists 2016 OBJECT_FILES_$(VARIANT) = ; 2017 LINKED_FILES_$(VARIANT) = ; 2018 } 2019 if $(JAVA_ARCHIVE_CLASSES) != YES && ( $(PRODUCT_TYPE) = Tool || $(PRODUCT_TYPE) = Library ) { 2020 export PRODUCT_CLASS_FILE_DIR default = $(TARGET_BUILD_DIR)$(/)$(PRODUCT_NAME) ; 2021 } 2022 DERIVED_FILE_DIR default = $(TEMP_DIR)$(/)DerivedSources ; 2023 if $(INSTALL_PATH) { 2024 INSTALL_DIR default = $(INSTALL_ROOT)$(/)$(INSTALL_PATH) ; 2025 } 2026 else { 2027 INSTALL_DIR default = $(INSTALL_ROOT) ; 2028 } 2029 # Initialize the search paths 2030 if $(TARGET_BUILD_DIR) != $(BUILD_DIR) { 2031 HEADER_SEARCH_PATHS = $(TARGET_BUILD_DIR)$(/)include $(BUILD_DIR)$(/)include $(HEADER_SEARCH_PATHS) ; 2032 } 2033 else { 2034 HEADER_SEARCH_PATHS = $(BUILD_DIR)$(/)include $(HEADER_SEARCH_PATHS) ; 2035 } 2036 FRAMEWORK_SEARCH_PATHS = $(BUILD_ROOT) $(FRAMEWORK_SEARCH_PATHS) ; 2037 REZ_SEARCH_PATHS default = $(BUILT_PRODUCTS_DIR) $(HEADER_SEARCH_PATHS) ; 2038 LIBRARY_SEARCH_PATHS = $(BUILD_ROOT) $(LIBRARY_SEARCH_PATHS) ; 2039 if $(DEPLOYMENT_LOCATION) = YES && $(BUILT_PRODUCTS_DIR) { 2040 HEADER_SEARCH_PATHS = $(BUILT_PRODUCTS_DIR)$(/)include $(HEADER_SEARCH_PATHS) ; 2041 FRAMEWORK_SEARCH_PATHS = $(BUILT_PRODUCTS_DIR) $(FRAMEWORK_SEARCH_PATHS) ; 2042 LIBRARY_SEARCH_PATHS = $(BUILT_PRODUCTS_DIR) $(LIBRARY_SEARCH_PATHS) ; 2043 } 2044 # Initialize the file lists 2045 DERIVED_FILES = ; 2046 DERIVED_FILE_SOURCES = ; 2047 PRODUCT_FILES = ; 2048 PRECOMP_TRUSTFILE default = $(TEMP_DIR)$(/)TrustedPrecomps.txt ; 2049 # Make symlink to product in products dir, 2050 # and also set product mode and ownership 2051 # unless there is no nonempty product name. 2052 if $(DEPLOYMENT_LOCATION) = YES { 2053 if $(WRAPPER) 2054 && $(PRODUCT_TYPE) != Tool 2055 && $(PRODUCT_TYPE) != Library { 2056 # Use WRAPPER when defined for bundle product 2057 _INSTALLED_PRODUCT = $(TARGET_BUILD_DIR)$(/)$(WRAPPER) ; 2058 _PRODUCT_REFERENCE default = $(BUILT_PRODUCTS_DIR:G=ProductRef)$(/)$(WRAPPER) ; 2059 #!!!:cmolick:20020517:this may be bad for non-deployment location 2060 if $(DEPLOYMENT_POSTPROCESSING) = YES { 2061 SetModeOwnerAndGroup $(_INSTALLED_PRODUCT:G=ModeOwnerGroup) : $(_INSTALLED_PRODUCT) ; 2062 } 2063 SymLink $(_PRODUCT_REFERENCE) : $(_INSTALLED_PRODUCT) ; 2064 DEPENDS $(_PRODUCT_REFERENCE) : $(BUILT_PRODUCTS_DIR) ; 2065 DEPENDS $(1) : $(_PRODUCT_REFERENCE) ; 2066 } 2067 else { 2068 if $(1:G=) { 2069 # Use nonempty, ungristed primary target for tool or library product 2070 _INSTALLED_PRODUCT = $(TARGET_BUILD_DIR)$(/)$(1:G=) ; 2071 _PRODUCT_REFERENCE default = $(BUILT_PRODUCTS_DIR:G=ProductRef)$(/)$(1:G=) ; 2072 SymLink $(_PRODUCT_REFERENCE) : $(_INSTALLED_PRODUCT) ; 2073 DEPENDS $(_PRODUCT_REFERENCE) : $(BUILT_PRODUCTS_DIR) ; 2074 DEPENDS $(1) : $(_PRODUCT_REFERENCE) ; 2075 } 2076 } 2077 } 2078 # Set default locations for headers and resources of simple (tool or library) products 2079 if $(PRODUCT_TYPE) = Tool || $(PRODUCT_TYPE) = Library { 2080 PUBLIC_HEADER_DIR default = $(TARGET_BUILD_DIR) ; 2081 PRIVATE_HEADER_DIR default = $(TARGET_BUILD_DIR) ; 2082 RESOURCE_DIR default = $(TARGET_BUILD_DIR) ; 2083 } 2084 # Run the hack script to build debug and profile variants, if appropriate. 2085 if $(INTERNAL_BUILD_VARIANTS) 2086 && ( $(RC_JASPER) || $(INTERNAL_BUILD_VARIANTS_ONLY_IN_JASPER) != YES ) 2087 && ( $(ACTION) = build || $(ACTION) = install ) { 2088 # build variants list should be used only by this call in this case 2089 _INTERNAL_BUILD_VARIANTS = $(INTERNAL_BUILD_VARIANTS) ; 2090 INTERNAL_BUILD_VARIANTS = ; 2091 INTERNAL_BUILD_VARIANTS on $(1) = $(_INTERNAL_BUILD_VARIANTS) ; 2092 RunVariantHackScript $(1) ; 2093 } 2094} 2095 2096# EndProduct <product> 2097# 2098# Creates BUILD_DIR, OBJECT_FILE_DIR, CLASS_FILE_DIR, DERIVED_FILE_DIR, 2099# and the PROJECT_HEADER_DIR if necessary, then sets up the build action. 2100rule EndProduct 2101{ 2102 # Create required directories. This is done here to allow 2103 # variables to be overridden before this rule is evaluated. 2104 for VARIANT in $(BUILD_VARIANTS) { 2105 Mkdir $(OBJECT_FILE_DIR_$(VARIANT)) ; 2106 PRODUCT_FILES += $(OBJECT_FILE_DIR_$(VARIANT)) ; 2107 DEPENDS $(1) : $(OBJECT_FILE_DIR_$(VARIANT)) ; 2108 } 2109 if $(DEPLOYMENT_LOCATION) { 2110 Mkdir $(BUILT_PRODUCTS_DIR) ; 2111 PRODUCT_FILES += $(BUILT_PRODUCTS_DIR) ; 2112 DEPENDS $(1) : $(BUILT_PRODUCTS_DIR) ; 2113 } 2114 Mkdir $(CLASS_FILE_DIR) ; 2115 PRODUCT_FILES += $(CLASS_FILE_DIR) ; 2116 DEPENDS $(1) : $(CLASS_FILE_DIR) ; 2117 Mkdir $(DERIVED_FILE_DIR) ; 2118 PRODUCT_FILES += $(DERIVED_FILE_DIR) ; 2119 DEPENDS $(1) : $(DERIVED_FILE_DIR) ; 2120 # Set up post-phase processing 2121 if $(POST_PHASE_PRODUCTS) { 2122 DEPENDS $(1) : $(POST_PHASE_PRODUCTS) ; 2123 DEPENDS $(POST_PHASE_PRODUCTS) : $(_BUILD_PHASES) ; 2124 } 2125 # Alternative catch-all mechanism to set mode and ownership of files 2126 # that for some reason require this post build processing. 2127 # !!!:cmolick:20021025 skip this if action is installhdrs since 2128 # it is not relevant in that case and might even be impossible 2129 if ( $(DEPLOYMENT_POSTPROCESSING) = YES && $(_INSTALLED_PRODUCT) ) { 2130 DEPENDS $(_INSTALLED_PRODUCT:G=ModeOwnerGroup) : $(PRODUCT_FILES) ; 2131 } 2132 if $(DEPLOYMENT_POSTPROCESSING) = YES && $(ACTION) != installhdrs { 2133 PREVIOUS_PERMISSIONS_TARGET = ; 2134 for ALTERNATE_PERMISSIONS_FILE in $(ALTERNATE_PERMISSIONS_FILES) { 2135 ALTERNATE_PERMISSIONS_FILE_PATH = $(INSTALL_DIR)$(/)$(ALTERNATE_PERMISSIONS_FILE) ; 2136 ALTERNATE_PERMISSIONS_TARGET = $(ALTERNATE_PERMISSIONS_FILE:G=AlternatePermissions) ; 2137 if $(PREVIOUS_PERMISSIONS_TARGET) { 2138 DEPENDS $(ALTERNATE_PERMISSIONS_TARGET) : $(PREVIOUS_PERMISSIONS_TARGET) ; 2139 } 2140 else { 2141 if ( $(DEPLOYMENT_POSTPROCESSING) = YES && $(_INSTALLED_PRODUCT) ) { 2142 DEPENDS $(ALTERNATE_PERMISSIONS_TARGET) : $(_INSTALLED_PRODUCT:G=ModeOwnerGroup) ; 2143 } 2144 } 2145 NOTFILE $(ALTERNATE_PERMISSIONS_TARGET) ; 2146 DEPENDS $(1) : $(ALTERNATE_PERMISSIONS_TARGET) ; 2147 DEPENDS $(ALTERNATE_PERMISSIONS_TARGET) : $(_BUILD_PHASES) ; 2148 if $(ALTERNATE_MODE) { 2149 INSTALL_MODE_FLAG on $(ALTERNATE_PERMISSIONS_TARGET) = $(ALTERNATE_MODE) ; 2150 } 2151 if $(ALTERNATE_OWNER) { 2152 INSTALL_OWNER on $(ALTERNATE_PERMISSIONS_TARGET) = $(ALTERNATE_OWNER) ; 2153 } 2154 if $(ALTERNATE_GROUP) { 2155 INSTALL_GROUP on $(ALTERNATE_PERMISSIONS_TARGET) = $(ALTERNATE_GROUP) ; 2156 } 2157 SetModeOwnerAndGroup $(ALTERNATE_PERMISSIONS_TARGET) : $(ALTERNATE_PERMISSIONS_FILE_PATH) ; 2158 PREVIOUS_PERMISSIONS_TARGET = $(ALTERNATE_PERMISSIONS_TARGET) ; 2159 } 2160 } 2161 # Define actions for this target 2162 Actions $(1) ; 2163} 2164 2165# BeginWrappedProduct <product> 2166# 2167# Sets additional variables required for wrapped products, 2168# primarily to assign locations within the product wrapper. 2169# WRAPPER Local convenience variable 2170# WRAPPER_SUFFIX Based on WRAPPER_EXTENSION by default 2171# RESOURCE_DIR Base bundle resources location 2172# APPLESCRIPTS_DIR Compiled AppleScript files folder 2173# [PUBLIC|PRIVATE]_HEADER_[DIR|LINK|LINK_PATH] Header folders 2174# CURRENT_VERSION_[DIR|LINK|LINK_PATH] 2175# HEADERDOC_DIR Headerdoc output folder 2176# PRODUCT_CLASS_FILE_DIR Defined if JAVA_ARCHIVE_CLASSES is set 2177# 2178rule BeginWrappedProduct 2179{ 2180 # define wrapper using appropriate extension and suffix 2181 if $(WRAPPER_EXTENSION) { 2182 WRAPPER_SUFFIX = .$(WRAPPER_EXTENSION) ; 2183 } 2184 if $(WRAPPER_SUFFIX) { 2185 WRAPPER = $(1:G=:S=$(WRAPPER_SUFFIX)) ; 2186 } 2187 else { 2188 WRAPPER = $(1:G=) ; 2189 } 2190 # set up the basic product variables 2191 BeginProduct $(1) ; 2192 # define and create wrapper and make primary nonfile target depend on it 2193 LOCATE on $(WRAPPER) = $(TARGET_BUILD_DIR) ; 2194 Mkdir $(WRAPPER) ; 2195 PRODUCT_FILES += $(WRAPPER) ; 2196 DEPENDS $(1) : $(WRAPPER) ; 2197 if $(PRODUCT_TYPE) = Application { 2198 # Application wrappers 2199 if $(PURE_JAVA) = YES { 2200 RESOURCE_DIR default = $(WRAPPER) ; 2201 } 2202 else { 2203 RESOURCE_DIR default = $(WRAPPER)$(/)Contents$(/)Resources ; 2204 } 2205 LOCATE on $(RESOURCE_DIR) = $(TARGET_BUILD_DIR) ; 2206 RESOURCE_LINK = "" ; 2207 APPLESCRIPTS_DIR default = $(RESOURCE_DIR)$(/)Scripts ; 2208 LOCATE on $(APPLESCRIPTS_DIR) = $(TARGET_BUILD_DIR) ; 2209 PUBLIC_HEADER_DIR default = $(WRAPPER)$(/)"Contents"$(/)Headers ; 2210 LOCATE on $(PUBLIC_HEADER_DIR) = $(TARGET_BUILD_DIR) ; 2211 PUBLIC_HEADER_LINK default = "" ; 2212 PRIVATE_HEADER_DIR default = $(WRAPPER)$(/)"Contents"$(/)PrivateHeaders ; 2213 LOCATE on $(PRIVATE_HEADER_DIR) = $(TARGET_BUILD_DIR) ; 2214 PRIVATE_HEADER_LINK default = "" ; 2215 CURRENT_VERSION_DIR default = "" ; 2216 CURRENT_VERSION_LINK default = "" ; 2217 } # application wrappers 2218 else if $(PRODUCT_TYPE) = Framework { 2219 # Framework wrappers 2220 RESOURCE_DIR default = $(WRAPPER)$(/)Versions$(/)$(FRAMEWORK_VERSION)$(/)Resources ; 2221 LOCATE on $(RESOURCE_DIR) = $(TARGET_BUILD_DIR) ; 2222 RESOURCE_LINK default = $(WRAPPER)$(/)Resources ; 2223 LOCATE on $(RESOURCE_LINK) = $(TARGET_BUILD_DIR) ; 2224 RESOURCE_LINK_PATH default = Versions$(/)Current$(/)Resources ; 2225 APPLESCRIPTS_DIR default = $(RESOURCE_DIR)$(/)Scripts ; 2226 LOCATE on $(APPLESCRIPTS_DIR) = $(TARGET_BUILD_DIR) ; 2227 HAS_PUBLIC_HEADERS = "NO" ; 2228 PUBLIC_HEADER_DIR default = $(WRAPPER)$(/)Versions$(/)$(FRAMEWORK_VERSION)$(/)Headers ; 2229 LOCATE on $(PUBLIC_HEADER_DIR) = $(TARGET_BUILD_DIR) ; 2230 PUBLIC_HEADER_LINK default = $(WRAPPER)$(/)Headers ; 2231 LOCATE on $(PUBLIC_HEADER_LINK) = $(TARGET_BUILD_DIR) ; 2232 PUBLIC_HEADER_LINK_PATH default = Versions$(/)Current$(/)Headers ; 2233 PRIVATE_HEADER_DIR default = $(WRAPPER)$(/)Versions$(/)$(FRAMEWORK_VERSION)$(/)PrivateHeaders ; 2234 LOCATE on $(PRIVATE_HEADER_DIR) = $(TARGET_BUILD_DIR) ; 2235 PRIVATE_HEADER_LINK default = $(WRAPPER)$(/)PrivateHeaders ; 2236 LOCATE on $(PRIVATE_HEADER_LINK) = $(TARGET_BUILD_DIR) ; 2237 PRIVATE_HEADER_LINK_PATH default = Versions$(/)Current$(/)PrivateHeaders ; 2238 CURRENT_VERSION_DIR default = $(WRAPPER:G=)$(/)Versions$(/)$(FRAMEWORK_VERSION) ; 2239 LOCATE on $(CURRENT_VERSION_DIR) = $(TARGET_BUILD_DIR) ; 2240 CURRENT_VERSION_LINK default = $(WRAPPER:G=)$(/)Versions$(/)Current ; 2241 LOCATE on $(CURRENT_VERSION_LINK) = $(TARGET_BUILD_DIR) ; 2242 CURRENT_VERSION_LINK_PATH default = Versions$(/)Current ; 2243 if $(ASIDE_DIR) { 2244 ASIDE_CURRENT_VERSION_DIR default = $(WRAPPER:G=aside)$(/)Versions$(/)$(FRAMEWORK_VERSION) ; 2245 ASIDE_CURRENT_VERSION_LINK default = $(WRAPPER:G=aside)$(/)Versions$(/)Current ; 2246 ASIDE_CURRENT_VERSION_LINK_PATH default = Versions$(/)Current ; 2247 ASIDE_CURRENT_VERSION_LINK_PATH = $(ASIDE_CURRENT_VERSION_LINK_PATH:G=aside) ; 2248 Mkdir $(ASIDE_CURRENT_VERSION_DIR) ; 2249 ProductFileAside $(ASIDE_CURRENT_VERSION_DIR) ; 2250 DEPENDS $(1) : $(ASIDE_CURRENT_VERSION_DIR) ; 2251 NOUPDATE $(ASIDE_CURRENT_VERSION_DIR) ; 2252 SymLink $(ASIDE_CURRENT_VERSION_LINK) : $(FRAMEWORK_VERSION) ; 2253 ProductFileAside $(ASIDE_CURRENT_VERSION_LINK) ; 2254 DEPENDS $(1) : $(ASIDE_CURRENT_VERSION_LINK) ; 2255 DEPENDS $(ASIDE_CURRENT_VERSION_LINK) : $(ASIDE_CURRENT_VERSION_DIR) ; 2256 NOUPDATE $(ASIDE_CURRENT_VERSION_LINK) ; 2257 } 2258 # Create current version directory and link now because 2259 # they are implicit and needed by almost everything else: 2260 # Current version dir 2261 Mkdir $(CURRENT_VERSION_DIR) ; 2262 ProductFile $(CURRENT_VERSION_DIR) ; 2263 DEPENDS $(1) : $(CURRENT_VERSION_DIR) ; # need this or build phase 2264 NOUPDATE $(CURRENT_VERSION_DIR) ; 2265 # Current version link 2266 SymLink $(CURRENT_VERSION_LINK) : $(FRAMEWORK_VERSION) ; 2267 ProductFile $(CURRENT_VERSION_LINK) ; 2268 DEPENDS $(1) : $(CURRENT_VERSION_LINK) ; # need this or build phase 2269 DEPENDS $(CURRENT_VERSION_LINK) : $(CURRENT_VERSION_DIR) ; 2270 NOUPDATE $(CURRENT_VERSION_LINK) ; 2271 } # framework wrappers 2272 else { 2273 # Default bundle wrappers 2274 if $(BUNDLE_STYLE) = SHALLOW { 2275 # shallow bundles do not have the Contents/Resources folders 2276 RESOURCE_DIR default = $(WRAPPER) ; 2277 LOCATE on $(RESOURCE_DIR) = $(TARGET_BUILD_DIR) ; 2278 APPLESCRIPTS_DIR default = $(WRAPPER)$(/)Scripts ; 2279 LOCATE on $(APPLESCRIPTS_DIR) = $(TARGET_BUILD_DIR) ; 2280 PUBLIC_HEADER_DIR default = $(WRAPPER)$(/)Headers ; 2281 LOCATE on $(PUBLIC_HEADER_DIR) = $(TARGET_BUILD_DIR) ; 2282 PRIVATE_HEADER_DIR default = $(WRAPPER)$(/)PrivateHeaders ; 2283 LOCATE on $(PRIVATE_HEADER_DIR) = $(TARGET_BUILD_DIR) ; 2284 } 2285 else { 2286 # else, BUNDLE_STYLE=DEEP bundles do have Contents/Resources folders 2287 RESOURCE_DIR default = $(WRAPPER)$(/)Contents$(/)Resources ; 2288 LOCATE on $(RESOURCE_DIR) = $(TARGET_BUILD_DIR) ; 2289 APPLESCRIPTS_DIR default = $(RESOURCE_DIR)$(/)Scripts ; 2290 LOCATE on $(APPLESCRIPTS_DIR) = $(TARGET_BUILD_DIR) ; 2291 PUBLIC_HEADER_DIR default = $(WRAPPER)$(/)Contents$(/)Headers ; 2292 LOCATE on $(PUBLIC_HEADER_DIR) = $(TARGET_BUILD_DIR) ; 2293 PRIVATE_HEADER_DIR default = $(WRAPPER)$(/)Contents$(/)PrivateHeaders ; 2294 LOCATE on $(PRIVATE_HEADER_DIR) = $(TARGET_BUILD_DIR) ; 2295 } 2296 RESOURCE_LINK default = "" ; 2297 PUBLIC_HEADER_LINK default = "" ; 2298 PRIVATE_HEADER_LINK default = "" ; 2299 CURRENT_VERSION_DIR default = "" ; 2300 CURRENT_VERSION_LINK default = "" ; 2301 } # all bundle layouts 2302 # define location for optional header documentation generation 2303 if $(GENERATE_HEADERDOC) = YES && $(RESOURCE_DIR) { 2304 HEADERDOC_DIR default = $(TARGET_BUILD_DIR)$(/)$(RESOURCE_DIR)$(/)Documentation ; 2305 Mkdir $(HEADERDOC_DIR) ; 2306 ProductFile $(HEADERDOC_DIR) ; 2307 } 2308 2309 # wrapped products may define a location for unarchived classes 2310 if $(JAVA_ARCHIVE_CLASSES) != YES { 2311 export PRODUCT_CLASS_FILE_DIR default = $(TARGET_BUILD_DIR)$(/)$(RESOURCE_DIR)$(/)Java ; 2312 } 2313} 2314 2315# EndWrappedProduct <product> 2316# 2317# Sets up additional dependence related to object files. 2318# Files depended on by object files should be in compile rules, 2319# and dependence on object files should be in link rules. 2320rule EndWrappedProduct 2321{ 2322 # Wrapper touch updates base container directory timestamp 2323 # This must be conditional on the "build" component, 2324 # otherwize installhdrs builds with no headers will fail. 2325 if build in $(BUILD_COMPONENTS) { 2326 WRAPPER_TOUCH = $(1:G=Touch) ; 2327 LOCATE on $(WRAPPER_TOUCH) = $(TARGET_BUILD_DIR) ; 2328 DEPENDS $(WRAPPER_TOUCH) : $(BUILD_PHASE) ; 2329 DEPENDS $(1) : $(WRAPPER_TOUCH) ; 2330 Touch $(WRAPPER_TOUCH) ; 2331 } 2332 # wrapper logic complete, now handle final build issues 2333 EndProduct $(1) ; 2334} 2335# Copyright (c) 1999-2003 Apple Computer, Inc. 2336# All rights reserved. 2337 2338# Rules for target types include Begin and End rules 2339# for Tool, Library, Bundle, Application, and Framework 2340 2341TOOL_SUFFIX default = "" ; 2342rule BeginTool 2343{ 2344 export PRODUCT_TYPE = Tool ; 2345 BeginProduct $(1) ; 2346} 2347 2348rule EndTool 2349{ 2350 EndProduct $(1) ; 2351} 2352 2353# Library variable names have the form: $(OS)_$(LIBRARY_STYLE)_LIBRARY_$(VARIABLENAME) 2354MACOS_STATIC_LIBRARY_PREFIX = lib ; 2355MACOS_STATIC_LIBRARY_SUFFIX = .a ; 2356MACOS_DYNAMIC_LIBRARY_PREFIX = "" ; 2357MACOS_DYNAMIC_LIBRARY_SUFFIX = "" ; 2358DARWIN_STATIC_LIBRARY_PREFIX = lib ; 2359DARWIN_STATIC_LIBRARY_SUFFIX = .a ; 2360DARWIN_DYNAMIC_LIBRARY_PREFIX = "" ; 2361DARWIN_DYNAMIC_LIBRARY_SUFFIX = "" ; 2362DYNAMIC_LIBRARY_PREFIX = $($(OS)_DYNAMIC_LIBRARY_PREFIX) ; 2363DYNAMIC_LIBRARY_SUFFIX = $($(OS)_DYNAMIC_LIBRARY_SUFFIX) ; 2364 2365rule BeginLibrary 2366{ 2367 # These evaluations here to pick up style from target settings 2368 LIBRARY_PREFIX = $($(OS)_$(LIBRARY_STYLE)_LIBRARY_PREFIX) ; 2369 LIBRARY_SUFFIX = $($(OS)_$(LIBRARY_STYLE)_LIBRARY_SUFFIX) ; 2370 export PRODUCT_TYPE = Library ; 2371 BeginProduct $(1) ; 2372} 2373 2374rule EndLibrary 2375{ 2376 EndProduct $(1) ; 2377} 2378 2379rule BeginBundle 2380{ 2381 export PRODUCT_TYPE = Bundle ; 2382 BeginWrappedProduct $(1) ; 2383} 2384 2385rule EndBundle 2386{ 2387 EndWrappedProduct $(1) ; 2388} 2389 2390rule BeginApplication 2391{ 2392 export PRODUCT_TYPE = Application ; 2393 BeginWrappedProduct $(1) ; 2394} 2395 2396rule EndApplication 2397{ 2398 EndWrappedProduct $(1) ; 2399} 2400 2401rule BeginFramework 2402{ 2403 export PRODUCT_TYPE = Framework ; 2404 BeginWrappedProduct $(1) ; 2405} 2406 2407rule EndFramework 2408{ 2409 EndWrappedProduct $(1) ; 2410} 2411# Copyright (c) 1999-2003 Apple Computer, Inc. 2412# All rights reserved. 2413 2414# Variables referenced: 2415# BUILD_DIR Location of built product 2416# RESOURCE_DIR Directory for resource files in product 2417# *_LINK, *_LINK_PATH Wrapper versioning information 2418# *_HEADER_DIR Directories for headers of product 2419# _INFO_PLIST_FILE_PATH Path to Info.plist file (if any), generated by PBXCore 2420# _PKGINFO_FILE_PATH Path to PkgInfo file (if any), generated by PBXCore 2421# _VERSION_PLIST_FILE_PATH Path to version.plist file (if any), generated by PBXCore 2422# _PBDEVELOPMENT_PLIST_FILE_PATH Path to pbdevelopment.plist file (if any), generated by PBXCore 2423# VERSIONING_SYSTEM Versioning system to use for product 2424# JAVA_COMPILE_TARGET Nonfile target representing all java compiles 2425# REZ_EXECUTABLE Run Rez directly on executable to produce fork if YES 2426# PRESERVE_RESOURCES Files to be recopied with CpMac after install tar copy 2427# APPLESCRIPTS_DIR Directory for compiled AppleScripts 2428# 2429# Variables set: 2430# DERIVED_FILES Intermediate sources 2431# OBJECT_FILES Object files produced by compilations 2432# LINKED_FILES Files to be used by a link rule 2433# PRODUCT_FILES Files that belong in the built product 2434# INFO_PLIST_FILE Info.plist file in product wrapper, copied from PRODUCT_SETTINGS_PATH 2435# PKGINFO_FILE PkgInfo file in product wrapper, copied from _PKGINFO_FILE_PATH 2436# HDRRULE, HDRSCAN Target specific header scanning information 2437# FLAGS Target specific compilation flags 2438# HEADER_SEARCH_PATHS, FRAMEWORK_SEARCH_PATHS Target specific search paths 2439# 2440# Build phase variables: 2441# BUILD_PHASE Target for current build phase 2442# PREVIOUS_BUILD_PHASE Target for previous build phase 2443# BUILD_PHASE_PRODUCTS Products of current build phase 2444# PHASE_TARGETS List of all phase targets for conflict checks 2445 2446# Source and resource handling rules by extension 2447.h_RULE = ProcessHeader ; 2448.nib_RULE = ProcessResource ; 2449.rtf_RULE = ProcessResource ; 2450.exe_RULE = ProcessResource ; 2451.java_RULE = ProcessUsingJavaCompiler ; 2452.applescript_RULE = ProcessAppleScript ; 2453.c_RULE = ProcessC ; 2454.adb_RULE = ProcessC ; # unsupported 2455.ads_RULE = ProcessC ; # unsupported 2456.C_RULE = ProcessCplusplus ; 2457.cc_RULE = ProcessCplusplus ; 2458.cp_RULE = ProcessCplusplus ; 2459.cpp_RULE = ProcessCplusplus ; 2460.CPP_RULE = ProcessCplusplus ; 2461.cxx_RULE = ProcessCplusplus ; 2462.CXX_RULE = ProcessCplusplus ; 2463# !!!:cmolick:20020226 note: .C++ not accepted by c++ compiler driver 2464.c++_RULE = ProcessCplusplus ; 2465.m_RULE = ProcessC ; 2466.mm_RULE = ProcessCplusplus ; 2467.M_RULE = ProcessCplusplus ; 2468.s_RULE = ProcessAssembly ; 2469.f_RULE = ProcessFortran ; 2470.for_RULE = ProcessFortran ; 2471.f77_RULE = ProcessFortran ; 2472.f90_RULE = ProcessFortran ; 2473.F_RULE = ProcessFortran ; 2474.fpp_RULE = ProcessFortran ; 2475.exp_RULE = ProcessExportsFile ; 2476.defs_RULE = ProcessUsingMig ; 2477.mig_RULE = ProcessUsingMig ; 2478.l_RULE = ProcessUsingLex ; 2479.lm_RULE = ProcessUsingLex ; 2480.LM_RULE = ProcessUsingLex ; 2481.lmm_RULE = ProcessUsingLex ; 2482.lpp_RULE = ProcessUsingLex ; 2483.LPP_RULE = ProcessUsingLex ; 2484.lxx_RULE = ProcessUsingLex ; 2485.LXX_RULE = ProcessUsingLex ; 2486.y_RULE = ProcessUsingYacc ; 2487.ym_RULE = ProcessUsingYacc ; 2488.YM_RULE = ProcessUsingYacc ; 2489.ymm_RULE = ProcessUsingYacc ; 2490.ypp_RULE = ProcessUsingYacc ; 2491.YPP_RULE = ProcessUsingYacc ; 2492.yxx_RULE = ProcessUsingYacc ; 2493.YXX_RULE = ProcessUsingYacc ; 2494.x_RULE = ProcessUsingRPCGen ; 2495.jobs_RULE = ProcessUsingBridget ; 2496.framework_RULE = ProcessFrameworkOrLibrary ; 2497.r_RULE = ProcessRezFile ; 2498.rsrc_RULE = ProcessRezFile ; 2499.RSRC_RULE = ProcessRezFile ; 2500.ppob_RULE = ProcessRezFile ; 2501 2502# Set the initial list of phase targets to empty 2503PHASE_TARGETS = ; 2504 2505# PhaseTarget <phase target variable> <product> <phase name> 2506# Sets up the given phase target variable based on the target 2507# and phase name and uses the list of phase targets to attempt 2508# avoid collisions between targets for phases with the same name. 2509rule PhaseTarget 2510{ 2511 local PHASE_SUFFIXES = 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 ; 2512 local PHASE_TARGET = $(2:G=$(3)) ; 2513 if $(PHASE_TARGET) in $(PHASE_TARGETS) { 2514 # attempt differentiation by adding last nonmatching suffix 2515 for PHASE_SUFFIX in $(PHASE_SUFFIXES) { 2516 ALTERNATE_PHASE_TARGET = $(2:G=$(3)$(PHASE_SUFFIX)) ; 2517 if ! $(ALTERNATE_PHASE_TARGET) in $(PHASE_TARGETS) { 2518 PHASE_TARGET = $(ALTERNATE_PHASE_TARGET) ; 2519 } 2520 } 2521 } 2522 PHASE_TARGETS += $(PHASE_TARGET) ; 2523 $(1) = $(PHASE_TARGET) ; 2524 NOTFILE $(PHASE_TARGET) ; 2525} 2526 2527# BuildPhase <phase> <product> <previous phase> 2528# Set up product (and variant hack) dependence on phase 2529# and phase dependence on previous phase 2530# and defines an action to indicate phase completion 2531rule BuildPhase 2532{ 2533 # retain a list of all phases 2534 _BUILD_PHASES += $(1) ; 2535 # retain name for action echo 2536 PHASE_NAME on $(1) = $(1:G) ; 2537 # this build phase depends on the previous phase 2538 if $(3) { 2539 DEPENDS $(1) : $(3) ; 2540 } 2541 # phase required for parent target 2542 DEPENDS $(2) : $(1) ; 2543} 2544actions BuildPhase 2545{ 2546 $(ECHO) Completed phase $(PHASE_NAME:Q) for $(1:Q) 2547} 2548 2549# DerivedFiles <derived-files> 2550# Locates derived files in the derived file directory, 2551# sees the derived paths with the derived file directory if necessary, 2552# creates derived subpaths and ads them to derived paths as necessary, 2553# and makes the derived file depend on all derived paths. 2554rule DerivedFiles 2555{ 2556 local _DERIVED_FILE ; 2557 for _DERIVED_FILE in $(1) { 2558 # !!!:cmolick:20021110 not all these files should be added to DERIVED_FILES 2559 if $(_BUILD_PHASING) = YES { 2560 BUILD_PHASE_PRODUCTS += $(_DERIVED_FILE) ; 2561 } 2562 # make and depend on containing directory 2563 LOCATE on $(_DERIVED_FILE) = $(DERIVED_FILE_DIR) ; 2564 if ! $(DERIVED_PATHS) { 2565 DERIVED_PATHS = $(DERIVED_FILE_DIR) ; 2566 } 2567 local DIR = $(DERIVED_FILE_DIR)$(/)$(_DERIVED_FILE:D) ; 2568 if ! ( $(DIR) in $(DERIVED_PATHS) ) && ! ( $(DIR)/ in $(DERIVED_PATHS) ) { 2569 Mkdir $(DIR) ; 2570 if $(_BUILD_PHASING) = YES { 2571 BUILD_PHASE_PRODUCTS += $(DIR) ; 2572 } 2573 DERIVED_PATHS += $(DIR) ; 2574 } 2575 DEPENDS $(_DERIVED_FILE) : $(DERIVED_PATHS) ; 2576 } 2577} 2578 2579# ProductFile <product-file> 2580# The product file location is set to BUILD_DIR. 2581# If the reference and containing directory are not already 2582# in the list of product files, then they are added. They also 2583# become build phase products unless phasing is turned off. 2584rule ProductFile 2585{ 2586 LOCATE on $(1) = $(TARGET_BUILD_DIR) ; 2587 if ! $(1) in $(PRODUCT_FILES) { 2588 PRODUCT_FILES += $(1) ; 2589 if $(_BUILD_PHASING) = YES { 2590 BUILD_PHASE_PRODUCTS += $(1) ; 2591 } 2592 } 2593} 2594 2595# ProductFileAside <file> 2596# Same as ProductFile, but default location is ASIDE_DIR. 2597rule ProductFileAside 2598{ 2599 LOCATE on $(1) = $(ASIDE_DIR) ; 2600 if ! $(1) in $(PRODUCT_FILES) { 2601 PRODUCT_FILES += $(1) ; 2602 if $(_BUILD_PHASING) = YES { 2603 BUILD_PHASE_PRODUCTS += $(1) ; 2604 } 2605 } 2606} 2607 2608# SetModeOwnerAndGroup <nonfile gristed target> : <base target> 2609# Uses given nonfile gristed target to set mode, owner, and group 2610# of the base product 2611rule SetModeOwnerAndGroup 2612{ 2613 NOTFILE $(1) ; 2614 LOCATE on $(1) = $(TARGET_BUILD_DIR) ; 2615 POST_PHASE_PRODUCTS += $(1) ; 2616 if $(INSTALL_MODE_FLAG) { 2617 SetMode $(1) : $(2) ; 2618 } 2619 if $(INSTALL_OWNER) { 2620 if $(INSTALL_GROUP) { 2621 SetOwnerAndGroup $(1) : $(2) ; 2622 } 2623 else { 2624 SetOwner $(1) : $(2) ; 2625 } 2626 } 2627 else if $(INSTALL_GROUP) { 2628 SetGroup $(1) : $(2) ; 2629 } 2630} 2631actions SetMode 2632{ 2633 $(CHMOD) -RH $(INSTALL_MODE_FLAG) $(2:G=:Q) 2634} 2635actions SetOwner 2636{ 2637 $(CHOWN) -RH $(INSTALL_OWNER) $(2:G=:Q) 2638} 2639actions SetGroup 2640{ 2641 $(CHOWN) -RH :$(INSTALL_GROUP) $(2:G=:Q) 2642} 2643actions SetOwnerAndGroup 2644{ 2645 $(CHOWN) -RH $(INSTALL_OWNER):$(INSTALL_GROUP) $(2:G=:Q) 2646} 2647 2648rule NoOp 2649{ 2650 if $(_BUILD_PHASING) = YES { 2651 PhaseTarget BUILD_PHASE : $(1) : NoOp ; 2652 BuildPhase $(BUILD_PHASE) : $(1) : $(PREVIOUS_BUILD_PHASE) ; 2653 PREVIOUS_BUILD_PHASE = $(BUILD_PHASE) ; 2654 } 2655} 2656 2657# ProcessHeaders <product> <headers> 2658# 2659# Process individual headers, call Interfacer to generate headers, 2660# precompile and assemble implicitly included headers as necessary, 2661# and run headerdoc. 2662rule ProcessHeaders 2663{ 2664 if ( headers in $(BUILD_COMPONENTS) || source in $(BUILD_COMPONENTS) ) 2665 && ( $(ARCHS) || $(NULL_BUILD_IF_NO_VALID_ARCH) != YES ) { 2666 local FILE ; 2667 if $(_BUILD_PHASING) = YES { 2668 PhaseTarget BUILD_PHASE : $(1) : CopyHeaders ; 2669 BuildPhase $(BUILD_PHASE) : $(1) : $(PREVIOUS_BUILD_PHASE) ; 2670# PREVIOUS_BUILD_PHASE_PRODUCTS = $(BUILD_PHASE_PRODUCTS) ; 2671 BUILD_PHASE_PRODUCTS = ; 2672 } 2673 for FILE in $(2) { 2674 if $(_BUILD_PHASING) = YES { 2675 ProcessHeader $(BUILD_PHASE) : $(FILE) ; 2676 } 2677 else { 2678 ProcessHeader $(1) : $(FILE) ; 2679 } 2680 } 2681 2682 # conditionally gather documentation generated from headers 2683 if build in $(BUILD_COMPONENTS) && $(GATHERHEADERDOC) && $(GENERATE_HEADERDOC) = YES && $(HEADERDOC_DIR) && HEADERDOC_TARGETS { 2684 GATHERED_HEADERDOC_TARGET = masterTOC.html ; 2685 LOCATE on $(GATHERED_HEADERDOC_TARGET) = $(HEADERDOC_DIR) ; 2686 DEPENDS $(GATHERED_HEADERDOC_TARGET) : $(HEADERDOC_DIR) ; 2687 DEPENDS $(GATHERED_HEADERDOC_TARGET) : $(HEADERDOC_TARGETS) ; 2688 GatheredHeaderDoc $(GATHERED_HEADERDOC_TARGET) ; 2689 if $(_BUILD_PHASING) = YES { 2690 BUILD_PHASE_PRODUCTS += $(GATHERED_HEADERDOC_TARGET) ; 2691 } 2692 } 2693 } 2694 # generate interfacer derived headers 2695 if headers in $(BUILD_COMPONENTS) && $(GENERATE_HEADERS) = YES { 2696 InterfacerHeaders $(1) ; 2697 } 2698 # Prepare to use prefix file, possibly starting with precompiling 2699 # Prefix file preparation and precompling is done only when the build action is "build", but not "installhdrs" 2700 if ( build in $(BUILD_COMPONENTS) ) 2701 && ( $(ARCHS) || $(NULL_BUILD_IF_NO_VALID_ARCH) != YES ) { 2702 # The prefix file may be compiled for use with cpp-precomp, PFE, or PCH mechanisms 2703 if ( $(PREFIX_HEADER) != "" && $(PRECOMPILE_PREFIX_HEADER) = YES ) { 2704 PFE_FILE_C_DIALECTS default = "c" "objective-c" "c++" "objective-c++" ; 2705 PRECOMP_DESTINATION_DIR default = $(TEMP_DIR)$(/)PrefixHeaders ; 2706 Mkdir $(PRECOMP_DESTINATION_DIR) ; 2707 PRODUCT_FILES += $(PRECOMP_DESTINATION_DIR) ; 2708 if $(_BUILD_PHASING) = YES { 2709 BUILD_PHASE_PRODUCTS += $(PRECOMP_DESTINATION_DIR) ; 2710 } 2711 if ( $(GCC_VERSION) = 2.x ) || ( $(GCC_VERSION) = 3.1 && $(USE_GCC3_PFE_SUPPORT) != YES ) { 2712 # compile prefix file with cpp-precomp 2713 # create header stub in subfolder of TEMP_DIR 2714 local PREFIX_HEADER_STUB = $(PRECOMP_DESTINATION_DIR)$(/)$(PREFIX_HEADER:BS) ; 2715 DEPENDS $(PREFIX_HEADER_STUB) : $(PRECOMP_DESTINATION_DIR) ; 2716 AbsolutePathImportStub $(PREFIX_HEADER_STUB) : $(PREFIX_HEADER) ; 2717 INCLUDES $(PREFIX_HEADER_STUB) : $(PREFIX_HEADER) ; 2718 # recompile for C and C++ 2719 if ( "c" in $(PFE_FILE_C_DIALECTS) ) || ( "objective-c" in $(PFE_FILE_C_DIALECTS) ) { 2720 C_PRECOMP_FILE_DESTINATION_PATH = $(PRECOMP_DESTINATION_DIR)$(/)$(PREFIX_HEADER_STUB:BS="-gcc3.p") ; 2721 PrecompileHeader $(C_PRECOMP_FILE_DESTINATION_PATH) : $(PREFIX_HEADER_STUB) ; 2722 PRODUCT_FILES += $(C_PRECOMP_FILE_DESTINATION_PATH) ; 2723 if $(_BUILD_PHASING) = YES { 2724 BUILD_PHASE_PRODUCTS += $(C_PRECOMP_FILE_DESTINATION_PATH) ; 2725 } 2726 } 2727 if ( "c++" in $(PFE_FILE_C_DIALECTS) ) || ( "objective-c++" in $(PFE_FILE_C_DIALECTS) ) { 2728 CPLUSPLUS_PRECOMP_FILE_DESTINATION_PATH = $(PRECOMP_DESTINATION_DIR)$(/)$(PREFIX_HEADER_STUB:BS="-gcc3.pp") ; 2729 PrecompileHeader $(CPLUSPLUS_PRECOMP_FILE_DESTINATION_PATH) : $(PREFIX_HEADER_STUB) ; 2730 PRODUCT_FILES += $(CPLUSPLUS_PRECOMP_FILE_DESTINATION_PATH) ; 2731 if $(_BUILD_PHASING) = YES { 2732 BUILD_PHASE_PRODUCTS += $(CPLUSPLUS_PRECOMP_FILE_DESTINATION_PATH) ; 2733 } 2734 } 2735 # effective prefix header is now header stub 2736 EFFECTIVE_PREFIX_HEADER = $(PREFIX_HEADER_STUB) ; 2737 # prepare precompile option using -include 2738 # set default flags for precompiled prefix header usage 2739 } 2740 else { 2741 if $(GCC_VERSION) = 3.1 && $(USE_GCC3_PFE_SUPPORT) = YES { 2742 # prefix file precompiled with PFE support 2743 # precompile by dialect 2744 for ARCH in $(ARCHS) { 2745 EFFECTIVE_PFE_FILE_$(ARCH) = $(PRECOMP_DESTINATION_DIR)$(/)$(PREFIX_HEADER:BS="-$(ARCH).pfe") ; 2746 if ( "c" in $(PFE_FILE_C_DIALECTS) ) || ( "objective-c" in $(PFE_FILE_C_DIALECTS) ) { 2747 MakePFEFile $(EFFECTIVE_PFE_FILE_$(ARCH)) : $(PREFIX_HEADER) ; 2748 } 2749 if ( "c++" in $(PFE_FILE_C_DIALECTS) ) || ( "objective-c++" in $(PFE_FILE_C_DIALECTS) ) { 2750 MakePFEFile++ $(EFFECTIVE_PFE_FILE_$(ARCH)) : $(PREFIX_HEADER) ; 2751 } 2752 PRODUCT_FILES += $(EFFECTIVE_PFE_FILE_$(ARCH)) ; 2753 if $(_BUILD_PHASING) = YES { 2754 BUILD_PHASE_PRODUCTS += $(EFFECTIVE_PFE_FILE_$(ARCH)) ; 2755 } 2756 } 2757 # effective prefix header is empty because no -include flag is passed 2758 EFFECTIVE_PREFIX_HEADER = ; 2759 # use flag for picking up PFE 2760 PREFIX_HEADER_CFLAGS_BASE default = --load-pch ; 2761 } 2762 if $(GCC_VERSION) = 3.3 { 2763 # prefix file precompiled with PCH support 2764 # precompile by dialect 2765 for ARCH in $(ARCHS) { 2766 EFFECTIVE_PFE_FILE_$(ARCH) = $(PRECOMP_DESTINATION_DIR)$(/)$(PREFIX_HEADER:BS="-$(ARCH)").gch ; 2767 if ( "c" in $(PFE_FILE_C_DIALECTS) ) || ( "objective-c" in $(PFE_FILE_C_DIALECTS) ) { 2768 ProcessPCH $(EFFECTIVE_PFE_FILE_$(ARCH)) : $(PREFIX_HEADER) ; 2769 } 2770 if ( "c++" in $(PFE_FILE_C_DIALECTS) ) || ( "objective-c++" in $(PFE_FILE_C_DIALECTS) ) { 2771 ProcessPCH++ $(EFFECTIVE_PFE_FILE_$(ARCH)) : $(PREFIX_HEADER) ; 2772 } 2773 PRODUCT_FILES += $(EFFECTIVE_PFE_FILE_$(ARCH)) ; 2774 if $(_BUILD_PHASING) = YES { 2775 BUILD_PHASE_PRODUCTS += $(EFFECTIVE_PFE_FILE_$(ARCH)) ; 2776 } 2777 } 2778 # effective prefix header is empty because no -include flag is passed 2779 EFFECTIVE_PREFIX_HEADER = ; 2780 # use inclusion flag for PCH 2781 PREFIX_HEADER_CFLAGS_BASE default = -include ; 2782 } 2783 } 2784 } 2785 else { 2786 # In this case there may be a prefix header, but no precompile 2787 EFFECTIVE_PREFIX_HEADER = $(PREFIX_HEADER) ; 2788 } 2789 } 2790 # phase end logic 2791 # THIS *MUST* COME *AFTER* ALL OTHER WORK FOR THIS PHASE!!! 2792 # cmolick:20020213 ideally this should be within action conditionals, 2793 # but that is difficult now that there are three disjointed ones, 2794 # so checking to see if the build phase is defined is a hack 2795 # the problem of bad DEPENDS here on clean for now. 2796 if $(_BUILD_PHASING) = YES && $(BUILD_PHASE) { 2797 if $(BUILD_PHASE_PRODUCTS) { 2798 DEPENDS $(BUILD_PHASE) : $(BUILD_PHASE_PRODUCTS) ; 2799 } 2800 PREVIOUS_BUILD_PHASE = $(BUILD_PHASE) ; 2801 } 2802} 2803 2804# ProcessHeader <product or phase> <header> 2805# 2806# Generate headerdoc from header as necessary, 2807# and copy header to subfolders of product as appropriate. 2808rule ProcessHeader 2809{ 2810 if source in $(BUILD_COMPONENTS) { 2811 local HEADER_SOURCE_COPY ; 2812 local HEADER_SOURCE_DIR ; 2813 # make directory first if necessary 2814 if $(2:D) { 2815 HEADER_SOURCE_DIR = $(SOURCE_DIR)/$(2:D:G=) ; 2816 Mkdir $(HEADER_SOURCE_DIR) ; 2817 HEADER_SOURCE_COPY = $(HEADER_SOURCE_DIR)/$(2:D=:G=) ; 2818 DEPENDS $(HEADER_SOURCE_COPY) : $(HEADER_SOURCE_DIR) ; 2819 } 2820 else { 2821 HEADER_SOURCE_COPY = $(SOURCE_DIR)/$(2:D=:G=) ; 2822 DEPENDS $(HEADER_SOURCE_COPY) : $(SOURCE_DIR) ; 2823 Mkdir $(SOURCE_DIR) ; 2824 } 2825 Cp $(HEADER_SOURCE_COPY) : $(2) ; 2826 if $(_BUILD_PHASING) = YES { 2827 BUILD_PHASE_PRODUCTS += $(HEADER_SOURCE_COPY) ; 2828 } 2829 } 2830 if build in $(BUILD_COMPONENTS) { 2831 # Scan this header to see if it includes other headers. 2832 if $(ENABLE_HEADER_DEPENDENCIES) != NO && $(DO_HEADER_SCANNING_IN_JAM) = YES { 2833 HDRRULE on $(2) = ProcessC.HdrRule ; 2834 HDRSCAN on $(2) = $(HDRPATTERN) ; 2835 } 2836 # Set search path for header so dependence analysis will find it 2837 SEARCH on $(2:D=) += $(2:D) ; 2838 2839 # conditionally generate documentation from headers 2840 if $(GENERATE_HEADERDOC) = YES && $(HEADERDOC_DIR) { 2841 HEADERDOC_TARGET = $(2:B)$(/)toc.html ; 2842 LOCATE on $(HEADERDOC_TARGET) = $(HEADERDOC_DIR) ; 2843 HeaderDoc $(HEADERDOC_TARGET) : $(2) ; 2844 DEPENDS $(HEADERDOC_TARGET) : $(HEADERDOC_DIR) ; 2845 if $(_BUILD_PHASING) = YES { 2846 BUILD_PHASE_PRODUCTS += $(HEADERDOC_TARGET) ; 2847 } 2848 HEADERDOC_TARGETS += $(HEADERDOC_TARGET) ; 2849 } 2850 } 2851 local ATTRIBUTES = $($(2)_ATTRIBUTES) ; 2852 local HEADER_ATTRIBUTE ; 2853 for HEADER_ATTRIBUTE in $(ATTRIBUTES) { 2854 switch $(HEADER_ATTRIBUTE) { 2855 case Project : 2856 # Define option as valid, but take no action 2857 case Public : 2858 HAS_PUBLIC_HEADERS = YES ; 2859 # Create a public header directory 2860 if ! $(PUBLIC_HEADER_DIR) in $(PRODUCT_FILES) { 2861 Mkdir $(PUBLIC_HEADER_DIR) ; 2862 ProductFile $(PUBLIC_HEADER_DIR) ; 2863 if $(INSTALLED_PRODUCT_ASIDES) = YES && $(DEPLOYMENT_LOCATION) = YES { 2864 ASIDE_PUBLIC_HEADER_DIR default = $(PUBLIC_HEADER_DIR:G=aside) ; 2865 Mkdir $(ASIDE_PUBLIC_HEADER_DIR) ; 2866 ProductFileAside $(ASIDE_PUBLIC_HEADER_DIR) ; 2867 } 2868 } 2869 # Create symlink to public header dir in versioned frameworks 2870 if $(PUBLIC_HEADER_LINK) 2871 && ! $(PUBLIC_HEADER_LINK) in $(PRODUCT_FILES) { 2872 SymLink $(PUBLIC_HEADER_LINK) : $(PUBLIC_HEADER_LINK_PATH) ; 2873 DEPENDS $(PUBLIC_HEADER_LINK) : $(PUBLIC_HEADER_DIR) ; 2874 ProductFile $(PUBLIC_HEADER_LINK) ; 2875 if $(INSTALLED_PRODUCT_ASIDES) = YES && $(DEPLOYMENT_LOCATION) = YES { 2876 ASIDE_PUBLIC_HEADER_LINK default = $(PUBLIC_HEADER_LINK:G=aside) ; 2877 SymLink $(ASIDE_PUBLIC_HEADER_LINK) : $(PUBLIC_HEADER_LINK_PATH) ; 2878 DEPENDS $(ASIDE_PUBLIC_HEADER_LINK) : $(ASIDE_PUBLIC_HEADER_DIR) ; 2879 ProductFileAside $(ASIDE_PUBLIC_HEADER_LINK) ; 2880 } 2881 NOUPDATE $(PUBLIC_HEADER_LINK) ; 2882 } 2883 if headers in $(BUILD_COMPONENTS) { 2884 if $(PUBLIC_HEADER_DIR) { 2885 local HEADER_COPY = $(PUBLIC_HEADER_DIR)$(/)$(2:BS:G=) ; 2886 DEPENDS $(HEADER_COPY) : $(2) ; 2887 DEPENDS $(HEADER_COPY) : $(PUBLIC_HEADER_DIR) ; 2888 PBXCp $(HEADER_COPY) : $(2) ; 2889 ProductFile $(HEADER_COPY) ; 2890 if $(INSTALLED_PRODUCT_ASIDES) = YES && $(DEPLOYMENT_LOCATION) = YES { 2891 ASIDE_HEADER_COPY = $(HEADER_COPY:G=aside) ; 2892 DEPENDS $(ASIDE_HEADER_COPY) : $(2) ; 2893 DEPENDS $(ASIDE_HEADER_COPY) : $(ASIDE_PUBLIC_HEADER_DIR) ; 2894 PBXCp $(ASIDE_HEADER_COPY) : $(2) ; 2895 ProductFileAside $(ASIDE_HEADER_COPY) ; 2896 } 2897 } 2898 else { 2899 ECHO warning: public header $(2) ignored because PUBLIC_HEADER_DIR has no value ; 2900 } 2901 } 2902 case Private : 2903 HAS_PRIVATE_HEADERS = YES ; 2904 # create a private header directory 2905 if ! $(PRIVATE_HEADER_DIR) in $(PRODUCT_FILES) { 2906 Mkdir $(PRIVATE_HEADER_DIR) ; 2907 ProductFile $(PRIVATE_HEADER_DIR) ; 2908 if $(INSTALLED_PRODUCT_ASIDES) = YES && $(DEPLOYMENT_LOCATION) = YES { 2909 ASIDE_PRIVATE_HEADER_DIR default = $(PRIVATE_HEADER_DIR:G=aside) ; 2910 Mkdir $(ASIDE_PRIVATE_HEADER_DIR) ; 2911 ProductFileAside $(ASIDE_PRIVATE_HEADER_DIR) ; 2912 } 2913 } 2914 # accompanying link in versioned frameworks 2915 if $(PRIVATE_HEADER_LINK) 2916 && ! $(PRIVATE_HEADER_LINK) in $(PRODUCT_FILES) { 2917 SymLink $(PRIVATE_HEADER_LINK) : $(PRIVATE_HEADER_LINK_PATH) ; 2918 DEPENDS $(PRIVATE_HEADER_LINK) : $(PRIVATE_HEADER_DIR) ; 2919 ProductFile $(PRIVATE_HEADER_LINK) ; 2920 if $(INSTALLED_PRODUCT_ASIDES) = YES && $(DEPLOYMENT_LOCATION) = YES { 2921 ASIDE_PRIVATE_HEADER_LINK default = $(PRIVATE_HEADER_LINK:G=aside) ; 2922 SymLink $(ASIDE_PRIVATE_HEADER_LINK) : $(PRIVATE_HEADER_LINK_PATH) ; 2923 DEPENDS $(ASIDE_PRIVATE_HEADER_LINK) : $(ASIDE_PRIVATE_HEADER_DIR) ; 2924 ProductFileAside $(ASIDE_PRIVATE_HEADER_LINK) ; 2925 } 2926 NOUPDATE $(PRIVATE_HEADER_LINK) ; 2927 } 2928 if headers in $(BUILD_COMPONENTS) { 2929 if $(PRIVATE_HEADER_DIR) { 2930 local HEADER_COPY = $(PRIVATE_HEADER_DIR)$(/)$(2:BS:G=) ; 2931 DEPENDS $(HEADER_COPY) : $(2) ; 2932 DEPENDS $(HEADER_COPY) : $(PRIVATE_HEADER_DIR) ; 2933 PBXCp $(HEADER_COPY) : $(2) ; 2934 ProductFile $(HEADER_COPY) ; 2935 if $(INSTALLED_PRODUCT_ASIDES) = YES && $(DEPLOYMENT_LOCATION) = YES { 2936 ASIDE_HEADER_COPY = $(HEADER_COPY:G=aside) ; 2937 DEPENDS $(ASIDE_HEADER_COPY) : $(ASIDE_PRIVATE_HEADER_DIR) ; 2938 DEPENDS $(ASIDE_HEADER_COPY) : $(2) ; 2939 PBXCp $(ASIDE_HEADER_COPY) : $(2) ; 2940 ProductFileAside $(ASIDE_HEADER_COPY) ; 2941 } 2942 } 2943 else { 2944 ECHO warning: private header $(2) ignored because PRIVATE_HEADER_DIR has no value ; 2945 } 2946 } 2947 case * : 2948 if $(HEADER_ATTRIBUTE) != AbsolutePath { 2949 ECHO jam: warning: Ignoring unknown header attribute $(HEADER_ATTRIBUTE) ; 2950 } 2951 } 2952 } 2953} 2954 2955rule PrecompileHeader 2956{ 2957 DEPENDS $(1) : $(2) ; 2958 if $(KERNEL_MODULE) = YES { 2959 local KERNEL_FRAMEWORK = $(SYSTEM_LIBRARY_DIR)/Frameworks/Kernel.framework ; 2960 local KERNEL_HEADERS = $(KERNEL_FRAMEWORK)/Headers ; 2961 local KERNEL_INCLUDE_PATHS = $(KERNEL_HEADERS) $(KERNEL_HEADERS)/bsd $(KERNEL_FRAMEWORK)/PrivateHeaders ; 2962 local KERNEL_COMPILE_OPTIONS = -fno-builtin -finline -fno-keep-inline-functions -force_cpusubtype_ALL -msoft-float ; 2963 local KERNEL_DEFINITIONS = -DKERNEL -DKERNEL_PRIVATE -DDRIVER_PRIVATE -DAPPLE -DNeXT ; 2964 FLAGS on $(1) = -arch $(ARCH) $(PER_ARCH_CFLAGS_$(ARCH)) -fno-common -nostdinc $(OPTIMIZATION_CFLAGS) $(WARNING_CFLAGS) -I$(KERNEL_INCLUDE_PATHS) -I$(PROJECT_HEADER_DIR) $(KERNEL_COMPILE_OPTIONS) -static $(KERNEL_DEFINITIONS) ; 2965 GLOBAL_CFLAGS on $(1) = ; 2966 if $(ARCH) in ppc { 2967 KERNEL_COMPILE_OPTIONS += -mlong-branch ; 2968 } 2969 } 2970 else { 2971 FLAGS on $(1) = -arch $(ARCH) $(PER_ARCH_CFLAGS_$(ARCH)) -fno-common -fpascal-strings $(OPTIMIZATION_CFLAGS) $(WARNING_CFLAGS) ; # We must compile with the extension-specific build flags 2972 if $(PRODUCT_TYPE) = Tool || $(PRODUCT_TYPE) = Application { 2973 USE_DYNAMIC_NO_PIC default = YES ; 2974 } else { 2975 USE_DYNAMIC_NO_PIC default = NO ; 2976 } 2977 if $(USE_DYNAMIC_NO_PIC) = YES { 2978 FLAGS on $(1) += -mdynamic-no-pic ; 2979 } 2980 } 2981 FLAGS on $(1) += -pipe ; 2982 if $(GCC_VERSION) != 2.x { 2983 FLAGS on $(1) += -fmessage-length=0 ; 2984 } 2985 if $(GCC_TREAT_WARNINGS_AS_ERRORS) = YES { 2986 FLAGS on $(1) += -Werror ; 2987 } 2988 # seed search paths with target-wide values 2989 HEADER_SEARCH_PATHS on $(1) = $(HEADER_SEARCH_PATHS) ; 2990 FRAMEWORK_SEARCH_PATHS on $(1) = $(FRAMEWORK_SEARCH_PATHS) ; 2991 # extension-specific build flags 2992 FLAGS on $(1) += $($(2:S)_CFLAGS) ; 2993 # Add debug flags, if appropriate. 2994 if $(DEBUGGING_SYMBOLS) = YES { 2995 FLAGS on $(1) += -g ; 2996 } 2997 # Add profiling flags, if appropriate. 2998 if $(PROFILING_CODE) = YES { 2999 FLAGS on $(1) += -pg ; 3000 } 3001 if $(GCC_VERSION) != 3.3 && $(OS) in MACOS DARWIN { 3002 FLAGS on $(1) += -precomp-trustfile $(PRECOMP_TRUSTFILE) ; 3003 } 3004 if $(CPP_HEADERMAP_FILE) { 3005 FLAGS on $(1) += "-Wp,-header-mapfile,$(CPP_HEADERMAP_FILE)" ; 3006 } 3007 if $(1:S) = .pp { 3008 FLAGS on $(1) += -x objective-c++ ; 3009 } 3010 if YES in $(GENERATE_CPP_ILOG_FILES) { 3011 local INCLUSION_LOG_FILE default = $(PRECOMP_DESTINATION_DIR)$(/)$(1:DB)-$(ARCH).ilog ; 3012 FLAGS on $(1) += "-Wp,-inclusion-log-file,$(INCLUSION_LOG_FILE)" ; 3013 } 3014 Mkdir $(PRECOMP_DESTINATION_DIR) ; 3015 DEPENDS $(1) : $(PRECOMP_DESTINATION_DIR) ; 3016 SEARCH on $(2) = $(SOURCE_ROOT) ; 3017} 3018actions PrecompileHeader 3019{ 3020 $(CC) -precomp -o $(1:Q) -F$(FRAMEWORK_SEARCH_PATHS:Q) -I$(HEADER_SEARCH_PATHS:Q) $(ARCH_FLAGS) $(FLAGS:Q) $(GLOBAL_CFLAGS) -I$(DERIVED_PATHS:Q) -I$(SOURCE_ROOT:Q) $(PREFIX_HEADER_CFLAGS:Q) "$(OTHER_PRECOMP_CFLAGS)" "$(OTHER_CFLAGS)" $(2:Q) 3021} 3022 3023rule MakePFEFile 3024{ 3025 DEPENDS $(1) : $(2) ; 3026 if $(KERNEL_MODULE) = YES { 3027 local KERNEL_FRAMEWORK = $(SYSTEM_LIBRARY_DIR)/Frameworks/Kernel.framework ; 3028 local KERNEL_HEADERS = $(KERNEL_FRAMEWORK)/Headers ; 3029 local KERNEL_INCLUDE_PATHS = $(KERNEL_HEADERS) $(KERNEL_HEADERS)/bsd $(KERNEL_FRAMEWORK)/PrivateHeaders ; 3030 local KERNEL_COMPILE_OPTIONS = -fno-builtin -finline -fno-keep-inline-functions -force_cpusubtype_ALL -msoft-float ; 3031 if $(ARCH) in ppc { 3032 KERNEL_COMPILE_OPTIONS += -mlong-branch ; 3033 } 3034 local KERNEL_DEFINITIONS = -DKERNEL -DKERNEL_PRIVATE -DDRIVER_PRIVATE -DAPPLE -DNeXT ; 3035 FLAGS on $(1) = -arch $(ARCH) $(PER_ARCH_CFLAGS_$(ARCH)) -fno-common -nostdinc $(OPTIMIZATION_CFLAGS) $(WARNING_CFLAGS) -I$(KERNEL_INCLUDE_PATHS) -I$(PROJECT_HEADER_DIR) $(KERNEL_COMPILE_OPTIONS) -static $(KERNEL_DEFINITIONS) ; 3036 GLOBAL_CFLAGS on $(1) = ; 3037 } 3038 else { 3039 FLAGS on $(1) = -arch $(ARCH) $(PER_ARCH_CFLAGS_$(ARCH)) -fno-common -fpascal-strings $(OPTIMIZATION_CFLAGS) $(WARNING_CFLAGS) ; # We must compile with the extension-specific build flags 3040 if $(PRODUCT_TYPE) = Tool || $(PRODUCT_TYPE) = Application { 3041 USE_DYNAMIC_NO_PIC default = YES ; 3042 } else { 3043 USE_DYNAMIC_NO_PIC default = NO ; 3044 } 3045 if $(USE_DYNAMIC_NO_PIC) = YES { 3046 FLAGS on $(1) += -mdynamic-no-pic ; 3047 } 3048 } 3049 FLAGS on $(1) += -pipe ; 3050 if $(GCC_VERSION) != 2.x { 3051 FLAGS on $(1) += -fmessage-length=0 ; 3052 } 3053 if $(GCC_TREAT_WARNINGS_AS_ERRORS) = YES { 3054 FLAGS on $(1) += -Werror ; 3055 } 3056 # seed search paths with target-wide values 3057 HEADER_SEARCH_PATHS on $(1) = $(HEADER_SEARCH_PATHS) ; 3058 FRAMEWORK_SEARCH_PATHS on $(1) = $(FRAMEWORK_SEARCH_PATHS) ; 3059 # extension-specific build flags 3060 FLAGS on $(1) += $($(2:S)_CFLAGS) ; 3061 # Add debug flags, if appropriate. 3062 if $(DEBUGGING_SYMBOLS) = YES { 3063 FLAGS on $(1) += -g ; 3064 } 3065 # Add profiling flags, if appropriate. 3066 if $(PROFILING_CODE) = YES { 3067 FLAGS on $(1) += -pg ; 3068 } 3069 if $(CPP_HEADERMAP_FILE) { 3070 FLAGS on $(1) += "-Wp,-header-mapfile,$(CPP_HEADERMAP_FILE)" ; 3071 } 3072 if YES in $(GENERATE_CPP_ILOG_FILES) { 3073 local INCLUSION_LOG_FILE default = $(OBJECT_FILE_DIR)-$(VARIANT)$(/)$(ARCH)$(/)$(2:DB).ilog ; 3074 FLAGS on $(1) += "-Wp,-inclusion-log-file,$(INCLUSION_LOG_FILE)" ; 3075 } 3076 ARCH on $(1) = $(ARCH) ; 3077 Mkdir $(PRECOMP_DESTINATION_DIR) ; 3078 DEPENDS $(1) : $(PRECOMP_DESTINATION_DIR) ; 3079 SEARCH on $(2) = $(SOURCE_ROOT) ; 3080} 3081actions MakePFEFile 3082{ 3083 for _c_dialect in $(PFE_FILE_C_DIALECTS) ; do if [ ${_c_dialect} == c -o ${_c_dialect} == objective-c ] ; then dummy_file=`mktemp /tmp/.null-XXXXXXXX`; $(CC) -c -x ${_c_dialect} -F$(FRAMEWORK_SEARCH_PATHS:Q) -I$(HEADER_SEARCH_PATHS:Q) $(FLAGS:Q) $(GLOBAL_CFLAGS) -I$(DERIVED_PATHS:Q) -I$(SOURCE_ROOT:Q) $(PREFIX_HEADER_CFLAGS:Q) "$(OTHER_PRECOMP_CFLAGS)" "$(OTHER_CFLAGS)" $(2:Q) -o ${dummy_file} --dump-pch $(1:Q) ; exit_code=$? ; rm ${dummy_file} ; if [ ${exit_code} != 0 ] ; then rm -rf $(1:Q) ; exit ${exit_code} ; fi ; fi ; done 3084} 3085 3086rule MakePFEFile++ 3087{ 3088 DEPENDS $(1) : $(2) ; 3089 PER_ARCH_CPLUSPLUSFLAGS_$(ARCH) default = $(PER_ARCH_CFLAGS_$(ARCH)) ; 3090 if $(KERNEL_MODULE) = YES { 3091 local KERNEL_FRAMEWORK = $(SYSTEM_LIBRARY_DIR)/Frameworks/Kernel.framework ; 3092 local KERNEL_HEADERS = $(KERNEL_FRAMEWORK)/Headers ; 3093 local KERNEL_INCLUDE_PATHS = $(KERNEL_HEADERS) $(KERNEL_HEADERS)/bsd $(KERNEL_FRAMEWORK)/PrivateHeaders ; 3094 local KERNEL_COMPILE_OPTIONS = -fno-builtin -finline -fno-keep-inline-functions -force_cpusubtype_ALL -msoft-float ; 3095 if $(ARCH) in ppc { 3096 KERNEL_COMPILE_OPTIONS += -mlong-branch ; 3097 } 3098 KERNEL_COMPILE_OPTIONS += -fapple-kext ; 3099 local KERNEL_DEFINITIONS = -DKERNEL -DKERNEL_PRIVATE -DDRIVER_PRIVATE -DAPPLE -DNeXT ; 3100 FLAGS on $(1) = -arch $(ARCH) $(PER_ARCH_CPLUSPLUSFLAGS_$(ARCH)) -fno-common -nostdinc $(OPTIMIZATION_CFLAGS) $(WARNING_CPLUSPLUSFLAGS) -I$(KERNEL_INCLUDE_PATHS) -I$(PROJECT_HEADER_DIR) $(KERNEL_COMPILE_OPTIONS) -static $(KERNEL_DEFINITIONS) ; 3101 GLOBAL_CFLAGS on $(1) = ; 3102 } 3103 else { 3104 FLAGS on $(1) = -arch $(ARCH) $(PER_ARCH_CPLUSPLUSFLAGS_$(ARCH)) -fno-common -fpascal-strings $(OPTIMIZATION_CFLAGS) $(WARNING_CPLUSPLUSFLAGS) ; # We must compile with the extension-specific build flags 3105 if $(PRODUCT_TYPE) = Tool || $(PRODUCT_TYPE) = Application { 3106 USE_DYNAMIC_NO_PIC default = YES ; 3107 } else { 3108 USE_DYNAMIC_NO_PIC default = NO ; 3109 } 3110 if $(USE_DYNAMIC_NO_PIC) = YES { 3111 FLAGS on $(1) += -mdynamic-no-pic ; 3112 } 3113 } 3114 FLAGS on $(1) += -pipe ; 3115 if $(GCC_VERSION) != 2.x { 3116 FLAGS on $(1) += -fmessage-length=0 ; 3117 } 3118 if $(GCC_TREAT_WARNINGS_AS_ERRORS) = YES { 3119 FLAGS on $(1) += -Werror ; 3120 } 3121 # seed search paths with target-wide values 3122 HEADER_SEARCH_PATHS on $(1) = $(HEADER_SEARCH_PATHS) ; 3123 FRAMEWORK_SEARCH_PATHS on $(1) = $(FRAMEWORK_SEARCH_PATHS) ; 3124 # extension-specific build flags 3125 FLAGS on $(1) += $($(2:S)_CFLAGS) ; 3126 # Add debug flags, if appropriate. 3127 if $(DEBUGGING_SYMBOLS) = YES { 3128 FLAGS on $(1) += -g ; 3129 } 3130 # Add profiling flags, if appropriate. 3131 if $(PROFILING_CODE) = YES { 3132 FLAGS on $(1) += -pg ; 3133 } 3134 if $(CPP_HEADERMAP_FILE) { 3135 FLAGS on $(1) += "-Wp,-header-mapfile,$(CPP_HEADERMAP_FILE)" ; 3136 } 3137 if YES in $(GENERATE_CPP_ILOG_FILES) { 3138 local INCLUSION_LOG_FILE default = $(OBJECT_FILE_DIR)-$(VARIANT)$(/)$(ARCH)$(/)$(2:DB).ilog ; 3139 FLAGS on $(1) += "-Wp,-inclusion-log-file,$(INCLUSION_LOG_FILE)" ; 3140 } 3141 ARCH on $(1) = $(ARCH) ; 3142 Mkdir $(PRECOMP_DESTINATION_DIR) ; 3143 DEPENDS $(1) : $(PRECOMP_DESTINATION_DIR) ; 3144 SEARCH on $(2) = $(SOURCE_ROOT) ; 3145} 3146actions MakePFEFile++ 3147{ 3148 for _c_dialect in $(PFE_FILE_C_DIALECTS) ; do if [ ${_c_dialect} == c++ -o ${_c_dialect} == objective-c++ ] ; then dummy_file=`mktemp /tmp/.null-XXXXXXXX`; $(CC) -c -x ${_c_dialect} -F$(FRAMEWORK_SEARCH_PATHS:Q) -I$(HEADER_SEARCH_PATHS:Q) $(FLAGS:Q) $(GLOBAL_CFLAGS) -I$(DERIVED_PATHS:Q) -I$(SOURCE_ROOT:Q) $(PREFIX_HEADER_CFLAGS:Q) "$(OTHER_PRECOMP_CPLUSPLUSFLAGS)" "$(OTHER_CPLUSPLUSFLAGS)" $(2:Q) -o ${dummy_file} --dump-pch $(1:Q) ; exit_code=$? ; rm ${dummy_file} ; if [ ${exit_code} != 0 ] ; then rm -rf $(1:Q) ; exit ${exit_code} ; fi ; fi ; done 3149} 3150 3151rule ProcessPCH 3152{ 3153 DEPENDS $(1) : $(2) ; 3154 if $(KERNEL_MODULE) = YES { 3155 local KERNEL_FRAMEWORK = $(SYSTEM_LIBRARY_DIR)/Frameworks/Kernel.framework ; 3156 local KERNEL_HEADERS = $(KERNEL_FRAMEWORK)/Headers ; 3157 local KERNEL_INCLUDE_PATHS = $(KERNEL_HEADERS) $(KERNEL_HEADERS)/bsd $(KERNEL_FRAMEWORK)/PrivateHeaders ; 3158 local KERNEL_COMPILE_OPTIONS = -fno-builtin -finline -fno-keep-inline-functions -force_cpusubtype_ALL -msoft-float ; 3159 if $(ARCH) in ppc { 3160 KERNEL_COMPILE_OPTIONS += -mlong-branch ; 3161 } 3162 local KERNEL_DEFINITIONS = -DKERNEL -DKERNEL_PRIVATE -DDRIVER_PRIVATE -DAPPLE -DNeXT ; 3163 FLAGS on $(1) = -arch $(ARCH) $(PER_ARCH_CFLAGS_$(ARCH)) -fno-common -nostdinc $(OPTIMIZATION_CFLAGS) $(WARNING_CFLAGS) -I$(KERNEL_INCLUDE_PATHS) -I$(PROJECT_HEADER_DIR) $(KERNEL_COMPILE_OPTIONS) -static $(KERNEL_DEFINITIONS) ; 3164 GLOBAL_CFLAGS on $(1) = ; 3165 } 3166 else { 3167 FLAGS on $(1) = -arch $(ARCH) $(PER_ARCH_CFLAGS_$(ARCH)) -fno-common -fpascal-strings $(OPTIMIZATION_CFLAGS) $(WARNING_CFLAGS) ; # We must compile with the extension-specific build flags 3168 if $(PRODUCT_TYPE) = Tool || $(PRODUCT_TYPE) = Application { 3169 USE_DYNAMIC_NO_PIC default = YES ; 3170 } else { 3171 USE_DYNAMIC_NO_PIC default = NO ; 3172 } 3173 if $(USE_DYNAMIC_NO_PIC) = YES { 3174 FLAGS on $(1) += -mdynamic-no-pic ; 3175 } 3176 } 3177 FLAGS on $(1) += -pipe ; 3178 if $(GCC_VERSION) != 2.x { 3179 FLAGS on $(1) += -fmessage-length=0 ; 3180 } 3181 if $(GCC_TREAT_WARNINGS_AS_ERRORS) = YES { 3182 FLAGS on $(1) += -Werror ; 3183 } 3184 # seed search paths with target-wide values 3185 HEADER_SEARCH_PATHS on $(1) = $(HEADER_SEARCH_PATHS) ; 3186 FRAMEWORK_SEARCH_PATHS on $(1) = $(FRAMEWORK_SEARCH_PATHS) ; 3187 # extension-specific build flags 3188 FLAGS on $(1) += $($(2:S)_CFLAGS) ; 3189 # Add debug flags, if appropriate. 3190 if $(DEBUGGING_SYMBOLS) = YES { 3191 FLAGS on $(1) += -g ; 3192 } 3193 # Add profiling flags, if appropriate. 3194 if $(PROFILING_CODE) = YES { 3195 FLAGS on $(1) += -pg ; 3196 } 3197 if $(CPP_HEADERMAP_FILE) { 3198 FLAGS on $(1) += "-Wp,-header-mapfile,$(CPP_HEADERMAP_FILE)" ; 3199 } 3200 if YES in $(GENERATE_CPP_ILOG_FILES) { 3201 local INCLUSION_LOG_FILE default = $(OBJECT_FILE_DIR)-$(VARIANT)$(/)$(ARCH)$(/)$(2:DB).ilog ; 3202 FLAGS on $(1) += "-Wp,-inclusion-log-file,$(INCLUSION_LOG_FILE)" ; 3203 } 3204 ARCH on $(1) = $(ARCH) ; 3205 Mkdir $(PRECOMP_DESTINATION_DIR) ; 3206 DEPENDS $(1) : $(PRECOMP_DESTINATION_DIR) ; 3207 SEARCH on $(2) = $(SOURCE_ROOT) ; 3208} 3209actions ProcessPCH 3210{ 3211 mkdir -p $(1:Q) 3212 for _c_dialect in $(PFE_FILE_C_DIALECTS) ; do if [ ${_c_dialect} == c -o ${_c_dialect} == objective-c ] ; then rm -f $(1:Q)$(/)${_c_dialect} ; $(CC) -c -x ${_c_dialect}-header -F$(FRAMEWORK_SEARCH_PATHS:Q) -I$(HEADER_SEARCH_PATHS:Q) $(FLAGS:Q) $(GLOBAL_CFLAGS) -I$(DERIVED_PATHS:Q) -I$(SOURCE_ROOT:Q) $(PREFIX_HEADER_CFLAGS:Q) "$(OTHER_PRECOMP_CFLAGS)" "$(OTHER_CFLAGS)" $(2:Q) -o $(1:Q)$(/)${_c_dialect} ; exit_code=$? ; if [ ${exit_code} != 0 ] ; then rm -rf $(1:Q)$(/)${_c_dialect} ; touch $(1:Q) ; exit ${exit_code} ; fi ; fi ; done 3213} 3214 3215rule ProcessPCH++ 3216{ 3217 DEPENDS $(1) : $(2) ; 3218 PER_ARCH_CPLUSPLUSFLAGS_$(ARCH) default = $(PER_ARCH_CFLAGS_$(ARCH)) ; 3219 if $(KERNEL_MODULE) = YES { 3220 local KERNEL_FRAMEWORK = $(SYSTEM_LIBRARY_DIR)/Frameworks/Kernel.framework ; 3221 local KERNEL_HEADERS = $(KERNEL_FRAMEWORK)/Headers ; 3222 local KERNEL_INCLUDE_PATHS = $(KERNEL_HEADERS) $(KERNEL_HEADERS)/bsd $(KERNEL_FRAMEWORK)/PrivateHeaders ; 3223 local KERNEL_COMPILE_OPTIONS = -fno-builtin -finline -fno-keep-inline-functions -force_cpusubtype_ALL -msoft-float ; 3224 if $(ARCH) in ppc { 3225 KERNEL_COMPILE_OPTIONS += -mlong-branch ; 3226 } 3227 KERNEL_COMPILE_OPTIONS += -fapple-kext ; 3228 local KERNEL_DEFINITIONS = -DKERNEL -DKERNEL_PRIVATE -DDRIVER_PRIVATE -DAPPLE -DNeXT ; 3229 FLAGS on $(1) = -arch $(ARCH) $(PER_ARCH_CPLUSPLUSFLAGS_$(ARCH)) -fno-common -nostdinc $(OPTIMIZATION_CFLAGS) $(WARNING_CPLUSPLUSFLAGS) -I$(KERNEL_INCLUDE_PATHS) -I$(PROJECT_HEADER_DIR) $(KERNEL_COMPILE_OPTIONS) -static $(KERNEL_DEFINITIONS) ; 3230 GLOBAL_CFLAGS on $(1) = ; 3231 } 3232 else { 3233 FLAGS on $(1) = -arch $(ARCH) $(PER_ARCH_CPLUSPLUSFLAGS_$(ARCH)) -fno-common -fpascal-strings $(OPTIMIZATION_CFLAGS) $(WARNING_CPLUSPLUSFLAGS) ; # We must compile with the extension-specific build flags 3234 if $(PRODUCT_TYPE) = Tool || $(PRODUCT_TYPE) = Application { 3235 USE_DYNAMIC_NO_PIC default = YES ; 3236 } else { 3237 USE_DYNAMIC_NO_PIC default = NO ; 3238 } 3239 if $(USE_DYNAMIC_NO_PIC) = YES { 3240 FLAGS on $(1) += -mdynamic-no-pic ; 3241 } 3242 } 3243 FLAGS on $(1) += -pipe ; 3244 if $(GCC_VERSION) != 2.x { 3245 FLAGS on $(1) += -fmessage-length=0 ; 3246 } 3247 if $(GCC_TREAT_WARNINGS_AS_ERRORS) = YES { 3248 FLAGS on $(1) += -Werror ; 3249 } 3250 # seed search paths with target-wide values 3251 HEADER_SEARCH_PATHS on $(1) = $(HEADER_SEARCH_PATHS) ; 3252 FRAMEWORK_SEARCH_PATHS on $(1) = $(FRAMEWORK_SEARCH_PATHS) ; 3253 # extension-specific build flags 3254 FLAGS on $(1) += $($(2:S)_CFLAGS) ; 3255 # Add debug flags, if appropriate. 3256 if $(DEBUGGING_SYMBOLS) = YES { 3257 FLAGS on $(1) += -g ; 3258 } 3259 # Add profiling flags, if appropriate. 3260 if $(PROFILING_CODE) = YES { 3261 FLAGS on $(1) += -pg ; 3262 } 3263 if $(CPP_HEADERMAP_FILE) { 3264 FLAGS on $(1) += "-Wp,-header-mapfile,$(CPP_HEADERMAP_FILE)" ; 3265 } 3266 if YES in $(GENERATE_CPP_ILOG_FILES) { 3267 local INCLUSION_LOG_FILE default = $(OBJECT_FILE_DIR)-$(VARIANT)$(/)$(ARCH)$(/)$(2:DB).ilog ; 3268 FLAGS on $(1) += "-Wp,-inclusion-log-file,$(INCLUSION_LOG_FILE)" ; 3269 } 3270 ARCH on $(1) = $(ARCH) ; 3271 Mkdir $(PRECOMP_DESTINATION_DIR) ; 3272 DEPENDS $(1) : $(PRECOMP_DESTINATION_DIR) ; 3273 SEARCH on $(2) = $(SOURCE_ROOT) ; 3274} 3275actions ProcessPCH++ 3276{ 3277 mkdir -p $(1:Q) 3278 for _c_dialect in $(PFE_FILE_C_DIALECTS) ; do if [ ${_c_dialect} == c++ -o ${_c_dialect} == objective-c++ ] ; then rm -f $(1:Q)$(/)${_c_dialect} ; $(CC) -c -x ${_c_dialect}-header -F$(FRAMEWORK_SEARCH_PATHS:Q) -I$(HEADER_SEARCH_PATHS:Q) $(FLAGS:Q) $(GLOBAL_CFLAGS) -I$(DERIVED_PATHS:Q) -I$(SOURCE_ROOT:Q) $(PREFIX_HEADER_CFLAGS:Q) "$(OTHER_PRECOMP_CFLAGS)" "$(OTHER_CPLUSPLUSFLAGS)" $(2:Q) -o $(1:Q)$(/)${_c_dialect} ; exit_code=$? ; if [ ${exit_code} != 0 ] ; then rm -f $(1:Q)$(/)${_c_dialect} ; touch $(1:Q) ; exit ${exit_code} ; fi ; fi ; done 3279} 3280 3281 3282# ProcessResources <product> <bundle resources> 3283# 3284# Process individual resource files, copy property list settings file, 3285# and write the package info file if appropriate. 3286rule ProcessResources 3287{ 3288 if ( build in $(BUILD_COMPONENTS) || source in $(BUILD_COMPONENTS) ) 3289 && ( $(ARCHS) || $(NULL_BUILD_IF_NO_VALID_ARCH) != YES ) { 3290 local FILE ; 3291 if $(_BUILD_PHASING) = YES { 3292 PhaseTarget BUILD_PHASE : $(1) : CopyResources ; 3293 BuildPhase $(BUILD_PHASE) : $(1) : $(PREVIOUS_BUILD_PHASE) ; 3294 BUILD_PHASE_PRODUCTS = ; 3295 } 3296 for FILE in $(2) { 3297 if $(_BUILD_PHASING) = YES { 3298 ProcessResource $(BUILD_PHASE) : $(FILE) ; 3299 } 3300 else { 3301 ProcessResource $(1) : $(FILE) ; 3302 } 3303 } 3304 # product settings, version settings, and package info written only during build 3305 if build in $(BUILD_COMPONENTS) { 3306 # product settings property list 3307 if $(_INFO_PLIST_FILE_PATH) 3308 && $(PURE_JAVA) != YES { 3309 # if available and not pure java 3310 if $(PRODUCT_TYPE) = Framework { 3311 INFO_PLIST_FILE default = $(RESOURCE_DIR)$(/)Info.plist ; 3312 if ! $(RESOURCE_DIR) in $(PRODUCT_FILES) { 3313 Mkdir $(RESOURCE_DIR) ; 3314 ProductFile $(RESOURCE_DIR) ; 3315 if $(INSTALLED_PRODUCT_ASIDES) = YES && $(DEPLOYMENT_LOCATION) = YES { 3316 ASIDE_RESOURCE_DIR default = $(RESOURCE_DIR:G=aside) ; 3317 Mkdir $(ASIDE_RESOURCE_DIR) ; 3318 ProductFileAside $(ASIDE_RESOURCE_DIR) ; 3319 } 3320 } 3321 DEPENDS $(INFO_PLIST_FILE) : $(RESOURCE_DIR) ; 3322 if $(RESOURCE_LINK) 3323 && ! $(RESOURCE_LINK) in $(PRODUCT_FILES) { 3324 SymLink $(RESOURCE_LINK) : $(RESOURCE_LINK_PATH) ; 3325 ProductFile $(RESOURCE_LINK) ; 3326 if $(INSTALLED_PRODUCT_ASIDES) = YES && $(DEPLOYMENT_LOCATION) = YES { 3327 ASIDE_RESOURCE_LINK default = $(RESOURCE_LINK:G=aside) ; 3328 SymLink $(ASIDE_RESOURCE_LINK) : $(RESOURCE_LINK_PATH) ; 3329 ProductFileAside $(ASIDE_RESOURCE_LINK) ; 3330 } 3331 } 3332 DEPENDS $(INFO_PLIST_FILE) : $(RESOURCE_LINK) ; 3333 } 3334 else { 3335 if $(BUNDLE_STYLE) = SHALLOW { 3336 INFO_PLIST_FILE default = $(1:G=)$(/)Info.plist ; 3337 } 3338 else { 3339 INFO_PLIST_FILE default = $(1:G=)$(/)Contents$(/)Info.plist ; 3340 } 3341 INFO_PLIST_DIR = $(INFO_PLIST_FILE:D) ; 3342 if ! $(INFO_PLIST_DIR) in $(PRODUCT_FILES) { 3343 Mkdir $(INFO_PLIST_DIR) ; 3344 ProductFile $(INFO_PLIST_DIR) ; 3345 } 3346 if $(INSTALLED_PRODUCT_ASIDES) = YES && $(DEPLOYMENT_LOCATION) = YES { 3347 ASIDE_INFO_PLIST_DIR default = $(INFO_PLIST_DIR:G=aside) ; 3348 if ! $(ASIDE_INFO_PLIST_DIR) in $(PRODUCT_FILES) { 3349 Mkdir $(ASIDE_INFO_PLIST_DIR) ; 3350 ProductFileAside $(ASIDE_INFO_PLIST_DIR) ; 3351 } 3352 } 3353 DEPENDS $(INFO_PLIST_FILE) : $(INFO_PLIST_DIR) ; 3354 } 3355 PBXCp $(INFO_PLIST_FILE) : $(_INFO_PLIST_FILE_PATH) ; 3356 ProductFile $(INFO_PLIST_FILE) ; 3357 if $(INSTALLED_PRODUCT_ASIDES) = YES && $(DEPLOYMENT_LOCATION) = YES { 3358 ASIDE_INFO_PLIST_FILE default = $(INFO_PLIST_FILE:G=aside) ; 3359 DEPENDS $(ASIDE_INFO_PLIST_FILE) : $(ASIDE_INFO_PLIST_DIR) ; 3360 PBXCp $(ASIDE_INFO_PLIST_FILE) : $(_INFO_PLIST_FILE_PATH) ; 3361 ProductFileAside $(ASIDE_INFO_PLIST_FILE) ; 3362 } 3363 } 3364 # version settings property list 3365 if $(_VERSION_PLIST_FILE_PATH) 3366 && $(PURE_JAVA) != YES { 3367 # if available and not pure java 3368 if $(PRODUCT_TYPE) = Framework { 3369 VERSION_PLIST_FILE default = $(RESOURCE_DIR)$(/)version.plist ; 3370 if ! $(RESOURCE_DIR) in $(PRODUCT_FILES) { 3371 Mkdir $(RESOURCE_DIR) ; 3372 ProductFile $(RESOURCE_DIR) ; 3373 if $(INSTALLED_PRODUCT_ASIDES) = YES && $(DEPLOYMENT_LOCATION) = YES { 3374 ASIDE_RESOURCE_DIR default = $(RESOURCE_DIR:G=aside) ; 3375 Mkdir $(ASIDE_RESOURCE_DIR) ; 3376 ProductFileAside $(ASIDE_RESOURCE_DIR) ; 3377 } 3378 } 3379 DEPENDS $(VERSION_PLIST_FILE) : $(RESOURCE_DIR) ; 3380 # create accompanying link in the case of versioned frameworks 3381 if $(RESOURCE_LINK) 3382 && ! $(RESOURCE_LINK) in $(PRODUCT_FILES) { 3383 SymLink $(RESOURCE_LINK) : $(RESOURCE_LINK_PATH) ; 3384 ProductFile $(RESOURCE_LINK) ; 3385 if $(INSTALLED_PRODUCT_ASIDES) = YES && $(DEPLOYMENT_LOCATION) = YES { 3386 ASIDE_RESOURCE_LINK default = $(RESOURCE_LINK:G=aside) ; 3387 DEPENDS $(ASIDE_RESOURCE_LINK) : $(ASIDE_RESOURCE_DIR) ; 3388 SymLink $(ASIDE_RESOURCE_LINK) : $(RESOURCE_LINK_PATH) ; 3389 ProductFileAside $(ASIDE_RESOURCE_LINK) ; 3390 } 3391 } 3392 DEPENDS $(VERSION_PLIST_FILE) : $(RESOURCE_LINK) ; 3393 } 3394 else { 3395 if $(BUNDLE_STYLE) = SHALLOW { 3396 VERSION_PLIST_FILE default = $(1:G=)$(/)version.plist ; 3397 } 3398 else { 3399 VERSION_PLIST_FILE default = $(1:G=)$(/)Contents$(/)version.plist ; 3400 } 3401 VERSION_PLIST_DIR = $(VERSION_PLIST_FILE:D) ; 3402 if ! $(VERSION_PLIST_DIR) in $(PRODUCT_FILES) { 3403 Mkdir $(VERSION_PLIST_DIR) ; 3404 ProductFile $(VERSION_PLIST_DIR) ; 3405 if $(INSTALLED_PRODUCT_ASIDES) = YES && $(DEPLOYMENT_LOCATION) = YES { 3406 ASIDE_VERSION_PLIST_DIR default = $(VERSION_PLIST_DIR) ; 3407 Mkdir $(ASIDE_VERSION_PLIST_DIR) ; 3408 ProductFileAside $(ASIDE_VERSION_PLIST_DIR) ; 3409 } 3410 } 3411 DEPENDS $(VERSION_PLIST_FILE) : $(VERSION_PLIST_DIR) ; 3412 } 3413 PBXCp $(VERSION_PLIST_FILE) : $(_VERSION_PLIST_FILE_PATH) ; 3414 ProductFile $(VERSION_PLIST_FILE) ; 3415 if $(INSTALLED_PRODUCT_ASIDES) = YES && $(DEPLOYMENT_LOCATION) = YES { 3416 ASIDE_VERSION_PLIST_FILE default = $(VERSION_PLIST_FILE:G=aside) ; 3417 Cp $(ASIDE_VERSION_PLIST_FILE) : $(_VERSION_PLIST_FILE_PATH) ; 3418 DEPENDS $(ASIDE_VERSION_PLIST_FILE) : $(ASIDE_VERSION_PLIST_DIR) ; 3419 ProductFileAside $(ASIDE_VERSION_PLIST_FILE) ; 3420 } 3421 } 3422 # Copy development settings property list unless using deployment locations 3423 if $(DEVELOPMENT_SETTINGS_PATH) 3424 && $(PURE_JAVA) != YES && $(DEPLOYMENT_LOCATION) != YES { 3425 # if available and not pure java 3426 if $(PRODUCT_TYPE) = Framework { 3427 DEVELOPMENT_PLIST_FILE default = $(RESOURCE_DIR)$(/)pbdevelopment.plist ; 3428 if ! $(RESOURCE_DIR) in $(PRODUCT_FILES) { 3429 Mkdir $(RESOURCE_DIR) ; 3430 ProductFile $(RESOURCE_DIR) ; 3431 if $(INSTALLED_PRODUCT_ASIDES) = YES && $(DEPLOYMENT_LOCATION) = YES { 3432 ASIDE_RESOURCE_DIR default = $(RESOURCE_DIR:G=aside) ; 3433 Mkdir $(ASIDE_RESOURCE_DIR) ; 3434 ProductFileAsides $(ASIDE_RESOURCE_DIR) ; 3435 } 3436 } 3437 DEPENDS $(DEVELOPMENT_PLIST_FILE) : $(RESOURCE_DIR) ; 3438 # create accompanying link in the case of versioned frameworks 3439 if $(RESOURCE_LINK) 3440 && ! $(RESOURCE_LINK) in $(PRODUCT_FILES) { 3441 SymLink $(RESOURCE_LINK) : $(RESOURCE_LINK_PATH) ; 3442 ProductFile $(RESOURCE_LINK) ; 3443 if $(INSTALLED_PRODUCT_ASIDES) = YES && $(DEPLOYMENT_LOCATION) = YES { 3444 ASIDE_RESOURCE_LINK default = $(RESOURCE_LINK:G=aside) ; 3445 SymLink $(ASIDE_RESOURCE_LINK) : $(RESOURCE_LINK_PATH) ; 3446 DEPENDS $(ASIDE_RESOURCE_LINK) : $(ASIDE_RESOURCE_DIR) ; 3447 ProductFileAside $(ASIDE_RESOURCE_LINK) ; 3448 } 3449 } 3450 DEPENDS $(DEVELOPMENT_PLIST_FILE) : $(RESOURCE_LINK) ; 3451 } 3452 else { 3453 if $(BUNDLE_STYLE) = SHALLOW { 3454 DEVELOPMENT_PLIST_FILE default = $(1:G=)$(/)pbdevelopment.plist ; 3455 } 3456 else { 3457 DEVELOPMENT_PLIST_FILE default = $(1:G=)$(/)Contents$(/)pbdevelopment.plist ; 3458 } 3459 DEVELOPMENT_PLIST_DIR = $(DEVELOPMENT_PLIST_FILE:D) ; 3460 if ! $(DEVELOPMENT_PLIST_DIR) in $(PRODUCT_FILES) { 3461 Mkdir $(DEVELOPMENT_PLIST_DIR) ; 3462 ProductFile $(DEVELOPMENT_PLIST_DIR) ; 3463 if $(INSTALLED_PRODUCT_ASIDES) = YES && $(DEPLOYMENT_LOCATION) = YES { 3464 ASIDE_DEVELOPMENT_PLIST_DIR default = $(DEVELOPMENT_PLIST_DIR:G=aside) ; 3465 Mkdir $(ASIDE_DEVELOPMENT_PLIST_DIR) ; 3466 ProductFileAsides $(ASIDE_DEVELOPMENT_PLIST) ; 3467 } 3468 } 3469 DEPENDS $(DEVELOPMENT_PLIST_FILE) : $(DEVELOPMENT_PLIST_DIR) ; 3470 } 3471 PBXCp $(DEVELOPMENT_PLIST_FILE) : $(DEVELOPMENT_SETTINGS_PATH) ; 3472 ProductFile $(DEVELOPMENT_PLIST_FILE) ; 3473 if $(INSTALLED_PRODUCT_ASIDES) = YES && $(DEPLOYMENT_LOCATION) = YES { 3474 ASIDE_DEVELOPMENT_PLIST_FILE default = $(DEVELOPMENT_PLIST_FILE:G=aside) ; 3475 PBXCp $(ASIDE_DEVELOPMENT_PLIST_FILE) : $(DEVELOPMENT_SETTINGS_PATH) ; 3476 DEPENDS $(ASIDE_DEVELOPMENT_PLIST_FILE) : $(DEVELOPMENT_PLIST_DIR) ; 3477 ProductFileAside $(ASIDE_DEVELOPMENT_PLIST_FILE) ; 3478 } 3479 } 3480 # Write package info file with type and creator if available 3481 # and if not framework or oldest layout or pure java 3482 if $(_PKGINFO_FILE_PATH) 3483 && ( $(PRODUCT_TYPE) != Framework 3484 && $(PRODUCT_TYPE) != Bundle 3485 && $(PURE_JAVA) != YES || $(GENERATE_PKGINFO_FILE) = YES ) { 3486 if $(BUNDLE_STYLE) = SHALLOW || $(PRODUCT_TYPE) = Framework { 3487 PKGINFO_FILE default = $(1:G=)$(/)PkgInfo ; 3488 } 3489 else { 3490 PKGINFO_FILE default = $(1:G=)$(/)Contents$(/)PkgInfo ; 3491 } 3492 PKGINFO_DIR = $(PKGINFO_FILE:D) ; 3493 if ! $(PKGINFO_DIR) in $(PRODUCT_FILES) { 3494 Mkdir $(PKGINFO_DIR) ; 3495 ProductFile $(PKGINFO_DIR) ; 3496 if $(INSTALLED_PRODUCT_ASIDES) = YES && $(DEPLOYMENT_LOCATION) = YES { 3497 ASIDE_PKGINFO_DIR default = $(PKGINFO_DIR:G=aside) ; 3498 Mkdir $(ASIDE_PKGINFO_DIR) ; 3499 ProductFileAside $(ASIDE_PKGINFO_DIR) ; 3500 } 3501 } 3502 DEPENDS $(PKGINFO_FILE) : $(PKGINFO_DIR) ; 3503 PBXCp $(PKGINFO_FILE) : $(_PKGINFO_FILE_PATH) ; 3504 ProductFile $(PKGINFO_FILE) ; 3505 if $(INSTALLED_PRODUCT_ASIDES) = YES && $(DEPLOYMENT_LOCATION) = YES { 3506 ASIDE_PKGINFO_FILE default = $(PKGINFO_FILE:G=aside) ; 3507 DEPENDS $(ASIDE_PKGINFO_FILE) : $(ASIDE_PKGINFO_DIR) ; 3508 PBXCp $(ASIDE_PKGINFO_FILE) : $(_PKGINFO_FILE_PATH) ; 3509 ProductFileAside $(ASIDE_PKGINFO_FILE) ; 3510 } 3511 } 3512 } 3513 if $(_BUILD_PHASING) = YES { 3514 if $(BUILD_PHASE_PRODUCTS) { 3515 DEPENDS $(BUILD_PHASE) : $(BUILD_PHASE_PRODUCTS) ; 3516 } 3517 PREVIOUS_BUILD_PHASE = $(BUILD_PHASE) ; 3518 } 3519 } 3520} 3521 3522# ProcessResource <product or phase> <bundle resource> 3523# 3524# Copies resources to nonlocalized or localized folders as appropriate 3525rule ProcessResource 3526{ 3527 if source in $(BUILD_COMPONENTS) { 3528 local RESOURCE_SOURCE_COPY ; 3529 local RESOURCE_SOURCE_DIR ; 3530 # make directory first if necessary 3531 if $(2:D) { 3532 RESOURCE_SOURCE_DIR = $(SOURCE_DIR)/$(2:D:G=) ; 3533 Mkdir $(RESOURCE_SOURCE_DIR) ; 3534 RESOURCE_SOURCE_COPY = $(RESOURCE_SOURCE_DIR)/$(2:D=:G=) ; 3535 DEPENDS $(RESOURCE_SOURCE_COPY) : $(RESOURCE_SOURCE_DIR) ; 3536 } 3537 else { 3538 RESOURCE_SOURCE_COPY = $(SOURCE_DIR)/$(2:D=:G=) ; 3539 DEPENDS $(RESOURCE_SOURCE_COPY) : $(SOURCE_DIR) ; 3540 Mkdir $(SOURCE_DIR) ; 3541 } 3542 # copy resource to source location 3543 Cp $(RESOURCE_SOURCE_COPY) : $(2) ; 3544 if $(_BUILD_PHASING) = YES { 3545 BUILD_PHASE_PRODUCTS += $(RESOURCE_SOURCE_COPY) ; 3546 } 3547 } 3548 if build in $(BUILD_COMPONENTS) { 3549 local REGION = $($(2)_REGION) ; 3550 local SPECIFIC_REGION ; 3551 # resource directory must exist 3552 if ! $(RESOURCE_DIR) in $(PRODUCT_FILES) { 3553 Mkdir $(RESOURCE_DIR) ; 3554 ProductFile $(RESOURCE_DIR) ; 3555 if $(INSTALLED_PRODUCT_ASIDES) = YES && $(DEPLOYMENT_LOCATION) = YES { 3556 ASIDE_RESOURCE_DIR default = $(RESOURCE_DIR:G=aside) ; 3557 Mkdir $(ASIDE_RESOURCE_DIR) ; 3558 ProductFileAside $(ASIDE_RESOURCE_DIR) ; 3559 } 3560 } 3561 # create accompanying link in the case of versioned frameworks 3562 if $(RESOURCE_LINK) 3563 && ! $(RESOURCE_LINK) in $(PRODUCT_FILES) { 3564 SymLink $(RESOURCE_LINK) : $(RESOURCE_LINK_PATH) ; 3565 ProductFile $(RESOURCE_LINK) ; 3566 if $(INSTALLED_PRODUCT_ASIDES) = YES && $(DEPLOYMENT_LOCATION) = YES { 3567 ASIDE_RESOURCE_LINK default = $(RESOURCE_LINK:G=aside) ; 3568 SymLink $(ASIDE_RESOURCE_LINK) : $(RESOURCE_LINK_PATH) ; 3569 DEPENDS $(ASIDE_RESOURCE_LINK) : $(ASIDE_RESOURCE_DIR) ; 3570 ProductFileAside $(ASIDE_RESOURCE_LINK) ; 3571 } 3572 } 3573 if ! $(REGION) { 3574 # non-localized resource 3575 local NONLOCALIZED_RESOURCE_DIR NONLOCALIZED_RESOURCE ; 3576 NONLOCALIZED_RESOURCE_DIR = $(RESOURCE_DIR) ; 3577 if ! $(NONLOCALIZED_RESOURCE_DIR) in $(PRODUCT_FILES) { 3578 Mkdir $(NONLOCALIZED_RESOURCE_DIR) ; 3579 ProductFile $(NONLOCALIZED_RESOURCE_DIR) ; 3580 } 3581 if $(INSTALLED_PRODUCT_ASIDES) = YES && $(DEPLOYMENT_LOCATION) = YES { 3582 ASIDE_NONLOCALIZED_RESOURCE_DIR = $(NONLOCALIZED_RESOURCE_DIR:G=aside) ; 3583 if ! $(ASIDE_NONLOCALIZED_RESOURCE_DIR) in $(PRODUCT_FILES) { 3584 Mkdir $(ASIDE_NONLOCALIZED_RESOURCE_DIR) ; 3585 ProductFileAside $(ASIDE_NONLOCALIZED_RESOURCE_DIR) ; 3586 } 3587 } 3588 NONLOCALIZED_RESOURCE = $(NONLOCALIZED_RESOURCE_DIR)$(/)$(2:BS) ; 3589 DEPENDS $(NONLOCALIZED_RESOURCE) : $(NONLOCALIZED_RESOURCE_DIR) ; 3590 DEPENDS $(NONLOCALIZED_RESOURCE) : $(2) ; 3591 PBXCp $(NONLOCALIZED_RESOURCE) : $(2) ; 3592 ProductFile $(NONLOCALIZED_RESOURCE) ; 3593 if $(INSTALLED_PRODUCT_ASIDES) = YES && $(DEPLOYMENT_LOCATION) = YES { 3594 ASIDE_NONLOCALIZED_RESOURCE = $(NONLOCALIZED_RESOURCE:G=aside) ; 3595 DEPENDS $(ASIDE_NONLOCALIZED_RESOURCE) : $(2) ; 3596 DEPENDS $(ASIDE_NONLOCALIZED_RESOURCE) : $(ASIDE_NONLOCALIZED_RESOURCE_DIR) ; 3597 PBXCp $(ASIDE_NONLOCALIZED_RESOURCE) : $(2) ; 3598 ProductFileAside $(ASIDE_NONLOCALIZED_RESOURCE) ; 3599 } 3600 } else for SPECIFIC_REGION in $(REGION) { 3601 # for each localization of a resource (only one ever expected) 3602 local LOCALIZED_RESOURCE_DIR LOCALIZED_RESOURCE ; 3603 LOCALIZED_RESOURCE_DIR = $(RESOURCE_DIR)$(/)$(SPECIFIC_REGION:S=.lproj) ; 3604 # localized resource directory must exist 3605 if ! $(LOCALIZED_RESOURCE_DIR) in $(PRODUCT_FILES) { 3606 Mkdir $(LOCALIZED_RESOURCE_DIR) ; 3607 ProductFile $(LOCALIZED_RESOURCE_DIR) ; 3608 } 3609 if $(INSTALLED_PRODUCT_ASIDES) = YES && $(DEPLOYMENT_LOCATION) = YES { 3610 ASIDE_LOCALIZED_RESOURCE_DIR = $(LOCALIZED_RESOURCE_DIR:G=aside) ; 3611 if ! $(ASIDE_LOCALIZED_RESOURCE_DIR) in $(PRODUCT_FILES) { 3612 Mkdir $(ASIDE_LOCALIZED_RESOURCE_DIR) ; 3613 ProductFileAside $(ASIDE_LOCALIZED_RESOURCE_DIR) ; 3614 } 3615 } 3616 LOCALIZED_RESOURCE = $(LOCALIZED_RESOURCE_DIR)$(/)$(2:BS) ; 3617 DEPENDS $(LOCALIZED_RESOURCE) : $(2) ; 3618 DEPENDS $(LOCALIZED_RESOURCE) : $(LOCALIZED_RESOURCE_DIR) ; 3619 PBXCp $(LOCALIZED_RESOURCE) : $(2) ; 3620 ProductFile $(LOCALIZED_RESOURCE) ; 3621 if $(INSTALLED_PRODUCT_ASIDES) = YES && $(DEPLOYMENT_LOCATION) = YES { 3622 ASIDE_LOCALIZED_RESOURCE = $(LOCALIZED_RESOURCE:G=aside) ; 3623 DEPENDS $(ASIDE_LOCALIZED_RESOURCE) : $(2) ; 3624 DEPENDS $(ASIDE_LOCALIZED_RESOURCE) : $(ASIDE_LOCALIZED_RESOURCE_DIR) ; 3625 PBXCp $(ASIDE_LOCALIZED_RESOURCE) : $(2) ; 3626 ProductFileAside $(ASIDE_LOCALIZED_RESOURCE) ; 3627 } 3628 } 3629 } 3630} 3631 3632actions CopyProjectFiles 3633{ 3634 if [ -d $(2:Q) ]; then 3635 $(CP) -pRP $(2:Q) $(1:Q) 3636 elif [ -d $(2:S=.pbxproj:Q) ]; then 3637 $(CP) -pRP $(2:S=.pbxproj:Q) $(1:Q) 3638 fi 3639} 3640 3641# ProcessSources <product> <source files> 3642# 3643# Process individual source files and generate versioning stub, 3644# kernel module stub, and use Interfacer to make exports and glue 3645rule ProcessSources 3646{ 3647 if build in $(BUILD_COMPONENTS) || source in $(BUILD_COMPONENTS) { 3648 local FILE ; 3649 if $(_BUILD_PHASING) = YES { 3650 PhaseTarget BUILD_PHASE : $(1) : DeriveAndCompileSources ; 3651 BuildPhase $(BUILD_PHASE) : $(1) : $(PREVIOUS_BUILD_PHASE) ; 3652 BUILD_PHASE_PRODUCTS = ; 3653 } 3654 # copy project files if copying source 3655 if source in $(BUILD_COMPONENTS) { 3656 local PROJECT_FILES = $(SOURCE_ROOT)/$(PROJECT).pbproj ; 3657 local LEGACY_PROJECT_FILES = $(SOURCE_ROOT)/$(PROJECT).pbxproj ; 3658 local PROJECT_FILES_COPY = $(INSTALL_ROOT)/$(PROJECT).pbproj ; 3659 CopyProjectFiles $(PROJECT_FILES_COPY) : $(PROJECT_FILES) : $(LEGACY_PROJECT_FILES) ; 3660 DEPENDS $(PROJECT_FILES_COPY) : $(INSTALL_ROOT) ; 3661 Mkdir $(INSTALL_ROOT) ; 3662 DEPENDS $(PROJECT_FILES_COPY) : $(PROJECT_FILES) ; 3663 NOCARE $(PROJECT_FILES) ; 3664 DEPENDS $(PROJECT_FILES_COPY) : $(LEGACY_PROJECT_FILES) ; 3665 NOCARE $(LEGACY_PROJECT_FILES) ; 3666 BUILD_PHASE_PRODUCTS += $(PROJECT_FILES_COPY) ; 3667 } 3668 for FILE in $(2) { 3669 if $(_BUILD_PHASING) = YES { 3670 ProcessSource $(BUILD_PHASE) : $(FILE) ; 3671 } 3672 else { 3673 ProcessSource $(1) : $(FILE) ; 3674 } 3675 } 3676 # any build component implies handling: header cloning, versioning, 3677 # kernel module generation, and interfacer usage 3678 if build in $(BUILD_COMPONENTS) { 3679 # generate versioning system derived sources 3680 if $(VERSIONING_SYSTEM) { 3681 local RULE = VersioningSystem_$(VERSIONING_SYSTEM) ; 3682 $(RULE) $(1) ; 3683 } 3684 # generate kernel module or extension info source 3685 if $(KERNEL_MODULE) = YES { 3686 KernelModuleGeneratedSource $(1) ; 3687 } 3688 # generate interfacer derived sources 3689 if $(GENERATE_EXPORT_SETS_AND_GLUE) = YES { 3690 InterfacerExportSetsAndGlue $(1) ; 3691 } 3692 } 3693 # compilation depends on derivation 3694 # !!!:cmolick:20021108 this bloats most rebuilds 3695 for VARIANT in $(BUILD_VARIANTS) { 3696 if $(OBJECT_FILES_$(VARIANT)) && $(DERIVED_FILES) { 3697 DEPENDS $(OBJECT_FILES_$(VARIANT)) : $(DERIVED_FILES) ; 3698 } 3699 } 3700 # end of phase logic 3701 if $(_BUILD_PHASING) = YES { 3702 if $(BUILD_PHASE_PRODUCTS) { 3703 DEPENDS $(BUILD_PHASE) : $(BUILD_PHASE_PRODUCTS) ; 3704 # product reference link must be in place before any compiles 3705 if $(PRODUCT_REFERENCE) { 3706 DEPENDS $(BUILD_PHASE_PRODUCTS) : $(PRODUCT_REFERENCE) ; 3707 } 3708 } 3709 PREVIOUS_BUILD_PHASE = $(BUILD_PHASE) ; 3710 } 3711 } 3712} 3713 3714# ProcessSource <product> <source file> 3715# 3716# Call ProcessFile to process a source file with the correct 3717# extension-specific rule, and start header scanning. 3718rule ProcessSource 3719{ 3720 # scan non-Java for header file references in any source 3721 if $(2:S) != ".java" { 3722 if $(ENABLE_HEADER_DEPENDENCIES) != NO && $(DO_HEADER_SCANNING_IN_JAM) = YES { 3723 HDRRULE on $(2) = ProcessC.HdrRule ; 3724 HDRSCAN on $(2) = $(HDRPATTERN) ; 3725 } 3726 } 3727 ProcessFile $(1) : $(2) ; 3728} 3729 3730rule ProcessFiles 3731{ 3732 local FILE ; 3733 for FILE in $(2) { 3734 ProcessFile $(1) : $(FILE) ; 3735 } 3736} 3737 3738rule ProcessFile 3739{ 3740 local SOURCE_COPY ; 3741 local SOURCE_SUBDIR ; 3742 if source in $(BUILD_COMPONENTS) { 3743 # copy to source location 3744 # make directory first if necessary 3745 if $(2:D) { 3746 SOURCE_SUBDIR = $(SOURCE_DIR)/$(2:D:G=) ; 3747 Mkdir $(SOURCE_SUBDIR) ; 3748 SOURCE_COPY = $(SOURCE_SUBDIR)/$(2:D=:G=) ; 3749 DEPENDS $(SOURCE_COPY) : $(SOURCE_SUBDIR) ; 3750 if $(_BUILD_PHASING) = YES { 3751 BUILD_PHASE_PRODUCTS += $(SOURCE_SUBDIR) ; 3752 } 3753 } 3754 else { 3755 SOURCE_COPY = $(SOURCE_DIR)/$(2:D=:G=) ; 3756 DEPENDS $(SOURCE_COPY) : $(SOURCE_DIR) ; 3757 Mkdir $(SOURCE_DIR) ; 3758 } 3759 Cp $(SOURCE_COPY) : $(2) ; 3760 if $(_BUILD_PHASING) = YES { 3761 BUILD_PHASE_PRODUCTS += $(SOURCE_COPY) ; 3762 } 3763 } 3764 if build in $(BUILD_COMPONENTS) { 3765 # process file with rule based on the file suffix 3766 local EXCLUDED_OSS = $($(2)_EXCLUDED_OSS) ; 3767 local INCLUDED_OSS = $($(2)_INCLUDED_OSS) ; 3768 local RULE = $($(2:S)_RULE) ; 3769 3770 if $(EXCLUDED_OSS) && ( $(OS) in $(EXCLUDED_OSS) ) { 3771 # do nothing -- file excluded from build 3772 } else if $(INCLUDED_OSS) && ! ( $(OS) in $(INCLUDED_OSS) ) { 3773 # do nothing -- file excluded from build 3774 } else if $(RULE) { 3775 $(RULE) $(1) : $(2) ; 3776 } else { 3777 ECHO jam: warning: no rule for file $(2) ; 3778 } 3779 } 3780} 3781 3782# ProcessFrameworksAndLibraries <product> <linked files> 3783# 3784# Link object files and/or archive classes 3785rule ProcessFrameworksAndLibraries 3786{ 3787 if ( build in $(BUILD_COMPONENTS) ) 3788 && ( $(ARCHS) || $(NULL_BUILD_IF_NO_VALID_ARCH) != YES ) { 3789 if $(_BUILD_PHASING) = YES { 3790 PhaseTarget BUILD_PHASE : $(1) : LinkWithFrameworksAndLibraries ; 3791 BuildPhase $(BUILD_PHASE) : $(1) : $(PREVIOUS_BUILD_PHASE) ; 3792 BUILD_PHASE_PRODUCTS = $(INNER_PRODUCT) ; 3793 } 3794 for VARIANT in $(BUILD_VARIANTS) { 3795 # add to linked files, including java .jar files even when there are no native object files! 3796 # This was never questioned, but the long comment was added after this 3797 # step was repeatedly moved outside this block by integration errors. 3798 LINKED_FILES_$(VARIANT) += $(2) ; 3799 3800 # only link if there are object files 3801 if $(OBJECT_FILES_$(VARIANT)) { 3802 if ! ( $(PRODUCT_TYPE) = Library && $(LIBRARY_STYLE) = STATIC ) { 3803 SINGLE_MODULE default = YES ; 3804 } 3805 # define products 3806 if $(PRODUCT_TYPE) = Tool || $(PRODUCT_TYPE) = Library { 3807 # simple product 3808 INNER_PRODUCT default = $(1:G=) ; 3809 INNER_PRODUCT_$(VARIANT) default = $(INNER_PRODUCT)$(VARIANT_SUFFIX_$(VARIANT)) ; 3810 INNER_PRODUCT_LINK_$(VARIANT) default = ; 3811 ProductFile $(INNER_PRODUCT_$(VARIANT)) ; 3812 if $(DEPLOYMENT_POSTPROCESSING) = YES { 3813 SetModeOwnerAndGroup $(INNER_PRODUCT_$(VARIANT):G=ModeOwnerGroup) : $(INNER_PRODUCT_$(VARIANT)) ; 3814 } 3815 } 3816 else { 3817 if $(PRODUCT_TYPE) = Framework { 3818 # versioned bundle 3819 INNER_PRODUCT default = $(1:G=)$(/)Versions$(/)$(FRAMEWORK_VERSION)$(/)$(1:BG=) ; 3820 INNER_PRODUCT_$(VARIANT) default = $(INNER_PRODUCT)$(VARIANT_SUFFIX_$(VARIANT))$(DYNAMIC_LIBRARY_SUFFIX) ; 3821 INNER_PRODUCT_LINK default = $(1:G=)$(/)$(1:BG=) ; 3822 INNER_PRODUCT_LINK_$(VARIANT) default = $(INNER_PRODUCT_LINK)$(VARIANT_SUFFIX_$(VARIANT))$(DYNAMIC_LIBRARY_SUFFIX) ; 3823 INNER_PRODUCT_LINK_PATH default = Versions$(/)Current$(/)$(1:BG=) ; 3824 INNER_PRODUCT_LINK_PATH_$(VARIANT) default = $(INNER_PRODUCT_LINK_PATH)$(VARIANT_SUFFIX_$(VARIANT))$(DYNAMIC_LIBRARY_SUFFIX) ; 3825 } 3826 else { 3827 # standard bundle 3828 if $(BUNDLE_STYLE) = SHALLOW { 3829 INNER_PRODUCT default = $(1:G=)$(/)$(1:BG=) ; 3830 } 3831 else { 3832 INNER_PRODUCT default = $(1:G=)$(/)Contents$(/)MacOS$(/)$(1:BG=) ; 3833 } 3834 INNER_PRODUCT_$(VARIANT) default = $(INNER_PRODUCT)$(VARIANT_SUFFIX_$(VARIANT))$(TOOL_SUFFIX) ; 3835 INNER_PRODUCT_LINK_$(VARIANT) default = ; 3836 } 3837 # inner product should always be ready before the link to it 3838 if $(INNER_PRODUCT_LINK_$(VARIANT)) { 3839 DEPENDS $(INNER_PRODUCT_LINK_$(VARIANT)) : $(INNER_PRODUCT_$(VARIANT)) ; 3840 } 3841 # inner product directory needed for all bundle types 3842 INNER_PRODUCT_DIR_$(VARIANT) = $(INNER_PRODUCT_$(VARIANT):D) ; 3843 if ! $(INNER_PRODUCT_DIR_$(VARIANT)) in $(PRODUCT_FILES) { 3844 Mkdir $(INNER_PRODUCT_DIR_$(VARIANT)) ; 3845 ProductFile $(INNER_PRODUCT_DIR_$(VARIANT)) ; 3846 } 3847 if $(INNER_PRODUCT_$(VARIANT)) && $(INNER_PRODUCT_DIR_$(VARIANT)) { 3848 DEPENDS $(INNER_PRODUCT_$(VARIANT)) : $(INNER_PRODUCT_DIR_$(VARIANT)) ; 3849 } 3850 # optionally make inner product dir aside 3851 if $(ASIDE_DIR) { 3852 ASIDE_INNER_PRODUCT_DIR_$(VARIANT) = $(INNER_PRODUCT_DIR_$(VARIANT):G=aside) ; 3853 if ! $(ASIDE_INNER_PRODUCT_DIR_$(VARIANT)) in $(PRODUCT_FILES) { 3854 Mkdir $(ASIDE_INNER_PRODUCT_DIR_$(VARIANT)) ; 3855 ProductFileAside $(ASIDE_INNER_PRODUCT_DIR_$(VARIANT)) ; 3856 } 3857 } 3858 } 3859 # Link inner product 3860 # By default single module linking is done for all but static libraries. 3861 # If using Interfacer, then a master object file is generated instead. 3862 # Static libraries have ranlib run on them after all other steps are complete. 3863 if $(GENERATE_HEADERS) = YES || $(GENERATE_EXPORT_SETS_AND_GLUE) = YES || $(CFM_BRIDGE) = YES { 3864 GENERATE_MASTER_OBJECT_FILE default = YES ; 3865 } 3866 if $(GENERATE_MASTER_OBJECT_FILE) = YES { 3867 SINGLE_MODULE = NO ; 3868 } 3869 LINK_FILE_LIST_$(VARIANT) on $(INNER_PRODUCT_$(VARIANT)) = $(FILE_LIST_$(VARIANT)) ; 3870 if $(PRODUCT_TYPE) = Tool || $(PRODUCT_TYPE) = Application { 3871 # stand alone executable 3872 if $(GENERATE_MASTER_OBJECT_FILE) = YES { 3873 ProcessSingleObjectLink $(INNER_PRODUCT_$(VARIANT)) : $(LINKED_FILES_$(VARIANT)) : StandaloneExecutable ; 3874 } 3875 else { 3876 StandaloneExecutable $(INNER_PRODUCT_$(VARIANT)) : $(LINKED_FILES_$(VARIANT)) ; 3877 } 3878 } 3879 else { 3880 if $(LIBRARY_STYLE) = STATIC && $(KERNEL_MODULE) != YES { 3881 # static library 3882 if $(GENERATE_MASTER_OBJECT_FILE) = YES { 3883 ProcessSingleObjectLink $(INNER_PRODUCT_$(VARIANT)) : $(LINKED_FILES_$(VARIANT)) : StaticLibrary ; 3884 } 3885 else { 3886 StaticLibrary $(INNER_PRODUCT_$(VARIANT)) : $(LINKED_FILES_$(VARIANT)) ; 3887 } 3888 } 3889 else { 3890 # dylibs, bundles, frameworks, and kernel extensions 3891 if $(GENERATE_MASTER_OBJECT_FILE) = YES { 3892 ProcessSingleObjectLink $(INNER_PRODUCT_$(VARIANT)) : $(LINKED_FILES_$(VARIANT)) : DynamicLibrary ; 3893 } 3894 else { 3895 DynamicLibrary $(INNER_PRODUCT_$(VARIANT)) : $(LINKED_FILES_$(VARIANT)) ; 3896 } 3897 } 3898 } 3899 ProductFile $(INNER_PRODUCT_$(VARIANT)) ; 3900 DEPENDS $(INNER_PRODUCT_$(VARIANT)) : $(TARGET_BUILD_DIR) ; 3901 # optionally copy inner product aside 3902 if $(ASIDE_DIR) { 3903 ASIDE_INNER_PRODUCT_$(VARIANT) = $(INNER_PRODUCT_$(VARIANT):G=aside) ; 3904 ProductFileAside $(ASIDE_INNER_PRODUCT_$(VARIANT)) ; 3905 PBXCp $(ASIDE_INNER_PRODUCT_$(VARIANT)) : $(INNER_PRODUCT_$(VARIANT)) ; 3906 if $(ASIDE_INNER_PRODUCT_DIR_$(VARIANT)) { 3907 DEPENDS $(ASIDE_INNER_PRODUCT_$(VARIANT)) : $(ASIDE_INNER_PRODUCT_DIR_$(VARIANT)) ; 3908 } 3909 } 3910 # preen 3911 if $(DEPLOYMENT_POSTPROCESSING) = YES && $(UNSTRIPPED_PRODUCT) != YES { 3912 STRIPPED_PRODUCT_$(VARIANT) default = $(INNER_PRODUCT_$(VARIANT):G=strip) ; 3913 DEPENDS $(STRIPPED_PRODUCT_$(VARIANT)) : $(INNER_PRODUCT_$(VARIANT)) ; 3914 if $(PRODUCT_TYPE) != Tool && $(PRODUCT_TYPE) != Application { 3915 if ( $(PRODUCT_TYPE) = Bundle 3916 || ( $(PRODUCT_TYPE) = Library && $(LIBRARY_STYLE) = BUNDLE ) ) 3917 && $(KERNEL_MODULE) != YES { 3918 STRIPFLAGS default = -x ; 3919 } 3920 else { 3921 STRIPFLAGS default = -S ; 3922 } 3923 } 3924 if $(SEPARATE_STRIP) = YES 3925 || ( $(PRODUCT_TYPE) = Library && $(LIBRARY_STYLE) = STATIC ) 3926 || ( $(STRIPFLAGS) && $(STRIPFLAGS) != -s && $(STRIPFLAGS) != -S && $(STRIPFLAGS) != -x ) { 3927 # static libraries and products with nontrivial STRIPFLAGS get an explicit strip call 3928 Strip $(STRIPPED_PRODUCT_$(VARIANT)) ; 3929 if $(PRODUCT_TYPE) = Library && $(LIBRARY_STYLE) = STATIC { 3930 Ranlib $(STRIPPED_PRODUCT_$(VARIANT)) ; 3931 } 3932 ProductFile $(STRIPPED_PRODUCT_$(VARIANT)) ; 3933 } 3934 else { 3935 # all other products get -s or -S supplied to the linker depending on basic STRIPFLAGS usage 3936 if $(STRIPFLAGS) = -S { 3937 FLAGS.o on $(INNER_PRODUCT_$(VARIANT)) += -Wl,-S ; 3938 } 3939 else { 3940 if $(STRIPFLAGS) = -x { 3941 FLAGS.o on $(INNER_PRODUCT_$(VARIANT)) += -Wl,-x ; 3942 } 3943 else { 3944 FLAGS.o on $(INNER_PRODUCT_$(VARIANT)) += -s ; 3945 } 3946 } 3947 } 3948 } 3949 # make inner product symlink, if any 3950 if $(INNER_PRODUCT_LINK_$(VARIANT)) { 3951 SymLink $(INNER_PRODUCT_LINK_$(VARIANT)) : $(INNER_PRODUCT_LINK_PATH_$(VARIANT)) ; 3952 ProductFile $(INNER_PRODUCT_LINK_$(VARIANT)) ; 3953 DEPENDS $(INNER_PRODUCT_LINK_$(VARIANT)) : $(INNER_PRODUCT_$(VARIANT)) ; 3954 # optionally copy inner product link aside 3955 if $(ASIDE_DIR) { 3956 ASIDE_INNER_PRODUCT_LINK_$(VARIANT) = $(INNER_PRODUCT_LINK_$(VARIANT):G=aside) ; 3957 ProductFileAside $(ASIDE_INNER_PRODUCT_LINK_$(VARIANT)) ; 3958 SymLink $(ASIDE_INNER_PRODUCT_LINK_$(VARIANT)) : $(INNER_PRODUCT_LINK_PATH_$(VARIANT)) ; 3959 DEPENDS $(ASIDE_INNER_PRODUCT_LINK_$(VARIANT)) : $(ASIDE_INNER_PRODUCT_$(VARIANT)) ; 3960 DEPENDS $(ASIDE_INNER_PRODUCT_LINK_$(VARIANT)) : $(ASIDE_INNER_PRODUCT_DIR_$(VARIANT)) ; 3961 } 3962 } 3963 # edit symbols 3964 # Symbol editing is done directly with the product with linker flags if possible 3965 # unless a master object file is generated in which case that is edited prior to linking. 3966 if $(EXPORTED_SYMBOLS_FILE) && $(GENERATE_MASTER_OBJECT_FILE) != YES { 3967 if $(PRODUCT_TYPE) = Tool || $(PRODUCT_TYPE) = Application 3968 || ( $(PRODUCT_TYPE) = Library && $(LIBRARY_STYLE) != DYNAMIC ) { 3969 # !!!:cmolick:20021025 edit using nmedit after the link 3970 EditSymbols $(INNER_PRODUCT_$(VARIANT)) : $(EXPORTED_SYMBOLS_FILE) ; 3971 } 3972 else { 3973 # !!!:cmolick:20021025 attempt to use linker flag 3974 FLAGS.o on $(INNER_PRODUCT_$(VARIANT)) += -Wl,-exported_symbols_list $(EXPORTED_SYMBOLS_FILE) ; 3975 DEPENDS $(INNER_PRODUCT_$(VARIANT)) : $(EXPORTED_SYMBOLS_FILE) ; 3976 } 3977 } 3978 # static libraries must have ranlib run on them after all else 3979 if $(PRODUCT_TYPE) = Library && $(LIBRARY_STYLE) = STATIC { 3980 RANLIB_INNER_PRODUCT_$(VARIANT) default = $(INNER_PRODUCT_$(VARIANT):G=ranlib) ; 3981 # ranlib depends on link, strip, modeownergroup 3982 DEPENDS $(RANLIB_INNER_PRODUCT_$(VARIANT)) : $(INNER_PRODUCT_$(VARIANT)) ; 3983 if $(STRIPPED_PRODUCT_$(VARIANT)) { 3984 DEPENDS $(RANLIB_INNER_PRODUCT_$(VARIANT)) : $(STRIPPED_PRODUCT_$(VARIANT)) ; 3985 } 3986 ProductFile $(RANLIB_INNER_PRODUCT_$(VARIANT)) ; 3987 } 3988 if $(GENERATE_MASTER_OBJECT_FILE) != YES { 3989 # Add prelink flags and libraries to link flags if nonempty 3990 # Because -keep_private_externs was typically specific to prelinking, it is not carried over. 3991 for _PRELINK_FLAG in $(PRELINK_FLAGS) { 3992 if $(_PRELINK_FLAG) != -keep_private_externs { 3993 FLAGS.o on $(INNER_PRODUCT_$(VARIANT)) += $(_PRELINK_FLAG) ; 3994 } 3995 } 3996 for _PRELINK_LIB in $(PRELINK_LIBS) { 3997 if $(_PRELINK_LIB) != -keep_private_externs { 3998 FLAGS.o on $(INNER_PRODUCT_$(VARIANT)) += $(_PRELINK_LIB) ; 3999 } 4000 } 4001 } 4002 # Basic link options determine if this is kext, bundle, or library 4003 if $(KERNEL_MODULE) = YES { 4004 MODULE_OBJECT_PATH = $(OBJECT_FILE_DIR_$(VARIANT))$(/)$(MODULE_OBJECT_FILE_$(VARIANT)) ; 4005 FLAGS.o on $(INNER_PRODUCT_$(VARIANT)) += -static -nostdlib -r -lkmodc++ "$(MODULE_OBJECT_PATH)" -lkmod -lcc_kext ; 4006 } 4007 else { 4008 # Options for products that are not bundles or static libraries 4009 if $(PRODUCT_TYPE) != Bundle 4010 && ! ( $(PRODUCT_TYPE) = Library && ( $(LIBRARY_STYLE) = BUNDLE || $(LIBRARY_STYLE) = STATIC ) ) { 4011 if $(PREBINDING) = YES { 4012 FLAGS.o on $(INNER_PRODUCT_$(VARIANT)) += -prebind ; 4013 } 4014 if $(SINGLE_MODULE) = YES && $(PRODUCT_TYPE) != Tool && $(PRODUCT_TYPE) != Application { 4015 FLAGS.o on $(INNER_PRODUCT_$(VARIANT)) += -Wl,-single_module ; 4016 } 4017 } 4018 # Options relating to the type of library desired as output 4019 if $(PRODUCT_TYPE) = Bundle 4020 || ( $(PRODUCT_TYPE) = Library && $(LIBRARY_STYLE) = BUNDLE ) { 4021 FLAGS.o on $(INNER_PRODUCT_$(VARIANT)) += -bundle ; 4022 } else { 4023 if $(PRODUCT_TYPE) = Framework 4024 || ( $(PRODUCT_TYPE) = Library && $(LIBRARY_STYLE) = DYNAMIC ) { 4025 FLAGS.o on $(INNER_PRODUCT_$(VARIANT)) += -dynamiclib ; 4026 } 4027 else { 4028 if $(PRODUCT_TYPE) = Library && $(LIBRARY_STYLE) = STATIC { 4029 FLAGS.o on $(INNER_PRODUCT_$(VARIANT)) += -static ; 4030 } 4031 } 4032 } 4033 # Dynamic library link options set version and installed name 4034 if ( $(PRODUCT_TYPE) = Library && $(LIBRARY_STYLE) = DYNAMIC ) 4035 || $(PRODUCT_TYPE) = Framework { 4036 if $(DYLIB_COMPATIBILITY_VERSION) { 4037 FLAGS.o on $(INNER_PRODUCT_$(VARIANT)) += -compatibility_version "$(DYLIB_COMPATIBILITY_VERSION)" ; 4038 } 4039 if $(DYLIB_CURRENT_VERSION) { 4040 FLAGS.o on $(INNER_PRODUCT_$(VARIANT)) += -current_version "$(DYLIB_CURRENT_VERSION)" ; 4041 } 4042 if ! $(DYLIB_INSTALL_NAME_BASE) { 4043 if $(INSTALL_PATH) { 4044 DYLIB_INSTALL_NAME_BASE = $(INSTALL_PATH) ; 4045 } 4046 } 4047 if $(DYLIB_INSTALL_NAME_BASE) { 4048 DYLIB_INSTALLED_NAME_$(VARIANT) default = $(DYLIB_INSTALL_NAME_BASE)$(/)$(INNER_PRODUCT_$(VARIANT):G=) ; 4049 INSTALLED_NAME_FLAG on $(INNER_PRODUCT_$(VARIANT)) = -install_name \"`echo \"$(DYLIB_INSTALLED_NAME_$(VARIANT))\" | $(SED) 's!//*!/!g'`\" ; 4050 } 4051 } 4052 } 4053 # reduce warnings for multiarchitecture builds 4054 if $(WARNING_LDFLAGS) && ( $(PRODUCT_TYPE) = Tool || $(PRODUCT_TYPE) = Application ) { 4055 FLAGS.o on $(INNER_PRODUCT_$(VARIANT)) += $(WARNING_LDFLAGS) ; 4056 } 4057 # profiling link option 4058 if $(PROFILING_CODE) = YES { 4059 FLAGS.o on $(INNER_PRODUCT_$(VARIANT)) += -pg ; 4060 } 4061 # other link options 4062 if $(OTHER_LDFLAGS_$(VARIANT)) { 4063 FLAGS.o on $(INNER_PRODUCT_$(VARIANT)) += $(OTHER_LDFLAGS_$(VARIANT)) ; 4064 } 4065 } 4066 else { 4067 # no object files present, indicating pure Java 4068 if $(PRODUCT_TYPE) = Framework { 4069 if $(CURRENT_VERSION_LINK) { 4070 INNER_PRODUCT_$(VARIANT) default = $(1:G=)$(/)Versions$(/)$(FRAMEWORK_VERSION)$(/)$(1:B)$(VARIANT_SUFFIX_$(VARIANT))$(DYNAMIC_LIBRARY_SUFFIX) ; 4071 INNER_PRODUCT_LINK_$(VARIANT) default = $(1:G=)$(/)$(1:BG=)$(VARIANT_SUFFIX_$(VARIANT))$(DYNAMIC_LIBRARY_SUFFIX) ; 4072 INNER_PRODUCT_LINK_PATH_$(VARIANT) default = Versions$(/)Current$(/)$(1:BG=)$(VARIANT_SUFFIX_$(VARIANT))$(DYNAMIC_LIBRARY_SUFFIX) ; 4073 # inner product link 4074 SymLink $(INNER_PRODUCT_LINK_$(VARIANT)) : $(INNER_PRODUCT_LINK_PATH_$(VARIANT)) ; 4075 ProductFile $(INNER_PRODUCT_LINK_$(VARIANT)) ; 4076 NOUPDATE $(INNER_PRODUCT_LINK_$(VARIANT)) ; 4077 } 4078 else { 4079 INNER_PRODUCT_$(VARIANT) default = $(1:G=)$(/)$(1:BG=)_$(VARIANT)$(DYNAMIC_LIBRARY_SUFFIX) ; 4080 } 4081 ProductFile $(INNER_PRODUCT_$(VARIANT)) ; 4082 if $(DYLIB_COMPATIBILITY_VERSION) { 4083 DYLIB_VERSION_FLAGS on $(INNER_PRODUCT_$(VARIANT)) += -compatibility_version "$(DYLIB_COMPATIBILITY_VERSION)" ; 4084 } 4085 else { 4086 DYLIB_VERSION_FLAGS on $(INNER_PRODUCT_$(VARIANT)) += -compatibility_version 1 ; 4087 } 4088 if $(DYLIB_CURRENT_VERSION) { 4089 DYLIB_VERSION_FLAGS on $(INNER_PRODUCT_$(VARIANT)) += -current_version "$(DYLIB_CURRENT_VERSION)" ; 4090 } 4091 else { 4092 DYLIB_VERSION_FLAGS on $(INNER_PRODUCT_$(VARIANT)) += -current_version 1 ; 4093 } 4094 if ! $(DYLIB_INSTALL_NAME_BASE) { 4095 if $(INSTALL_PATH) { 4096 DYLIB_INSTALL_NAME_BASE = $(INSTALL_PATH) ; 4097 } 4098 } 4099 GenerateFrameworkStub $(INNER_PRODUCT_$(VARIANT)) ; 4100 INNER_PRODUCT_DIR = $(INNER_PRODUCT_$(VARIANT):D) ; 4101 if ! $(INNER_PRODUCT_DIR) in $(PRODUCT_FILES) { 4102 Mkdir $(INNER_PRODUCT_DIR) ; 4103 ProductFile $(INNER_PRODUCT_DIR) ; 4104 DEPENDS $(INNER_PRODUCT_$(VARIANT)) : $(INNER_PRODUCT_DIR) ; 4105 } 4106 if $(INNER_PRODUCT_LINK_$(VARIANT)) { 4107 SymLink $(INNER_PRODUCT_LINK_$(VARIANT)) : $(INNER_PRODUCT_LINK_PATH_$(VARIANT)) ; 4108 NOUPDATE $(INNER_PRODUCT_LINK_$(VARIANT)) ; 4109 ProductFile $(INNER_PRODUCT_LINK_$(VARIANT)) ; 4110 } 4111 } 4112 } 4113 # Java processing compatible with the presense of object files 4114 if $(COMPILED_JAVA) { 4115 # provide stub executable if necessary 4116 if $(JAVA_ONLY) = YES { 4117 INNER_PRODUCT_$(VARIANT) default = $(1:G=)$(/)Contents$(/)MacOS$(/)$(1:BG=) ; 4118 # must first make subfolder and depend on that 4119 INNER_PRODUCT_SUBDIR = $(INNER_PRODUCT_$(VARIANT):D) ; 4120 if ! $(INNER_PRODUCT_SUBDIR) in $(PRODUCT_FILES) { 4121 Mkdir $(INNER_PRODUCT_SUBDIR) ; 4122 ProductFile $(INNER_PRODUCT_SUBDIR) ; 4123 } 4124 Cp $(INNER_PRODUCT_$(VARIANT)) : $(JAVA_APP_STUB) ; 4125 ProductFile $(INNER_PRODUCT_$(VARIANT)) ; 4126 } 4127 } 4128 # Add jar/zip files that are in the link phase to the classpath 4129 if $(OTHER_JAVA_CLASS_PATH) { 4130 export LINKED_CLASS_ARCHIVES = :"$(OTHER_JAVA_CLASS_PATH)" ; 4131 } 4132 else { 4133 export LINKED_CLASS_ARCHIVES = "" ; 4134 } 4135 for JAVA_CLASS_SEARCH_PATH in $(JAVA_CLASS_SEARCH_PATHS) { 4136 LINKED_CLASS_ARCHIVES = "$(LINKED_CLASS_ARCHIVES):$(JAVA_CLASS_SEARCH_PATH)" ; 4137 } 4138 local ARCHIVE ; 4139 4140 for ARCHIVE in $(LINKED_FILES_$(VARIANT)) { 4141 switch $(ARCHIVE) { 4142 case *.framework : 4143 local FW_SUBDIR ; 4144 for FW_SUBDIR in $(JAVA_FRAMEWORK_RESOURCES_DIRS) { 4145 LINKED_CLASS_ARCHIVES = $(LINKED_CLASS_ARCHIVES):$(ARCHIVE)$(/)$(FW_SUBDIR)$(/)Java ; 4146 JAVA_FRAMEWORK_JARS += $(ARCHIVE)$(/)$(FW_SUBDIR)$(/)Java ; 4147 } 4148 case *.jar : 4149 LINKED_CLASS_ARCHIVES = $(LINKED_CLASS_ARCHIVES):$(ARCHIVE) ; 4150 if Merge in $($(ARCHIVE)_ATTRIBUTES) { 4151 # merge archive contents by unpacking them into hierarchy 4152 local DESTINATION_TARGET = $(CLASS_FILE_DIR:G=Unarchive$(ARCHIVE)) ; 4153 NOTFILE $(DESTINATION_TARGET) ; 4154 DEPENDS $(DESTINATION_TARGET) : $(JAVA_COMPILE_TARGET) ; 4155 if $(MERGED_ARCHIVES) { 4156 MERGED_ARCHIVES += $(DESTINATION_TARGET) ; 4157 } 4158 else { 4159 MERGED_ARCHIVES = $(DESTINATION_TARGET) ; 4160 } 4161 Unarchive $(DESTINATION_TARGET) : $(ARCHIVE) ; 4162 } 4163 case *.zip : 4164 LINKED_CLASS_ARCHIVES = $(LINKED_CLASS_ARCHIVES):$(ARCHIVE) ; 4165 if Merge in $($(ARCHIVE)_ATTRIBUTES) { 4166 # merge archive contents by unpacking them into hierarchy 4167 local DESTINATION_TARGET = $(CLASS_FILE_DIR:G=Unarchive$(ARCHIVE)) ; 4168 NOTFILE $(DESTINATION_TARGET) ; 4169 DEPENDS $(DESTINATION_TARGET) : $(JAVA_COMPILE_TARGET) ; 4170 if $(MERGED_ARCHIVES) { 4171 MERGED_ARCHIVES += $(DESTINATION_TARGET) ; 4172 } 4173 else { 4174 MERGED_ARCHIVES = $(DESTINATION_TARGET) ; 4175 } 4176 Unarchive $(DESTINATION_TARGET) : $(ARCHIVE) ; 4177 } 4178 } 4179 } 4180 # generate an archive if there are compiled or merged classes 4181 if $(COMPILED_JAVA) || $(MERGED_ARCHIVES) || $(COPIED_JAVA_RESOURCES) { 4182 if $(JAVA_ARCHIVE_CLASSES) != NO { 4183 # java archive suffix applies to applications and frameworks 4184 if $(JAVA_ARCHIVE_TYPE) = JAR { 4185 CLASS_ARCHIVE_SUFFIX default = .jar ; 4186 } 4187 else { 4188 if $(JAVA_ARCHIVE_TYPE) = ZIP { 4189 CLASS_ARCHIVE_SUFFIX default = .zip ; 4190 } 4191 } 4192 if ( $(PRODUCT_TYPE) = Bundle 4193 || $(PRODUCT_TYPE) = Application 4194 || $(PRODUCT_TYPE) = Framework ) { 4195 # Assume bundled products with object files are Cocoa 4196 CLASS_ARCHIVE default = $(RESOURCE_DIR)$(/)Java$(/)$(1:B)$(CLASS_ARCHIVE_SUFFIX) ; 4197 ProductFile $(CLASS_ARCHIVE) ; 4198 } 4199 else { 4200 CLASS_ARCHIVE default = $(1:B:G=)$(CLASS_ARCHIVE_SUFFIX) ; 4201 # It is critical for the class archive to be declared 4202 # a product file before any symlinks to it are made 4203 # which would conditionally involved declaring the 4204 # symbolic link content to not be a file. 4205 ProductFile $(CLASS_ARCHIVE) ; 4206 # ref. w/suffix for tool or library in deployment location 4207 if $(DEPLOYMENT_LOCATION) = YES { 4208 _ARCHIVE_REFERENCE default = $(BUILT_PRODUCTS_DIR:G=ArchiveRef)$(/)$(CLASS_ARCHIVE) ; 4209 SymLink $(_ARCHIVE_REFERENCE) : $(CLASS_ARCHIVE) ; 4210 DEPENDS $(_ARCHIVE_REFERENCE) : $(BUILT_PRODUCTS_DIR) ; 4211 DEPENDS $(1) : $(_ARCHIVE_REFERENCE) ; 4212 } 4213 # Make a link to the product without extension 4214 # to allow for references missing extension. 4215 _SUFFIX_FREE_ARCHIVE_REFERENCE = $(BUILT_PRODUCTS_DIR:G=SuffixFreeArchiveRef)$(/)$(CLASS_ARCHIVE:S=) ; 4216 SymLink $(_SUFFIX_FREE_ARCHIVE_REFERENCE) : $(CLASS_ARCHIVE) ; 4217 DEPENDS $(_SUFFIX_FREE_ARCHIVE_REFERENCE) : $(BUILT_PRODUCTS_DIR) ; 4218 DEPENDS $(1) : $(_SUFFIX_FREE_ARCHIVE_REFERENCE) ; 4219 } 4220 # class archive depends on target build dir 4221 DEPENDS $(CLASS_ARCHIVE) : $(TARGET_BUILD_DIR) ; 4222 # class archive depends on class archive dir (if defined) 4223 CLASS_ARCHIVE_DIR = $(CLASS_ARCHIVE:D:G=) ; 4224 if $(CLASS_ARCHIVE_DIR) && ! $(CLASS_ARCHIVE_DIR) in $(PRODUCT_FILES) { 4225 Mkdir $(CLASS_ARCHIVE_DIR) ; 4226 ProductFile $(CLASS_ARCHIVE_DIR) ; 4227 } 4228 # class files unknown, so archive depends on java compile log 4229 ClassArchive $(CLASS_ARCHIVE) : $(CLASS_FILE_DIR) ; 4230 if $(MERGED_ARCHIVES) { 4231 DEPENDS $(CLASS_ARCHIVE) : $(MERGED_ARCHIVES) ; 4232 } 4233 if $(COMPILED_JAVA) { 4234 DEPENDS $(CLASS_ARCHIVE) : $(JAVA_COMPILE_TARGET) ; 4235 } 4236 if $(COPIED_JAVA_RESOURCES) { 4237 DEPENDS $(CLASS_ARCHIVE) : $(COPIED_JAVA_RESOURCES) ; 4238 } 4239 } 4240 if $(JAVA_ARCHIVE_CLASSES) != YES { 4241 # !!!:cmolick:20020123 product class file dir not always made?! 4242 Mkdir $(PRODUCT_CLASS_FILE_DIR) ; 4243 ProductFile $(PRODUCT_CLASS_FILE_DIR) ; 4244 Ditto $(PRODUCT_CLASS_FILE_DIR) : $(CLASS_FILE_DIR) ; 4245 if $(MERGED_ARCHIVES) { 4246 DEPENDS $(PRODUCT_CLASS_FILE_DIR) : $(MERGED_ARCHIVES) ; 4247 } 4248 else { 4249 DEPENDS $(PRODUCT_CLASS_FILE_DIR) : $(JAVA_COMPILE_TARGET) ; 4250 } 4251 } 4252 } 4253 # Export the path to the inner product, if any. 4254 export INNER_PRODUCT_SUBPATH = $(INNER_PRODUCT:G=) ; 4255 # Build phasing bookkeeping 4256 if $(_BUILD_PHASING) = YES { 4257 if $(BUILD_PHASE_PRODUCTS) { 4258 DEPENDS $(BUILD_PHASE) : $(BUILD_PHASE_PRODUCTS) ; 4259 } 4260 PREVIOUS_BUILD_PHASE = $(BUILD_PHASE) ; 4261 } 4262 } 4263 } 4264} 4265 4266rule ProcessFrameworkOrLibrary 4267{ 4268 for VARIANT in $(BUILD_VARIANTS) { 4269 LINKED_FILES_$(VARIANT) += $(2) ; 4270 } 4271} 4272 4273# ProcessRezFiles <product> <rez and resmerger input files> 4274# 4275# Processes Rez and ResMerger input files, or if there are none 4276# and type and creator are set uses SetFile to set type and creator. 4277rule ProcessRezFiles 4278{ 4279 if ( build in $(BUILD_COMPONENTS) || source in $(BUILD_COMPONENTS) ) 4280 && ( $(ARCHS) || $(NULL_BUILD_IF_NO_VALID_ARCH) != YES ) { 4281 local FILE ; 4282 if $(_BUILD_PHASING) = YES { 4283 PhaseTarget BUILD_PHASE : $(1) : RezResourceManagerFiles ; 4284 BuildPhase $(BUILD_PHASE) : $(1) : $(PREVIOUS_BUILD_PHASE) ; 4285 BUILD_PHASE_PRODUCTS = ; 4286 } 4287 if $(2) { 4288 for FILE in $(2) { 4289 if $(_BUILD_PHASING) = YES { 4290 ProcessRezFile $(BUILD_PHASE) : $(FILE) ; 4291 } 4292 else { 4293 ProcessRezFile $(1) : $(FILE) ; 4294 } 4295 } 4296 } 4297 else { 4298 if ( $(MACOS_TYPE) || $(MACOS_CREATOR) ) && $(REZ_EXECUTABLE) = YES { 4299 local RESOURCE_FORK = $(INNER_PRODUCT:G=ResourceFork) ; 4300 if ! $(INNER_PRODUCT) in $(PRESERVE_RESOURCES) { 4301 PRESERVE_RESOURCES += $(INNER_PRODUCT) ; 4302 } 4303 ProductFile $(RESOURCE_FORK) ; 4304 if $(ALWAYS_REZ) = YES { 4305 ALWAYS $(RESOURCE_FORK) ; 4306 } 4307 SetFile $(RESOURCE_FORK) ; 4308 } 4309 } 4310 if $(_BUILD_PHASING) = YES { 4311 if $(BUILD_PHASE_PRODUCTS) { 4312 DEPENDS $(BUILD_PHASE) : $(BUILD_PHASE_PRODUCTS) ; 4313 } 4314 PREVIOUS_BUILD_PHASE = $(BUILD_PHASE) ; 4315 } 4316 } 4317} 4318 4319# ProcessRezFile <product or phase> <rez or resmerger input file> 4320# 4321# Sets up the compile of one Rez or ResMerger input file. 4322# RESOURCE_MANAGER_RESOURCE_COLLECTOR_DIR folder for resource collectors 4323# RESOURCE_MANAGER_RESOURCE_COLLECTOR resource collector 4324# RESOURCE_MANAGER_RESOURCE_COLLECTOR_$(REGION) localized collector 4325# RESOURCE_MANAGER_RESOURCE final resource destination 4326# RESOURCE_MANAGER_RESOURCE_$(REGION)_DIR localized final folder 4327# RESOURCE_MANAGER_RESOURCE_$(REGION) localized final destination 4328rule ProcessRezFile 4329{ 4330 if source in $(BUILD_COMPONENTS) { 4331 local REZ_SOURCE_COPY ; 4332 local REZ_SOURCE_DIR ; 4333 # make directory first if necessary 4334 if $(2:D) { 4335 REZ_SOURCE_DIR = $(SOURCE_DIR)/$(2:D:G=) ; 4336 Mkdir $(REZ_SOURCE_DIR) ; 4337 REZ_SOURCE_COPY = $(REZ_SOURCE_DIR)/$(2:D=:G=) ; 4338 DEPENDS $(REZ_SOURCE_COPY) : $(REZ_SOURCE_DIR) ; 4339 } 4340 else { 4341 REZ_SOURCE_COPY = $(SOURCE_DIR)/$(2:D=:G=) ; 4342 DEPENDS $(REZ_SOURCE_COPY) : $(SOURCE_DIR) ; 4343 Mkdir $(SOURCE_DIR) ; 4344 } 4345 # copy rez files to source location 4346 Cp $(REZ_SOURCE_COPY) : $(2) ; 4347 if $(_BUILD_PHASING) = YES { 4348 BUILD_PHASE_PRODUCTS += $(REZ_SOURCE_COPY) ; 4349 } 4350 } 4351 if build in $(BUILD_COMPONENTS) { 4352 local REGION = $($(2)_REGION) ; 4353 # scan for header files 4354 if $(ENABLE_HEADER_DEPENDENCIES) != NO && $(DO_HEADER_SCANNING_IN_JAM) = YES { 4355 HDRRULE on $(2) = ProcessC.HdrRule ; 4356 HDRSCAN on $(2) = $(HDRPATTERN) ; 4357 } 4358 # all resources require a folder to hold any collector 4359 if ! $(RESOURCE_MANAGER_RESOURCE_COLLECTOR_DIR) { 4360 RESOURCE_MANAGER_RESOURCE_COLLECTOR_DIR = $(TEMP_DIR)$(/)ResourceManagerResources ; 4361 Mkdir $(RESOURCE_MANAGER_RESOURCE_COLLECTOR_DIR) ; 4362 ProductFile $(RESOURCE_MANAGER_RESOURCE_COLLECTOR_DIR) ; 4363 } 4364 if $(REZ_EXECUTABLE) = YES { 4365 # Optionally accumulate ResourceManager resources 4366 # on a resource fork of the executable 4367 PRESERVE_RESOURCES += $(INNER_PRODUCT) ; 4368 if ! $(RESOURCE_MANAGER_RESOURCE_COLLECTOR) { 4369 RESOURCE_MANAGER_RESOURCE_COLLECTOR = $(INNER_PRODUCT:BG=ResourceManagerResourceCollector) ; 4370 DEPENDS $(RESOURCE_MANAGER_RESOURCE_COLLECTOR) : $(RESOURCE_MANAGER_RESOURCE_COLLECTOR_DIR) ; 4371 } 4372 if $(2:S) = ".r" { 4373 RezCollector $(RESOURCE_MANAGER_RESOURCE_COLLECTOR) : $(2) ; 4374 } else { 4375 ResMergerCollector $(RESOURCE_MANAGER_RESOURCE_COLLECTOR) : $(2) ; 4376 } 4377 # The collector must be declared a product file 4378 # only after the first Collector rule invocation 4379 # to correctly initialize the collector. 4380 ProductFile $(RESOURCE_MANAGER_RESOURCE_COLLECTOR) ; 4381 # location must be set after ProductFile invocation 4382 LOCATE on $(RESOURCE_MANAGER_RESOURCE_COLLECTOR) = $(RESOURCE_MANAGER_RESOURCE_COLLECTOR_DIR) ; 4383 if ! $(RESOURCE_MANAGER_RESOURCE) { 4384 RESOURCE_MANAGER_RESOURCE = $(INNER_PRODUCT:G=ResourceManagerResource) ; 4385 ProductFile $(RESOURCE_MANAGER_RESOURCE) ; 4386 ResMergerProduct $(RESOURCE_MANAGER_RESOURCE) : $(RESOURCE_MANAGER_RESOURCE_COLLECTOR) ; 4387 } 4388 } 4389 else { 4390 # By default ResourceManager resources are stored in data forks 4391 # as Resources/<product>.rsrc files if non localized, or 4392 # Resources/<region>.lproj/Localized.rsrc files if localized. 4393 if $(REGION) { 4394 # localized resource collector 4395 if ! $(RESOURCE_MANAGER_RESOURCE_COLLECTOR_$(REGION)) { 4396 RESOURCE_MANAGER_RESOURCE_COLLECTOR_$(REGION) = $(REGION).rsrc ; 4397 DEPENDS $(RESOURCE_MANAGER_RESOURCE_COLLECTOR_$(REGION)) : $(RESOURCE_MANAGER_RESOURCE_COLLECTOR_DIR) ; 4398 } 4399 if $(2:S) = ".r" { 4400 RezCollector $(RESOURCE_MANAGER_RESOURCE_COLLECTOR_$(REGION)) : $(2) ; 4401 } else { 4402 ResMergerCollector $(RESOURCE_MANAGER_RESOURCE_COLLECTOR_$(REGION)) : $(2) ; 4403 } 4404 # collector declared product after first Collector rule invocation 4405 ProductFile $(RESOURCE_MANAGER_RESOURCE_COLLECTOR_$(REGION)) ; 4406 # set location only after ProductFile invocation 4407 LOCATE on $(RESOURCE_MANAGER_RESOURCE_COLLECTOR_$(REGION)) = $(RESOURCE_MANAGER_RESOURCE_COLLECTOR_DIR) ; 4408 # localized resource folder 4409 RESOURCE_MANAGER_RESOURCE_$(REGION)_DIR = $(RESOURCE_DIR)$(/)$(REGION).lproj ; 4410 Mkdir $(RESOURCE_MANAGER_RESOURCE_$(REGION)_DIR) ; 4411 ProductFile $(RESOURCE_MANAGER_RESOURCE_$(REGION)_DIR) ; 4412 # localized resource 4413 if ! $(RESOURCE_MANAGER_RESOURCE_$(REGION)) { 4414 RESOURCE_MANAGER_RESOURCE_$(REGION) = $(RESOURCE_DIR)$(/)$(REGION).lproj$(/)Localized.rsrc ; 4415 ProductFile $(RESOURCE_MANAGER_RESOURCE_$(REGION)) ; 4416 # folder for localized resource 4417 RESOURCE_MANAGER_RESOURCE_$(REGION)_DIR = $(RESOURCE_DIR)$(/)$(REGION).lproj ; 4418 Mkdir $(RESOURCE_MANAGER_RESOURCE_$(REGION)_DIR) ; 4419 ProductFile $(RESOURCE_MANAGER_RESOURCE_$(REGION)_DIR) ; 4420 DEPENDS $(RESOURCE_MANAGER_RESOURCE_$(REGION)_DIR) : $(RESOURCE_DIR) ; 4421 # get product from collector 4422 ResMergerProduct $(RESOURCE_MANAGER_RESOURCE_$(REGION)) : $(RESOURCE_MANAGER_RESOURCE_COLLECTOR_$(REGION)) ; 4423 DEPENDS $(RESOURCE_MANAGER_RESOURCE_$(REGION)) : $(RESOURCE_MANAGER_RESOURCE_$(REGION)_DIR) ; 4424 } 4425 } 4426 else { 4427 # nonlocalized resource collector 4428 if ! $(RESOURCE_MANAGER_RESOURCE_COLLECTOR) { 4429 RESOURCE_MANAGER_RESOURCE_COLLECTOR = $(RESOURCE_MANAGER_RESOURCE_COLLECTOR_DIR)$(/)$(1:S=.rsrc:G=) ; 4430 DEPENDS $(RESOURCE_MANAGER_RESOURCE_COLLECTOR) : $(RESOURCE_MANAGER_RESOURCE_COLLECTOR_DIR) ; 4431 } 4432 if $(2:S) = ".r" { 4433 RezCollector $(RESOURCE_MANAGER_RESOURCE_COLLECTOR) : $(2) ; 4434 } else { 4435 ResMergerCollector $(RESOURCE_MANAGER_RESOURCE_COLLECTOR) : $(2) ; 4436 } 4437 # collector declared product after Collector rule invocation 4438 ProductFile $(RESOURCE_MANAGER_RESOURCE_COLLECTOR) ; 4439 # nonlocalized resource 4440 if ! $(RESOURCE_MANAGER_RESOURCE) { 4441 RESOURCE_MANAGER_RESOURCE = $(RESOURCE_DIR)$(/)$(1:S=.rsrc:G=) ; 4442 ProductFile $(RESOURCE_MANAGER_RESOURCE) ; 4443 # get product from collector 4444 ResMergerProduct $(RESOURCE_MANAGER_RESOURCE) : $(RESOURCE_MANAGER_RESOURCE_COLLECTOR) ; 4445 DEPENDS $(RESOURCE_MANAGER_RESOURCE) : $(RESOURCE_DIR) ; 4446 if $(ALWAYS_REZ) = YES { 4447 ALWAYS $(RESOURCE_MANAGER_RESOURCE) ; 4448 } 4449 } 4450 } 4451 4452 if ! $(RESOURCE_DIR) in $(PRODUCT_FILES) { 4453 Mkdir $(RESOURCE_DIR) ; 4454 ProductFile $(RESOURCE_DIR) ; 4455 } 4456 } 4457 # create accompanying link in the case of versioned frameworks 4458 if $(RESOURCE_LINK) 4459 && ! $(RESOURCE_LINK) in $(PRODUCT_FILES) { 4460 SymLink $(RESOURCE_LINK) : $(RESOURCE_LINK_PATH) ; 4461 ProductFile $(RESOURCE_LINK) ; 4462 } 4463 } 4464} 4465 4466rule ProcessScriptBuildPhaseFiles 4467{ 4468 if source in $(BUILD_COMPONENTS) || headers in $(BUILD_COMPONENTS) || build in $(BUILD_COMPONENTS) { 4469 if $(_BUILD_PHASING) = YES { 4470 PhaseTarget BUILD_PHASE : $(1) : Script ; 4471 BuildPhase $(BUILD_PHASE) : $(1) : $(PREVIOUS_BUILD_PHASE) ; 4472 BUILD_PHASE_PRODUCTS = ; 4473 } 4474 if build in $(BUILD_COMPONENTS) 4475 || ( headers in $(BUILD_COMPONENTS) && $(INSTALLHDRS_SCRIPT_PHASE) = YES ) { 4476 SEARCH on $(2) = $(SOURCE_ROOT) $(TEMP_ROOT) ; 4477 PHASE_SCRIPT_EXECUTION = $(2:G=Execution) ; 4478 NOTFILE $(PHASE_SCRIPT_EXECUTION) ; 4479 ALWAYS $(PHASE_SCRIPT_EXECUTION) ; 4480 DEPENDS $(1) : $(PHASE_SCRIPT_EXECUTION) ; 4481 PhaseScriptExecution $(PHASE_SCRIPT_EXECUTION) : $(2) ; 4482 if ! $(PHASE_SCRIPT_EXECUTION) in $(PRODUCT_FILES) { 4483 if $(_BUILD_PHASING) = YES { 4484 BUILD_PHASE_PRODUCTS += $(PHASE_SCRIPT_EXECUTION) ; 4485 } 4486 } 4487 } 4488 if $(_BUILD_PHASING) = YES { 4489 if $(BUILD_PHASE_PRODUCTS) { 4490 DEPENDS $(BUILD_PHASE) : $(BUILD_PHASE_PRODUCTS) ; 4491 if $(PREVIOUS_BUILD_PHASE) { 4492 # !!!:cmolick:20021119 depend on previous phase or products to get timing right? 4493 DEPENDS $(BUILD_PHASE_PRODUCTS) : $(PREVIOUS_BUILD_PHASE) ; 4494 } 4495 } 4496 PREVIOUS_BUILD_PHASE = $(BUILD_PHASE) ; 4497 } 4498 } 4499} 4500 4501rule PhaseScriptExecution 4502{ 4503 JAMSHOULDSETENV on $(1) = YES ; 4504 DEPENDS $(1) : $(2) ; 4505} 4506actions exportvars PhaseScriptExecution 4507{ 4508 echo "=== Script ===" 4509 cat $(2:Q) 4510 echo "--- Output ---" 4511 $(2:Q) 4512 _result=$? 4513 echo "=== Exit code: ${_result} ===" 4514 exit ${_result} 4515} 4516 4517rule ProcessCopyFiles 4518{ 4519 if $(_BUILD_PHASING) = YES { 4520 PhaseTarget BUILD_PHASE : $(1) : CopyFiles ; 4521 BuildPhase $(BUILD_PHASE) : $(1) : $(PREVIOUS_BUILD_PHASE) ; 4522 BUILD_PHASE_PRODUCTS = ; 4523 } 4524 if build in $(BUILD_COMPONENTS) 4525 || ( headers in $(BUILD_COMPONENTS) && $(INSTALLHDRS_COPY_PHASE) = YES ) { 4526 SEARCH on $(2) = $(SOURCE_ROOT) ; 4527 for FILE in $(2) { 4528 ProcessCopyFile $(1) : $(FILE) : $(COPYFILES_DESTINATION_PATH) ; 4529 } 4530 } 4531 if $(_BUILD_PHASING) = YES { 4532 if $(BUILD_PHASE_PRODUCTS) { 4533 DEPENDS $(BUILD_PHASE) : $(BUILD_PHASE_PRODUCTS) ; 4534 } 4535 PREVIOUS_BUILD_PHASE = $(BUILD_PHASE) ; 4536 } 4537} 4538 4539rule ProcessCopyFile 4540{ 4541 if source in $(BUILD_COMPONENTS) { 4542 local SOURCE_COPY ; 4543 local SOURCE_SUBDIR ; 4544 # copy files to source location 4545 # make directory first if necessary 4546 if $(2:D) { 4547 SOURCE_SUBDIR = $(2:D:G=SourceCopy) ; 4548 Mkdir $(SOURCE_SUBDIR) ; 4549 SOURCE_COPY = $(SOURCE_SUBDIR)/$(2:D=:G=) ; 4550 DEPENDS $(SOURCE_COPY) : $(SOURCE_SUBDIR) ; 4551 } 4552 else { 4553 SOURCE_COPY = $(SOURCE_DIR)/$(2:D=:G=) ; 4554 DEPENDS $(SOURCE_COPY) : $(SOURCE_DIR) ; 4555 Mkdir $(SOURCE_DIR) ; 4556 } 4557 Cp $(SOURCE_COPY) : $(2) ; 4558 if $(_BUILD_PHASING) = YES { 4559 BUILD_PHASE_PRODUCTS += $(SOURCE_COPY) ; 4560 } 4561 } 4562 if build in $(BUILD_COMPONENTS) || headers in $(BUILD_COMPONENTS) { 4563 local DESTINATION_DIR = $(3) ; 4564 if ! $(DESTINATION_DIR) in $(PRODUCT_FILES) { 4565 Mkdir $(DESTINATION_DIR) ; 4566 ProductFile $(DESTINATION_DIR) ; 4567 } 4568 local DESTINATION_BASE = $(2:BS) ; 4569 local DESTINATION default = $(DESTINATION_DIR)$(/)$(DESTINATION_BASE) ; 4570 DEPENDS $(DESTINATION) : $(DESTINATION_DIR) ; 4571 DEPENDS $(DESTINATION) : $(2) ; 4572 ProductFile $(DESTINATION) ; 4573 LOCATE on $(DESTINATION) = $(DESTINATION_DIR) ; 4574 PBXCp $(DESTINATION) : $(2) ; 4575 } 4576} 4577 4578rule ProcessJavaResourceFiles 4579{ 4580 if build in $(BUILD_COMPONENTS) { 4581 local FILE ; 4582 if $(_BUILD_PHASING) = YES { 4583 PhaseTarget BUILD_PHASE : $(1) : JavaArchiveFiles ; 4584 BuildPhase $(BUILD_PHASE) : $(1) : $(PREVIOUS_BUILD_PHASE) ; 4585 BUILD_PHASE_PRODUCTS = ; 4586 } 4587 LOCATE on $(2) = $(SOURCE_ROOT) ; 4588 for FILE in $(2) { 4589 ProcessJavaResourceFile $(1) : $(FILE) : $(CLASS_FILE_DIR) ; 4590 } 4591 if $(_BUILD_PHASING) = YES { 4592 if $(BUILD_PHASE_PRODUCTS) { 4593 DEPENDS $(BUILD_PHASE) : $(BUILD_PHASE_PRODUCTS) ; 4594 } 4595 PREVIOUS_BUILD_PHASE = $(BUILD_PHASE) ; 4596 } 4597 } 4598} 4599 4600rule ProcessJavaResourceFile 4601{ 4602 local ARCHIVE_PATH ; 4603 local ARCHIVE_DESTINATION ; 4604 local ARCHIVE_DESTINATION_FILE ; 4605 4606 # copy any other reference - formulate destination first 4607 if $($(2)_JAVA_ARCHIVE_SUBDIR) { 4608 ARCHIVE_DESTINATION_DIR = $(3)$(/)$($(2)_JAVA_ARCHIVE_SUBDIR) ; 4609 } 4610 else { 4611 # if there's no setting, just copy the file to the root of the archive. 4612 ARCHIVE_DESTINATION_DIR = $(3) ; 4613 } 4614 ARCHIVE_DESTINATION_FILE = $(ARCHIVE_DESTINATION_DIR)/$(2:BS) ; 4615 Mkdir $(ARCHIVE_DESTINATION_DIR) ; 4616 ProductFile $(ARCHIVE_DESTINATION_DIR) ; 4617 PBXCp $(ARCHIVE_DESTINATION_FILE:G=populated) : $(2) ; 4618 ProductFile $(ARCHIVE_DESTINATION_FILE:G=populated) ; 4619 DEPENDS $(ARCHIVE_DESTINATION_FILE:G=populated) : $(ARCHIVE_DESTINATION_DIR) ; 4620 4621 # copied content depends on source 4622 DEPENDS $(ARCHIVE_DESTINATION_FILE) : $(2) ; 4623 # set contents present for archival flag by making COPIED_JAVA_RESOURCES nonempty 4624 COPIED_JAVA_RESOURCES += $(2) ; 4625} 4626 4627# Following rules are used by ProcessSource 4628# to attend to specific types of source file. 4629 4630rule ProcessUsingJavaCompiler 4631{ 4632 # Compile .java to .class files using javac or jikes 4633 # Because what class files will be generated by the java compiler 4634 # can't be known in advance, an abstract target is used for this step. 4635 if $(JAVA_COMPILE_TARGET) = "" { 4636 JAVA_COMPILE_TARGET = $(1:G=CompileJava) ; 4637 NOTFILE $(JAVA_COMPILE_TARGET) ; 4638 DEPENDS $(1) : $(JAVA_COMPILE_TARGET) ; 4639 DEPENDS $(JAVA_COMPILE_TARGET) : $(CLASS_FILE_DIR) ; 4640 # bridge derived java to be generated and compiled first 4641 if $(JAVA_BRIDGE_COMPILE_TARGET) { 4642 DEPENDS $(JAVA_COMPILE_TARGET) : $(JAVA_BRIDGE_COMPILE_TARGET) ; 4643 } 4644 } 4645 4646 export JAVA_SOURCE_PATH default = $(SOURCE_ROOT)$(/)$(JAVA_SOURCE_SUBDIR) ; 4647 4648 # start with the compiler-specific flags. 4649 if $(JAVA_COMPILER:B) = jikes { 4650 export JAVAC_FLAGS = $(JIKES_DEFAULT_FLAGS) ; 4651 } 4652 else if $(JAVA_COMPILER:B) = javac { 4653 export JAVAC_FLAGS = $(JAVAC_DEFAULT_FLAGS) ; 4654 } 4655 else { 4656 export JAVAC_FLAGS = ; 4657 } 4658 4659 if $(JAVA_COMPILER_DISABLE_WARNINGS) = YES { 4660 JAVAC_FLAGS += "-nowarn" ; 4661 } 4662 if $(JAVA_COMPILER_DEPRECATED_WARNINGS) = YES { 4663 JAVAC_FLAGS += "-deprecation" ; 4664 } 4665 JAVAC_FLAGS += $(JAVA_COMPILER_FLAGS) ; 4666 4667 if $(JAVA_COMPILER_TARGET_VM_VERSION) { 4668 if $(JAVA_COMPILER:B) = jikes { 4669 ECHO warning: Target VM version not supported by jikes ; 4670 } 4671 else { 4672 JAVAC_FLAGS += "-target "$(JAVA_COMPILER_TARGET_VM_VERSION) ; 4673 } 4674 } 4675 4676 if $(JAVA_COMPILER_DEBUGGING_SYMBOLS) = YES { 4677 JAVAC_FLAGS += "-g" ; 4678 } 4679 4680 if $(JAVAC_SOURCE_FILE_ENCODING) { 4681 JAVAC_FLAGS += -encoding "$(JAVAC_SOURCE_FILE_ENCODING)" ; 4682 } 4683 4684 if $(JAVA_USE_DEPENDENCIES) = "NO" || ( ! $($(2)_JAVA_IMPORTS) && empty$($(2)_JAVA_IMPORTS) != empty ) { 4685 # With no dependence, or dependence info usage off 4686 # build with combinded compiler invocations but no file list 4687 DEPENDS $(JAVA_COMPILE_TARGET) : $(2) ; 4688 ALWAYS $(JAVA_COMPILE_TARGET) ; 4689 JAVAC_FLAGS on $(JAVA_COMPILE_TARGET) = $(JAVAC_FLAGS) ; 4690 JAVA_COMPILER on $(JAVA_COMPILE_TARGET) = $(JAVA_COMPILER) ; 4691 if $(JAVA_COMPILER:B) = jikes { 4692 JavaCompile.jikes $(JAVA_COMPILE_TARGET) : $(2) ; 4693 } 4694 else { 4695 JavaCompile.default $(JAVA_COMPILE_TARGET) : $(2) ; 4696 } 4697 COMPILED_JAVA += $(2) ; 4698 if ! $(JAVA_COMPILE_TARGET) in $(PRODUCT_FILES) { 4699 ProductFile $(JAVA_COMPILE_TARGET) ; 4700 } 4701 } 4702 else { 4703 # Using dependence info, set up file list for java compiles 4704 JAVA_FILE_LIST default = $(TEMP_DIR)$(/)JavaFileList ; 4705 # define and act on target to clear list 4706 if ! $(CLEAR_JAVA_FILE_LIST) { 4707 CLEAR_JAVA_FILE_LIST = $(JAVA_FILE_LIST:G=ClearFileList) ; 4708 ClearJavaFileList $(CLEAR_JAVA_FILE_LIST) ; 4709 DEPENDS $(JAVA_COMPILE_TARGET) : $(CLEAR_JAVA_FILE_LIST) ; 4710 } 4711 # set up compile target to use file list 4712 if ! $(JAVA_COMPILE_TARGET) in $(PRODUCT_FILES) { 4713 JAVAC_FLAGS on $(JAVA_COMPILE_TARGET) = $(JAVAC_FLAGS) ; 4714 JAVA_COMPILER on $(JAVA_COMPILE_TARGET) = $(JAVA_COMPILER) ; 4715 JAVA_FILE_LIST_REFERENCE = @$(JAVA_FILE_LIST) ; 4716 NOTFILE $(JAVA_FILE_LIST_REFERENCE) ; 4717 if $(JAVA_COMPILER:B) = jikes { 4718 JavaCompile.jikes $(JAVA_COMPILE_TARGET) : $(JAVA_FILE_LIST_REFERENCE) ; 4719 } 4720 else { 4721 JavaCompile.default $(JAVA_COMPILE_TARGET) : $(JAVA_FILE_LIST_REFERENCE) ; 4722 } 4723 ProductFile $(JAVA_COMPILE_TARGET) ; 4724 } 4725 # set up class file dependence used to add java files to compile list 4726 local CLASS_FILE ; 4727 # use the main class, if it's there 4728 if $($(2)_MAIN_CLASS) { 4729 CLASS_FILE = $(CLASS_FILE_DIR)$(/)$($(2)_MAIN_CLASS) ; 4730 } 4731 else { 4732 local JAVA_SOURCE ; 4733 RemovePrefixPath JAVA_SOURCE : $(JAVA_SOURCE_SUBDIR) : $(2) ; 4734 CLASS_FILE = $(CLASS_FILE_DIR)$(/)$(JAVA_SOURCE:S=.class) ; 4735 } 4736 DEPENDS $(CLASS_FILE) : $(2) ; 4737 if $($(2)_JAVA_IMPORTS) { 4738 DEPENDS $(CLASS_FILE) : $($(2)_JAVA_IMPORTS) ; 4739 DEPENDS $(CLEAR_JAVA_FILE_LIST) : $($(2)_JAVA_IMPORTS) ; 4740 } 4741 DEPENDS $(JAVA_COMPILE_TARGET) : $(CLASS_FILE) ; 4742 JAVA_FILE_LIST on $(CLASS_FILE) = $(JAVA_FILE_LIST) ; 4743 AppendToJavaFileList $(CLASS_FILE) : $(2) ; 4744 DEPENDS $(CLEAR_JAVA_FILE_LIST) : $(2) ; 4745 COMPILED_JAVA += $(2) ; 4746 } 4747} 4748 4749actions quietly together piecemeal ClearJavaFileList 4750{ 4751 $(RM) -rf $(JAVA_FILE_LIST:Q) && $(TOUCH) $(JAVA_FILE_LIST:Q) 4752} 4753 4754# Appends reference to list only if not already present 4755actions quietly together piecemeal AppendToJavaFileList 4756{ 4757 _grep_result=`/usr/bin/grep -e \""$(2)"\" $(JAVA_FILE_LIST:Q)` 4758 if [ "x$_grep_result" = "x" ] 4759 then $(ECHO) \""$(2)"\" >> $(JAVA_FILE_LIST:Q) 4760 fi 4761} 4762 4763actions together piecemeal JavaCompile.default { 4764 frameworkjars="" 4765 for i in `echo $(JAVA_FRAMEWORK_JARS)/*.jar $(JAVA_FRAMEWORK_JARS)/*.zip ` ; do if [ -f "$i" ] ; then frameworkjars="$frameworkjars":"$i" ; fi ; done 4766 classpath="$(CLASS_FILE_DIR)$(LINKED_CLASS_ARCHIVES)$frameworkjars:"`$(JAVACONFIG) DefaultClasspath` 4767 $(JAVA_COMPILER) $(JAVAC_FLAGS) $($(2)_COMPILER_FLAGS) -sourcepath $(JAVA_SOURCE_PATH:Q) -classpath "$classpath" -d "$(CLASS_FILE_DIR)" '$(2)' 4768} 4769actions together piecemeal JavaCompile.jikes { 4770 frameworkjars="" 4771 for i in `echo $(JAVA_FRAMEWORK_JARS)/*.jar $(JAVA_FRAMEWORK_JARS)/*.zip ` ; do if [ -f "$i" ] ; then frameworkjars="$frameworkjars":"$i" ; fi ; done 4772 classpath="$(CLASS_FILE_DIR)$(LINKED_CLASS_ARCHIVES)$frameworkjars:"`$(JAVACONFIG) DefaultClasspath` 4773 $(JAVA_COMPILER) $(JAVAC_FLAGS) $($(2)_COMPILER_FLAGS) -sourcepath $(JAVA_SOURCE_PATH:Q) -classpath "$classpath" -d $(CLASS_FILE_DIR:Q) '$(2)' 4774} 4775 4776rule ProcessApplescripts 4777{ 4778 if build in $(BUILD_COMPONENTS) || source in $(BUILD_COMPONENTS) { 4779 local FILE ; 4780 if $(_BUILD_PHASING) = YES { 4781 PhaseTarget BUILD_PHASE : $(1) : CompileAppleScripts ; 4782 BuildPhase $(BUILD_PHASE) : $(1) : $(PREVIOUS_BUILD_PHASE) ; 4783 BUILD_PHASE_PRODUCTS = ; 4784 } 4785 if $(CONTEXTNAME) = "" 4786 { 4787 for FILE in $(2) { 4788 if $(_BUILD_PHASING) = YES { 4789 ProcessAppleScript $(BUILD_PHASE) : $(FILE) : $(FILE) ; 4790 } 4791 else { 4792 ProcessAppleScript $(1) : $(FILE) : $(FILE) ; 4793 } 4794 } 4795 } 4796 else 4797 { 4798 ProcessAppleScript $(1) : $(2) : $(CONTEXTNAME) ; 4799 } 4800 if $(_BUILD_PHASING) = YES { 4801 if $(BUILD_PHASE_PRODUCTS) { 4802 DEPENDS $(BUILD_PHASE) : $(BUILD_PHASE_PRODUCTS) ; 4803 } 4804 PREVIOUS_BUILD_PHASE = $(BUILD_PHASE) ; 4805 } 4806 } 4807} 4808 4809rule ProcessAppleScript 4810{ 4811 if source in $(BUILD_COMPONENTS) { 4812 # make directory first if necessary 4813 if $(2:D) { 4814 SCRIPT_SOURCE_DIR = $(2:D:G=) ; 4815 Mkdir $(SCRIPT_SOURCE_DIR) ; 4816 SCRIPT_SOURCE_COPY = $(SCRIPT_SOURCE_DIR)/$(2:D=:G=) ; 4817 DEPENDS $(SCRIPT_SOURCE_COPY) : $(SCRIPT_SOURCE_DIR) ; 4818 } 4819 else { 4820 SCRIPT_SOURCE_COPY = $(SOURCE_DIR)/$(2:D=:G=) ; 4821 DEPENDS $(SCRIPT_SOURCE_COPY) : $(SOURCE_DIR) ; 4822 Mkdir $(SOURCE_DIR) ; 4823 } 4824 # copy script to source location 4825 Cp $(SCRIPT_SOURCE_COPY) : $(2) ; 4826 if $(_BUILD_PHASING) = YES { 4827 BUILD_PHASE_PRODUCTS += $(SCRIPT_SOURCE_COPY) ; 4828 } 4829 } 4830 if build in $(BUILD_COMPONENTS) { 4831 if $(2) = $(3) { 4832 # third argument is a file (ignore subfolder for result) 4833 APPLESCRIPT_FILE = $(APPLESCRIPTS_DIR)$(/)$(3:BS=.scpt) ; 4834 } 4835 else { 4836 # third argument is a context name 4837 APPLESCRIPT_FILE = $(APPLESCRIPTS_DIR)$(/)$(3:S=.scpt) ; 4838 } 4839 DEPENDS $(APPLESCRIPT_FILE) : $(APPLESCRIPTS_DIR) ; 4840 if ! $(APPLESCRIPTS_DIR) in $(PRODUCT_FILES) { 4841 Mkdir $(APPLESCRIPTS_DIR) ; 4842 ProductFile $(APPLESCRIPTS_DIR) ; 4843 } 4844 DEPENDS $(APPLESCRIPT_FILE) : $(2) ; 4845 OTHER_OSAFLAGS on $(APPLESCRIPT_FILE) = $(OTHER_OSAFLAGS) $($(APPLESCRIPT_FILE)_COMPILER_FLAGS) ; 4846 OSACompile $(APPLESCRIPT_FILE) : $(2) ; 4847 ProductFile $(APPLESCRIPT_FILE) ; 4848 } 4849} 4850 4851actions OSACompile 4852{ 4853 $(OSAC) -d -i $(SYSTEM_LIBRARY_DIR)/Frameworks/AppleScriptKit.framework -U $(2:BSQ) -o $(1:Q) "$(OTHER_OSAFLAGS)" $(2:Q) 4854} 4855 4856rule ProcessC 4857{ 4858 for VARIANT in $(BUILD_VARIANTS) { 4859 for ARCH in $(ARCHS) { 4860 local OBJECT_FILE ; 4861 local OBJECT_SUBDIR = $(OBJECT_FILE_DIR_$(VARIANT))$(/)$(ARCH) ; 4862 # $(2)_UNIQUENAME is defined only if the basename of the file isn't unique within the target. 4863 if $($(2)_UNIQUENAME) { 4864 OBJECT_FILE = $($(2)_UNIQUENAME:G=$(VARIANT)-$(ARCH)).o ; 4865 } 4866 else { 4867 OBJECT_FILE = $(2:D=:S=:G=$(VARIANT)-$(ARCH)).o ; 4868 } 4869 DEPENDS $(OBJECT_FILE) : $(OBJECT_SUBDIR) ; 4870 if ! $(OBJECT_SUBDIR) in $(PRODUCT_FILES) { 4871 Mkdir $(OBJECT_SUBDIR) ; 4872 PRODUCT_FILES += $(OBJECT_SUBDIR) ; 4873 if $(_BUILD_PHASING) = YES { 4874 BUILD_PHASE_PRODUCTS += $(OBJECT_SUBDIR) ; 4875 } 4876 } 4877 ARCH on $(OBJECT_FILE) = $(ARCH) ; 4878 PER_ARCH_CFLAGS = $(PER_ARCH_CFLAGS_$(ARCH)) ; 4879 if $(JAVA_BRIDGET_TARGET) { 4880 DEPENDS $(OBJECT_FILE) : $(JAVA_BRIDGET_TARGET) ; 4881 } 4882 OTHER_CFLAGS on $(OBJECT_FILE) = $(OTHER_CFLAGS_$(VARIANT)) ; 4883 CompileC $(OBJECT_FILE) : $(2) ; 4884 if $(2:BS) != $(VECTOR_STUB:BS) { 4885 # add object file to object files and phase products 4886 # unless it is the compiled generated vector stub 4887 OBJECT_FILES_$(VARIANT) += $(OBJECT_FILE) ; 4888 OBJECT_FILES_$(VARIANT)_$(ARCH) += $(OBJECT_FILE) ; 4889 if $(_BUILD_PHASING) = YES { 4890 BUILD_PHASE_PRODUCTS += $(OBJECT_FILE) ; 4891 } 4892 } 4893 LOCATE on $(OBJECT_FILE) = $(OBJECT_SUBDIR) ; 4894 if $(2) = $(MODULE_INFO_FILE) { 4895 MODULE_OBJECT_FILE_$(VARIANT) = $(OBJECT_FILE) ; 4896 LOCATE on $(MODULE_OBJECT_FILE_$(VARIANT)) = $(OBJECT_SUBDIR) ; 4897 DEPENDS $(1) : $(MODULE_OBJECT_FILE_$(VARIANT)) ; 4898 } 4899 else { 4900 # object file is added to linked files 4901 # unless it is the compiled generated vector stub 4902 if $(2:BS) != $(VECTOR_STUB:BS) { 4903 LINKED_FILES_$(VARIANT) += $(OBJECT_FILE) ; 4904 } 4905 } 4906 } 4907 } 4908} 4909 4910rule ProcessCplusplus 4911{ 4912 for VARIANT in $(BUILD_VARIANTS) { 4913 for ARCH in $(ARCHS) { 4914 local OBJECT_FILE ; 4915 local OBJECT_SUBDIR = $(OBJECT_FILE_DIR_$(VARIANT))$(/)$(ARCH) ; 4916 # $(2)_UNIQUENAME is defined only if the basename of the file isn't unique within the target. 4917 if $($(2)_UNIQUENAME) { 4918 OBJECT_FILE = $($(2)_UNIQUENAME:G=$(VARIANT)-$(ARCH)).o ; 4919 } 4920 else { 4921 OBJECT_FILE = $(2:D=:S=:G=$(VARIANT)-$(ARCH)).o ; 4922 } 4923 DEPENDS $(OBJECT_FILE) : $(OBJECT_SUBDIR) ; 4924 if ! $(OBJECT_SUBDIR) in $(PRODUCT_FILES) { 4925 Mkdir $(OBJECT_SUBDIR) ; 4926 if $(_BUILD_PHASING) = YES { 4927 BUILD_PHASE_PRODUCTS += $(OBJECT_SUBDIR) ; 4928 } 4929 } 4930 ARCH on $(OBJECT_FILE) = $(ARCH) ; 4931 PER_ARCH_CPLUSPLUSFLAGS_$(ARCH) default = $(PER_ARCH_CFLAGS_$(ARCH)) ; 4932 PER_ARCH_CPLUSPLUSFLAGS = $(PER_ARCH_CPLUSPLUSFLAGS_$(ARCH)) ; 4933 OTHER_CPLUSPLUSFLAGS on $(OBJECT_FILE) = $(OTHER_CPLUSPLUSFLAGS_$(VARIANT)) ; 4934 CompileCplusplus $(OBJECT_FILE) : $(2) ; 4935 OBJECT_FILES_$(VARIANT) += $(OBJECT_FILE) ; 4936 OBJECT_FILES_$(VARIANT)_$(ARCH) += $(OBJECT_FILE) ; 4937 if $(_BUILD_PHASING) = YES { 4938 BUILD_PHASE_PRODUCTS += $(OBJECT_FILE) ; 4939 } 4940 if $(2) = $(MODULE_INFO_FILE_$(VARIANT)) { 4941 MODULE_OBJECT_FILE_$(VARIANT) = $(OBJECT_FILE) ; 4942 LOCATE on $(MODULE_OBJECT_FILE_$(VARIANT)) = $(OBJECT_SUBDIR) ; 4943 DEPENDS $(1) : $(MODULE_OBJECT_FILE_$(VARIANT)) ; 4944 } 4945 else { 4946 LOCATE on $(OBJECT_FILE) = $(OBJECT_SUBDIR) ; 4947 LINKED_FILES_$(VARIANT) += $(OBJECT_FILE) ; 4948 } 4949 } 4950 } 4951} 4952 4953HDRPATTERN = "^[ ]*#[ ]*include[ ]*[<\"](.*)[\">].*$" ; 4954HDRPATTERN += "^[ ]*#[ ]*import[ ]*[<\"](.*)[\">].*$" ; 4955 4956rule ProcessC.HdrRule 4957{ 4958 # header reference in subdirectory source may be to header in that subdirectory 4959 local LOCAL_HEADERS = $(2:D=$(1:D)) ; 4960 # or header reference may be to elsewhere 4961 local FOREIGN_HEADERS = $(2) ; 4962 # compiled sources may include headers in subdirectories 4963 INCLUDES $(1) : $(LOCAL_HEADERS) $(FOREIGN_HEADERS) ; 4964} 4965 4966rule CompileC 4967{ 4968 # object file depends on the source file 4969 DEPENDS $(1) : $(2) ; 4970 # Initialize the flags, and set search paths to nothing 4971 if $(KERNEL_MODULE) = YES { 4972 local KERNEL_FRAMEWORK = $(SYSTEM_LIBRARY_DIR)/Frameworks/Kernel.framework ; 4973 local KERNEL_HEADERS = $(KERNEL_FRAMEWORK)/Headers ; 4974 local KERNEL_INCLUDE_PATHS = $(KERNEL_HEADERS) $(KERNEL_HEADERS)/bsd $(KERNEL_FRAMEWORK)/PrivateHeaders ; 4975 local KERNEL_COMPILE_OPTIONS = -fno-builtin -finline -fno-keep-inline-functions -force_cpusubtype_ALL -msoft-float ; 4976 if $(ARCH) in ppc { 4977 KERNEL_COMPILE_OPTIONS += -mlong-branch ; 4978 } 4979 local KERNEL_DEFINITIONS = -DKERNEL -DKERNEL_PRIVATE -DDRIVER_PRIVATE -DAPPLE -DNeXT ; 4980 FLAGS on $(1) = -arch $(ARCH) $(PER_ARCH_CFLAGS) -fno-common -nostdinc $(OPTIMIZATION_CFLAGS) $(WARNING_CFLAGS) -I$(KERNEL_INCLUDE_PATHS) -I$(PROJECT_HEADER_DIR) $(KERNEL_COMPILE_OPTIONS) -static $(KERNEL_DEFINITIONS) ; 4981 GLOBAL_CFLAGS on $(1) = ; 4982 } 4983 else { 4984 FLAGS on $(1) = -arch $(ARCH) $(PER_ARCH_CFLAGS) -fno-common -fpascal-strings $(OPTIMIZATION_CFLAGS) $(WARNING_CFLAGS) ; 4985 } 4986 FLAGS on $(1) += -pipe ; 4987 if $(GCC_VERSION) != 2.x { 4988 FLAGS on $(1) += -fmessage-length=0 ; 4989 if $(PRODUCT_TYPE) = Tool || $(PRODUCT_TYPE) = Application { 4990 USE_DYNAMIC_NO_PIC default = YES ; 4991 } else { 4992 USE_DYNAMIC_NO_PIC default = NO ; 4993 } 4994 if $(USE_DYNAMIC_NO_PIC) = YES { 4995 FLAGS on $(1) += -mdynamic-no-pic ; 4996 } 4997 } 4998 if $(GCC_TREAT_WARNINGS_AS_ERRORS) = YES { 4999 FLAGS on $(1) += -Werror ; 5000 } 5001 # seed search paths with target-wide values 5002 HEADER_SEARCH_PATHS on $(1) = $(HEADER_SEARCH_PATHS) ; 5003 FRAMEWORK_SEARCH_PATHS on $(1) = $(FRAMEWORK_SEARCH_PATHS) ; 5004 5005 # If the source file is in a subdirectory, then search that 5006 # subdirectory for headers 5007 if $(2:D) { 5008 HEADER_SEARCH_PATHS on $(1) += $(2:D) ; 5009 } 5010 # We must compile with the extension-specific build flags 5011 FLAGS on $(1) += $($(2:S)_CFLAGS) ; 5012 # Add debug flags, if appropriate. 5013 if $(DEBUGGING_SYMBOLS) = YES { 5014 FLAGS on $(1) += -g ; 5015 } 5016 # Add profiling flags, if appropriate. 5017 if $(PROFILING_CODE) = YES { 5018 FLAGS on $(1) += -pg ; 5019 } 5020 # Pass the trusted-precomp file name to the compiler to keep track 5021 # of which precompiled headers it has already sanity checked. 5022 if $(GCC_VERSION) != 3.3 && $(OS) in MACOS DARWIN && $(EFFECTIVE_PFE_FILE_$(ARCH)) = "" { 5023 FLAGS on $(1) += -precomp-trustfile $(PRECOMP_TRUSTFILE) ; 5024 } 5025 if $(CPP_HEADERMAP_FILE) { 5026 FLAGS on $(1) += "-Wp,-header-mapfile,$(CPP_HEADERMAP_FILE)" ; 5027 } 5028 if YES in $(GENERATE_CPP_ILOG_FILES) { 5029 local INCLUSION_LOG_FILE default = $(OBJECT_FILE_DIR)-$(VARIANT)$(/)$(ARCH)$(/)$(1:DB).ilog ; 5030 FLAGS on $(1) += "-Wp,-inclusion-log-file,$(INCLUSION_LOG_FILE)" ; 5031 } 5032 if $(INDEX_GENERATION_PIPE_NAME) != "" { 5033 FLAGS on $(1) += "-fgen-index=$(INDEX_GENERATION_PIPE_NAME)" ; 5034 } 5035 if $(EFFECTIVE_PFE_FILE_$(ARCH)) != "" && $(SUPPRESS_PREFIX_HEADER) != YES { 5036 if $($(2)_COMPILER_FLAGS) { 5037 # When per-file flags are used the precompiled header is not valid 5038 FLAGS on $(1) += -include "$(PREFIX_HEADER)" ; 5039 } 5040 else { 5041 if $(PREFIX_HEADER_CFLAGS_BASE) = -include { 5042 # GCC v3.3 PCH 5043 PREFIX_HEADER_CFLAGS on $(1) = $(PREFIX_HEADER_CFLAGS_BASE) "$(EFFECTIVE_PFE_FILE_$(ARCH):S=)" ; 5044 } 5045 else { 5046 # GCC v3.1 PFE 5047 PREFIX_HEADER_CFLAGS on $(1) = $(PREFIX_HEADER_CFLAGS_BASE) "$(EFFECTIVE_PFE_FILE_$(ARCH))" ; 5048 } 5049 if $(ENABLE_PREFIX_HEADER_DEPENDENCIES) != NO { 5050 DEPENDS $(1) : $(EFFECTIVE_PFE_FILE_$(ARCH)) ; 5051 } 5052 } 5053 } 5054 if $(EFFECTIVE_PREFIX_HEADER) != "" && $(SUPPRESS_PREFIX_HEADER) != YES { 5055 if $($(2)_COMPILER_FLAGS) { 5056 # When per-file flags are used the precompiled header is not valid 5057 FLAGS on $(1) += -include "$(PREFIX_HEADER)" ; 5058 } 5059 else { 5060 # GCC v2.95.2 cpp-precomp 5061 PREFIX_HEADER_CFLAGS on $(1) += -include "$(EFFECTIVE_PREFIX_HEADER)" ; 5062 if $(ENABLE_PREFIX_HEADER_DEPENDENCIES) != NO { 5063 DEPENDS $(1) : $(EFFECTIVE_PREFIX_HEADER) ; 5064 } 5065 } 5066 } 5067} 5068 5069actions CompileC 5070{ 5071 $(CC) -c -F$(FRAMEWORK_SEARCH_PATHS:Q) -I$(HEADER_SEARCH_PATHS:Q) $(FLAGS:Q) $(GLOBAL_CFLAGS) -I$(DERIVED_PATHS:Q) $(PREFIX_HEADER_CFLAGS:Q) "$(OTHER_CFLAGS)" $($(2)_COMPILER_FLAGS) $(2:Q) -o $(1:Q) 5072} 5073 5074rule CompileCplusplus 5075{ 5076 # object file depends on the source file 5077 DEPENDS $(1) : $(2) ; 5078 # Initialize the flags, and set search paths to nothing 5079 if $(KERNEL_MODULE) = YES { 5080 local KERNEL_FRAMEWORK = $(SYSTEM_LIBRARY_DIR)/Frameworks/Kernel.framework ; 5081 local KERNEL_HEADERS = $(KERNEL_FRAMEWORK)/Headers ; 5082 local KERNEL_INCLUDE_PATHS = $(KERNEL_HEADERS) $(KERNEL_HEADERS)/bsd $(KERNEL_FRAMEWORK)/PrivateHeaders ; 5083 if $(GCC_VERSION) != 2.x { 5084 KERNEL_COMPILE_OPTIONS = -fno-builtin -finline -fno-keep-inline-functions -force_cpusubtype_ALL -fno-rtti -fno-exceptions -fcheck-new -msoft-float -fapple-kext ; 5085 } 5086 else { 5087 KERNEL_COMPILE_OPTIONS = -fno-builtin -finline -fno-keep-inline-functions -force_cpusubtype_ALL -fno-rtti -fno-exceptions -fcheck-new -fvtable-thunks -msoft-float ; 5088 if $(MODULE_IOKIT) = YES { 5089 KERNEL_COMPILE_OPTIONS += -findirect-virtual-calls ; 5090 } 5091 } 5092 if $(ARCH) in ppc { 5093 KERNEL_COMPILE_OPTIONS += -mlong-branch ; 5094 } 5095 local KERNEL_DEFINITIONS = -DKERNEL -DKERNEL_PRIVATE -DDRIVER_PRIVATE -DAPPLE -DNeXT ; 5096 FLAGS on $(1) = -arch $(ARCH) $(PER_ARCH_CPLUSPLUSFLAGS) -fno-common -nostdinc $(OPTIMIZATION_CFLAGS) $(WARNING_CPLUSPLUSFLAGS) -I$(KERNEL_INCLUDE_PATHS) -I$(PROJECT_HEADER_DIR) $(KERNEL_COMPILE_OPTIONS) -static $(KERNEL_DEFINITIONS) ; 5097 GLOBAL_CFLAGS on $(1) = ; 5098 } 5099 else { 5100 FLAGS on $(1) = -arch $(ARCH) $(PER_ARCH_CPLUSPLUSFLAGS) -fno-common -fpascal-strings $(OPTIMIZATION_CFLAGS) $(WARNING_CPLUSPLUSFLAGS) ; 5101 if $(2:S) = .CPP { 5102 FLAGS on $(1) += -x c++ ; 5103 } 5104 } 5105 FLAGS on $(1) += -pipe ; 5106 if ( $(GCC_VERSION) != 2.x ) { 5107 FLAGS on $(1) += -fmessage-length=0 ; 5108 if $(PRODUCT_TYPE) = Tool || $(PRODUCT_TYPE) = Application { 5109 USE_DYNAMIC_NO_PIC default = YES ; 5110 } else { 5111 USE_DYNAMIC_NO_PIC default = NO ; 5112 } 5113 if $(USE_DYNAMIC_NO_PIC) = YES { 5114 FLAGS on $(1) += -mdynamic-no-pic ; 5115 } 5116 } 5117 if $(GCC_TREAT_WARNINGS_AS_ERRORS) = YES { 5118 FLAGS on $(1) += -Werror ; 5119 } 5120 # seed search paths with target-wide values 5121 HEADER_SEARCH_PATHS on $(1) = $(HEADER_SEARCH_PATHS) ; 5122 FRAMEWORK_SEARCH_PATHS on $(1) = $(FRAMEWORK_SEARCH_PATHS) ; 5123 # If the source file is in a subdirectory, then search that 5124 # subdirectory for headers 5125 if $(2:D) { 5126 HEADER_SEARCH_PATHS on $(1) += $(2:D) ; 5127 } 5128 # We must compile with the extension-specific build flags 5129 FLAGS on $(1) += $($(2:S)_CC_FLAGS) ; 5130 # Add variant-specific flags 5131 local _VARIANT_FLAGS = $($(CC:BS)_$(VARIANT)_FLAGS) ; 5132 if $(_VARIANT_FLAGS) { 5133 FLAGS on $(1) += $(_VARIANT_FLAGS) ; 5134 } 5135 # Add debug flags, if appropriate. 5136 if $(DEBUGGING_SYMBOLS) = YES { 5137 FLAGS on $(1) += -g ; 5138 } 5139 # Add profiling flags, if appropriate. 5140 if $(PROFILING_CODE) = YES { 5141 FLAGS on $(1) += -pg ; 5142 } 5143 # Pass the trusted-precomp file name to the compiler to keep track 5144 # of which precompiled headers it has already sanity checked. 5145 if $(GCC_VERSION) != 3.3 && $(OS) in MACOS DARWIN && $(EFFECTIVE_PFE_FILE_$(ARCH)) = "" { 5146 FLAGS on $(1) += -precomp-trustfile $(PRECOMP_TRUSTFILE) ; 5147 } 5148 if $(CPP_HEADERMAP_FILE) { 5149 FLAGS on $(1) += "-Wp,-header-mapfile,$(CPP_HEADERMAP_FILE)" ; 5150 } 5151 if YES in $(GENERATE_CPP_ILOG_FILES) { 5152 local INCLUSION_LOG_FILE default = $(OBJECT_FILE_DIR)-$(VARIANT)$(/)$(ARCH)$(/)$(1:DB).ilog ; 5153 FLAGS on $(1) += "-Wp,-inclusion-log-file,$(INCLUSION_LOG_FILE)" ; 5154 } 5155 if $(EFFECTIVE_PFE_FILE_$(ARCH)) != "" && $(SUPPRESS_PREFIX_HEADER) != YES { 5156 if $($(2)_COMPILER_FLAGS) { 5157 # When per-file flags are used the precompiled header is not valid 5158 FLAGS on $(1) += -include "$(PREFIX_HEADER)" ; 5159 } 5160 else { 5161 if $(PREFIX_HEADER_CFLAGS_BASE) = -include { 5162 # GCC v3.3 PCH 5163 PREFIX_HEADER_CFLAGS on $(1) = $(PREFIX_HEADER_CFLAGS_BASE) "$(EFFECTIVE_PFE_FILE_$(ARCH):S=)" ; 5164 } 5165 else { 5166 # GCC v3.1 PFE 5167 PREFIX_HEADER_CFLAGS on $(1) = $(PREFIX_HEADER_CFLAGS_BASE) "$(EFFECTIVE_PFE_FILE_$(ARCH))" ; 5168 } 5169 if $(ENABLE_PREFIX_HEADER_DEPENDENCIES) != NO { 5170 DEPENDS $(1) : $(EFFECTIVE_PFE_FILE_$(ARCH)) ; 5171 } 5172 } 5173 } 5174 if $(EFFECTIVE_PREFIX_HEADER) != "" && $(SUPPRESS_PREFIX_HEADER) != YES { 5175 if $($(2)_COMPILER_FLAGS) { 5176 # When per-file flags are used the precompiled header is not valid 5177 FLAGS on $(1) += -include "$(PREFIX_HEADER)" ; 5178 } 5179 else { 5180 # GCC v2.95.2 cpp-precomp 5181 PREFIX_HEADER_CFLAGS on $(1) += -include "$(EFFECTIVE_PREFIX_HEADER)" ; 5182 if $(ENABLE_PREFIX_HEADER_DEPENDENCIES) != NO { 5183 DEPENDS $(1) : $(EFFECTIVE_PREFIX_HEADER) ; 5184 } 5185 } 5186 } 5187 _LD_FOR_LINKING = $(LDPLUSPLUS) ; 5188} 5189 5190actions CompileCplusplus 5191{ 5192 $(CPLUSPLUS) -c -F$(FRAMEWORK_SEARCH_PATHS:Q) -I$(HEADER_SEARCH_PATHS:Q) $(FLAGS:Q) $(GLOBAL_CFLAGS) -I$(DERIVED_PATHS:Q) $(PREFIX_HEADER_CFLAGS:Q) "$(OTHER_CPLUSPLUSFLAGS)" $($(2)_COMPILER_FLAGS) $(2:Q) -o $(1:Q) 5193} 5194 5195rule ProcessAssembly 5196{ 5197 for VARIANT in $(BUILD_VARIANTS) { 5198 for ARCH in $(ARCHS) { 5199 local OBJECT_FILE ; 5200 local OBJECT_SUBDIR = $(OBJECT_FILE_DIR_$(VARIANT))$(/)$(ARCH) ; 5201 # $(2)_UNIQUENAME is defined only if the basename of the file isn't unique within the target. 5202 if $($(2)_UNIQUENAME) { 5203 OBJECT_FILE = $($(2)_UNIQUENAME:G=$(VARIANT)-$(ARCH)).o ; 5204 } 5205 else { 5206 OBJECT_FILE = $(2:D=:S=:G=$(VARIANT)-$(ARCH)).o ; 5207 } 5208 DEPENDS $(OBJECT_FILE) : $(OBJECT_SUBDIR) ; 5209 if ! $(OBJECT_SUBDIR) in $(PRODUCT_FILES) { 5210 Mkdir $(OBJECT_SUBDIR) ; 5211 PRODUCT_FILES += $(OBJECT_SUBDIR) ; 5212 if $(_BUILD_PHASING) = YES { 5213 BUILD_PHASE_PRODUCTS += $(OBJECT_SUBDIR) ; 5214 } 5215 } 5216 ARCH on $(OBJECT_FILE) = $(ARCH) ; 5217 PER_ARCH_ASFLAGS = $(PER_ARCH_ASFLAGS_$(ARCH)) ; 5218 if $(JAVA_BRIDGET_TARGET) { 5219 DEPENDS $(OBJECT_FILE) : $(JAVA_BRIDGET_TARGET) ; 5220 } 5221 OTHER_ASFLAGS on $(OBJECT_FILE) = $(OTHER_ASFLAGS) $(OTHER_ASFLAGS_$(VARIANT)) ; 5222 CompileC $(OBJECT_FILE) : $(2) ; 5223 if $(2:BS) != $(VECTOR_STUB:BS) { 5224 # add object file to object files and phase products 5225 # unless it is the compiled generated vector stub 5226 OBJECT_FILES_$(VARIANT) += $(OBJECT_FILE) ; 5227 OBJECT_FILES_$(VARIANT)_$(ARCH) += $(OBJECT_FILE) ; 5228 if $(_BUILD_PHASING) = YES { 5229 BUILD_PHASE_PRODUCTS += $(OBJECT_FILE) ; 5230 } 5231 } 5232 LOCATE on $(OBJECT_FILE) = $(OBJECT_SUBDIR) ; 5233 if $(2) = $(MODULE_INFO_FILE) { 5234 MODULE_OBJECT_FILE_$(VARIANT) = $(OBJECT_FILE) ; 5235 LOCATE on $(MODULE_OBJECT_FILE_$(VARIANT)) = $(OBJECT_SUBDIR) ; 5236 DEPENDS $(1) : $(MODULE_OBJECT_FILE_$(VARIANT)) ; 5237 } 5238 else { 5239 # object file is added to linked files 5240 # unless it is the compiled generated vector stub 5241 if $(2:BS) != $(VECTOR_STUB:BS) { 5242 LINKED_FILES_$(VARIANT) += $(OBJECT_FILE) ; 5243 } 5244 } 5245 } 5246 } 5247} 5248 5249rule CompileAssembly 5250{ 5251 # object file depends on the source file 5252 DEPENDS $(1) : $(2) ; 5253 # Initialize the flags, and set search paths to nothing 5254 if $(KERNEL_MODULE) = YES { 5255 local KERNEL_FRAMEWORK = $(SYSTEM_LIBRARY_DIR)/Frameworks/Kernel.framework ; 5256 local KERNEL_HEADERS = $(KERNEL_FRAMEWORK)/Headers ; 5257 local KERNEL_INCLUDE_PATHS = $(KERNEL_HEADERS) $(KERNEL_HEADERS)/bsd $(KERNEL_FRAMEWORK)/PrivateHeaders ; 5258 local KERNEL_COMPILE_OPTIONS = -fno-builtin -finline -fno-keep-inline-functions -force_cpusubtype_ALL -msoft-float ; 5259 if $(ARCH) in ppc { 5260 KERNEL_COMPILE_OPTIONS += -mlong-branch ; 5261 } 5262 local KERNEL_DEFINITIONS = -DKERNEL -DKERNEL_PRIVATE -DDRIVER_PRIVATE -DAPPLE -DNeXT ; 5263 FLAGS on $(1) = -arch $(ARCH) $(PER_ARCH_ASFLAGS) -fno-common -nostdinc $(OPTIMIZATION_ASFLAGS) $(WARNING_ASFLAGS) -I$(KERNEL_INCLUDE_PATHS) -I$(PROJECT_HEADER_DIR) $(KERNEL_COMPILE_OPTIONS) -static $(KERNEL_DEFINITIONS) ; 5264 GLOBAL_CFLAGS on $(1) = ; 5265 } 5266 else { 5267 FLAGS on $(1) = -arch $(ARCH) $(PER_ARCH_ASFLAGS) -fno-common -fpascal-strings $(OPTIMIZATION_ASFLAGS) $(WARNING_ASFLAGS) ; 5268 } 5269 FLAGS on $(1) += -pipe ; 5270 if $(GCC_VERSION) != 2.x { 5271 FLAGS on $(1) += -fmessage-length=0 ; 5272 if $(PRODUCT_TYPE) = Tool || $(PRODUCT_TYPE) = Application { 5273 USE_DYNAMIC_NO_PIC default = YES ; 5274 } else { 5275 USE_DYNAMIC_NO_PIC default = NO ; 5276 } 5277 if $(USE_DYNAMIC_NO_PIC) = YES { 5278 FLAGS on $(1) += -mdynamic-no-pic ; 5279 } 5280 } 5281 if $(GCC_TREAT_WARNINGS_AS_ERRORS) = YES { 5282 FLAGS on $(1) += -Werror ; 5283 } 5284 # seed search paths with target-wide values 5285 HEADER_SEARCH_PATHS on $(1) = $(HEADER_SEARCH_PATHS) ; 5286 FRAMEWORK_SEARCH_PATHS on $(1) = $(FRAMEWORK_SEARCH_PATHS) ; 5287 5288 # If the source file is in a subdirectory, then search that 5289 # subdirectory for headers 5290 if $(2:D) { 5291 HEADER_SEARCH_PATHS on $(1) += $(2:D) ; 5292 } 5293 # We must compile with the extension-specific build flags 5294 FLAGS on $(1) += $($(2:S)_CFLAGS) ; 5295 # Add variant-specific flags 5296 local _VARIANT_FLAGS = $($(CC:BS)_$(VARIANT)_FLAGS) ; 5297 if $(_VARIANT_FLAGS) { 5298 FLAGS on $(1) += $(_VARIANT_FLAGS) ; 5299 } 5300 # Add debug flags, if appropriate. 5301 if $(DEBUGGING_SYMBOLS) = YES { 5302 FLAGS on $(1) += -g ; 5303 } 5304 # Add profiling flags, if appropriate. 5305 if $(PROFILING_CODE) = YES { 5306 FLAGS on $(1) += -pg ; 5307 } 5308 # Pass the trusted-precomp file name to the compiler to keep track 5309 # of which precompiled headers it has already sanity checked. 5310 if $(GCC_VERSION) != 3.3 && $(OS) in MACOS DARWIN && $(EFFECTIVE_PFE_FILE_$(ARCH)) = "" { 5311 FLAGS on $(1) += -precomp-trustfile $(PRECOMP_TRUSTFILE) ; 5312 } 5313 if $(CPP_HEADERMAP_FILE) { 5314 FLAGS on $(1) += "-Wp,-header-mapfile,$(CPP_HEADERMAP_FILE)" ; 5315 } 5316 if YES in $(GENERATE_CPP_ILOG_FILES) { 5317 local INCLUSION_LOG_FILE default = $(OBJECT_FILE_DIR)-$(VARIANT)$(/)$(ARCH)$(/)$(1:DB).ilog ; 5318 FLAGS on $(1) += "-Wp,-inclusion-log-file,$(INCLUSION_LOG_FILE)" ; 5319 } 5320 if $(INDEX_GENERATION_PIPE_NAME) != "" { 5321 FLAGS on $(1) += "-fgen-index=$(INDEX_GENERATION_PIPE_NAME)" ; 5322 } 5323 if $(EFFECTIVE_PFE_FILE_$(ARCH)) != "" && $(SUPPRESS_PREFIX_HEADER) != YES { 5324 if $($(2)_COMPILER_FLAGS) { 5325 # When per-file flags are used the precompiled header is not valid 5326 FLAGS on $(1) += -include "$(PREFIX_HEADER)" ; 5327 } 5328 else { 5329 if $(PREFIX_HEADER_CFLAGS_BASE) = -include { 5330 # GCC v3.3 PCH 5331 PREFIX_HEADER_CFLAGS on $(1) = $(PREFIX_HEADER_CFLAGS_BASE) "$(EFFECTIVE_PFE_FILE_$(ARCH):S=)" ; 5332 } 5333 else { 5334 # GCC v3.1 PFE 5335 PREFIX_HEADER_CFLAGS on $(1) = $(PREFIX_HEADER_CFLAGS_BASE) "$(EFFECTIVE_PFE_FILE_$(ARCH))" ; 5336 } 5337 if $(ENABLE_PREFIX_HEADER_DEPENDENCIES) != NO { 5338 DEPENDS $(1) : $(EFFECTIVE_PFE_FILE_$(ARCH)) ; 5339 } 5340 } 5341 } 5342 if $(EFFECTIVE_PREFIX_HEADER) != "" && $(SUPPRESS_PREFIX_HEADER) != YES { 5343 if $($(2)_COMPILER_FLAGS) { 5344 # When per-file flags are used the precompiled header is not valid 5345 FLAGS on $(1) += -include "$(PREFIX_HEADER)" ; 5346 } 5347 else { 5348 # GCC v2.95.2 cpp-precomp 5349 PREFIX_HEADER_CFLAGS on $(1) += -include "$(EFFECTIVE_PREFIX_HEADER)" ; 5350 if $(ENABLE_PREFIX_HEADER_DEPENDENCIES) != NO { 5351 DEPENDS $(1) : $(EFFECTIVE_PREFIX_HEADER) ; 5352 } 5353 } 5354 } 5355} 5356 5357actions CompileAssembly 5358{ 5359 $(CC) -c -F$(FRAMEWORK_SEARCH_PATHS:Q) -I$(HEADER_SEARCH_PATHS:Q) $(FLAGS:Q) $(GLOBAL_CFLAGS) -I$(DERIVED_PATHS:Q) $(PREFIX_HEADER_ASFLAGS:Q) "$(OTHER_ASFLAGS)" $($(2)_COMPILER_FLAGS) $(2:Q) -o $(1:Q) 5360} 5361 5362 5363rule ProcessFortran 5364{ 5365 for VARIANT in $(BUILD_VARIANTS) { 5366 for ARCH in $(ARCHS) { 5367 local OBJECT_FILE ; 5368 local OBJECT_SUBDIR = $(OBJECT_FILE_DIR_$(VARIANT))$(/)$(ARCH) ; 5369 # $(2)_UNIQUENAME is defined only if the basename of the file isn't unique within the target. 5370 if $($(2)_UNIQUENAME) { 5371 OBJECT_FILE = $($(2)_UNIQUENAME:G=$(VARIANT)-$(ARCH)).o ; 5372 } 5373 else { 5374 OBJECT_FILE = $(2:D=:S=:G=$(VARIANT)-$(ARCH)).o ; 5375 } 5376 DEPENDS $(OBJECT_FILE) : $(OBJECT_SUBDIR) ; 5377 if ! $(OBJECT_SUBDIR) in $(PRODUCT_FILES) { 5378 Mkdir $(OBJECT_SUBDIR) ; 5379 PRODUCT_FILES += $(OBJECT_SUBDIR) ; 5380 if $(_BUILD_PHASING) = YES { 5381 BUILD_PHASE_PRODUCTS += $(OBJECT_SUBDIR) ; 5382 } 5383 } 5384 ARCH on $(OBJECT_FILE) = $(ARCH) ; 5385 PER_ARCH_FFLAGS = $(PER_ARCH_FFLAGS_$(ARCH)) ; 5386 if $(JAVA_BRIDGET_TARGET) { 5387 DEPENDS $(OBJECT_FILE) : $(JAVA_BRIDGET_TARGET) ; 5388 } 5389 OTHER_FFLAGS on $(OBJECT_FILE) = $(OTHER_FFLAGS) $(OTHER_FFLAGS_$(VARIANT)) ; 5390 CompileFortran $(OBJECT_FILE) : $(2) ; 5391 if $(2:BS) != $(VECTOR_STUB:BS) { 5392 # add object file to object files and phase products 5393 # unless it is the compiled generated vector stub 5394 OBJECT_FILES_$(VARIANT) += $(OBJECT_FILE) ; 5395 OBJECT_FILES_$(VARIANT)_$(ARCH) += $(OBJECT_FILE) ; 5396 if $(_BUILD_PHASING) = YES { 5397 BUILD_PHASE_PRODUCTS += $(OBJECT_FILE) ; 5398 } 5399 } 5400 LOCATE on $(OBJECT_FILE) = $(OBJECT_SUBDIR) ; 5401 if $(2) = $(MODULE_INFO_FILE) { 5402 MODULE_OBJECT_FILE_$(VARIANT) = $(OBJECT_FILE) ; 5403 LOCATE on $(MODULE_OBJECT_FILE_$(VARIANT)) = $(OBJECT_SUBDIR) ; 5404 DEPENDS $(1) : $(MODULE_OBJECT_FILE_$(VARIANT)) ; 5405 } 5406 else { 5407 # object file is added to linked files 5408 # unless it is the compiled generated vector stub 5409 if $(2:BS) != $(VECTOR_STUB:BS) { 5410 LINKED_FILES_$(VARIANT) += $(OBJECT_FILE) ; 5411 } 5412 } 5413 } 5414 } 5415} 5416 5417rule CompileFortran 5418{ 5419 # object file depends on the source file 5420 DEPENDS $(1) : $(2) ; 5421 # Initialize the flags, and set search paths to nothing 5422 if $(KERNEL_MODULE) = YES { 5423 local KERNEL_FRAMEWORK = $(SYSTEM_LIBRARY_DIR)/Frameworks/Kernel.framework ; 5424 local KERNEL_HEADERS = $(KERNEL_FRAMEWORK)/Headers ; 5425 local KERNEL_INCLUDE_PATHS = $(KERNEL_HEADERS) $(KERNEL_HEADERS)/bsd $(KERNEL_FRAMEWORK)/PrivateHeaders ; 5426 local KERNEL_COMPILE_OPTIONS = -fno-builtin -finline -fno-keep-inline-functions -force_cpusubtype_ALL -msoft-float ; 5427 if $(ARCH) in ppc { 5428 KERNEL_COMPILE_OPTIONS += -mlong-branch ; 5429 } 5430 local KERNEL_DEFINITIONS = -DKERNEL -DKERNEL_PRIVATE -DDRIVER_PRIVATE -DAPPLE -DNeXT ; 5431 FLAGS on $(1) = -arch $(ARCH) $(PER_ARCH_FFLAGS) -fno-common -nostdinc $(OPTIMIZATION_FFLAGS) $(WARNING_FFLAGS) -I$(KERNEL_INCLUDE_PATHS) -I$(PROJECT_HEADER_DIR) $(KERNEL_COMPILE_OPTIONS) -static $(KERNEL_DEFINITIONS) ; 5432 GLOBAL_CFLAGS on $(1) = ; 5433 } 5434 else { 5435 FLAGS on $(1) = -arch $(ARCH) $(PER_ARCH_FFLAGS) -fno-common -fpascal-strings $(OPTIMIZATION_FFLAGS) $(WARNING_FFLAGS) ; 5436 } 5437 FLAGS on $(1) += -pipe ; 5438 if $(GCC_VERSION) != 2.x { 5439 FLAGS on $(1) += -fmessage-length=0 ; 5440 if $(PRODUCT_TYPE) = Tool || $(PRODUCT_TYPE) = Application { 5441 USE_DYNAMIC_NO_PIC default = YES ; 5442 } else { 5443 USE_DYNAMIC_NO_PIC default = NO ; 5444 } 5445 if $(USE_DYNAMIC_NO_PIC) = YES { 5446 FLAGS on $(1) += -mdynamic-no-pic ; 5447 } 5448 } 5449 if $(GCC_TREAT_WARNINGS_AS_ERRORS) = YES { 5450 FLAGS on $(1) += -Werror ; 5451 } 5452 # seed search paths with target-wide values 5453 HEADER_SEARCH_PATHS on $(1) = $(HEADER_SEARCH_PATHS) ; 5454 FRAMEWORK_SEARCH_PATHS on $(1) = $(FRAMEWORK_SEARCH_PATHS) ; 5455 5456 # If the source file is in a subdirectory, then search that 5457 # subdirectory for headers 5458 if $(2:D) { 5459 HEADER_SEARCH_PATHS on $(1) += $(2:D) ; 5460 } 5461 # We must compile with the extension-specific build flags 5462 FLAGS on $(1) += $($(2:S)_FFLAGS) ; 5463 # Add debug flags, if appropriate. 5464 if $(DEBUGGING_SYMBOLS) = YES { 5465 FLAGS on $(1) += -g ; 5466 } 5467 # Add profiling flags, if appropriate. 5468 if $(PROFILING_CODE) = YES { 5469 FLAGS on $(1) += -pg ; 5470 } 5471 # Pass the trusted-precomp file name to the compiler to keep track 5472 # of which precompiled headers it has already sanity checked. 5473 if $(GCC_VERSION) != 3.3 && $(OS) in MACOS DARWIN && $(EFFECTIVE_PFE_FILE_$(ARCH)) = "" { 5474 FLAGS on $(1) += -precomp-trustfile $(PRECOMP_TRUSTFILE) ; 5475 } 5476 if $(CPP_HEADERMAP_FILE) { 5477 FLAGS on $(1) += "-Wp,-header-mapfile,$(CPP_HEADERMAP_FILE)" ; 5478 } 5479 if YES in $(GENERATE_CPP_ILOG_FILES) { 5480 local INCLUSION_LOG_FILE default = $(OBJECT_FILE_DIR)-$(VARIANT)$(/)$(ARCH)$(/)$(1:DB).ilog ; 5481 FLAGS on $(1) += "-Wp,-inclusion-log-file,$(INCLUSION_LOG_FILE)" ; 5482 } 5483 if $(INDEX_GENERATION_PIPE_NAME) != "" { 5484 FLAGS on $(1) += "-fgen-index=$(INDEX_GENERATION_PIPE_NAME)" ; 5485 } 5486 if $(EFFECTIVE_PFE_FILE_$(ARCH)) != "" && $(SUPPRESS_PREFIX_HEADER) != YES { 5487 if $($(2)_COMPILER_FLAGS) { 5488 # When per-file flags are used the precompiled header is not valid 5489 FLAGS on $(1) += -include "$(PREFIX_HEADER)" ; 5490 } 5491 else { 5492 if $(PREFIX_HEADER_CFLAGS_BASE) = -include { 5493 # GCC v3.3 PCH 5494 PREFIX_HEADER_CFLAGS on $(1) = $(PREFIX_HEADER_CFLAGS_BASE) "$(EFFECTIVE_PFE_FILE_$(ARCH):S=)" ; 5495 } 5496 else { 5497 # GCC v3.1 PFE 5498 PREFIX_HEADER_CFLAGS on $(1) = $(PREFIX_HEADER_CFLAGS_BASE) "$(EFFECTIVE_PFE_FILE_$(ARCH))" ; 5499 } 5500 if $(ENABLE_PREFIX_HEADER_DEPENDENCIES) != NO { 5501 DEPENDS $(1) : $(EFFECTIVE_PFE_FILE_$(ARCH)) ; 5502 } 5503 } 5504 } 5505 if $(EFFECTIVE_PREFIX_HEADER) != "" && $(SUPPRESS_PREFIX_HEADER) != YES { 5506 if $($(2)_COMPILER_FLAGS) { 5507 # When per-file flags are used the precompiled header is not valid 5508 FLAGS on $(1) += -include "$(PREFIX_HEADER)" ; 5509 } 5510 else { 5511 # GCC v2.95.2 cpp-precomp 5512 PREFIX_HEADER_CFLAGS on $(1) += -include "$(EFFECTIVE_PREFIX_HEADER)" ; 5513 if $(ENABLE_PREFIX_HEADER_DEPENDENCIES) != NO { 5514 DEPENDS $(1) : $(EFFECTIVE_PREFIX_HEADER) ; 5515 } 5516 } 5517 } 5518} 5519 5520actions CompileFortran 5521{ 5522 $(CC) -c -F$(FRAMEWORK_SEARCH_PATHS:Q) -I$(HEADER_SEARCH_PATHS:Q) $(FLAGS:Q) $(GLOBAL_CFLAGS) -I$(DERIVED_PATHS:Q) $(PREFIX_HEADER_FFLAGS:Q) "$(OTHER_FFLAGS)" $($(2)_COMPILER_FLAGS) $(2:Q) -o $(1:Q) 5523} 5524 5525VECTOR_SUFFIX default = ; 5526rule ProcessExportsFile 5527{ 5528 if $(CFM_BRIDGE) = YES { 5529 local DYLIB_INSTALLED_NAME ; 5530 VECTOR_STUB default = $(DERIVED_FILE_DIR)$(/)$(1:B)Vector.s ; 5531 VECTOR_OBJECT_FILE default = $(TEMP_DIR)$(/)$(1:B)Vector.o ; 5532 if $(VECTOR_SUFFIX) { 5533 VECTOR_FRAGMENT_NAME default = CFMPriv_$(1:B)$(VECTOR_SUFFIX) ; 5534 } 5535 else { 5536 VECTOR_FRAGMENT_NAME default = CFMPriv_$(1:B) ; 5537 } 5538 DEPENDS $(VECTOR_STUB) : $(CURRENT_VERSION_DIR) ; 5539 DEPENDS $(VECTOR_STUB) : $(DERIVED_FILE_DIR) ; 5540 Mkdir $(CURRENT_VERSION_DIR) ; 5541 if $(INSTALL_PATH) { 5542 DYLIB_INSTALLED_NAME default = $(INSTALL_PATH)$(/)$(1:G=)$(/)Versions$(/)$(FRAMEWORK_VERSION)$(/)$(1:B:G=) ; 5543 if $(DYNAMIC_LIBRARY_SUFFIX) { 5544 DYLIB_INSTALLED_NAME = $(DYLIB_INSTALLED_NAME)$(DYNAMIC_LIBRARY_SUFFIX) ; 5545 } 5546 } 5547 DYLIB_INSTALLED_NAME on $(1) = $(DYLIB_INSTALLED_NAME) ; 5548 GenerateVectorLibraryIntermediates $(VECTOR_STUB) $(VECTOR_OBJECT_FILE) : $(2) ; 5549 BUILD_PHASE_PRODUCTS += $(VECTOR_STUB) ; 5550 } 5551} 5552 5553rule ProcessUsingMig 5554{ 5555 local TEMP_FILES ; 5556 local FILE_BASE = $(2:B) ; 5557 5558 if AbsolutePath in $($(2)_ATTRIBUTES) { 5559 FILE_BASE = $(DERIVED_FILE_DIR)$(2:DB) ; 5560 } 5561 if Client in $($(2)_ATTRIBUTES) { 5562 TEMP_FILES = $(FILE_BASE)User.c $(FILE_BASE).h ; 5563 } 5564 if Server in $($(2)_ATTRIBUTES) { 5565 TEMP_FILES += $(FILE_BASE)Server.c $(FILE_BASE)Server.h ; 5566 } 5567 if Client in $($(2)_ATTRIBUTES) || Server in $($(2)_ATTRIBUTES) { 5568 Mig $(TEMP_FILES) : $(2) ; 5569 DerivedFiles $(TEMP_FILES) ; 5570 DERIVED_FILES += $(TEMP_FILES) ; 5571 ProcessFiles $(1) : $(TEMP_FILES) ; 5572 } 5573} 5574 5575rule ProcessUsingLex 5576{ 5577 local TEMP_FILES ; 5578 local FILE_BASE = $(2:B) ; 5579 5580 if AbsolutePath in $($(2)_ATTRIBUTES) { 5581 FILE_BASE = $(DERIVED_FILE_DIR)$(2:DB) ; 5582 } 5583 switch $(2:S) { 5584 case ".l" : TEMP_FILES += $(FILE_BASE).c ; 5585 case ".lm" : TEMP_FILES += $(FILE_BASE).m ; 5586 case ".LM" : TEMP_FILES += $(FILE_BASE).M ; 5587 case ".lmm" : TEMP_FILES += $(FILE_BASE).mm ; 5588 case ".lpp" : TEMP_FILES += $(FILE_BASE).cpp ; 5589 case ".LPP" : TEMP_FILES += $(FILE_BASE).CPP ; 5590 case ".lxx" : TEMP_FILES += $(FILE_BASE).cxx ; 5591 case ".LXX" : TEMP_FILES += $(FILE_BASE).CXX ; 5592 } 5593 DEPENDS $(TEMP_FILES) : $(DERIVED_FILE_DIR) ; 5594 Lex $(TEMP_FILES) : $(2) ; 5595 DerivedFiles $(TEMP_FILES) ; 5596 DERIVED_FILES += $(TEMP_FILES) ; 5597 ProcessFiles $(1) : $(TEMP_FILES) ; 5598} 5599 5600rule ProcessUsingYacc 5601{ 5602 local TEMP_FILES ; 5603 local FILE_BASE = $(2:B) ; 5604 5605 if AbsolutePath in $($(2)_ATTRIBUTES) { 5606 FILE_BASE = $(DERIVED_FILE_DIR)$(2:DB) ; 5607 } 5608 switch $(2:S) { 5609 case ".y" : TEMP_FILES += $(FILE_BASE).c ; 5610 case ".ym" : TEMP_FILES += $(FILE_BASE).m ; 5611 case ".YM" : TEMP_FILES += $(FILE_BASE).M ; 5612 case ".ymm" : TEMP_FILES += $(FILE_BASE).mm ; 5613 case ".ypp" : TEMP_FILES += $(FILE_BASE).cpp ; 5614 case ".YPP" : TEMP_FILES += $(FILE_BASE).CPP ; 5615 case ".yxx" : TEMP_FILES += $(FILE_BASE).cxx ; 5616 case ".YXX" : TEMP_FILES += $(FILE_BASE).CXX ; 5617 } 5618 TEMP_FILES += $(FILE_BASE).h ; 5619 DEPENDS $(TEMP_FILES) : $(DERIVED_FILE_DIR) ; 5620 Yacc $(TEMP_FILES) : $(2) ; 5621 DerivedFiles $(TEMP_FILES) ; 5622 DERIVED_FILES += $(TEMP_FILES) ; 5623 ProcessFiles $(1) : $(TEMP_FILES) ; 5624} 5625 5626rule ProcessUsingRPCGen 5627{ 5628 local FILE_BASE = $(2:B) ; 5629 5630 if AbsolutePath in $($(2)_ATTRIBUTES) { 5631 FILE_BASE = $(DERIVED_FILE_DIR)$(2:DB) ; 5632 } 5633 local TEMP_FILES = $(FILE_BASE)_xdr.c $(FILE_BASE).h ; 5634 DEPENDS $(TEMP_FILES) : $(DERIVED_FILE_DIR) ; 5635 RPCGen $(TEMP_FILES) : $(2) ; 5636 DerivedFiles $(TEMP_FILES) ; 5637 DERIVED_FILES += $(TEMP_FILES) ; 5638 ProcessFiles $(1) : $(TEMP_FILES) ; 5639} 5640 5641rule ProcessUsingBridget 5642{ 5643 Bridget $(1) : $(2) ; 5644} 5645# Copyright (c) 1999-2003 Apple Computer, Inc. 5646# All rights reserved. 5647 5648# High level rules for build actions on targets 5649 5650# Actions <product> 5651# Defines all available build actions 5652rule Actions 5653{ 5654 Clean clean : $(1) ; 5655 BuildAction build : $(1) ; 5656 BuildAction copysrc : $(1) ; 5657 NOTFILE copysrc ; 5658 BuildAction copyhdrs : $(1) ; 5659 NOTFILE copyhdrs ; 5660 BuildAction copyrsrcs : $(1) ; 5661 NOTFILE copyrsrcs ; 5662 BuildAction install : $(1) ; 5663 BuildAction installdebugonly : $(1) ; 5664 NOTFILE installdebug ; 5665 BuildAction installprofileonly : $(1) ; 5666 NOTFILE installprofile ; 5667 BuildAction installdebugprofileonly : $(1) ; 5668 NOTFILE installdebugprofile ; 5669 BuildAction installsrc : $(1) ; 5670 NOTFILE installsrc ; 5671 BuildAction installhdrs : $(1) ; 5672 NOTFILE installhdrs ; 5673 BuildAction installrsrcs : $(1) ; 5674 NOTFILE installrsrcs ; 5675} 5676 5677# Clean clean : <product> 5678# Deletes the product and the files associated with building it 5679rule Clean 5680{ 5681 # locate built product and remove 5682 local BUILT_PRODUCT = $(2:G=) ; 5683 LOCATE on $(BUILT_PRODUCT) = $(TARGET_BUILD_DIR) ; 5684 Clean.Remove clean : $(BUILT_PRODUCT) ; 5685 5686 # remove temporary directories 5687 Clean.Remove clean : $(TEMP_DIR) ; 5688 5689 # Removal of archive in case of tools that are class archives, 5690 # this is which don't necessarily end with TOOL_SUFFIX. 5691 local ARCHIVE_SUFFIX ; 5692 local ARCHIVE_TARGET ; 5693 if $(JAVA_ARCHIVE_TYPE) = JAR { 5694 ARCHIVE_SUFFIX default = .jar ; 5695 } 5696 if $(JAVA_ARCHIVE_TYPE) = ZIP { 5697 ARCHIVE_SUFFIX default = .zip ; 5698 } 5699 ARCHIVE_SUFFIX default = "" ; 5700 ARCHIVE_TARGET = $(2:G=)$(ARCHIVE_SUFFIX) ; 5701 LOCATE on $(ARCHIVE_TARGET) = $(TARGET_BUILD_DIR) ; 5702 Clean.RemoveArchive clean : $(ARCHIVE_TARGET) ; 5703 # whole project content to remove on full clean 5704 Clean.Remove clean : $(PRECOMP_TRUSTFILE) ; 5705} 5706 5707actions quietly piecemeal together existing Clean.Remove 5708{ 5709 $(RM) -rf $(2:Q) 5710} 5711 5712actions quietly piecemeal together existing Clean.RemoveArchive 5713{ 5714 if [ -f $(2:Q) ]; then 5715 $(RM) -rf $(2:Q) 5716 fi 5717} 5718 5719rule BuildAction 5720{ 5721 local ACTION_TARGET = $(2:G=$(1)BuildAction) ; 5722 ACTION on $(2) = $(ACTION) ; 5723 DEPENDS $(1) : $(ACTION_TARGET) ; 5724 DEPENDS $(ACTION_TARGET) : $(2) ; 5725 NOTFILE $(ACTION_TARGET) ; 5726} 5727 5728# RunVariantHackScript varianthack : <product> 5729# Runs /AppleInternal/Developer/Tools/AppleInternalDebugAndProfileBuild.sh, 5730rule RunVariantHackScript 5731{ 5732 if $(RC_JASPER) || $(INTERNAL_BUILD_VARIANTS_ONLY_IN_JASPER) != YES { 5733 local VARIANT_HACK_TARGET = $(1:G=varianthack) ; 5734 DEPENDS $(1) : $(VARIANT_HACK_TARGET) ; 5735 NOTFILE $(VARIANT_HACK_TARGET) ; 5736 } 5737} 5738actions exportvars RunVariantHackScript 5739{ 5740 /bin/sh /AppleInternal/Developer/Tools/AppleInternalDebugAndProfileBuilder.sh $(INTERNAL_BUILD_VARIANTS) 5741} 5742# Copyright (c) 1999-2003 Apple Computer, Inc. 5743# All rights reserved. 5744 5745include $(JAMFILE) ; 5746