On Wed, Dec 11, 2013 at 3:04 PM, Ben Pfaff <[email protected]> wrote: > This will be used for the #include_next in string.h in the following > commit. > > Signed-off-by: Ben Pfaff <[email protected]> > --- > NOTICE | 5 +- > build-aux/.gitignore | 2 + > debian/copyright.in | 10 ++- > m4/absolute-header.m4 | 102 ++++++++++++++++++++++ > m4/include_next.m4 | 223 > +++++++++++++++++++++++++++++++++++++++++++++++++ > m4/openvswitch.m4 | 5 ++ > 6 files changed, 345 insertions(+), 2 deletions(-) > create mode 100644 m4/absolute-header.m4 > create mode 100644 m4/include_next.m4 I get the following error after a 'make': The distribution is missing the following files: m4/absolute-header.m4 m4/include_next.m4 make[2]: *** [dist-hook-git] Error 1 make[2]: Leaving directory `/root/git/test' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/root/git/test' make: *** [all] Error 2
The above problem goes away after adding the second patch though. I did not review the included files from external sources, otherwise looks good. > > diff --git a/NOTICE b/NOTICE > index dafd25f..7a3d660 100644 > --- a/NOTICE > +++ b/NOTICE > @@ -2,7 +2,7 @@ This file is included in compliance with the Apache 2.0 > license, > available at http://www.apache.org/licenses/LICENSE-2.0.html > > Open vSwitch > -Copyright (c) 2007, 2008, 2009, 2010, 2011 Nicira, Inc. > +Copyright (c) 2007, 2008, 2009, 2010, 2011, 2013 Nicira, Inc. > > Open vSwitch BSD port > Copyright (c) 2011 Gaetano Catalli > @@ -19,3 +19,6 @@ Illinois at Urbana-Champaign. > > lib/ovs.tmac includes troff macros written by Eric S. Raymond > and Werner Lemberg. > + > +m4/include_next.m4 and m4/absolute-header.m4 > +Copyright (C) 2006-2013 Free Software Foundation, Inc. > diff --git a/build-aux/.gitignore b/build-aux/.gitignore > index 999eae2..3cb4071 100644 > --- a/build-aux/.gitignore > +++ b/build-aux/.gitignore > @@ -1,4 +1,6 @@ > /compile > +/config.guess > +/config.sub > /depcomp > /install-sh > /missing > diff --git a/debian/copyright.in b/debian/copyright.in > index 986f7a1..0676387 100644 > --- a/debian/copyright.in > +++ b/debian/copyright.in > @@ -8,7 +8,7 @@ Upstream Authors (from AUTHORS): > > Upstream Copyright Holders: > > - Copyright (c) 2007, 2008, 2009, 2010, 2011, 2012 Nicira, Inc. > + Copyright (c) 2007, 2008, 2009, 2010, 2011, 2012, 2013 Nicira, Inc. > Copyright (c) 2010 Jean Tourrilhes - HP-Labs. > Copyright (c) 2008,2009,2010 Citrix Systems, Inc. > and authors listed above. > @@ -182,6 +182,14 @@ License: > .\" Copyright (C) 2007, 2009, 2011 Free Software Foundation, Inc. > .\" You may freely use, modify and/or distribute this file. > > +* m4/absolute-header.m4, by Derek Price, and m4/include_next.m4, by > + Paul Eggert and Derek Price bear the following notices: > + > + Copyright (C) 2006-2013 Free Software Foundation, Inc. > + This file is free software; the Free Software Foundation > + gives unlimited permission to copy and/or distribute it, > + with or without modifications, as long as this notice is preserved. > + > * All other components of this package are licensed under > The Apache License Version 2.0. > > diff --git a/m4/absolute-header.m4 b/m4/absolute-header.m4 > new file mode 100644 > index 0000000..89ff5be > --- /dev/null > +++ b/m4/absolute-header.m4 > @@ -0,0 +1,102 @@ > +# absolute-header.m4 serial 16 > +dnl Copyright (C) 2006-2013 Free Software Foundation, Inc. > +dnl This file is free software; the Free Software Foundation > +dnl gives unlimited permission to copy and/or distribute it, > +dnl with or without modifications, as long as this notice is preserved. > + > +dnl From Derek Price. > + > +# gl_ABSOLUTE_HEADER(HEADER1 HEADER2 ...) > +# --------------------------------------- > +# Find the absolute name of a header file, testing first if the header > exists. > +# If the header were sys/inttypes.h, this macro would define > +# ABSOLUTE_SYS_INTTYPES_H to the '""' quoted absolute name of sys/inttypes.h > +# in config.h > +# (e.g. '#define ABSOLUTE_SYS_INTTYPES_H "///usr/include/sys/inttypes.h"'). > +# The three "///" are to pacify Sun C 5.8, which otherwise would say > +# "warning: #include of /usr/include/... may be non-portable". > +# Use '""', not '<>', so that the /// cannot be confused with a C99 comment. > +# Note: This macro assumes that the header file is not empty after > +# preprocessing, i.e. it does not only define preprocessor macros but also > +# provides some type/enum definitions or function/variable declarations. > +AC_DEFUN([gl_ABSOLUTE_HEADER], > +[AC_REQUIRE([AC_CANONICAL_HOST]) > +AC_LANG_PREPROC_REQUIRE()dnl > +dnl FIXME: gl_absolute_header and ac_header_exists must be used unquoted > +dnl until we can assume autoconf 2.64 or newer. > +m4_foreach_w([gl_HEADER_NAME], [$1], > + [AS_VAR_PUSHDEF([gl_absolute_header], > + [gl_cv_absolute_]m4_defn([gl_HEADER_NAME]))dnl > + AC_CACHE_CHECK([absolute name of <]m4_defn([gl_HEADER_NAME])[>], > + m4_defn([gl_absolute_header]), > + [AS_VAR_PUSHDEF([ac_header_exists], > + [ac_cv_header_]m4_defn([gl_HEADER_NAME]))dnl > + AC_CHECK_HEADERS_ONCE(m4_defn([gl_HEADER_NAME]))dnl > + if test AS_VAR_GET(ac_header_exists) = yes; then > + gl_ABSOLUTE_HEADER_ONE(m4_defn([gl_HEADER_NAME])) > + fi > + AS_VAR_POPDEF([ac_header_exists])dnl > + ])dnl > + AC_DEFINE_UNQUOTED(AS_TR_CPP([ABSOLUTE_]m4_defn([gl_HEADER_NAME])), > + ["AS_VAR_GET(gl_absolute_header)"], > + [Define this to an absolute name of > <]m4_defn([gl_HEADER_NAME])[>.]) > + AS_VAR_POPDEF([gl_absolute_header])dnl > +])dnl > +])# gl_ABSOLUTE_HEADER > + > +# gl_ABSOLUTE_HEADER_ONE(HEADER) > +# ------------------------------ > +# Like gl_ABSOLUTE_HEADER, except that: > +# - it assumes that the header exists, > +# - it uses the current CPPFLAGS, > +# - it does not cache the result, > +# - it is silent. > +AC_DEFUN([gl_ABSOLUTE_HEADER_ONE], > +[ > + AC_REQUIRE([AC_CANONICAL_HOST]) > + AC_LANG_CONFTEST([AC_LANG_SOURCE([[#include <]]m4_dquote([$1])[[>]])]) > + dnl AIX "xlc -E" and "cc -E" omit #line directives for header files > + dnl that contain only a #include of other header files and no > + dnl non-comment tokens of their own. This leads to a failure to > + dnl detect the absolute name of <dirent.h>, <signal.h>, <poll.h> > + dnl and others. The workaround is to force preservation of comments > + dnl through option -C. This ensures all necessary #line directives > + dnl are present. GCC supports option -C as well. > + case "$host_os" in > + aix*) gl_absname_cpp="$ac_cpp -C" ;; > + *) gl_absname_cpp="$ac_cpp" ;; > + esac > +changequote(,) > + case "$host_os" in > + mingw*) > + dnl For the sake of native Windows compilers (excluding gcc), > + dnl treat backslash as a directory separator, like /. > + dnl Actually, these compilers use a double-backslash as > + dnl directory separator, inside the > + dnl # line "filename" > + dnl directives. > + gl_dirsep_regex='[/\\]' > + ;; > + *) > + gl_dirsep_regex='\/' > + ;; > + esac > + dnl A sed expression that turns a string into a basic regular > + dnl expression, for use within "/.../". > + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' > + gl_header_literal_regex=`echo '$1' \ > + | sed -e "$gl_make_literal_regex_sed"` > + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ > + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ > + s|^/[^/]|//&| > + p > + q > + }' > +changequote([,]) > + dnl eval is necessary to expand gl_absname_cpp. > + dnl Ultrix and Pyramid sh refuse to redirect output of eval, > + dnl so use subshell. > + AS_VAR_SET([gl_cv_absolute_]AS_TR_SH([[$1]]), > +[`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD | > + sed -n "$gl_absolute_header_sed"`]) > +]) > diff --git a/m4/include_next.m4 b/m4/include_next.m4 > new file mode 100644 > index 0000000..f09dbe6 > --- /dev/null > +++ b/m4/include_next.m4 > @@ -0,0 +1,223 @@ > +# include_next.m4 serial 23 > +dnl Copyright (C) 2006-2013 Free Software Foundation, Inc. > +dnl This file is free software; the Free Software Foundation > +dnl gives unlimited permission to copy and/or distribute it, > +dnl with or without modifications, as long as this notice is preserved. > + > +dnl From Paul Eggert and Derek Price. > + > +dnl Sets INCLUDE_NEXT and PRAGMA_SYSTEM_HEADER. > +dnl > +dnl INCLUDE_NEXT expands to 'include_next' if the compiler supports it, or to > +dnl 'include' otherwise. > +dnl > +dnl INCLUDE_NEXT_AS_FIRST_DIRECTIVE expands to 'include_next' if the compiler > +dnl supports it in the special case that it is the first include directive in > +dnl the given file, or to 'include' otherwise. > +dnl > +dnl PRAGMA_SYSTEM_HEADER can be used in files that contain #include_next, > +dnl so as to avoid GCC warnings when the gcc option -pedantic is used. > +dnl '#pragma GCC system_header' has the same effect as if the file was found > +dnl through the include search path specified with '-isystem' options (as > +dnl opposed to the search path specified with '-I' options). Namely, gcc > +dnl does not warn about some things, and on some systems (Solaris and > Interix) > +dnl __STDC__ evaluates to 0 instead of to 1. The latter is an undesired side > +dnl effect; we are therefore careful to use 'defined __STDC__' or '1' instead > +dnl of plain '__STDC__'. > +dnl > +dnl PRAGMA_COLUMNS can be used in files that override system header files, so > +dnl as to avoid compilation errors on HP NonStop systems when the gnulib file > +dnl is included by a system header file that does a "#pragma COLUMNS 80" > (which > +dnl has the effect of truncating the lines of that file and all files that it > +dnl includes to 80 columns) and the gnulib file has lines longer than 80 > +dnl columns. > + > +AC_DEFUN([gl_INCLUDE_NEXT], > +[ > + AC_LANG_PREPROC_REQUIRE() > + AC_CACHE_CHECK([whether the preprocessor supports include_next], > + [gl_cv_have_include_next], > + [rm -rf conftestd1a conftestd1b conftestd2 > + mkdir conftestd1a conftestd1b conftestd2 > + dnl IBM C 9.0, 10.1 (original versions, prior to the 2009-01 updates) on > + dnl AIX 6.1 support include_next when used as first preprocessor > directive > + dnl in a file, but not when preceded by another include directive. Check > + dnl for this bug by including <stdio.h>. > + dnl Additionally, with this same compiler, include_next is a no-op when > + dnl used in a header file that was included by specifying its absolute > + dnl file name. Despite these two bugs, include_next is used in the > + dnl compiler's <math.h>. By virtue of the second bug, we need to use > + dnl include_next as well in this case. > + cat <<EOF > conftestd1a/conftest.h > +#define DEFINED_IN_CONFTESTD1 > +#include_next <conftest.h> > +#ifdef DEFINED_IN_CONFTESTD2 > +int foo; > +#else > +#error "include_next doesn't work" > +#endif > +EOF > + cat <<EOF > conftestd1b/conftest.h > +#define DEFINED_IN_CONFTESTD1 > +#include <stdio.h> > +#include_next <conftest.h> > +#ifdef DEFINED_IN_CONFTESTD2 > +int foo; > +#else > +#error "include_next doesn't work" > +#endif > +EOF > + cat <<EOF > conftestd2/conftest.h > +#ifndef DEFINED_IN_CONFTESTD1 > +#error "include_next test doesn't work" > +#endif > +#define DEFINED_IN_CONFTESTD2 > +EOF > + gl_save_CPPFLAGS="$CPPFLAGS" > + CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1b -Iconftestd2" > +dnl We intentionally avoid using AC_LANG_SOURCE here. > + AC_COMPILE_IFELSE([AC_LANG_DEFINES_PROVIDED[#include <conftest.h>]], > + [gl_cv_have_include_next=yes], > + [CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1a -Iconftestd2" > + AC_COMPILE_IFELSE([AC_LANG_DEFINES_PROVIDED[#include <conftest.h>]], > + [gl_cv_have_include_next=buggy], > + [gl_cv_have_include_next=no]) > + ]) > + CPPFLAGS="$gl_save_CPPFLAGS" > + rm -rf conftestd1a conftestd1b conftestd2 > + ]) > + PRAGMA_SYSTEM_HEADER= > + if test $gl_cv_have_include_next = yes; then > + INCLUDE_NEXT=include_next > + INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next > + if test -n "$GCC"; then > + PRAGMA_SYSTEM_HEADER='#pragma GCC system_header' > + fi > + else > + if test $gl_cv_have_include_next = buggy; then > + INCLUDE_NEXT=include > + INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next > + else > + INCLUDE_NEXT=include > + INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include > + fi > + fi > + AC_SUBST([INCLUDE_NEXT]) > + AC_SUBST([INCLUDE_NEXT_AS_FIRST_DIRECTIVE]) > + AC_SUBST([PRAGMA_SYSTEM_HEADER]) > + AC_CACHE_CHECK([whether system header files limit the line length], > + [gl_cv_pragma_columns], > + [dnl HP NonStop systems, which define __TANDEM, have this misfeature. > + AC_EGREP_CPP([choke me], > + [ > +#ifdef __TANDEM > +choke me > +#endif > + ], > + [gl_cv_pragma_columns=yes], > + [gl_cv_pragma_columns=no]) > + ]) > + if test $gl_cv_pragma_columns = yes; then > + PRAGMA_COLUMNS="#pragma COLUMNS 10000" > + else > + PRAGMA_COLUMNS= > + fi > + AC_SUBST([PRAGMA_COLUMNS]) > +]) > + > +# gl_CHECK_NEXT_HEADERS(HEADER1 HEADER2 ...) > +# ------------------------------------------ > +# For each arg foo.h, if #include_next works, define NEXT_FOO_H to be > +# '<foo.h>'; otherwise define it to be > +# '"///usr/include/foo.h"', or whatever other absolute file name is suitable. > +# Also, if #include_next works as first preprocessing directive in a file, > +# define NEXT_AS_FIRST_DIRECTIVE_FOO_H to be '<foo.h>'; otherwise define it > to > +# be > +# '"///usr/include/foo.h"', or whatever other absolute file name is suitable. > +# That way, a header file with the following line: > +# #@INCLUDE_NEXT@ @NEXT_FOO_H@ > +# or > +# #@INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ @NEXT_AS_FIRST_DIRECTIVE_FOO_H@ > +# behaves (after sed substitution) as if it contained > +# #include_next <foo.h> > +# even if the compiler does not support include_next. > +# The three "///" are to pacify Sun C 5.8, which otherwise would say > +# "warning: #include of /usr/include/... may be non-portable". > +# Use '""', not '<>', so that the /// cannot be confused with a C99 comment. > +# Note: This macro assumes that the header file is not empty after > +# preprocessing, i.e. it does not only define preprocessor macros but also > +# provides some type/enum definitions or function/variable declarations. > +# > +# This macro also checks whether each header exists, by invoking > +# AC_CHECK_HEADERS_ONCE or AC_CHECK_HEADERS on each argument. > +AC_DEFUN([gl_CHECK_NEXT_HEADERS], > +[ > + gl_NEXT_HEADERS_INTERNAL([$1], [check]) > +]) > + > +# gl_NEXT_HEADERS(HEADER1 HEADER2 ...) > +# ------------------------------------ > +# Like gl_CHECK_NEXT_HEADERS, except do not check whether the headers exist. > +# This is suitable for headers like <stddef.h> that are standardized by C89 > +# and therefore can be assumed to exist. > +AC_DEFUN([gl_NEXT_HEADERS], > +[ > + gl_NEXT_HEADERS_INTERNAL([$1], [assume]) > +]) > + > +# The guts of gl_CHECK_NEXT_HEADERS and gl_NEXT_HEADERS. > +AC_DEFUN([gl_NEXT_HEADERS_INTERNAL], > +[ > + AC_REQUIRE([gl_INCLUDE_NEXT]) > + AC_REQUIRE([AC_CANONICAL_HOST]) > + > + m4_if([$2], [check], > + [AC_CHECK_HEADERS_ONCE([$1]) > + ]) > + > +dnl FIXME: gl_next_header and gl_header_exists must be used unquoted > +dnl until we can assume autoconf 2.64 or newer. > + m4_foreach_w([gl_HEADER_NAME], [$1], > + [AS_VAR_PUSHDEF([gl_next_header], > + [gl_cv_next_]m4_defn([gl_HEADER_NAME])) > + if test $gl_cv_have_include_next = yes; then > + AS_VAR_SET(gl_next_header, ['<'gl_HEADER_NAME'>']) > + else > + AC_CACHE_CHECK( > + [absolute name of <]m4_defn([gl_HEADER_NAME])[>], > + m4_defn([gl_next_header]), > + [m4_if([$2], [check], > + [AS_VAR_PUSHDEF([gl_header_exists], > + [ac_cv_header_]m4_defn([gl_HEADER_NAME])) > + if test AS_VAR_GET(gl_header_exists) = yes; then > + AS_VAR_POPDEF([gl_header_exists]) > + ]) > + gl_ABSOLUTE_HEADER_ONE(gl_HEADER_NAME) > + AS_VAR_COPY([gl_header], > [gl_cv_absolute_]AS_TR_SH(gl_HEADER_NAME)) > + AS_VAR_SET(gl_next_header, ['"'$gl_header'"']) > + m4_if([$2], [check], > + [else > + AS_VAR_SET(gl_next_header, ['<'gl_HEADER_NAME'>']) > + fi > + ]) > + ]) > + fi > + AC_SUBST( > + AS_TR_CPP([NEXT_]m4_defn([gl_HEADER_NAME])), > + [AS_VAR_GET(gl_next_header)]) > + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next > = buggy; then > + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' > + gl_next_as_first_directive='<'gl_HEADER_NAME'>' > + else > + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' > + gl_next_as_first_directive=AS_VAR_GET(gl_next_header) > + fi > + AC_SUBST( > + AS_TR_CPP([NEXT_AS_FIRST_DIRECTIVE_]m4_defn([gl_HEADER_NAME])), > + [$gl_next_as_first_directive]) > + AS_VAR_POPDEF([gl_next_header])]) > +]) > + > +# Autoconf 2.68 added warnings for our use of AC_COMPILE_IFELSE; > +# this fallback is safe for all earlier autoconf versions. > +m4_define_default([AC_LANG_DEFINES_PROVIDED]) > diff --git a/m4/openvswitch.m4 b/m4/openvswitch.m4 > index e7281ad..02d473e 100644 > --- a/m4/openvswitch.m4 > +++ b/m4/openvswitch.m4 > @@ -535,3 +535,8 @@ dnl OVS_CHECK_POSIX_AIO > AC_DEFUN([OVS_CHECK_POSIX_AIO], > [AC_SEARCH_LIBS([aio_write], [rt]) > AM_CONDITIONAL([HAVE_POSIX_AIO], [test "$ac_cv_search_aio_write" != no])]) > + > +dnl OVS_CHECK_INCLUDE_NEXT > +AC_DEFUN([OVS_CHECK_INCLUDE_NEXT], > + [AC_REQUIRE([gl_CHECK_NEXT_HEADERS]) > + gl_CHECK_NEXT_HEADERS([$1])]) > -- > 1.7.10.4 > > _______________________________________________ > dev mailing list > [email protected] > http://openvswitch.org/mailman/listinfo/dev _______________________________________________ dev mailing list [email protected] http://openvswitch.org/mailman/listinfo/dev
