summaryrefslogtreecommitdiffstats
path: root/source4/build
diff options
context:
space:
mode:
authorJelmer Vernooij <jelmer@samba.org>2006-03-06 21:14:41 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 13:52:20 -0500
commitce3032cab82fd66ddfd4d55d7cc242aff80be161 (patch)
tree7a13b9a20a34ef79c17abc38cc9752149d94a5fc /source4/build
parent148403594be03ab0ca8e396ef22cd01ef19921d5 (diff)
downloadsamba-ce3032cab82fd66ddfd4d55d7cc242aff80be161.tar.gz
samba-ce3032cab82fd66ddfd4d55d7cc242aff80be161.tar.xz
samba-ce3032cab82fd66ddfd4d55d7cc242aff80be161.zip
r13898: Add a subsystem-specific DEFAULT_VISIBILITY property that can be used
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)
Diffstat (limited to 'source4/build')
-rw-r--r--source4/build/m4/check_cc.m432
-rw-r--r--source4/build/smb_build/TODO7
-rwxr-xr-xsource4/build/smb_build/cflags.pm1
-rw-r--r--source4/build/smb_build/config_mk.pm6
-rw-r--r--source4/build/smb_build/input.pm8
-rw-r--r--source4/build/smb_build/main.pl2
-rw-r--r--source4/build/smb_build/output.pm9
7 files changed, 35 insertions, 30 deletions
diff --git a/source4/build/m4/check_cc.m4 b/source4/build/m4/check_cc.m4
index 219dc6ad37b..33bb7050afa 100644
--- a/source4/build/m4/check_cc.m4
+++ b/source4/build/m4/check_cc.m4
@@ -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
diff --git a/source4/build/smb_build/TODO b/source4/build/smb_build/TODO
index 0657eb2bc8d..ca057cd5438 100644
--- a/source4/build/smb_build/TODO
+++ b/source4/build/smb_build/TODO
@@ -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
diff --git a/source4/build/smb_build/cflags.pm b/source4/build/smb_build/cflags.pm
index a19c0efa7b3..2cf64538415 100755
--- a/source4/build/smb_build/cflags.pm
+++ b/source4/build/smb_build/cflags.pm
@@ -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";
diff --git a/source4/build/smb_build/config_mk.pm b/source4/build/smb_build/config_mk.pm
index 56960f044c6..d9e2cd31b77 100644
--- a/source4/build/smb_build/config_mk.pm
+++ b/source4/build/smb_build/config_mk.pm
@@ -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"
}
};
diff --git a/source4/build/smb_build/input.pm b/source4/build/smb_build/input.pm
index fbeeddcda13..0499d625652 100644
--- a/source4/build/smb_build/input.pm
+++ b/source4/build/smb_build/input.pm
@@ -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";
diff --git a/source4/build/smb_build/main.pl b/source4/build/smb_build/main.pl
index a47899a3a53..83befe7c678 100644
--- a/source4/build/smb_build/main.pl
+++ b/source4/build/smb_build/main.pl
@@ -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;
diff --git a/source4/build/smb_build/output.pm b/source4/build/smb_build/output.pm
index 2fa8e0207a9..6b3753aa9fa 100644
--- a/source4/build/smb_build/output.pm
+++ b/source4/build/smb_build/output.pm
@@ -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";