mirror of
https://github.com/samba-team/samba.git
synced 2025-02-04 17:47:26 +03:00
6e14c2cc00
and use @{$SMB_BUILD_CTX->{BUILD_ENV}{LD}{DYNEXP}} for the flags I'll use this for all vars which are currently using AC_SUBST(), so we can skip Makefile.in... (this should fix the build on us4...) metze (This used to be commit 798cbed5a328bd773447f1ee0b4f6ea751062e7e)
261 lines
7.9 KiB
Perl
261 lines
7.9 KiB
Perl
###########################################################
|
|
### SMB Build System ###
|
|
### - the output generating functions ###
|
|
### ###
|
|
### Copyright (C) Stefan (metze) Metzmacher 2004 ###
|
|
### Released under the GNU GPL ###
|
|
###########################################################
|
|
|
|
sub _generate_ext_libs($)
|
|
{
|
|
my $CTX = shift;
|
|
|
|
#
|
|
# loop over all binaries
|
|
#
|
|
foreach my $key (sort keys %{$CTX->{DEPEND}{EXT_LIBS}}) {
|
|
my $NAME = $CTX->{INPUT}{EXT_LIBS}{$key}{NAME};
|
|
|
|
#
|
|
# set the lists
|
|
#
|
|
$CTX->{OUTPUT}{EXT_LIBS}{$key}{NAME} = $NAME;
|
|
@{$CTX->{OUTPUT}{EXT_LIBS}{$key}{LIBS}} = @{$CTX->{DEPEND}{EXT_LIBS}{$key}{LIBS}};
|
|
@{$CTX->{OUTPUT}{EXT_LIBS}{$key}{CFLAGS}} = @{$CTX->{DEPEND}{EXT_LIBS}{$key}{CFLAGS}};
|
|
@{$CTX->{OUTPUT}{EXT_LIBS}{$key}{CPPFLAGS}} = @{$CTX->{DEPEND}{EXT_LIBS}{$key}{CPPFLAGS}};
|
|
@{$CTX->{OUTPUT}{EXT_LIBS}{$key}{LDFLAGS}} = @{$CTX->{DEPEND}{EXT_LIBS}{$key}{LDFLAGS}};
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
sub _generate_subsystems($)
|
|
{
|
|
my $CTX = shift;
|
|
|
|
#
|
|
# loop over all subsystems
|
|
#
|
|
foreach my $key (sort keys %{$CTX->{DEPEND}{SUBSYSTEMS}}) {
|
|
my $NAME = $CTX->{INPUT}{SUBSYSTEMS}{$key}{NAME};
|
|
my @OBJ_LIST = @{$CTX->{DEPEND}{SUBSYSTEMS}{$key}{OBJ_LIST}};
|
|
|
|
push(@{$CTX->{OUTPUT}{PROTO}{OBJ_LIST}},"\$(SUBSYSTEM_$key\_OBJS)");
|
|
|
|
#
|
|
# set the lists
|
|
#
|
|
$CTX->{OUTPUT}{SUBSYSTEMS}{$key}{NAME} = $NAME;
|
|
@{$CTX->{OUTPUT}{SUBSYSTEMS}{$key}{OBJ_LIST}} = @OBJ_LIST;
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
sub _generate_shared_modules($)
|
|
{
|
|
my $CTX = shift;
|
|
|
|
#
|
|
# loop over all shared modules
|
|
#
|
|
foreach my $key (sort keys %{$CTX->{DEPEND}{SHARED_MODULES}}) {
|
|
my $NAME = $CTX->{INPUT}{MODULES}{$key}{NAME};
|
|
my @OBJ_LIST = ();
|
|
#
|
|
my $MODULE = $NAME.".so";
|
|
my @DEPEND_LIST = ("\$(MODULE_$NAME\_OBJS)");
|
|
my @LINK_LIST = ("\$(MODULE_$NAME\_OBJS)");
|
|
my @LINK_FLAGS = ();
|
|
|
|
push(@{$CTX->{OUTPUT}{PROTO}{OBJ_LIST}},"\$(MODULE_$key\_OBJS)");
|
|
push(@{$CTX->{OUTPUT}{TARGETS}{ALL}{DEPEND_LIST}},"bin/$MODULE");
|
|
|
|
push(@OBJ_LIST,@{$CTX->{INPUT}{MODULES}{$key}{INIT_OBJ_FILES}});
|
|
push(@OBJ_LIST,@{$CTX->{INPUT}{MODULES}{$key}{ADD_OBJ_FILES}});
|
|
|
|
foreach my $elem (@{$CTX->{DEPEND}{SHARED_MODULES}{$key}{SUBSYSTEMS_LIST}}) {
|
|
if (!defined($CTX->{DEPEND}{SUBSYSTEMS}{$elem})) {
|
|
die("Shared Module[$NAME] depends on unknown Subsystem[$elem]!\n");
|
|
}
|
|
push(@DEPEND_LIST,"\$(SUBSYSTEM_$elem\_OBJS)");
|
|
push(@LINK_LIST,"\$(SUBSYSTEM_$elem\_OBJS)");
|
|
}
|
|
|
|
foreach my $elem (@{$CTX->{DEPEND}{SHARED_MODULES}{$key}{LIBRARIES_LIST}}) {
|
|
if (!defined($CTX->{DEPEND}{EXT_LIBS}{$elem})) {
|
|
die("Share Module[$NAME] depends on unknown External Library[$elem]!\n");
|
|
}
|
|
push(@LINK_LIST,@{$CTX->{DEPEND}{EXT_LIBS}{$elem}{LIBS}});
|
|
push(@LINK_FLAGS,@{$CTX->{DEPEND}{EXT_LIBS}{$elem}{LDFLAGS}});
|
|
}
|
|
|
|
#
|
|
# set the lists
|
|
#
|
|
$CTX->{OUTPUT}{SHARED_MODULES}{$key}{NAME} = $NAME;
|
|
@{$CTX->{OUTPUT}{SHARED_MODULES}{$key}{OBJ_LIST}} = @OBJ_LIST;
|
|
#
|
|
$CTX->{OUTPUT}{SHARED_MODULES}{$key}{MODULE} = $MODULE;
|
|
@{$CTX->{OUTPUT}{SHARED_MODULES}{$key}{DEPEND_LIST}} = @DEPEND_LIST;
|
|
@{$CTX->{OUTPUT}{SHARED_MODULES}{$key}{LINK_LIST}} = @LINK_LIST;
|
|
@{$CTX->{OUTPUT}{SHARED_MODULES}{$key}{LINK_FLAGS}} = @LINK_FLAGS;
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
sub _generate_libraries($)
|
|
{
|
|
my $CTX = shift;
|
|
|
|
#
|
|
# loop over all binaries
|
|
#
|
|
foreach my $key (sort keys %{$CTX->{DEPEND}{LIBRARIES}}) {
|
|
my $NAME = $CTX->{INPUT}{LIBRARIES}{$key}{NAME};
|
|
my @OBJ_LIST = @{$CTX->{INPUT}{LIBRARIES}{$key}{OBJ_FILES}};
|
|
my $MAJOR_VERSION = $CTX->{INPUT}{LIBRARIES}{$key}{MAJOR_VERSION};
|
|
my $MINOR_VERSION = $CTX->{INPUT}{LIBRARIES}{$key}{MINOR_VERSION};
|
|
my $RELEASE_VERSION = $CTX->{INPUT}{LIBRARIES}{$key}{RELEASE_VERSION};
|
|
#
|
|
my @DEPEND_LIST = ("\$(LIBRARY_$NAME\_OBJS)");
|
|
|
|
my $STATIC_LIBRARY_NAME = $NAME.".a";
|
|
my @STATIC_LINK_LIST = ("\$(LIBRARY_$NAME\_OBJS)");
|
|
my @STATIC_LINK_FLAGS = ();
|
|
|
|
my $SHARED_LIBRARY_NAME = $NAME.".so";
|
|
my $SHARED_LIBRARY_SONAME = $SHARED_LIBRARY_NAME.".$MAJOR_VERSION";
|
|
my $SHARED_LIBRARY_REALNAME = $SHARED_LIBRARY_SONAME.".$MINOR_VERSION.$RELEASE_VERSION";
|
|
my @SHARED_LINK_LIST = ("\$(LIBRARY_$NAME\_OBJS)");
|
|
my @SHARED_LINK_FLAGS = ("\@SONAMEFLAG\@$SHARED_LIBRARY_SONAME");
|
|
|
|
push(@{$CTX->{OUTPUT}{PROTO}{OBJ_LIST}},"\$(LIBRARY_$key\_OBJS)");
|
|
|
|
#
|
|
# not add to 'make all' for now
|
|
#
|
|
|
|
foreach my $elem (@{$CTX->{DEPEND}{LIBRARIES}{$key}{SUBSYSTEMS_LIST}}) {
|
|
if (!defined($CTX->{DEPEND}{SUBSYSTEMS}{$elem})) {
|
|
die("Library[$NAME] depends on unkown Subsystem[$elem]!\n");
|
|
}
|
|
push(@DEPEND_LIST,"\$(SUBSYSTEM_$elem\_OBJS)");
|
|
push(@STATIC_LINK_LIST,"\$(SUBSYSTEM_$elem\_OBJS)");
|
|
push(@SHARED_LINK_LIST,"\$(SUBSYSTEM_$elem\_OBJS)");
|
|
}
|
|
|
|
foreach my $elem (@{$CTX->{DEPEND}{LIBRARIES}{$key}{LIBRARIES_LIST}}) {
|
|
if (!defined($CTX->{DEPEND}{EXT_LIBS}{$elem})) {
|
|
die("Library[$NAME] depends on unkown External Library[$elem]!\n");
|
|
}
|
|
push(@SHARED_LINK_LIST,@{$CTX->{DEPEND}{EXT_LIBS}{$elem}{LIBS}});
|
|
push(@SHARED_LINK_FLAGS,@{$CTX->{DEPEND}{EXT_LIBS}{$elem}{LDFLAGS}});
|
|
}
|
|
|
|
#
|
|
# set the lists
|
|
#
|
|
$CTX->{OUTPUT}{LIBRARIES}{$key}{NAME} = $NAME;
|
|
@{$CTX->{OUTPUT}{LIBRARIES}{$key}{OBJ_LIST}} = @OBJ_LIST;
|
|
#
|
|
@{$CTX->{OUTPUT}{LIBRARIES}{$key}{DEPEND_LIST}} = @DEPEND_LIST;
|
|
|
|
$CTX->{OUTPUT}{LIBRARIES}{$key}{STATIC_LIBRARY_NAME} = $STATIC_LIBRARY_NAME;
|
|
@{$CTX->{OUTPUT}{LIBRARIES}{$key}{STATIC_LINK_LIST}} = @STATIC_LINK_LIST;
|
|
@{$CTX->{OUTPUT}{LIBRARIES}{$key}{STATIC_LINK_FLAGS}} = @STATIC_LINK_FLAGS;
|
|
|
|
$CTX->{OUTPUT}{LIBRARIES}{$key}{SHARED_LIBRARY_NAME} = $SHARED_LIBRARY_NAME;
|
|
$CTX->{OUTPUT}{LIBRARIES}{$key}{SHARED_LIBRARY_REALNAME} = $SHARED_LIBRARY_REALNAME;
|
|
$CTX->{OUTPUT}{LIBRARIES}{$key}{SHARED_LIBRARY_SONAME} = $SHARED_LIBRARY_SONAME;
|
|
@{$CTX->{OUTPUT}{LIBRARIES}{$key}{SHARED_LINK_LIST}} = @SHARED_LINK_LIST;
|
|
@{$CTX->{OUTPUT}{LIBRARIES}{$key}{SHARED_LINK_FLAGS}} = @SHARED_LINK_FLAGS;
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
sub _generate_binaries($)
|
|
{
|
|
my $CTX = shift;
|
|
|
|
#
|
|
# loop over all binaries
|
|
#
|
|
foreach my $key (sort keys %{$CTX->{DEPEND}{BINARIES}}) {
|
|
my $NAME = $CTX->{INPUT}{BINARIES}{$key}{NAME};
|
|
my @OBJ_LIST = @{$CTX->{INPUT}{BINARIES}{$key}{OBJ_FILES}};
|
|
#
|
|
my $BINARY = $NAME;
|
|
my @DEPEND_LIST = ("\$(BINARY_$NAME\_OBJS)");
|
|
my @LINK_LIST = ("\$(BINARY_$NAME\_OBJS)");
|
|
my @LINK_FLAGS = ();
|
|
|
|
push(@{$CTX->{OUTPUT}{PROTO}{OBJ_LIST}},"\$(BINARY_$key\_OBJS)");
|
|
push(@{$CTX->{OUTPUT}{TARGETS}{ALL}{DEPEND_LIST}},"bin/$BINARY");
|
|
|
|
foreach my $elem (@{$CTX->{DEPEND}{BINARIES}{$key}{SUBSYSTEMS_LIST}}) {
|
|
if (!defined($CTX->{DEPEND}{SUBSYSTEMS}{$elem})) {
|
|
die("Binary[$NAME] depends on unknown Subsystem[$elem]!\n");
|
|
}
|
|
push(@DEPEND_LIST,"\$(SUBSYSTEM_$elem\_OBJS)");
|
|
push(@LINK_LIST,"\$(SUBSYSTEM_$elem\_OBJS)");
|
|
}
|
|
|
|
foreach my $elem (@{$CTX->{DEPEND}{BINARIES}{$key}{LIBRARIES_LIST}}) {
|
|
if (!defined($CTX->{DEPEND}{EXT_LIBS}{$elem})) {
|
|
die("Binary[$NAME] depends on unknown External Library[$elem]!\n");
|
|
}
|
|
push(@LINK_LIST,@{$CTX->{DEPEND}{EXT_LIBS}{$elem}{LIBS}});
|
|
push(@LINK_FLAGS,@{$CTX->{DEPEND}{EXT_LIBS}{$elem}{LDFLAGS}});
|
|
}
|
|
|
|
# Export all symbols...
|
|
push(@LINK_FLAGS,@{$CTX->{BUILD_ENV}{LD}{DYNEXP}});
|
|
|
|
#
|
|
# set the lists
|
|
#
|
|
$CTX->{OUTPUT}{BINARIES}{$key}{NAME} = $NAME;
|
|
@{$CTX->{OUTPUT}{BINARIES}{$key}{OBJ_LIST}} = @OBJ_LIST;
|
|
#
|
|
$CTX->{OUTPUT}{BINARIES}{$key}{BINARY} = $BINARY;
|
|
@{$CTX->{OUTPUT}{BINARIES}{$key}{DEPEND_LIST}} = @DEPEND_LIST;
|
|
@{$CTX->{OUTPUT}{BINARIES}{$key}{LINK_LIST}} = @LINK_LIST;
|
|
@{$CTX->{OUTPUT}{BINARIES}{$key}{LINK_FLAGS}} = @LINK_FLAGS;
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
###########################################################
|
|
# This function generates the output
|
|
#
|
|
# create_output($SMB_BUILD_CTX)
|
|
#
|
|
# $SMB_BUILD_CTX - the global SMB_BUILD context
|
|
sub create_output($)
|
|
{
|
|
my $CTX = shift;
|
|
|
|
$CTX->{OUTPUT}{PROTO} = ();
|
|
@{$CTX->{OUTPUT}{PROTO}{OBJ_LIST}} = ();
|
|
|
|
$CTX->{OUTPUT}{TARGETS}{ALL} = ();
|
|
$CTX->{OUTPUT}{TARGETS}{ALL}{TARGET} = "all";
|
|
@{$CTX->{OUTPUT}{TARGETS}{ALL}{DEPEND_LIST}} = ();
|
|
|
|
_generate_ext_libs($CTX);
|
|
|
|
_generate_subsystems($CTX);
|
|
|
|
_generate_shared_modules($CTX);
|
|
|
|
_generate_libraries($CTX);
|
|
|
|
_generate_binaries($CTX);
|
|
|
|
return;
|
|
}
|