r15304: Fix smbd build, more updates on getting --enable-dso to build again
[samba.git] / source / build / smb_build / output.pm
index a53a9263f9772c4724b53e667f1d1b886d90649e..85c78cf3b46278376b16755742fd187a6552185b 100644 (file)
@@ -16,37 +16,24 @@ sub add_dir($$)
        $dir =~ s/^\.\///g;
        
        foreach (@$files) {
-               $_ = "$dir/$_";
-               s/([^\/\.]+)\/\.\.\///g;
+               if (substr($_, 0, 1) ne "\$") {
+                       $_ = "$dir/$_";
+                       s/([^\/\.]+)\/\.\.\///g;
+               }
                push (@ret, $_);
        }
        
        return @ret;
 }
 
-sub generate_mergedobj($)
-{
-       my $subsys = shift;
-
-       $subsys->{OUTPUT} = $subsys->{TARGET} = "bin/subsystems/$subsys->{TYPE}_$subsys->{NAME}.o";
-}
-
-sub generate_objlist($)
-{
-       my $subsys = shift;
-
-       $subsys->{TARGET} = "bin/.$subsys->{TYPE}_$subsys->{NAME}";
-       $subsys->{OUTPUT} = "\$($subsys->{TYPE}_$subsys->{NAME}_OBJ_LIST)";
-}
-
 sub generate_shared_library($)
 {
        my $lib = shift;
        my $link_name;
        my $lib_name;
 
-       @{$lib->{DEPEND_LIST}} = ();
-       @{$lib->{LINK_LIST}} = ("\$($lib->{TYPE}_$lib->{NAME}\_OBJ_LIST)");
+       $lib->{DEPEND_LIST} = [];
+       push(@{$lib->{LINK_FLAGS}}, "\$($lib->{TYPE}_$lib->{NAME}\_OBJ_LIST)");
 
        $link_name = lc($lib->{NAME});
        $lib_name = $link_name;
@@ -77,8 +64,8 @@ sub generate_shared_library($)
        }
 
        if (defined($lib->{VERSION})) {
-               $lib->{LIBRARY_SONAME} = $lib->{LIBRARY_REALNAME}.".$lib->{SO_VERSION}";
-               $lib->{LIBRARY_REALNAME} = $lib->{LIBRARY_REALNAME}.".$lib->{VERSION}";
+               $lib->{LIBRARY_SONAME} = "$lib->{LIBRARY_REALNAME}.$lib->{SO_VERSION}";
+               $lib->{LIBRARY_REALNAME} = "$lib->{LIBRARY_REALNAME}.$lib->{VERSION}";
        } 
        
        $lib->{TARGET} = "$lib->{DEBUGDIR}/$lib->{LIBRARY_REALNAME}";
@@ -90,14 +77,13 @@ sub generate_static_library($)
        my $lib = shift;
        my $link_name;
 
-       @{$lib->{DEPEND_LIST}} = ();
+       $lib->{DEPEND_LIST} = [];
 
        $link_name = $lib->{NAME};
        $link_name =~ s/^LIB//;
 
        $lib->{LIBRARY_NAME} = "lib".lc($link_name).".a";
-       @{$lib->{LINK_LIST}} = ("\$($lib->{TYPE}_$lib->{NAME}\_OBJ_LIST)");
-       @{$lib->{LINK_FLAGS}} = ();
+       push(@{$lib->{LINK_FLAGS}}, "\$($lib->{TYPE}_$lib->{NAME}\_OBJ_LIST)");
 
        $lib->{TARGET} = "bin/$lib->{LIBRARY_NAME}";
        $lib->{OUTPUT} = "-l".lc($link_name);
@@ -107,9 +93,8 @@ sub generate_binary($)
 {
        my $bin = shift;
 
-       @{$bin->{DEPEND_LIST}} = ();
-       @{$bin->{LINK_LIST}} = ("\$($bin->{TYPE}_$bin->{NAME}\_OBJ_LIST)");
-       @{$bin->{LINK_FLAGS}} = ();
+       $bin->{DEPEND_LIST} = [];
+       push(@{$bin->{LINK_FLAGS}}, "\$($bin->{TYPE}_$bin->{NAME}\_OBJ_LIST)");
 
        $bin->{RELEASEDIR} = "bin/install";
        $bin->{DEBUGDIR} = "bin/";
@@ -117,28 +102,19 @@ sub generate_binary($)
        $bin->{BINARY} = $bin->{NAME};
 }
 
+
 sub create_output($$)
 {
        my ($depend, $config) = @_;
        my $part;
 
        foreach $part (values %{$depend}) {
-               next if not defined($part->{OUTPUT_TYPE});
+               next unless(defined($part->{OUTPUT_TYPE}));
 
                # Combine object lists
-               push(@{$part->{OBJ_LIST}}, add_dir($part->{BASEDIR}, $part->{INIT_OBJ_FILES})) if defined($part->{INIT_OBJ_FILES});
-               push(@{$part->{OBJ_LIST}}, add_dir($part->{BASEDIR}, $part->{ADD_OBJ_FILES})) if defined($part->{ADD_OBJ_FILES});
                push(@{$part->{OBJ_LIST}}, add_dir($part->{BASEDIR}, $part->{OBJ_FILES})) if defined($part->{OBJ_FILES});
 
-               if ((not defined($part->{OBJ_LIST}) or 
-                       scalar(@{$part->{OBJ_LIST}}) == 0) and 
-                       $part->{OUTPUT_TYPE} eq "MERGEDOBJ") {
-                       $part->{OUTPUT_TYPE} = "OBJLIST";
-               }
-
                generate_binary($part) if $part->{OUTPUT_TYPE} eq "BINARY";
-               generate_mergedobj($part) if $part->{OUTPUT_TYPE} eq "MERGEDOBJ";
-               generate_objlist($part) if $part->{OUTPUT_TYPE} eq "OBJLIST";
                generate_shared_library($part) if $part->{OUTPUT_TYPE} eq "SHARED_LIBRARY";
                generate_static_library($part) if $part->{OUTPUT_TYPE} eq "STATIC_LIBRARY";
 
@@ -147,7 +123,8 @@ sub create_output($$)
        foreach $part (values %{$depend}) {
                next if not defined($part->{OUTPUT_TYPE});
 
-               foreach my $elem (values %{$part->{UNIQUE_DEPENDENCIES_ALL}}) {
+               foreach (@{$part->{UNIQUE_DEPENDENCIES_ALL}}) {
+                       my $elem = $depend->{$_};
                        next if $elem == $part;
 
                        push(@{$part->{PUBLIC_CFLAGS}}, @{$elem->{CPPFLAGS}}) if defined(@{$elem->{CPPFLAGS}});
@@ -156,10 +133,11 @@ sub create_output($$)
 
 
                # Always import the CFLAGS and CPPFLAGS of the unique dependencies
-               foreach my $elem (values %{$part->{UNIQUE_DEPENDENCIES}}) {
+               foreach (@{$part->{UNIQUE_DEPENDENCIES}}) {
+                       my $elem = $depend->{$_};
                        next if $elem == $part;
 
-                       push(@{$part->{LINK_LIST}}, $elem->{OUTPUT}) if defined($elem->{OUTPUT});
+                       push(@{$part->{LINK_FLAGS}}, $elem->{OUTPUT}) if defined($elem->{OUTPUT});
                        push(@{$part->{LINK_FLAGS}}, @{$elem->{LIBS}}) if defined($elem->{LIBS});
                        push(@{$part->{LINK_FLAGS}},@{$elem->{LDFLAGS}}) if defined($elem->{LDFLAGS});
                        push(@{$part->{DEPEND_LIST}}, $elem->{TARGET}) if defined($elem->{TARGET});
@@ -175,6 +153,7 @@ sub create_output($$)
                }
        }
 
+
        return $depend;
 }