--- a/build/generator/swig/checkout_swig_header.py
+++ b/build/generator/swig/checkout_swig_header.py
@@ -20,15 +20,14 @@
 
   def write_makefile_rules(self, makefile):
     """Write makefile rules to checkout files"""
-    script_path = '$(top_srcdir)/build/generator/swig/checkout_swig_header.py'
-    conf = '$(abs_srcdir)/build.conf'
-    makefile.write('CHECKOUT_SWIG = cd $(top_builddir) && $(PYTHON)' +
-                   ' %s %s $(SWIG)\n\n' % (script_path, conf))
+    script_path = 'build/generator/swig/checkout_swig_header.py'
+    makefile.write('CHECKOUT_SWIG = cd $(top_srcdir) &&' +
+                   ' $(PYTHON) %s build.conf $(SWIG)\n' % script_path)
     checkout_locations = []
     for path in self.swig_checkout_files:
       out = self._output_file(path)
       checkout_locations.append(out)
-      makefile.write('%s: %s\n' % (out, script_path) +
+      makefile.write('%s: $(top_srcdir)/%s\n' % (out, script_path) +
                      '\t$(CHECKOUT_SWIG) %s\n\n' % path)
     makefile.write('SWIG_CHECKOUT_FILES = %s\n\n\n'
                    % " ".join(checkout_locations))

--- a/build/generator/gen_make.py
+++ b/build/generator/gen_make.py
@@ -183,9 +183,9 @@
       source_dir = build_path_dirname(source)
       opts = self.swig.opts[objname.lang]
       if not self.release_mode:
-        self.ofile.write('%s: %s\n' % (objname, deps) +
-          '\t$(SWIG) $(SWIG_INCLUDES) %s ' % opts +
-          '-o $@ $(top_srcdir)/%s\n' % source
+        self.ofile.write('$(top_srcdir)/%s:' % objname +
+                         ' $(top_srcdir)/%s %s\n' % (source, deps) +
+          '\t$(SWIG) $(SWIG_INCLUDES) %s -o $@ $<\n' % opts
         )
 
     self.ofile.write('\n')
@@ -456,11 +456,11 @@
       self.ofile.write('%s: %s\n' % (objname, deps))
       cmd = objname.compile_cmd
       if cmd:
-        if not getattr(objname, 'source_generated', 0):
+#        if not getattr(objname, 'source_generated', 0):
           self.ofile.write('\t%s %s\n\n'
                            % (cmd, '$(canonicalized_srcdir)' + str(sources[0])))
-        else:
-          self.ofile.write('\t%s %s\n\n' % (cmd, sources[0]))
+#        else:
+#          self.ofile.write('\t%s %s\n\n' % (cmd, sources[0]))
       else:
         self.ofile.write('\n')
 
--- a/build/generator/gen_base.py
+++ b/build/generator/gen_base.py
@@ -284,7 +284,8 @@
 
 class SWIGSource(SourceFile):
   def __init__(self, filename):
-    SourceFile.__init__(self, filename, build_path_dirname(filename))
+    SourceFile.__init__(self, filename,
+                        build_path_dirname('$(top_srcdir)/' + filename))
   pass
 
 lang_abbrev = {
--- a/build/generator/swig/header_wrappers.py
+++ b/build/generator/swig/header_wrappers.py
@@ -32,7 +32,7 @@
     """Write makefile rules for generating SWIG wrappers for Subversion
     header files."""
     wrapper_fnames = []
-    python_script = '$(abs_srcdir)/build/generator/swig/header_wrappers.py'
+    python_script = 'build/generator/swig/header_wrappers.py'
     makefile.write('GEN_SWIG_WRAPPER = cd $(top_srcdir) && $(PYTHON)' +
                    ' %s build.conf $(SWIG)\n\n'  % python_script)
     for fname in self.includes:
--- a/configure.ac
+++ b/configure.ac
@@ -1010,6 +1010,11 @@
 AC_SUBST(SVN_CONFIG_SCRIPT_FILES)
 
 AC_OUTPUT
+if test "$abs_srcdir" != "$abs_builddir"
+then
+  AC_MSG_NOTICE([Creating build directories])
+  (cd "$abs_srcdir"; find subversion tools contrib -type d) | xargs $MKDIR
+fi
 
 # ==== Print final messages to user ==========================================
 
--- a/build.conf
+++ b/build.conf
@@ -648,13 +648,14 @@
 # ----------------------------------------------------------------------------
 # Tests for libsvn_subr
 
-[auth-test]
-description = Test platform-specific auth provider access
-type = exe
-path = subversion/tests/libsvn_subr
-sources = auth-test.c
-install = test
-libs = libsvn_test libsvn_subr
+# Fails because it assumes gnome-keyring facilities are available at test time
+#[auth-test]
+#description = Test platform-specific auth provider access
+#type = exe
+#path = subversion/tests/libsvn_subr
+#sources = auth-test.c
+#install = test
+#libs = libsvn_test libsvn_subr
 
 [cache-test]
 description = Test in-memory cache
