summaryrefslogtreecommitdiff
path: root/source4/build/smb_build/output.pm
diff options
context:
space:
mode:
authorJelmer Vernooij <jelmer@samba.org>2004-11-12 01:40:02 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 13:05:44 -0500
commitab440ac6f75c12989d5dc15cc75a99e62f35612f (patch)
tree15375ecfbeee53132b2298aa697e9eead69ed3a4 /source4/build/smb_build/output.pm
parent79c5d73a71c35f5b16232072a7b52033cb9364cb (diff)
downloadsamba-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.pm264
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;