59e96574bdbc462e75bf6eb0753bad9739b241cb
[gd/samba/.git] / source4 / build / smb_build / smb_build_h.pl
1 ###########################################################
2 ### SMB Build System                                    ###
3 ### - create output for smb_build.h                     ###
4 ###                                                     ###
5 ###  Copyright (C) Stefan (metze) Metzmacher 2004       ###
6 ###  Released under the GNU GPL                         ###
7 ###########################################################
8
9 sub _add_define_section($)
10 {
11         my $DEFINE = shift;
12         my $output = "";
13
14         $output .= "
15 /* $DEFINE->{COMMENT} */
16 #define $DEFINE->{KEY} $DEFINE->{VAL}
17 ";
18
19         return $output;
20 }
21
22 sub _prepare_smb_build_h($)
23 {
24         my $CTX = shift;
25         my $output = "";
26
27         #
28         # loop over all subsystems
29         #
30         foreach my $key (sort keys %{$CTX->{DEPEND}{SUBSYSTEMS}}) {
31                 my $NAME = $CTX->{INPUT}{SUBSYSTEMS}{$key}{NAME};
32                 my $DEFINE = ();
33                 my $name = lc($NAME);
34
35                 #
36                 # Static modules
37                 # 
38                 $DEFINE->{COMMENT} = "SUBSYSTEM $NAME INIT";
39                 $DEFINE->{KEY} = "static_init_$name";
40                 $DEFINE->{VAL} = "do { \\\n";
41                 foreach my $subkey (@{$CTX->{DEPEND}{SUBSYSTEMS}{$key}{STATIC_MODULES_LIST}}) {
42                         $DEFINE->{VAL} .= "\t\t$subkey\_init(); \\\n";
43                 }
44                 $DEFINE->{VAL} .= "\t} while(0)";
45                 
46                 push(@{$CTX->{OUTPUT}{SMB_BUILD_H}},$DEFINE);
47
48         }
49
50         #
51         # Shared modules
52         #
53         foreach my $key (sort keys %{$CTX->{INPUT}{MODULES}}) {
54                 next if ($CTX->{INPUT}{MODULES}{$key}{BUILD} ne "SHARED");
55
56                 my $name = $CTX->{INPUT}{MODULES}{$key}{NAME};
57                 my $DEFINE = ();
58                 
59                 $DEFINE->{COMMENT} = "$name is built shared";
60                 $DEFINE->{KEY} = "$name\_init";
61                 $DEFINE->{VAL} = "init_module";
62
63                 push(@{$CTX->{OUTPUT}{SMB_BUILD_H}},$DEFINE);
64         }
65
66         #
67         # loop over all SMB_BUILD_H define sections
68         #
69         foreach my $key (@{$CTX->{OUTPUT}{SMB_BUILD_H}}) {
70                 $output .= _add_define_section($key);
71         }
72
73         return $output;
74 }
75
76 ###########################################################
77 # This function creates include/smb_build.h from the SMB_BUILD 
78 # context
79 #
80 # create_smb_build_h($SMB_BUILD_CTX)
81 #
82 # $SMB_BUILD_CTX -      the global SMB_BUILD context
83 #
84 # $output -             the resulting output buffer
85 sub create_smb_build_h($)
86 {
87         my $CTX = shift;
88         my $output = "/* autogenerated by config.smb_build.pl */\n";
89
90         $output .= _prepare_smb_build_h($CTX);
91
92         #
93         # TODO: check if directory include/ exists
94         #
95
96         open(SMB_BUILD_H,"> include/smb_build.h") || die ("Can't open include/smb_build.h\n");
97
98         print SMB_BUILD_H $output;
99
100         close(SMB_BUILD_H);
101
102         print "config.smb_build.pl: creating include/smb_build.h\n";
103         return; 
104 }