aboutsummaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorTimo Paulssen <timonator@perpetuum-immobile.de>2016-04-02 14:01:23 +0200
committerTimo Paulssen <timonator@perpetuum-immobile.de>2016-04-02 14:01:23 +0200
commit7822d78ec86722fe4b043e4642ff72da554d6b74 (patch)
treee19f596a504d25b2d0a3323d77b27721fbc600ac /tools
parent1c3a719124c81a1d15ee62c44641c1029aae0d66 (diff)
add a little tool for analyzing modules/ for missing stuff
Diffstat (limited to 'tools')
-rw-r--r--tools/star/analyze_module_dependencies.p638
1 files changed, 38 insertions, 0 deletions
diff --git a/tools/star/analyze_module_dependencies.p6 b/tools/star/analyze_module_dependencies.p6
new file mode 100644
index 0000000..dae5090
--- /dev/null
+++ b/tools/star/analyze_module_dependencies.p6
@@ -0,0 +1,38 @@
+my %depended-on := SetHash.new;
+my @has-names;
+
+use JSON::Fast;
+
+for qx{ ls modules/*/META* }.lines -> $jf {
+
+ my $data = from-json(slurp($jf));
+
+ # list module as available
+ @has-names.push($data<name>);
+
+ # these three can contain dependencies
+ for <depends test-depends build-depends> -> $_ {
+ # but some of them are optional
+ next unless $data{$_}:exists;
+ my $val = $data{$_};
+ # and sometimes they are just an empty array in the json blob.
+ next if $val.elems == 0;
+
+ # record every dependency in our set
+ %depended-on{@$val}>>++;
+ }
+}
+
+# exclude a few modules:
+# Panda doesn't have a META.info
+# Test is shipped with Rakudo
+# NativeCall is also shipped with rakudo
+# nqp isn't really a module.
+my @missing = %depended-on (-) @has-names (-) <Panda Test NativeCall nqp>;
+
+with @missing {
+ say "There are some modules that are depended on, but not in the modules list.";
+ .say for @missing;
+} else {
+ say "the modules seem to be sane.";
+}