Greg Stein wrote:
> On Nov 5, 2011 6:06 AM, "Philip Martin" <philip.mar...@wandisco.com> wrote:

>> We have a mkdir-init target in the Makefile that is supposed to create
>> the build directories.
>
> Right. It creates what is needed rather than a scattershot hope.

Thanks for the pointer.  Running "make mkdir-init" works fine.

> Jonathan: can you adjust mkdir-init to include *just* the directories
> necessary, that you've found through your new test?

It seems that the patch should look like this, then:

[[[
Allow "make extraclean-swig" and "make swig-pl" in VPATH builds without
requiring the user to run "make mkdir-init" by hand first.

* Makefile.in
  (external-all, external-install): Depend on mkdir-init.
  ($(SWIG_PL_DIR)/native/Makefile.PL): Likewise.
  (swig-pl): Likewise.
  ($(SWIG_PY_DIR)/libsvn): Likewise.

  (external-clean, external-distclean): Check if directories exist
    before cleaning them.
  (external-extraclean): Likewise.
  (schema-clean): Likewise.
  (clean-swig-py): Likewise.
  (clean-swig-rb): Likewise.
]]]

Index: Makefile.in
===================================================================
--- Makefile.in (revision 1198126)
+++ Makefile.in (working copy)
@@ -557,7 +557,7 @@ mkdir-init:
         done
 
 # recursive targets to handle external projects (e.g. APR, Neon)
-external-all external-install:
+external-all external-install: mkdir-init
        @target=`echo $@ | sed s/external-//`;          \
         list='$(SVN_EXTERNAL_PROJECT_SUBDIRS)';         \
         for i in $$list; do                             \
@@ -569,34 +569,38 @@ mkdir-init:
 ### apr-util relies on generated files in apr, so reverse the
 ### list so that it is cleaned before apr.
 external-clean external-distclean:
-       @target=`echo $@ | sed s/external-//`;          \
-        list='$(SVN_EXTERNAL_PROJECT_SUBDIRS)';         \
-        for i in $$list; do                             \
-            revlist="$$i $$revlist";                    \
-        done;                                           \
-        for i in $$revlist; do                          \
-            echo "------ making $$target in $$i";       \
-            (cd $$i && $(MAKE) $$target) || exit 1;     \
-            echo "------ completed $$target in $$i";    \
+       @target=`echo $@ | sed s/external-//`;               \
+        list='$(SVN_EXTERNAL_PROJECT_SUBDIRS)';              \
+        for i in $$list; do                                  \
+            revlist="$$i $$revlist";                         \
+        done;                                                \
+        for i in $$revlist; do                               \
+            if [ -d $$i ]; then                              \
+                echo "------ making $$target in $$i";        \
+                (cd $$i && $(MAKE) $$target) || exit 1;      \
+                echo "------ completed $$target in $$i";     \
+            fi;                                              \
         done;
 
 ### temporary hack. Neon does not have an "extraclean" and neither does db
 ### If we don't have extraclean -- do the next best thing.
 external-extraclean:
-       @list='$(SVN_EXTERNAL_PROJECT_SUBDIRS)';                         \
-        for i in $$list; do                                              \
-            revlist="$$i $$revlist";                                     \
-        done;                                                            \
-        for i in $$revlist; do                                           \
-            if test "$$i" = "neon" || test "$$i" = "db/dist"; then       \
-                echo "------ making distclean(no extraclean) in $$i";    \
-                (cd $$i && $(MAKE) distclean) || exit 1;                 \
-                echo "------ completed distclean(no extraclean) in $$i"; \
-            else                                                         \
-                echo "------ making extraclean in $$i";                  \
-                (cd $$i && $(MAKE) extraclean) || exit 1;                \
-                echo "------ completed extraclean in $$i";               \
-            fi;                                                          \
+       @list='$(SVN_EXTERNAL_PROJECT_SUBDIRS)';                             \
+        for i in $$list; do                                                  \
+            revlist="$$i $$revlist";                                         \
+        done;                                                                \
+        for i in $$revlist; do                                               \
+            if test -d $$i; then                                             \
+                if test "$$i" = "neon" || test "$$i" = "db/dist"; then       \
+                    echo "------ making distclean(no extraclean) in $$i";    \
+                    (cd $$i && $(MAKE) distclean) || exit 1;                 \
+                    echo "------ completed distclean(no extraclean) in $$i"; \
+                else                                                         \
+                    echo "------ making extraclean in $$i";                  \
+                    (cd $$i && $(MAKE) extraclean) || exit 1;                \
+                    echo "------ completed extraclean in $$i";               \
+                fi;                                                          \
+            fi;                                                              \
         done;
 
 
@@ -648,7 +652,9 @@ schema-xsd: $(SCHEMAS_XSD)
 $(SCHEMAS_RNG) $(SCHEMAS_DTD) $(SCHEMAS_XSD): $(SCHEMA_DIR)/common.rnc
 
 schema-clean:
-       (cd $(SCHEMA_DIR) && rm -f *.rng *.dtd *.xsd)
+       if test -d $(SCHEMA_DIR); then \
+           (cd $(SCHEMA_DIR) && rm -f *.rng *.dtd *.xsd); \
+       fi
 
 #
 # Implicit rules for creating outputs from input files
@@ -736,7 +742,8 @@ clean-swig-headers:
 extraclean-swig-headers: clean-swig-headers
        $(EXTRACLEAN_SWIG_HEADERS)
 
-$(SWIG_PL_DIR)/native/Makefile.PL: $(SWIG_SRC_DIR)/perl/native/Makefile.PL.in
+Makefile.PL_DEPS = mkdir-init $(SWIG_SRC_DIR)/perl/native/Makefile.PL.in
+$(SWIG_PL_DIR)/native/Makefile.PL: $(Makefile.PL_DEPS)
        ./config.status subversion/bindings/swig/perl/native/Makefile.PL
 
 $(SWIG_PL_DIR)/native/Makefile: $(SWIG_PL_DIR)/native/Makefile.PL
@@ -748,7 +755,7 @@ $(SWIG_PL_DIR)/native/Makefile: $(SWIG_PL_DIR)/nat
 READLINK_PY=$(PYTHON) -c 'import sys,os; print(os.path.realpath(sys.argv[1]))'
 READLINK_PL=$(PERL) -e 'use Cwd; print Cwd::realpath(shift)'
 
-swig-pl_DEPS = autogen-swig-pl libsvn_swig_perl \
+swig-pl_DEPS = mkdir-init autogen-swig-pl libsvn_swig_perl \
   $(SWIG_PL_DIR)/native/Makefile
 swig-pl: $(swig-pl_DEPS)
        if test "`$(READLINK_PL) $(SWIG_PL_DIR)`" != "`$(READLINK_PL) 
$(SWIG_PL_SRC_DIR)`"; then \
@@ -772,11 +779,10 @@ clean-swig-pl:
        if test -z "$(RELEASE_MODE)"; then \
          $(EXTRACLEAN_SWIG_PL); \
        fi
-       for d in $(SWIG_PL_DIR)/libsvn_swig_perl; \
-       do \
-         cd $$d; \
+       if [ -d "$(SWIG_PL_DIR)/libsvn_swig_perl" ]; then \
+         cd "$(SWIG_PL_DIR)/libsvn_swig_perl"; \
          rm -rf *.lo *.la *.o .libs; \
-       done
+       fi
        if [ -f "$(SWIG_PL_DIR)/native/Makefile" ]; then \
          cd $(SWIG_PL_DIR)/native; $(MAKE) clean; \
        fi
@@ -784,7 +790,7 @@ clean-swig-pl:
 extraclean-swig-pl: clean-swig-pl
        $(EXTRACLEAN_SWIG_PL)
 
-$(SWIG_PY_DIR)/libsvn:
+$(SWIG_PY_DIR)/libsvn: mkdir-init
        mkdir $(SWIG_PY_DIR)/libsvn
 
 copy-swig-py: autogen-swig-py $(SWIG_PY_DIR)/libsvn
@@ -808,9 +814,14 @@ clean-swig-py:
        fi
        for d in $(SWIG_PY_DIR) $(SWIG_PY_DIR)/libsvn_swig_py; \
        do \
-         cd $$d && rm -rf *.lo *.la *.o *.pyc .libs; \
+         if test -d $$d; then \
+           cd $$d && rm -rf *.lo *.la *.o *.pyc .libs; \
+         fi; \
        done
-       find $(SWIG_PY_SRC_DIR) $(SWIG_PY_DIR) -name "*.pyc" -exec rm {} ';'
+       find $(SWIG_PY_SRC_DIR) -name "*.pyc" -exec rm {} ';'
+       if test -d $(SWIG_PY_DIR); then \
+         find $(SWIG_PY_DIR) -name "*.pyc" -exec rm {} ';'; \
+       fi
 
 extraclean-swig-py: clean-swig-py
        $(EXTRACLEAN_SWIG_PY)
@@ -832,8 +843,10 @@ clean-swig-rb:
        fi
        for d in $(SWIG_RB_DIR) $(SWIG_RB_DIR)/libsvn_swig_ruby; \
        do \
-         cd $$d; \
-         rm -rf *.lo *.la *.o .libs; \
+         if test -d $$d; then \
+           cd $$d; \
+           rm -rf *.lo *.la *.o .libs; \
+         fi; \
        done
 
 extraclean-swig-rb: clean-swig-rb

Reply via email to