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.
368 lines
10 KiB
368 lines
10 KiB
#!/usr/bin/perl |
|
# Plugin to kdesrc-build to setup needed software not installed on coverity test machines. |
|
# |
|
# Please also see the documentation that should be included with this program, |
|
# from the kdesdk/doc/scripts/kdesrc-build directory. |
|
# |
|
# Copyright © 2003 - 2006 Michael Pyne. <michael.pyne@kdemail.net> |
|
# Home page: http://kdesrc-build.kde.org/ |
|
# |
|
# Copyright © 2006 Dirk Mueller <dirk@kde.org> |
|
# |
|
# You may use, alter, and redistribute this software under the terms |
|
# of the GNU General Public License, v2 (or any later version). |
|
|
|
|
|
# This subroutine checks if an appropriate dbus software is already installed. |
|
# Currently this means DBUS 0.62. |
|
# |
|
# Return value is true if DBUS is installed, 0 otherwise. |
|
|
|
use strict; |
|
|
|
sub check_dbus_installed() |
|
{ |
|
my $minVersion = '0.62'; |
|
|
|
my $result = system('pkg-config', '--exists', "dbus-1 >= $minVersion"); |
|
|
|
return ($result >> 8) == 0; |
|
} |
|
|
|
# Check that CLucene is installed. |
|
# CLucene is required by Strigi in playground/base |
|
sub check_clucene_installed() |
|
{ |
|
# this efficient check algorithm was copied from the cmake check |
|
my $minVersion = '0.9.16'; |
|
|
|
my $result = system('pkg-config', '--exists', "clucene-core >= $minVersion"); |
|
|
|
return ($result >> 8) == 0; |
|
} |
|
|
|
# Install CLucene |
|
# CLucene is required by Strigi in playground/base |
|
sub download_install_clucene() |
|
{ |
|
return download_install_tar('clucene-core', '0.9.16', |
|
"http://surfnet.dl.sourceforge.net/sourceforge/clucene", [ ] ); |
|
} |
|
|
|
sub download_install_tar($$$$) |
|
{ |
|
return 1 if pretending; |
|
|
|
my ($module, $version, $baseurl, $module_command) = @_; |
|
|
|
note "\n<<< Installing tarball $module >>>\n"; |
|
|
|
my $filename = "$module-$version.tar.gz"; |
|
my $url = "$baseurl/$filename"; |
|
|
|
my $tempdir = get_build_dir($module); |
|
if (! super_mkdir($tempdir)) { |
|
error "Unable to create temporary directory $tempdir.\n"; |
|
return 0; |
|
} |
|
|
|
p_chdir($tempdir); |
|
pretend "Downloading $module to $tempdir/$filename"; |
|
|
|
# Download snapshot. |
|
note "\tDownloading $module tarball."; |
|
|
|
if (not download_file($url, $filename)) |
|
{ |
|
error "Unable to download $module from r[$url]"; |
|
return 0; |
|
} |
|
|
|
# Decompress. |
|
my $result = log_command($module, 'untar', ['tar', 'xvf', $filename]); |
|
if ($result != 0) |
|
{ |
|
error "Unable to decompress $module tarball."; |
|
return 0; |
|
} |
|
|
|
my $prefix = get_option('global', 'kdedir'); |
|
|
|
p_chdir("$module-$version"); |
|
note "\tBuilding $module"; |
|
my @command = ('./configure'); |
|
push(@command, "--prefix=$prefix"); |
|
push(@command, @{$module_command}); |
|
|
|
$result = log_command($module, 'configure', \@command); |
|
|
|
if ($result != 0) |
|
{ |
|
error "Unable to configure $module."; |
|
return 0; |
|
} |
|
|
|
$result = log_command($module, 'make', ['make']); |
|
if ($result != 0) |
|
{ |
|
error "Unable to build $module."; |
|
return 0; |
|
} |
|
|
|
note "\tInstalling $module (installing to $prefix)"; |
|
$result = log_command($module, 'make-install', ['make', 'install']); |
|
if ($result != 0) |
|
{ |
|
error "Unable to install $module. (make-install-prefix is ignored)."; |
|
return 0; |
|
} |
|
|
|
p_chdir (get_kdesvn_dir()); |
|
prune_under_directory($tempdir); |
|
|
|
return 1; |
|
} |
|
|
|
# This subroutine downloads DBUS if necessary, and builds and installs it (all |
|
# in one step: there is no separate update then install). |
|
# |
|
# It installs to the prefix given by the kdedir setting by default. |
|
# |
|
# This is normally only used for Coverity, as people should be installing |
|
# dependency libraries using their distribution's package manager software, not |
|
# kdesrc-build. |
|
# |
|
# Nothing happens in pretend mode however. |
|
# |
|
# Return value: 0 if the download/build/install failed, non-zero otherwise. |
|
sub download_install_dbus() |
|
{ |
|
return download_install_tar('dbus', '0.62', "http://dbus.freedesktop.org/releases", |
|
['--disable-qt', '--disable-qt3', '--disable-dependency-tracking', |
|
'--disable-xml-docs', '--disable-doxygen-docs', |
|
'--disable-glib', '--disable-mono', '--disable-python', |
|
'--disable-gcj' ] |
|
); |
|
} |
|
|
|
# This subroutine checks if an appropriate dbus software is already installed. |
|
# Currently this means DBUS 0.62. |
|
# |
|
# Return value is true if DBUS is installed, 0 otherwise. |
|
|
|
sub check_cmake_installed() |
|
{ |
|
my $result = `cmake --version`; |
|
|
|
if ($result =~ /2.4-patch (\d+)/) { |
|
return 1 if ($1 >= 5); |
|
} |
|
|
|
if ($result =~ /2\.(\d+)-patch/) { |
|
return 1 if ($1 > 4); |
|
} |
|
|
|
return 0; |
|
} |
|
|
|
# This subroutine downloads CMake if necessary, builds and installs it (all |
|
# in one step: there is no separate update then install). |
|
# |
|
# It installs to the prefix given by the kdedir setting by default. |
|
# |
|
# This is normally only used for Coverity, as people should be installing |
|
# dependency libraries using their distribution's package manager software, not |
|
# kdesrc-build. |
|
# |
|
# Nothing happens in pretend mode however. |
|
# |
|
# Return value: 0 if the download/build/install failed, non-zero otherwise. |
|
sub download_install_cmake() |
|
{ |
|
return download_install_tar('cmake', '2.4.6', "http://www.cmake.org/files/v2.4", []); |
|
} |
|
|
|
|
|
sub check_lcms_installed() |
|
{ |
|
my $minVersion = '1.15'; |
|
|
|
my $result = system('pkg-config', '--exists', "lcms >= $minVersion"); |
|
|
|
return ($result >> 8) == 0; |
|
} |
|
|
|
sub download_install_lcms() |
|
{ |
|
return download_install_tar('lcms', '1.15', "http://www.littlecms.com/", []); |
|
} |
|
|
|
sub cleanup_soprano_mess() |
|
{ |
|
my $prefix = get_option('global', 'kdedir'); |
|
|
|
if (-f "$prefix/include/Soprano") { |
|
|
|
unlink("$prefix/include/Soprano"); |
|
return 1; |
|
} |
|
return 0; |
|
} |
|
|
|
# This subroutine is run after the lock has been obtained, but before performing |
|
# any updates or builds. Do any steps that need to be done only in the case of |
|
# being run by Coverity. This subroutine is only called if the COVERITY_RUN |
|
# environment variable is set. |
|
# |
|
# No return value. |
|
sub perform_coverity_checks() |
|
{ |
|
note "We are being run by g[Coverity]. Hi guys!"; |
|
|
|
if (cleanup_soprano_mess()) { |
|
note "Soprano seems to have been messy installed. Cleaned install dir"; |
|
} |
|
|
|
unless (check_dbus_installed()) |
|
{ |
|
note "D-BUS does not appear to be installed. At least, pkg-config can't find it."; |
|
note "So just for you guys, I'll go ahead and install it for you."; |
|
|
|
if (not download_install_dbus()) |
|
{ |
|
error "\nWell, we were b[r[unable to install] DBUS for some reason."; |
|
error "Check your logs afterwards."; |
|
} |
|
} |
|
else |
|
{ |
|
note "D-BUS appears to be installed. Continuing. "; |
|
} |
|
|
|
unless (check_cmake_installed()) |
|
{ |
|
note "CMake 2.4.3 does not appear to be installed. At least it is not in \$PATH"; |
|
note "So just for you guys, I'll go ahead and install it for you."; |
|
|
|
if (not download_install_cmake()) |
|
{ |
|
error "\nWell, we were b[r[unable to install] CMake for some reason."; |
|
error "Check your logs afterwards."; |
|
} |
|
} |
|
else |
|
{ |
|
note "cmake appears to be installed. Continuing. "; |
|
} |
|
|
|
|
|
unless (check_lcms_installed()) |
|
{ |
|
note "lcms 1.12 does not appear to be installed. At least it is not in pkg-config"; |
|
note "So just for you guys, I'll go ahead and install it for you."; |
|
|
|
if (not download_install_lcms()) |
|
{ |
|
error "\nWell, we were b[r[unable to install] lcms for some reason."; |
|
error "Check your logs afterwards."; |
|
} |
|
} |
|
else |
|
{ |
|
note "lcms appears to be installed. Continuing. "; |
|
} |
|
|
|
unless (check_clucene_installed()) |
|
{ |
|
note "CLucene does not appear to be installed."; |
|
if (not download_install_clucene()) |
|
{ |
|
error "\nCLucene can not be installed."; |
|
error "Check your logs afterwards."; |
|
} |
|
} |
|
|
|
# Print blank line. |
|
note ""; |
|
} |
|
|
|
sub plugin_finish($) |
|
{ |
|
my ($logdir) = @_; |
|
my $today = basename($logdir); |
|
my $hostname = hostname(); |
|
|
|
=cut |
|
note "Uploading logfiles\n"; |
|
system("svn", "import", "-m", $today, |
|
$logdir, "svn://kdorf.kde.org/home/coverity_kde/$today/$hostname") |
|
if($hostname =~ /coverity/i); |
|
=cut |
|
} |
|
|
|
sub plugin_setup_default_modules($$$) |
|
{ |
|
my ($update_list_ref, $build_list_ref, $package_opts_ref) = @_; |
|
|
|
foreach my $pack qw(kdevelop kdewebdev kdeaccessibility kdesdk kdereview) |
|
# koffice playground/accessibility |
|
# playground/artwork playground/base playground/bindings playground/devtools |
|
# playground/edu playground/games playground/graphics playground/ioslaves |
|
# playground/multimedia playground/network playground/office playground/pim |
|
# playground/sysadmin playground/utils extragear/multimedia ) |
|
{ |
|
push(@$update_list_ref, $pack); |
|
push(@$build_list_ref, $pack); |
|
if (not exists $package_opts_ref->{$pack}) |
|
{ |
|
$package_opts_ref->{$pack} = { }; # Set up defaults |
|
$package_opts_ref->{$pack}{'set-env'} = { }; |
|
} |
|
} |
|
|
|
# kdewebdev needs kdevelop |
|
$package_opts_ref->{'kdevelop'}{'install-after-build'} = 1; |
|
|
|
$package_opts_ref->{'qt-copy'} = { |
|
'configure-flags' => '-qt-gif -system-zlib -no-exceptions -fast -release', |
|
'apply-qt-patches' => 1, |
|
'use-unsermake' => 0, |
|
'use-cmake' => 0, |
|
'install-after-build' => 0, |
|
'set-env' => { }, |
|
'make-options' => 'sub-src sub-tools' |
|
}; |
|
|
|
# no xine-lib |
|
$package_opts_ref->{'kdebase'} = { |
|
"cmake-options" => "-DKDE4_DISABLE_MULTIMEDIA=ON" |
|
}; |
|
|
|
$package_opts_ref->{'global'}{'use-cmake'} = 1; |
|
$package_opts_ref->{'global'}{'use-unsermake'} = 0; |
|
} |
|
|
|
sub plugin_update_module_path($) |
|
{ |
|
my ($module) = @_; |
|
my @revert_args = ('svn', 'revert', '-R', '.'); |
|
run_svn($module, 'svn-revert', \@revert_args); |
|
} |
|
|
|
sub plugin_check_module_validity($$$) |
|
{ |
|
my ($module, $module_actual_url, $module_expected_url) = @_; |
|
|
|
if ($module_actual_url ne $module_expected_url) |
|
{ |
|
warning "Something is wrong with your $module. Let's see if we can correct it. "; |
|
warning "kdesrc-build expects: y[$module_expected_url]"; |
|
warning "The module is actually from: y[$module_actual_url]"; |
|
|
|
system("svn status --no-ignore | grep '^[I?]' | cut -b8- | xargs rm -rf"); |
|
system("svn", "switch", $module_expected_url); |
|
return; |
|
} |
|
} |
|
|
|
perform_coverity_checks();
|
|
|