From bbbade2eb54330c43d2ec938c4fc3ace660851ee Mon Sep 17 00:00:00 2001 From: davidovski Date: Tue, 25 Jan 2022 22:39:23 +0000 Subject: added tsorting to find the most important packages --- src/xib.pl | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 51 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/xib.pl b/src/xib.pl index 7a677c6..e59a591 100755 --- a/src/xib.pl +++ b/src/xib.pl @@ -25,6 +25,7 @@ use strict; use warnings; use Getopt::Long "HelpMessage"; use File::Basename; +use Sort::TSort "tsort"; our $BUILDFILES_REPO = "https://xi.davidovski.xyz/git/buildfiles.git"; @@ -74,7 +75,7 @@ sub list_buildfiles{ return @files; } -sub determine_build_order{ +sub get_packages{ my %pkgs = (); my @files = list_buildfiles(); @@ -83,15 +84,60 @@ sub determine_build_order{ my $pkg_file = $_; my $pkg_name = basename($pkg_file, ".xibuild"); - my @deps = list_dependencies($pkg_file) - $pkgs{"$pkg_file"} = @deps; + my @deps = list_dependencies($pkg_file); + $pkgs{$pkg_name} = \@deps; + } + + return %pkgs; +} + +sub get_depended_on{ + my (%pkgs) = @_; + my %depended = (); + + foreach (keys(%pkgs)) { + my @empty = (); + $depended{$_} = \@empty; } - for (keys %pkgs) { - print("$_ has the deps: $pkgs{$_}\n") + foreach (keys(%pkgs)) { + my $apkg = $_; + foreach (keys(%pkgs)) { + my $bpkg = $_; + my @deps = @{$pkgs{$_}}; + if (grep(/^$apkg$/, @deps)) { + push(@{$depended{$apkg}}, $bpkg); + } + } + } + + return %depended; +} + +sub determine_build_order{ + my %pkgs = get_packages(); + + my @edges = (); + foreach (keys(%pkgs)) { + my $pkg = $_; + my @deps = @{$pkgs{$_}}; + foreach (@deps) { + my $dep = $_; + + my @edge = ($pkg, $dep); + push @edges, [ @edge ]; + + } + } + + my $sorted = tsort(\@edges); + + foreach(@{$sorted}) { + print("$_\n"); } } + unless (caller) { prepare_xib_environment(); determine_build_order(); -- cgit v1.2.1