2010-09-01 13:27:24 +02:00
|
|
|
#!/usr/bin/perl -w
|
|
|
|
|
|
|
|
|
|
# *************************************************************************
|
|
|
|
|
#
|
|
|
|
|
# This file is part of Qt Creator
|
|
|
|
|
#
|
2011-01-11 16:28:15 +01:00
|
|
|
# Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
|
2010-09-01 13:27:24 +02:00
|
|
|
#
|
2011-11-02 15:59:12 +01:00
|
|
|
# Contact: Nokia Corporation (qt-info@nokia.com)
|
2010-09-01 13:27:24 +02:00
|
|
|
#
|
2011-04-13 08:42:33 +02:00
|
|
|
# GNU Lesser General Public License Usage
|
2010-09-01 13:27:24 +02:00
|
|
|
#
|
2011-04-13 08:42:33 +02:00
|
|
|
# This file may be used under the terms of the GNU Lesser General Public
|
|
|
|
|
# License version 2.1 as published by the Free Software Foundation and
|
|
|
|
|
# appearing in the file LICENSE.LGPL included in the packaging of this file.
|
|
|
|
|
# Please review the following information to ensure the GNU Lesser General
|
|
|
|
|
# Public License version 2.1 requirements will be met:
|
|
|
|
|
# http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
2010-09-01 13:27:24 +02:00
|
|
|
#
|
2011-04-13 08:42:33 +02:00
|
|
|
# In addition, as a special exception, Nokia gives you certain additional
|
|
|
|
|
# rights. These rights are described in the Nokia Qt LGPL Exception
|
|
|
|
|
# version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
|
|
|
|
#
|
|
|
|
|
# Other Usage
|
2010-09-01 13:27:24 +02:00
|
|
|
#
|
2011-04-13 08:42:33 +02:00
|
|
|
# Alternatively, this file may be used in accordance with the terms and
|
|
|
|
|
# conditions contained in a signed written agreement between you and Nokia.
|
2010-09-01 13:27:24 +02:00
|
|
|
#
|
|
|
|
|
# If you are unsure which license is appropriate for your use, please
|
|
|
|
|
# contact the sales department at http://qt.nokia.com/contact.
|
|
|
|
|
#
|
|
|
|
|
# *************************************************************************
|
|
|
|
|
|
|
|
|
|
use strict;
|
|
|
|
|
use Getopt::Long;
|
|
|
|
|
use IO::File;
|
|
|
|
|
|
|
|
|
|
my $optDryRun = 0;
|
2010-09-03 14:27:13 +02:00
|
|
|
my $optHelp = 0;
|
|
|
|
|
my $optClassName = 'MyClass';
|
|
|
|
|
my $optProjectName = 'MyProject';
|
|
|
|
|
my $optCppHeaderSuffix = 'h';
|
|
|
|
|
my $optCppSourceSuffix = 'cpp';
|
|
|
|
|
my $optDescription = '';
|
|
|
|
|
|
|
|
|
|
# -- Read in a file and return its lines
|
|
|
|
|
sub readFile
|
|
|
|
|
{
|
|
|
|
|
my ($fileName) = @_;
|
|
|
|
|
my @rc = ();
|
|
|
|
|
my $fh = new IO::File('<' . $fileName) or die ('Unable to open for reading ' . $fileName . ' :' . $!);
|
|
|
|
|
while (my $line = <$fh>) {
|
|
|
|
|
chomp($line);
|
|
|
|
|
push (@rc, $line);
|
|
|
|
|
}
|
|
|
|
|
$fh->close();
|
|
|
|
|
return @rc;
|
|
|
|
|
}
|
2010-09-01 13:27:24 +02:00
|
|
|
|
|
|
|
|
my $USAGE=<<EOF;
|
2010-09-03 14:27:13 +02:00
|
|
|
Usage: generate.pl [--help] | [--dry-run]
|
|
|
|
|
[--class-name=<class name>]
|
|
|
|
|
[--project-name=<project name>]
|
|
|
|
|
[--header-suffix=<header suffix>]
|
|
|
|
|
[--source-suffix=<source suffix>]
|
|
|
|
|
[--description=<description-file>]
|
2010-09-01 13:27:24 +02:00
|
|
|
|
|
|
|
|
Custom wizard project generation example script.
|
|
|
|
|
|
|
|
|
|
EOF
|
|
|
|
|
|
2010-09-03 14:27:13 +02:00
|
|
|
my $argCount = scalar(@ARGV);
|
|
|
|
|
if ($argCount == 0
|
|
|
|
|
|| !GetOptions("help" => \$optHelp,
|
|
|
|
|
"dry-run" => \$optDryRun,
|
|
|
|
|
"class-name:s" => \$optClassName,
|
|
|
|
|
"project-name:s" => \$optProjectName,
|
|
|
|
|
"header-suffix:s" => \$optCppHeaderSuffix,
|
|
|
|
|
"source-suffix:s" => \$optCppSourceSuffix,
|
|
|
|
|
"description:s" => \$optDescription)
|
|
|
|
|
|| $optHelp != 0) {
|
2010-09-01 13:27:24 +02:00
|
|
|
print $USAGE;
|
|
|
|
|
exit (1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# -- Determine file names
|
2010-09-03 14:27:13 +02:00
|
|
|
my $baseFileName = lc($optClassName);
|
|
|
|
|
my $sourceFileName = $baseFileName . '.' . $optCppSourceSuffix;
|
|
|
|
|
my $headerFileName = $baseFileName . '.' . $optCppHeaderSuffix;
|
|
|
|
|
my $mainSourceFileName = 'main.' . $optCppSourceSuffix;
|
|
|
|
|
my $projectFileName = lc($optProjectName) . '.pro';
|
2010-09-01 13:27:24 +02:00
|
|
|
|
|
|
|
|
if ($optDryRun) {
|
|
|
|
|
# -- Step 1) Dry run: Print file names along with attributes
|
|
|
|
|
print $sourceFileName,",openeditor\n";
|
|
|
|
|
print $headerFileName,",openeditor\n";
|
|
|
|
|
print $mainSourceFileName,",openeditor\n";
|
|
|
|
|
print $projectFileName,",openproject\n";
|
|
|
|
|
} else {
|
|
|
|
|
# -- Step 2) Actual file creation
|
|
|
|
|
print 'Generating ', $headerFileName, ' ', $sourceFileName, ' ',
|
|
|
|
|
$mainSourceFileName, ' ', $projectFileName, "\n";
|
|
|
|
|
my $headerFile = new IO::File('>' . $headerFileName) or die ('Unable to open ' . $headerFileName . ' :' . $!);
|
2010-09-03 14:27:13 +02:00
|
|
|
print $headerFile '#ifndef ', uc($optClassName), "_H\n#define ", uc($optClassName), "_H\n\n",
|
|
|
|
|
'class ', $optClassName, "{\npublic:\n ", $optClassName, "();\n\n};\n\n#endif\n";
|
2010-09-01 13:27:24 +02:00
|
|
|
$headerFile->close();
|
|
|
|
|
|
|
|
|
|
my $sourceFile = new IO::File('>' . $sourceFileName) or die ('Unable to open ' . $sourceFileName . ' :' . $!);
|
|
|
|
|
print $sourceFile '#include "', $headerFileName ,"\"\n\n",
|
2010-09-03 14:27:13 +02:00
|
|
|
$optClassName,'::', $optClassName, "()\n{\n}\n";
|
2010-09-01 13:27:24 +02:00
|
|
|
$sourceFile->close();
|
|
|
|
|
|
|
|
|
|
my $mainSourceFile = new IO::File('>' . $mainSourceFileName) or die ('Unable to open ' . $mainSourceFileName . ' :' . $!);
|
2010-09-03 14:27:13 +02:00
|
|
|
print $mainSourceFile '#include "', $headerFileName ,"\"\n\n";
|
|
|
|
|
# -- Write out description comments
|
|
|
|
|
if ($optDescription ne '') {
|
|
|
|
|
foreach my $description (readFile($optDescription)) {
|
|
|
|
|
print $mainSourceFile '// ', $description, "\n";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
print $mainSourceFile "int main(int argc, char *argv[])\n{\n ", $optClassName,' ', lc($optClassName),
|
2010-09-01 13:27:24 +02:00
|
|
|
";\n return 0;\n}\n";
|
|
|
|
|
$mainSourceFile->close();
|
|
|
|
|
|
|
|
|
|
my $projectFile = new IO::File('>' . $projectFileName) or die ('Unable to open ' . $projectFileName . ' :' . $!);
|
2010-09-03 14:27:13 +02:00
|
|
|
print $projectFile "TEMPLATE = app\nQT -= core\nCONFIG += console\nTARGET = ", $optProjectName,
|
2010-09-01 13:27:24 +02:00
|
|
|
"\nSOURCES += ", $sourceFileName, ' ',$headerFileName, ' ', $mainSourceFileName,
|
|
|
|
|
"\nHEADERS += ", $headerFileName,"\n";
|
|
|
|
|
$projectFile->close();
|
|
|
|
|
}
|