blob: e874c77ce86121dc253bb95545c5e04631664672 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
###########################################################
### SMB Build System ###
### - create output for smb_build.h ###
### ###
### Copyright (C) Stefan (metze) Metzmacher 2004 ###
### Released under the GNU GPL ###
###########################################################
package smb_build_h;
use strict;
sub _add_define_section($)
{
my $DEFINE = shift;
my $output = "";
$output .= "
/* $DEFINE->{COMMENT} */
#define $DEFINE->{KEY} $DEFINE->{VAL}
";
return $output;
}
sub _prepare_smb_build_h($)
{
my $depend = shift;
my @defines = ();
#
# loop over all binaries
#
foreach my $key (values %{$depend}) {
next if ($key->{TYPE} ne "BINARY");
my $NAME = $key->{NAME};
my $DEFINE = ();
my $name = lc($NAME);
#
# Static modules
#
$DEFINE->{COMMENT} = "BINARY $NAME INIT";
$DEFINE->{KEY} = $name . "_init_subsystems";
$DEFINE->{VAL} = "do { \\\n";
foreach my $subkey (@{$key->{SUBSYSTEM_INIT_FUNCTIONS}}) {
$DEFINE->{VAL} .= "\t\textern NTSTATUS $subkey(void); \\\n";
}
foreach my $subkey (@{$key->{SUBSYSTEM_INIT_FUNCTIONS}}) {
$DEFINE->{VAL} .= "\t\tif (NT_STATUS_IS_ERR($subkey())) exit(1); \\\n";
}
$DEFINE->{VAL} .= "\t} while(0)";
push(@defines,$DEFINE);
}
#
# Shared modules
#
foreach my $key (values %{$depend}) {
next if $key->{TYPE} ne "MODULE";
next if $key->{ENABLE} ne "YES";
next if $key->{OUTPUT_TYPE} ne "SHARED_LIBRARY";
my $name = $key->{NAME};
next if not defined($key->{INIT_FUNCTION});
my $func = join(' ', @{$key->{INIT_FUNCTION}});
next if $func eq "";
my $DEFINE = ();
$DEFINE->{COMMENT} = "$name is built shared";
$DEFINE->{KEY} = $func;
$DEFINE->{VAL} = "init_module";
push(@defines,$DEFINE);
}
#
# loop over all SMB_BUILD_H define sections
#
my $output = "";
foreach my $key (@defines) {
$output .= _add_define_section($key);
}
return $output;
}
###########################################################
# This function creates include/smb_build.h from the SMB_BUILD
# context
#
# create_smb_build_h($SMB_BUILD_CTX)
#
# $SMB_BUILD_CTX - the global SMB_BUILD context
#
# $output - the resulting output buffer
sub create_smb_build_h($$)
{
my $CTX = shift;
my $file = shift;
my $output = "/* autogenerated by config.smb_build.pl */\n";
$output .= _prepare_smb_build_h($CTX);
open(SMB_BUILD_H,"> $file") || die ("Can't open $file\n");
print SMB_BUILD_H $output;
close(SMB_BUILD_H);
print "config.smb_build.pl: creating $file\n";
return;
}
1;
|