r13898: Add a subsystem-specific DEFAULT_VISIBILITY property that can be used
authorJelmer Vernooij <jelmer@samba.org>
Mon, 6 Mar 2006 21:14:41 +0000 (21:14 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:52:20 +0000 (13:52 -0500)
to not export symbols when building shared libraries. Symbols that have to be
available to users of the library can be explicitly exported by
prepending them with _PUBLIC_ in the C source.
(This used to be commit ea9988dfda6df09f1ee8f9aea1dc5b96fff52ee6)

source4/build/m4/check_cc.m4
source4/build/smb_build/TODO
source4/build/smb_build/cflags.pm
source4/build/smb_build/config_mk.pm
source4/build/smb_build/input.pm
source4/build/smb_build/main.pl
source4/build/smb_build/output.pm
source4/lib/registry/config.mk
source4/script/mkproto.pl

index 219dc6ad37bbfcfbf880ba70d270865b6a3ae643..33bb7050afa9d185623d4a5a0d8e3c3967b51a8b 100644 (file)
@@ -39,15 +39,11 @@ AC_CACHE_CHECK([that the C compiler can precompile header files],samba_cv_precom
        dnl Check whether the compiler can generate precompiled headers
        touch conftest.h
        if ${CC-cc} conftest.h 2> /dev/null && test -f conftest.h.gch; then
-               samba_cv_precompiled_headers=yes
+               precompiled_headers=yes
        else
-               samba_cv_precompiled_headers=no
+               precompiled_headers=no
        fi])
-PCH_AVAILABLE="#"
-if test x"$samba_cv_precompiled_headers" = x"yes"; then
-       PCH_AVAILABLE=""
-fi
-AC_SUBST(PCH_AVAILABLE)
+AC_SUBST(precompiled_headers)
 
 
 dnl Check if the C compiler understands volatile (it should, being ANSI).
@@ -119,23 +115,19 @@ AC_TRY_RUN([#include "${srcdir-.}/build/tests/trivial.c"],
 #
 # Check if the compiler support ELF visibility for symbols
 #
-if test x"$GCC" = x"yes" ; then
-    AX_CFLAGS_GCC_OPTION([-fvisibility=hidden], VISIBILITY_CFLAGS)
-fi
-if test -n "$VISIBILITY_CFLAGS"; then
-       OLD_CFLAGS="${CFLAGS}"
-       CFLAGS="${CFLAGS} ${VISIBILITY_CFLAGS}"
-       AC_MSG_CHECKING([whether the C compiler supports the visibility attribute])
-       AC_TRY_RUN([
+visibility_attribute=no
+AC_MSG_CHECKING([whether the C compiler supports the visibility attribute])
+AC_TRY_RUN([
 #pragma GCC visibility push(hidden)
 void vis_foo1(void) {}
 __attribute__((visibility("default"))) void vis_foo2(void) {}
 #include "${srcdir-.}/build/tests/trivial.c"
-], [AC_MSG_RESULT(yes);
-AC_DEFINE(HAVE_VISIBILITY_ATTR,1,[Whether the C compiler supports the visibility attribute])], 
-[AC_MSG_RESULT(no);VISIBILITY_CFLAGS=""])
-       CFLAGS="${OLD_CFLAGS}"
-fi
+], [
+       AC_MSG_RESULT(yes)
+       AC_DEFINE(HAVE_VISIBILITY_ATTR,1,[Whether the C compiler supports the visibility attribute])
+       visibility_attribute=yes
+], [AC_MSG_RESULT(no);])
+AC_SUBST(visibility_attribute)
 
 #
 # Check if the compiler can handle the options we selected by
index 0657eb2bc8ddd3dbd04f565d950d520367ebe663..ca057cd5438760f1716663236df6da36577e35b9 100644 (file)
@@ -1,11 +1,6 @@
-- split up proto.h into headers with public or private prototypes. 
-  Public prototypes can be marked with _PUBLIC_ in the source
-   - get rid of include/structs.h
-- install Samba-specific headers in $INCLUDEDIR/samba-4.0. talloc.h, tdb.h and 
-       ldb.h belong in $INCLUDEDIR
+- get rid of include/structs.h
 - add register function to smbtorture
 - install shared modules
 - improve (un)install scripts (rewrite in perl?)
 - proper #include dependencies
 - determine dependencies from #include lines ?
-- clean up include/smb.h
index a19c0efa7b31535b904423ef6dbdcc1b2205e4c5..2cf64538415ae6c804bdefe8363c99fbec76b860 100755 (executable)
@@ -15,6 +15,7 @@ sub create_cflags($$)
        foreach my $key (values %{$CTX}) {
                next unless defined ($key->{OBJ_LIST});
                next unless defined ($key->{EXTRA_CFLAGS});
+               next if ($key->{EXTRA_CFLAGS} eq "");
 
                foreach (@{$key->{OBJ_LIST}}) {
                        print CFLAGS_TXT "$_: $key->{EXTRA_CFLAGS}\n";
index 56960f044c6646c9977141a87805c4342b3c8039..d9e2cd31b77497fb03e0cc62ef6a8ea04ef789bd 100644 (file)
@@ -35,6 +35,8 @@ my $section_types = {
                "PUBLIC_HEADERS"        => "list",
 
                "EXTRA_CFLAGS"          => "string",
+
+               "DEFAULT_VISIBILITY" => "string"
                },
        "MODULE" => {
                "SUBSYSTEM"             => "string",
@@ -92,7 +94,9 @@ my $section_types = {
                "PUBLIC_PROTO_HEADER"   => "string",
                "PRIVATE_PROTO_HEADER"  => "string",
 
-               "EXTRA_CFLAGS"          => "string"
+               "EXTRA_CFLAGS"          => "string",
+
+               "DEFAULT_VISIBILITY" => "string"
                }
 };
 
index fbeeddcda134706f33571c6d9c7d6389a075e358..0499d625652da00c7d3af54b2d69f6ebf2e875f2 100644 (file)
@@ -154,6 +154,14 @@ sub check($$$$$)
                if (defined($part->{PRIVATE_PROTO_HEADER})) {
                        $part->{NOPROTO} = "YES";
                }
+
+               unless (defined($part->{DEFAULT_VISIBILITY})) {
+                       $part->{DEFAULT_VISIBILITY} = "default";
+               }
+
+               unless (defined($part->{EXTRA_CFLAGS})) {
+                       $part->{EXTRA_CFLAGS} = "";
+               }
                
                if (defined($part->{PUBLIC_PROTO_HEADER})) {
                        $part->{NOPROTO} = "YES";
index a47899a3a538f242d1c1cd089ce35b45b590b08e..83befe7c678845468ba30c353e57fb7a213f3ac6 100644 (file)
@@ -57,7 +57,7 @@ if (defined($ENV{"MODULE_OUTPUT_TYPE"})) {
 
 my $DEPEND = smb_build::input::check($INPUT, \%config::enabled, 
        $subsystem_output_type, $library_output_type, $module_output_type);
-my $OUTPUT = output::create_output($DEPEND);
+my $OUTPUT = output::create_output($DEPEND, \%config::config);
 $config::config{SUBSYSTEM_OUTPUT_TYPE} = $subsystem_output_type;
 $config::config{LIBRARY_OUTPUT_TYPE} = $library_output_type;
 $config::config{MODULE_OUTPUT_TYPE} = $module_output_type;
index 2fa8e0207a9808a6d3248d1def525190933dc9ba..6b3753aa9faedaf69fd2935c3c9904bd151b95a6 100644 (file)
@@ -92,9 +92,9 @@ sub generate_binary($)
        $bin->{BINARY} = $bin->{NAME};
 }
 
-sub create_output($)
+sub create_output($$)
 {
-       my $depend = shift;
+       my ($depend, $config) = @_;
        my $part;
 
        foreach $part (values %{$depend}) {
@@ -111,6 +111,11 @@ sub create_output($)
                        $part->{OUTPUT_TYPE} = "OBJLIST";
                }
 
+               if ($part->{DEFAULT_VISIBILITY} ne "default" and 
+                       $config->{visibility_attribute} eq "yes") {
+                       $part->{EXTRA_CFLAGS} .= " -fvisibility=$part->{DEFAULT_VISIBILITY}";
+               }
+
                generate_binary($part) if $part->{OUTPUT_TYPE} eq "BINARY";
                generate_mergedobj($part) if $part->{OUTPUT_TYPE} eq "MERGEDOBJ";
                generate_objlist($part) if $part->{OUTPUT_TYPE} eq "OBJLIST";
index a977e0ea5c9ac7fd45ccc7d14761497df9e9bfbb..82309ad470107c1ced36eb5b9aae0ffaf9157242 100644 (file)
@@ -82,6 +82,7 @@ REQUIRED_SUBSYSTEMS = \
 ################################################
 # Start SUBSYSTEM REGISTRY
 [LIBRARY::REGISTRY]
+DEFAULT_VISIBILITY = hidden
 MAJOR_VERSION = 0
 MINOR_VERSION = 0
 DESCRIPTION = Windows-style registry library
index 9939fe0bf7cfdd1bf3c749bf314b5dca908dd78d..1fca294d97fcdbd6d7c5d5f327a87b4a9234485c 100755 (executable)
@@ -133,7 +133,7 @@ sub process_file($$$)
 
                next if ($line =~ /^\/|[;]/);
 
-               if ($line =~ s/^_PUBLIC_[\t ]/extern /) {
+               if ($line =~ /^_PUBLIC_[\t ]/) {
                        $target = $public_file;
                        $is_public = 1;
                }