|
|
1.1 root 1: ###############################################################################
2: # NeXT common.make
3: # Copyright 1992, NeXT Computer, Inc.
4: #
5: # This makefile is common to all project-types (apps, subprojects,
6: # bundles, and palettes). It can also prove useful to custom Makefiles
7: # needing generic project-building functionality, but users should be aware
8: # that interfaces supported at this level are private to the app makefiles
9: # and may change from release to release.
10: #
11: ###############################################################################
12:
13:
14:
15: SUPPORTFILES = IB.nproj Makefile makefile $(NAME).iconheader \
16: Makefile.preamble Makefile.postamble *.project
17:
18: SRCFILES = $(CLASSES) $(MFILES) $(CFILES) \
19: $(CCFILES) $(CAPCFILES) $(CAPMFILES) $(CXXFILES) $(CPPFILES) \
20: $(HFILES) $(PSWFILES) $(PSWMFILES) $(DBMODELAFILES) \
21: $(GLOBAL_RESOURCES) \
22: $(OTHERSRCS) $(OTHERLINKED) $(OTHER_SOURCEFILES)
23:
24: ### Compute all the possible derived files and directories for them:
25:
26: SRCROOT = .
27: DERIVED_SRC_DIR_NAME = derived_src
28:
29: # Directory for .o files (can be thrown away)
30: OFILE_DIR = $(OBJROOT)/obj
31: # Directory for all other derived files (contains symbol info. for debugging)
32: SYM_DIR = $(SYMROOT)/$(DERIVED_SRC_DIR_NAME)
33: # Directory for all public headers of the entire project tree
34: LOCAL_HEADER_DIR = $(SYMROOT)/Headers/$(NAME)
35:
36: # For compatibility:
37: DERIVED_DIR = $(OFILE_DIR)
38: DERIVED_SRC_DIR = $(SYM_DIR)
39:
40: $(OFILE_DIR) $(SYM_DIR) $(PUBLIC_HEADER_DIR) $(DSTROOT)$(INSTALLDIR) $(PRODUCT_ROOT):
41: @$(MKDIRS) $@
42:
43: MSGOFILES = $(MSGFILES:.msg=Speaker.o) $(MSGFILES:.msg=Listener.o)
44: MSGDERIVEDMFILES = $(MSGFILES:.msg=Speaker.m) $(MSGFILES:.msg=Listener.m)
45:
46: ALLMIGFILES = $(MIGFILES) $(DEFSFILES)
47:
48: MIGOFILES = $(MIGFILES:.mig=User.o) $(MIGFILES:.mig=Server.o)
49: DEFSOFILES = $(DEFSFILES:.defs=User.o) $(DEFSFILES:.defs=Server.o)
50: ALLMIGOFILES = $(MIGOFILES) $(DEFSOFILES)
51:
52: MIGDERIVEDCFILES = $(MIGFILES:.mig=User.c) $(MIGFILES:.mig=Server.c)
53: DEFSDERIVEDCFILES = $(DEFSFILES:.defs=User.c) $(DEFSFILES:.defs=Server.c)
54: ALLMIGDERIVEDCFILES = $(MIGDERIVEDCFILES) $(DEFSDERIVEDCFILES)
55:
56: EARLY_HFILES = $(PSWFILES:.psw=.h) $(PSWMFILES:.pswm=.h)
57: EARLY_OFILES = $(PSWFILES:.psw=.o) $(PSWMFILES:.pswm=.o)
58:
59: ALL_PRECOMPS = $(PRECOMPILED_HEADERS:.h=.p) $(PRECOMPS)
60: INITIAL_TARGETS = $(OFILE_DIR) $(SYM_DIR) $(EARLY_HFILES) $(MSGOFILES) $(ALLMIGOFILES) $(ALL_PRECOMPS) refresh_precomps export_headers $(OTHER_INITIAL_TARGETS)
61:
62: SUBPROJ_OFILES = $(SUBPROJECTS:.subproj=_subproj.o)
63: SUBPROJ_OFILELISTS = $(SUBPROJECTS:.subproj=_subproj.ofileList)
64: NON_SUBPROJ_OFILES = $(CLASSES:.m=.o) $(MFILES:.m=.o) $(CFILES:.c=.o) \
65: $(CCFILES:.cc=.o) $(CAPCFILES:.C=.o) $(CAPMFILES:.M=.o) \
66: $(CXXFILES:.cxx=.o) $(CPPFILES:.cpp=.o) $(EARLY_OFILES) \
67: $(OTHERLINKEDOFILES)
68: OFILES = $(SUBPROJ_OFILES) $(NON_SUBPROJ_OFILES)
69:
70: # Note: It would be nice to put $(OTHERRELOCATABLES) in this list someday
71: # when PB provides full paths for the contents of this variable.
72:
73: # Derived resources:
74: DBMODELS = $(DBMODELAFILES:.dbmodela=.dbmodel)
75:
76: HELP_DIRS = Help
77: HELP_STORES = $(HELP_DIRS:=.store) $(OTHER_HELP_DIRS:=.store)
78:
79: ### Set defaults for many values used throughout the app Makefiles
80:
81: # Default extension for bundles (directories containing object code and resources)
82:
83: MAKEFILES = Makefile
84:
85: PRODUCT_DEPENDS = $(OFILES) $(OTHER_OFILES) $(DBMODELS) \
86: $(ICONHEADER) $(APPICON) $(DOCICONS) $(MAKEFILES) \
87: $(OTHER_PRODUCT_DEPENDS)
88:
89: GARBAGE = $(PROJECT_TYPE_SPECIFIC_GARBAGE) \
90: $(OBJROOT)/*_obj $(OFILE_DIR) \
91: $(SYMROOT)/$(DERIVED_SRC_DIR_NAME) $(SYMROOT)/sym \
92: *~ $(LANGUAGE).lproj/*~ $(VERS_FILE) \
93: Makefile.dependencies $(SYMROOT)/$(CHANGES_FILE_BASE)* gmon.out \
94: $(ALL_PRECOMPS) $(OTHER_INITIAL_TARGETS) $(OTHER_GARBAGE)
95:
96: GARBAGE_TO_BE = \
97: $(DEV_PUBLIC_HEADER_DIR) $(DEV_PROJECT_HEADER_DIR) \
98: $(DEV_PRIVATE_HEADER_DIR)
99:
100: # Default name for file to use as "reference time of last build"
101: CHANGES_FILE_BASE = .lastBuildTime
102:
103: # Defaults for who to chown executables to when installing
104: INSTALL_AS_USER = root
105: INSTALL_AS_GROUP = wheel
106:
107: # Compiler flags that may be overridden
108: OPTIMIZATION_CFLAG = -O
109: DEBUG_SYMBOLS_CFLAG = -g
110: WARNING_CFLAGS = -Wall
111: DEBUG_BUILD_CFLAGS = -DDEBUG
112: PROFILE_BUILD_CFLAGS = -pg -DPROFILE
113: POSIX_BUILD_CFLAGS = -D_POSIX_LIB
114: SHLIB_BUILD_CFLAGS = -I/LocalDeveloper/Headers/libsys -i/LocalDeveloper/Headers/libsys/shlib.h -DSHLIB
115:
116: # Default compiler options
117: ALL_FRAMEWORK_CFLAGS = $(FRAMEWORK_PATHS) $(PROPOGATED_FRAMEWORK_CFLAGS)
118: PROJECT_SPECIFIC_CFLAGS = $(CFLAGS) $(OTHER_CFLAGS) $(HEADER_PATHS) $(PB_CFLAGS)
119: PROJ_CFLAGS = $(PROJECT_SPECIFIC_CFLAGS)
120: COMMON_CFLAGS = $(DEBUG_SYMBOLS_CFLAG) $(WARNING_CFLAGS) $(PROJECT_SPECIFIC_CFLAGS)
121: all_target_CFLAGS = $(COMMON_CFLAGS) $(OPTIMIZATION_CFLAG)
122: debug_target_CFLAGS = $(COMMON_CFLAGS) $(DEBUG_BUILD_CFLAGS)
123: profile_target_CFLAGS = $(COMMON_CFLAGS) $(PROFILE_BUILD_CFLAGS) $(OPTIMIZATION_CFLAG)
124: app_target_CFLAGS = $(all_target_CFLAGS)
125: library_target_CFLAGS = $(all_target_CFLAGS)
126: framework_target_CFLAGS = $(all_target_CFLAGS)
127: bundle_target_CFLAGS = $(all_target_CFLAGS)
128: posix_target_CFLAGS = $(COMMON_CFLAGS) $(POSIX_BUILD_CFLAGS) $(OPTIMIZATION_CFLAG)
129: shlib_target_CFLAGS = $(COMMON_CFLAGS) $(SHLIB_BUILD_CFLAGS) $(OPTIMIZATION_CFLAG)
130: OBJCFLAG = -ObjC
131:
132: # ...and the actual flags used in compilation (see basicrules.make)
133: ALL_CFLAGS = $(ALL_FRAMEWORK_CFLAGS) $(PROJ_CFLAGS) $(PROPOGATED_CFLAGS) -I$(DEV_PROJECT_HEADER_DIR) -I$(SYM_DIR) $(RC_CFLAGS)
134: ALL_PRECOMP_CFLAGS = $(ALL_FRAMEWORK_CFLAGS) $(PROJ_CFLAGS) $(PROPOGATED_CFLAGS) -I$(SYM_DIR) $(ALL_ARCH_FLAGS)
135:
136: # Link editor options:
137: CUMULATIVE_LDFLAGS = $(LIBRARY_PATHS) $(PB_LDFLAGS) $(LDFLAGS) $(OTHER_LDFLAGS)
138: ALL_LDFLAGS = $(CUMULATIVE_LDFLAGS) $(PROPOGATED_LDFLAGS) $(PROJECT_SPECIFIC_LDFLAGS)
139:
140: # Yacc options
141: YFLAGS = -d
142:
143: # Defaults strip options
144: INTERFACE_DESC_FILE = /NextDeveloper/Makefiles/project/interface.symbols
145: #DYLD_EXEC_STRIP_OPTS = -s $(INTERFACE_DESC_FILE) -u -A
146: DYLD_EXEC_STRIP_OPTS = -S
147: APP_STRIP_OPTS = $(DYLD_EXEC_STRIP_OPTS)
148: TOOL_STRIP_OPTS = $(DYLD_EXEC_STRIP_OPTS)
149: LIBRARY_STRIP_OPTS = -S # Note: -S strips debugging symbols
150: DYNAMIC_STRIP_OPTS = -S
151:
152: # Various commands:
153: SHELL = /bin/sh
154: FASTCP = /usr/lib/fastcp
155: FASTLN = /usr/lib/fastln
156: CHANGES = /usr/lib/changes
157: ARCH_TOOL = /usr/lib/arch_tool
158: OFILE_LIST_TOOL = /usr/lib/ofileListTool -removePrefix ../ -removePrefix $(OBJROOT)/
159: DEARCHIFY = $(ARCH_TOOL) -dearchify
160: ARCHIFY = $(ARCH_TOOL) -archify_list
161: CHOWN = /etc/chown
162: CHMOD = /bin/chmod
163: TAR = /usr/bin/gnutar
164: LIBTOOL = /bin/libtool
165: STRIP = /bin/strip
166: RM = /bin/rm
167: LN = /bin/ln -s
168: CP = /bin/cp
169: INSTALL_HEADERS_CMD = $(CP) -p
170: ECHO = /bin/echo
171: MKDIRS = /bin/mkdirs
172: TOUCH = /usr/bin/touch
173: AWK = /bin/awk
174: PSWRAP = /usr/bin/pswrap
175: MSGWRAP = /usr/bin/msgwrap
176: MIG = /usr/bin/mig
177: DBC = /NextDeveloper/Apps/DBModeler.app/dbcompiler
178: COMPRESSHELP = /usr/bin/compresshelp
179: FIXPRECOMPS = /usr/bin/fixPrecomps
180: LIBTOOL = /bin/libtool
181:
182: PUSHD = pushed_dir=`pwd` ; cd
183: POPD = cd $$pushed_dir
184:
185: ADAPTOR_SEARCH_PATH = $(HOME)/Library/Adaptors /LocalLibrary/Adaptors /NextLibrary/Adaptors
186:
187: DEFAULT_BUNDLE_EXTENSION = bundle
188:
189: # Set VPATH via a variable so clients of common.make can reuse it when overriding VPATH
190: NORMAL_VPATH = $(OFILE_DIR):$(SYM_DIR):$(LANGUAGE).lproj:$(PRODUCT_ROOT):$(PRODUCT_ROOT)/$(LANGUAGE).lproj
191: VPATH = $(VPATH_PREAMBLE)$(NORMAL_VPATH)$(VPATH_POSTAMBLE)
192:
193:
194: # Generation of a version string if project lives in correct directory name
195: # To activate this feature, put your source code in a directory named
196: # $(NAME).%d[.%d][.%d] and set OTHER_GENERATED_OFILES = $(VERS_OFILES).
197: VERS_FILE = $(SYM_DIR)/$(NAME)_vers.c
198: VERS_OFILE = $(OFILE_DIR)/$(NAME)_vers.o
199: $(VERS_FILE):
200: $(RM) -f $(VERS_FILE) ; \
201: vers_string -c $(NAME) \
202: | sed s/SGS_VERS/$(NAME)_VERS_STRING/ \
203: | sed s/VERS_NUM/$(NAME)_VERS_NUM/ > $@
204:
205: ALL_OTHER_OFILES = $(OTHER_OFILES) $(OTHER_GENERATED_OFILES)
206:
207: ### Use a set of basic suffix-style rules:
208:
209: COMMON_APP_MAKEFILE_DIR = /NextDeveloper/Makefiles/project
210: include $(COMMON_APP_MAKEFILE_DIR)/basicrules.make
211:
212: ### Some utility definitions used throughout the PB Makefiles
213:
214: process_target_archs = \
215: if [ -n "$(TARGET_ARCHS)" ] ; then \
216: archs="$(TARGET_ARCHS)" ; \
217: else \
218: if [ -n "$(RC_ARCHS)" ] ; then \
219: archs="$(RC_ARCHS)" ; \
220: else \
221: archs=`/usr/bin/arch` ; \
222: fi ; \
223: fi ; \
224: if [ -z "$$archs" ] ; then \
225: archs=`/usr/bin/arch` ; \
226: fi ; \
227: archless_rcflags=`$(DEARCHIFY) $(RC_CFLAGS)` ; \
228: arch_flags=`$(ARCHIFY) $$archs` ; \
229: $(set_build_output_dirs)
230:
231: set_build_output_dirs = \
232: if [ -n "$(BUILD_OUTPUT_DIR)" ] ; then \
233: build_output_dir="$(BUILD_OUTPUT_DIR)" ; \
234: else \
235: build_output_dir="." ; \
236: fi ; \
237: if [ -n "$(SYMROOT)" ] ; then \
238: symroot="$(SYMROOT)" ; \
239: else \
240: symroot=$$build_output_dir ; \
241: fi ; \
242: if [ -n "$(OBJROOT)" ] ; then \
243: objroot="$(OBJROOT)" ; \
244: else \
245: objroot=$$build_output_dir ; \
246: fi
247:
248: set_bundle_ext = \
249: if [ -z "$(BUNDLE_EXTENSION)" ] ; then \
250: bundle_ext=$(DEFAULT_BUNDLE_EXTENSION) ; \
251: else \
252: bundle_ext=$(BUNDLE_EXTENSION) ; \
253: fi
254:
255: DYNAMIC_CFLAGS = -fno-common
256: DYNAMIC_LDFLAGS = # -all_load
257:
258: set_language_flags = \
259: if [ -n "$(RC_KANJI)" -o "$(JAPANESE)" = "YES" ] ; then \
260: language_cflags='-DKANJI' ; \
261: libs="$(LIBS:lNeXT_s=lNeXTJ_s)" ; \
262: other_libs="$(OTHER_LIBS:lNeXT_s=lNeXTJ_s)" ; \
263: other_japanese_libs="$(OTHER_JAPANESE_LIBS)" ; \
264: else \
265: language_cflags='' ; \
266: libs="$(LIBS)" ; \
267: other_libs="$(OTHER_LIBS)" ; \
268: other_japanese_libs=""; \
269: fi
270:
271: set_dynamic_flags = \
272: if [ "$@" = "shlib" ] ; then \
273: dynamic_cflags="-static" ; \
274: else \
275: if [ "$(CODE_GEN_STYLE)" = "DYNAMIC" ] ; then \
276: buildtype="dynamic" ; \
277: dynamic_cflags="-dynamic $(DYNAMIC_CFLAGS)" ; \
278: library_ext="dylib" ; \
279: else \
280: buildtype="static" ; \
281: dynamic_cflags="-static" ; \
282: library_ext="a" ; \
283: fi ; \
284: fi ; \
285: if [ "$@" = "shlib" -o "$@" = "posix" ] ; then \
286: buildtype="$@" ; \
287: fi ; \
288: libname="lib$(NAME).$$library_ext"
289:
290:
291: set_dynamic_link_flags = \
292: if [ "$(CODE_GEN_STYLE)" = "DYNAMIC" ]; then \
293: dynamic_libtool_flags="-dynamic -install_name $(DYLIB_INSTALL_DIR)/$(DYLIB_INSTALL_NAME)" ; \
294: dynamic_ldflags="$(DYNAMIC_LDFLAGS)" ; \
295: else \
296: dynamic_libtool_flags="-static" ; \
297: fi
298:
299:
300: set_objdir = \
301: if [ "$@" = "debug" -o "$@" = "profile" ] ; then \
302: objdir="$@_obj" ; \
303: else \
304: objdir="obj" ; \
305: fi
306:
307: set_build_for_arch = \
308: build_for_arch=yes; \
309: for excluded_arch in $(EXCLUDED_ARCHS) none ; do \
310: if [ "$$arch" = "$$excluded_arch" ] ; then \
311: build_for_arch=no; \
312: fi ; \
313: done ; \
314: if [ -n "$(INCLUDED_ARCHS)" ] ; then \
315: build_for_arch=no; \
316: for included_arch in $(INCLUDED_ARCHS) none ; do \
317: if [ "$$arch" = "$$included_arch" ] ; then \
318: build_for_arch=yes; \
319: fi ; \
320: done ; \
321: fi
322:
323:
324: ### Define all the targets necessary at every level of the project-hierarchy:
325:
326: # The following rules and rule fragments do the recursion into "sub" projects
327: # of this project and does a 'make project' for each one in its
328: # respective directories. This insures that we do not rely on the directory
329: # timestamp or "hack" file to know whether or not something has changed.
330:
331: CHANGES_COMMAND = $(CHANGES) $(TOP_PRODUCT_ROOT)/$(CHANGES_FILE_BASE).$(TARGET_ARCH) "$(OFILE_DIR)"
332:
333: use_default_directory_args = \
334: top_prod_root=`echo $(TOP_PRODUCT_ROOT) | sed '/^[^/]/s:^:../:'` ; \
335: prod_root=`echo $(PRODUCT_ROOT) | sed '/^[^/]/s:^:../:'` ; \
336: ofile_dir=`echo $(OFILE_DIR) | sed '/^[^/]/s:^:../:'` ; \
337: sym_dir=`echo $(SYM_DIR) | sed '/^[^/]/s:^:../:'` ; \
338: header_base=`echo $(DEV_HEADER_DIR_BASE) | sed '/^[^/]/s:^:../:'` ; \
339: project_header_base=`echo $(DEV_PROJECT_HEADER_DIR_BASE) | sed '/^[^/]/s:^:../:'` ; \
340: propogated_cflags=`echo $(PROPOGATED_CFLAGS) | sed 's:-I../:-I../../:g'`
341:
342: use_absolute_directory_args = \
343: $(PUSHD) $(PRODUCT_ROOT) ; abs_prod_root=`pwd` ; $(POPD) ; \
344: prod_root=$$abs_prod_root ; \
345: $(PUSHD) $(TOP_PRODUCT_ROOT) ; abs_top_prod_root=`pwd` ; $(POPD) ; \
346: top_prod_root=$$abs_top_prod_root ; \
347: $(PUSHD) $(OFILE_DIR) ; abs_ofile_dir=`pwd` ; $(POPD) ; \
348: ofile_dir=$$abs_ofile_dir ; \
349: $(PUSHD) $(SYM_DIR) ; abs_sym_dir=`pwd` ; $(POPD) ; \
350: sym_dir=$$abs_sym_dir ; \
351: $(PUSHD) $(DEV_HEADER_DIR_BASE) ; abs_header_base=`pwd` ; $(POPD) ; \
352: header_base=$$abs_header_base ; \
353: $(PUSHD) $(DEV_PROJECT_HEADER_DIR_BASE) ; abs_project_header_base=`pwd` ; $(POPD) ; \
354: project_header_base=$$abs_project_header_base ; \
355: propogated_cflags="$(PROPOGATED_CFLAGS)"
356:
357:
358: ALL_SUBPROJECTS = $(BUILD_TOOLS) $(SUBPROJECTS) $(BUNDLES) $(FRAMEWORK_SUBPROJECTS) $(LIBRARIES) $(TOOLS) $(LEGACIES)
359: IS_TOPLEVEL =
360:
361: # may not be right if tool is renamed without renaming directory name
362: TOOL_NAMES = $(TOOLS=.tproj=)
363:
364: all_subprojects: $(TOP_PRODUCT_ROOT)
365: @(if [ -z "$(ONLY_SUBPROJECT)" ] ; then \
366: if [ -n "$(BUILD_ALL_SUBPROJECTS)" ] ; then \
367: subdirectories="$(ALL_SUBPROJECTS)" ; \
368: else \
369: subdirectories=`$(CHANGES_COMMAND) $(ALL_SUBPROJECTS)` ; \
370: fi ; \
371: else \
372: subdirectories="$(ONLY_SUBPROJECT)" ; \
373: fi ; \
374: target=project; \
375: beginning_msg="Making" ; ending_msg="Finished making" ; \
376: actual_prod_root=$(PRODUCT_ROOT) ; \
377: $(recurse_on_subdirectories) ; \
378: $(check_tools) ; \
379: if [ -n "$(IS_TOPLEVEL)" -a -z "$(ONLY_SUBPROJECT)" ] ; then \
380: $(RM) -f $(TOP_PRODUCT_ROOT)/$(CHANGES_FILE_BASE).$(TARGET_ARCH) ; \
381: $(TOUCH) $(TOP_PRODUCT_ROOT)/$(CHANGES_FILE_BASE).$(TARGET_ARCH) ; \
382: fi)
383:
384: $(SUBPROJ_OFILES):
385: @(subdirectories="$(SUBPROJECTS)"; \
386: target=project; \
387: beginning_msg="Making" ; ending_msg="Finished making" ; \
388: $(recurse_on_subdirectories))
389:
390: TOOL_NAMES = $(TOOLS:.tproj=)
391: check_tools = \
392: for tool in $(TOOL_NAMES) none ; do \
393: if [ $$tool = "none" ] ; then break; fi ; \
394: tool_file="$$actual_prod_root/$$tool.$(TARGET_ARCH)" ; \
395: if [ ! -s $$tool_file ] ; then \
396: echo $$tool_file no longer exists...; \
397: subdirectories=$$tool.tproj; \
398: target=project; \
399: beginning_msg="Making" ; ending_msg="Finished making" ; \
400: $(recurse_on_subdirectories) ; \
401: fi ; \
402: done
403:
404: recurse_on_subdirectories = \
405: $(use_default_directory_args) ;\
406: for sub in $$subdirectories none ; do \
407: if [ $$sub = "none" ] ; then break; fi ; \
408: if [ -h $$sub ] ; then \
409: $(use_absolute_directory_args) ; \
410: fi ; \
411: $(PUSHD) $$sub; \
412: if [ -n "$$beginning_msg" ] ; then \
413: $(ECHO) $$beginning_msg $$sub ; \
414: fi ; \
415: $(MAKE) $$target $(exported_vars) ; \
416: $(POPD) ; \
417: if [ -n "$$ending_msg" ] ; then \
418: $(ECHO) $$ending_msg $$sub ; \
419: fi ; \
420: done
421:
422:
423: exported_vars = \
424: "PRODUCT_ROOT = $$prod_root" \
425: "TOP_PRODUCT_ROOT = $$top_prod_root" \
426: "OFILE_DIR = $$ofile_dir/$$sub" \
427: "PRODUCT_PREFIX = $$ofile_dir/$$sub" \
428: "BUNDLE_DIR = $$prod_root/$$sub" \
429: "REL_BUNDLE_DIR = $$sub" \
430: "SYM_DIR = $$sym_dir/$$sub" \
431: "CODE_GEN_STYLE = $(CODE_GEN_STYLE)" \
432: "BUILD_OFILES_LIST_ONLY = $(BUILD_OFILES_LIST_ONLY)" \
433: "TARGET_ARCH = $(TARGET_ARCH)" \
434: "COMMON_APP_MAKEFILE_DIR = $(COMMON_APP_MAKEFILE_DIR)" \
435: "APP_MAKEFILE_DIR = $(APP_MAKEFILE_DIR)" \
436: "MAKEFILEDIR = $(MAKEFILEDIR)" \
437: "SRCROOT = $(SRCROOT)" \
438: "OBJROOT = $(OBJROOT)" \
439: "SYMROOT = $(SYMROOT)" \
440: "PROPOGATED_CFLAGS = $(PROJ_CFLAGS) $$propogated_cflags -I$$sym_dir" \
441: "PROPOGATED_FRAMEWORK_CFLAGS = $(ALL_FRAMEWORK_CFLAGS)" \
442: "PROPOGATED_LDFLAGS = $(PROJECT_SPECIFIC_LDFLAGS) $(PROPOGATED_LDFLAGS)" \
443: "DEV_HEADER_DIR_BASE = $$header_base" \
444: "DEV_PROJECT_HEADER_DIR_BASE = $$project_header_base" \
445: "MULTIPLE_ARCHS = $(MULTIPLE_ARCHS)" \
446: "SINGLE_ARCH = $(SINGLE_ARCH)" \
447: "DEPENDENCIES =" \
448: "ONLY_SUBPROJECT =" \
449: "RC_ARCHS = $(RC_ARCHS)" \
450: "RC_CFLAGS = $(RC_CFLAGS)" \
451: "ALL_ARCH_FLAGS = $(ALL_ARCH_FLAGS)" \
452: $(projectType_specific_exported_vars)
453:
454: configure_for_target_archs_exported_vars = \
455: $(exported_vars) \
456: $(extra_configure_for_target_archs_exported_vars)
457:
458: # Finalizing build (e.g. lipo/ln the arch-specific binaries into place)
459:
460: configure_for_target_archs::
461: @(subdirectories="$(ALL_SUBPROJECTS)"; \
462: target=configure_for_target_archs ; \
463: $(use_default_directory_args) ;\
464: for sub in $$subdirectories none ; do \
465: if [ $$sub = "none" ] ; then break; fi ; \
466: if [ -h $$sub ] ; then \
467: $(use_absolute_directory_args) ; \
468: fi ; \
469: $(PUSHD) $$sub; \
470: $(MAKE) $$target $(configure_for_target_archs_exported_vars) ; \
471: $(POPD) ; \
472: done)
473:
474:
475:
476: # Finalizing installation
477:
478: STRIP_ON_INSTALL = YES
479:
480: finalize_install_exported_vars = \
481: "DSTROOT = $(DSTROOT)" \
482: "OBJROOT = $(OBJROOT)" \
483: "SYMROOT = $(SYMROOT)" \
484: "SYM_DIR = $(SYM_DIR)" \
485: "DEVROOT = $(DEVROOT)" \
486: "INSTALLDIR = $(INSTALLDIR)" \
487: "PRODUCT_ROOT = $(PRODUCT_ROOT)" \
488: "PRODUCT = $(PRODUCT)" \
489: "OFILE_DIR = $(OFILE_DIR)" \
490: "PROJ_CFLAGS = $(PROJ_CFLAGS)" \
491: "COMMON_APP_MAKEFILE_DIR = $(COMMON_APP_MAKEFILE_DIR)" \
492: "APP_MAKEFILE_DIR = $(APP_MAKEFILE_DIR)" \
493: "MAKEFILEDIR = $(MAKEFILEDIR)" \
494: "RC_CFLAGS = $(RC_CFLAGS)" \
495: "RC_ARCHS = $(RC_ARCHS)" \
496: $(extra_finalize_install_exported_vars)
497:
498: # Finalizing build (e.g. lipo/ln the arch-specific binaries into place)
499:
500: finalize_install:: strip_myself after_install
501: @(subdirectories="$(ALL_SUBPROJECTS)"; \
502: target=finalize_install ; \
503: $(use_default_directory_args) ;\
504: for sub in $$subdirectories none ; do \
505: if [ $$sub = "none" ] ; then break; fi ; \
506: if [ -h $$sub ] ; then \
507: $(use_absolute_directory_args) ; \
508: fi ; \
509: $(PUSHD) $$sub; \
510: $(MAKE) $$target $(finalize_install_exported_vars) ; \
511: $(POPD) ; \
512: done)
513:
514: strip_myself::
515:
516: after_install::
517:
518:
519: # Resources stuff:
520:
521: GENERATED_RESOURCES = `echo *.info > /dev/null 2>&1`
522:
523: # The following rule insures that resources for this particular level in the project hierarchy get copied over to the appropriate place in the PRODUCT_ROOT. Note that we depend on VPATH including $(LANGUAGE).lproj so that the LOCAL_RESOURCES are found correctly. FASTCP is used to minimize the copying of files, since most resources are likely to be up to date most of the time.
524:
525: resources:: $(LOCAL_RESOURCES) $(GLOBAL_RESOURCES) $(HELP_STORES) $(OTHER_RESOURCES)
526: @(if [ "$(PRODUCT_ROOT)" != "." ] ; then \
527: $(MKDIRS) $(PRODUCT_ROOT)/$(LANGUAGE).lproj ; \
528: fi ; \
529: if [ "$(LOCAL_RESOURCES)" != "" ] ; then \
530: locals="" ; \
531: for resource in $(LOCAL_RESOURCES) none ; do \
532: insert="true"; \
533: for helpdir in $(HELP_DIRS) $(OTHER_HELP_DIRS) none ; do \
534: if [ "$$resource" = "$$helpdir" ] ; \
535: then insert="false"; \
536: fi ; \
537: done ; \
538: if [ "$$insert" = "true" ] ; then \
539: locals="$$locals $$resource" ; \
540: fi ; \
541: done ; \
542: $(FASTCP) $$locals $(PRODUCT_ROOT)/$(LANGUAGE).lproj ; \
543: fi ; \
544: $(FASTCP) $(GLOBAL_RESOURCES) $(GENERATED_RESOURCES) $(PRODUCT_ROOT))
545:
546:
547: # rules for copying, cleaning and making dependencies
548:
549: installsrc:: SRCROOT
550: @($(MAKE) copy "DEST=$(SRCROOT)" \
551: "COMMON_APP_MAKEFILE_DIR = $(COMMON_APP_MAKEFILE_DIR)" \
552: "APP_MAKEFILE_DIR = $(APP_MAKEFILE_DIR)" \
553: "MAKEFILEDIR = $(MAKEFILEDIR)" )
554:
555: copy:: $(NAME).copy $(BUNDLES:.bproj=.copy) \
556: $(SUBPROJECTS:.subproj=.copy) \
557: $(TOOLS:.tproj=.copy)
558:
559: $(NAME).copy:: DEST $(DEST) $(SRCFILES)
560: @(if [ "$(SRCFILES)" != "" ] ; then \
561: $(ECHO) "$(TAR) cf - $(SRCFILES) | (cd $(DEST); $(TAR) xf -)" ; \
562: $(TAR) cf - $(SRCFILES) | (cd $(DEST); $(TAR) xf -) ; \
563: fi ; \
564: $(MKDIRS) $(DEST)/$(LANGUAGE).lproj ; \
565: if [ "$(LOCAL_RESOURCES)" != "" ] ; then \
566: $(ECHO) "(cd $(LANGUAGE).lproj; $(TAR) cf - $(LOCAL_RESOURCES)) | (cd $(DEST)/$(LANGUAGE).lproj; $(TAR) xf - )" ; \
567: (cd $(LANGUAGE).lproj; $(TAR) cf - $(LOCAL_RESOURCES)) | (cd $(DEST)/$(LANGUAGE).lproj; $(TAR) xf -) ; \
568: fi ; \
569: supportfiles="" ; \
570: for i in $(SUPPORTFILES) $(APPICON) $(DOCICONS) none ; do \
571: if [ -r $$i -a ! -r $(DEST)/$$i ] ; then \
572: supportfiles="$$supportfiles $$i" ; \
573: fi ; \
574: done ; \
575: if [ "$$supportfiles" != "" ] ; then \
576: $(ECHO) "$(TAR) cf - $$supportfiles | (cd $(DEST); $(TAR) xf -)" ; \
577: $(TAR) cf - $$supportfiles | (cd $(DEST); $(TAR) xf -) ; \
578: fi)
579:
580: .bproj.copy .subproj.copy .tproj.copy:
581: @(cd $<; $(MAKE) copy "NAME=$*" "DEST=$(DEST)/$<")
582:
583: .bproj.clean .subproj.clean .tproj.clean:
584: @(echo Cleaning $<... ; cd $<; \
585: $(MAKE) clean "NAME=$*")
586:
587: .bproj.depend .subproj.depend .tproj.depend:
588: @(sym_dir=`echo $(SYM_DIR) | sed '/^[^/]/s:^:../:'` ; \
589: cd $<; \
590: $(MAKE) depend "NAME=$*" \
591: "PROPOGATED_CFLAGS = $(PROJ_CFLAGS) $(PROPOGATED_CFLAGS) -I$$sym_dir/$<" )
592:
593:
594:
595: # Build a set of dependencies for current level into Makefile.depndencies
596:
597: Makefile.dependencies:: $(CLASSES) $(MFILES) $(CFILES) $(CCFILES) $(CAPCFILES) $(CAPMFILES) $(CXXFILES) $(CPPFILES) $(INITIAL_TARGETS)
598: @($(RM) -f Makefile.dependencies ; \
599: if [ "`$(ECHO) $(CLASSES) $(MFILES) $(CFILES) $(CCFILES) $(CAPCFILES) $(CAPMFILES) $(CXXFILES) $(CPPFILES) | wc -w`" != " 0" ] ; then \
600: if [ "$(ENGLISH)" = "YES" -o "$(JAPANESE)" != "YES" ] ; then \
601: language_cflags="" ; \
602: else \
603: language_cflags="-DKANJI" ; \
604: fi ; \
605: $(ECHO) "$(CC) -MM $(PROJ_CFLAGS) $(PROPOGATED_CFLAGS) -I$(SYM_DIR) $$language_cflags $(CLASSES) $(MFILES) $(CFILES) $(CCFILES) $(CAPCFILES) $(CAPMFILES) $(CXXFILES) $(CPPFILES) > Makefile.dependencies" ; \
606: $(CC) -MM $(PROJ_CFLAGS) $(PROPOGATED_CFLAGS) -I$(SYM_DIR) $$language_cflags $(CLASSES) $(MFILES) $(CFILES) $(CCFILES) $(CAPCFILES) $(CAPMFILES) $(CXXFILES) $(CPPFILES) > Makefile.dependencies || ($(RM) -f Makefile.dependencies ; exit 1) ; \
607: fi );
608:
609:
610: SRCROOT DEST:
611: @if [ -n "${$@}" ]; then exit 0; \
612: else $(ECHO) Must define $@; exit 1; fi
613:
614: $(DEST)::
615: -$(RM) -rf $(DEST)
616: @$(MKDIRS) $(DEST)
617:
618:
619: # Header stuff:
620:
621: DEV_HEADER_DIR_BASE = $(SYMROOT)
622: DEV_PROJECT_HEADER_DIR_BASE = $(SYMROOT)
623: DEV_PUBLIC_HEADER_DIR = $(DEV_HEADER_DIR_BASE)/Headers
624: DEV_PROJECT_HEADER_DIR = $(DEV_PROJECT_HEADER_DIR_BASE)/ProjectHeaders
625: DEV_PRIVATE_HEADER_DIR = $(DEV_HEADER_DIR_BASE)/PrivateHeaders
626:
627: installhdrs::
628: @(echo == Making installhdrs for $(NAME) == ; \
629: $(MAKE) copy_all_headers \
630: "PUBLIC_HEADER_DEST_DIR = $(DSTROOT)$(PUBLIC_HEADER_DIR)" \
631: "PROJECT_HEADER_DEST_DIR =" \
632: "PRIVATE_HEADER_DEST_DIR = $(DSTROOT)$(PRIVATE_HEADER_DIR)" \
633: "HEADER_COPY_CMD = $(FASTCP)" \
634: "COMMON_APP_MAKEFILE_DIR = $(COMMON_APP_MAKEFILE_DIR)" \
635: "APP_MAKEFILE_DIR = $(APP_MAKEFILE_DIR)" \
636: "MAKEFILEDIR = $(MAKEFILEDIR)" \
637: "RC_CFLAGS = $(RC_CFLAGS)" \
638: "SYMROOT = $(SYMROOT)" \
639: "DSTROOT = $(DSTROOT)")
640:
641: copy_all_headers:: copy_my_headers after_installhdrs
642: @(for dir in $(ALL_SUBPROJECTS) none ; do \
643: if [ $$dir = "none" ] ; then break; fi ; \
644: $(PUSHD) $$dir; $(ECHO) Installing headers for $$dir ; \
645: $(MAKE) copy_all_headers \
646: "PUBLIC_HEADER_DEST_DIR = $(PUBLIC_HEADER_DEST_DIR)" \
647: "PROJECT_HEADER_DEST_DIR = $(PROJECT_HEADER_DEST_DIR)" \
648: "PRIVATE_HEADER_DEST_DIR = $(PRIVATE_HEADER_DEST_DIR)" \
649: "HEADER_COPY_CMD = $(HEADER_COPY_CMD)" \
650: "COMMON_APP_MAKEFILE_DIR = $(COMMON_APP_MAKEFILE_DIR)" \
651: "APP_MAKEFILE_DIR = $(APP_MAKEFILE_DIR)" \
652: "MAKEFILEDIR = $(MAKEFILEDIR)" \
653: "DSTROOT = $(DSTROOT)" \
654: "SRCROOT = $(SRCROOT)" \
655: "OBJROOT = $(OBJROOT)" \
656: "SYMROOT = $(SYMROOT)" ; \
657: $(POPD) ; \
658: done)
659:
660:
661: export_headers:
662: @(if [ "$(IS_TOPLEVEL)" = "YES" \
663: -a "$(EXPORT_PROJECT_HEADERS)" = "YES" ] ; then \
664: $(ECHO) Exporting project headers... ; \
665: $(MAKE) export_project_headers \
666: "DEV_PUBLIC_HEADER_DIR =" \
667: "DEV_PRIVATE_HEADER_DIR =" \
668: "COMMON_APP_MAKEFILE_DIR = $(COMMON_APP_MAKEFILE_DIR)"\
669: "APP_MAKEFILE_DIR = $(APP_MAKEFILE_DIR)" \
670: "MAKEFILEDIR = $(MAKEFILEDIR)" \
671: "DSTROOT = $(DSTROOT)" \
672: "SRCROOT = $(SRCROOT)" \
673: "OBJROOT = $(OBJROOT)" \
674: "SYMROOT = $(SYMROOT)" ; \
675: $(ECHO) Finished exporting project headers. ; \
676: fi)
677:
678: export_project_headers:
679: @($(MAKE) copy_my_headers \
680: "PUBLIC_HEADER_DEST_DIR = $(DEV_PUBLIC_HEADER_DIR)" \
681: "PROJECT_HEADER_DEST_DIR = $(DEV_PROJECT_HEADER_DIR)" \
682: "PRIVATE_HEADER_DEST_DIR = $(DEV_PRIVATE_HEADER_DIR)" \
683: "HEADER_COPY_CMD = $(FASTLN)" \
684: "COMMON_APP_MAKEFILE_DIR = $(COMMON_APP_MAKEFILE_DIR)" \
685: "APP_MAKEFILE_DIR = $(APP_MAKEFILE_DIR)" \
686: "MAKEFILEDIR = $(MAKEFILEDIR)" \
687: "DSTROOT = $(DSTROOT)" \
688: "SRCROOT = $(SRCROOT)" \
689: "OBJROOT = $(OBJROOT)" \
690: "SYMROOT = $(SYMROOT)" ; \
691: subdirectories="$(ALL_SUBPROJECTS)"; \
692: target=export_project_headers ; \
693: $(recurse_on_subdirectories))
694:
695: copy_my_headers:: $(PUBLIC_HEADERS) $(OTHER_PUBLIC_HEADERS) $(PROJECT_HEADERS) $(OTHER_PROJECT_HEADERS) $(PRIVATE_HEADERS) $(OTHER_PRIVATE_HEADERS)
696: @(if [ \( -n "$(PUBLIC_HEADERS)" -o \
697: -n "$(OTHER_PUBLIC_HEADERS)" \) -a \
698: -n "$(PUBLIC_HEADER_DEST_DIR)" ] ; then \
699: $(MKDIRS) $(PUBLIC_HEADER_DEST_DIR) ; \
700: $(HEADER_COPY_CMD) $(PUBLIC_HEADERS) $(OTHER_PUBLIC_HEADERS) $(PUBLIC_HEADER_DEST_DIR) ; \
701: fi ; \
702: if [ \( -n "$(PROJECT_HEADERS)" -o \
703: -n "$(OTHER_PROJECT_HEADERS)" \) -a \
704: -n "$(PROJECT_HEADER_DEST_DIR)" ] ; then \
705: $(MKDIRS) $(PROJECT_HEADER_DEST_DIR) ; \
706: $(HEADER_COPY_CMD) $(PROJECT_HEADERS) $(OTHER_PROJECT_HEADERS) $(PROJECT_HEADER_DEST_DIR) ; \
707: fi ; \
708: if [ \( -n "$(PRIVATE_HEADERS)" -o \
709: -n "$(OTHER_PRIVATE_HEADERS)" \) -a \
710: -n "$(PRIVATE_HEADER_DEST_DIR)" ] ; then \
711: $(MKDIRS) $(PRIVATE_HEADER_DEST_DIR) ; \
712: $(HEADER_COPY_CMD) $(PRIVATE_HEADERS) $(OTHER_PRIVATE_HEADERS) $(PRIVATE_HEADER_DEST_DIR) ; \
713: fi)
714:
715: after_installhdrs::
716: @(if [ -n "$(PUBLIC_PRECOMPILED_HEADERS)" -a -n "$(PUBLIC_HEADER_DIR)" ] ; then \
717: cd $(DSTROOT)/$(PUBLIC_HEADER_DIR) ; \
718: for header in $(PUBLIC_PRECOMPILED_HEADERS) none ; do \
719: if [ $$header = "none" ] ; then break; fi ; \
720: cmd="cc -precomp $(PUBLIC_PRECOMPILED_HEADERS_CFLAGS) $(RC_CFLAGS) $$header";\
721: $(ECHO) $$cmd ; $$cmd ; \
722: done ; \
723: fi)
724:
725:
726: # Cleaning stuff:
727:
728: clean::
729: @(echo == Making clean for $(NAME) == ; \
730: $(set_bundle_ext) ; \
731: $(process_target_archs) ; \
732: if [ -n "$(CLEAN_ALL_SUBPROJECTS)" ] ; then \
733: $(MAKE) actual_clean really_clean \
734: "DEV_HEADER_DIR_BASE = $(DEV_HEADER_DIR_BASE)" \
735: "BUNDLE_EXTENSION = $$bundle_ext" \
736: "APP_MAKEFILE_DIR = $(APP_MAKEFILE_DIR)" \
737: "COMMON_APP_MAKEFILE_DIR = $(COMMON_APP_MAKEFILE_DIR)" \
738: "SYMROOT = $$symroot" \
739: "OBJROOT = $$objroot" ; \
740: else \
741: $(MAKE) actual_clean "BUNDLE_EXTENSION = $$bundle_ext" \
742: "DEV_HEADER_DIR_BASE = $(DEV_HEADER_DIR_BASE)" \
743: "APP_MAKEFILE_DIR = $(APP_MAKEFILE_DIR)" \
744: "COMMON_APP_MAKEFILE_DIR = $(COMMON_APP_MAKEFILE_DIR)" \
745: "SYMROOT = $$symroot" \
746: "OBJROOT = $$objroot" ; \
747: fi )
748:
749: actual_clean:: $(NAME).clean
750:
751: really_clean::
752: @(subdirectories="$(ALL_SUBPROJECTS)" ;\
753: target="actual_clean really_clean"; \
754: beginning_msg="Cleaning" ; ending_msg="Finished cleaning" ; \
755: $(recurse_on_subdirectories))
756:
757: $(NAME).clean::
758: @if [ ! -w . ] ; then $(ECHO) '***' project write-protected; exit 1 ; fi
759: $(RM) -rf $(GARBAGE)
760:
761:
762: # Misc. old stuff:
763:
764: writable::
765: @chmod -R +w *
766:
767: protected::
768: @chmod -R a-w *
769:
770:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.