diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2016-07-05 15:01:33 -0700 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2016-07-05 15:01:46 -0700 |
commit | 8321286846970af562a2ff6b7272f1cd0860d6c1 (patch) | |
tree | f55e67f1454183794137df937393b034589a30a7 /Makerules | |
parent | 00068ce40c3885ae0598e55a163632d78dfe42bf (diff) | |
download | glibc-8321286846970af562a2ff6b7272f1cd0860d6c1.tar.gz glibc-8321286846970af562a2ff6b7272f1cd0860d6c1.tar.xz glibc-8321286846970af562a2ff6b7272f1cd0860d6c1.zip |
Make copies of cstdlib/cmath and use them [BZ #20314]
If C++ headers <cstdlib> or <cmath> are used, GCC 6 will include /usr/include/stdlib.h or /usr/include/math.h from "#include_next" (instead of stdlib/stdlib.h or math/math.h in the glibc source directory), and this turns up as a make dependency. An implicit rule will kick in and make will try to install stdlib/stdlib.h or math/math.h as /usr/include/stdlib.h or /usr/include/math.h because the target is out of date. We make a copy of <cstdlib> and <cmath> in the glibc build directory so that stdlib/stdlib.h and math/math.h will be used instead of /usr/include/stdlib.h and /usr/include/math.h. [BZ #20314] * Makeconfig (CXXFLAGS): Prepend -I$(common-objpfx). * Makerules (before-compile): Add $(common-objpfx)cstdlib and $(common-objpfx)cmath. ($(common-objpfx)cstdlib): New target. ($(common-objpfx)cmath): Likewise.
Diffstat (limited to 'Makerules')
-rw-r--r-- | Makerules | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/Makerules b/Makerules index f1ecd40393..7e4077ee50 100644 --- a/Makerules +++ b/Makerules @@ -109,6 +109,30 @@ endif # avoid-generated endif # $(build-shared) = yes ifndef avoid-generated +ifneq (,$(CXX)) +# If C++ headers <cstdlib> or <cmath> are used, GCC 6 will include +# /usr/include/stdlib.h or /usr/include/math.h from "#include_next" +# (instead of stdlib/stdlib.h or math/math.h in the glibc source +# directory), and this turns up as a make dependency. An implicit +# rule will kick in and make will try to install stdlib/stdlib.h or +# math/math.h as /usr/include/stdlib.h or /usr/include/math.h because +# the target is out of date. We make a copy of <cstdlib> and <cmath> +# in the glibc build directory so that stdlib/stdlib.h and math/math.h +# 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) + $(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) + $(INSTALL_DATA) $< $@T + $(move-if-change) $@T $@ +endif + before-compile := $(common-objpfx)libc-abis.h $(before-compile) $(common-objpfx)libc-abis.h: $(common-objpfx)libc-abis.stamp; @: $(common-objpfx)libc-abis.stamp: $(..)scripts/gen-libc-abis \ |