diff options
author | Ben Pfaff <blp@nicira.com> | 2010-07-16 10:53:14 -0700 |
---|---|---|
committer | Ben Pfaff <blp@nicira.com> | 2010-07-21 15:47:09 -0700 |
commit | 480ce8abca4ae262a4148fe757aebe3e0ddba6f6 (patch) | |
tree | cea1143781be3a75aab5c02c516a22fc7ca3d546 /m4 | |
parent | 5136ce492c414f377f7be9ae32b259abb9f76580 (diff) |
vlog: Make the vlog module catalog program-specific.
Until now, the collection of vlog modules supported by a given OVS program
was not specific to that program. That means that, for example, even
though ovs-dpctl does not have anything to do with jsonrpc, it still has
a vlog module for it. This is confusing, at best.
This commit fixes the problem on some systems, in particular on ones that
use GCC and the GNU linker. It uses the feature of the GNU linker
described in its manual as:
If an orphaned section's name is representable as a C identifier then
the linker will automatically see PROVIDE two symbols: __start_SECNAME
and __end_SECNAME, where SECNAME is the name of the section. These
indicate the start address and end address of the orphaned section
respectively.
Systems that don't support these features retain the earlier behavior.
This commit also fixes the annoyance that modifying lib/vlog-modules.def
causes all sources files that #include "vlog.h" to recompile.
Diffstat (limited to 'm4')
-rw-r--r-- | m4/openvswitch.m4 | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/m4/openvswitch.m4 b/m4/openvswitch.m4 index 0b22f64e..6fb86099 100644 --- a/m4/openvswitch.m4 +++ b/m4/openvswitch.m4 @@ -347,3 +347,78 @@ AC_DEFUN([OVS_CHECK_OVSDBMONITOR], AC_MSG_CHECKING([whether to build ovsdbmonitor]) AC_MSG_RESULT([$BUILD_OVSDBMONITOR]) AM_CONDITIONAL([BUILD_OVSDBMONITOR], [test $BUILD_OVSDBMONITOR = yes])]) + +# OVS_LINK2_IFELSE(SOURCE1, SOURCE2, [ACTION-IF-TRUE], [ACTION-IF-FALSE]) +# ------------------------------------------------------------- +# Based on AC_LINK_IFELSE, but tries to link both SOURCE1 and SOURCE2 +# into a program. +# +# This macro is borrowed from acinclude.m4 in GNU PSPP, which has the +# following license: +# +# Copyright (C) 2005, 2006, 2007, 2009 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. +# +m4_define([OVS_LINK2_IFELSE], +[m4_ifvaln([$1], [AC_LANG_CONFTEST([$1])])dnl +mv conftest.$ac_ext conftest1.$ac_ext +m4_ifvaln([$2], [AC_LANG_CONFTEST([$2])])dnl +mv conftest.$ac_ext conftest2.$ac_ext +rm -f conftest1.$ac_objext conftest2.$ac_objext conftest$ac_exeext +ovs_link2='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest1.$ac_ext conftest2.$ac_ext $LIBS >&5' +AS_IF([_AC_DO_STDERR($ovs_link2) && { + test -z "$ac_[]_AC_LANG_ABBREV[]_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + AS_TEST_X([conftest$ac_exeext]) + }], + [$3], + [echo "$as_me: failed source file 1 of 2 was:" >&5 +sed 's/^/| /' conftest1.$ac_ext >&5 +echo "$as_me: failed source file 2 of 2 was:" >&5 +sed 's/^/| /' conftest2.$ac_ext >&5 + $4]) +dnl Delete also the IPA/IPO (Inter Procedural Analysis/Optimization) +dnl information created by the PGI compiler (conftest_ipa8_conftest.oo), +dnl as it would interfere with the next link command. +rm -rf conftest.dSYM conftest1.dSYM conftest2.dSYM +rm -f core conftest.err conftest1.err conftest2.err +rm -f conftest1.$ac_objext conftest2.$ac_objext conftest*_ipa8_conftest*.oo +rm -f conftest$ac_exeext +rm -f m4_ifval([$1], [conftest1.$ac_ext]) m4_ifval([$2], [conftest1.$ac_ext])[]dnl +])# OVS_LINK2_IFELSE + +dnl Defines USE_LINKER_SECTIONS to 1 if the compiler supports putting +dnl variables in sections with user-defined names and the linker +dnl automatically defines __start_SECNAME and __stop_SECNAME symbols +dnl that designate the start and end of the sections. +AC_DEFUN([OVS_CHECK_LINKER_SECTIONS], + [AC_CACHE_CHECK( + [for user-defined linker section support], + [ovs_cv_use_linker_sections], + [OVS_LINK2_IFELSE( + [AC_LANG_SOURCE( + [int a __attribute__((__section__("mysection"))) = 1; + int b __attribute__((__section__("mysection"))) = 2; + int c __attribute__((__section__("mysection"))) = 3;])], + [AC_LANG_PROGRAM( + [#include <stdio.h> + extern int __start_mysection; + extern int __stop_mysection;], + [int n_ints = &__stop_mysection - &__start_mysection; + int *i; + for (i = &__start_mysection; i < &__start_mysection + n_ints; i++) { + printf("%d\n", *i); + }])], + [ovs_cv_use_linker_sections=yes], + [ovs_cv_use_linker_sections=no])]) + if test $ovs_cv_use_linker_sections = yes; then + AC_DEFINE([USE_LINKER_SECTIONS], [1], + [Define to 1 if the compiler support putting variables + into sections with user-defined names and the linker + automatically defines __start_SECNAME and __stop_SECNAME + symbols that designate the start and end of the section.]) + fi]) |