summaryrefslogtreecommitdiff
path: root/source4/build/smb_build/smb_build_h.pm
diff options
context:
space:
mode:
Diffstat (limited to 'source4/build/smb_build/smb_build_h.pm')
-rw-r--r--source4/build/smb_build/smb_build_h.pm36
1 files changed, 26 insertions, 10 deletions
diff --git a/source4/build/smb_build/smb_build_h.pm b/source4/build/smb_build/smb_build_h.pm
index e06e965ac7..2bb9f35c53 100644
--- a/source4/build/smb_build/smb_build_h.pm
+++ b/source4/build/smb_build/smb_build_h.pm
@@ -24,6 +24,8 @@ sub _prepare_smb_build_h($)
{
my $depend = shift;
my @defines = ();
+ my %declared = ();
+ my $output = "";
#
# loop over all binaries
@@ -42,7 +44,9 @@ sub _prepare_smb_build_h($)
$DEFINE->{KEY} = $name . "_init_subsystems";
$DEFINE->{VAL} = "do { \\\n";
foreach my $subkey (@{$key->{SUBSYSTEM_INIT_FUNCTIONS}}) {
- $DEFINE->{VAL} .= "\t\textern NTSTATUS $subkey(void); \\\n";
+ next if defined($declared{$subkey});
+ $output .= "NTSTATUS $subkey(void);\n";
+ $declared{$subkey} = 1;
}
foreach my $subkey (@{$key->{SUBSYSTEM_INIT_FUNCTIONS}}) {
@@ -53,6 +57,24 @@ sub _prepare_smb_build_h($)
push(@defines,$DEFINE);
}
+ foreach my $key (values %{$depend}) {
+ my $DEFINE = ();
+ next if ($key->{TYPE} ne "LIBRARY" and $key->{TYPE} ne "SUBSYSTEM");
+ next unless defined($key->{INIT_FUNCTIONS});
+
+ $DEFINE->{COMMENT} = "$key->{TYPE} $key->{NAME} INIT";
+ $DEFINE->{KEY} = "STATIC_$key->{NAME}_MODULES";
+ $DEFINE->{VAL} = "{ \\\n";
+ foreach (@{$key->{INIT_FUNCTIONS}}) {
+ $DEFINE->{VAL} .= "\t$_, \\\n";
+ $output .= "NTSTATUS $_(void);\n";
+ }
+
+ $DEFINE->{VAL} .= "\tNULL \\\n }";
+
+ push(@defines,$DEFINE);
+ }
+
#
# Shared modules
#
@@ -78,10 +100,7 @@ sub _prepare_smb_build_h($)
#
# loop over all SMB_BUILD_H define sections
#
- my $output = "";
- foreach my $key (@defines) {
- $output .= _add_define_section($key);
- }
+ foreach (@defines) { $output .= _add_define_section($_); }
return $output;
}
@@ -98,15 +117,12 @@ sub _prepare_smb_build_h($)
sub create_smb_build_h($$)
{
my ($CTX, $file) = @_;
- my $output = "/* autogenerated by build/smb_build/main.pl */\n";
-
- $output .= _prepare_smb_build_h($CTX);
open(SMB_BUILD_H,">$file") || die ("Can't open `$file'\n");
- print SMB_BUILD_H $output;
+ print SMB_BUILD_H "/* autogenerated by build/smb_build/main.pl */\n";
+ print SMB_BUILD_H _prepare_smb_build_h($CTX);
close(SMB_BUILD_H);
print __FILE__.": creating $file\n";
- return;
}
1;