python: Build shared python modules for generic use.
[ira/wip.git] / source / build / smb_build / input.pm
index c8df840accaa3bd249f105cd54fbf1d409c5b8ab..0b26aee65e37319dc539283766301b8f87df5604 100644 (file)
@@ -63,6 +63,10 @@ sub check_subsystem($$$)
        unless(defined($subsys->{OUTPUT_TYPE})) {
                $subsys->{OUTPUT_TYPE} = $default_ot;
        }
+
+       unless (defined($subsys->{INIT_FUNCTION_TYPE})) { $subsys->{INIT_FUNCTION_TYPE} = "NTSTATUS (*) (void)"; }
+       unless (defined($subsys->{INIT_FUNCTION_SENTINEL})) { $subsys->{INIT_FUNCTION_SENTINEL} = "NULL"; }
+
        add_libreplace($subsys);
 }
 
@@ -108,6 +112,7 @@ sub check_module($$$)
                my $sane_subsystem = lc($mod->{SUBSYSTEM});
                $sane_subsystem =~ s/^lib//;
                $mod->{INSTALLDIR} = "MODULESDIR/$sane_subsystem";
+               push (@{$mod->{PUBLIC_DEPENDENCIES}}, $mod->{SUBSYSTEM});
        } 
        if (grep(/INTEGRATED/, @{$mod->{OUTPUT_TYPE}})) {
                push (@{$INPUT->{$mod->{SUBSYSTEM}}{INIT_FUNCTIONS}}, $mod->{INIT_FUNCTION}) if defined($mod->{INIT_FUNCTION});
@@ -135,9 +140,9 @@ sub check_library($$$)
                return;
        }
 
-       unless (defined($lib->{INIT_FUNCTION_TYPE})) {
-               $lib->{INIT_FUNCTION_TYPE} = "NTSTATUS (*) (void)";
-       }
+       unless (defined($lib->{INIT_FUNCTION_TYPE})) { $lib->{INIT_FUNCTION_TYPE} = "NTSTATUS (*) (void)"; }
+
+       unless (defined($lib->{INIT_FUNCTION_SENTINEL})) { $lib->{INIT_FUNCTION_SENTINEL} = "NULL"; }
 
        unless(defined($lib->{INSTALLDIR})) {
                $lib->{INSTALLDIR} = "LIBDIR";
@@ -146,28 +151,38 @@ sub check_library($$$)
        add_libreplace($lib);
 }
 
-sub check_python($$)
+sub check_python($$$)
 {
-       my ($INPUT, $python) = @_;
+       my ($INPUT, $python, $default_ot) = @_;
+
+       return if ($INPUT->{LIBPYTHON}{ENABLE} ne "YES");
 
        $python->{INSTALLDIR} = "PYTHONDIR";
-       push (@{$python->{PUBLIC_DEPENDENCIES}}, "LIBPYTHON");
+       unless (defined($python->{CFLAGS})) { $python->{CFLAGS} = []; }
        if (defined($python->{SWIG_FILE})) {
                my $dirname = dirname($python->{SWIG_FILE});
                my $basename = basename($python->{SWIG_FILE}, ".i");
 
-               $python->{OBJ_FILES} = ["$dirname/$basename\_wrap.o"];
+               $dirname .= "/" unless $dirname =~ /\/$/;
+               $dirname = "" if $dirname eq "./";
+
+               $python->{OBJ_FILES} = ["$dirname$basename\_wrap.o"];
                $python->{LIBRARY_REALNAME} = "_$basename.\$(SHLIBEXT)";
-               $python->{PYTHON_FILES} = ["$dirname/$basename.py"];
+               $python->{PYTHON_FILES} = ["$dirname$basename.py"];
+               push (@{$python->{CFLAGS}}, $config::config{CFLAG_NO_UNUSED_MACROS});
+               push (@{$python->{CFLAGS}}, $config::config{CFLAG_NO_CAST_QUAL});
+               $python->{INIT_FUNCTION} = "{ (char *)\"_$basename\", init_$basename }";
        } else {
                my $basename = $python->{NAME};
                $basename =~ s/^python_//g;
                $python->{LIBRARY_REALNAME} = "$basename.\$(SHLIBEXT)";
+               $python->{INIT_FUNCTION} = "{ (char *)\"$basename\", init$basename }";
        }
+       push (@{$python->{CFLAGS}}, @{$INPUT->{EXT_LIB_PYTHON}->{CFLAGS}});
 
        $python->{SUBSYSTEM} = "LIBPYTHON";
 
-       check_module($INPUT, $python, ["SHARED_LIBRARY"]);
+       check_module($INPUT, $python, ["SHARED_LIBRARY", "STATIC_LIBRARY"]);
 }
 
 sub check_binary($$)
@@ -195,7 +210,8 @@ sub import_integrated($$)
 
                push (@{$lib->{FULL_OBJ_LIST}}, "\$($mod->{TYPE}_$mod->{NAME}_FULL_OBJ_LIST)");
                push (@{$lib->{LINK_FLAGS}}, "\$($mod->{TYPE}_$mod->{NAME}_LINK_FLAGS)");
-               push (@{$lib->{PRIVATE_DEPENDENCIES}}, @{$mod->{PUBLIC_DEPENDENCIES}}) if defined($mod->{PUBLIC_DEPENDENCIES});
+               push (@{$lib->{CFLAGS}}, @{$mod->{CFLAGS}}) if defined($mod->{CFLAGS});
+               push (@{$lib->{PUBLIC_DEPENDENCIES}}, @{$mod->{PUBLIC_DEPENDENCIES}}) if defined($mod->{PUBLIC_DEPENDENCIES});
                push (@{$lib->{PRIVATE_DEPENDENCIES}}, @{$mod->{PRIVATE_DEPENDENCIES}}) if defined($mod->{PRIVATE_DEPENDENCIES});
 
                $mod->{ENABLE} = "NO";
@@ -279,7 +295,7 @@ sub check($$$$$)
                } elsif ($part->{TYPE} eq "BINARY") {
                        check_binary($INPUT, $part);
                } elsif ($part->{TYPE} eq "PYTHON") {
-                       check_python($INPUT, $part);
+                       check_python($INPUT, $part, $module_ot);
                } elsif ($part->{TYPE} eq "EXT_LIB") {
                } else {
                        die("Unknown type $part->{TYPE}");