Kaydet (Commit) 2b3fc45d authored tarafından David Tardon's avatar David Tardon

do not build tail_build modules outside of tail_build

There are several modules in tail_build now that are depended on by
other modules from postprocess (e.g., pyuno depends on 18npool). That
means that build.pl actually schedules i18npool (and its parents) for
build. This is fine for build.pl -P1, but it could be a problem for
build.pl -P2. It is also wasteful, because we are not actually using
tail_build to the full extent.

This gross hack schedules all modules that depend on any tail_build
module _after_ tail_build, so all modules that are in tail_build are
only build in tail_build.

Change-Id: I39840c1cbbfc5024f0009296416c628be028657a
üst 495943c8
...@@ -188,6 +188,12 @@ ...@@ -188,6 +188,12 @@
my $new_line = "\n"; my $new_line = "\n";
my $incompatible = 0; my $incompatible = 0;
my $local_host_ip = 'localhost'; my $local_host_ip = 'localhost';
my $tail_build_modules_mk = "$ENV{SOLARENV}/gbuild/tail_build_modules.mk";
my $tail_build_module_dir = $ENV{"SRCDIR"};
my $tail_build_prj = "tail_build";
my $cross_tail_build_prj = "cross_tail_build";
my $total_modules = 0;
### main ### ### main ###
get_options(); get_options();
...@@ -544,6 +550,76 @@ sub expand_dependencies { ...@@ -544,6 +550,76 @@ sub expand_dependencies {
}; };
}; };
#
# Gets list of tail_build modules.
#
sub get_tail_build_modules {
my $tail_build_prj = shift;
my $make = $ENV{'GNUMAKE'};
my $tail_build_mk = "$tail_build_module_dir/Module_$tail_build_prj.mk";
my $modules_str = `$make --no-print-directory -r -f $tail_build_modules_mk get_modules TAIL_BUILD_MK=$tail_build_mk`;
chomp $modules_str;
my %modules = ();
foreach my $module (split /\s+/, $modules_str) {
$modules{$module} = 1;
}
return %modules;
}
sub _filter_tail_build_dependencies {
my $deps_hash = shift;
my $tail_build_prj = shift;
if (!defined $$deps_hash{$tail_build_prj}) {
# nothing to do
return;
}
my %tail_build_modules = get_tail_build_modules($tail_build_prj);
# first remove tail_build modules from deps.
foreach my $prj (keys %tail_build_modules) {
if (defined $$deps_hash{$prj}) {
delete $$deps_hash{$prj};
}
}
# do the actual replacement
foreach my $prj (keys %$deps_hash) {
my @tail_build_deps = ();
my $deps = $$deps_hash{$prj};
# remove deps. that are in tail_build
foreach my $dep (keys %$deps) {
if (defined $tail_build_modules{$dep}) {
print "$prj depends on $tail_build_prj\[$dep\]\n";
push @tail_build_deps, $dep;
delete $$deps{$dep};
}
}
# insert dep. on tail_build, if necessary
if (@tail_build_deps && !defined $$deps{$tail_build_prj}) {
$$deps{$tail_build_prj} = 1;
}
}
}
#
# Replaces all deps on modules from tail_build by dep on tail_build
# itself. I.e., if a module foo depends on (sal, sfx2, svx) and (sfx2,
# svx) are in tail_build, foo will be depending on (sal, tail_build).
#
# Works on cross_tail_build too, in case of cross-compilation.
#
sub filter_tail_build_dependencies {
my $deps_hash = shift;
_filter_tail_build_dependencies($deps_hash, $tail_build_prj);
_filter_tail_build_dependencies($deps_hash, $cross_tail_build_prj);
}
# #
# This procedure fills the second hash with reversed dependencies, # This procedure fills the second hash with reversed dependencies,
# ie, with info about modules "waiting" for the module # ie, with info about modules "waiting" for the module
...@@ -569,6 +645,7 @@ sub build_all { ...@@ -569,6 +645,7 @@ sub build_all {
if ($build_all_parents) { if ($build_all_parents) {
my ($prj, $prj_dir, $orig_prj); my ($prj, $prj_dir, $orig_prj);
get_parent_deps( $initial_module, \%global_deps_hash); get_parent_deps( $initial_module, \%global_deps_hash);
filter_tail_build_dependencies(\%global_deps_hash);
if (scalar keys %active_modules) { if (scalar keys %active_modules) {
$active_modules{$initial_module}++; $active_modules{$initial_module}++;
$modules_types{$initial_module} = 'mod'; $modules_types{$initial_module} = 'mod';
...@@ -1916,7 +1993,9 @@ sub print_announce { ...@@ -1916,7 +1993,9 @@ sub print_announce {
$text = "Building module $prj\n"; $text = "Building module $prj\n";
}; };
my $total_modules = scalar(keys %build_lists_hash); if (!$total_modules) {
$total_modules = scalar(keys %global_deps_hash) + 1;
}
my $modules_started = scalar(keys %module_announced) + 1; my $modules_started = scalar(keys %module_announced) + 1;
$text = "($modules_started/$total_modules) $text"; $text = "($modules_started/$total_modules) $text";
......
# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
# Version: MPL 1.1 / GPLv3+ / LGPLv3+
#
# The contents of this file are subject to the Mozilla Public License Version
# 1.1 (the "License"); you may not use this file except in compliance with
# the License or as specified alternatively below. You may obtain a copy of
# the License at http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS IS" basis,
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
# for the specific language governing rights and limitations under the
# License.
#
# Major Contributor(s):
# Copyright (C) 2012 Red Hat, Inc., David Tardon <dtardon@redhat.com>
# (initial developer)
#
# All Rights Reserved.
#
# For minor contributions see the git repository.
#
# Alternatively, the contents of this file may be used under the terms of
# either the GNU General Public License Version 3 or later (the "GPLv3+"), or
# the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"),
# in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable
# instead of those above.
TAIL_BUILD_MODULES :=
gb_Module_Module :=
define gb_Module_add_moduledirs
TAIL_BUILD_MODULES += $(2)
endef
ifneq ($(value TAIL_BUILD_MK),)
include $(TAIL_BUILD_MK)
else
$(error TAIL_BUILD_MK must be set to path to Module_tail_build.mk)
endif
.PHONY : get_modules
get_modules :
@echo $(TAIL_BUILD_MODULES)
# vim: set shiftwidth=4 tabstop=4 noexpandtab:
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment