r15375: Rename readline.h to smbreadline.h avoid clashes with system header.
[jelmer/samba4-debian.git] / source / build / smb_build / header.pm
1 # SMB Build System
2 # - create output for build.h
3 #
4 #  Copyright (C) Stefan (metze) Metzmacher 2004
5 #  Copyright (C) Jelmer Vernooij 2005
6 #  Released under the GNU GPL
7
8 package header;
9 use strict;
10
11 sub _add_define_section($)
12 {
13         my $DEFINE = shift;
14         my $output = "";
15
16         $output .= "
17 /* $DEFINE->{COMMENT} */
18 #define $DEFINE->{KEY} $DEFINE->{VAL}
19 ";
20
21         return $output;
22 }
23
24 sub _prepare_build_h($)
25 {
26         my $depend = shift;
27         my @defines = ();
28         my $output = "";
29
30         foreach my $key (values %$depend) {
31                 my $DEFINE = ();
32                 next if ($key->{TYPE} ne "LIBRARY" and 
33                                  $key->{TYPE} ne "MODULE" and
34                                  $key->{TYPE} ne "SUBSYSTEM" and
35                                  $key->{TYPE} ne "BINARY");
36                 next unless defined($key->{INIT_FUNCTIONS});
37
38                 my $name = $key->{NAME};
39                 $name =~ s/-/_/g;
40                 $DEFINE->{COMMENT} = "$key->{TYPE} $key->{NAME} INIT";
41                 $DEFINE->{KEY} = "STATIC_$name\_MODULES";
42                 $DEFINE->{VAL} = "{ \\\n";
43                 foreach (@{$key->{INIT_FUNCTIONS}}) {
44                         $DEFINE->{VAL} .= "\t$_, \\\n";
45                         my $fn = $key->{INIT_FUNCTION_TYPE};
46                         unless(defined($fn)) { $fn = "NTSTATUS (*) (void)"; }
47                         $fn =~ s/\(\*\)/$_/;
48                         $output .= "$fn;\n";
49                 }
50
51                 $DEFINE->{VAL} .= "\tNULL \\\n }";
52
53                 push(@defines,$DEFINE);
54         }
55
56         #
57         # loop over all BUILD_H define sections
58         #
59         foreach (@defines) { $output .= _add_define_section($_); }
60
61         return $output;
62 }
63
64 ###########################################################
65 # This function creates include/build.h from the SMB_BUILD 
66 # context
67 #
68 # create_build_h($SMB_BUILD_CTX)
69 #
70 # $SMB_BUILD_CTX -      the global SMB_BUILD context
71 #
72 # $output -             the resulting output buffer
73 sub create_smb_build_h($$)
74 {
75         my ($CTX, $file) = @_;
76
77         open(BUILD_H,">$file") || die ("Can't open `$file'\n");
78         print BUILD_H "/* autogenerated by build/smb_build/main.pl */\n";
79         print BUILD_H _prepare_build_h($CTX);
80         close(BUILD_H);
81
82         print __FILE__.": creating $file\n";
83 }
84 1;