diff --git a/src/aclocal.m4 b/src/aclocal.m4
index 68958d9ea688d06a0ab203335b95dce884b575c6..984020e9f2cc75a582960bd3a76cae84ce9ddcba 100644
--- a/src/aclocal.m4
+++ b/src/aclocal.m4
@@ -1,4 +1,4 @@
-dnl $Id: aclocal.m4,v 1.120 2006/06/17 19:58:50 mast Exp $
+dnl $Id: aclocal.m4,v 1.121 2006/06/17 20:26:04 mast Exp $
 
 dnl Some compatibility with Autoconf 2.50+. Not complete.
 dnl newer Autoconf calls substr m4_substr
@@ -383,12 +383,19 @@ define([PIKE_RETAIN_VARIABLES],
     sed -e 's/}/\\}/g' -e 's/\$/\\$/g' -e 's/^\([[^=]]*\)=\(.*\)$/\1=${\1=\2}/' < propagated_variables > propvars.sh
     . ./propvars.sh && rm propvars.sh
   fi
+
+  dnl This allows module configure scripts to extend these variables, as
+  dnl they often do (they should perhaps use the MODULE_* varieties
+  dnl instead).
+  CFLAGS=$BASE_CFLAGS
+  CPPFLAGS=$BASE_CPPFLAGS
+  LDFLAGS=$BASE_LDFLAGS
 ])
 
 
 define([AC_LOW_MODULE_INIT],
 [
-  # $Id: aclocal.m4,v 1.120 2006/06/17 19:58:50 mast Exp $
+  # $Id: aclocal.m4,v 1.121 2006/06/17 20:26:04 mast Exp $
 
   MY_AC_PROG_CC
 
@@ -504,18 +511,12 @@ pushdef([AC_OUTPUT],
 
   AC_SUBST(prefix)
   export prefix
-  AC_SUBST(exec_prefix)
-  export exec_prefix
-  AC_SUBST(BINDIR)
-  export BINDIR
   AC_SUBST(CFLAGS)
   export CFLAGS
   AC_SUBST(CPPFLAGS)
   export CPPFLAGS
-  AC_SUBST(OPTIMIZE)
-  export OPTIMIZE
-  AC_SUBST(WARN)
-  export WARN
+  AC_SUBST(LDFLAGS)
+  export LDFLAGS
   AC_SUBST(CCSHARED)
   export CCSHARED
 
diff --git a/src/configure.in b/src/configure.in
index 07d1eae9d6be731b3b6a9844393d7e01e4dd94d6..cbfe9b3f582b03bdc94c4967ad30520b528a7ffb 100644
--- a/src/configure.in
+++ b/src/configure.in
@@ -1,4 +1,4 @@
-AC_REVISION("$Id: configure.in,v 1.953 2006/06/17 19:58:50 mast Exp $")
+AC_REVISION("$Id: configure.in,v 1.954 2006/06/17 20:26:04 mast Exp $")
 AC_INIT(interpret.c)
 AC_CONFIG_HEADER(machine.h)
 
@@ -2225,7 +2225,7 @@ if test "x$PIKE_PATH_TRANSLATE" = "x"; then
     # MinGW system.
     cat <<\EOF
 #!/bin/sh
-# Automatically generated by $Id: configure.in,v 1.953 2006/06/17 19:58:50 mast Exp $.
+# Automatically generated by $Id: configure.in,v 1.954 2006/06/17 20:26:04 mast Exp $.
 # MinGW-version. Do NOT edit.
 posix_name="`cat`"
 posix_prefix="/"
@@ -2263,7 +2263,7 @@ EOF
     # Native POSIX system.
   cat <<\EOF
 #!/bin/sh
-# Automatically generated by $Id: configure.in,v 1.953 2006/06/17 19:58:50 mast Exp $.
+# Automatically generated by $Id: configure.in,v 1.954 2006/06/17 20:26:04 mast Exp $.
 # POSIX-version. Do NOT edit.
 cat
 EOF
@@ -2272,7 +2272,7 @@ else
   # rntcl-style
   cat <<\EOF
 #!/bin/sh
-# Automatically generated by $Id: configure.in,v 1.953 2006/06/17 19:58:50 mast Exp $.
+# Automatically generated by $Id: configure.in,v 1.954 2006/06/17 20:26:04 mast Exp $.
 # RNTCL-version. Do NOT edit.
 sed -e "$PIKE_PATH_TRANSLATE"
 EOF
@@ -7611,8 +7611,12 @@ AC_SUBST_FILE(common_module_makefile)
 
 # Afaik BUILDDIR/TMP_BUILDDIR and BINDIR/TMP_BINDIR are always the
 # same thing. Can it be cleaned up? /mast
-TMP_BUILDDIR=${BUILDDIR}
-TMP_BINDIR=${BINDIR}
+TMP_BUILDDIR=$BUILDDIR
+TMP_BINDIR=$BINDIR
+
+BASE_CFLAGS=$CFLAGS
+BASE_CPPFLAGS=$CPPFLAGS
+BASE_LDFLAGS=$LDFLAGS
 
 #
 # Note: We must output before visiting the subdirs,
diff --git a/src/make_variables.in b/src/make_variables.in
index 67dcc35530995383e2e90b94be05c155393fd5cf..7a8702b5efd03f6ef54012f1fcd322016cc8dcce 100644
--- a/src/make_variables.in
+++ b/src/make_variables.in
@@ -1,6 +1,6 @@
 # -*- Makefile -*-
 #
-# $Id: make_variables.in,v 1.19 2006/06/17 19:58:50 mast Exp $
+# $Id: make_variables.in,v 1.20 2006/06/17 20:26:04 mast Exp $
 #
 # Note: This template is actually used only for make_variables in the
 # subdirectories; the one created in the build base dir is just an
@@ -22,7 +22,7 @@
 # top directory).
 @propagated_variables@
 #propagated_variables: CC CPP LDSHARED AR INSTALL
-#propagated_variables: OPTIMIZE WARN
+#propagated_variables: BASE_CFLAGS BASE_CPPFLAGS BASE_LDFLAGS OPTIMIZE WARN
 #propagated_variables: TMP_BUILDDIR TMP_BINDIR PIKE_SRC_DIR BUILD_BASE
 
 @SET_MAKE@
diff --git a/src/modules/common_module_makefile.in b/src/modules/common_module_makefile.in
index 0c5e4ed7fd00d9262940db0a1cbdc223ed14a69b..d4491d3c312f7c9f77c6c44b492c3899744eda46 100644
--- a/src/modules/common_module_makefile.in
+++ b/src/modules/common_module_makefile.in
@@ -1,5 +1,5 @@
 #
-# $Id: common_module_makefile.in,v 1.35 2006/06/17 19:58:50 mast Exp $
+# $Id: common_module_makefile.in,v 1.36 2006/06/17 20:26:04 mast Exp $
 #
 # Contains stuff common to both dynamic_module_makefile and
 # static_module_makefile.
@@ -8,15 +8,6 @@
 # dynamic_module_makefile or static_module_makefile as appropriate.
 #
 
-# These are set by make_variables.
-# CC=@CC@
-# CPP=@CPP@
-# AR=@AR@
-REAL_LDFLAGS=@LDFLAGS@
-REAL_LDSHARED=@LDSHARED@
-REAL_CFLAGS=@CFLAGS@
-REAL_CPPFLAGS=@CPPFLAGS@
-
 PREFLAGS=-I. -I$(SRCDIR) -I$(BUILD_BASE) -I$(PIKE_SRC_DIR) $(LINKAGE_CPPFLAGS) $(MODULE_CPPFLAGS) $(DEFINES)
 CFLAGS=$(MODULE_CFLAGS) $(PREFLAGS) $(OTHERFLAGS) $(LINKAGE_CFLAGS)
 NOOPT_CFLAGS=$(MODULE_CFLAGS) $(PREFLAGS) $(NOOPTFLAGS) $(LINKAGE_CFLAGS)
@@ -102,10 +93,8 @@ $(CONFIG_HEADERS) dummy_config_header: config.status
 $(SRCDIR)/configure: $(SRCDIR)/configure.in $(PIKE_SRC_DIR)/aclocal.m4
 	cd $(SRCDIR) && $(PIKE_SRC_DIR)/run_autoconfig .
 
-propagated_variables:
-
 config.status: $(SRCDIR)/configure propagated_variables
-	CFLAGS="$(REAL_CFLAGS)" LDFLAGS="$(REAL_LDFLAGS)" LDSHARED="$(REAL_LDSHARED)" CPPFLAGS="$(REAL_CPPFLAGS)" ./config.status --recheck
+	./config.status --recheck
 
 module.pmod: Makefile $(MODULE_PMOD_IN)
 	@if [ "x$(MODULE_PMOD_IN)" != "x" ]; then \