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 ;