summaryrefslogtreecommitdiff
path: root/source4/build/smb_build/makefile.pm
diff options
context:
space:
mode:
authorJelmer Vernooij <jelmer@samba.org>2004-11-14 13:52:16 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 13:05:47 -0500
commit7367d23713a34a6c29a492adb365292399adffe8 (patch)
tree200c3610aef4c495210599861220dd2d72546805 /source4/build/smb_build/makefile.pm
parentf0b954968c19722b7f42a4bcd367d5f815efdc47 (diff)
downloadsamba-7367d23713a34a6c29a492adb365292399adffe8.tar.gz
samba-7367d23713a34a6c29a492adb365292399adffe8.tar.bz2
samba-7367d23713a34a6c29a492adb365292399adffe8.zip
r3730: More build system fixes and simplifications
the hierarchy in the init functions is correct now will also make it easier to implement some other features (This used to be commit cbe819a75568403ac8850ea4d344c607a46d61c2)
Diffstat (limited to 'source4/build/smb_build/makefile.pm')
-rw-r--r--source4/build/smb_build/makefile.pm242
1 files changed, 73 insertions, 169 deletions
diff --git a/source4/build/smb_build/makefile.pm b/source4/build/smb_build/makefile.pm
index 96225de0ba..21e2100fb2 100644
--- a/source4/build/smb_build/makefile.pm
+++ b/source4/build/smb_build/makefile.pm
@@ -254,7 +254,7 @@ sub array2oneline($)
# $var_ctx->{OBJ_LIST} - the list of objectfiles which sould be linked to this <var>
#
# $output - the resulting output buffer
-sub _prepare_var_obj_list($$)
+sub _prepare_obj_list($$)
{
my $var = shift;
my $ctx = shift;
@@ -312,45 +312,66 @@ sub _prepare_module_obj_list($)
}
###########################################################
-# This function creates a make rule for linking a shared module
+# This function creates a make rule for linking a library
#
-# $output = _prepare_shared_module_rule($module_ctx)
+# $output = _prepare_shared_library_rule($library_ctx)
#
-# $module_ctx - the module context
+# $library_ctx - the library context
+#
+# $library_ctx->{NAME} - the library name
+#
+# $library_ctx->{DEPEND_LIST} - the list of rules on which this library depends
#
-# $module_ctx->{MODULE} - the module binary name
-# $module_ctx->{DEPEND_LIST} - the list of rules on which this module depends
-# $module_ctx->{LINK_LIST} - the list of objectfiles and external libraries
-# which sould be linked to this module
-# $module_ctx->{LINK_FLAGS} - linker flags used by this module
+# $library_ctx->{LIBRARY_NAME} - the shared library name
+# $library_ctx->{LIBRARY_REALNAME} - the shared library real name
+# $library_ctx->{LIBRARY_SONAME} - the shared library soname
+# $library_ctx->{LINK_LIST} - the list of objectfiles and external libraries
+# which sould be linked to this shared library
+# $library_ctx->{LINK_FLAGS} - linker flags used by this shared library
#
# $output - the resulting output buffer
-sub _prepare_shared_module_rule($)
+sub _prepare_shared_library_rule($)
{
my $ctx = shift;
my $tmpdepend;
- my $tmplink;
- my $tmpflag;
+ my $tmpstlink;
+ my $tmpstflag;
+ my $tmpshlink;
+ my $tmpshflag;
+ my $tmprules;
my $output;
$tmpdepend = array2oneperline($ctx->{DEPEND_LIST});
- $tmplink = array2oneperline($ctx->{LINK_LIST});
- $tmpflag = array2oneperline($ctx->{LINK_FLAGS});
+
+ $tmpshlink = array2oneperline($ctx->{LINK_LIST});
+ $tmpshflag = array2oneperline($ctx->{LINK_FLAGS});
$output = "
###################################
-# Start Module $ctx->{MODULE}
-MODULE_$ctx->{NAME}_DEPEND_LIST =$tmpdepend
-MODULE_$ctx->{NAME}_LINK_LIST =$tmplink
-MODULE_$ctx->{NAME}_LINK_FLAGS =$tmpflag
+# Start Library $ctx->{NAME}
+#
+LIBRARY_$ctx->{NAME}_DEPEND_LIST =$tmpdepend
#
-bin/$ctx->{MODULE}: \$(MODULE_$ctx->{NAME}_DEPEND_LIST) bin/.dummy
+LIBRARY_$ctx->{NAME}_SHARED_LINK_LIST =$tmpshlink
+LIBRARY_$ctx->{NAME}_SHARED_LINK_FLAGS =$tmpshflag
+#
+
+# Shared $ctx->{LIBRARY_REALNAME}
+bin/$ctx->{LIBRARY_REALNAME}: \$(LIBRARY_$ctx->{NAME}_DEPEND_LIST) bin/.dummy
\@echo Linking \$\@
\@\$(SHLD) \$(SHLD_FLAGS) -o \$\@ \\
- \$(MODULE_$ctx->{NAME}_LINK_FLAGS) \\
- \$(MODULE_$ctx->{NAME}_LINK_LIST)
-module_$ctx->{MODULE}: basics bin/$ctx->{MODULE}
-# Module $ctx->{MODULE}
+ \$(LIBRARY_$ctx->{NAME}_SHARED_LINK_FLAGS) \\
+ \$(LIBRARY_$ctx->{NAME}_SHARED_LINK_LIST)
+# Symlink $ctx->{LIBRARY_SONAME}
+bin/$ctx->{LIBRARY_SONAME}: bin/$ctx->{LIBRARY_REALNAME} bin/.dummy
+ \@echo Symlink \$\@
+ \@ln -sf $ctx->{LIBRARY_REALNAME} \$\@
+# Symlink $ctx->{_LIBRARY_NAME}
+bin/$ctx->{LIBRARY_NAME}: bin/$ctx->{LIBRARY_SONAME} bin/.dummy
+ \@echo Symlink \$\@
+ \@ln -sf $ctx->{LIBRARY_SONAME} \$\@
+library_$ctx->{NAME}: basics $ctx->{LIBRARY_SONAME}
+# End Library $ctx->{NAME}
###################################
";
@@ -358,28 +379,9 @@ module_$ctx->{MODULE}: basics bin/$ctx->{MODULE}
}
###########################################################
-# This function creates a object file list for a library
-#
-# $output = _prepare_library_obj_and_lib_list($library_ctx)
-#
-# $library_ctx - the library context
-#
-# $library_ctx->{NAME} - the library binary name
-# $library_ctx->{OBJ_LIST} - the list of objectfiles which sould be linked to this library
-#
-# $output - the resulting output buffer
-sub _prepare_library_obj_list($)
-{
- my $ctx = shift;
-
- return _prepare_var_obj_list("LIBRARY",$ctx);
-
-}
-
-###########################################################
# This function creates a make rule for linking a library
#
-# $output = _prepare_library_rule($library_ctx)
+# $output = _prepare_static_library_rule($library_ctx)
#
# $library_ctx - the library context
#
@@ -387,20 +389,13 @@ sub _prepare_library_obj_list($)
#
# $library_ctx->{DEPEND_LIST} - the list of rules on which this library depends
#
-# $library_ctx->{STATIC_LIBRARY_NAME} - the static library name
-# $library_ctx->{STATIC_LINK_LIST} - the list of objectfiles which sould be linked
+# $library_ctx->{LIBRARY_NAME} - the static library name
+# $library_ctx->{LINK_LIST} - the list of objectfiles which sould be linked
# to this static library
-# $library_ctx->{STATIC_LINK_FLAGS} - linker flags used by this static library
-#
-# $library_ctx->{SHARED_LIBRARY_NAME} - the shared library name
-# $library_ctx->{SHARED_LIBRARY_REALNAME} - the shared library real name
-# $library_ctx->{SHARED_LIBRARY_SONAME} - the shared library soname
-# $library_ctx->{SHARED_LINK_LIST} - the list of objectfiles and external libraries
-# which sould be linked to this shared library
-# $library_ctx->{SHARED_LINK_FLAGS} - linker flags used by this shared library
+# $library_ctx->{LINK_FLAGS} - linker flags used by this static library
#
# $output - the resulting output buffer
-sub _prepare_library_rule($)
+sub _prepare_static_library_rule($)
{
my $ctx = shift;
my $tmpdepend;
@@ -413,13 +408,10 @@ sub _prepare_library_rule($)
$tmpdepend = array2oneperline($ctx->{DEPEND_LIST});
- $tmpstlink = array2oneperline($ctx->{STATIC_LINK_LIST});
- $tmpstflag = array2oneperline($ctx->{STATIC_LINK_FLAGS});
+ $tmpstlink = array2oneperline($ctx->{LINK_LIST});
+ $tmpstflag = array2oneperline($ctx->{LINK_FLAGS});
- $tmpshlink = array2oneperline($ctx->{SHARED_LINK_LIST});
- $tmpshflag = array2oneperline($ctx->{SHARED_LINK_FLAGS});
-
- $tmprules = "bin/$ctx->{STATIC_LIBRARY_NAME}";
+ $tmprules = "bin/$ctx->{LIBRARY_NAME}";
$output = "
###################################
@@ -430,38 +422,13 @@ LIBRARY_$ctx->{NAME}_DEPEND_LIST =$tmpdepend
LIBRARY_$ctx->{NAME}_STATIC_LINK_LIST =$tmpstlink
LIBRARY_$ctx->{NAME}_STATIC_LINK_FLAGS =$tmpstflag
#
-LIBRARY_$ctx->{NAME}_SHARED_LINK_LIST =$tmpshlink
-LIBRARY_$ctx->{NAME}_SHARED_LINK_FLAGS =$tmpshflag
-#
-# Static $ctx->{STATIC_LIBRARY_NAME}
-bin/$ctx->{STATIC_LIBRARY_NAME}: \$(LIBRARY_$ctx->{NAME}_DEPEND_LIST) bin/.dummy
+# Static $ctx->{LIBRARY_NAME}
+bin/$ctx->{LIBRARY_NAME}: \$(LIBRARY_$ctx->{NAME}_DEPEND_LIST) bin/.dummy
\@echo Linking \$\@
\@\$(STLD) \$(STLD_FLAGS) \$\@ \\
\$(LIBRARY_$ctx->{NAME}_STATIC_LINK_FLAGS) \\
\$(LIBRARY_$ctx->{NAME}_STATIC_LINK_LIST)
-";
-
- if (defined($ctx->{SHARED_LIBRARY_NAME})) {
- $output .= "
-# Shared $ctx->{SHARED_LIBRARY_REALNAME}
-bin/$ctx->{SHARED_LIBRARY_REALNAME}: \$(LIBRARY_$ctx->{NAME}_DEPEND_LIST) bin/.dummy
- \@echo Linking \$\@
- \@\$(SHLD) \$(SHLD_FLAGS) -o \$\@ \\
- \$(LIBRARY_$ctx->{NAME}_SHARED_LINK_FLAGS) \\
- \$(LIBRARY_$ctx->{NAME}_SHARED_LINK_LIST)
-# Symlink $ctx->{SHARED_LIBRARY_SONAME}
-bin/$ctx->{SHARED_LIBRARY_SONAME}: bin/$ctx->{SHARED_LIBRARY_REALNAME} bin/.dummy
- \@echo Symlink \$\@
- \@ln -sf $ctx->{SHARED_LIBRARY_REALNAME} \$\@
-# Symlink $ctx->{SHARED_LIBRARY_NAME}
-bin/$ctx->{SHARED_LIBRARY_NAME}: bin/$ctx->{SHARED_LIBRARY_SONAME} bin/.dummy
- \@echo Symlink \$\@
- \@ln -sf $ctx->{SHARED_LIBRARY_SONAME} \$\@
-";
- $tmprules .= " bin/$ctx->{SHARED_LIBRARY_NAME}"
- }
- $output .= "
library_$ctx->{NAME}: basics $tmprules
# End Library $ctx->{NAME}
###################################
@@ -470,24 +437,7 @@ library_$ctx->{NAME}: basics $tmprules
return $output;
}
-###########################################################
-# This function creates a object file list for a binary
-#
-# $output = _prepare_binary_obj_and_lib_list($binary_ctx)
-#
-# $binary_ctx - the binary context
-#
-# $binary_ctx->{NAME} - the binary name
-# $binary_ctx->{OBJ_LIST} - the list of objectfiles which sould be linked to this binary
-#
-# $output - the resulting output buffer
-sub _prepare_binary_obj_list($)
-{
- my $ctx = shift;
- return _prepare_var_obj_list("BINARY",$ctx);
-
-}
###########################################################
# This function creates a make rule for linking a binary
@@ -538,35 +488,6 @@ binary_$ctx->{BINARY}: basics bin/$ctx->{BINARY}
return $output;
}
-###########################################################
-# This function creates a object file list for make proto
-#
-# $output = _prepare_proto_obj_list($proto_ctx)
-#
-# $proto_ctx - the proto context
-
-# $proto_ctx->{OBJ_LIST} - the list of objectfiles which sould be scanned by make proto
-#
-# $output - the resulting output buffer
-sub _prepare_proto_obj_list($)
-{
- my $ctx = shift;
- my $tmplist;
- my $output;
-
- $tmplist = array2oneperline($ctx->{OBJ_LIST});
-
- $output = "
-###################################
-# Start PROTO OBJ LIST
-PROTO_OBJS =$tmplist
-# End PROTO OBJ LIST
-###################################
-";
-
- return $output;
-}
-
sub _prepare_proto_rules()
{
my $output = "";
@@ -584,7 +505,7 @@ delheaders: pch_clean
include/proto.h:
\@cd \$(srcdir) && \$(SHELL) script/mkproto.sh \"\$(PERL)\" \\
-h _PROTO_H_ \$(builddir)/include/proto.h \\
- \$(PROTO_OBJS)
+ \$(PROTO_PROTO_OBJS)
include/build_env.h:
\@echo Building include/build_env.h
@@ -648,24 +569,11 @@ sub _prepare_obj_lists($)
my $CTX = shift;
my $output = "";
- foreach my $key (sort keys %{$CTX->{OUTPUT}{SUBSYSTEMS}}) {
- $output .= _prepare_subsystem_obj_list(\%{$CTX->{OUTPUT}{SUBSYSTEMS}{$key}});
- }
-
- foreach my $key (sort keys %{$CTX->{OUTPUT}{SHARED_MODULES}}) {
- $output .= _prepare_module_obj_list(\%{$CTX->{OUTPUT}{SHARED_MODULES}{$key}});
- }
-
- foreach my $key (sort keys %{$CTX->{OUTPUT}{LIBRARIES}}) {
- $output .= _prepare_library_obj_list(\%{$CTX->{OUTPUT}{LIBRARIES}{$key}});
+ foreach my $key (values %{$CTX}) {
+ next if not defined($key->{OBJ_LIST});
+ $output .= _prepare_obj_list($key->{TYPE}, $key);
}
- foreach my $key (sort keys %{$CTX->{OUTPUT}{BINARIES}}) {
- $output .= _prepare_binary_obj_list(\%{$CTX->{OUTPUT}{BINARIES}{$key}});
- }
-
- $output .= _prepare_proto_obj_list(\%{$CTX->{OUTPUT}{PROTO}});
-
return $output;
}
@@ -820,19 +728,14 @@ ctags:
sub _prepare_rule_lists($)
{
- my $CTX = shift;
+ my $depend = shift;
my $output = "";
- foreach my $key (sort keys %{$CTX->{OUTPUT}{SHARED_MODULES}}) {
- $output .= _prepare_shared_module_rule(\%{$CTX->{OUTPUT}{SHARED_MODULES}{$key}});
- }
-
- foreach my $key (sort keys %{$CTX->{OUTPUT}{LIBRARIES}}) {
- $output .= _prepare_library_rule(\%{$CTX->{OUTPUT}{LIBRARIES}{$key}});
- }
-
- foreach my $key (sort keys %{$CTX->{OUTPUT}{BINARIES}}) {
- $output .= _prepare_binary_rule(\%{$CTX->{OUTPUT}{BINARIES}{$key}});
+ foreach my $key (values %{$depend}) {
+ next if not defined $key->{OUTPUT_TYPE};
+ ($output .= _prepare_static_library_rule($key)) if $key->{OUTPUT_TYPE} eq "STATIC_LIBRARY";
+ ($output .= _prepare_shared_library_rule($key)) if $key->{OUTPUT_TYPE} eq "SHARED_LIBRARY";
+ ($output .= _prepare_binary_rule($key)) if $key->{OUTPUT_TYPE} eq "BINARY";
}
my $idl_ctx;
@@ -840,7 +743,7 @@ sub _prepare_rule_lists($)
$output .= _prepare_proto_rules();
- $output .= _prepare_install_rules($CTX);
+ $output .= _prepare_install_rules($depend);
return $output;
}
@@ -886,7 +789,13 @@ sub _prepare_makefile_in($)
$output .= _prepare_rule_lists($CTX);
- $output .= _prepare_make_target(\%{$CTX->{OUTPUT}{TARGETS}{ALL}});
+ my @all = ();
+
+ foreach my $part (values %{$CTX}) {
+ push (@all, $part->{OUTPUT}) if defined ($part->{OUTPUT_TYPE}) and $part->{OUTPUT_TYPE} eq "BINARY";
+ }
+
+ $output .= _prepare_make_target({ TARGET => "all", DEPEND_LIST => \@all });
return $output;
}
@@ -903,14 +812,9 @@ sub _prepare_makefile_in($)
sub create_makefile_in($)
{
my $CTX = shift;
- my $output;
-
- $output = _prepare_makefile_in($CTX);
open(MAKEFILE_IN,"> Makefile.in") || die ("Can't open Makefile.in\n");
-
- print MAKEFILE_IN $output;
-
+ print MAKEFILE_IN _prepare_makefile_in($CTX);
close(MAKEFILE_IN);
print "config.smb_build.pl: creating Makefile.in\n";