Problem with specmaker
Patrik Stridvall
ps at leissner.se
Thu Sep 6 16:59:31 CDT 2001
> "Guy L. Albertelli" wrote:
> >
> > Recently had a problem with specmaker not generating
> prototypes. Traced it
> > down to a problem in function_grep.pl.
> >
> > If the following lines are in a .h file, no prototypes
> after them are
> > recognized. Removing the lines from the .h file allows the
> prototype to be
> > generated:
> >
> > #define IShellIcon_METHODS \
> > ICOM_METHOD3(HRESULT, GetIconOf, \
> > LPCITEMIDLIST,pidl, UINT,flags, LPINT,lpIconIndex)
> >
> > I suspect that the preprocessor elimination did not expect multiline
> > condition.
Well, it knows about multiline directives but it doesn't handle all
case properly.
> > I don't know perl so I cann't fix it.
> thanks for sending the pb to me, but I didn't wrote that part at once
> (I just recently upgraded specmaker with some dump facilities)
> it seems however that the perl script only allow one backslash for
> multiline extensions but fails with more than one
> since Patrik seemed to have written this part at once (and it
> could/should
> be shared with the wineapi suite,
I borrowed (cut and paste) code from the winapi suite then I was
writing function_grep.pl. It is a crude hack but it works
(sort of at least).
And yes, function_grep.pl will be part of the winapi suite eventually
but probably not in the next few months, but you never know.
> I think he's the best suited for the
> fix... ;-)
Indeed. Here is a working fix I think (not tested).
I found a bug in winapi_check a while ago but the fix didn't
find its way the function_grep.pl it seems.
The problem might also be that there is whitespace after on of the
\:es. This is forbidden by ANSI C but most compilers accept it anyway.
Hmm. Thinking, modifying etc.
What about this?
Index: wine/tools/specmaker/function_grep.pl
===================================================================
RCS file: /home/wine/wine/tools/specmaker/function_grep.pl,v
retrieving revision 1.1
diff -u -u -r1.1 function_grep.pl
--- wine/tools/specmaker/function_grep.pl 2001/01/04 19:45:50 1.1
+++ wine/tools/specmaker/function_grep.pl 2001/09/06 21:50:26
@@ -60,11 +60,12 @@
if(/^\s*$/) { next; }
# remove preprocessor directives
- if(s/^\s*\#/\#/m) {
- if(/^\#.*?\\$/m) {
+ if(s/^\s*\#/\#/s) {
+ if(/^\#.*?\\\s*\n/s) {
$lookahead = 1;
next;
- } elsif(s/^\#\s*(.*?)(\s+(.*?))?\s*$//m) {
+ } elsif(s/^\#\s*\w+(?:\s+(.*?))?\s*$//s) {
+ $again = 1;
next;
}
}
More information about the wine-devel
mailing list