Dokumentation
[kivitendo-erp.git] / scripts / find-use.pl
old mode 100644 (file)
new mode 100755 (executable)
index dbd30aa..f65143e
@@ -12,6 +12,10 @@ my (%uselines, %modules, %supplied, %requires);
 # easily obtained, I'll just hard code the bigger ones we use here. the same
 # hash will be filled later with information gathered from the source files.
 %requires = (
 # easily obtained, I'll just hard code the bigger ones we use here. the same
 # hash will be filled later with information gathered from the source files.
 %requires = (
+  'DateTime' => {
+    'DateTime::Duration'                 => 1,
+    'DateTime::Infinite'                 => 1,
+  },
   'Rose::DB::Object' => {
    'Rose::DB::Object::ConventionManager' => 1,
    'Rose::DB::Object::Manager'           => 1,
   'Rose::DB::Object' => {
    'Rose::DB::Object::ConventionManager' => 1,
    'Rose::DB::Object::Manager'           => 1,
@@ -26,7 +30,11 @@ my (%uselines, %modules, %supplied, %requires);
     'Template::Iterator'                 => 1,
     'Template::Plugin'                   => 1,
     'Template::Plugin::Filter'           => 1,
     'Template::Iterator'                 => 1,
     'Template::Plugin'                   => 1,
     'Template::Plugin::Filter'           => 1,
+    'Template::Plugin::HTML'             => 1,
   },
   },
+  'Devel::REPL' => {
+    'namespace::clean'                   => 1,
+  }
 );
 
 find(sub {
 );
 
 find(sub {
@@ -46,7 +54,7 @@ find(sub {
 
     my ($useline) = m/^use\s+(.*?)$/;
 
 
     my ($useline) = m/^use\s+(.*?)$/;
 
-    next if  $useline =~ /^[\d.]+;/; # skip version requirements
+    next if  $useline =~ /^[\d._]+;/; # skip version requirements
     next if !$useline;
 
     $uselines{$useline} ||= [];
     next if !$useline;
 
     $uselines{$useline} ||= [];
@@ -75,10 +83,14 @@ for my $useline (keys %uselines) {
   next if $useline =~ /^most and offer that in a small/; # YAML
 
   my $version = Module::CoreList->first_release($module);
   next if $useline =~ /^most and offer that in a small/; # YAML
 
   my $version = Module::CoreList->first_release($module);
-  $modules{$module} = $supplied{$module}     ? 'included'
-                    : $version               ? sprintf '%2.6f', $version
-                    : is_documented($module) ? 'required'
-                    : '!missing';
+  $modules{$module} = { status => $supplied{$module}     ? 'included'
+                                : $version               ? sprintf '%2.6f', $version
+                                : is_required($module)   ? 'required'
+                                : is_optional($module)   ? 'optional'
+                                : is_developer($module)  ? 'developer'
+                                : '!missing',
+                        files  => $uselines{$useline},
+                      };
 
   # build requirement tree
   for my $file (@{ $uselines{$useline} }) {
 
   # build requirement tree
   for my $file (@{ $uselines{$useline} }) {
@@ -95,19 +107,21 @@ while ($changed) {
   $changed = 0;
   for my $src_module (keys %requires) {
     for my $dst_module (keys %{ $requires{$src_module} }) {
   $changed = 0;
   for my $src_module (keys %requires) {
     for my $dst_module (keys %{ $requires{$src_module} }) {
-      if (   $modules{$src_module} =~ /^required/
-          && $modules{$dst_module} eq '!missing') {
-        $modules{$dst_module} = "required"; # . ", via $src_module";
+      if (   $modules{$src_module}
+          && $modules{$dst_module}
+          && $modules{$src_module}->{status} =~ /^(required|devel|optional)/
+          && $modules{$dst_module}->{status} eq '!missing') {
+        $modules{$dst_module}->{status} = "required"; # . ", via $src_module";
         $changed = 1;
       }
     }
   }
 }
 
         $changed = 1;
       }
     }
   }
 }
 
-print sprintf "%8s : %s", color_text($modules{$_}), $_
+print sprintf "%8s : %s (%s)", color_text($modules{$_}->{status}), $_, join(' ', @{ $modules{$_}->{files} || [] })
   for sort {
   for sort {
-       $modules{$a} cmp $modules{$b}
-    ||          $a  cmp $b
+       $modules{$a}->{status} cmp $modules{$b}->{status}
+    ||                    $a  cmp $b
   } keys %modules;
 
 sub modulize {
   } keys %modules;
 
 sub modulize {
@@ -120,11 +134,21 @@ sub modulize {
   }
 }
 
   }
 }
 
-sub is_documented {
+sub is_required {
   my ($module) = @_;
   grep { $_->{name} eq $module } @SL::InstallationCheck::required_modules;
 }
 
   my ($module) = @_;
   grep { $_->{name} eq $module } @SL::InstallationCheck::required_modules;
 }
 
+sub is_optional {
+  my ($module) = @_;
+  grep { $_->{name} eq $module } @SL::InstallationCheck::optional_modules;
+}
+
+sub is_developer {
+  my ($module) = @_;
+  grep { $_->{name} eq $module } @SL::InstallationCheck::developer_modules;
+}
+
 sub color_text {
   my ($text) = @_;
   return color(get_color($text)) . $text . color('reset');
 sub color_text {
   my ($text) = @_;
   return color(get_color($text)) . $text . color('reset');
@@ -180,11 +204,13 @@ This module is included in C<modules/*>. Don't worry about it.
 This module is documented in C<SL:InstallationCheck> to be necessary, or is a
 dependancy of one of these. Everything alright.
 
 This module is documented in C<SL:InstallationCheck> to be necessary, or is a
 dependancy of one of these. Everything alright.
 
-= item !missing
+=item !missing
 
 These modules are neither core, nor included, nor required. This is ok for
 developer tools, but should never occur for modules the actual program uses.
 
 
 These modules are neither core, nor included, nor required. This is ok for
 developer tools, but should never occur for modules the actual program uses.
 
+=back
+
 =head1 AUTHOR
 
 http://www.ledgersmb.org/ - The LedgerSMB team
 =head1 AUTHOR
 
 http://www.ledgersmb.org/ - The LedgerSMB team