1 ###########################################################
2 ### SMB Build System ###
3 ### - the input checking functions ###
5 ### Copyright (C) Stefan (metze) Metzmacher 2004 ###
6 ### Copyright (C) Jelmer Vernooij 2004 ###
7 ### Released under the GNU GPL ###
8 ###########################################################
13 my $subsystem_default_output_type = "OBJLIST";
21 $str =~ s/^[\t\n ]*//g;
23 $str =~ s/[\t\n ]*$//g;
33 $str =~ s/^[\t\n ]*//g;
35 $str =~ s/[\t\n ]*$//g;
37 $str =~ s/([\t\n ]+)/ /g;
39 if (length($str)==0) {
43 @ar = split(/[ \t\n]/,$str);
48 sub check_subsystem($$)
52 if ($subsys->{ENABLE} ne "YES") {
53 printf("Subsystem: %s disabled!\n",$subsys->{NAME});
57 unless(defined($subsys->{OUTPUT_TYPE})) {
58 $subsys->{OUTPUT_TYPE} = $subsystem_default_output_type;
67 die("Module $mod->{NAME} does not have a SUBSYSTEM set") if not defined($mod->{SUBSYSTEM});
69 ($mod->{DEFAULT_BUILD} = "STATIC") if not defined($mod->{DEFAULT_BUILD});
73 if (!(defined($INPUT->{$mod->{SUBSYSTEM}}))) {
74 $mod->{BUILD} = "NOT";
75 $mod->{ENABLE} = "NO";
76 printf("Module: %s...PARENT SUBSYSTEM ($mod->{SUBSYSTEM}) DISABLED\n",$mod->{NAME});
80 if ($mod->{ENABLE} ne "YES")
82 $mod->{CHOSEN_BUILD} = "NOT";
85 if (not defined($mod->{CHOSEN_BUILD}) or $mod->{CHOSEN_BUILD} eq "DEFAULT") {
86 $mod->{CHOSEN_BUILD} = $mod->{DEFAULT_BUILD};
89 if ($mod->{CHOSEN_BUILD} eq "SHARED") {
90 $mod->{ENABLE} = "YES";
91 $mod->{OUTPUT_TYPE} = "SHARED_LIBRARY";
92 push (@{$mod->{REQUIRED_SUBSYSTEMS}}, $mod->{SUBSYSTEM});
93 printf("Module: %s...shared\n",$mod->{NAME});
94 } elsif ($mod->{CHOSEN_BUILD} eq "STATIC") {
95 $mod->{ENABLE} = "YES";
96 push (@{$INPUT->{$mod->{SUBSYSTEM}}{REQUIRED_SUBSYSTEMS}}, $mod->{NAME});
97 printf("Module: %s...static\n",$mod->{NAME});
98 $mod->{OUTPUT_TYPE} = $subsystem_default_output_type;
100 $mod->{ENABLE} = "NO";
101 printf("Module: %s...not\n",$mod->{NAME});
106 sub check_library($$)
111 if ($lib->{ENABLE} ne "YES") {
112 printf("Library: %s...disabled\n",$lib->{NAME});
116 $lib->{OUTPUT_TYPE} = "SHARED_LIBRARY";
124 if ($bin->{ENABLE} ne "YES") {
125 printf("Binary: %s...disabled\n",$bin->{NAME});
129 ($bin->{BINARY} = (lc $bin->{NAME})) if not defined($bin->{BINARY});
131 $bin->{OUTPUT_TYPE} = "BINARY";
139 foreach my $dep (@{$deps}) {
140 if (not defined($udeps->{$$dep->{NAME}})) {
141 $udeps->{$$dep->{NAME}} = "BUSY";
142 calc_unique_deps($$dep->{DEPENDENCIES}, $udeps);
143 $udeps->{$$dep->{NAME}} = $$dep;
150 ###########################################################
151 # This function checks the input from the configure script
153 # check_input($INPUT)
155 # $INPUT - the global INPUT context
160 ($subsystem_default_output_type = $ENV{SUBSYSTEM_OUTPUT_TYPE}) if (defined($ENV{"SUBSYSTEM_OUTPUT_TYPE"}));
162 foreach my $part (values %$INPUT) {
163 ($part->{ENABLE} = "YES") if not defined($part->{ENABLE});
166 foreach my $k (keys %$INPUT) {
167 my $part = $INPUT->{$k};
168 if (not defined($part->{TYPE})) {
169 print STDERR "$k does not have a type set.. Perhaps it's only mentioned in a .m4 but not in a .mk file?\n";
172 check_subsystem($INPUT, $part) if ($part->{TYPE} eq "SUBSYSTEM");
173 check_module($INPUT, $part) if ($part->{TYPE} eq "MODULE");
174 check_library($INPUT, $part) if ($part->{TYPE} eq "LIBRARY");
175 check_binary($INPUT, $part) if ($part->{TYPE} eq "BINARY");
177 #FIXME: REQUIRED_LIBRARIES needs to go
178 if (defined($part->{REQUIRED_LIBRARIES})) {
179 push(@{$part->{REQUIRED_SUBSYSTEMS}}, @{$part->{REQUIRED_LIBRARIES}});
180 delete ($part->{REQUIRED_LIBRARIES});
184 my %depend = %$INPUT;
186 foreach my $part (values %depend) {
188 # Generate list of dependencies
189 $part->{DEPENDENCIES} = [];
191 foreach my $key (@{$part->{REQUIRED_SUBSYSTEMS}}) {
192 die("$part->{NAME} has undefined dependency $key\n") if not defined($depend{$key});
193 push (@{$part->{DEPENDENCIES}}, \$depend{$key});
196 delete ($part->{REQUIRED_SUBSYSTEMS});
199 foreach my $part (values %depend) {
200 $part->{UNIQUE_DEPENDENCIES} = {};
201 calc_unique_deps($part->{DEPENDENCIES}, $part->{UNIQUE_DEPENDENCIES});