Merge branch 'v4-0-test' of ssh://git.samba.org/data/git/samba into v4-0-gmake3
authorJelmer Vernooij <jelmer@samba.org>
Mon, 25 Feb 2008 11:58:09 +0000 (12:58 +0100)
committerJelmer Vernooij <jelmer@samba.org>
Mon, 25 Feb 2008 11:58:09 +0000 (12:58 +0100)
Conflicts:

source/build/smb_build/header.pm
source/build/smb_build/makefile.pm
source/lib/ldb/include/ldb_private.h
(This used to be commit 1a646af0647f021d99473a8991c35e616a423ea6)

1  2 
source4/build/smb_build/input.pm
source4/build/smb_build/makefile.pm
source4/lib/ldb/common/ldb_modules.c

index 9aef1c10021fc0b09b4fe038e40d45c7f926b5f1,8c9a6efacc3d7f79bb2ea0f4dccfdbf30a556f3c..a8dd573744cc905deaae2bd11ac704511dd53898
@@@ -233,14 -233,6 +233,6 @@@ sub check($$$$$
        my ($INPUT, $enabled, $subsys_ot, $lib_ot, $module_ot) = @_;
  
        foreach my $part (values %$INPUT) {
-               unless (defined($part->{STANDARD_VISIBILITY})) {
-                       if ($part->{TYPE} eq "MODULE" or $part->{TYPE} eq "BINARY") {
-                               $part->{STANDARD_VISIBILITY} = "hidden";
-                       } else {
-                               $part->{STANDARD_VISIBILITY} = "default";
-                       }
-               }
                unless (defined($part->{PUBLIC_HEADERS})) {
                        $part->{PUBLIC_HEADERS} = [];
                }
  
        foreach my $part (values %$INPUT) {
                $part->{LINK_FLAGS} = [];
 -              $part->{FULL_OBJ_LIST} = ["\$($part->{NAME}_OBJ_LIST)"];
  
                if ($part->{TYPE} eq "SUBSYSTEM") { 
                        check_subsystem($INPUT, $part, $subsys_ot);
index 8a99848437063d3b22eaa8f618a47dd1372b28ec,17474db00ecdabade885b1976e445f21e0548a35..23caec083fe5134a724c00996d76a75cd9edf0da
@@@ -21,6 -21,17 +21,6 @@@ sub new($$$
        
        bless($self, $myname);
  
 -      $self->{manpages} = [];
 -      $self->{sbin_progs} = [];
 -      $self->{bin_progs} = [];
 -      $self->{static_libs} = [];
 -      $self->{python_dsos} = [];
 -      $self->{python_pys} = [];
 -      $self->{shared_libs} = [];
 -      $self->{headers} = [];
 -      $self->{plugins} = [];
 -      $self->{pc_files} = [];
 -      $self->{proto_headers} = [];
        $self->{output} = "";
  
        $self->{mkfile} = $mkfile;
@@@ -112,19 -123,23 +112,19 @@@ sub SharedModule($$
  {
        my ($self,$ctx) = @_;
  
 -      my $init_obj = "";
 -
        my $sane_subsystem = lc($ctx->{SUBSYSTEM});
        $sane_subsystem =~ s/^lib//;
        
        if ($ctx->{TYPE} eq "PYTHON") {
 -              push (@{$self->{python_dsos}}, 
 -                      "$ctx->{SHAREDDIR}/$ctx->{LIBRARY_REALNAME}");
 +              $self->output("PYTHON_DSOS += $ctx->{SHAREDDIR}/$ctx->{LIBRARY_REALNAME}\n");
        } else {
 -              push (@{$self->{plugins}}, "$ctx->{SHAREDDIR}/$ctx->{LIBRARY_REALNAME}");
 +              $self->output("PLUGINS += $ctx->{SHAREDDIR}/$ctx->{LIBRARY_REALNAME}\n");
                $self->output("installplugins:: $ctx->{SHAREDDIR}/$ctx->{LIBRARY_REALNAME}\n");
                $self->output("\t\@echo Installing $ctx->{SHAREDDIR}/$ctx->{LIBRARY_REALNAME} as \$(DESTDIR)\$(modulesdir)/$sane_subsystem/$ctx->{LIBRARY_REALNAME}\n");
                $self->output("\t\@mkdir -p \$(DESTDIR)\$(modulesdir)/$sane_subsystem/\n");
                $self->output("\t\@cp $ctx->{SHAREDDIR}/$ctx->{LIBRARY_REALNAME} \$(DESTDIR)\$(modulesdir)/$sane_subsystem/$ctx->{LIBRARY_REALNAME}\n");
                if (defined($ctx->{ALIASES})) {
                        foreach (@{$ctx->{ALIASES}}) {
 -                              $self->output("\t\@rm -f \$(DESTDIR)\$(modulesdir)/$sane_subsystem/$_.\$(SHLIBEXT)\n");
                                $self->output("\t\@ln -fs $ctx->{LIBRARY_REALNAME} \$(DESTDIR)\$(modulesdir)/$sane_subsystem/$_.\$(SHLIBEXT)\n");
                        }
                }
        $self->_prepare_list($ctx, "DEPEND_LIST");
        $self->_prepare_list($ctx, "LINK_FLAGS");
  
-       if (defined($ctx->{INIT_FUNCTION}) and $ctx->{TYPE} ne "PYTHON") {
 -      if (defined($ctx->{INIT_FUNCTION}) and $ctx->{TYPE} ne "PYTHON" and 
++      if (defined($ctx->{INIT_FUNCTION}) and $ctx->{TYPE} ne "PYTHON" and
+               $ctx->{INIT_FUNCTION_TYPE} =~ /\(\*\)/) {
 -              my $init_fn = $ctx->{INIT_FUNCTION_TYPE};
 -              $init_fn =~ s/\(\*\)/init_module/;
 -              my $proto_fn = $ctx->{INIT_FUNCTION_TYPE};
 -              $proto_fn =~ s/\(\*\)/$ctx->{INIT_FUNCTION}/;
 -
 -              $self->output(<< "__EOD__"
 -bin/$ctx->{NAME}_init_module.c:
 -      \@echo Creating \$\@
 -      \@echo \"#include \\\"includes.h\\\"\" > \$\@
 -      \@echo \"$proto_fn;\" >> \$\@
 -      \@echo \"_PUBLIC_ $init_fn\" >> \$\@
 -      \@echo \"{\" >> \$\@
 -      \@echo \"       return $ctx->{INIT_FUNCTION}();\" >> \$\@
 -      \@echo \"}\" >> \$\@
 -      \@echo \"\" >> \$\@
 -__EOD__
 -);
 -              $init_obj = "bin/$ctx->{NAME}_init_module.o";
 +              $self->output("\$($ctx->{NAME}_OBJ_LIST): CFLAGS+=-D$ctx->{INIT_FUNCTION}=init_module\n");
        }
  
        $self->output(<< "__EOD__"
 -#
  
 -$ctx->{SHAREDDIR}/$ctx->{LIBRARY_REALNAME}: \$($ctx->{NAME}_DEPEND_LIST) \$($ctx->{NAME}_FULL_OBJ_LIST) $init_obj
 +$ctx->{SHAREDDIR}/$ctx->{LIBRARY_REALNAME}: \$($ctx->{NAME}_DEPEND_LIST) \$($ctx->{NAME}_OBJ_LIST)
        \@echo Linking \$\@
 -      \@mkdir -p $ctx->{SHAREDDIR}
 +      \@mkdir -p \$(\@D)
-       \@\$(MDLD) \$(MDLD_FLAGS) \$(INTERN_LDFLAGS) -o \$\@ \$(INSTALL_LINK_FLAGS) \\
-               \$($ctx->{NAME}\_OBJ_LIST) \\
+       \@\$(MDLD) \$(LDFLAGS) \$(MDLD_FLAGS) \$(INTERN_LDFLAGS) -o \$\@ \$(INSTALL_LINK_FLAGS) \\
 -              \$($ctx->{NAME}\_FULL_OBJ_LIST) $init_obj \\
++              \$($ctx->{NAME}\_FULL_OBJ_LIST) \\
                \$($ctx->{NAME}_LINK_FLAGS)
  __EOD__
  );
  
        if (defined($ctx->{ALIASES})) {
                foreach (@{$ctx->{ALIASES}}) {
 -                      $self->output("\t\@rm -f $ctx->{SHAREDDIR}/$_.\$(SHLIBEXT)\n");
                        $self->output("\t\@ln -fs $ctx->{LIBRARY_REALNAME} $ctx->{SHAREDDIR}/$_.\$(SHLIBEXT)\n");
                }
        }
@@@ -185,28 -220,36 +186,28 @@@ sub SharedLibrary($$
  {
        my ($self,$ctx) = @_;
  
 -      push (@{$self->{shared_libs}}, $ctx->{RESULT_SHARED_LIBRARY}) if (defined($ctx->{SO_VERSION}));
 +      $self->output("SHARED_LIBS += $ctx->{RESULT_SHARED_LIBRARY}\n") if (defined($ctx->{SO_VERSION}));
  
        $self->_prepare_list($ctx, "DEPEND_LIST");
        $self->_prepare_list($ctx, "LINK_FLAGS");
  
 -      my $soarg = "";
 -      my $lns = "";
 -      if ($self->{config}->{SONAMEFLAG} ne "#" and defined($ctx->{LIBRARY_SONAME})) {
 -              $soarg = "$self->{config}->{SONAMEFLAG}$ctx->{LIBRARY_SONAME}";
 -              if ($ctx->{LIBRARY_REALNAME} ne $ctx->{LIBRARY_SONAME}) {
 -                      $lns .= "\n\t\@test \$($ctx->{NAME}_VERSION) = \$($ctx->{NAME}_SOVERSION) || ln -fs $ctx->{LIBRARY_REALNAME} $ctx->{SHAREDDIR}/$ctx->{LIBRARY_SONAME}";
 -              }
 -      }
 -
 -      if (defined($ctx->{LIBRARY_SONAME})) {
 -              $lns .= "\n\t\@ln -fs $ctx->{LIBRARY_REALNAME} $ctx->{SHAREDDIR}/$ctx->{LIBRARY_DEBUGNAME}";
 -      }
 -
        $self->output(<< "__EOD__"
 -#
 +
  $ctx->{RESULT_SHARED_LIBRARY}: \$($ctx->{NAME}_DEPEND_LIST) \$($ctx->{NAME}_FULL_OBJ_LIST)
        \@echo Linking \$\@
        \@mkdir -p $ctx->{SHAREDDIR}
-       \@\$(SHLD) \$(SHLD_FLAGS) \$(INTERN_LDFLAGS) -o \$\@ \$(INSTALL_LINK_FLAGS) \\
-               \$($ctx->{NAME}\_OBJ_LIST) \\
+       \@\$(SHLD) \$(LDFLAGS) \$(SHLD_FLAGS) \$(INTERN_LDFLAGS) -o \$\@ \$(INSTALL_LINK_FLAGS) \\
+               \$($ctx->{NAME}\_FULL_OBJ_LIST) \\
                \$($ctx->{NAME}_LINK_FLAGS) \\
 -              $soarg$lns
 +              \$(if \$(SONAMEFLAG), \$(SONAMEFLAG)$ctx->{LIBRARY_SONAME})
  __EOD__
  );
 -      $self->output("\n");
 +      if ($ctx->{LIBRARY_REALNAME} ne $ctx->{LIBRARY_SONAME}) {
 +              $self->output("\t\@test \$($ctx->{NAME}_VERSION) = \$($ctx->{NAME}_SOVERSION) || ln -fs $ctx->{LIBRARY_REALNAME} $ctx->{SHAREDDIR}/$ctx->{LIBRARY_SONAME}\n");
 +      }
 +      $self->output("ifdef $ctx->{NAME}_SOVERSION\n");
 +      $self->output("\t\@ln -fs $ctx->{LIBRARY_REALNAME} $ctx->{SHAREDDIR}/$ctx->{LIBRARY_DEBUGNAME}\n");
 +      $self->output("endif\n");
  }
  
  sub MergedObj($$)
@@@ -227,7 -270,7 +228,7 @@@ __EOD_
  );
  }
  
 -sub StaticLibrary($$)
 +sub StaticLibraryPrimitives($$)
  {
        my ($self,$ctx) = @_;
  
  
        $self->output("$ctx->{NAME}_OUTPUT = $ctx->{OUTPUT}\n");
        $self->_prepare_list($ctx, "FULL_OBJ_LIST");
 +}
  
 -      $self->output(<< "__EOD__"
 -#
 -$ctx->{RESULT_STATIC_LIBRARY}: \$($ctx->{NAME}_FULL_OBJ_LIST)
 -      \@echo Linking \$@
 -      \@rm -f \$@
 -      \@mkdir -p $ctx->{STATICDIR}
 -      \@\$(STLD) \$(STLD_FLAGS) \$@ \$($ctx->{NAME}_FULL_OBJ_LIST)
 +sub InitFunctions($$)
 +{
 +      my ($self, $ctx) = @_;
 +      $self->output("\$($ctx->{NAME}_OBJ_LIST): CFLAGS+=-DSTATIC_$ctx->{NAME}_MODULES=\"\$($ctx->{NAME}_INIT_FUNCTIONS)$ctx->{INIT_FUNCTION_SENTINEL}\"\n");
 +}
  
 -__EOD__
 -);
 +sub StaticLibrary($$)
 +{
 +      my ($self,$ctx) = @_;
 +
 +      return unless (defined($ctx->{OBJ_FILES}));
 +
 +      $self->output("STATIC_LIBS += $ctx->{RESULT_STATIC_LIBRARY}\n") if ($ctx->{TYPE} eq "LIBRARY");
 +      $self->output("$ctx->{NAME}_OUTPUT = $ctx->{OUTPUT}\n");
 +      $self->output("$ctx->{RESULT_STATIC_LIBRARY}: \$($ctx->{NAME}_FULL_OBJ_LIST)\n");
  }
  
  sub Header($$)
  {
        my ($self,$ctx) = @_;
  
 +      return if ($#{$ctx->{PUBLIC_HEADERS}} == -1);
 +
 +      $self->output("PUBLIC_HEADERS +=");
 +
        foreach (@{$ctx->{PUBLIC_HEADERS}}) {
 -              push (@{$self->{headers}}, output::add_dir_str($ctx->{BASEDIR}, $_));
 +              $self->output(" " . output::add_dir_str($ctx->{BASEDIR}, $_));
        }
 +
 +      $self->output("\n");
  }
  
  sub Binary($$)
  {
        my ($self,$ctx) = @_;
  
 -      my $extradir = "";
 -
        unless (defined($ctx->{INSTALLDIR})) {
        } elsif ($ctx->{INSTALLDIR} eq "SBINDIR") {
 -              push (@{$self->{sbin_progs}}, $ctx->{RESULT_BINARY});
 +              $self->output("SBIN_PROGS += $ctx->{RESULT_BINARY}\n");
        } elsif ($ctx->{INSTALLDIR} eq "BINDIR") {
 -              push (@{$self->{bin_progs}}, $ctx->{RESULT_BINARY});
 +              $self->output("BIN_PROGS += $ctx->{RESULT_BINARY}\n");
        }
  
        $self->output("binaries:: $ctx->{TARGET_BINARY}\n");
@@@ -317,8 -350,10 +318,8 @@@ sub PythonFiles($$
        foreach (@{$ctx->{PYTHON_FILES}}) {
                my $target = "bin/python/".basename($_);
                my $source = output::add_dir_str($ctx->{BASEDIR}, $_);
 -              $self->output("$target: $source\n" .
 -                                        "\tmkdir -p \$(builddir)/bin/python\n" .
 -                            "\tcp $source \$@\n\n");
 -              push (@{$self->{python_pys}}, $target);
 +              $self->output("$target: $source\n\n");
 +              $self->output("PYTHON_PYS += $target\n");
        }
  }
  
@@@ -326,7 -361,8 +327,7 @@@ sub Manpage($$
  {
        my ($self,$ctx) = @_;
  
 -      my $path = output::add_dir_str($ctx->{BASEDIR}, $ctx->{MANPAGE});
 -      push (@{$self->{manpages}}, $path);
 +      $self->output("MANPAGES += " . output::add_dir_str($ctx->{BASEDIR}, $ctx->{MANPAGE}) . "\n");
  }
  
  sub ProtoHeader($$)
                        $comment .= " and ";
                        $target.= " ";
                }
 -              push (@{$self->{proto_headers}}, $priv);
 +              $self->output("PROTO_HEADERS += $priv\n");
        } else {
                $ctx->{PRIVATE_PROTO_HEADER} = $ctx->{PUBLIC_PROTO_HEADER};
                $priv = output::add_dir_str($ctx->{BASEDIR}, $ctx->{PRIVATE_PROTO_HEADER});
                $pub = output::add_dir_str($ctx->{BASEDIR}, $ctx->{PUBLIC_PROTO_HEADER});
                $comment .= $pub;
                $target .= $pub;
 -              push (@{$self->{proto_headers}}, $pub);
 +              $self->output("PROTO_HEADERS += $pub\n");
        } else {
                $ctx->{PUBLIC_PROTO_HEADER} = $ctx->{PRIVATE_PROTO_HEADER};
                $pub = output::add_dir_str($ctx->{BASEDIR}, $ctx->{PUBLIC_PROTO_HEADER});
@@@ -372,6 -408,19 +373,6 @@@ sub write($$
  {
        my ($self, $file) = @_;
  
 -      $self->output("MANPAGES = " . array2oneperline($self->{manpages})."\n");
 -      $self->output("BIN_PROGS = " . array2oneperline($self->{bin_progs}) . "\n");
 -      $self->output("SBIN_PROGS = " . array2oneperline($self->{sbin_progs}) . "\n");
 -      $self->output("STATIC_LIBS = " . array2oneperline($self->{static_libs}) . "\n");
 -      $self->output("SHARED_LIBS = " . array2oneperline($self->{shared_libs}) . "\n");
 -      $self->output("PYTHON_DSOS = " . array2oneperline($self->{python_dsos}) . "\n");
 -      $self->output("PYTHON_PYS = " . array2oneperline($self->{python_pys}) . "\n");
 -      $self->output("PUBLIC_HEADERS = " . array2oneperline($self->{headers}) . "\n");
 -      $self->output("PC_FILES = " . array2oneperline($self->{pc_files}) . "\n");
 -      $self->output("ALL_OBJS = " . array2oneperline($self->{all_objs}) . "\n");
 -      $self->output("PROTO_HEADERS = " . array2oneperline($self->{proto_headers}) .  "\n");
 -      $self->output("PLUGINS = " . array2oneperline($self->{plugins}) . "\n");
 -
        $self->_prepare_mk_files();
  
        $self->output($self->{mkfile});
index a3bf71d0d8ab881400276292e1465aab8e668d6e,7da7b9ba34d073534947978d749d45cbe8817a9d..a4e0b9418856440300b19d71122dbd6201db61e3
@@@ -35,6 -35,7 +35,6 @@@
  
  #if (_SAMBA_BUILD_ >= 4)
  #include "includes.h"
 -#include "build.h"
  #endif
  
  #define LDB_MODULE_PREFIX     "modules:"
@@@ -125,9 -126,30 +125,30 @@@ static struct ops_list_entry 
        struct ops_list_entry *next;    
  } *registered_modules = NULL;
  
+ #ifndef STATIC_LIBLDB_MODULES
+ #define STATIC_LIBLDB_MODULES \
+       ldb_operational_module_ops,     \
+       ldb_rdn_name_module_ops,        \
+       ldb_paged_results_module_ops,   \
+       ldb_sort_module_ops,            \
+       ldb_asq_module_ops, \
+       NULL
+ #endif
+ const static struct ldb_module_ops *builtin_modules[] = {
+       STATIC_LIBLDB_MODULES
+ };
  static const struct ldb_module_ops *ldb_find_module_ops(const char *name)
  {
        struct ops_list_entry *e;
+       int i;
+       for (i = 0; builtin_modules[i]; i++) {
+               if (strcmp(builtin_modules[i]->name, name) == 0)
+                       return builtin_modules[i];
+       }
   
        for (e = registered_modules; e; e = e->next) {
                if (strcmp(e->ops->name, name) == 0) 
        return NULL;
  }
  
- #ifndef STATIC_LIBLDB_MODULES
- #ifdef HAVE_LDB_LDAP
- #define LDAP_INIT ldb_ldap_init,
- #else
- #define LDAP_INIT
- #endif
- #ifdef HAVE_LDB_SQLITE3
- #define SQLITE3_INIT ldb_sqlite3_init,
- #else
- #define SQLITE3_INIT
- #endif
- #define STATIC_LIBLDB_MODULES \
-       LDAP_INIT \
-       SQLITE3_INIT \
-       ldb_tdb_init,   \
-       ldb_operational_init,   \
-       ldb_rdn_name_init,      \
-       ldb_paged_results_init, \
-       ldb_sort_init,          \
-       ldb_asq_init, \
-       NULL
- #endif
- int ldb_global_init(void)
- {
-       int (*static_init_fns[])(void) = { STATIC_LIBLDB_MODULES };
-       static int initialized = 0;
-       int ret = 0, i;
-       if (initialized) 
-               return 0;
-       initialized = 1;
-       
-       for (i = 0; static_init_fns[i]; i++) {
-               if (static_init_fns[i]() == -1)
-                       ret = -1;
-       }
-       return ret;
- }
  
  int ldb_register_module(const struct ldb_module_ops *ops)
  {
@@@ -256,8 -233,13 +232,13 @@@ int ldb_load_modules_list(struct ldb_co
                }
  
                if (ops == NULL) {
-                       ops = ldb_dso_load_symbol(ldb, module_list[i], 
-                                                     "ldb_module_ops");
+                       char *symbol_name = talloc_asprintf(ldb, "ldb_%s_module_ops", 
+                                                                                               module_list[i]);
+                       if (symbol_name == NULL) {
+                               return LDB_ERR_OPERATIONS_ERROR;
+                       }
+                       ops = ldb_dso_load_symbol(ldb, module_list[i], symbol_name);
+                       talloc_free(symbol_name);
                }
                
                if (ops == NULL) {