changeset 661:b6a3e1638f3a

Search headerfile first at generate_stub.pl
author anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Tue, 18 Aug 2020 16:23:22 +0900
parents 29df99369746
children 7bb657ce6399
files src/parallel_execution/generate_stub.pl src/parallel_execution/tools/static_gen_header.pl
diffstat 2 files changed, 31 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/src/parallel_execution/generate_stub.pl	Tue Aug 18 08:29:54 2020 +0900
+++ b/src/parallel_execution/generate_stub.pl	Tue Aug 18 16:23:22 2020 +0900
@@ -3,9 +3,12 @@
 use strict;
 use Getopt::Long;
 use File::Path qw(make_path);
+
 use FindBin;
 use lib "$FindBin::Bin/lib";
 
+use Gears::Util;
+
 
 # interface.h
 # typedef struct Worker {
@@ -48,6 +51,8 @@
   $context_name = $projects{$opt_project}->{context};
 }
 
+
+
 for my $fn (@ARGV) {
     next if ($fn !~ /\.cbc$/);
     getDataGear($fn);
@@ -66,6 +71,8 @@
 my %codeGear;
 my $implementation;
 my $interface;
+my %call_interfaces;
+my $interface_name_to_header_paths = create_interface_name_to_header_path();
 
 # interface definision
 #
@@ -137,17 +144,12 @@
                 # use interface
                 my $interfaceHeader = $1;
                 next if ($interfaceHeader =~ /context.h/);
-                if (-f $interfaceHeader) {
-                    &getDataGear("$interfaceHeader");
-                    &getCodeGear("$interfaceHeader");
-                } else {
-                  if ($filename =~ /([\w\/]+)\/(.+)$/) {
-                    $interfaceHeader = "$1/$interfaceHeader";
-                    if (-f $interfaceHeader) {
-                        &getDataGear("$interfaceHeader");
-                        &getCodeGear("$interfaceHeader");
-                    }
-                  }
+                $interfaceHeader =~ m|(\w+)\.\w+$|; #remove filename extention
+                my $interfaceName = $1;
+                $call_interfaces{$filename}->{$interfaceName} = 1;
+                if (exists $interface_name_to_header_paths->{$interfaceName}) {
+                    &getDataGear($interface_name_to_header_paths->{$interfaceName});
+                    &getCodeGear($interface_name_to_header_paths->{$interfaceName});
                 }
             } elsif (/^\_\_code (\w+)\((.*)\)(.*)/) {
                 my $codeGearName = $1;
@@ -160,6 +162,8 @@
             }
             next;
         }
+
+        #this scope does parsing of header files
         # gather type name and type
         $dataGear{$name} .= $_;
         if (/^\s*(.*)\s+(\w+);$/ ) {
@@ -722,6 +726,21 @@
     }
 }
 
+sub create_interface_name_to_header_path {
+    my $files = Gears::Util->find_headers_from_path("$FindBin::Bin");
+    my $interface_name2headerpath = {};
+
+    for my $file (@{$files}) {
+      if ($file =~ m|/(\w+)\.\w+$|) {
+        my $file_name = $1;
+        $interface_name2headerpath->{$file_name} = $file;
+      }
+    }
+
+    return $interface_name2headerpath;
+}
+
+
 
 
 # end
--- a/src/parallel_execution/tools/static_gen_header.pl	Tue Aug 18 08:29:54 2020 +0900
+++ b/src/parallel_execution/tools/static_gen_header.pl	Tue Aug 18 16:23:22 2020 +0900
@@ -5,7 +5,7 @@
 use Getopt::Long qw/:config posix_default no_ignore_case bundling auto_help/;
 use Pod::Usage qw/pod2usage/;
 use Cwd qw/getcwd/;
-use  File::Path qw/make_path/;
+use File::Path qw/make_path/;
 
 =head1 DESCRIPTION