summaryrefslogtreecommitdiffstats
path: root/config
diff options
context:
space:
mode:
authorBrian Behlendorf <[email protected]>2010-03-22 14:45:33 -0700
committerBrian Behlendorf <[email protected]>2010-03-22 14:45:33 -0700
commit16b719f0066047aaf404756a0b4fe8c74eec6a2a (patch)
tree054c7b8867d597e02bf3494c75f4c0f5a514d5ba /config
parentaa600d8a3843755be1dd621ecd00401f26f3bb49 (diff)
Allow spl_config.h to be included by dependant packages (updated)
We need dependent packages to be able to include spl_config.h to build properly. This was partially solved in commit 0cbaeb1 by using AH_BOTTOM to #undef common #defines (PACKAGE, VERSION, etc) which autoconf always adds and cannot be easily removed. This solution works as long as the spl_config.h is included before your projects config.h. That turns out to be easier said than done. In particular, this is a problem when your package includes its config.h using the -include gcc option which ensures the first thing included is your config.h. To handle all cases cleanly I have removed the AH_BOTTOM hack and replaced it with an AC_CONFIG_HEADERS command. This command runs immediately after spl_config.h is written and with a little awk-foo it strips the offending #defines from the file. This eliminates the problem entirely and makes header safe for inclusion. Also in this change I have removed the few places in the code where spl_config.h is included. It is now added to the gcc compile line to ensure the config results are always available. Finally, I have also disabled the verbose kernel builds. If you want them back you can always build with 'make V=1'. Since things are working now they don't need to be on by default.
Diffstat (limited to 'config')
-rw-r--r--config/Rules.am2
-rw-r--r--config/config.awk15
-rw-r--r--config/spl-build.m47
3 files changed, 18 insertions, 6 deletions
diff --git a/config/Rules.am b/config/Rules.am
index 255fa6c1b..4733e841d 100644
--- a/config/Rules.am
+++ b/config/Rules.am
@@ -1,4 +1,4 @@
-DEFAULT_INCLUDES = -I${top_srcdir}
+DEFAULT_INCLUDES = -include ${top_srcdir}/spl_config.h
AM_CFLAGS = -Wall -Wstrict-prototypes -Werror -Wshadow
AM_CFLAGS += -D__USE_LARGEFILE64
diff --git a/config/config.awk b/config/config.awk
new file mode 100644
index 000000000..cc4b7cc26
--- /dev/null
+++ b/config/config.awk
@@ -0,0 +1,15 @@
+# Remove default preprocessor define's from config.h
+# PACKAGE
+# PACKAGE_BUGREPORT
+# PACKAGE_NAME
+# PACKAGE_STRING
+# PACKAGE_TARNAME
+# PACKAGE_VERSION
+# STDC_HEADERS
+# VERSION
+
+BEGIN { RS = "" ; FS = "\n" } \
+ !/.#define PACKAGE./ && \
+ !/.#define VERSION./ && \
+ !/.#define STDC_HEADERS./ \
+ { print $0"\n" }
diff --git a/config/spl-build.m4 b/config/spl-build.m4
index 9d0361028..0b387418e 100644
--- a/config/spl-build.m4
+++ b/config/spl-build.m4
@@ -4,15 +4,12 @@ dnl #
AC_DEFUN([SPL_AC_CONFIG_KERNEL], [
SPL_AC_KERNEL
- dnl # Kernel build make options
- dnl # KERNELMAKE_PARAMS="V=1" # Enable verbose module build
- KERNELMAKE_PARAMS="V=1"
-
dnl # -Wall -fno-strict-aliasing -Wstrict-prototypes and other
dnl # compiler options are added by the kernel build system.
abs_srcdir=`readlink -f ${srcdir}`
KERNELCPPFLAGS="$KERNELCPPFLAGS -Wstrict-prototypes -Werror"
- KERNELCPPFLAGS="$KERNELCPPFLAGS -I${abs_srcdir} -I${abs_srcdir}/include"
+ KERNELCPPFLAGS="$KERNELCPPFLAGS -I${abs_srcdir}/include"
+ KERNELCPPFLAGS="$KERNELCPPFLAGS -include ${abs_srcdir}/spl_config.h"
if test "${LINUX_OBJ}" != "${LINUX}"; then
KERNELMAKE_PARAMS="$KERNELMAKE_PARAMS O=$LINUX_OBJ"