MakeWithPerl
view release on metacpan or search on metacpan
lib/MakeWithPerl.pm view on Meta::CPAN
#!/usr/bin/perl -I/home/phil/perl/cpan/DataTableText/lib -I/home/phil/perl/cpan/JavaDoc/lib -I/home/phil/perl/cpan/DitaPCD/lib/ -I/home/phil/perl/cpan/DataEditXml/lib/ -I/home/phil/perl/cpan/GitHubCrud/lib/ -I/home/phil/perl/cpan/DataDFA/lib/ -I/ho...
#-------------------------------------------------------------------------------
# Make with Perl
# Philip R Brenan at gmail dot com, Appa Apps Ltd, 2017
#-------------------------------------------------------------------------------
package MakeWithPerl;
our $VERSION = "20210601";
use warnings FATAL => qw(all);
use strict;
use Carp qw(confess);
use Data::Dump qw(dump);
use Data::Table::Text qw(:all);
use Getopt::Long;
use utf8;
sub mwpl {qq(makeWithPerlLocally.pl)} # Make with Perl locally
my $javaHome; # Location of java files
my $cIncludes; # C includes folder
my $compile; # Compile
my $coverage; # Get coverage of code
my $doc; # Documentation
my $gccVersion; # Alternate version of gcc is set. Example: --gccVersion gcc-10
my $htmlToPdf; # Convert html to pdf
my $run; # Run
my $search; # Search for a local file to make the specified file
my $upload; # Upload files
my $valgrind; # Check C memory usage
my $xmlCatalog; # Verify xml
sub makeWithPerl { # Make a file
GetOptions(
'cIncludes=s' =>\$cIncludes,
'compile' =>\$compile,
'coverage' =>\$coverage,
'doc' =>\$doc,
'gccVersion=s'=>\$gccVersion,
'htmlToPdf' =>\$htmlToPdf,
'javaHome=s' =>\$javaHome,
'run' =>\$run,
'search!' =>\$search,
'valgrind' =>\$valgrind,
'upload' =>\$upload,
'xmlCatalog=s'=>\$xmlCatalog,
);
my $file = shift @ARGV // $0; # File to process
unless($file) # Confirm we have a file
{confess "Use %f to specify the file to process";
}
if (! -e $file) # No such file
{confess "No such file:\n$file"
}
if ($search) # Upload files to GitHub or run some other action defined in the containing folder hierarchy unless search is forbidden
{my @d = split m{/}, $file; # Split file name
pop @d;
while(@d) # Look for a folder that contains a push command
{for my $n(qw(pushToGitHub upload package))
{my $u = "/".fpe(@d, $n, q(pl));
if (-e $u)
{say STDERR $u;
qx(perl $u);
exit;
}
}
pop @d;
}
confess "Unable to find pushToGitHub in folders down to $file";
}
if ($doc) # Documentation
{if ($file =~ m((pl|pm)\Z)s) # Document perl
{say STDERR "Document perl $file";
updatePerlModuleDocumentation($file);
}
elsif ($file =~ m((java)\Z)s) # Document java
{say STDERR "Document java $file";
my %files;
for(findFiles($javaHome))
{next if m/Test\.java\Z/ or m(/java/z/); # Exclude test files and /java/ sub folders
$files{$_}++ if /\.java\Z/
}
confess;
#my $j = Java::Doc::new;
#$j->source = [sort keys %files];
#$j->target = my $f = filePathExt($javaHome, qw(documentation html));
#$j->indent = 20;
#$j->colors = [map {"#$_"} qw(ccFFFF FFccFF FFFFcc CCccFF FFCCcc ccFFCC)];
#$j->html;
#qx(opera $f);
}
else
{confess "Unable to document file $file";
}
exit
}
if (-e mwpl and $run) # Make with Perl locally
{my $p = join ' ', @ARGV;
my $c = mwpl;
print STDERR qx(perl -CSDA $c $p);
exit;
}
if ($file =~ m(\.p[lm]\Z)) # Perl
{if ($compile) # Syntax check perl
{print STDERR qx(perl -CSDA -cw "$file");
}
elsif ($run) # Run perl
{if ($file =~ m(.cgi\Z)s) # Run from web server
{&cgiPerl($file);
}
else # Run from command line
{say STDERR qq(perl -CSDA -w "$file");
( run in 0.651 second using v1.01-cache-2.11-cpan-71847e10f99 )