source: CIVL/mods/dev.civl.com/scripts/generate.pl@ 1aaefd4

main test-branch
Last change on this file since 1aaefd4 was aad342c, checked in by Stephen Siegel <siegel@…>, 3 years ago

Performing huge refactor to incorporate ABC, GMC, and SARL into CIVL repo and use Java modules.

git-svn-id: svn://vsl.cis.udel.edu/civl/trunk@5664 fb995dde-84ed-4084-dfe6-e5aef3e2452c

  • Property mode set to 100755
File size: 2.3 KB
Line 
1#!/usr/bin/perl
2
3use strict;
4use warnings;
5use Path::Class;
6use autodie;
7use File::Basename;
8
9my $numArgs = scalar(@ARGV);
10
11my $folder = dir(".");
12
13my $outName = "Makefile";
14
15if($numArgs > 1){
16 warn "At most ONE argument is needed for this program. Additional arguments will be ignored.\n";
17}
18
19if($numArgs > 0){
20 if($ARGV[0] eq "help"){
21 printHelp();
22 exit;
23 }else{
24 if((not -d $ARGV[0]) and (not -e $ARGV[0])){
25 print "The file or directory $ARGV[0] doesn't exist!\n";
26 print "Please use a valid file or directory.\n";
27 exit;
28 }else{
29 $folder = dir("$ARGV[0]");
30 }
31 if($numArgs > 1){
32 $outName = $ARGV[1];
33 }
34 }
35}
36
37open(my $fileHandle, '>', "$outName") or die "Can't write to file: $!";
38print $fileHandle "CIVL=civl\n";
39print $fileHandle "VERIFY=\$(CIVL) verify -enablePrintf=false\n";
40traverse($folder, $fileHandle);
41close $fileHandle;
42print "Makefile generated for $folder successfully\n";
43
44
45sub printHelp{
46print "======= HELP =======\n";
47print "This script is to generate a Makefile for c/cvl/cu files in a given folder.\n";
48print "Usages:\n";
49print "perl generate.pl: generate Makefile for all C/CIVL-C program in the CURRENT folder\n";
50print "perl generate.pl dirname: generate Makefile for all C/CIVL-C program in the given folder\n";
51print "perl generate.pl dirname filename: generate Makefile for all C/CIVL-C program in the given folder and save it as the given filename\n";
52print "perl generate.pl help: show this message\n";
53}
54
55sub traverse{
56 my ($dir) = $_[0];
57 my ($out) = $_[1];
58 my (@files);
59
60 print $out "all: ";
61 if(not -d $dir){
62 return;
63 }
64 print "working in $dir\n";
65 return if not -d $dir;
66 while(my $file = $dir->next){
67 next if $file eq "$dir"
68 or $file eq "$dir" . '/..'
69 or $file->basename eq "CIVLREP";
70 #print $file->stringify . "\n";
71 my $target;
72 unless($file->is_dir()){
73 if ($file =~ /\.(c|cvl|cu)/) {
74 my $target = basename("$file", "");
75
76 # print "file is " . $file->stringify . "\n";
77 push(@files, $target);
78 ($target = $target) =~ s/\.[^.]+$//;
79 # print "target is $target \n";
80 print $out $target . " ";
81 }
82 }
83 }
84 print $out "\n";
85 foreach (@files) {
86 my $target;
87 my $file = $_;
88
89 ($target = $file) =~ s/\.[^.]+$//;
90 print $out "\n" . $target . ": $file\n";
91 print $out "\t" . "\$(VERIFY) $file\n";
92 }
93}
Note: See TracBrowser for help on using the repository browser.