svn commit: samba r26067 - in branches/SAMBA_4_0: .
source/build/smb_build
jelmer at samba.org
jelmer at samba.org
Wed Nov 21 11:10:46 GMT 2007
Author: jelmer
Date: 2007-11-21 11:10:45 +0000 (Wed, 21 Nov 2007)
New Revision: 26067
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=26067
Log:
Merge improvements building Python modules.
Modified:
branches/SAMBA_4_0/
branches/SAMBA_4_0/source/build/smb_build/config_mk.pm
branches/SAMBA_4_0/source/build/smb_build/input.pm
branches/SAMBA_4_0/source/build/smb_build/main.pl
branches/SAMBA_4_0/source/build/smb_build/makefile.pm
branches/SAMBA_4_0/source/build/smb_build/output.pm
Changeset:
Property changes on: branches/SAMBA_4_0
___________________________________________________________________
Name: bzr:revision-info
...skipped...
Name: bzr:revision-id:v3-trunk0
...skipped...
Modified: branches/SAMBA_4_0/source/build/smb_build/config_mk.pm
===================================================================
--- branches/SAMBA_4_0/source/build/smb_build/config_mk.pm 2007-11-20 15:50:08 UTC (rev 26066)
+++ branches/SAMBA_4_0/source/build/smb_build/config_mk.pm 2007-11-21 11:10:45 UTC (rev 26067)
@@ -19,6 +19,14 @@
"CPPFLAGS" => "list",
"LDFLAGS" => "list",
},
+ "PYTHON" => {
+ SWIG_FILE => "string",
+ "PRIVATE_DEPENDENCIES" => "list",
+ "PUBLIC_DEPENDENCIES" => "list",
+ "OBJ_FILES" => "list",
+ "ENABLE" => "bool",
+ "LDFLAGS" => "list",
+ },
"SUBSYSTEM" => {
"OBJ_FILES" => "list",
@@ -80,6 +88,7 @@
"LIBRARY_REALNAME" => "string",
"INIT_FUNCTION_TYPE" => "string",
+ "OUTPUT_TYPE" => "list",
"OBJ_FILES" => "list",
Modified: branches/SAMBA_4_0/source/build/smb_build/input.pm
===================================================================
--- branches/SAMBA_4_0/source/build/smb_build/input.pm 2007-11-20 15:50:08 UTC (rev 26066)
+++ branches/SAMBA_4_0/source/build/smb_build/input.pm 2007-11-21 11:10:45 UTC (rev 26067)
@@ -8,6 +8,7 @@
use smb_build::config;
use strict;
package smb_build::input;
+use File::Basename;
my $srcdir = $config::config{srcdir};
@@ -115,7 +116,9 @@
return if ($lib->{ENABLE} ne "YES");
- $lib->{OUTPUT_TYPE} = $default_ot;
+ unless (defined($lib->{OUTPUT_TYPE})) {
+ $lib->{OUTPUT_TYPE} = $default_ot;
+ }
if (defined($lib->{VERSION}) and not defined($lib->{SO_VERSION})) {
print "$lib->{NAME}: Please specify SO_VERSION when specifying VERSION\n";
@@ -131,10 +134,34 @@
$lib->{INIT_FUNCTION_TYPE} = "NTSTATUS (*) (void)";
}
- $lib->{INSTALLDIR} = "LIBDIR";
+ unless(defined($lib->{INSTALLDIR})) {
+ $lib->{INSTALLDIR} = "LIBDIR";
+ }
add_libreplace($lib);
}
+sub check_python($$)
+{
+ my ($INPUT, $python) = @_;
+
+ $python->{INSTALLDIR} = "PYTHONDIR";
+ push (@{$python->{PUBLIC_DEPENDENCIES}}, "LIBPYTHON");
+ 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"];
+ $python->{LIBRARY_REALNAME} = "_$basename.\$(SHLIBEXT)";
+ $python->{PYTHON_FILES} = ["$dirname/$basename.py"];
+ } else {
+ my $basename = $python->{NAME};
+ $basename =~ s/^python_//g;
+ $python->{LIBRARY_REALNAME} = "$basename.\$(SHLIBEXT)";
+ }
+
+ check_library($INPUT, $python, ["SHARED_LIBRARY"]);
+}
+
sub check_binary($$)
{
my ($INPUT, $bin) = @_;
@@ -235,10 +262,20 @@
$part->{LINK_FLAGS} = [];
$part->{FULL_OBJ_LIST} = ["\$($part->{TYPE}_$part->{NAME}_OBJ_LIST)"];
- check_subsystem($INPUT, $part, $subsys_ot) if ($part->{TYPE} eq "SUBSYSTEM");
- check_module($INPUT, $part, $module_ot) if ($part->{TYPE} eq "MODULE");
- check_library($INPUT, $part, $lib_ot) if ($part->{TYPE} eq "LIBRARY");
- check_binary($INPUT, $part) if ($part->{TYPE} eq "BINARY");
+ if ($part->{TYPE} eq "SUBSYSTEM") {
+ check_subsystem($INPUT, $part, $subsys_ot);
+ } elsif ($part->{TYPE} eq "MODULE") {
+ check_module($INPUT, $part, $module_ot);
+ } elsif ($part->{TYPE} eq "LIBRARY") {
+ check_library($INPUT, $part, $lib_ot);
+ } elsif ($part->{TYPE} eq "BINARY") {
+ check_binary($INPUT, $part);
+ } elsif ($part->{TYPE} eq "PYTHON") {
+ check_python($INPUT, $part);
+ } elsif ($part->{TYPE} eq "EXT_LIB") {
+ } else {
+ die("Unknown type $part->{TYPE}");
+ }
}
foreach my $part (values %$INPUT) {
Modified: branches/SAMBA_4_0/source/build/smb_build/main.pl
===================================================================
--- branches/SAMBA_4_0/source/build/smb_build/main.pl 2007-11-20 15:50:08 UTC (rev 26066)
+++ branches/SAMBA_4_0/source/build/smb_build/main.pl 2007-11-21 11:10:45 UTC (rev 26067)
@@ -62,7 +62,8 @@
$mkenv->StaticLibrary($key) if grep(/STATIC_LIBRARY/, @{$key->{OUTPUT_TYPE}});
$mkenv->PkgConfig($key, $OUTPUT) if $key->{TYPE} eq "LIBRARY"
and defined($key->{VERSION});
- $mkenv->SharedLibrary($key) if $key->{TYPE} eq "LIBRARY" and
+ $mkenv->SharedLibrary($key) if ($key->{TYPE} eq "LIBRARY" or
+ $key->{TYPE} eq "PYTHON") and
grep(/SHARED_LIBRARY/, @{$key->{OUTPUT_TYPE}});
if ($key->{TYPE} eq "LIBRARY" and
${$key->{OUTPUT_TYPE}}[0] eq "SHARED_LIBRARY") {
@@ -71,6 +72,7 @@
$mkenv->SharedModule($key) if $key->{TYPE} eq "MODULE" and
grep(/SHARED_LIBRARY/, @{$key->{OUTPUT_TYPE}});
$mkenv->Binary($key) if grep(/BINARY/, @{$key->{OUTPUT_TYPE}});
+ $mkenv->PythonFiles($key) if defined($key->{PYTHON_FILES});
$mkenv->Manpage($key) if defined($key->{MANPAGE});
$mkenv->Header($key) if defined($key->{PUBLIC_HEADERS});
$mkenv->ProtoHeader($key) if defined($key->{PRIVATE_PROTO_HEADER}) or
Modified: branches/SAMBA_4_0/source/build/smb_build/makefile.pm
===================================================================
--- branches/SAMBA_4_0/source/build/smb_build/makefile.pm 2007-11-20 15:50:08 UTC (rev 26066)
+++ branches/SAMBA_4_0/source/build/smb_build/makefile.pm 2007-11-21 11:10:45 UTC (rev 26067)
@@ -7,6 +7,7 @@
package smb_build::makefile;
use smb_build::env;
+use File::Basename;
use strict;
use base 'smb_build::env';
@@ -24,6 +25,7 @@
$self->{bin_progs} = [];
$self->{torture_progs} = [];
$self->{static_libs} = [];
+ $self->{python_dsos} = [];
$self->{shared_libs} = [];
$self->{installable_shared_libs} = [];
$self->{headers} = [];
@@ -180,6 +182,7 @@
SHELL=$self->{config}->{SHELL}
PERL=$self->{config}->{PERL}
+PYTHON=$self->{config}->{PYTHON}
CPP=$self->{config}->{CPP}
CPPFLAGS=$builddir_headers-I\$(srcdir)/include -I\$(srcdir) -I\$(srcdir)/lib -I\$(srcdir)/lib/replace -I\$(srcdir)/lib/talloc -D_SAMBA_BUILD_=4 -DHAVE_CONFIG_H $self->{config}->{CPPFLAGS}
@@ -393,6 +396,11 @@
$self->_prepare_list($ctx, "LINK_FLAGS");
# $self->_prepare_list_ex($ctx, "LINK_FLAGS", "-Wl,--whole-archive", "-Wl,--no-whole-archive");
+ if ($ctx->{TYPE} eq "PYTHON") {
+ push (@{$self->{python_dsos}},
+ "$ctx->{SHAREDDIR}/$ctx->{LIBRARY_REALNAME}");
+ }
+
push(@{$self->{all_objs}}, "\$($ctx->{TYPE}_$ctx->{NAME}_FULL_OBJ_LIST)");
my $soarg = "";
@@ -519,6 +527,18 @@
}
}
+sub PythonFiles($$)
+{
+ my ($self,$ctx) = @_;
+
+ foreach (@{$ctx->{PYTHON_FILES}}) {
+ my $target = "bin/python/".basename($_);
+ $self->output("$target: $ctx->{BASEDIR}/$_\n" .
+ "\tcp $ctx->{BASEDIR}/$_ \$@\n\n");
+ push (@{$self->{python_dsos}}, $target);
+ }
+}
+
sub Manpage($$)
{
my ($self,$ctx) = @_;
@@ -672,6 +692,7 @@
$self->output("BINARIES = " . array2oneperline($self->{binaries}) . "\n");
$self->output("STATIC_LIBS = " . array2oneperline($self->{static_libs}) . "\n");
$self->output("SHARED_LIBS = " . array2oneperline($self->{shared_libs}) . "\n");
+ $self->output("PYTHON_DSOS = " . array2oneperline($self->{python_dsos}) . "\n");
$self->output("INSTALLABLE_SHARED_LIBS = " . array2oneperline($self->{installable_shared_libs}) . "\n");
$self->output("PUBLIC_HEADERS = " . array2oneperline($self->{headers}) . "\n");
$self->output("PC_FILES = " . array2oneperline($self->{pc_files}) . "\n");
Modified: branches/SAMBA_4_0/source/build/smb_build/output.pm
===================================================================
--- branches/SAMBA_4_0/source/build/smb_build/output.pm 2007-11-20 15:50:08 UTC (rev 26066)
+++ branches/SAMBA_4_0/source/build/smb_build/output.pm 2007-11-21 11:10:45 UTC (rev 26067)
@@ -49,9 +49,10 @@
$lib_name = "lib$link_name";
}
- if (defined($lib->{LIBRARY_REALNAME})) {
+ if ($lib->{TYPE} eq "PYTHON") {
+ $lib->{SHAREDDIR} = "bin/python";
+ } elsif (defined($lib->{LIBRARY_REALNAME})) {
$lib->{BASEDIR} =~ s/^\.\///g;
- $lib->{LIBRARY_REALNAME} = "$lib->{LIBRARY_REALNAME}";
$lib->{SHAREDDIR} = $lib->{BASEDIR};
} else {
if ($lib->{TYPE} eq "MODULE") {
More information about the samba-cvs
mailing list