diff options
| author | David Lamparter <equinox@opensourcerouting.org> | 2017-08-04 09:59:00 +0200 |
|---|---|---|
| committer | David Lamparter <equinox@opensourcerouting.org> | 2017-08-04 11:09:50 +0200 |
| commit | 306ed6816a685aabe3e0d0e93b83f3c8305cdc0f (patch) | |
| tree | 64dcda827cb221d8dac1d3d2257d919e8a8464d6 | |
| parent | cde8cd9d6583a2e34a5d78d1358f9c2393317dbd (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-x | configure.ac | 28 |
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 |
