## # Copyright (c) 1999 Apple Computer, Inc. All rights reserved. # # @APPLE_LICENSE_HEADER_START@ # # The contents of this file constitute Original Code as defined in and # are subject to the Apple Public Source License Version 1.1 (the # "License"). You may not use this file except in compliance with the # License. Please obtain a copy of the License at # http://www.apple.com/publicsource and read it before using this file. # # This Original Code and all software distributed under the License are # distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER # EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, # INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the # License for the specific language governing rights and limitations # under the License. # # @APPLE_LICENSE_HEADER_END@ ## # Turn on the use of the NeXT/Apple make hacks to support the pb_makefiles. USE_APPLE_PB_SUPPORT = all export USE_APPLE_PB_SUPPORT # # Top-Level Rule # .PHONY: all ifeq "AGGREGATE" "$(PROJTYPE)" all: else all: build endif # # Local site-wide Makefile customization # ifndef LOCAL_MAKEFILEDIR LOCAL_MAKEFILEDIR = $(NEXT_ROOT)$(LOCAL_DEVELOPER_DIR)/Makefiles/pb_makefiles endif -include $(LOCAL_MAKEFILEDIR)/common.make.preamble # # merging OS-specific variables # ifndef INSTALLDIR INSTALLDIR = $($(PLATFORM_TYPE)_INSTALLDIR) endif ifndef DYLIB_ROOT ifeq "SOLARIS" "$(OS)" DYLIB_ROOT = /opt/Apple endif endif # # Localization variables # # Under the old localization scheme, a project defined LANGUAGE to name the # language that was being built and LOCAL_RESOURCES and HELP_FILES to name the # resources used by that language. The new scheme builds all languages # simultaneously, and requires that the project define LANGUAGES to name all # languages and English_RESOURCES, English_HELP_FILES, French_RESOURCES # French_HELP_FILES, etc. to define the resources needed by each language. # # The following variable definitions allow projects that have not yet been # updated to the new scheme to continue to build. # ifndef $(LANGUAGE)_HELP_FILES $(LANGUAGE)_HELP_FILES = $(HELP_FILES) endif ifndef $(LANGUAGE)_RESOURCES $(LANGUAGE)_RESOURCES = $(LOCAL_RESOURCES) endif ifndef LANGUAGES LANGUAGES = $(LANGUAGE) endif # # Miscellaneous variables # SILENT = @ ARCH = $(shell $(ARCH_CMD)) ifndef RC_ARCHS RC_ARCHS = $(ARCH) endif TARGET_ARCHS = $(RC_ARCHS) MAKEFILE_SOURCE = pb_makefiles ifeq "WINDOWS" "$(OS)" ifndef LINK_SUBPROJECTS LINK_SUBPROJECTS = NO endif DISABLE_OBJCPLUSPLUS = NO EXECUTABLE_EXT = .exe ifeq "STATIC" "$(LIBRARY_STYLE)" LIBRARY_EXT = .lib else LIBRARY_EXT = .dll endif LIBRARY_PREFIX = DLL_EXT = .dll EXP_EXT = .exp NULL = NUL ifneq "$(LIBRARY_STYLE)" "STATIC" WINDOWS_DEF_FILE = $(NAME)$(BUILD_TYPE_SUFFIX).def endif else ifndef LINK_SUBPROJECTS LINK_SUBPROJECTS = YES endif EXECUTABLE_EXT = LIBRARY_PREFIX = lib ifeq "SOLARIS" "$(OS)" ifeq "STATIC" "$(LIBRARY_STYLE)" LIBRARY_EXT = .a else LIBRARY_EXT = .so endif else ifeq "HPUX" "$(OS)" ifeq "STATIC" "$(LIBRARY_STYLE)" LIBRARY_EXT = .a else LIBRARY_EXT = .sl endif else ifeq "STATIC" "$(LIBRARY_STYLE)" LIBRARY_EXT = .a else LIBRARY_EXT = .dylib endif endif endif DLL_EXT = NULL = /dev/null endif PROFILE_SUFFIX = _profile ifndef DEBUG_SUFFIX DEBUG_SUFFIX = _debug endif ifneq "NO" "$(INCLUDE_COMPATIBILITY_MAKEFILE)" include $(MAKEFILEDIR)/compatibility.make endif # # Roots # SRCROOT := $(shell pwd) # BUILD_SYMROOT is defined below under Directories for derived files ifndef OBJROOT OBJROOT = $(BUILD_SYMROOT) endif # BUILD_OUTPUT_DIR is defined below under Directories ifndef SYMROOT SYMROOT = $(BUILD_OUTPUT_DIR) endif # # Directories # ifneq "" "$($(PLATFORM_TYPE)_BUILD_OUTPUT_DIR)" BUILD_OUTPUT_DIR = $($(PLATFORM_TYPE)_BUILD_OUTPUT_DIR) endif ifeq "" "$(BUILD_OUTPUT_DIR)" BUILD_OUTPUT_DIR = $(SRCROOT) endif # # Java transformations # ## NOTE: This is OFF by default so OpenStep apps aren't affected. ifeq "$(JAVA_IS_CLIENT_SIDE)" "YES" JAVA_CLASSES_CLIENT := $(JAVA_CLASSES) endif ## NOTE: This is ON by default so OpenStep apps do compile for server-side. ifeq "$(JAVA_IS_SERVER_SIDE)" "NO" override JAVA_CLASSES = endif # Directories for derived files PRODUCT_DIR = $(SYMROOT) ifeq "" "$(TOPLEVEL_NAME)" TOPLEVEL_NAME = $(NAME) endif export TOPLEVEL_NAME BUILD_SYMROOT = $(SYMROOT)/$(TOPLEVEL_NAME).build OFILE_DIR = $(OBJROOT)/objects$(OFILE_DIR_SUFFIX) SFILE_DIR = $(BUILD_SYMROOT)/derived_src JAVA_SRC_DIR = $(BUILD_SYMROOT)/derived_src/java JAVA_SRC_DIR_CLIENT = $(JAVA_SRC_DIR)_client JAVA_OBJ_DIR = $(OBJROOT)/java_classes JAVA_OBJ_DIR_CLIENT = $(JAVA_OBJ_DIR)_client PROJECT_HDR_DIR = $(BUILD_SYMROOT)/ProjectHeaders ifneq "" "$(PUBLIC_HDR_DIR)" PUBLIC_HDR_DIR = $(BUILD_SYMROOT)/Headers/$(notdir $(PUBLIC_HDR_INSTALLDIR)) endif ifeq "YES" "$(WRAPPED)" ifeq "APP" "$(PROJTYPE)" PUBLIC_HDR_DIR = $(BUILD_SYMROOT)/Headers else PUBLIC_HDR_DIR = $(PRODUCT)/Headers endif endif ifneq "" "$(PRIVATE_HDR_DIR)" PRIVATE_HDR_DIR = $(BUILD_SYMROOT)/PrivateHeaders/$(notdir $(PRIVATE_HDR_INSTALLDIR)) endif ifeq "YES" "$(WRAPPED)" PRIVATE_HDR_DIR = $(PRODUCT)/PrivateHeaders endif ifeq "" "$(PRECOMP_TRUSTFILE)" PRECOMP_TRUSTFILE = $(SFILE_DIR)/TrustedPrecomps.txt endif export PUBLIC_HDR_DIR export PRIVATE_HDR_DIR export PUBLIC_HDR_INSTALLDIR export PRIVATE_HDR_INSTALLDIR export PRECOMP_TRUSTFILE # # File Lists # VPATH = $(OFILE_DIR) $(SFILE_DIR) $(LANGUAGE).lproj GENERATED_SRCFILES = $(MSGFILES:%.msg=%Speaker.h) $(MSGFILES:%.msg=%Speaker.m) $(MSGFILES:%.msg=%Listener.h) $(MSGFILES:%.msg=%Listener.m) $(DEFSFILES:%.defs=%.h) $(DEFSFILES:%.defs=%User.c) $(DEFSFILES:%.defs=%Server.c) $(MIGFILES:%.mig=%.h) $(MIGFILES:%.mig=%User.c) $(MIGFILES:%.mig=%Server.c) $(PSWFILES:.psw=.h) $(PSWFILES:.psw=.c) $(PSWMFILES:.pswm=.h) $(PSWMFILES:.pswm=.m) $(subst .x_svc,.c, $(subst .x_clnt,.c, $(subst .x_xdr,.c, $(subst .x,.h, $(RPCFILES))))) $(YFILES:.y=.c) $(YFILES:.y=.h) $(LFILES:.l=.c) $(YMFILES:.ym=.m) $(YMFILES:.ym=.h) $(LMFILES:.lm=.m) $(OTHER_GENERATED_SRCFILES) SRCFILES = PB.project $(JAVA_CLASSES) $(JAVA_CLASSES_CLIENT) $(OTHERSRCS) $(HFILES) $(CLASSES) $(MFILES) $(CFILES) $(CAPCFILES) $(CAPMFILES) $(CCFILES) $(CPPFILES) $(CXXFILES) $(YFILES) $(LFILES) $(YMFILES) $(LMFILES) $(PSWFILES) $(PSWMFILES) $(WOSFILES) $(foreach L,$(LANGUAGES),$(addprefix $(L).lproj/,$($(L)_RESOURCES))) $(GLOBAL_RESOURCES) $(foreach L,$(LANGUAGES),$(addprefix $(L).lproj/,$($(L)_HELP_FILES))) $(OTHERLINKED) $(OTHER_SOURCEFILES) LOCAL_OFILES = $(addsuffix .o, $(basename $(CLASSES) $(MFILES) $(CFILES) $(CAPCFILES) $(CAPMFILES) $(CCFILES) $(CPPFILES) $(CXXFILES) $(PSWFILES) $(PSWMFILES))) $(PROJTYPE_OFILES) $(OTHERLINKEDOFILES) $(OTHER_OFILES) $(OTHER_GENERATED_OFILES) GENERATED_JAVA_CLASSES += $(OTHER_GENERATED_JAVA_CLASSES) GENERATED_JAVA_CLASSES_CLIENT += $(OTHER_GENERATED_JAVA_CLASSES_CLIENT) JAVAFILES = $(strip $(JAVA_CLASSES) $(GENERATED_JAVA_CLASSES)) JAVAFILES_CLIENT = $(strip $(JAVA_CLASSES_CLIENT) $(GENERATED_JAVA_CLASSES_CLIENT)) ifeq "YES" "$(LINK_SUBPROJECTS)" SUBPROJ_OFILES = $(addsuffix _subproj.o,$(SUBPROJECTS)) OFILES = $(LOCAL_OFILES) $(SUBPROJ_OFILES) LOCAL_OFILELISTS = else OFILES = $(LOCAL_OFILES) SUBPROJ_OFILELISTS = $(addsuffix _subproj.ofileList,$(SUBPROJECTS)) LOCAL_OFILELISTS = $(SUBPROJ_OFILELISTS) endif LOCAL_OFILELISTS += $(OTHER_OFILELISTS) ifneq "" "$(strip $(LOCAL_OFILELISTS))" OFILELISTS = $(NAME).ofileList endif ALL_PRECOMPS = $(PRECOMPILED_HEADERS:.h=.p) $(PRECOMPS) PRECOMPILED_PUBLIC_HEADERS = $(foreach X, $(PRECOMPILED_HEADERS), $(findstring $(X), $(PUBLIC_HEADERS))) PRECOMPILED_PRIVATE_HEADERS = $(foreach X, $(PRECOMPILED_HEADERS), $(findstring $(X), $(PRIVATE_HEADERS))) PRECOMPILED_PROJECT_HEADERS = $(foreach X, $(PRECOMPILED_HEADERS), $(findstring $(X), $(PROJECT_HEADERS))) ifeq "$(BUILD_TYPE)" "normal" FRAMEWORK_FLAGS = $(FRAMEWORKS) PROJTYPE_FRAMEWORK_FLAGS = $(PROJTYPE_FRAMEWORKS) OTHER_FRAMEWORK_FLAGS = $(OTHER_FRAMEWORKS) OPTIONAL_FRAMEWORK_FLAGS = $(OPTIONAL_FRAMEWORKS) else FRAMEWORK_FLAGS = $(shell $(FRAMEWORK_TOOL) $(FRAMEWORKS) $(BUILD_TYPE)) PROJTYPE_FRAMEWORK_FLAGS = $(shell $(FRAMEWORK_TOOL) $(PROJTYPE_FRAMEWORKS) $(BUILD_TYPE)) OTHER_FRAMEWORK_FLAGS = $(shell $(FRAMEWORK_TOOL) $(OTHER_FRAMEWORKS) $(BUILD_TYPE)) OPTIONAL_FRAMEWORK_FLAGS = $(shell $(FRAMEWORK_TOOL) $(OPTIONAL_FRAMEWORKS) $(BUILD_TYPE)) endif DEPENDENCIES = $(ARCH_SPECIFIC_OFILES) $(OFILES) $(OFILELISTS) $(OTHER_PRODUCT_DEPENDS) ifeq "$(LIBRARY_STYLE)" "STATIC" LOADABLES = $(OFILELISTS:%=-filelist %) $(OFILES) $(LIBS) $(PROJTYPE_LIBS) $(OTHER_LIBS) $(OPTIONAL_LIBS) else LOADABLES = $(OFILELISTS:%=-filelist %) $(OFILES) $(LIBS) $(FRAMEWORK_FLAGS) $(PROJTYPE_LIBS) $(PROJTYPE_FRAMEWORK_FLAGS) $(OTHER_LIBS) $(OTHER_FRAMEWORK_FLAGS) $(OPTIONAL_LIBS) $(OPTIONAL_FRAMEWORK_FLAGS) endif GARBAGE = $(OBJROOT)/objects-* $(OBJROOT)/obj-* $(SFILE_DIR) $(PROJECT_HDR_DIR) $(PROJTYPE_GARBAGE) $(OTHER_GARBAGE) $(PRECOMPILED_HEADERS:.h=.p) $(PRECOMPS) $(JAVA_SRC_DIR) $(JAVA_SRC_DIR_CLIENT) $(JAVA_OBJ_DIR) $(JAVA_OBJ_DIR_CLIENT) include $(MAKEFILEDIR)/versions.make include $(MAKEFILEDIR)/commands-$(OS).make # if the Makefile has defined a compiler for a specific platform, # use that one instead of the one found in commands-$(OS).make ifneq "$($(PLATFORM_TYPE)_OBJCPLUS_COMPILER)" "" CC = $($(PLATFORM_TYPE)_OBJCPLUS_COMPILER) endif ifneq "$($(PLATFORM_TYPE)_OBJCPLUS_COMPILER)" "" JAVAC = $($(PLATFORM_TYPE)_JAVA_COMPILER) endif ifneq "$(findstring java,$(JAVAFILES)$(JAVAFILES_CLIENT))" "" JAVA_ENABLED = YES JAVA_USED = YES endif ifndef JAVA_NEEDED JAVA_NEEDED = $(JAVA_AWARE) endif ifeq "YES" "$(JAVA_USED)" ifeq "" "$(JAVA_NEEDED)" JAVA_NEEDED = YES endif endif include $(MAKEFILEDIR)/flags.make include $(MAKEFILEDIR)/recursion.make include $(MAKEFILEDIR)/implicitrules.make # # In general, no rules should be placed above the include lines above, to # ensure that when the rule is stored, any variables in that rule or its # dependencies have been fully defined. For example, OFILE_DIR may change # in flags.make. # $(OFILELISTS): $(LOCAL_OFILELISTS) Makefile $(OFILE_LIST_TOOL) -o $(OFILE_DIR)/$(NAME).ofileList $(LOCAL_OFILELISTS) # # Rules for creating help files # # Note that the LOCALIZED_HELP_PLIST, LOCALIZED_HELP_FILES, and # LOCALIZED_SUBPROJECT_HELP_PLISTS variables are defined in terms of the # current target ($*) and therefore are only meaningful in the context of # the {Language}.create-help-file targets. # # The ifneq "$(HELP_FILES)" "$($(LANGUAGE)_HELP_FILES)" statement below may be # a little unclear, so here's the explanation: # It is an error to have non-localized help files. This is because help files # are always written in some human language, and therefore implicitly local. # The ifneq enforces this. There are three possible states of the variables: # 1. Still using LANGUAGE, etc. instead of LANGUAGES, etc. # In this case, $(LANGUAGE)_HELP_FILES was assigned to $(HELP_FILES) earlier # in common.make, so the test is guaranteed to fail and the message is not reported # 2. Using the new variables. # In this case, $(LANGUAGE)_HELP_FILES is _HELP_FILES, which is undefined. # HELP_FILES is also undefined, and so "" != "" fails and hence no message # 3. Using the new variables, but have non-localized help files # $(LANGUAGE)_HELP_FILES is _HELP_FILES, which is undefined, but HELP_FILES # is defined. Therefore the ifneq succeeds, the message is reported, and the # build stops. # HELP_FILE_NAME = Help.plist ifeq "YES" "$(WRAPPED)" LOCALIZED_HELP_PLIST = $(GLOBAL_RESOURCE_DIR)/$*.lproj/$(HELP_FILE_NAME) else LOCALIZED_HELP_PLIST = $(SFILE_DIR)/$*$(HELP_FILE_NAME) endif LOCALIZED_HELP_FILES = $(addprefix $*.lproj/, $($*_HELP_FILES)) LOCALIZED_SUBPROJECT_HELP_PLISTS = $(wildcard $(foreach SUBPROJ, $(SUBPROJECTS), $(SFILE_DIR)/$(SUBPROJ)/$*$(HELP_FILE_NAME))) ALL_LOCALIZED_HELP_CONTENT = $(strip $(LOCALIZED_HELP_FILES) $(LOCALIZED_SUBPROJECT_HELP_PLISTS)) .SUFFIXES: .create-help-file create-help-file: $(addsuffix .create-help-file, $(LANGUAGES)) $(addsuffix .create-help-file, $(LANGUAGES)): ifneq "$(HELP_FILES)" "$($(LANGUAGE)_HELP_FILES)" $(SILENT) $(ECHO) common.make: localization error: Non-localized help files: $(HELP_FILES) $(SILENT) exit 1 endif $(SILENT) if [ ! -n "$(ALL_LOCALIZED_HELP_CONTENT)" ] || $(NEWER) -s -n $(LOCALIZED_HELP_PLIST) $(ALL_LOCALIZED_HELP_CONTENT); \ then \ $(ECHO) -n ; \ else \ $(ECHO) Processing $* help files... ; \ cmd="$(MKDIRS) $(dir $(LOCALIZED_HELP_PLIST))" ; \ $(ECHO) $$cmd ; $$cmd ; \ cmd="$(COMPILEHELP) $(LOCALIZED_HELP_FILES) $(addprefix -m , $(LOCALIZED_SUBPROJECT_HELP_PLISTS)) -o $(LOCALIZED_HELP_PLIST)" ; \ $(ECHO) $$cmd ; $$cmd ; \ fi # "Versioning Systems" adapt these makefiles to an SCM system in the following 2 ways: # 1. Provide a rule for an object file that can be linked into binaries produced here # (e.g. $(VERS_OFILE) could then be included in OTHER_GENERATED_OFILES). # 2. Provide a decimal number that can be used as the current project version to be # stored in a Mach dylib (i.e. $(CURRENT_PROJECT_VERSION)). ifndef VERSIONING_SYSTEM_MAKEFILEDIR VERSIONING_SYSTEM_MAKEFILEDIR = $(MAKEFILEPATH)/VersioningSystems endif ifndef LOCAL_VERSIONING_SYSTEM_MAKEFILEDIR LOCAL_VERSIONING_SYSTEM_MAKEFILEDIR = $(NEXT_ROOT)$(LOCAL_DEVELOPER_DIR)/Makefiles/VersioningSystems endif -include $(VERSIONING_SYSTEM_MAKEFILEDIR)/$(VERSIONING_SYSTEM).make -include $(LOCAL_VERSIONING_SYSTEM_MAKEFILEDIR)/$(VERSIONING_SYSTEM).make # In case $(VERSIONING_SYSTEM).make didn't set CURRENT_PROJECT_VERSION... ifeq "" "$(CURRENT_PROJECT_VERSION)" CURRENT_PROJECT_VERSION = 1 endif ifeq "" "$(COMPATIBILITY_PROJECT_VERSION)" COMPATIBILITY_PROJECT_VERSION = 1 endif # STRIP_ON_INSTALL must have a value ifneq "$(STRIP_ON_INSTALL)" "NO" STRIP_ON_INSTALL = YES endif # On Windows, we want to force the loading of framework DLL's. ifeq "WINDOWS" "$(OS)" ifneq "" "$(FRAMEWORKS)" FORCELOAD_FILENAME = NSFrameworkForceLoad_$(NAME).m FORCELOAD_FILEPATH = $(SFILE_DIR)/$(FORCELOAD_FILENAME) OTHER_GENERATED_SRCFILES += $(FORCELOAD_FILENAME) OTHER_GENERATED_OFILES += $(FORCELOAD_FILENAME:.m=.o) BEFORE_BUILD_RECURSION += generate-forceload-file STD_FRAMEWORK_SEARCHPATHS = -F$(NEXT_ROOT)$(SYSTEM_LIBRARY_DIR)/Frameworks -F$(NEXT_ROOT)$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks FRAMEWORK_ARGS = $(ALL_LDFLAGS) $(FRAMEWORKS) $(STD_FRAMEWORK_SEARCHPATHS) generate-forceload-file: $(FORCELOAD_FILEPATH) $(FORCELOAD_FILEPATH): Makefile $(SILENT) $(MKDIRS) $(SFILE_DIR) $(SILENT) $(RM) -f $(FORCELOAD_FILEPATH) $(GENFORCELOAD) $(FRAMEWORK_ARGS) > $(FORCELOAD_FILEPATH) $(FORCELOAD_FILENAME:.m=.o): $(FORCELOAD_FILEPATH) $(CC) -c $(filter-out -W%, $(ALL_CFLAGS)) -o $(OFILE_DIR)/$(FORCELOAD_FILENAME:.m=.o) $< endif endif # Back to Java... ifeq "YES" "$(JAVA_USED)" ifeq "$(patsubst $(PRODUCT)%,,$(JAVA_INSTALL_DIR))" "$(JAVA_INSTALL_DIR)" JAVA_DSTROOT = $(DSTROOT) endif ifeq "$(patsubst $(PRODUCT)%,,$(JAVA_INSTALL_DIR_CLIENT))" "$(JAVA_INSTALL_DIR_CLIENT)" JAVA_DSTROOT_CLIENT = $(DSTROOT) endif endif ifneq "AGGREGATE" "$(PROJTYPE)" # 04/14/1999 RDW -- Excluding depend.make for stage 1 builds on PDO # (when we're bootstrapping everything). Should # be on for all other cases. This was causing # problems in stage 1 builds on HP-UX. ifndef PDO_STAGE1BUILD include $(MAKEFILEDIR)/depend.make endif include $(MAKEFILEDIR)/prebuild.make include $(MAKEFILEDIR)/build.make include $(MAKEFILEDIR)/installhdrs.make include $(MAKEFILEDIR)/install.make endif include $(MAKEFILEDIR)/installsrc.make always: # # architecture-specific .o files get combined into fat .o files # ifneq "$(LIPO)" "" ARCH_SPECIFIC_OFILES = $(foreach OFILE, $(LOCAL_OFILES), $(foreach ARCH, $(ADJUSTED_TARGET_ARCHS), $(OFILE_DIR)/$(notdir $(basename $(OFILE))).$(ARCH).o)) $(OFILES): $(ARCH_SPECIFIC_OFILES) endif # # Sequencing # ifneq "YES" "$(RECURSING)" announce-prebuild announce-build announce-installhdrs announce-install: display-masthead endif ifneq "AGGREGATE" "$(PROJTYPE)" ifneq "YES" "$(RECURSING)" ifneq "YES" "$(SKIP_BUILD)" announce-install: build endif ifneq "YES" "$(SKIP_PREBUILD)" announce-build: prebuild endif endif endif # # Conveniences # profile: $(SILENT) unset $(CUMULATIVE_VARIABLES) ||: ; \ $(MAKE) PROFILE=YES \ BUILD_TYPE=$@ \ BUILD_TYPE_SUFFIX=$(PROFILE_SUFFIX) \ APP_WRAPPER_EXTENSION=.profile debug: $(SILENT) unset $(CUMULATIVE_VARIABLES) ||: ; \ $(MAKE) DEBUG=YES PROFILE=NO OPTIMIZE=NO \ BUILD_TYPE=$@ \ BUILD_TYPE_SUFFIX=$(DEBUG_SUFFIX) \ APP_WRAPPER_EXTENSION=.debug BUILD_TYPE = normal # # Masthead # display-masthead: ifeq "$(BUILD_TYPE)" "normal" $(SILENT) $(ECHO) == Making $(NAME) for $(ADJUSTED_TARGET_ARCHS) == else $(SILENT) $(ECHO) == Making $(BUILD_TYPE) on $(NAME) for $(ADJUSTED_TARGET_ARCHS) == endif # # Makefile-Debugging and Variable-Access Rules # .PHONY: show-variable sv show-expression se VARIABLE=$(V) show-variables sv: $(SILENT) $(foreach X, $(VARIABLE), $(ECHO) "$($(X))";) EXPRESSION=$(E) show-expression se: $(SILENT) $(foreach X, $(EXPRESSION), $(ECHO) "$(X)";) echo_makefile_variable: $(SILENT) $(foreach X, $(VAR_NAME), $(ECHO) "$($(X))";) echo_makefile_expression: $(SILENT) $(foreach X, $(EXPR_STRING), $(ECHO) "$(X)";) # # Cleaning Rules # .PHONY: clean mostlyclean announce-clean clean: announce-clean $(RM) -rf $(GARBAGE) $(PRODUCTS) ifneq "$(SYMROOT)" "$(BUILD_SYMROOT)" $(RM) -rf $(BUILD_SYMROOT) endif mostlyclean: announce-clean $(RM) -rf $(GARBAGE) ifneq "$(SYMROOT)" "$(BUILD_SYMROOT)" $(RM) -rf $(BUILD_SYMROOT) endif announce-clean: $(SILENT) $(ECHO) == Cleaning $(NAME) == # # Some install conveniences that apply to all projects # # The install_java_debug target creates the _g libraries that # Sun's VM needs to run native method implementations under jdb # install_java_debug: $(MAKE) install DEBUG=YES PROFILE=NO OPTIMIZE=NO STRIP_ON_INSTALL=NO \ BUILD_TYPE=debug BUILD_TYPE_SUFFIX=$(DEBUG_SUFFIX) \ SRCROOT=$(SRCROOT) SYMROOT=$(SYMROOT) OBJROOT=$(OBJROOT) install_debug: $(MAKE) install DEBUG=YES PROFILE=NO OPTIMIZE=NO STRIP_ON_INSTALL=NO install_unstripped: $(MAKE) install DEBUG=NO PROFILE=NO OPTIMIZE=YES STRIP_ON_INSTALL=NO install_profile: $(MAKE) install DEBUG=YES PROFILE=YES OPTIMIZE=YES STRIP_ON_INSTALL=NO ifeq "YES" "$(JAVA_USED)" COPY_JAVA_FS = copy-java-fs-wtar # ZIP_JAVA_CLASSES is deprecated but it meant no archiving, so we'll # honour it here if possible. ifeq "NO" "$(ZIP_JAVA_CLASSES)" ARCHIVE_JAVA_CLASSES = NO endif # Find the appropriate way to archive the Java classes. ifneq "NO" "$(ARCHIVE_JAVA_CLASSES)" ifndef JAVA_ARCHIVE_METHOD JAVA_ARCHIVE_METHOD = ZIP endif ifeq "JAR" "$(JAVA_ARCHIVE_METHOD)" ifndef JAVA_JAR_NAME JAVA_JAR_NAME := $(shell $(SHELL) -c 'JJAR=`$(ECHO) $(NAME) | $(TR) "[A-Z]" "[a-z]"`; $(ECHO) $${JJAR:=$(NAME)}').jar endif JAVA_JAR_NAME_CLIENT = $(NAME).jar COPY_JAVA_CLASSES = copy-java-jar JAVA_PRODUCT = $(JAVA_JAR_NAME) JAVA_PRODUCT_CLIENT = $(JAVA_JAR_NAME) endif ifeq "ZIP" "$(JAVA_ARCHIVE_METHOD)" ifndef JAVA_ZIP_NAME JAVA_ZIP_NAME := $(shell $(SHELL) -c 'JZIP=`$(ECHO) $(NAME) | $(TR) "[A-Z]" "[a-z]"`; $(ECHO) $${JZIP:=$(NAME)}').zip endif COPY_JAVA_CLASSES = copy-java-zip JAVA_PRODUCT = $(JAVA_ZIP_NAME) endif endif ifneq "" "$(JAVA_PRODUCT)" JAVA_PRODUCTS_PATH = \"$(JAVA_PRODUCT)\" endif #ifndef JAVA_PRODUCT #JAVA_PRODUCT = "`$(SHELL) -c '$(CD) $(JAVA_OBJ_DIR) && $(FIND) * -print'`" #endif #ifndef JAVA_PRODUCT_CLIENT #JAVA_PRODUCT_CLIENT = "`$(SHELL) -c '$(CD) $(JAVA_OBJ_DIR_CLIENT) && $(FIND) * -print'`" #endif ifneq "" "$(JAVA_PRODUCT)" GARBAGE += $(JAVA_RESOURCE_DIR)/$(JAVA_PRODUCT) endif ifneq "" "$(JAVA_PRODUCT_CLIENT)" GARBAGE += $(JAVA_RESOURCE_DIR_CLIENT)/$(JAVA_PRODUCT_CLIENT) endif ifeq "" "$(COPY_JAVA_CLASSES)" COPY_JAVA_CLASSES = $(COPY_JAVA_FS) endif ANNOUNCE_COPY_JAVA = announce-copy-java copy-java-classes: $(ANNOUNCE_COPY_JAVA) relax-java-permissions $(COPY_JAVA_CLASSES) ifneq "YES" "$(RECURSING)" announce-copy-java: display-masthead endif announce-copy-java: $(SILENT) echo Copying Java classes... relax-java-permissions: relax-java-perms relax-java-perms-client relax-java-perms: ifdef CHMOD -$(SILENT) if [ ! -z "$(JAVA_OBJ_DIR)" -a -d "$(JAVA_OBJ_DIR)" ]; then \ $(ECHO) $(CHMOD) -R a+rX $(JAVA_OBJ_DIR); \ $(CHMOD) -R a+rX $(JAVA_OBJ_DIR); \ fi endif relax-java-perms-client: ifdef CHMOD -$(SILENT) if [ ! -z "$(JAVA_OBJ_DIR_CLIENT)" -a -d "$(JAVA_OBJ_DIR_CLIENT)" ]; then \ $(ECHO) $(CHMOD) -R a+rX $(JAVA_OBJ_DIR_CLIENT); \ $(CHMOD) -R a+rX $(JAVA_OBJ_DIR_CLIENT); \ fi endif copy-java-fs-wfastcp: $(SILENT) if [ -d "$(JAVA_OBJ_DIR)" ]; then \ $(CD) $(JAVA_OBJ_DIR); if [ "*" != "`$(ECHO) *`" ]; then \ $(MKDIRS) $(JAVA_RESOURCE_DIR); \ $(FASTCP) $(JAVA_OBJ_DIR)/* $(JAVA_RESOURCE_DIR); \ fi; \ fi $(SILENT) if [ -d "$(JAVA_OBJ_DIR_CLIENT)" ]; then \ $(CD) $(JAVA_OBJ_DIR_CLIENT); if [ "*" != "`$(ECHO) *`" ]; then \ $(MKDIRS) $(JAVA_RESOURCE_DIR_CLIENT); \ $(FASTCP) $(JAVA_OBJ_DIR_CLIENT)/* $(JAVA_RESOURCE_DIR_CLIENT); \ fi; \ fi copy-java-fs-wtar: $(SILENT) if [ -d "$(JAVA_OBJ_DIR)" ]; then \ $(CD) $(JAVA_OBJ_DIR); if [ "*" != "`$(ECHO) *`" ]; then \ $(MKDIRS) $(JAVA_RESOURCE_DIR); \ ($(CD) $(JAVA_OBJ_DIR) && $(TAR) cf - *) | ($(CD) $(JAVA_RESOURCE_DIR) && $(TAR) xpf -) && echo Copied `($(CD) $(JAVA_OBJ_DIR) && ls -d *)`; \ fi; \ fi $(SILENT) if [ -d "$(JAVA_OBJ_DIR_CLIENT)" ]; then \ $(CD) $(JAVA_OBJ_DIR_CLIENT); if [ "*" != "`$(ECHO) *`" ]; then \ $(MKDIRS) $(JAVA_RESOURCE_DIR_CLIENT); \ ($(CD) $(JAVA_OBJ_DIR_CLIENT) && $(TAR) cf - *) | ($(CD) $(JAVA_RESOURCE_DIR_CLIENT) && $(TAR) xpf -) && echo Copied `($(CD) $(JAVA_OBJ_DIR_CLIENT) && ls -d *)`; \ fi; \ fi # Note: Info-ZIP's zip recursively exploration of directories looks broken # so we have to find the .class files ourselves in order to have a correct # archive of classes. # As a matter of fact, we do not want to zip the client-side Java: hey, how # will it be served by an HTTP server, then? So we just use the fastcp copy. copy-java-zip: $(SILENT) if [ -d "$(JAVA_OBJ_DIR)" -a "$(JAVA_CLASSES)" ]; then \ $(CD) $(JAVA_OBJ_DIR); if [ "*" != "`$(ECHO) *`" ]; then \ $(MKDIRS) $(JAVA_RESOURCE_DIR); \ if [ "$(ARCHIVE_ALL_JAVA_CLASSES)" = "NO" ]; then \ $(CD) $(JAVA_OBJ_DIR) && $(MKZIP) $(JAVA_ZIP_FLAGS) $(JAVA_RESOURCE_DIR)/$(JAVA_ZIP_NAME) `$(ECHO) "$(JAVA_CLASSES)" | $(SED) -e "s/\.java/\.class/g"` && $(ECHO) Zipped `$(ECHO) "$(JAVA_CLASSES)" | $(SED) -e "s/\.java/\.class/g"`; \ else \ $(CD) $(JAVA_OBJ_DIR) && $(MKZIP) $(JAVA_ZIP_FLAGS) $(JAVA_RESOURCE_DIR)/$(JAVA_ZIP_NAME) `$(FIND) . \( -type d -o -name \*.class \) -print | $(SED) 's,^\./,,'` && echo Zipped `ls -d *`; \ fi; \ fi; \ fi $(SILENT) if [ -d "$(JAVA_OBJ_DIR_CLIENT)" ]; then \ $(CD) $(JAVA_OBJ_DIR_CLIENT); if [ "*" != "`$(ECHO) *`" ]; then \ $(MKDIRS) $(JAVA_RESOURCE_DIR_CLIENT); \ $(FASTCP) $(JAVA_OBJ_DIR_CLIENT)/* $(JAVA_RESOURCE_DIR_CLIENT); \ fi; \ fi # If we have jar, we certainly will use this rule rather than the zip one. copy-java-jar-resources: $(JAVA_OBJ_DIR) ifneq "$(OTHER_JAR_RESOURCES)" "" $(SILENT) $(FASTCP) $(OTHER_JAR_RESOURCES) $(JAVA_OBJ_DIR) endif ifneq "$(OTHER_JAR_RESOURCES_CLIENT)" "" $(SILENT) $(FASTCP) $(OTHER_JAR_RESOURCES_CLIENT) $(JAVA_OBJ_DIR_CLIENT) endif copy-java-jar: copy-java-jar-resources $(SILENT) if [ -d "$(JAVA_OBJ_DIR)" -a "$(JAVA_CLASSES)" ]; then \ $(CD) $(JAVA_OBJ_DIR); if [ "*" != "`$(ECHO) *`" ]; then \ $(MKDIRS) $(JAVA_RESOURCE_DIR); \ if [ "$(ARCHIVE_ALL_JAVA_CLASSES)" = "NO" ]; then \ $(CD) $(JAVA_OBJ_DIR) && $(JAR) $(JAVA_JAR_FLAGS) $(JAVA_JAR_PARTIAL_MANIFEST) $(JAVA_RESOURCE_DIR)/$(JAVA_JAR_NAME) `$(ECHO) "$(JAVA_CLASSES)" | $(SED) -e "s/\.java/\.class/g"` && $(ECHO) Jarred `$(ECHO) "$(JAVA_CLASSES)" | $(SED) -e "s/\.java/\.class/g"`; \ else \ $(CD) $(JAVA_OBJ_DIR) && $(JAR) $(JAVA_JAR_FLAGS) $(JAVA_JAR_PARTIAL_MANIFEST) $(JAVA_RESOURCE_DIR)/$(JAVA_JAR_NAME) * && echo Jarred `ls -d *`; \ fi; \ fi; \ fi $(SILENT) if [ -d "$(JAVA_OBJ_DIR_CLIENT)" ]; then \ $(CD) $(JAVA_OBJ_DIR_CLIENT); if [ "*" != "`$(ECHO) *`" ]; then \ $(MKDIRS) $(JAVA_RESOURCE_DIR_CLIENT); \ $(CD) $(JAVA_OBJ_DIR_CLIENT) && $(JAR) $(JAVA_JAR_FLAGS_CLIENT) $(JAVA_JAR_PARTIAL_MANIFEST_CLIENT) $(JAVA_RESOURCE_DIR_CLIENT)/$(JAVA_JAR_NAME_CLIENT) * && $(ECHO) Jarred `ls -d *`; \ $(FASTCP) $(JAVA_OBJ_DIR_CLIENT)/* $(JAVA_RESOURCE_DIR_CLIENT); \ fi; \ fi endif -include $(LOCAL_MAKEFILEDIR)/common.make.postamble