diff --git a/doc/history.adoc b/doc/history.adoc
index a39a3eb..41c2e25 100644
--- a/doc/history.adoc
+++ b/doc/history.adoc
@@ -10,6 +10,10 @@ http://www.boost.org/LICENSE_1_0.txt)
== 1.12
* Switch to using the endian.h header on OpenBSD. (Brad Smith)
+* Fix not handling recent versions of stdcxx that go above version 9.
+* Fix including sub-BSD OS headers directly causing redef warnings.
+* Add CI testing of direct inclusion of all headers.
+* Add CI testing on FreeBSD for clang and gcc.
== 1.11
diff --git a/doc/index.html b/doc/index.html
index 6238800..9884ed7 100644
--- a/doc/index.html
+++ b/doc/index.html
@@ -6808,6 +6808,18 @@ expressions. It defaults to "c++", but can be any of: "c", "cpp",
Switch to using the endian.h header on OpenBSD. (Brad Smith)
+
+Fix not handling recent versions of stdcxx that go above version 9.
+
+
+Fix including sub-BSD OS headers directly causing redef warnings.
+
+
+Add CI testing of direct inclusion of all headers.
+
+
+Add CI testing on FreeBSD for clang and gcc.
+
diff --git a/include/boost/predef/os/bsd/bsdi.h b/include/boost/predef/os/bsd/bsdi.h
index 0c90f6d..d0a5dcd 100644
--- a/include/boost/predef/os/bsd/bsdi.h
+++ b/include/boost/predef/os/bsd/bsdi.h
@@ -29,6 +29,7 @@ http://en.wikipedia.org/wiki/BSD/OS[BSDi BSD/OS] operating system.
defined(__bsdi__) \
)
# ifndef BOOST_OS_BSD_AVAILABLE
+# undef BOOST_OS_BSD
# define BOOST_OS_BSD BOOST_VERSION_NUMBER_AVAILABLE
# define BOOST_OS_BSD_AVAILABLE
# endif
diff --git a/include/boost/predef/os/bsd/dragonfly.h b/include/boost/predef/os/bsd/dragonfly.h
index 253f0e2..4320777 100644
--- a/include/boost/predef/os/bsd/dragonfly.h
+++ b/include/boost/predef/os/bsd/dragonfly.h
@@ -29,6 +29,7 @@ http://en.wikipedia.org/wiki/DragonFly_BSD[DragonFly BSD] operating system.
defined(__DragonFly__) \
)
# ifndef BOOST_OS_BSD_AVAILABLE
+# undef BOOST_OS_BSD
# define BOOST_OS_BSD BOOST_VERSION_NUMBER_AVAILABLE
# define BOOST_OS_BSD_AVAILABLE
# endif
diff --git a/include/boost/predef/os/bsd/free.h b/include/boost/predef/os/bsd/free.h
index 0cf82ae..4098b3a 100644
--- a/include/boost/predef/os/bsd/free.h
+++ b/include/boost/predef/os/bsd/free.h
@@ -31,6 +31,7 @@ http://en.wikipedia.org/wiki/Freebsd[FreeBSD] operating system.
defined(__FreeBSD__) \
)
# ifndef BOOST_OS_BSD_AVAILABLE
+# undef BOOST_OS_BSD
# define BOOST_OS_BSD BOOST_VERSION_NUMBER_AVAILABLE
# define BOOST_OS_BSD_AVAILABLE
# endif
diff --git a/include/boost/predef/os/bsd/net.h b/include/boost/predef/os/bsd/net.h
index c4e3c92..537f16a 100644
--- a/include/boost/predef/os/bsd/net.h
+++ b/include/boost/predef/os/bsd/net.h
@@ -36,6 +36,7 @@ http://en.wikipedia.org/wiki/Netbsd[NetBSD] operating system.
defined(__NETBSD__) || defined(__NetBSD__) \
)
# ifndef BOOST_OS_BSD_AVAILABLE
+# undef BOOST_OS_BSD
# define BOOST_OS_BSD BOOST_VERSION_NUMBER_AVAILABLE
# define BOOST_OS_BSD_AVAILABLE
# endif
diff --git a/include/boost/predef/os/bsd/open.h b/include/boost/predef/os/bsd/open.h
index 3a9081c..34f0a71 100644
--- a/include/boost/predef/os/bsd/open.h
+++ b/include/boost/predef/os/bsd/open.h
@@ -80,6 +80,7 @@ http://en.wikipedia.org/wiki/Openbsd[OpenBSD] operating system.
defined(__OpenBSD__) \
)
# ifndef BOOST_OS_BSD_AVAILABLE
+# undef BOOST_OS_BSD
# define BOOST_OS_BSD BOOST_VERSION_NUMBER_AVAILABLE
# define BOOST_OS_BSD_AVAILABLE
# endif
diff --git a/test/build.jam b/test/build.jam
index e894a31..bbc60fd 100644
--- a/test/build.jam
+++ b/test/build.jam
@@ -4,11 +4,13 @@
# http://www.boost.org/LICENSE_1_0.txt)
import ../tools/check/predef : require check : predef-require predef-check ;
+import common ;
import path ;
+import regex ;
# This deals with the unfortunate aspect of a Boost monolithic release
# not having the modular include dirs. This is a kludge that just removes
-# the direct depdndency to the header if it can't find it.
+# the direct dependency to the header if it can't find it.
local PREDEF_H = $(BOOST_PREDEF_INCLUDE)/boost/predef.h ;
if ! [ path.exists $(PREDEF_H) ]
{
@@ -25,11 +27,14 @@ project
using testing ;
-test-suite predef :
+test-suite predef-info :
[ run info_as_cpp.cpp : : : always_show_run_output ]
[ run info_as_c.c : : : always_show_run_output ]
[ run info_as_objcpp.mm : : : always_show_run_output ]
[ run info_as_objc.m : : : always_show_run_output ]
+ ;
+
+test-suite predef :
[ run version.cpp ]
[ run make.cpp ]
[ compile macos_endian.c : [ predef-require "BOOST_OS_MACOS" : cpp ] ]
@@ -43,15 +48,62 @@ test-suite predef :
[ compile platform_windows.cpp ]
;
+local HEADERS = [ path.glob
+ $(BOOST_PREDEF_INCLUDE)/predef
+ $(BOOST_PREDEF_INCLUDE)/predef/architecture
+ $(BOOST_PREDEF_INCLUDE)/predef/architecture/x86
+ $(BOOST_PREDEF_INCLUDE)/predef/compiler
+ $(BOOST_PREDEF_INCLUDE)/predef/hardware
+ $(BOOST_PREDEF_INCLUDE)/predef/hardware/simd
+ $(BOOST_PREDEF_INCLUDE)/predef/hardware/simd/arm
+ $(BOOST_PREDEF_INCLUDE)/predef/hardware/simd/ppc
+ $(BOOST_PREDEF_INCLUDE)/predef/hardware/simd/x86
+ $(BOOST_PREDEF_INCLUDE)/predef/hardware/simd/x86_amd
+ $(BOOST_PREDEF_INCLUDE)/predef/language
+ $(BOOST_PREDEF_INCLUDE)/predef/library
+ $(BOOST_PREDEF_INCLUDE)/predef/library/c
+ $(BOOST_PREDEF_INCLUDE)/predef/library/std
+ $(BOOST_PREDEF_INCLUDE)/predef/os
+ $(BOOST_PREDEF_INCLUDE)/predef/os/bsd
+ $(BOOST_PREDEF_INCLUDE)/predef/other
+ $(BOOST_PREDEF_INCLUDE)/predef/platform
+ : *.h
+ ] ;
+local single_header_cpp ;
+for local h in $(HEADERS)
+{
+ local header_include = [ path.relative $(h) [ path.make $(BOOST_PREDEF_INCLUDE) ] ] ;
+ local header_cpp = [ regex.replace $(header_include:S=.cpp) "/" "_" ] ;
+ .HEADER($(header_cpp:B:S=)) = $(header_include) ;
+ make $(header_cpp) : : @gen_single_header_cpp ;
+ explicit $(header_cpp) ;
+ compile $(header_cpp) : on all : $(header_cpp:B:S=) ;
+ explicit $(header_cpp:B:S=) ;
+ single_header_cpp += $(header_cpp:B:S=) ;
+}
+
+test-suite predef-headers : $(single_header_cpp) ;
+
+.file_touch_cmd = [ common.file-touch-command ] ;
+
+rule gen_single_header_cpp ( target * : source * : properties * )
+{
+ HEADER on $(target) = $(.HEADER($(target[1]:B))) ;
+}
+actions gen_single_header_cpp
+{
+ $(.file_touch_cmd) @($(<):<=":>=":O=F:E=#include <$(HEADER)>)
+}
+
# Minimal testing done for predef for CI. Since
# we don't have many we can just do all of them.
-alias minimal : predef ;
+alias minimal : predef predef-info ;
# Full testing target for regular regression tests.
-alias full : predef ;
+alias full : predef predef-info ;
-# Extra's target. Nothing for Predef.
-alias extra ;
+# Extra's target.
+alias extra : predef-headers ;
explicit minimal ;
explicit extra ;