You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
224 lines
5.8 KiB
224 lines
5.8 KiB
package ksb::l10nSystem; |
|
|
|
# This class is an implementation of both the source and build interfaces needed to |
|
# support building KDE l10n modules. |
|
|
|
use strict; |
|
use warnings; |
|
use 5.014; |
|
|
|
our $VERSION = '0.10'; |
|
|
|
use ksb::Debug; |
|
use ksb::Util; |
|
use ksb::Updater::Svn; |
|
use ksb::BuildSystem; |
|
|
|
our @ISA = ('ksb::Updater::Svn', 'ksb::BuildSystem'); |
|
|
|
sub new |
|
{ |
|
my ($class, $module) = @_; |
|
|
|
# Ensure associated module updates from the proper svn path. |
|
# TODO: Support different localization branches? |
|
|
|
$module->setOption('module-base-path', 'trunk/l10n-kde4'); |
|
return bless { module => $module, needsRefreshed => 1 }, $class; |
|
} |
|
|
|
sub module |
|
{ |
|
my $self = shift; |
|
return $self->{module}; |
|
} |
|
|
|
sub configuredModuleFileName |
|
{ |
|
# Not quite correct (we should be looking at each individual language |
|
# but it at least keeps the process going. |
|
return 'teamnames'; |
|
} |
|
|
|
# Sets the directories that are to be checked out/built/etc. |
|
# There should be one l10nSystem for the entire l10n build (i.e. add |
|
# all required support dirs and languages). |
|
sub setLanguageDirs |
|
{ |
|
my ($self, @languageDirs) = @_; |
|
$self->{l10n_dirs} = \@languageDirs; |
|
} |
|
|
|
# Returns true if the given subdirectory (reference from the module's root source directory) |
|
# can be built or not. Should be reimplemented by subclasses as appropriate. |
|
sub isSubdirBuildable |
|
{ |
|
my ($self, $subdir) = @_; |
|
return ($subdir ne 'scripts' && $subdir ne 'templates'); |
|
} |
|
|
|
sub prefixEnvironmentVariable |
|
{ |
|
return 'CMAKE_PREFIX_PATH'; |
|
} |
|
|
|
# scm-specific update procedure. |
|
# May change the current directory as necessary. |
|
sub updateInternal |
|
{ |
|
my $self = assert_isa(shift, 'ksb::Updater'); |
|
my $module = $self->module(); |
|
my $fullpath = $module->fullpath('source'); |
|
my @dirs = @{$self->{l10n_dirs}}; |
|
|
|
if (-e "$fullpath/.svn") { |
|
$self->check_module_validity(); |
|
my $count = $self->update_module_path(@dirs); |
|
|
|
$self->{needsRefreshed} = 0 if $count == 0; |
|
return $count; |
|
} |
|
else { |
|
return $self->checkout_module_path(@dirs); |
|
} |
|
} |
|
|
|
sub name |
|
{ |
|
return 'l10n'; |
|
} |
|
|
|
# Returns a list of just the languages to install. |
|
sub languages |
|
{ |
|
my $self = assert_isa(shift, 'ksb::l10nSystem'); |
|
my @langs = @{$self->{l10n_dirs}}; |
|
|
|
return grep { $self->isSubdirBuildable($_); } (@langs); |
|
} |
|
|
|
# Buildsystem support section |
|
|
|
sub needsRefreshed |
|
{ |
|
my $self = shift; |
|
|
|
# Should be 1 except if no update happened. |
|
return $self->{needsRefreshed}; |
|
} |
|
|
|
sub buildInternal |
|
{ |
|
my $self = assert_isa(shift, 'ksb::l10nSystem'); |
|
my $builddir = $self->module()->fullpath('build'); |
|
my @langs = $self->languages(); |
|
my $result = 0; |
|
|
|
$result = ($self->safe_make({ |
|
target => undef, |
|
message => "Building localization for language...", |
|
logbase => "build", |
|
subdirs => \@langs, |
|
}) == 0) || $result; |
|
|
|
return $result; |
|
} |
|
|
|
sub configureInternal |
|
{ |
|
my $self = assert_isa(shift, 'ksb::l10nSystem'); |
|
|
|
my $builddir = $self->module()->fullpath('build'); |
|
my @langs = $self->languages(); |
|
my $result = 0; |
|
|
|
for my $lang (@langs) { |
|
my $prefix = $self->module()->installationPath(); |
|
p_chdir("$builddir/$lang"); |
|
|
|
info ("\tConfiguring to build language $lang"); |
|
$result = (log_command($self->module(), "cmake-$lang", |
|
['cmake', '-DCMAKE_INSTALL_PREFIX=' . $prefix]) == 0) || $result; |
|
} |
|
|
|
return $result; |
|
} |
|
|
|
sub installInternal |
|
{ |
|
my $self = assert_isa(shift, 'ksb::l10nSystem'); |
|
my $builddir = $self->module()->fullpath('build'); |
|
my @langs = $self->languages(); |
|
|
|
return ($self->safe_make({ |
|
target => 'install', |
|
message => "Installing language...", |
|
logbase => "install", |
|
subdirs => \@langs, |
|
}) == 0); |
|
} |
|
|
|
# Subroutine to link a source directory into an alternate directory in |
|
# order to fake srcdir != builddir for modules that don't natively support |
|
# it. The first parameter is the module to prepare. |
|
# |
|
# The return value is true (non-zero) if it succeeded, and 0 (false) if it |
|
# failed. |
|
# |
|
# On return from the subroutine the current directory will be in the build |
|
# directory, since that's the only directory you should touch from then on. |
|
sub prepareFakeBuilddir |
|
{ |
|
my $self = assert_isa(shift, 'ksb::l10nSystem'); |
|
my $module = $self->module(); |
|
my $builddir = $module->fullpath('build'); |
|
my $srcdir = $module->fullpath('source'); |
|
|
|
# List reference, not a real list. The initial kdesrc-build does *NOT* |
|
# fork another kdesrc-build using exec, see sub log_command() for more |
|
# info. |
|
my $args = [ 'kdesrc-build', 'main::safe_lndir', $srcdir, $builddir ]; |
|
|
|
info ("\tSetting up alternate build directory for l10n"); |
|
return (0 == log_command ($module, 'create-builddir', $args)); |
|
} |
|
|
|
# Subroutine to create the build system for a module. This involves making |
|
# sure the directory exists and then running any preparatory steps (like |
|
# for l10n modules). This subroutine assumes that the module is already |
|
# downloaded. |
|
# |
|
# Return convention: boolean (inherited) |
|
sub createBuildSystem |
|
{ |
|
my $self = assert_isa(shift, 'ksb::l10nSystem'); |
|
my $module = $self->module(); |
|
my $builddir = $module->fullpath('build'); |
|
|
|
# l10n doesn't support srcdir != builddir, fake it. |
|
whisper ("\tFaking builddir for g[$module]"); |
|
if (!$self->prepareFakeBuilddir()) |
|
{ |
|
error ("Error creating r[$module] build system!"); |
|
return 0; |
|
} |
|
|
|
p_chdir ($builddir); |
|
|
|
my @langs = @{$self->{l10n_dirs}}; |
|
@langs = grep { $self->isSubdirBuildable($_) } (@langs); |
|
|
|
foreach my $lang (@langs) { |
|
my $cmd_ref = [ './scripts/autogen.sh', $lang ]; |
|
if (log_command ($module, "build-system-$lang", $cmd_ref)) |
|
{ |
|
error ("\tUnable to create build system for r[$module]"); |
|
} |
|
} |
|
|
|
$module->setOption('#reconfigure', 1); # Force reconfigure of the module |
|
|
|
return 1; |
|
} |
|
|
|
1;
|
|
|