Daniel Shahaf wrote:
> Jonathan Nieder wrote on Sat, Nov 05, 2011 at 22:57:55 -0500:

>> +++ Makefile.in      (working copy)
[...]
>>  # 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                             \
>>            echo "------ making $$target in $$i";       \
>>            (cd $$i && $(MAKE) $$target) || exit 1;     \
>
> What is this hunk needed for?
>
> mkdir creates ./doc and ./subversion/**/, why does the make target that
> recurses into apr/neon/etc need to create those dirs?

Good catch.  I was looking for places that might try to cd into
a directory that does not exist yet, and this cannot possibly be one
--- immediately after changing directory, we call "make" to use a
Makefile there.

Reviewing the other parts:

>> * Makefile.in
>>   (external-all, external-install): Depend on mkdir-init.

Superfluous, as you explained.

>>   ($(SWIG_PL_DIR)/native/Makefile.PL): Likewise.

Not needed --- config.status knows how to create leading directories.

>>   (swig-pl): Likewise.

Needed.

        cd . && /usr/bin/python
        ../build/generator/swig/checkout_swig_header.py
        /tmp/svn-test/BUILD/../build.conf /usr/bin/swig common.swg
        Traceback (most recent call last):
          File "../build/generator/swig/checkout_swig_header.py", line 85, in 
<module>
            gen.checkout(sys.argv[3])
          File "../build/generator/swig/checkout_swig_header.py", line 62, in 
checkout
            open(out, "w")
        IOError: [Errno 2] No such file or directory: 
'subversion/bindings/swig/proxy/common.swg'

>>   ($(SWIG_PY_DIR)/libsvn): Likewise.

Needed.

        mkdir /tmp/svn-test/BUILD/subversion/bindings/swig/python/libsvn
        mkdir: cannot create directory 
`/tmp/svn-test/BUILD/subversion/bindings/swig/python/libsvn': No such file or 
directory
        make: *** [/tmp/svn-test/BUILD/subversion/bindings/swig/python/libsvn] 
Error 1

>>   (external-clean, external-distclean): Check if directories exist
>>     before cleaning them.
>>   (external-extraclean): Likewise.

Not needed.

>>   (schema-clean): Likewise.

Not really needed (since who is going to call the schema-clean
target?), but seems nice to have.

>>   (clean-swig-py): Likewise.
>>   (clean-swig-pl): Likewise.
>>   (clean-swig-rb): Likewise.

Needed.

[[[
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
  (swig-pl, $(SWIG_PY_DIR)/libsvn): Depend on mkdir-init.
  (schema-clean, clean-swig-pl, clean-swig-py, clean-swig-rb): Check if
    directories exist before cleaning them.

Review by: philip
           danielsh
(philip noticed that this should use mkdir-init instead of reimplementing
it poorly.  danielsh helped pare down the patch.)
]]]

Index: Makefile.in
===================================================================
--- Makefile.in (revision 1198570)
+++ Makefile.in (working copy)
@@ -648,7 +648,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
@@ -748,7 +750,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 +774,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 +785,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 +809,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 +838,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