This should help address a recurring problem. Signed-off-by: Ben Pfaff <b...@ovn.org> --- .travis.yml | 1 + Makefile.am | 1 + configure.ac | 2 ++ include/openvswitch/automake.mk | 14 ++++++++++++++ m4/openvswitch.m4 | 21 +++++++++++++++++++++ 5 files changed, 39 insertions(+)
diff --git a/.travis.yml b/.travis.yml index 9d0fd44281e8..5d708498387e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -16,6 +16,7 @@ addons: - libjemalloc1 - libjemalloc-dev - python-sphinx + - libboost-dev before_install: ./.travis/${TRAVIS_OS_NAME}-prepare.sh diff --git a/Makefile.am b/Makefile.am index 9679379defef..373ef6e9189f 100644 --- a/Makefile.am +++ b/Makefile.am @@ -108,6 +108,7 @@ MAN_ROOTS = noinst_DATA = noinst_HEADERS = lib_LTLIBRARIES = +noinst_LTLIBRARIES = noinst_man_MANS = noinst_PROGRAMS = noinst_SCRIPTS = diff --git a/configure.ac b/configure.ac index 194c4b92ee34..093b6ffed50e 100644 --- a/configure.ac +++ b/configure.ac @@ -23,6 +23,7 @@ AM_INIT_AUTOMAKE([tar-pax]) AC_PROG_CC_C99 AM_PROG_CC_C_O +AC_PROG_CXX AC_PROG_CPP AC_PROG_MKDIR_P AC_PROG_FGREP @@ -135,6 +136,7 @@ OVS_CHECK_POSIX_AIO OVS_CHECK_PTHREAD_SET_NAME OVS_CHECK_LINUX_HOST OVS_LIBTOOL_VERSIONS +OVS_CHECK_CXX AX_FUNC_POSIX_MEMALIGN OVS_CHECK_INCLUDE_NEXT([stdio.h string.h]) diff --git a/include/openvswitch/automake.mk b/include/openvswitch/automake.mk index 699d9d74ecd0..74b31acfa66b 100644 --- a/include/openvswitch/automake.mk +++ b/include/openvswitch/automake.mk @@ -30,3 +30,17 @@ openvswitchinclude_HEADERS = \ include/openvswitch/version.h \ include/openvswitch/vconn.h \ include/openvswitch/vlog.h + +if HAVE_CXX +# OVS does not use C++ itself, but it provides public header files +# that a C++ compiler should accept, so when --enable-Werror is in +# effect and a C++ compiler is available, we build a C++ source file +# that #includes all the public headers, as a way to ensure that they +# are acceptable as C++. +noinst_LTLIBRARIES += include/openvswitch/libcxxtest.la +nodist_include_openvswitch_libcxxtest_la_SOURCES = include/openvswitch/cxxtest.cc +include/openvswitch/cxxtest.cc: include/openvswitch/automake.mk + $(AM_V_GEN)for header in $(openvswitchinclude_HEADERS); do \ + echo $$header; \ + done | sed 's,^include/\(.*\)$$,#include <\1>,' > $@ +endif diff --git a/m4/openvswitch.m4 b/m4/openvswitch.m4 index 648750ab5ad9..8a15a4a77dc2 100644 --- a/m4/openvswitch.m4 +++ b/m4/openvswitch.m4 @@ -620,3 +620,24 @@ AC_DEFUN([OVS_LIBTOOL_VERSIONS], AC_MSG_RESULT([libX-$OVS_MAJOR.$OVS_MINOR.so.$LT_CURRENT.0.$OVS_MICRO)]) AC_SUBST(OVS_LTINFO) ]) + +dnl OVS does not use C++ itself, but it provides public header files +dnl that a C++ compiler should accept, so when --enable-Werror is in +dnl effect and a C++ compiler is available, we enable building a C++ +dnl source file that #includes all the public headers, as a way to +dnl ensure that they are acceptable as C++. +AC_DEFUN([OVS_CHECK_CXX], + [AC_REQUIRE([AC_PROG_CXX]) + AC_REQUIRE([OVS_ENABLE_WERROR]) + if test $enable_Werror = yes; then + AC_LANG_PUSH([C++]) + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[#include <boost/static_assert.hpp> +]],)], + [enable_cxx=:], + [enable_cxx=false]) + AC_LANG_POP([C++]) + else + enable_cxx=false + fi + AM_CONDITIONAL([HAVE_CXX], [$enable_cxx])]) -- 2.10.2 _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev