home *** CD-ROM | disk | FTP | other *** search
/ OpenStep (Enterprise) / OpenStepENTCD.toast / OEDEV / DEV.Z / bundle-common.make < prev    next >
Encoding:
Text File  |  1996-09-08  |  11.5 KB  |  310 lines

  1. #
  2. #                              bundle-common.make
  3. #
  4.  
  5. RESOURCES_ROOT = $(PRODUCT_ROOT)/Resources
  6.  
  7. include $(MAKEFILEDIR)/common.make
  8.  
  9. # Override common.make
  10. DEV_HEADER_DIR_BASE = $(TOP_PRODUCT_ROOT)
  11.  
  12. DYNAMIC_BUILD_TYPE_SUFFIX = ""
  13. DEBUG_BUILD_TYPE_SUFFIX = ""
  14. PROFILE_BUILD_TYPE_SUFFIX = "_profile"
  15.  
  16. set_header_dirs = \
  17.     $(set_product_root) ; \
  18.         public_header_dir="$(INSTALLDIR)/$$product_root/Headers" ;\
  19.      private_header_dir="$(INSTALLDIR)/$$product_root/PrivateHeaders"
  20.  
  21. .PHONY : framework bundle palette debug profile static
  22.  
  23. framework bundle palette debug profile static kernel::
  24.     @($(check_for_gnumake) ; \
  25.     $(process_target_archs) ; \
  26.     $(set_dynamic_flags) ; \
  27.     $(set_objdir) ; \
  28.     $(set_product_root) ; \
  29.     for arch in $$archs ; do \
  30.        $(ECHO) == Making target $@ for $(NAME) \($$arch\) == ; \
  31.        ofile_dir="$(OBJROOT)/`$(ECHO) $$buildtype`_$$objdir/$$arch" ; \
  32.            intermediate_product_name="$(NAME).$$arch" ; \
  33.        $(MAKE) project \
  34.         "SYM_DIR = $(SYMROOT)/$(DERIVED_SRC_DIR_NAME)" \
  35.         "OFILE_DIR = $$ofile_dir" \
  36.         "BUILD_TYPE_CFLAGS = $($@_target_CFLAGS) $$dynamic_cflags" \
  37.         "BUILD_TYPE_LDFLAGS = $($@_target_LDFLAGS)" \
  38.         "RC_CFLAGS = -arch $$arch $$archless_rcflags" \
  39.         "RC_ARCHS = $$archs" \
  40.         "TARGET_ARCH = $$arch" \
  41.         "ALL_ARCH_FLAGS = $$arch_flags" \
  42.         "BUILD_TARGET = $@" \
  43.         "BUILD_TYPE_SUFFIX = $$build_type_suffix" \
  44.         "MAKEFILEDIR = $(MAKEFILEDIR)" \
  45.         "ONLY_SUBPROJECT = $(ONLY_SUBPROJECT)" \
  46.         "PRODUCT_ROOT = $(SYMROOT)" \
  47.         "TOP_PRODUCT_ROOT = $(SYMROOT)/$$product_root" \
  48.         "IS_TOPLEVEL = YES" \
  49.         "LINK_STYLE = $(LINK_STYLE)" \
  50.         "INSTALLDIR = $(INSTALLDIR)" \
  51.         "CODE_GEN_STYLE = $(CODE_GEN_STYLE)" \
  52.         "MAKEFILEDIR = $(MAKEFILEDIR)" \
  53.         "DSTROOT = $(DSTROOT)" \
  54.         "SRCROOT = $(SRCROOT)" \
  55.         "OBJROOT = $(OBJROOT)" \
  56.         "SYMROOT = $(SYMROOT)" \
  57.               $(stop_if_error_in_arch) ; \
  58.        if [ -n "$$last_arch" ] ; then \
  59.         multiple_archs=yes ; \
  60.        fi ; \
  61.        last_arch=$$arch ; \
  62.        lists="$$lists $$ofile_dir/$(NAME).ofileList" ; \
  63.         done ; \
  64.     $(MAKE) configure_for_target_archs \
  65.         "TOP_PRODUCT_ROOT = $(SYMROOT)/$$product_root" \
  66.         "PRODUCT_ROOT = $(SYMROOT)" \
  67.         "REL_PRODUCT_ROOT = $$product_root" \
  68.         "OFILE_DIR = $(OBJROOT)/`$(ECHO) $$buildtype`_$$objdir" \
  69.         "BUILD_TYPE_SUFFIX = $$build_type_suffix" \
  70.         "MULTIPLE_ARCHS = $$multiple_archs" \
  71.         "SINGLE_ARCH = $$last_arch" \
  72.         "RC_ARCHS = $$archs" \
  73.         "OBJROOT = $(OBJROOT)" \
  74.         "SYMROOT = $(SYMROOT)" \
  75.         "ARCH_SPECIFIC_OFILELISTS = $$lists" \
  76.         "DELETE_THIN_RESULTS = $(DELETE_THIN_RESULTS)" \
  77.         "MAKEFILEDIR = $(MAKEFILEDIR)")
  78.  
  79. # Current limitation: Nested frameworks and palettes are unsupported.
  80. #    Nested bundles are supported but must have BUNDLE_EXTENSION set.
  81.  
  82. configure_for_target_archs:: 
  83.     @($(set_product_root) ; \
  84.     complete_prod_root="$(PRODUCT_ROOT)/$$product_root" ; \
  85.     for arch in $(RC_ARCHS) ; do \
  86.         dependencies="$$dependencies $$complete_prod_root/$(NAME)$(BUILD_TYPE_SUFFIX).$$arch$(BUNDLE_BINARY_EXT)" ;\
  87.         lipo_args="$$lipo_args -arch $$arch $$complete_prod_root/$(NAME)$(BUILD_TYPE_SUFFIX).$$arch$(BUNDLE_BINARY_EXT)" ; \
  88.     done ; \
  89.     $(set_should_build) ; \
  90.     if [ "$$should_build" = "yes" ] ; then \
  91.        $(MAKE) final \
  92.         "TOP_PRODUCT_ROOT = $(TOP_PRODUCT_ROOT)" \
  93.         "DEPENDENCIES = $$dependencies" \
  94.         "LIPO_ARGS = $$lipo_args" \
  95.         "COMPLETE_PRODUCT_ROOT = $$complete_prod_root" \
  96.         "BUILD_TYPE_SUFFIX = $(BUILD_TYPE_SUFFIX)" \
  97.         "DELETE_THIN_RESULTS = $(DELETE_THIN_RESULTS)" \
  98.         "MULTIPLE_ARCHS = $(MULTIPLE_ARCHS)" \
  99.         "SINGLE_ARCH = $(SINGLE_ARCH)" \
  100.         "RC_ARCHS = $(RC_ARCHS)" \
  101.         "MAKEFILEDIR = $(MAKEFILEDIR)" ; \
  102.     else \
  103.         $(ECHO) Not configuring $(NAME). ; \
  104.     fi)
  105.  
  106.  
  107. .PHONY : final
  108.  
  109. final: $(COMPLETE_PRODUCT_ROOT)/$(NAME)$(BUILD_TYPE_SUFFIX)$(LIBRARY_EXT)
  110.  
  111. $(COMPLETE_PRODUCT_ROOT)/$(NAME)$(BUILD_TYPE_SUFFIX)$(LIBRARY_EXT): $(DEPENDENCIES)
  112.     @(if [ -n "$(MULTIPLE_ARCHS)" ] ; then \
  113.           cmd="$(LIPO) -create $(LIPO_ARGS) -o $@" ; \
  114.           $(ECHO) $$cmd ; $$cmd ; \
  115.       else \
  116.           $(RM) -f $@ ; \
  117.           if [ "$(PLATFORM_OS)" = "winnt" ] ; then \
  118.              $(RM) -f $(COMPLETE_PRODUCT_ROOT)/$(NAME)$(BUILD_TYPE_SUFFIX).$(SINGLE_ARCH).exp ; \
  119.              cmd="$(TRANSMOGRIFY) $(COMPLETE_PRODUCT_ROOT)/$(NAME)$(BUILD_TYPE_SUFFIX).$(SINGLE_ARCH)$(BUNDLE_BINARY_EXT) $(COMPLETE_PRODUCT_ROOT)/$(NAME)$(BUILD_TYPE_SUFFIX)$(BUNDLE_BINARY_EXT)" ; \
  120.              $(ECHO) $$cmd ; $$cmd ; \
  121.           fi ; \
  122.           if [ -r $(COMPLETE_PRODUCT_ROOT)/$(NAME)$(BUILD_TYPE_SUFFIX).$(SINGLE_ARCH)$(LIBRARY_EXT) ] ; then \
  123.          cmd="$(TRANSMOGRIFY) $(COMPLETE_PRODUCT_ROOT)/$(NAME)$(BUILD_TYPE_SUFFIX).$(SINGLE_ARCH)$(LIBRARY_EXT) $@" ; \
  124.         $(ECHO) $$cmd ; $$cmd ; \
  125.           fi ; \
  126.     fi ; \
  127.     if [ "$(DELETE_THIN_RESULTS)" = "YES" ] ; then \
  128.          cmd="$(RM) -f $(DEPENDENCIES)" ; \
  129.          $(ECHO) $$cmd ; $$cmd ; \
  130.     fi)
  131.  
  132. .PHONY : project actual_project
  133.  
  134. project::  
  135.     @($(set_product_root) ; \
  136.     $(set_should_build) ; \
  137.     if [ "$$should_build" = "yes" ] ; then \
  138.        $(MAKE) actual_project \
  139.         "PRODUCT_ROOT = $(PRODUCT_ROOT)/$$product_root" \
  140.                "OFILE_DIR = $(OFILE_DIR)" \
  141.                "SYM_DIR = $(SYM_DIR)" \
  142.         "BUILD_TYPE_CFLAGS = $(BUILD_TYPE_CFLAGS)" \
  143.         "IS_TOPLEVEL = $(IS_TOPLEVEL)" \
  144.         "LINK_STYLE = $(LINK_STYLE)" \
  145.         "BUILD_TARGET = $(BUILD_TARGET)" \
  146.         "ALL_ARCH_FLAGS = $(ALL_ARCH_FLAGS)" \
  147.         "CODE_GEN_STYLE = $(CODE_GEN_STYLE)" \
  148.                "DEV_HEADER_DIR_BASE = $(DEV_HEADER_DIR_BASE)" \
  149.         "DEV_PROJECT_HEADER_DIR_BASE = $(DEV_PROJECT_HEADER_DIR_BASE)"\
  150.                "BUILD_OFILES_LIST_ONLY = $(BUILD_OFILES_LIST_ONLY)" \
  151.         "BUILD_TYPE_SUFFIX = $(BUILD_TYPE_SUFFIX)" \
  152.                "MAKEFILEDIR = $(MAKEFILEDIR)" \
  153.                "DSTROOT = $(DSTROOT)" \
  154.                "SRCROOT = $(SRCROOT)" \
  155.                "OBJROOT = $(OBJROOT)" \
  156.                "SYMROOT = $(SYMROOT)" \
  157.         $(extra_actual_project_exported_vars) ; \
  158.     else \
  159.        $(ECHO) " ..... $(NAME) not built for architecture $(TARGET_ARCH), platform $(PLATFORM_OS)" ; \
  160.     fi)
  161.  
  162.  
  163. actual_project:: initial_targets $(PRODUCT_ROOT) $(RESOURCES_ROOT) all_subprojects resources $(PRODUCT)
  164.  
  165.  
  166.  
  167. TEMP_C_FILE = $(OFILE_DIR)/$(NAME)_empty.c
  168. TEMP_O_FILE = $(OFILE_DIR)/$(NAME)_empty.o
  169. SINGLE_O_FILE = $(OFILE_DIR)/$(NAME)_everything.o
  170. MY_OFILE_LIST = $(OFILE_DIR)/$(NAME).ofileList
  171.  
  172. set_extra_libtool_flags = \
  173.     ofileList_flags="-filelist $(MY_OFILE_LIST),$(OFILE_DIR)"
  174.  
  175. ofilelist:
  176.     @(cd $(OFILE_DIR) ; $(OFILE_LIST_TOOL) -removePrefix $(OFILE_DIR)/ \
  177.        -removePrefix ../ $(NON_SUBPROJ_OFILES) $(SUBPROJ_OFILELISTS) \
  178.        $(OTHER_OFILES) $(OTHER_GENERATED_OFILES) -o $(NAME).ofileList)
  179.  
  180. $(PRODUCT): $(PRODUCT_DEPENDS) ofilelist $(PRELINK_DEPENDS)
  181.     @($(set_dynamic_link_flags) ; \
  182.     $(set_extra_libtool_flags) ; \
  183.     $(set_product_root); \
  184.     (cd $(OFILE_DIR) ; $(OFILE_LIST_TOOL) -removePrefix $(OFILE_DIR)/ \
  185.        -removePrefix ../ $(NON_SUBPROJ_OFILES) $(SUBPROJ_OFILELISTS) \
  186.        $(OTHER_OFILES) $(OTHER_GENERATED_OFILES) -o $(NAME).ofileList) ; \
  187.     if [ "$(OS_PREFIX)" != "PDO_UNIX_" ] ; then \
  188.         frameworks=`$(FRAMEWORK_TOOL) $(FRAMEWORKS) $(BUILD_TARGET)` ; \
  189.     fi ; \
  190.     libs="$(LIBS:-lsys_s=)" ; \
  191.     if [ "$(LINK_STYLE)" = "ONE_MODULE" ] ; then \
  192.           num_ofiles=$(NUMBER_OF_OBJECT_FILES) ; \
  193.                  if [ "$$num_ofiles" != "       0" \
  194.                     -a "$$num_ofiles" != "0" ] ; then \
  195.              if [ "$(PLATFORM_OS)" = "winnt" ] ; then \
  196.                     contents=$$ofileList_flags ;\
  197.          else \
  198.                     contents="$(OFILES) $(OTHER_OFILES) $(OTHER_GENERATED_OFILES)" ; \
  199.          fi ; \
  200.           else \
  201.              $(ECHO) Warning: No object files for $(NAME). ; \
  202.              $(RM) -f $(TEMP_C_FILE) ; \
  203.              $(TOUCH) $(TEMP_C_FILE) ; \
  204.              $(CC) $(ALL_CFLAGS) -c $(TEMP_C_FILE) -o $(TEMP_O_FILE) ; \
  205.              $(RM) -f $(TEMP_C_FILE) ; \
  206.              contents="$(TEMP_O_FILE)" ; \
  207.            fi ; \
  208.            cmd="$(CC) $$dynamic_bundle_flags -o $@ $(ALL_CFLAGS) $(ALL_LDFLAGS) \
  209.             $$contents $$frameworks $$libs $(OTHER_LIBS)" ; \
  210.               $(ECHO) $$cmd ; $$cmd ; \
  211.     else \
  212.           cmd="$(LIBTOOL) $$dynamic_libtool_flags \
  213.         $(PLATFORM_SPECIFIC_LIBTOOL_FLAGS) $(OTHER_LIBTOOL_FLAGS) \
  214.         $(ALL_LDFLAGS) $(ALL_FRAMEWORK_CFLAGS) -arch_only $(TARGET_ARCH) \
  215.         -o $(@:.lib=.dll) $$ofileList_flags $$frameworks $$libs \
  216.         $(OTHER_LIBS)" ; \
  217.           $(ECHO) $$cmd ; $$cmd ; \
  218.         fi)
  219.     
  220.  
  221. before_install:: $(DSTROOT)$(INSTALLDIR)
  222.     @($(set_product_root) ; \
  223.     cmd="$(CHMOD) -R a+w $(DSTROOT)$(INSTALLDIR)/$(NAME).$$framework_ext || true" ; \
  224.     $(ECHO) $$cmd ; eval $$cmd ; \
  225.     cmd="$(RM) -rf $(DSTROOT)$(INSTALLDIR)/$(NAME).$$framework_ext" ; \
  226.     $(ECHO) $$cmd ; $$cmd)
  227.  
  228. ifeq ($(PLATFORM_OS)-$(REINSTALLING), winnt-)
  229. install:: all
  230.           $(MAKE) reinstall_stripped REINSTALLING=YES
  231. else
  232. install:: all before_install $(OTHER_INSTALL_DEPENDS)
  233.     @($(set_should_build) ; \
  234.     if [ "$$should_build" = "yes" ] ; then \
  235.         $(ECHO) == Making install for $(NAME) == ; \
  236.         $(set_product_root) ; \
  237.         $(process_target_archs) ; \
  238.         $(set_dynamic_flags) ; \
  239.         $(set_objdir) ; \
  240.         ofile_dir="$(OBJROOT)/`$(ECHO) $$buildtype`_$$objdir" ; \
  241.         installed_product="$(DSTROOT)$(INSTALLDIR)/$(NAME).$$framework_ext" ;\
  242.         $(ECHO) -n "Copying $(NAME).$$framework_ext ..." ; \
  243.         (cd $(SYMROOT); $(TAR) cf - $(NAME).$$framework_ext) | (cd     $(DSTROOT)$(INSTALLDIR); $(TAR) xf -) ; \
  244.         $(ECHO) " done." ; \
  245.         $(MAKE) installhdrs finalize_install \
  246.         "DSTROOT = $(DSTROOT)" \
  247.         "SRCROOT = $(SRCROOT)" \
  248.                "OBJROOT = $(OBJROOT)" \
  249.         "SYMROOT = $(SYMROOT)" \
  250.         "SYM_DIR = $(SYMROOT)/$(DERIVED_SRC_DIR_NAME)" \
  251.         "DEVROOT = $(DEVROOT)" \
  252.         "INSTALLDIR = $(INSTALLDIR)" \
  253.         "PRODUCT_ROOT = $(DSTROOT)$(INSTALLDIR)/$$product_root" \
  254.         "PRODUCT = $(DSTROOT)$(INSTALLDIR)/$$product_root/$(NAME)" \
  255.         "OFILE_DIR = $$ofile_dir" \
  256.         "BUILD_TYPE_CFLAGS = $(framework_target_CFLAGS) $$dynamic_cflags" \
  257.         "MAKEFILEDIR = $(MAKEFILEDIR)" \
  258.         "RC_CFLAGS = $$arch_cflags" \
  259.         "RC_ARCHS = $$archs" ; \
  260.         $(CHMOD) -R a-w $$installed_product || true ; \
  261.         $(CHOWN) -R $(INSTALL_AS_USER) $$installed_product || true ; \
  262.         $(CHGRP) -R $(INSTALL_AS_GROUP) $$installed_product || true ; \
  263.     fi)
  264. endif
  265.  
  266. strip_myself::
  267.     @($(set_product_root) ; \
  268.            product_root="$(PRODUCT_ROOT)" ; \
  269.     product="$(PRODUCT_ROOT)/$(NAME)$(BUNDLE_BINARY_EXT)" ; \
  270.     $(set_should_build) ; \
  271.     if [ "$$should_build" = "yes" ] ; then \
  272.        if [ ! -f $$product ] ; then \
  273.                    product_root="$(PRODUCT_ROOT)/$(NAME).$$framework_ext" ; \
  274.                    product="$$product_root/$(NAME)$(BUNDLE_BINARY_EXT)" ; \
  275.        fi ; \
  276.        $(MAKE) strip_bundle_binary $(finalize_install_exported_vars) \
  277.                        "PRODUCT_ROOT = $$product_root" \
  278.                        "PRODUCT = $$product" ; \
  279.        product="$$product_root)/$(NAME)$(DEBUG_BUILD_TYPE_SUFFIX)$(BUNDLE_BINARY_EXT)" ; \
  280.        if [ -f $$product ] ; then \
  281.            $(MAKE) strip_bundle_binary $(finalize_install_exported_vars) \
  282.                        "PRODUCT_ROOT = $$product_root" \
  283.                        "PRODUCT = $$product" ; \
  284.        fi ; \
  285.        product="$$product_root/$(NAME)$(PROFILE_BUILD_TYPE_SUFFIX)$(BUNDLE_BINARY_EXT)" ; \
  286.        if [ -f $$product ] ; then \
  287.            $(MAKE) strip_bundle_binary $(finalize_install_exported_vars) \
  288.                        "PRODUCT_ROOT = $$product_root" \
  289.                        "PRODUCT = $$product" ; \
  290.        fi ; \
  291.     fi)
  292.  
  293. strip_bundle_binary::
  294.     @(if [ "$(BUILD_OFILES_LIST_ONLY)" != "YES" \
  295.          -a "$(STRIP_ON_INSTALL)" = "YES" ] ; then \
  296.         if [ "$(CODE_GEN_STYLE)" = "DYNAMIC" ] ; then \
  297.             strip_opts="$(DYNAMIC_STRIP_OPTS)" ; \
  298.         else \
  299.             strip_opts="$(LIBRARY_STRIP_OPTS)" ; \
  300.         fi ; \
  301.         cmd="$(STRIP) $$strip_opts $(PRODUCT)" ; \
  302.                $(ECHO) $$cmd ; $$cmd ; \
  303.     fi ; \
  304.     $(CHMOD) -R ugo-w $(PRODUCT) || true ; \
  305.     $(RM) -f $(PRODUCT_ROOT)/$(CHANGES_FILE_BASE).* ; \
  306.     for arch in $(RC_ARCHS) ; do \
  307.         cmd="$(RM) -f $(PRODUCT_ROOT)/$(NAME)*.$$arch$(BUNDLE_BINARY_EXT) $(PRODUCT_ROOT)/$(NAME)*.$$arch$(LIBRARY_EXT)" ;\
  308.         $(ECHO) $$cmd ; $$cmd ; \
  309.     done)
  310.