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}/$_ [EMAIL PROTECTED]"); + 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") {
