1
0
mirror of https://github.com/samba-team/samba.git synced 2025-06-23 11:17:06 +03:00
Jelmer Vernooij 548c5e5f31 r3768: Fix build of libraries
(This used to be commit 9929aa94ef01eba64ccf41f4b22df0cdbe3e96b3)
2007-10-10 13:05:52 -05:00

201 lines
4.5 KiB
Perl

###########################################################
### SMB Build System ###
### - the input checking functions ###
### ###
### Copyright (C) Stefan (metze) Metzmacher 2004 ###
### Copyright (C) Jelmer Vernooij 2004 ###
### Released under the GNU GPL ###
###########################################################
use strict;
package input;
my $subsystem_output_type = "OBJLIST";
my $srcdir = ".";
sub strtrim($)
{
my $str = shift;
my @ar = ();
$str =~ s/^[\t\n ]*//g;
$str =~ s/[\t\n ]*$//g;
return $str;
}
sub str2array($)
{
my $str = shift;
my @ar = ();
$str =~ s/^[\t\n ]*//g;
$str =~ s/[\t\n ]*$//g;
$str =~ s/([\t\n ]+)/ /g;
if (length($str)==0) {
return ();
}
@ar = split(/[ \t\n]/,$str);
return @ar;
}
sub check_subsystem($$)
{
my $CTX = shift;
my $subsys = shift;
if ($subsys->{ENABLE} ne "YES") {
printf("Subsystem: %s disabled!\n",$subsys->{NAME});
return;
}
$subsys->{OUTPUT_TYPE} = $subsystem_output_type;
}
sub check_module($$)
{
my $CTX = shift;
my $mod = shift;
die("Module $mod->{NAME} does not have a SUBSYSTEM set") if not defined($mod->{SUBSYSTEM});
($mod->{DEFAULT_BUILD} = "STATIC") if not defined($mod->{DEFAULT_BUILD});
my $use_default = 0;
$mod->{SUBSYSTEM} = join(' ', @{$mod->{SUBSYSTEM}});
if (!(defined($CTX->{INPUT}{$mod->{SUBSYSTEM}}))) {
$mod->{BUILD} = "NOT";
$mod->{ENABLE} = "NO";
printf("Module: %s...PARENT SUBSYSTEM ($mod->{SUBSYSTEM}) DISABLED\n",$mod->{NAME});
return;
}
if (not defined($mod->{CHOSEN_BUILD}) or $mod->{CHOSEN_BUILD} eq "DEFAULT") {
$mod->{CHOSEN_BUILD} = $mod->{DEFAULT_BUILD};
}
if ($mod->{CHOSEN_BUILD} eq "SHARED") {
$mod->{ENABLE} = "YES";
$mod->{OUTPUT_TYPE} = "SHARED_LIBRARY";
push (@{$mod->{REQUIRED_SUBSYSTEMS}}, $mod->{SUBSYSTEM});
printf("Module: %s...shared\n",$mod->{NAME});
} elsif ($mod->{CHOSEN_BUILD} eq "STATIC") {
$mod->{ENABLE} = "YES";
push (@{$CTX->{INPUT}{$mod->{SUBSYSTEM}}{REQUIRED_SUBSYSTEMS}}, $mod->{NAME});
printf("Module: %s...static\n",$mod->{NAME});
$mod->{OUTPUT_TYPE} = $subsystem_output_type;
} else {
$mod->{ENABLE} = "NO";
printf("Module: %s...not\n",$mod->{NAME});
return;
}
}
sub check_library($$)
{
my $CTX = shift;
my $lib = shift;
if ($lib->{ENABLE} ne "YES") {
printf("Library: %s...disabled\n",$lib->{NAME});
return;
}
$lib->{OUTPUT_TYPE} = "SHARED_LIBRARY";
$lib->{MAJOR_VERSION} = join('', @{$lib->{MAJOR_VERSION}});
$lib->{MINOR_VERSION} = join('', @{$lib->{MINOR_VERSION}});
$lib->{RELEASE_VERSION} = join('', @{$lib->{RELEASE_VERSION}});
}
sub check_binary($$)
{
my $CTX = shift;
my $bin = shift;
if ($bin->{ENABLE} ne "YES") {
printf("Binary: %s...disabled\n",$bin->{NAME});
return;
}
($bin->{BINARY} = (lc $bin->{NAME})) if not defined($bin->{BINARY});
$bin->{OUTPUT_TYPE} = "BINARY";
}
sub calc_unique_deps
{
my $deps = shift;
my $udeps = shift;
foreach my $dep (@{$deps}) {
if (not defined($udeps->{$$dep->{NAME}})) {
$udeps->{$$dep->{NAME}} = "BUSY";
calc_unique_deps($$dep->{DEPENDENCIES}, $udeps);
$udeps->{$$dep->{NAME}} = $$dep;
}
}
}
###########################################################
# This function checks the input from the configure script
#
# check_input($SMB_BUILD_CTX)
#
# $SMB_BUILD_CTX - the global SMB_BUILD context
sub check($)
{
my $CTX = shift;
($subsystem_output_type = $ENV{SUBSYSTEM_OUTPUT_TYPE}) if (defined($ENV{"SUBSYSTEM_OUTPUT_TYPE"}));
foreach my $part (values %{$CTX->{INPUT}}) {
($part->{ENABLE} = "YES") if not defined($part->{ENABLE});
}
foreach my $part (values %{$CTX->{INPUT}}) {
check_subsystem($CTX, $part) if ($part->{TYPE} eq "SUBSYSTEM");
check_module($CTX, $part) if ($part->{TYPE} eq "MODULE");
check_library($CTX, $part) if ($part->{TYPE} eq "LIBRARY");
check_binary($CTX, $part) if ($part->{TYPE} eq "BINARY");
#FIXME: REQUIRED_LIBRARIES needs to go
if (defined($part->{REQUIRED_LIBRARIES})) {
push(@{$part->{REQUIRED_SUBSYSTEMS}}, @{$part->{REQUIRED_LIBRARIES}});
delete ($part->{REQUIRED_LIBRARIES});
}
}
my %depend = %{$CTX->{INPUT}};
foreach my $part (values %depend) {
# Generate list of dependencies
$part->{DEPENDENCIES} = [];
foreach my $key (@{$part->{REQUIRED_SUBSYSTEMS}}) {
die("$part->{NAME} has undefined dependency $key\n") if not defined($depend{$key});
push (@{$part->{DEPENDENCIES}}, \$depend{$key});
}
delete ($part->{REQUIRED_SUBSYSTEMS});
}
foreach my $part (values %depend) {
$part->{UNIQUE_DEPENDENCIES} = {};
calc_unique_deps($part->{DEPENDENCIES}, $part->{UNIQUE_DEPENDENCIES});
}
return %depend;
}
1;