Fix a bug in the code which determines when it's safe to use the
[oota-llvm.git] / Makefile.rules
index 408588132f607c76ca09c75e83fd9a0b28bfa952..ed8fe04d5357c6915a2df09a8aa28b1f60dbe39e 100644 (file)
@@ -807,7 +807,8 @@ SubDirs += $(DIRS)
 ifneq ($(PROJ_SRC_ROOT),$(PROJ_OBJ_ROOT))
 $(RecursiveTargets)::
        $(Verb) for dir in $(DIRS); do \
-         if [ ! -f $$dir/Makefile ]; then \
+         if ([ ! -f $$dir/Makefile ] || \
+             command test $$dir/Makefile -ot $(PROJ_SRC_DIR)/$$dir/Makefile ); then \
            $(MKDIR) $$dir; \
            $(CP) $(PROJ_SRC_DIR)/$$dir/Makefile $$dir/Makefile; \
          fi; \
@@ -829,7 +830,8 @@ endif
 ifdef EXPERIMENTAL_DIRS
 $(RecursiveTargets)::
        $(Verb) for dir in $(EXPERIMENTAL_DIRS); do \
-         if [ ! -f $$dir/Makefile ]; then \
+         if ([ ! -f $$dir/Makefile ] || \
+             command test $$dir/Makefile -ot $(PROJ_SRC_DIR)/$$dir/Makefile ); then \
            $(MKDIR) $$dir; \
            $(CP) $(PROJ_SRC_DIR)/$$dir/Makefile $$dir/Makefile; \
          fi; \
@@ -863,7 +865,9 @@ unitcheck:: $(addsuffix /.makeunitcheck,$(PARALLEL_DIRS))
 ParallelTargets := $(foreach T,$(RecursiveTargets),%/.make$(T))
 
 $(ParallelTargets) :
-       $(Verb) if [ ! -f $(@D)/Makefile ]; then \
+       $(Verb) if ([ ! -f $(@D)/Makefile ] || \
+                   command test $(@D)/Makefile -ot \
+                      $(PROJ_SRC_DIR)/$(@D)/Makefile ); then \
          $(MKDIR) $(@D); \
          $(CP) $(PROJ_SRC_DIR)/$(@D)/Makefile $(@D)/Makefile; \
        fi; \
@@ -882,7 +886,8 @@ ifneq ($(PROJ_SRC_ROOT),$(PROJ_OBJ_ROOT))
 $(RecursiveTargets)::
        $(Verb) for dir in $(OPTIONAL_DIRS); do \
          if [ -d $(PROJ_SRC_DIR)/$$dir ]; then\
-           if [ ! -f $$dir/Makefile ]; then \
+           if ([ ! -f $$dir/Makefile ] || \
+               command test $$dir/Makefile -ot $(PROJ_SRC_DIR)/$$dir/Makefile ); then \
              $(MKDIR) $$dir; \
              $(CP) $(PROJ_SRC_DIR)/$$dir/Makefile $$dir/Makefile; \
            fi; \
@@ -930,7 +935,7 @@ endif
 endif
 
 ###############################################################################
-# Set up variables for building libararies
+# Set up variables for building libraries
 ###############################################################################
 
 #---------------------------------------------------------
@@ -986,12 +991,25 @@ ifeq ($(HOST_OS),Darwin)
 # Darwin convention prefixes symbols with underscores.
 NativeExportsFile := $(ObjDir)/$(notdir $(EXPORTED_SYMBOL_FILE)).sed
 $(NativeExportsFile): $(EXPORTED_SYMBOL_FILE) $(ObjDir)/.dir
-       $(Verb) sed -e 's/[[:<:]]/_/' < $< > $@
+       $(Verb) sed -e 's/^/_/' < $< > $@
+clean-local::
+       -$(Verb) $(RM) -f $(NativeExportsFile)
+else
+ifeq ($(HAVE_LINK_VERSION_SCRIPT),1)
+# Gold and BFD ld require a version script rather than a plain list.
+NativeExportsFile := $(ObjDir)/$(notdir $(EXPORTED_SYMBOL_FILE)).map
+$(NativeExportsFile): $(EXPORTED_SYMBOL_FILE) $(ObjDir)/.dir
+       $(Verb) echo "{" > $@
+       $(Verb) grep -q "\<" $< && echo "  global:" >> $@ || :
+       $(Verb) sed -e 's/$$/;/' -e 's/^/    /' < $< >> $@
+       $(Verb) echo "  local: *;" >> $@
+       $(Verb) echo "};" >> $@
 clean-local::
        -$(Verb) $(RM) -f $(NativeExportsFile)
 else
 NativeExportsFile := $(EXPORTED_SYMBOL_FILE)
 endif
+endif
 
 # Now add the linker command-line options to use the native export file.
 
@@ -1000,8 +1018,8 @@ LLVMLibsOptions += -Wl,-exported_symbols_list,$(NativeExportsFile)
 endif
 
 # gold, bfd ld, etc.
-ifeq ($(HAVE_LINK_RETAIN_SYMBOLS_FILE),1)
-LLVMLibsOptions += -Wl,-retain-symbols-file,$(NativeExportsFile)
+ifeq ($(HAVE_LINK_VERSION_SCRIPT),1)
+LLVMLibsOptions += -Wl,--version-script,$(NativeExportsFile)
 endif
 
 endif