Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
core
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
LibreOffice
core
Commits
fdd2d4f7
Kaydet (Commit)
fdd2d4f7
authored
Ock 10, 2003
tarafından
Lars Langhans
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
some changes for code generation.
üst
4ac69871
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
234 additions
and
36 deletions
+234
-36
codegen.pl
testshl2/source/codegen/codegen.pl
+234
-36
No files found.
testshl2/source/codegen/codegen.pl
Dosyayı görüntüle @
fdd2d4f7
...
@@ -20,22 +20,27 @@ my @sMethodNames;
...
@@ -20,22 +20,27 @@ my @sMethodNames;
my
@sClassNameStack
;
my
@sClassNameStack
;
my
@sFilenameStack
;
my
@sFilenameStack
;
my
$sCurrentFilename
;
my
$sCurrentFilename
;
my
$nNoAdditionalAnyMore
=
0
;
my
$bShowDemo
=
1
;
my
$bShowDemo
=
1
;
my
$sSrcExt
=
".cxx"
;
# ------------------------------------------------------------------------------
# ------------------------------------------------------------------------------
sub
createFilename
sub
createFilename
{
{
my
$sPackageName
=
shift
;
my
$sPackageName
=
shift
;
my
$sFilename
=
"$sPackageName.cxx"
;
my
$sFilenameCounter
=
"$sPackageName$sSrcExt"
;
while
(
-
e
$sFilename
)
my
$sFilename
=
"$sPackageName"
;
my
$nCount
=
0
;
while
(
-
e
$sFilenameCounter
)
{
{
$nCount
++
;
$nCount
++
;
$sFilename
=
"$sPackageName"
.
"_$nCount"
;
$sFilename
=
"$sPackageName"
.
"_$nCount"
;
$sFilenameCounter
=
"$sFilename$sSrcExt"
;
}
}
push
(
@sFilenameStack
,
$sFilename
);
push
(
@sFilenameStack
,
$sFilename
);
$sCurrentFilename
=
$sFilename
.
".cxx"
;
$sCurrentFilename
=
$sFilename
Counter
;
return
$sFilename
;
return
$sFilename
Counter
;
}
}
# ------------------------------------------------------------------------------
# ------------------------------------------------------------------------------
...
@@ -44,14 +49,13 @@ sub generateNewPackage
...
@@ -44,14 +49,13 @@ sub generateNewPackage
my
$sPackageName
=
shift
;
my
$sPackageName
=
shift
;
my
$sFilename
=
createFilename
(
$sPackageName
);
my
$sFilename
=
createFilename
(
$sPackageName
);
open
(
CPPFILE
,
">$sFilename"
)
||
die
"can't create
cxx
source file"
;
open
(
CPPFILE
,
">$sFilename"
)
||
die
"can't create source file"
;
print
CPPFILE
"// autogenerated file with codegen.pl\n"
;
print
CPPFILE
"// autogenerated file with codegen.pl\n"
;
print
CPPFILE
"\n"
;
print
CPPFILE
"\n"
;
print
CPPFILE
"#include <cppunit/simpleheader.hxx>\n"
;
print
CPPFILE
"#include <cppunit/simpleheader.hxx>\n"
;
print
CPPFILE
"\n"
;
print
CPPFILE
"\n"
;
print
CPPFILE
"namespace $sPackageName\n"
;
print
CPPFILE
"namespace $sPackageName\n"
;
print
CPPFILE
"{\n"
;
print
CPPFILE
"{\n"
;
}
}
# ------------------------------------------------------------------------------
# ------------------------------------------------------------------------------
...
@@ -61,6 +65,7 @@ sub generateNewClass
...
@@ -61,6 +65,7 @@ sub generateNewClass
print
CPPFILE
"\n"
;
print
CPPFILE
"\n"
;
print
CPPFILE
"class $sClassName : public CppUnit::TestFixture\n"
;
print
CPPFILE
"class $sClassName : public CppUnit::TestFixture\n"
;
print
CPPFILE
"{\n"
;
print
CPPFILE
"{\n"
;
print
CPPFILE
"public:\n"
;
}
}
# ------------------------------------------------------------------------------
# ------------------------------------------------------------------------------
sub
closeMethods
sub
closeMethods
...
@@ -184,18 +189,25 @@ sub closePackage
...
@@ -184,18 +189,25 @@ sub closePackage
print
CPPFILE
"} // namespace $sCurrentPackage\n"
;
print
CPPFILE
"} // namespace $sCurrentPackage\n"
;
print
CPPFILE
"\n"
;
print
CPPFILE
"\n"
;
print
CPPFILE
"
print
CPPFILE
"
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
// this macro creates an empty function, which will called by the RegisterAllFunctions()
// this macro creates an empty function, which will called by the RegisterAllFunctions()
// to let the user the possibility to also register some functions by hand.
// to let the user the possibility to also register some functions by hand.
NOADDITIONAL;
"
;
"
;
# if the variable nNoAdditionalAnyMore is set to one, we insert a remark before
# the macro NOADDITIONAL; to prevent us from linker problems.
if
(
$nNoAdditionalAnyMore
==
1
)
{
print
CPPFILE
"// "
;
}
print
CPPFILE
"NOADDITIONAL;\n"
;
print
CPPFILE
"\n"
;
print
CPPFILE
"\n"
;
close
(
CPPFILE
);
close
(
CPPFILE
);
push
(
@sPackageStack
,
$sCurrentPackage
)
;
$nNoAdditionalAnyMore
=
1
;
$sCurrentPackage
=
""
;
$sCurrentPackage
=
""
;
}
}
...
@@ -220,6 +232,7 @@ sub walkThroughJobFile
...
@@ -220,6 +232,7 @@ sub walkThroughJobFile
open
(
FILE
,
$filename
)
||
die
"can't open $filename\n"
;
open
(
FILE
,
$filename
)
||
die
"can't open $filename\n"
;
print
"start jobfile interpreter.\n"
;
while
(
$line
=
<
FILE
>
)
while
(
$line
=
<
FILE
>
)
{
{
chomp
(
$line
);
chomp
(
$line
);
...
@@ -238,11 +251,27 @@ sub walkThroughJobFile
...
@@ -238,11 +251,27 @@ sub walkThroughJobFile
if
(
$line
=~
/^\w+/
)
# must start with a word character
if
(
$line
=~
/^\w+/
)
# must start with a word character
{
{
# print "$line\n";
# print "$line\n";
my
(
$sPackageName
,
$sClassName
,
$sMethodName
);
my
$sPackageName
=
""
;
(
$sPackageName
,
$sClassName
,
$sMethodName
)
=
split
(
/\./
,
$line
);
my
$sClassName
=
""
;
my
$sMethodName
=
""
;
my
@names
;
@names
=
split
(
/\./
,
$line
);
if
(
exists
$names
[
0
])
{
$sPackageName
=
$names
[
0
];
}
if
(
exists
$names
[
1
])
{
$sClassName
=
$names
[
1
];
}
if
(
exists
$names
[
2
])
{
$sMethodName
=
$names
[
2
];
}
if
(
$sClassName
=~
/^$/
)
if
(
$sClassName
=~
/^$/
)
{
{
print
"error: in $line, no class name exist.\n"
;
print
"error: in $line, no class name exist.
Build no code.
\n"
;
}
}
# test if it also works without methods
# test if it also works without methods
# elsif ($sMethodName =~ /^$/)
# elsif ($sMethodName =~ /^$/)
...
@@ -253,10 +282,10 @@ sub walkThroughJobFile
...
@@ -253,10 +282,10 @@ sub walkThroughJobFile
{
{
if
(
$sMethodName
=~
/^$/
)
if
(
$sMethodName
=~
/^$/
)
{
{
print
"warning: in $line, no method name exist, create only on
pseudo
member function.\n"
;
print
"warning: in $line, no method name exist, create only on
e
member function.\n"
;
}
}
print
"
$sPackageName :: $sClassName :: $sMethodName
\n"
;
print
"
build code for: ${sPackageName}.${sClassName}.${sMethodName}
\n"
;
if
(
$sCurrentPackage
ne
$sPackageName
)
if
(
$sCurrentPackage
ne
$sPackageName
)
{
{
...
@@ -285,20 +314,126 @@ sub walkThroughJobFile
...
@@ -285,20 +314,126 @@ sub walkThroughJobFile
closePackage
();
closePackage
();
close
(
FILE
);
close
(
FILE
);
# generate makefile
print
"done.\n\nThe following files are created:\n"
;
generateMakefileEntry
(
"test"
);
foreach
$sFilename
(
@sFilenameStack
)
{
print
" ${sFilename}${sSrcExt}\n"
;
}
print
"\n"
;
}
}
# ------------------------------------------------------------------------------
# ------------------------------------------------------------------------------
sub
generateMakefileEntry
sub
checkMakefileNumber
{
{
my
$sTargetName
=
shift
;
my
$sTargetName
=
shift
;
# This function gives back the lowest number for SHL\dTARGET
open
(
MAKEFILE
,
"makefile.mk"
)
||
return
-
1
;
my
$line
;
my
$nNumber
;
my
$nNumber
;
$nNumber
=
1
;
my
@aNumbers
;
my
$i
;
for
(
$i
=
1
;
$i
<
10
;
$i
++
)
{
$aNumbers
[
$i
]
=
0
;
}
my
$nReplacePos
=
-
1
;
while
(
$line
=
<
MAKEFILE
>
)
{
chomp
(
$line
);
if
(
$line
=~
/^SHL(\d)TARGET/
)
{
$aNumbers
[
$1
]
=
1
;
$line
=~
/^SHL(\d)TARGET=\s*(\S+)\s*/
;
open
(
MAKEFILE
,
">makefile.add"
)
||
die
"can't open makefile.add"
;
print
"Target: $2\n"
;
if
(
$sTargetName
eq
$2
)
{
print
"info: Targetname already exist.\n"
;
$nReplacePos
=
$1
;
}
}
}
close
(
MAKEFILE
);
print
MAKEFILE
"SHL"
.
$nNumber
.
"OBJS= "
;
my
$nFirstFree
=
0
;
for
(
$i
=
1
;
$i
<
10
;
$i
++
)
{
if
(
$aNumbers
[
$i
]
==
0
)
{
$nFirstFree
=
$i
;
last
;
}
}
return
$nFirstFree
,
$nReplacePos
;
}
# ------------------------------------------------------------------------------
sub
createNewMakefile
{
$sNewMakefileName
=
shift
;
my
$sTargetName
=
shift
;
my
$nNumber
=
shift
;
# this function split a makefile into two parts,
open
(
MAKEFILE
,
"makefile.mk"
)
||
return
;
my
@lines
=
<
MAKEFILE
>
;
close
(
MAKEFILE
);
# print "info: Makefile has $#lines lines.\n";
# search a point, where to insert the new makefile part.
my
$nTargetMK
=
-
1
;
for
(
$i
=
$#lines
;
$i
>
0
;
$i
--
)
{
if
(
$lines
[
$i
]
=~
/\.INCLUDE.*target.mk\s$/
)
{
$nTargetMK
=
$i
;
last
;
}
}
if
(
$nTargetMK
>
0
)
{
# print "info: target.mk found, is in line $nTargetMK\n";
# print "@lines[0]";
# print "@lines[1]";
# print "@lines[2]";
# print "@lines[$nTargetMK - 2]";
# print "@lines[$nTargetMK - 1]";
# print "@lines[$nTargetMK]";
open
(
MAKEFILE
,
">$sNewMakefileName"
)
||
return
;
for
(
$i
=
0
;
$i
<
(
$nTargetMK
-
2
);
$i
++
)
{
print
MAKEFILE
$lines
[
$i
];
}
generateMakefileEntry
(
$sTargetName
,
$nNumber
);
for
(
$i
=
(
$nTargetMK
-
2
);
$i
<=
$#lines
;
$i
++
)
{
print
MAKEFILE
$lines
[
$i
];
}
close
(
MAKEFILE
);
}
}
# ------------------------------------------------------------------------------
sub
generateMakefileEntry
{
# my MAKEFILE = shift;
my
$sTargetName
=
shift
;
my
$nNumber
=
shift
;
# open(MAKEFILE, ">makefile.add") || die "can't open makefile.add";
print
MAKEFILE
"# BEGIN ----------------------------------------------------------------\n"
;
print
MAKEFILE
"# auto generated Target:$sTargetName by codegen.pl \n"
;
print
MAKEFILE
"SHL${nNumber}OBJS= "
;
foreach
$sFilename
(
@sFilenameStack
)
foreach
$sFilename
(
@sFilenameStack
)
{
{
print
MAKEFILE
" \\\n"
;
print
MAKEFILE
" \\\n"
;
...
@@ -307,33 +442,44 @@ sub generateMakefileEntry
...
@@ -307,33 +442,44 @@ sub generateMakefileEntry
print
MAKEFILE
"\n\n"
;
print
MAKEFILE
"\n\n"
;
# targetname
# targetname
print
MAKEFILE
"SHL
"
.
$nNumber
.
"
TARGET= $sTargetName\n"
;
print
MAKEFILE
"SHL
${nNumber}
TARGET= $sTargetName\n"
;
# additional libraries
# additional libraries
print
MAKEFILE
"SHL
"
.
$nNumber
.
"
STDLIBS=\\\n"
;
print
MAKEFILE
"SHL
${nNumber}
STDLIBS=\\\n"
;
print
MAKEFILE
" \$(SALLIB) \n"
;
print
MAKEFILE
" \$(SALLIB) \n"
;
# link static cppunit library
# link static cppunit library
print
MAKEFILE
".IF \"\$(GUI)\" == \"WNT\"\n"
;
print
MAKEFILE
".IF \"\$(GUI)\" == \"WNT\"\n"
;
print
MAKEFILE
"SHL
"
.
$nNumber
.
"STDLIBS+=
\$(SOLARLIBDIR)\$/cppunit.lib\n"
;
print
MAKEFILE
"SHL
${nNumber}STDLIBS+=
\$(SOLARLIBDIR)\$/cppunit.lib\n"
;
print
MAKEFILE
".ENDIF\n"
;
print
MAKEFILE
".ENDIF\n"
;
print
MAKEFILE
".IF \"\$(GUI)\" == \"UNX\"\n"
;
print
MAKEFILE
".IF \"\$(GUI)\" == \"UNX\"\n"
;
print
MAKEFILE
"SHL
"
.
$nNumber
.
"
STDLIBS+=\$(SOLARLIBDIR)\$/libcppunit\$(DLLPOSTFIX).a\n"
;
print
MAKEFILE
"SHL
${nNumber}
STDLIBS+=\$(SOLARLIBDIR)\$/libcppunit\$(DLLPOSTFIX).a\n"
;
print
MAKEFILE
".ENDIF\n"
;
print
MAKEFILE
".ENDIF\n"
;
print
MAKEFILE
"\n"
;
print
MAKEFILE
"\n"
;
print
MAKEFILE
"SHL
"
.
$nNumber
.
"IMPLIB= i\$(SHL"
.
$nNumber
.
"
TARGET)\n"
;
print
MAKEFILE
"SHL
${nNumber}IMPLIB= i\$(SHL${nNumber}
TARGET)\n"
;
print
MAKEFILE
"SHL
"
.
$nNumber
.
"DEF= \$(MISC)\$/\$(SHL"
.
$nNumber
.
"
TARGET).def\n"
;
print
MAKEFILE
"SHL
${nNumber}DEF= \$(MISC)\$/\$(SHL${nNumber}
TARGET).def\n"
;
print
MAKEFILE
"\n"
;
print
MAKEFILE
"\n"
;
# DEF name
# DEF name
print
MAKEFILE
"DEF"
.
$nNumber
.
"NAME =\$(SHL"
.
$nNumber
.
"TARGET)\n"
;
print
MAKEFILE
"DEF${nNumber}NAME =\$(SHL${nNumber}TARGET)\n"
;
print
MAKEFILE
"DEF"
.
$nNumber
.
"EXPORTFILE= export.exp\n"
;
print
MAKEFILE
"DEF${nNumber}EXPORTFILE= export.exp\n"
;
print
MAKEFILE
"# auto generated Target:$sTargetName\n"
;
print
MAKEFILE
"# END ------------------------------------------------------------------\n\n"
;
close
(
MAKEFILE
);
# close(MAKEFILE);
}
if
(
!
-
e
"export.exp"
)
# ------------------------------------------------------------------------------
{
sub
usage
open
(
EXPORTEXP
,
">export.exp"
)
||
die
"can't create export.exp"
;
{
print
EXPORTEXP
"registerAllTestFunction\n"
;
print
"usage:\ncodegen.pl joblist\n"
;
close
(
EXPORTEXP
);
print
"\n(c) Sun Microsystems Inc. 2002\n"
;
}
print
"
This is a testshl2 codegenerator which creates compilable C++ source files
with stub functions for all given test routines from the jobfile.
Also generate a makefile entry which is insert in the makefile.new
if a makefile.mk already exist or this tool creates a makefile.add. Which
has to add into a new makefile.mk by hand.
Also generate a export.exp file, if no one exist.
"
;
exit
(
1
);
}
}
# -------------------------------- main function --------------------------------
# -------------------------------- main function --------------------------------
...
@@ -344,10 +490,62 @@ sub main
...
@@ -344,10 +490,62 @@ sub main
usage
();
usage
();
}
}
my
$jobfile
=
$ARGV
[
0
];
my
$jobfile
=
$ARGV
[
0
];
my
$sTargetName
;
if
(
$#ARGV
<
2
)
{
# remove .sce
$sTargetName
=
$jobfile
;
$sTargetName
=~
s/\.\w*//
;
}
else
{
$sTargetName
=
$ARGV
[
1
];
}
print
"Test code generator\n\n"
;
print
"Test code generator\n"
;
if
(
!
-
e
$jobfile
)
{
print
"error: given jobfile $jobfile doesn't exist.\n"
;
exit
(
1
);
}
walkThroughJobFile
(
$jobfile
);
walkThroughJobFile
(
$jobfile
);
# generate makefile
if
(
-
e
"makefile.mk"
)
{
my
$n
;
my
$nReplacePos
;
(
$n
,
$nReplacePos
)
=
checkMakefileNumber
(
$sTargetName
);
# $n == -1 no makefile
# $n == 0 no free number
# $n 1..9 ok.
if
(
$n
>
0
)
{
my
$sNewMakefileName
=
"makefile.new"
;
print
"Makefile: Add the 'SHL${n}TARGET' to the file '$sNewMakefileName'\n"
;
createNewMakefile
(
$sNewMakefileName
,
$sTargetName
,
$n
);
}
}
else
{
print
"warning: no makefile found, please add the content of makefile.add to a makefile.mk file\n"
;
open
(
MAKEFILE
,
">makefile.add"
);
generateMakefileEntry
(
$sTargetName
,
1
);
close
(
MAKEFILE
);
}
print
"\n"
;
if
(
!
-
e
"export.exp"
)
{
print
"info: create export.exp file\n"
;
open
(
EXPORTEXP
,
">export.exp"
)
||
die
"can't create export.exp"
;
print
EXPORTEXP
"registerAllTestFunction\n"
;
close
(
EXPORTEXP
);
}
else
{
print
"The file 'export.exp' file already exist, please make sure that it contain an entry 'registerAllTestFunction'.\n"
;
}
}
}
# ------------------------------------------------------------------------------
# ------------------------------------------------------------------------------
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment