mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-08 22:58:50 +02:00
132 lines
3.4 KiB
Perl
Executable File
132 lines
3.4 KiB
Perl
Executable File
#!/usr/bin/env perl
|
|
#
|
|
# *****************************************************************************
|
|
# * *
|
|
# * See the file COPYING.modifiedLGPL, included in this distribution, *
|
|
# * for details about the copyright. *
|
|
# * *
|
|
# * This program is distributed in the hope that it will be useful, *
|
|
# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
|
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
|
|
# * *
|
|
# *****************************************************************************
|
|
#
|
|
# Author: Mattias Gaertner
|
|
#
|
|
# 14-May-2007 Added recursive search by Darius Blaszyk
|
|
|
|
use vars qw/ %opt /;
|
|
use Getopt::Std;
|
|
use File::Find;
|
|
use File::Basename;
|
|
|
|
my $opt_string = 'hp:s:o:i:m:xr';
|
|
getopts( "$opt_string", \%opt ) or usage();
|
|
usage() if $opt{h};
|
|
|
|
sub usage(){
|
|
print STDERR << "EOF";
|
|
|
|
Create fpdoc sceletons for pascal units
|
|
|
|
usage: $0 [-hpsoimx]
|
|
|
|
-h : this (help) message
|
|
-p <packagename> : the FPDoc package name to which the units belong
|
|
-s <source directory> : the source directory with the .pp and .pas files
|
|
-r : search the sourcedir recursively
|
|
-o <output directory> : the output directory for the xml files
|
|
|
|
optional:
|
|
-i <parser options> : the input options for the parser
|
|
-m <makeskel> : alternative path to makeskel
|
|
-x : do not simulate, execute makeskel and overwrite all existing xml files
|
|
|
|
examples:
|
|
multi_makeskel.pl -p lcl -s ../../lcl -o lcl -i '-Fi/path/to/lazarus/lcl/include'
|
|
|
|
EOF
|
|
exit;
|
|
}
|
|
|
|
sub wanted {
|
|
#$File::Find::dir = /some/path/
|
|
#$_ = foo.ext
|
|
#$File::Find::name = /some/path/foo.ext
|
|
|
|
my(undef, undef, $ftype) = fileparse($_, qr"\..*");
|
|
|
|
if (($ftype eq ".pp") || ($ftype eq ".pas")) {
|
|
unshift(@Files, $File::Find::name);
|
|
}
|
|
}
|
|
|
|
($opt{p}) || usage(); # packagename needed
|
|
($opt{s}) || usage(); # source directory needed
|
|
($opt{o}) || usage(); # output directory needed
|
|
|
|
$PackageName=$opt{p};
|
|
($PackageName=~/^[a-z0-9][a-z0-9_]*$/) || die "invalid packagename $PackageName\n";
|
|
|
|
$SrcDir=$opt{s};
|
|
(-d $SrcDir) || die "source directory $SrcDir is not a directory\n";
|
|
$SrcDir=~s#//#/#;
|
|
$SrcDir=~s#/$##;
|
|
|
|
$OutDir=$opt{o};
|
|
(-d $OutDir) || die "output directory $OutDir is not a directory\n";
|
|
$OutDir=~s#//#/#;
|
|
$OutDir=~s#/$##;
|
|
|
|
$Makeskel="makeskel";
|
|
if($opt{m}){
|
|
$Makeskel=$opt{m};
|
|
}
|
|
|
|
$ParserOptions="";
|
|
if($opt{p}){
|
|
$ParserOptions=$opt{p};
|
|
}
|
|
|
|
# get pascal unit files
|
|
if($opt{r}){
|
|
#recursively find unit files
|
|
find(\&wanted, $SrcDir);
|
|
} else {
|
|
opendir(DIR, $SrcDir);
|
|
@Files = grep(/\.(pas|pp)$/,readdir(DIR));
|
|
closedir(DIR);
|
|
}
|
|
for $SrcFile(@Files){
|
|
$OutFile = fileparse($SrcFile);
|
|
($OutFile=~s/\.(pas|pp)$/.xml/);
|
|
print $SrcFile." -> ".$OutFile."\n";
|
|
|
|
#create the input filename
|
|
if($opt{r}){
|
|
$Input=$SrcFile;
|
|
} else {
|
|
$Input=$SrcDir."/".$SrcFile;
|
|
}
|
|
|
|
if ($opt{i}){
|
|
$Input.="' ".$opt{i}."'";
|
|
}
|
|
$Output=$OutDir."/".$OutFile;
|
|
$Command="$Makeskel --package=$PackageName --input=$Input --output=$Output";
|
|
print $Command."\n";
|
|
if($opt{x}){
|
|
system($Command);
|
|
if($?){
|
|
exit;
|
|
}
|
|
}
|
|
}
|
|
|
|
if(!$opt{x}){
|
|
print "\nThis was a simulation. To really overwrite the xml files, use the -x option.\n";
|
|
}
|
|
|
|
# end.
|
|
|