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 ###########################################################
20 $str =~ s/^[\t\n ]*//g;
22 $str =~ s/[\t\n ]*$//g;
32 $str =~ s/^[\t\n ]*//g;
34 $str =~ s/[\t\n ]*$//g;
36 $str =~ s/([\t\n ]+)/ /g;
38 if (length($str)==0) {
42 @ar = split(/[ \t\n]/,$str);
47 sub check_subsystem($$)
51 if ($subsys->{ENABLE} ne "YES") {
52 printf("Subsystem: %s disabled!\n",$subsys->{NAME});
55 # FIXME: Make this configurable (so it can be STATIC_LIBRARY, for example)
56 $subsys->{OUTPUT_TYPE} = "OBJLIST";
64 die("Module $mod->{NAME} does not have a SUBSYSTEM set") if not defined($mod->{SUBSYSTEM});
66 ($mod->{DEFAULT_BUILD} = "STATIC") if not defined($mod->{DEFAULT_BUILD});
70 $mod->{SUBSYSTEM} = join(' ', @{$mod->{SUBSYSTEM}});
72 if (!(defined($CTX->{INPUT}{$mod->{SUBSYSTEM}}))) {
73 $mod->{BUILD} = "NOT";
74 $mod->{ENABLE} = "NO";
75 printf("Module: %s...PARENT SUBSYSTEM ($mod->{SUBSYSTEM}) DISABLED\n",$mod->{NAME});
79 if (not defined($mod->{CHOSEN_BUILD}) or $mod->{CHOSEN_BUILD} eq "DEFAULT") {
80 $mod->{CHOSEN_BUILD} = $mod->{DEFAULT_BUILD};
83 if ($mod->{CHOSEN_BUILD} eq "SHARED") {
84 $mod->{ENABLE} = "YES";
85 $mod->{OUTPUT_TYPE} = "SHARED_LIBRARY";
86 push (@{$mod->{REQUIRED_SUBSYSTEMS}}, $mod->{SUBSYSTEM});
87 printf("Module: %s...shared\n",$mod->{NAME});
88 } elsif ($mod->{CHOSEN_BUILD} eq "STATIC") {
89 $mod->{ENABLE} = "YES";
90 push (@{$CTX->{INPUT}{$mod->{SUBSYSTEM}}{REQUIRED_SUBSYSTEMS}}, $mod->{NAME});
91 printf("Module: %s...static\n",$mod->{NAME});
92 $mod->{OUTPUT_TYPE} = "OBJLIST";
94 $mod->{ENABLE} = "NO";
95 printf("Module: %s...not\n",$mod->{NAME});
100 sub check_library($$)
105 if ($lib->{ENABLE} ne "YES") {
106 printf("Library: %s...disabled\n",$lib->{NAME});
110 $lib->{OUTPUT_TYPE} = "SHARED_LIBRARY";
118 if ($bin->{ENABLE} ne "YES") {
119 printf("Binary: %s...disabled\n",$bin->{NAME});
123 ($bin->{BINARY} = (lc $bin->{NAME})) if not defined($bin->{BINARY});
125 $bin->{OUTPUT_TYPE} = "BINARY";
133 foreach my $dep (@{$deps}) {
134 if (not defined($udeps->{$$dep->{NAME}})) {
135 $udeps->{$$dep->{NAME}} = "BUSY";
136 calc_unique_deps($$dep->{DEPENDENCIES}, $udeps);
137 $udeps->{$$dep->{NAME}} = $$dep;
144 ###########################################################
145 # This function checks the input from the configure script
147 # check_input($SMB_BUILD_CTX)
149 # $SMB_BUILD_CTX - the global SMB_BUILD context
154 foreach my $part (values %{$CTX->{INPUT}}) {
155 ($part->{ENABLE} = "YES") if not defined($part->{ENABLE});
158 foreach my $part (values %{$CTX->{INPUT}}) {
159 check_subsystem($CTX, $part) if ($part->{TYPE} eq "SUBSYSTEM");
160 check_module($CTX, $part) if ($part->{TYPE} eq "MODULE");
161 check_library($CTX, $part) if ($part->{TYPE} eq "LIBRARY");
162 check_binary($CTX, $part) if ($part->{TYPE} eq "BINARY");
164 #FIXME: REQUIRED_LIBRARIES needs to go
165 if (defined($part->{REQUIRED_LIBRARIES})) {
166 push(@{$part->{REQUIRED_SUBSYSTEMS}}, @{$part->{REQUIRED_LIBRARIES}});
167 delete ($part->{REQUIRED_LIBRARIES});
171 my %depend = %{$CTX->{INPUT}};
173 foreach my $part (values %depend) {
175 # Generate list of dependencies
176 $part->{DEPENDENCIES} = [];
178 foreach my $key (@{$part->{REQUIRED_SUBSYSTEMS}}) {
179 die("$part->{NAME} has undefined dependency $key\n") if not defined($depend{$key});
180 push (@{$part->{DEPENDENCIES}}, \$depend{$key});
183 delete ($part->{REQUIRED_SUBSYSTEMS});
186 foreach my $part (values %depend) {
187 $part->{UNIQUE_DEPENDENCIES} = {};
188 calc_unique_deps($part->{DEPENDENCIES}, $part->{UNIQUE_DEPENDENCIES});