Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Development
openfoam
Commits
7bf3fd24
Commit
7bf3fd24
authored
Dec 17, 2014
by
Henry
Browse files
Coco/R based parsers are no longer supported
parent
bf3cd16f
Changes
8
Expand all
Hide whitespace changes
Inline
Side-by-side
wmake/src/Makefile
View file @
7bf3fd24
...
...
@@ -58,7 +58,7 @@ include $(RULES)/$(WM_LINK_LANGUAGE)
# targets
#------------------------------------------------------------------------------
all
:
$(WMAKE_BIN)/dirToString $(WMAKE_BIN)/wmkdep
$(WMAKE_BIN)/wmkdepend
all
:
$(WMAKE_BIN)/dirToString $(WMAKE_BIN)/wmkdep
clean
:
rm
-f
$(WMAKE_BIN)
/
*
2>/dev/null
...
...
@@ -76,13 +76,4 @@ $(WMAKE_BIN)/wmkdep: wmkdep.l
@
rm
-f
lex.yy.c 2>/dev/null
# for bootstrapping - use generated files directly (instead of from .atg file)
$(WMAKE_BIN)/wmkdepend
:
wmkdepend.cpp
\
wmkdependParser.cpp wmkdependScanner.cpp
\
wmkdependParser.h wmkdependScanner.h
@
mkdir
-p
$(WMAKE_BIN)
$(CC)
$
(
c++FLAGS
)
\
wmkdepend.cpp wmkdependParser.cpp wmkdependScanner.cpp
\
-o
$(WMAKE_BIN)
/wmkdepend
#------------------------------------------------------------------------------
wmake/src/makeParserCode
deleted
100755 → 0
View file @
bf3cd16f
#!/bin/sh
#------------------------------------------------------------------------------
# ========= |
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
# \\ / O peration |
# \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation
# \\/ M anipulation |
#------------------------------------------------------------------------------
# License
# This file is part of OpenFOAM.
#
# OpenFOAM is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# OpenFOAM 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. See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License
# along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
#
# Script
# makeParserCode
#
# Description
# Use coco-cpp to create parser code
#
#------------------------------------------------------------------------------
cd
${
0
%/*
}
||
exit
1
# Run from this directory
Script
=
${
0
##*/
}
binDir
=
$WM_THIRD_PARTY_DIR
/platforms/
$WM_ARCH$WM_COMPILER
/coco-cpp/bin
frames
=
$binDir
/../share/coco-cpp
[
-d
"
$binDir
"
-a
-x
"
$binDir
/coco-cpp"
]
||
{
echo
"
$Script
error: no coco-cpp binary found"
exit
1
}
[
-d
"
$frames
"
-a
-f
"
$frames
/Parser.frame"
-a
-f
"
$frames
/Scanner.frame"
]
||
{
echo
"
$Script
error: no coco-cpp frames found"
exit
1
}
# Run coco-cpp:
$binDir
/coco-cpp wmkdependParser.atg
echo
echo
Done
#------------------------------------------------------------------------------
wmake/src/wmkdepend.cpp
deleted
100644 → 0
View file @
bf3cd16f
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
\\/ M anipulation |
------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM 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. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Application
wmkdepend
Description
A fast dependency list generator that emulates the behaviour and
output of cpp -M. However, the output contains no duplications and
is ~40% faster than cpp.
The algorithm uses flex to scan for includes and searches the files
found. Each file is entered into a hash table so that files are scanned
only once. This is why this program is faster than cpp.
Usage
wmkdepend [ -Idir ... -Idir ] [ -iheader .. -iheader ] filename
\*---------------------------------------------------------------------------*/
#include
<cstdio>
#include
<cstdlib>
#include
<cstring>
#include
"wmkdependParser.h"
// Note: since we use the Coco/R default error messages, we must use
// wide streams for stderr.
void
printUsage
(
const
char
*
message
=
NULL
)
{
if
(
message
)
{
fwprintf
(
stderr
,
L"
\n
Error: %s
\n\n
"
,
message
);
}
fwprintf
(
stderr
,
L"Usage: wmkdepend %s filename
\n
Options:
\n
%s
\n
"
,
"[ -Idir ... -Idir ] [ -iheader .. -iheader ]"
,
" -Idir specify include directory
\n
"
" -iheader specify header name to ignore
\n
"
);
}
int
main
(
int
argc
,
char
*
argv
[])
{
if
(
argc
==
1
)
{
printUsage
(
"input file not supplied"
);
::
exit
(
1
);
}
for
(
int
i
=
1
;
i
<
argc
;
i
++
)
{
if
(
strncmp
(
argv
[
i
],
"-I"
,
2
)
==
0
)
{
if
(
strlen
(
argv
[
i
])
>
2
)
{
std
::
string
dirName
(
argv
[
i
]
+
2
);
// add trailing slash if required
if
(
dirName
.
rfind
(
'/'
)
!=
dirName
.
size
()
-
1
)
{
dirName
+=
'/'
;
}
wmake
::
Parser
::
includeDirs
.
push_back
(
dirName
);
}
}
else
if
(
strncmp
(
argv
[
i
],
"-i"
,
2
)
==
0
)
{
if
(
strlen
(
argv
[
i
])
>
2
)
{
wmake
::
Parser
::
visitedFiles
.
insert
(
argv
[
i
]
+
2
);
}
}
}
std
::
string
sourceFile
(
argv
[
argc
-
1
]);
fwprintf
(
stderr
,
L"Making dependency list for source file %s
\n
"
,
sourceFile
.
c_str
()
);
std
::
string
::
size_type
basePos
=
sourceFile
.
rfind
(
'/'
);
if
(
basePos
==
std
::
string
::
npos
)
{
basePos
=
0
;
}
else
{
basePos
++
;
}
std
::
string
::
size_type
dotPos
=
sourceFile
.
rfind
(
'.'
);
if
(
dotPos
==
std
::
string
::
npos
||
dotPos
==
sourceFile
.
size
()
-
1
||
dotPos
<=
basePos
)
{
fwprintf
(
stderr
,
L"cannot find extension in source file name %s
\n
"
,
sourceFile
.
c_str
()
);
::
exit
(
1
);
}
std
::
string
depFile
=
sourceFile
.
substr
(
0
,
dotPos
);
depFile
+=
".dep"
;
const
std
::
string
sourceExt
=
sourceFile
.
substr
(
dotPos
);
if
(
sourceExt
==
".java"
)
{
// import directories to ignore
wmake
::
Parser
::
ignoreDir
(
"java.*"
);
wmake
::
Parser
::
ignoreDir
(
"org.*"
);
wmake
::
Parser
::
ignoreDir
(
"com.*"
);
wmake
::
Parser
::
ignoreDir
(
"sunw.*"
);
wmake
::
Parser
::
ignoreDir
(
"sun.*"
);
wmake
::
Parser
::
ignoreDir
(
"launcher.*"
);
std
::
cout
<<
"$(CLASSES_DIR)/"
<<
sourceFile
.
substr
(
basePos
,
dotPos
-
basePos
)
<<
".class: "
<<
depFile
<<
"
\n
"
;
}
else
{
std
::
cout
<<
"$(OBJECTS_DIR)/"
<<
sourceFile
.
substr
(
basePos
,
dotPos
-
basePos
)
<<
".o: "
<<
depFile
<<
"
\n
"
;
}
wmake
::
Parser
::
sourceFile
=
sourceFile
;
wmake
::
Parser
::
depFile
=
depFile
;
wmake
::
Parser
::
includeFile
(
sourceFile
);
return
0
;
}
/*****************************************************************************/
wmake/src/wmkdependParser.atg
deleted
100644 → 0
View file @
bf3cd16f
/*---------------------------------------------------------------------------*\
Attributed Grammar for Coco/R (-*- C++ -*- version)
compile with:
coco-cpp wmkdependParser.atg
\*---------------------------------------------------------------------------*/
[copy]
/*---------------------------------*- C++ -*---------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM 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. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
@file wmkdependParser.atg
Description
An attributed Coco/R grammar to parse C/C++, Fortran and Java files
for include and import statements.
SourceFiles
generated
\*---------------------------------------------------------------------------*/
[/copy]
#include <iostream>
#include <string>
#include <list>
#include <set>
/*---------------------------------------------------------------------------*/
COMPILER wmkdepend
// grammar pragmas:
$namespace=wmake
$prefix=wmkdepend
$define=FORCE_UTF8
/*---------------------------------------------------------------------------*/
private:
//! Set of (java) directories already visited
static std::set<std::string> visitedDirs_;
//! Replace all '.' with '/'
static void dotToSlash(std::string& name);
//! Import (java) directories
static void importDir(const std::string& dirName);
//! Import (java) file
static void importFile(const std::string& name);
public:
//! Set of files already visited
static std::set<std::string> visitedFiles;
//! Include directories to search
static std::list<std::string> includeDirs;
//! The name of the top-level source file
static std::string sourceFile;
//! The name of the top-level dep file
static std::string depFile;
//! Add directory to list of visited dirs, thus effectively ignoring it
static void ignoreDir(const std::string& name);
//! Include file
static void includeFile(const std::string& name);
/*---------------------------------------------------------------------------*/
[code]
#include <sys/types.h>
#include <dirent.h>
std::set<std::string> Parser::visitedDirs_;
std::set<std::string> Parser::visitedFiles;
std::list<std::string> Parser::includeDirs;
std::string Parser::sourceFile;
std::string Parser::depFile;
void Parser::dotToSlash(std::string& name)
{
std::string::size_type start = 0;
while ((start = name.find('.', start)) != std::string::npos)
{
name.replace(start, 1, 1, '/');
start++;
}
}
void Parser::ignoreDir(const std::string& name)
{
visitedDirs_.insert(name);
}
void Parser::includeFile(const std::string& name)
{
if (!visitedFiles.insert(name).second)
{
return; // already existed (did not insert)
}
// use stdio and buffering within Coco/R -- (faster)
FILE *fh = fopen(name.c_str(), "r");
if (fh)
{
std::cout << depFile << ": " << name << "\n";
}
else
{
for
(
std::list<std::string>::const_iterator iter = includeDirs.begin();
iter != includeDirs.end();
++iter
)
{
const std::string pathName = *iter + name;
fh = fopen(pathName.c_str(), "r");
if (fh)
{
std::cout << depFile << ": " << pathName << "\n";
break;
}
}
}
if (fh)
{
Scanner scanner(fh);
Parser parser(&scanner);
parser.Parse();
fclose(fh);
}
else
{
fwprintf
(
stderr,
L"could not open file %s for source file %s\n",
name.c_str(), sourceFile.c_str()
);
// only report the first occurance
visitedFiles.insert(name);
}
}
void Parser::importFile(const std::string& name)
{
// check if a globbed form was already visited
std::string::size_type dotPos = name.find('.');
if (dotPos != std::string::npos)
{
std::string dirGlob = name.substr(0, dotPos);
dirGlob += ".*";
if (visitedDirs_.find(dirGlob) != visitedDirs_.end())
{
return;
}
}
std::string javaFileName = name;
dotToSlash(javaFileName);
javaFileName += ".java";
includeFile(javaFileName);
}
void Parser::importDir(const std::string& name)
{
if (!visitedDirs_.insert(name).second)
{
return; // already existed (did not insert)
}
std::string dirName = name;
dotToSlash(dirName);
DIR *source = opendir(dirName.c_str());
if (source)
{
struct dirent *list;
// Read and parse all the entries in the directory
while ((list = readdir(source)) != NULL)
{
const char* ext = strstr(list->d_name, ".java");
// avoid matching on something like '.java~'
if (ext && strlen(ext) == 5)
{
std::string pathName = dirName + list->d_name;
includeFile(pathName);
}
}
closedir(source);
}
else
{
fwprintf
(
stderr,
L"could not open directory %s\n",
dirName.c_str()
);
return;
}
}
[/code]
/*---------------------------------------------------------------------------*/
CHARACTERS
letter = 'A'..'Z' + 'a'..'z' + '_'.
digit = "0123456789".
cr = '\r'.
lf = '\n'.
tab = '\t'.
stringCh = ANY - '"' - '\\' - cr - lf.
printable = '\u0020' .. '\u007e'.
java_letter = letter + '$'.
// * * * * * * * * * * * * * * * * TOKENS * * * * * * * * * * * * * * * * * //
TOKENS
// string
string =
'"' { stringCh | '\\' printable } '"'.
// single-quoted string (eg, Fortran)
sqstring =
'\'' { stringCh | '\\' printable } '\''.
// for java import
package_name =
java_letter { java_letter | digit }
{ '.' java_letter { java_letter | digit } } .
// for java import
package_dir =
java_letter { java_letter | digit }
{ '.' java_letter { java_letter | digit } } ".*" .
// * * * * * * * * * * * PRAGMAS / COMMENTS / IGNORE * * * * * * * * * * * //
COMMENTS FROM "/*" TO "*/" NESTED
COMMENTS FROM "//" TO lf
IGNORE tab
// * * * * * * * * * * * * * * * PRODUCTIONS * * * * * * * * * * * * * * * //
PRODUCTIONS
wmkdepend
=
{
// C/C++-style includes
'#'
[
"include"
[
string (.
if (isUTF8())
{
includeFile(t->toStringUTF8(1, t->length()-2));
}
else
{
includeFile(t->toString(1, t->length()-2));
}
.)
]
]
[ ANY { ANY } ] '\n' // skip trailing junk
// Fortran-style includes
| "include"
[
sqstring (.
if (isUTF8())
{
includeFile(t->toStringUTF8(1, t->length()-2));
}
else
{
includeFile(t->toString(1, t->length()-2));
}
.)
]
[ ANY { ANY } ] '\n' // skip trailing junk
// Java imports
| "import"
(
package_dir (.
if (isUTF8())
{
importDir(t->toStringUTF8());
}
else
{
importDir(t->toString());
}
.)
| package_name (.
if (isUTF8())
{
importFile(t->toStringUTF8());
}
else
{
importFile(t->toString());
}
.)
)
';'
[ ANY { ANY } ] '\n' // skip trailing junk
| [ ANY { ANY } ] '\n' // skip any other lines
}
.
/*---------------------------------------------------------------------------*/
END wmkdepend.
// ************************************************************************* //
wmake/src/wmkdependParser.cpp
deleted
100644 → 0
View file @
bf3cd16f
/*---------------------------------*- C++ -*---------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM 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. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
@file wmkdependParser.atg