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