summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Lamparter <equinox@opensourcerouting.org>2017-08-04 09:59:00 +0200
committerDavid Lamparter <equinox@opensourcerouting.org>2017-08-04 11:09:50 +0200
commit306ed6816a685aabe3e0d0e93b83f3c8305cdc0f (patch)
tree64dcda827cb221d8dac1d3d2257d919e8a8464d6
parentcde8cd9d6583a2e34a5d78d1358f9c2393317dbd (diff)
build: pre-generate built headers in configure
zebra.h includes route_types.h, which means almost all of our Makefile targets have a dependency on route_types.h. While BUILT_SOURCES ensures that this dependency is fulfilled on a "make all", this doesn't work when building specific targets (e.g. "make lib/libfrr.la"). There seems to be no good way to add a dependency on everything, so the best fix for this is to just generate the file during ./configure. (The Makefile rule is still there, so if route_types.txt is changed, route_types.h will be rebuilt.) This only affects "initial" builds from a clean directory and/or builds with --disable-dependency-tracking; other than that gcc will output Makefile dependencies during compilation so that route_types.h will become a dependency for all output files. gitversion.h has the same problem on a smaller scope. command_lex.h & command_parse.h *don't* have the problem because they're only used in specific files, and these files have the dependency explicitly listed in the Makefile. Hence, they can also be removed from BUILT_SOURCES. Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
-rwxr-xr-xconfigure.ac28
1 files changed, 28 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac
index 81ab9dc682..5bc075ccc1 100755
--- a/configure.ac
+++ b/configure.ac
@@ -1840,6 +1840,34 @@ AC_CONFIG_FILES([solaris/Makefile])
AC_CONFIG_FILES([vtysh/extract.pl],[chmod +x vtysh/extract.pl])
+AC_CONFIG_COMMANDS([lib/route_types.h], [
+ dst="${ac_abs_top_builddir}/lib/route_types.h"
+ ${PERL} "${ac_abs_top_srcdir}/lib/route_types.pl" \
+ < "${ac_abs_top_srcdir}/lib/route_types.txt" \
+ > "${dst}.tmp"
+ test -f "${dst}" \
+ && diff "${dst}.tmp" "${dst}" >/dev/null 2>/dev/null \
+ && rm "${dst}.tmp" \
+ || mv "${dst}.tmp" "${dst}"
+], [
+ PERL="$PERL"
+])
+
+AS_IF([test "x$with_pkg_git_version" = "xyes"], [
+ AC_CONFIG_COMMANDS([lib/gitversion.h], [
+ dst="${ac_abs_top_builddir}/lib/gitversion.h"
+ ${PERL} "${ac_abs_top_srcdir}/lib/gitversion.pl" \
+ "${ac_abs_top_srcdir}" \
+ > "${dst}.tmp"
+ test -f "${dst}" \
+ && diff "${dst}.tmp" "${dst}" >/dev/null 2>/dev/null \
+ && rm "${dst}.tmp" \
+ || mv "${dst}.tmp" "${dst}"
+ ], [
+ PERL="$PERL"
+ ])
+])
+
## Hack, but working solution to avoid rebuilding of frr.info.
## It's already in CVS until texinfo 4.7 is more common.
AC_OUTPUT