Avoid running $(CXX) during build to obtain header file paths

This reduces the build time somewhat and is particularly noticeable
during rebuilds with few code changes.
This commit is contained in:
Florian Weimer 2016-09-21 10:45:32 +02:00
parent 612148c660
commit fc3e1337be
5 changed files with 39 additions and 6 deletions

View File

@ -1,3 +1,12 @@
2016-09-21 Florian Weimer <fweimer@redhat.com>
Avoid running $(CXX) during build to obtain header file paths.
* configure.ac (CXX_SYSINCLUDES, CXX_CMATH_HEADER): Set.
* config.make.in (c++-cstdlib-header, c++-cmath-header): Define.
* Makerules (cstdlib, cmath): Remove variables. Use
$(c++-cstdlib-header), $(c++-cmath-header) instead.
* configure: Regenerate.
2016-09-21 Florian Weimer <fweimer@redhat.com>
* Makeconfig (all-object-suffixes): Include .op only if

View File

@ -121,14 +121,10 @@ ifneq (,$(CXX))
# will be used instead of /usr/include/stdlib.h and /usr/include/math.h.
before-compile := $(common-objpfx)cstdlib $(common-objpfx)cmath \
$(before-compile)
cstdlib=$(shell echo "\#include <cstdlib>" | $(CXX) -M -MP -x c++ - \
| sed -n "/cstdlib:/{s/:$$//;p}")
$(common-objpfx)cstdlib: $(cstdlib)
$(common-objpfx)cstdlib: $(c++-cstdlib-header)
$(INSTALL_DATA) $< $@T
$(move-if-change) $@T $@
cmath=$(shell echo "\#include <cmath>" | $(CXX) -M -MP -x c++ - \
| sed -n "/cmath:/{s/:$$//;p}")
$(common-objpfx)cmath: $(cmath)
$(common-objpfx)cmath: $(c++-cmath-header)
$(INSTALL_DATA) $< $@T
$(move-if-change) $@T $@
endif

View File

@ -45,6 +45,8 @@ defines = @DEFINES@
sysheaders = @sysheaders@
sysincludes = @SYSINCLUDES@
c++-sysincludes = @CXX_SYSINCLUDES@
c++-cstdlib-header = @CXX_CSTDLIB_HEADER@
c++-cmath-header = @CXX_CMATH_HEADER@
all-warnings = @all_warnings@
enable-werror = @enable_werror@

14
configure vendored
View File

@ -635,6 +635,8 @@ BISON
INSTALL_INFO
PERL
BASH_SHELL
CXX_CMATH_HEADER
CXX_CSTDLIB_HEADER
CXX_SYSINCLUDES
SYSINCLUDES
AUTOCONF
@ -5054,6 +5056,18 @@ fi
# Obtain some C++ header file paths. This is used to make a local
# copy of those headers in Makerules.
if test -n "$CXX"; then
find_cxx_header () {
echo "#include <$1>" | $CXX -M -MP -x c++ - | sed -n "/$1:/{s/:\$//;p}"
}
CXX_CSTDLIB_HEADER="$(find_cxx_header cstdlib)"
CXX_CMATH_HEADER="$(find_cxx_header cmath)"
fi
# Test if LD_LIBRARY_PATH contains the notation for the current directory
# since this would lead to problems installing/building glibc.
# LD_LIBRARY_PATH contains the current directory if one of the following

View File

@ -1039,6 +1039,18 @@ fi
AC_SUBST(SYSINCLUDES)
AC_SUBST(CXX_SYSINCLUDES)
# Obtain some C++ header file paths. This is used to make a local
# copy of those headers in Makerules.
if test -n "$CXX"; then
find_cxx_header () {
echo "#include <$1>" | $CXX -M -MP -x c++ - | sed -n "/$1:/{s/:\$//;p}"
}
CXX_CSTDLIB_HEADER="$(find_cxx_header cstdlib)"
CXX_CMATH_HEADER="$(find_cxx_header cmath)"
fi
AC_SUBST(CXX_CSTDLIB_HEADER)
AC_SUBST(CXX_CMATH_HEADER)
# Test if LD_LIBRARY_PATH contains the notation for the current directory
# since this would lead to problems installing/building glibc.
# LD_LIBRARY_PATH contains the current directory if one of the following