my $export_only = 0; # only export, not building
my $tarfile = 0; # generate tar file for dependence & reverse dependence xml file
my $preordered_list = ""; # List of ordered packages to support user defined build order calculation
+my $profiling = ""; # Reference profiling report location. If set reports will be generated
GetOptions (
"repository=s" => \@repos,
"export-only" => \$export_only,
"tarfile" => \$tarfile,
"preordered-list=s" => \$preordered_list,
+ "profiling=s" => \$profiling,
);
if ( $help ) {
info("build logs can be found in:\n $localrepo/$dist/$arch/logs");
info("build roots located in:\n $scratch_dir.*");
if (%errors || %expansion_errors || @export_errors || ($succeeded_packages == 0 && @skipped == 0)) {
- exit 1;
+ return 1;
}
-
+ return 0;
}
#---------------------------------------------------------------------
}
sub generate_depends_xmlfile() {
+
#if there is no dependence relation, skip!
if (0 == scalar (keys %pkgdeps))
{
}
}
+sub prepare_preorder_list {
+ my @preview_orders = ();
+ my_system("rm -rf bsr_profiling_report");
+ if ($preordered_list ne "") {
+ @preview_orders = split /[:,\s\/]+/, $preordered_list;
+ }
+ if ($profiling ne "" && `which bsr`) {
+ my $preview_command = "bsr reorder -j $profiling ";
+ if ($debug == 1) {
+ $preview_command = $preview_command . " --verbose ";
+ }
+ my_system($preview_command);
+ if (-f ".bsr.preview.yaml") {
+ my $preview_config = LoadFile(".bsr.preview.yaml");
+ unlink ".bsr.preview.yaml";
+ if ($preview_config && $preview_config->{preview}
+ && $preview_config->{preview}->{packages}
+ && @{$preview_config->{preview}->{packages}} > 0) {
+ foreach my $p (@{$preview_config->{preview}->{packages}}) {
+ if ( !(grep $_ eq $p, @preview_orders) ) {
+ push @preview_orders, $p;
+ }
+ }
+ }
+ }
+ }
+ if (@preview_orders) {
+ $preordered_list = join ",", @preview_orders;
+ }
+}
+
+sub profiling_report {
+ if ($profiling eq "" || ! `which bsr`) {
+ return;
+ }
+ generate_depends();
+
+ my $report_command = "bsr report -a $arch --depsnumbersort -j $profiling ";
+ if ($debug == 1) {
+ $report_command = $report_command . " --verbose ";
+ }
+ my $dep_xml_file = "$depends_dir/$dist/$arch/$dist\_$arch\_pkgdepends.xml";
+ if (-e $dep_xml_file) {
+ $report_command = $report_command . " -x \"$dep_xml_file\" ";
+ }
+ $report_command = $report_command . " -k \"$localrepo/$dist/$arch/logs\" ";
+ my_system($report_command);
+ my_system("mv bsr_profiling_report $localrepo/$dist/$arch/");
+}
+
# MAIN
if ($depends) {
info("start generate packages depends from: " . $package_path . " ($style)");
update_pkgdeps($reverse_on);
update_pkgddeps();
+prepare_preorder_list();
+
my @bins = get_binary_list();
if (@bins) {
my @tobuild = ();
while ((threads->list() > 0)) {
sleep(1);
}
-
update_repo();
-build_report();
-
-exit 0
+my $build_status = build_report();
+profiling_report();
+exit $build_status