about summary refs log tree commit diff
path: root/Makerules
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2016-07-05 15:01:33 -0700
committerH.J. Lu <hjl.tools@gmail.com>2016-07-05 15:01:46 -0700
commit8321286846970af562a2ff6b7272f1cd0860d6c1 (patch)
treef55e67f1454183794137df937393b034589a30a7 /Makerules
parent00068ce40c3885ae0598e55a163632d78dfe42bf (diff)
downloadglibc-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--Makerules24
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 \