summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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
-rw-r--r--source4/lib/registry/config.mk1
-rwxr-xr-xsource4/script/mkproto.pl2
9 files changed, 37 insertions, 31 deletions
diff --git a/source4/build/m4/check_cc.m4 b/source4/build/m4/check_cc.m4
index 219dc6ad37..33bb7050af 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 0657eb2bc8..ca057cd543 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 a19c0efa7b..2cf6453841 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 56960f044c..d9e2cd31b7 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 fbeeddcda1..0499d62565 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 a47899a3a5..83befe7c67 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 2fa8e0207a..6b3753aa9f 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";
diff --git a/source4/lib/registry/config.mk b/source4/lib/registry/config.mk
index a977e0ea5c..82309ad470 100644
--- a/source4/lib/registry/config.mk
+++ b/source4/lib/registry/config.mk
@@ -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
diff --git a/source4/script/mkproto.pl b/source4/script/mkproto.pl
index 9939fe0bf7..1fca294d97 100755
--- a/source4/script/mkproto.pl
+++ b/source4/script/mkproto.pl
@@ -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;
}