1
0
mirror of https://github.com/samba-team/samba.git synced 2025-02-04 17:47:26 +03:00
Stefan Metzmacher 6e14c2cc00 r1073: import DYNEXP flags to smb_build
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)
2007-10-10 12:56:36 -05:00

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;
}