diff options
author | Jelmer Vernooij <jelmer@samba.org> | 2004-11-12 01:40:02 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 13:05:44 -0500 |
commit | ab440ac6f75c12989d5dc15cc75a99e62f35612f (patch) | |
tree | 15375ecfbeee53132b2298aa697e9eead69ed3a4 /source4/build/smb_build/output.pm | |
parent | 79c5d73a71c35f5b16232072a7b52033cb9364cb (diff) | |
download | samba-ab440ac6f75c12989d5dc15cc75a99e62f35612f.tar.gz samba-ab440ac6f75c12989d5dc15cc75a99e62f35612f.tar.bz2 samba-ab440ac6f75c12989d5dc15cc75a99e62f35612f.zip |
r3690: Use perl's 'use' statement to include the build system parts
rather then using "cat"
(This used to be commit 4d018b2b701faa56d7e3bb7634729296b53e0acb)
Diffstat (limited to 'source4/build/smb_build/output.pm')
-rw-r--r-- | source4/build/smb_build/output.pm | 264 |
1 files changed, 264 insertions, 0 deletions
diff --git a/source4/build/smb_build/output.pm b/source4/build/smb_build/output.pm new file mode 100644 index 0000000000..42b4403e73 --- /dev/null +++ b/source4/build/smb_build/output.pm @@ -0,0 +1,264 @@ +########################################################### +### 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}}; + + if ($CTX->{INPUT}{SUBSYSTEMS}{$key}{NOPROTO} ne "YES") { + 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 unknown 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 unknown 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; +} + +1; |