diff --git a/BUILD/compile-dist b/BUILD/compile-dist
index 6cc537cdf9c5397a1ff01beaa1e0587ff581b001..dea29d4612b6a0141a67f4fc09c29c790775fc02 100755
--- a/BUILD/compile-dist
+++ b/BUILD/compile-dist
@@ -52,7 +52,9 @@ fi
   --with-federated-storage-engine \
   --with-berkeley-db \
   --with-innodb \
+  --with-yassl \
   --enable-thread-safe-client \
   --with-extra-charsets=complex \
-  --with-ndbcluster
+  --with-ndbcluster \
+  --with-zlib-dir=bundled
 make
diff --git a/Makefile.am b/Makefile.am
index 3f17cbe797d741858c0d6deb395b006d049a78a6..c9cffd79529863c2ba52050293f7648cacc20453 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -21,25 +21,17 @@ AUTOMAKE_OPTIONS =	foreign
 # These are built from source in the Docs directory
 EXTRA_DIST =		INSTALL-SOURCE INSTALL-WIN-SOURCE \
 			README COPYING EXCEPTIONS-CLIENT cmakelists.txt
-SUBDIRS =		. include @docs_dirs@ @zlib_dir@ @yassl_dir@ \
+SUBDIRS =		. include @docs_dirs@ @zlib_dir@ \
 			@readline_topdir@ sql-common \
 			@thread_dirs@ pstack \
-			@sql_union_dirs@ @mysql_se_dirs@ \
+			@sql_union_dirs@ storage \
 			@sql_server@ scripts @man_dirs@ tests \
 			@mysql_se_plugins@ \
 			netware @libmysqld_dirs@ \
 			@bench_dirs@ support-files @tools_dirs@ \
 			plugin win
 
-DIST_SUBDIRS =		. include @docs_dirs@ zlib \
-			@readline_topdir@ sql-common \
-			@thread_dirs@ pstack \
-                        strings mysys dbug extra regex storage \
-                        vio sql libmysql_r libmysql client scripts \
-			@man_dirs@ tests SSL\
-			BUILD netware os2 @libmysqld_dirs@\
-			@bench_dirs@ support-files server-tools tools \
-			plugin win
+DIST_SUBDIRS =		$(SUBDIRS) SSL BUILD os2 
 
 # Run these targets before any others, also make part of clean target,
 # to make sure we create new links after a clean.
@@ -100,9 +92,11 @@ dist-hook:
 	rm -rf `find $(distdir) -type d -name SCCS -print`
 	if echo "$(distdir)" | grep -q '^/' ; then \
 	  scripts/mysql_install_db --no-defaults --windows \
+		--basedir=$(top_srcdir) \
 		--datadir="$(distdir)/win/data"; \
 	else \
 	  scripts/mysql_install_db --no-defaults --windows \
+		 --basedir=$(top_srcdir) \
 		 --datadir="$$(pwd)/$(distdir)/win/data"; \
 	fi
 
diff --git a/config/ac-macros/yassl.m4 b/config/ac-macros/yassl.m4
index c736f2f10f2d7cbc53477ff3905138bec3ab2c72..906a65a2fc36272d389b8e98766ba8cd3f859683 100644
--- a/config/ac-macros/yassl.m4
+++ b/config/ac-macros/yassl.m4
@@ -1,8 +1,3 @@
-AC_CONFIG_FILES(extra/yassl/Makefile dnl
-extra/yassl/taocrypt/Makefile dnl
-extra/yassl/taocrypt/src/Makefile dnl
-extra/yassl/src/Makefile)
-
 AC_DEFUN([MYSQL_CHECK_YASSL], [
   AC_MSG_CHECKING(for yaSSL)
   AC_ARG_WITH([yassl], [  --with-yassl          Include the yaSSL support],,)
@@ -14,7 +9,11 @@ AC_DEFUN([MYSQL_CHECK_YASSL], [
       AC_MSG_ERROR([Cannot configure MySQL to use yaSSL and OpenSSL simultaneously.])
     fi
     AC_MSG_RESULT([using bundled yaSSL])
-    yassl_dir="extra/yassl"
+    AC_CONFIG_FILES(extra/yassl/Makefile dnl
+    extra/yassl/taocrypt/Makefile dnl
+    extra/yassl/taocrypt/src/Makefile dnl
+    extra/yassl/src/Makefile)
+    yassl_dir="yassl"
     yassl_libs="-L\$(top_srcdir)/extra/yassl/src -lyassl -L\$(top_srcdir)/extra/yassl/taocrypt/src -ltaocrypt"
     yassl_includes="-I\$(top_srcdir)/extra/yassl/include"
     AC_DEFINE([HAVE_OPENSSL], [1], [Defined by configure. Using yaSSL for OpenSSL emulation.])
diff --git a/config/ac-macros/zlib.m4 b/config/ac-macros/zlib.m4
index a8c54c845a12e03766b081a5471710aeb22fc62c..23cc132aca8767fd9e9099cc5d28032b5678915a 100644
--- a/config/ac-macros/zlib.m4
+++ b/config/ac-macros/zlib.m4
@@ -63,7 +63,7 @@ case $SYSTEM_TYPE in
     ;;
   *)
     AC_ARG_WITH([zlib-dir],
-                AC_HELP_STRING([--with-zlib-dir=DIR],
+                AC_HELP_STRING([--with-zlib-dir=no|bundled|DIR],
                                [Provide MySQL with a custom location of
                                compression library. Given DIR, zlib binary is 
                                assumed to be in $DIR/lib and header files
@@ -113,6 +113,10 @@ case $SYSTEM_TYPE in
     fi
     ;;
 esac
+if test -n "$zlib_dir"
+then
+  AC_CONFIG_FILES(zlib/Makefile)
+fi
 ])
 
 dnl ------------------------------------------------------------------------
diff --git a/configure.in b/configure.in
index 250d7f6d1c2f3df9d6b8d2903b4a3944c12f11b0..ddc771b3ca49e5ad7da322f41ece0021472ba873 100644
--- a/configure.in
+++ b/configure.in
@@ -2304,16 +2304,20 @@ fi
 AC_SUBST(man_dirs)
 AC_SUBST(man1_files)
 
+if test -e sql-bench
+then
 # Shall we build the bench code?
 AC_ARG_WITH(bench,
     [  --without-bench         Skip building of the benchmark suite.],
     [with_bench=$withval],
     [with_bench=yes]
 )
+fi
 
 if test "$with_bench" = "yes"
 then
   bench_dirs="sql-bench"
+  AC_CONFIG_FILES(sql-bench/Makefile)
 else
   bench_dirs=""
 fi
@@ -2332,6 +2336,11 @@ AC_ARG_WITH(libedit,
     [ with_libedit=$withval ],
     [ with_libedit=undefined ]
     )
+if test -z "$with_readline$with_libedit" -a ! -e cmd-line-utils
+then
+  with_readline=no
+  with_libedit=no
+fi
 
 #
 # We support next variants of compilation:
@@ -2408,6 +2417,16 @@ else
           versions of libedit or readline])
     fi
 fi
+#
+# if either readline or libedit is enabled - generate Makefile's for both
+# (to make sure both are included in 'make dist')
+#
+if test -n "$readline_basedir"
+then
+  AC_CONFIG_FILES(cmd-line-utils/Makefile dnl
+                  cmd-line-utils/libedit/Makefile dnl
+                  cmd-line-utils/readline/Makefile)
+fi
 fi
 
 AC_SUBST(readline_dir)
@@ -2420,7 +2439,7 @@ MYSQL_CHECK_BIG_TABLES
 MYSQL_CHECK_MAX_INDEXES
 MYSQL_CHECK_REPLICATION
 
-MYSQL_STORAGE_ENGINE(innobase,,innodb,,,,storage/innobase,ha_innodb.o,[ dnl
+MYSQL_STORAGE_ENGINE(innobase,,innodb,,,,innobase,ha_innodb.o,[ dnl
   \$(top_builddir)/storage/innobase/usr/libusr.a dnl
   \$(top_builddir)/storage/innobase/srv/libsrv.a dnl
   \$(top_builddir)/storage/innobase/dict/libdict.a dnl
@@ -2462,24 +2481,24 @@ MYSQL_STORAGE_ENGINE(innobase,,innodb,,,,storage/innobase,ha_innodb.o,[ dnl
   other_configures="$other_configures storage/innobase/configure"
 ])
 
-MYSQL_STORAGE_ENGINE(berkeley,,berkeley-db,,,,storage/bdb,,,[
+MYSQL_STORAGE_ENGINE(berkeley,,berkeley-db,,,,bdb,,,[
   MYSQL_SETUP_BERKELEY_DB
 ])
-MYSQL_STORAGE_ENGINE(example,,,,,,storage/example,no,
+MYSQL_STORAGE_ENGINE(example,,,,,,example,no,
  \$(top_builddir)/storage/example/libexample.a,[
   AC_CONFIG_FILES(storage/example/Makefile)
 ])
-MYSQL_STORAGE_ENGINE(archive,,,,,,storage/archive,,
+MYSQL_STORAGE_ENGINE(archive,,,,,,archive,,
  \$(top_builddir)/storage/archive/libarchive.a, [
   AC_CONFIG_FILES(storage/archive/Makefile)
 ])
-MYSQL_STORAGE_ENGINE(csv,,,"yes",,tina_hton,storage/csv,no,
+MYSQL_STORAGE_ENGINE(csv,,,"yes",,tina_hton,csv,no,
   \$(top_builddir)/storage/csv/libcsv.a,[
   AC_CONFIG_FILES(storage/csv/Makefile)
 ])
 MYSQL_STORAGE_ENGINE(blackhole)
 MYSQL_STORAGE_ENGINE(federated)
-MYSQL_STORAGE_ENGINE(ndbcluster,,ndbcluster,,,,storage/ndb,,,[
+MYSQL_STORAGE_ENGINE(ndbcluster,,ndbcluster,,,,ndb,,,[
   MYSQL_SETUP_NDBCLUSTER
 ])
 MYSQL_STORAGE_ENGINE(partition,,partition)
@@ -2539,7 +2558,7 @@ then
   AC_SUBST(THREAD_LOBJECTS)
   server_scripts="mysqld_safe mysql_install_db"
   sql_server_dirs="strings mysys dbug extra regex"
-  mysql_se_dirs="storage/myisam storage/myisammrg storage/heap $mysql_se_dirs"
+  mysql_se_dirs="myisam myisammrg heap $mysql_se_dirs"
   sql_server="$sql_server vio sql"
 fi
 
@@ -2610,16 +2629,12 @@ AC_CONFIG_FILES(Makefile extra/Makefile mysys/Makefile dnl
  pstack/Makefile pstack/aout/Makefile sql/Makefile sql/share/Makefile dnl
  sql/handlerton.cc sql-common/Makefile SSL/Makefile dnl
  dbug/Makefile scripts/Makefile dnl
- include/Makefile sql-bench/Makefile dnl
+ include/Makefile dnl
  server-tools/Makefile server-tools/instance-manager/Makefile dnl
  tests/Makefile Docs/Makefile support-files/Makefile dnl
  support-files/MacOSX/Makefile mysql-test/Makefile dnl
  mysql-test/ndb/Makefile netware/Makefile dnl
  include/mysql_version.h dnl
- cmd-line-utils/Makefile dnl
- cmd-line-utils/libedit/Makefile dnl
- zlib/Makefile dnl
- cmd-line-utils/readline/Makefile dnl
  plugin/Makefile dnl
  plugin/fulltext/Makefile dnl
  win/Makefile)
diff --git a/extra/Makefile.am b/extra/Makefile.am
index 0aaa8c4d127ed879513cb32a14f1e8ca9aba634f..4b4831284394aa60c2441038bd420b4b37c12794 100644
--- a/extra/Makefile.am
+++ b/extra/Makefile.am
@@ -23,10 +23,7 @@ BUILT_SOURCES=		$(top_builddir)/include/mysqld_error.h \
                         $(top_builddir)/include/mysqld_ername.h
 pkginclude_HEADERS=	$(BUILT_SOURCES)
 CLEANFILES =		$(BUILT_SOURCES)
-# We never use SUBDIRS here, but needed for automake 1.6.3
-# to generate code to handle DIST_SUBDIRS
-SUBDIRS=
-DIST_SUBDIRS=           yassl
+SUBDIRS =		@yassl_dir@
 
 # This will build mysqld_error.h and sql_state.h
 $(top_builddir)/include/mysqld_error.h: comp_err$(EXEEXT)
diff --git a/libmysql_r/Makefile.am b/libmysql_r/Makefile.am
index d28f31b2258a1bdfe0f24a8a8c0a03ef8ea22ca9..a1ccbca48e549cfc80273b5247dc1504d4c77ee2 100644
--- a/libmysql_r/Makefile.am
+++ b/libmysql_r/Makefile.am
@@ -29,8 +29,6 @@ INCLUDES =	-I$(top_builddir)/include -I$(top_srcdir)/include \
 ## automake barfs if you don't use $(srcdir) or $(top_srcdir) in include
 include $(top_srcdir)/libmysql/Makefile.shared
 
-libmysql_dir = $(top_srcdir)/libmysql
-
 libmysqlclient_r_la_SOURCES = $(target_sources)
 libmysqlclient_r_la_LIBADD = $(target_libadd) $(yassl_las)
 libmysqlclient_r_la_LDFLAGS = $(target_ldflags)
@@ -38,7 +36,12 @@ libmysqlclient_r_la_LDFLAGS = $(target_ldflags)
 # This is called from the toplevel makefile
 link_sources:
 	set -x; \
-	for f in `cd $(libmysql_dir) && echo *.[ch]`; do \
+	for f in `cd $(top_srcdir)/libmysql && echo *.[ch]`; do \
+	  rm -f $$f; \
+	  @LN_CP_F@ $(top_srcdir)/libmysql/$$f $$f; \
+	done
+	for f in `cd $(top_builddir)/libmysql && echo *.[ch]`; do \
 	  rm -f $$f; \
-	  @LN_CP_F@ $(libmysql_dir)/$$f $$f; \
+	  @LN_CP_F@ $(top_builddir)/libmysql/$$f $$f; \
 	done
+
diff --git a/libmysqld/Makefile.am b/libmysqld/Makefile.am
index 961eea21d2a103af6646839e8f5423ef6765d472..89c5b645104cf2974850dc672e390074be8711b8 100644
--- a/libmysqld/Makefile.am
+++ b/libmysqld/Makefile.am
@@ -136,12 +136,18 @@ else
 		then \
 		  $(libmysqld_a_AR) libmysqld.a libmysqld_int.a $(INC_LIB) ; \
 		else \
+		  rm -rf tmp; mkdir tmp; \
 		  (for arc in ./libmysqld_int.a $(INC_LIB); do \
 		    arpath=`echo $$arc|sed 's|[^/]*$$||'`; \
-		    $(AR) t $$arc|xargs -n 1 find $$arpath -name; \
-		    $(AR) t $$arc|xargs -n 1 find `dirname $$arpath` -path \*/`basename $$arpath`/\* -name; \
+		    artmp=`echo $$arc|sed 's|^.*/|tmp/lib-|'`; \
+		    for F in `$(AR) t $$arc`; do \
+		      if test -e "$$arpath/$$F" ; then echo "$$arpath/$$F"; else \
+		      mkdir $$artmp; cd $$artmp; $(AR) x ../../$$arc; \
+		      cd ../..; ls $$artmp/*; \
+		      continue 2; fi; done; \
 		  done; echo $(libmysqld_a_DEPENDENCIES) ) | sort -u | xargs $(AR) cq libmysqld.a ; \
 		  $(RANLIB) libmysqld.a	; \
+		  rm -rf tmp; \
 		fi
 endif
 
diff --git a/mysql-test/ndb/Makefile.am b/mysql-test/ndb/Makefile.am
index 2a1c59fd3596948ad723aed5fbf5e81db46b7fb5..4ddf61cf5cc615ff87a97431663af310ba8bf25b 100644
--- a/mysql-test/ndb/Makefile.am
+++ b/mysql-test/ndb/Makefile.am
@@ -1,14 +1,11 @@
 
-BUILT_SOURCES =		ndbcluster
-
 benchdir_root=		$(prefix)
 testdir =	        $(benchdir_root)/mysql-test/ndb
 
-test_SCRIPTS = ndbcluster
-
-noinst_HEADERS = ndbcluster.sh
-
+EXTRA_DIST = ndbcluster.sh
+CLEANFILES = ndbcluster
 dist_test_DATA = ndb_config_2_node.ini ndb_config_1_node.ini
+test_SCRIPTS = ndbcluster
 
 SUFFIXES = .sh
 
diff --git a/plugin/Makefile.am b/plugin/Makefile.am
index da4ff0a8d5c7db5b43def5415e5893ed5f2d2b06..d0f68a9c84b3652544e3eb24c476e3c504164780 100644
--- a/plugin/Makefile.am
+++ b/plugin/Makefile.am
@@ -1 +1,6 @@
 SUBDIRS= fulltext
+
+# extra plugin example files are listed here, to
+# keep its Makefile.am cleaner as a template
+EXTRA_DIST= fulltext/configure.in
+
diff --git a/storage/Makefile.am b/storage/Makefile.am
index 95c49b50890e550d267727e2f9709b4ce73561d5..900e486c6aceae33ad1658d8c291181a17030d29 100644
--- a/storage/Makefile.am
+++ b/storage/Makefile.am
@@ -20,8 +20,7 @@ AUTOMAKE_OPTIONS =	foreign
 
 # These are built from source in the Docs directory
 EXTRA_DIST =		
-SUBDIRS =	
-DIST_SUBDIRS = . csv example bdb heap innobase myisam myisammrg ndb archive
+SUBDIRS = @mysql_se_dirs@
 
 # Don't update the files from bitkeeper
 %::SCCS/s.%
diff --git a/storage/ndb/Makefile.am b/storage/ndb/Makefile.am
index 9adb67f89fc103108e5171c278b598c1f310c3f4..c4ebf5e768810101ef8f2652512e8915cf5c7a9f 100644
--- a/storage/ndb/Makefile.am
+++ b/storage/ndb/Makefile.am
@@ -1,6 +1,7 @@
 SUBDIRS = src tools . include @ndb_opt_subdirs@
 DIST_SUBDIRS = src tools include test docs
 EXTRA_DIST = config ndbapi-examples
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 
 include $(top_srcdir)/storage/ndb/config/common.mk.am