[Libreoffice-commits] .: 2 commits - config_host.mk.in configure.in idlc/CustomTarget_scanner.mk idlc/Executable_idlc.mk idlc/Module_idlc.mk idlc/source solenv/gbuild

David Tardon dtardon at kemper.freedesktop.org
Mon Apr 30 22:29:12 PDT 2012


 config_host.mk.in                |    1 
 configure.in                     |    1 
 idlc/CustomTarget_scanner.mk     |   39 --
 idlc/Executable_idlc.mk          |    5 
 idlc/Module_idlc.mk              |    1 
 idlc/source/scanner.l            |  536 +++++++++++++++++++++++++++++++++++++++
 idlc/source/scanner.ll           |  536 ---------------------------------------
 idlc/source/wrap_parser.cxx      |   32 --
 idlc/source/wrap_scanner.cxx     |   38 --
 solenv/gbuild/Executable.mk      |    2 
 solenv/gbuild/Library.mk         |    2 
 solenv/gbuild/LinkTarget.mk      |   49 +++
 solenv/gbuild/TargetLocations.mk |    5 
 13 files changed, 599 insertions(+), 648 deletions(-)

New commits:
commit 1bec43481eb6cbe58b22b8c2ce3688e858f5f92f
Author: David Ostrovsky <David.Ostrovsky at gmx.de>
Date:   Tue May 1 00:04:38 2012 +0200

    build: cleaning up previously converted idlc module
    
    Change-Id: Ic90495f677dc42c0430492548deaa9f9b10e4d44

diff --git a/idlc/CustomTarget_scanner.mk b/idlc/CustomTarget_scanner.mk
deleted file mode 100644
index e7e3c2f..0000000
--- a/idlc/CustomTarget_scanner.mk
+++ /dev/null
@@ -1,39 +0,0 @@
-# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
-# Version: MPL 1.1 / GPLv3+ / LGPLv3+
-#
-# The contents of this file are subject to the Mozilla Public License Version
-# 1.1 (the "License"); you may not use this file except in compliance with
-# the License or as specified alternatively below. You may obtain a copy of
-# the License at http://www.mozilla.org/MPL/
-#
-# Software distributed under the License is distributed on an "AS IS" basis,
-# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
-# for the specific language governing rights and limitations under the
-# License.
-#
-# Major Contributor(s):
-# Copyright (C) 2012 David Ostrovsky <d.ostrovsky at gmx.de> (initial developer)
-#
-# All Rights Reserved.
-#
-# For minor contributions see the git repository.
-#
-# Alternatively, the contents of this file may be used under the terms of
-# either the GNU General Public License Version 3 or later (the "GPLv3+"), or
-# the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"),
-# in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable
-# instead of those above.
-
-$(eval $(call gb_CustomTarget_CustomTarget,idlc/scanner))
-
-ICSC := $(call gb_CustomTarget_get_workdir,idlc/scanner)
-
-$(call gb_CustomTarget_get_target,idlc/scanner) : $(ICSC)/scanner.cxx
-
-$(ICSC)/scanner.cxx : $(ICSC)/stripped_scanner.ll
-	flex -o$@ $<
-
-$(ICSC)/stripped_scanner.ll : $(SRCDIR)/idlc/source/scanner.ll | $(ICSC)/.dir
-	tr -d "\015" < $< > $@
-
-# vim:set shiftwidth=4 tabstop=4 noexpandtab:
diff --git a/idlc/Executable_idlc.mk b/idlc/Executable_idlc.mk
index 4319857..32ecda6 100644
--- a/idlc/Executable_idlc.mk
+++ b/idlc/Executable_idlc.mk
@@ -42,10 +42,11 @@ $(eval $(call gb_Executable_add_grammars,idlc,\
     idlc/source/parser \
 ))
 
-$(eval $(call gb_Executable_use_custom_headers,idlc,idlc/scanner))
+$(eval $(call gb_Executable_add_scanners,idlc,\
+    idlc/source/scanner \
+))
 
 $(eval $(call gb_Executable_add_exception_objects,idlc,\
-    idlc/source/wrap_scanner \
     idlc/source/idlcmain \
     idlc/source/idlc \
     idlc/source/idlccompile \
diff --git a/idlc/Module_idlc.mk b/idlc/Module_idlc.mk
index 3c96310..e1db3db 100644
--- a/idlc/Module_idlc.mk
+++ b/idlc/Module_idlc.mk
@@ -27,7 +27,6 @@
 $(eval $(call gb_Module_Module,idlc))
 
 $(eval $(call gb_Module_add_targets,idlc,\
-    CustomTarget_scanner \
     Executable_idlc \
     Executable_idlcpp \
 ))
diff --git a/idlc/source/scanner.l b/idlc/source/scanner.l
new file mode 100644
index 0000000..8d95322
--- /dev/null
+++ b/idlc/source/scanner.l
@@ -0,0 +1,536 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ * 
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org.  If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+%option yylineno
+
+%{
+/*
+ * scanner.ll - Lexical scanner for IDLC 1.0
+ */
+
+#include <ctype.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifndef _IDLC_IDLC_HXX_
+#include <idlc/idlc.hxx>
+#endif
+#ifndef _IDLC_ERRORHANDLER_HXX_
+#include <idlc/errorhandler.hxx>
+#endif
+#ifndef _IDLC_FEHELPER_HXX_
+#include <idlc/fehelper.hxx>
+#endif
+
+#include "attributeexceptions.hxx"
+
+
+class AstExpression;
+class AstArray;
+class AstMember;
+
+#include <parser.hxx>
+
+/* handle locations */
+int yycolumn = 1;
+
+#define YY_USER_ACTION idlc()->setOffset(yycolumn, yycolumn+yyleng-1); \
+    yycolumn += yyleng;
+
+sal_Int32		beginLine = 0;
+::rtl::OString	docu;
+
+static int asciiToInteger(char const * s, sal_Int64  * sval, sal_uInt64 * uval) {
+    bool neg = false;
+    if (*s == '-') {
+        neg = true;
+        ++s;
+    }
+    unsigned int base = 10;
+    if (*s == '0') {
+        base = 8;
+        ++s;
+        if (*s == 'X' || *s == 'x') {
+            base = 16;
+            ++s;
+        }
+    }
+    sal_uInt64 val = 0;
+    for (; *s != 0; ++s) {
+        unsigned int n;
+        if (*s >= '0' && *s <= '9') {
+            n = *s - '0';
+        } else {
+            switch (*s) {
+            case 'A':
+            case 'a':
+                n = 10;
+                break;
+            case 'B':
+            case 'b':
+                n = 11;
+                break;
+            case 'C':
+            case 'c':
+                n = 12;
+                break;
+            case 'D':
+            case 'd':
+                n = 13;
+                break;
+            case 'E':
+            case 'e':
+                n = 14;
+                break;
+            case 'F':
+            case 'f':
+                n = 15;
+                break;
+            default:
+                goto done;
+            }
+        }
+        // The following guarantees the invariant val <= SAL_MAX_UINT64 (because
+        // base and n are sufficiently small), *if*
+        // std::numeric_limits<sal_uInt64>::max() == SAL_MAX_UINT64:
+        sal_uInt64 nval = val * base + n;
+        if (nval < val) {
+            idlc()->error()->syntaxError(
+                PS_NoState, idlc()->getLineNumber(),
+                "integral constant too large");
+            val = 0;
+            break;
+        }
+        val = nval;
+    }
+ done:
+    if (neg) {
+        if (val < SAL_CONST_UINT64(0x8000000000000000)) {
+            *sval = -static_cast< sal_Int64 >(val);
+        } else if (val == SAL_CONST_UINT64(0x8000000000000000)) {
+            *sval = SAL_MIN_INT64;
+        } else {
+            idlc()->error()->syntaxError(
+                PS_NoState, idlc()->getLineNumber(),
+                "negative integral constant too large");
+            *sval = 0;
+        }
+        return IDL_INTEGER_LITERAL;
+    } else if (val <= static_cast< sal_uInt64 >(SAL_MAX_INT64)) {
+        *sval = static_cast< sal_Int64 >(val);
+        return IDL_INTEGER_LITERAL;
+    } else {
+        *uval = val;
+        return IDL_INTEGER_ULITERAL;
+    }
+}
+
+static double asciiToFloat(const sal_Char *s)
+{
+   	double  	d = 0.0;
+   	double  	e, k;
+   	sal_Int32  	neg = 0, negexp = 0;
+
+   	if (*s == '-')
+   	{
+    	neg = 1;
+       	s++;
+   	}
+   	while (*s >= '0' && *s <= '9')
+   	{
+    	d = (d * 10) + *s - '0';
+       	s++;
+   	}
+   	if (*s == '.')
+   	{
+    	s++;
+       	e = 10;
+       	while (*s >= '0' && *s <= '9')
+       	{
+        	d += (*s - '0') / (e * 1.0);
+           	e *= 10;
+           	s++;
+       	}
+   	}
+   	if (*s == 'e' || *s == 'E')
+   	{
+    	s++;
+       	if (*s == '-')
+        {
+        	negexp = 1;
+           	s++;
+       	} else
+       	{
+        	if (*s == '+')
+            	s++;
+           	e = 0;
+           	while (*s >= '0' && *s <= '9')
+           	{
+            	e = (e * 10) + *s - '0';
+             	s++;
+           	}
+           	if (e > 0)
+           	{
+                for (k = 1; e > 0; k *= 10, e--)
+                    ;
+               	if (negexp)
+                	d /= k;
+               	else
+                	d *= k;
+           	}
+		}
+   	}
+   	if (neg) d *= -1.0;
+   	return d;
+}
+
+static void	idlParsePragma(sal_Char* pPragma)
+{
+	::rtl::OString pragma(pPragma);
+	sal_Int32 index = pragma.indexOf("include");
+	sal_Char* begin = pPragma + index + 8;
+	sal_Char* offset = begin;
+	while (*offset != ',') offset++;
+	//::rtl::OString include = pragma.copy(index + 8, offset - begin);
+	//unused// idlc()->insertInclude(pragma.copy(index + 8, (sal_Int32)(offset - begin)));
+}	
+
+static void parseLineAndFile(sal_Char* pBuf)
+{
+	sal_Char	*r = pBuf;
+	sal_Char    *h;
+	sal_Bool	bIsInMain = sal_False;
+
+	/* Skip initial '#' */
+	if (*r != '#')
+		return;
+
+	/* Find line number */
+	for (r++; *r == ' ' || *r == '\t' || isalpha(*r); r++) ;
+	h = r;
+	for (; *r != '\0' && *r != ' ' && *r != '\t'; r++) ;
+	*r++ = 0;
+	idlc()->setLineNumber((sal_uInt32)atol(h));
+    yylineno = atol(h);
+
+	/* Find file name, if present */
+	for (; *r != '"'; r++)
+	{
+		if (*r == '\n' || *r == '\0')
+			return;
+	}
+	h = ++r;
+	for (; *r != '"'; r++) ;
+	*r = 0;
+	if (*h == '\0')
+		idlc()->setFileName(::rtl::OString("standard input"));
+	else
+		idlc()->setFileName(::rtl::OString(h));
+
+	bIsInMain = (idlc()->getFileName() == idlc()->getRealFileName()) ? sal_True : sal_False;
+	idlc()->setInMainfile(bIsInMain);		
+}	
+
+// Suppress any warnings from generated code:
+#if defined __GNUC__
+#pragma GCC diagnostic ignored "-Wunused-function"
+#elif defined __SUNPRO_CC
+#pragma disable_warn
+#elif defined _MSC_VER
+#pragma warning(push, 1)
+/**/
+#ifdef yywrap
+#undef  yywrap
+#define yywrap() 1
+#endif
+/**/
+#endif
+%}
+
+%option noyywrap
+%option never-interactive
+
+%x DOCU
+%x COMMENT
+
+DIGIT           [0-9]
+OCT_DIGIT       [0-7]
+HEX_DIGIT       [a-fA-F0-9]
+CAPITAL         [A-Z]
+ALPHA           [a-zA-Z]
+INT_LITERAL     [1-9][0-9]*
+OCT_LITERAL     0{OCT_DIGIT}*
+HEX_LITERAL     (0x|0X){HEX_DIGIT}*
+
+IDENTIFIER_NEW  ({ALPHA}({ALPHA}|{DIGIT})*)|({CAPITAL}("_"?({ALPHA}|{DIGIT})+)*)
+IDENTIFIER      ("_"?({ALPHA}|{DIGIT})+)*
+
+%%
+
+[ \t\r]+	; /* eat up whitespace */
+[\n]           {
+       idlc()->incLineNumber();
+       yycolumn = 1;
+       yylineno++;
+}
+
+attribute       return IDL_ATTRIBUTE;
+bound           return IDL_BOUND;
+case            return IDL_CASE;
+const           return IDL_CONST;
+constants       return IDL_CONSTANTS;
+constrained     return IDL_CONSTRAINED;
+default         return IDL_DEFAULT;
+enum            return IDL_ENUM;
+exception       return IDL_EXCEPTION;
+interface       return IDL_INTERFACE;
+maybeambiguous  return IDL_MAYBEAMBIGUOUS;
+maybedefault    return IDL_MAYBEDEFAULT;
+maybevoid       return IDL_MAYBEVOID;
+module          return IDL_MODULE;
+needs           return IDL_NEEDS;
+observes        return IDL_OBSERVES;
+optional        return IDL_OPTIONAL;
+property        return IDL_PROPERTY;
+raises          return IDL_RAISES;
+readonly        return IDL_READONLY;
+removable       return IDL_REMOVEABLE;
+service         return IDL_SERVICE;
+sequence        return IDL_SEQUENCE;
+singleton       return IDL_SINGLETON;
+struct          return IDL_STRUCT;
+switch          return IDL_SWITCH;
+transient       return IDL_TRANSIENT;
+typedef         return IDL_TYPEDEF;
+union           return IDL_UNION;
+
+any             return IDL_ANY;				
+boolean         return IDL_BOOLEAN;
+byte            return IDL_BYTE;
+char            return IDL_CHAR;
+double          return IDL_DOUBLE;
+float           return IDL_FLOAT;
+hyper           return IDL_HYPER;
+long            return IDL_LONG;
+short           return IDL_SHORT;
+string          return IDL_STRING;
+type            return IDL_TYPE;
+unsigned        return IDL_UNSIGNED;
+void            return IDL_VOID;
+
+TRUE            return IDL_TRUE;
+True            return IDL_TRUE;
+FALSE           return IDL_FALSE;
+False           return IDL_FALSE;
+
+in              return IDL_IN;
+out             return IDL_OUT;
+inout           return IDL_INOUT;
+oneway          return IDL_ONEWAY;
+
+get             return IDL_GET;
+set             return IDL_SET;
+
+published       return IDL_PUBLISHED;
+
+"..."           return IDL_ELLIPSIS;
+
+("-")?{INT_LITERAL}+(l|L|u|U)?    {
+                return asciiToInteger(yytext, &yylval.ival, &yylval.uval);
+            }
+
+("-")?{OCT_LITERAL}+(l|L|u|U)?    {
+                return asciiToInteger(yytext, &yylval.ival, &yylval.uval);
+            }
+
+("-")?{HEX_LITERAL}+(l|L|u|U)?    {
+                return asciiToInteger(yytext, &yylval.ival, &yylval.uval);
+            }
+
+("-")?{DIGIT}+(e|E){1}(("+"|"-")?{DIGIT}+)+(f|F)?	|
+("-")?"."{DIGIT}+((e|E)("+"|"-")?{DIGIT}+)?(f|F)?	|
+("-")?{DIGIT}*"."{DIGIT}+((e|E)("+"|"-")?{DIGIT}+)?(f|F)?        {
+                yylval.dval = asciiToFloat( yytext );
+				return IDL_FLOATING_PT_LITERAL;
+            }
+
+{IDENTIFIER}	{
+				yylval.sval = new ::rtl::OString(yytext);
+				return IDL_IDENTIFIER;
+			}
+
+\<\<  	{
+		yylval.strval = yytext;
+		return IDL_LEFTSHIFT;
+	}
+\>\>	{
+		yylval.strval = yytext;
+		return IDL_RIGHTSHIFT;
+	}
+\:\:	{
+		yylval.strval = yytext;
+		return IDL_SCOPESEPARATOR;
+	}
+
+"/*"	{ 
+			BEGIN( COMMENT );
+			docu = ::rtl::OString();
+			beginLine = idlc()->getLineNumber();
+		}
+
+"/***"	{ 
+			BEGIN( COMMENT );
+			docu = ::rtl::OString();
+			beginLine = idlc()->getLineNumber();
+		}
+
+<COMMENT>[^*]+	{
+				docu += ::rtl::OString(yytext);
+			} 
+
+<COMMENT>"*"[^*/]+ 	{
+				docu += ::rtl::OString(yytext);
+			}
+
+<COMMENT>"**" 	{
+				docu += ::rtl::OString(yytext);
+			}
+
+<COMMENT>[*]+"/"  {
+				docu = docu.trim();
+                sal_Int32 nIndex = 0;
+                int count = 0;
+                do { docu.getToken( 0, '\n', nIndex ); count++; } while( nIndex != -1 );
+				idlc()->setLineNumber( beginLine + count - 1);
+			  	BEGIN( INITIAL );
+			}
+
+"/**"	{
+			BEGIN( DOCU );
+			docu = ::rtl::OString();
+			beginLine = idlc()->getLineNumber();
+		}
+
+<DOCU>[^*\n]+	{
+				docu += ::rtl::OString(yytext);
+			}
+
+<DOCU>"\n"[ \t]*"*"{1} 	{
+				idlc()->setLineNumber( idlc()->getLineNumber()  + 1);
+				docu += ::rtl::OString("\n");
+			}
+
+<DOCU>"\n"	{
+				idlc()->setLineNumber( idlc()->getLineNumber()  + 1);
+				docu += ::rtl::OString(yytext);
+			}
+
+<DOCU>"*"[^*^/\n]* 	{
+				docu += ::rtl::OString(yytext);
+			}
+
+<DOCU>"\n"[ \t]*"*/" 	{
+				docu = docu.trim();
+				sal_Int32 nIndex = 0;
+				int count = 0;
+				do { docu.getToken( 0, '\n', nIndex ); count++; } while( nIndex != -1 );
+				idlc()->setLineNumber( beginLine + count - 1);                
+				if ( (nIndex = docu.indexOf("/*")) >= 0 || (nIndex = docu.indexOf("///")) >= 0 )
+				{
+                    if ( 0 != nIndex &&
+                         (docu.getStr()[nIndex - 1] != '"' && docu.getStr()[nIndex - 1] != ':') )
+                        idlc()->error()->syntaxError(PS_NoState, idlc()->getLineNumber(),
+                                                     "nested documentation strings are not allowed!");
+				}
+				idlc()->setDocumentation(docu);
+			  	BEGIN( INITIAL );
+			}
+
+<DOCU>"*/"	{
+				docu = docu.trim();
+				sal_Int32 nIndex = 0;
+				int count = 0;
+				do { docu.getToken( 0, '\n', nIndex ); count++; } while( nIndex != -1 );
+				idlc()->setLineNumber( beginLine + count - 1);
+				if ( docu.indexOf("/*") >= 0 || docu.indexOf("//") >= 0 )
+				{
+                    if ( 0 != nIndex &&
+                         (docu.getStr()[nIndex - 1] != '"' && docu.getStr()[nIndex - 1] != ':') )
+                        idlc()->error()->syntaxError(PS_NoState, idlc()->getLineNumber(),
+                                                     "nested documentation strings are not allowed!");
+				}
+				idlc()->setDocumentation(docu);
+			  	BEGIN( INITIAL );
+			}
+
+"//"[^/]{1}.*"\n" {
+				/* only a comment */
+				::rtl::OString docStr(yytext);
+				docStr = docStr.copy( 0, docStr.lastIndexOf('\n') );
+				docStr = docStr.copy( docStr.lastIndexOf('/')+1 );
+				docStr = docStr.trim();
+				idlc()->incLineNumber();
+			}
+
+"///".*"\n"  {
+				::rtl::OString docStr(yytext);
+				docStr = docStr.copy( 0, docStr.lastIndexOf('\n') );
+				docStr = docStr.copy( docStr.lastIndexOf('/')+1 );
+				docStr = docStr.trim();
+				idlc()->incLineNumber();
+				idlc()->setDocumentation(docStr);
+			}
+
+.	return yytext[0];
+
+^#[ \t]*line[ \t]*[0-9]*" ""\""[^\"]*"\""\n    {
+	parseLineAndFile(yytext);
+}
+
+^#[ \t]*[0-9]*" ""\""[^\"]*"\""" "[0-9]*\n {
+	parseLineAndFile(yytext);
+}
+
+^#[ \t]*[0-9]*" ""\""[^\"]*"\""\n {
+	parseLineAndFile(yytext);
+}
+
+^#[ \t]*[0-9]*\n {
+	parseLineAndFile(yytext);
+}
+
+^#[ \t]*ident.*\n {
+	/* ignore cpp ident */
+	idlc()->incLineNumber();
+}
+
+^#[ \t]*pragma[ \t].*\n        {       /* remember pragma */
+	idlParsePragma(yytext);
+	idlc()->incLineNumber();
+}
+
+%%
diff --git a/idlc/source/scanner.ll b/idlc/source/scanner.ll
deleted file mode 100644
index 62ce288..0000000
--- a/idlc/source/scanner.ll
+++ /dev/null
@@ -1,536 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- * 
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org.  If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-%option yylineno
-
-%{
-/*
- * scanner.ll - Lexical scanner for IDLC 1.0
- */
-
-#include <ctype.h>
-#include <stdlib.h>
-#include <string.h>
-
-#ifndef _IDLC_IDLC_HXX_
-#include <idlc/idlc.hxx>
-#endif
-#ifndef _IDLC_ERRORHANDLER_HXX_
-#include <idlc/errorhandler.hxx>
-#endif
-#ifndef _IDLC_FEHELPER_HXX_
-#include <idlc/fehelper.hxx>
-#endif
-
-#include "attributeexceptions.hxx"
-
-
-class AstExpression;
-class AstArray;
-class AstMember;
-
-#include <parser.hxx>
-
-/* handle locations */
-int yycolumn = 1;
-
-#define YY_USER_ACTION idlc()->setOffset(yycolumn, yycolumn+yyleng-1); \
-    yycolumn += yyleng;
-
-sal_Int32		beginLine = 0;
-::rtl::OString	docu;
-
-static int asciiToInteger(char const * s, sal_Int64  * sval, sal_uInt64 * uval) {
-    bool neg = false;
-    if (*s == '-') {
-        neg = true;
-        ++s;
-    }
-    unsigned int base = 10;
-    if (*s == '0') {
-        base = 8;
-        ++s;
-        if (*s == 'X' || *s == 'x') {
-            base = 16;
-            ++s;
-        }
-    }
-    sal_uInt64 val = 0;
-    for (; *s != 0; ++s) {
-        unsigned int n;
-        if (*s >= '0' && *s <= '9') {
-            n = *s - '0';
-        } else {
-            switch (*s) {
-            case 'A':
-            case 'a':
-                n = 10;
-                break;
-            case 'B':
-            case 'b':
-                n = 11;
-                break;
-            case 'C':
-            case 'c':
-                n = 12;
-                break;
-            case 'D':
-            case 'd':
-                n = 13;
-                break;
-            case 'E':
-            case 'e':
-                n = 14;
-                break;
-            case 'F':
-            case 'f':
-                n = 15;
-                break;
-            default:
-                goto done;
-            }
-        }
-        // The following guarantees the invariant val <= SAL_MAX_UINT64 (because
-        // base and n are sufficiently small), *if*
-        // std::numeric_limits<sal_uInt64>::max() == SAL_MAX_UINT64:
-        sal_uInt64 nval = val * base + n;
-        if (nval < val) {
-            idlc()->error()->syntaxError(
-                PS_NoState, idlc()->getLineNumber(),
-                "integral constant too large");
-            val = 0;
-            break;
-        }
-        val = nval;
-    }
- done:
-    if (neg) {
-        if (val < SAL_CONST_UINT64(0x8000000000000000)) {
-            *sval = -static_cast< sal_Int64 >(val);
-        } else if (val == SAL_CONST_UINT64(0x8000000000000000)) {
-            *sval = SAL_MIN_INT64;
-        } else {
-            idlc()->error()->syntaxError(
-                PS_NoState, idlc()->getLineNumber(),
-                "negative integral constant too large");
-            *sval = 0;
-        }
-        return IDL_INTEGER_LITERAL;
-    } else if (val <= static_cast< sal_uInt64 >(SAL_MAX_INT64)) {
-        *sval = static_cast< sal_Int64 >(val);
-        return IDL_INTEGER_LITERAL;
-    } else {
-        *uval = val;
-        return IDL_INTEGER_ULITERAL;
-    }
-}
-
-static double asciiToFloat(const sal_Char *s)
-{
-   	double  	d = 0.0;
-   	double  	e, k;
-   	sal_Int32  	neg = 0, negexp = 0;
-
-   	if (*s == '-')
-   	{
-    	neg = 1;
-       	s++;
-   	}
-   	while (*s >= '0' && *s <= '9')
-   	{
-    	d = (d * 10) + *s - '0';
-       	s++;
-   	}
-   	if (*s == '.')
-   	{
-    	s++;
-       	e = 10;
-       	while (*s >= '0' && *s <= '9')
-       	{
-        	d += (*s - '0') / (e * 1.0);
-           	e *= 10;
-           	s++;
-       	}
-   	}
-   	if (*s == 'e' || *s == 'E')
-   	{
-    	s++;
-       	if (*s == '-')
-        {
-        	negexp = 1;
-           	s++;
-       	} else
-       	{
-        	if (*s == '+')
-            	s++;
-           	e = 0;
-           	while (*s >= '0' && *s <= '9')
-           	{
-            	e = (e * 10) + *s - '0';
-             	s++;
-           	}
-           	if (e > 0)
-           	{
-                for (k = 1; e > 0; k *= 10, e--)
-                    ;
-               	if (negexp)
-                	d /= k;
-               	else
-                	d *= k;
-           	}
-		}
-   	}
-   	if (neg) d *= -1.0;
-   	return d;
-}
-
-static void	idlParsePragma(sal_Char* pPragma)
-{
-	::rtl::OString pragma(pPragma);
-	sal_Int32 index = pragma.indexOf("include");
-	sal_Char* begin = pPragma + index + 8;
-	sal_Char* offset = begin;
-	while (*offset != ',') offset++;
-	//::rtl::OString include = pragma.copy(index + 8, offset - begin);
-	//unused// idlc()->insertInclude(pragma.copy(index + 8, (sal_Int32)(offset - begin)));
-}	
-
-static void parseLineAndFile(sal_Char* pBuf)
-{
-	sal_Char	*r = pBuf;
-	sal_Char    *h;
-	sal_Bool	bIsInMain = sal_False;
-
-	/* Skip initial '#' */
-	if (*r != '#')
-		return;
-
-	/* Find line number */
-	for (r++; *r == ' ' || *r == '\t' || isalpha(*r); r++) ;
-	h = r;
-	for (; *r != '\0' && *r != ' ' && *r != '\t'; r++) ;
-	*r++ = 0;
-	idlc()->setLineNumber((sal_uInt32)atol(h));
-    yylineno = atol(h);
-
-	/* Find file name, if present */
-	for (; *r != '"'; r++)
-	{
-		if (*r == '\n' || *r == '\0')
-			return;
-	}
-	h = ++r;
-	for (; *r != '"'; r++) ;
-	*r = 0;
-	if (*h == '\0')
-		idlc()->setFileName(::rtl::OString("standard input"));
-	else
-		idlc()->setFileName(::rtl::OString(h));
-
-	bIsInMain = (idlc()->getFileName() == idlc()->getRealFileName()) ? sal_True : sal_False;
-	idlc()->setInMainfile(bIsInMain);		
-}	
-
-// Suppress any warnings from generated code:
-#if defined __GNUC__
-#pragma GCC system_header
-#elif defined __SUNPRO_CC
-#pragma disable_warn
-#elif defined _MSC_VER
-#pragma warning(push, 1)
-/**/
-#ifdef yywrap
-#undef  yywrap
-#define yywrap() 1
-#endif
-/**/
-#endif
-%}
-
-%option noyywrap
-%option never-interactive
-
-%x DOCU
-%x COMMENT
-
-DIGIT           [0-9]
-OCT_DIGIT       [0-7]
-HEX_DIGIT       [a-fA-F0-9]
-CAPITAL         [A-Z]
-ALPHA           [a-zA-Z]
-INT_LITERAL     [1-9][0-9]*
-OCT_LITERAL     0{OCT_DIGIT}*
-HEX_LITERAL     (0x|0X){HEX_DIGIT}*
-
-IDENTIFIER_NEW  ({ALPHA}({ALPHA}|{DIGIT})*)|({CAPITAL}("_"?({ALPHA}|{DIGIT})+)*)
-IDENTIFIER      ("_"?({ALPHA}|{DIGIT})+)*
-
-%%
-
-[ \t\r]+	; /* eat up whitespace */
-[\n]           {
-       idlc()->incLineNumber();
-       yycolumn = 1;
-       yylineno++;
-}
-
-attribute       return IDL_ATTRIBUTE;
-bound           return IDL_BOUND;
-case            return IDL_CASE;
-const           return IDL_CONST;
-constants       return IDL_CONSTANTS;
-constrained     return IDL_CONSTRAINED;
-default         return IDL_DEFAULT;
-enum            return IDL_ENUM;
-exception       return IDL_EXCEPTION;
-interface       return IDL_INTERFACE;
-maybeambiguous  return IDL_MAYBEAMBIGUOUS;
-maybedefault    return IDL_MAYBEDEFAULT;
-maybevoid       return IDL_MAYBEVOID;
-module          return IDL_MODULE;
-needs           return IDL_NEEDS;
-observes        return IDL_OBSERVES;
-optional        return IDL_OPTIONAL;
-property        return IDL_PROPERTY;
-raises          return IDL_RAISES;
-readonly        return IDL_READONLY;
-removable       return IDL_REMOVEABLE;
-service         return IDL_SERVICE;
-sequence        return IDL_SEQUENCE;
-singleton       return IDL_SINGLETON;
-struct          return IDL_STRUCT;
-switch          return IDL_SWITCH;
-transient       return IDL_TRANSIENT;
-typedef         return IDL_TYPEDEF;
-union           return IDL_UNION;
-
-any             return IDL_ANY;				
-boolean         return IDL_BOOLEAN;
-byte            return IDL_BYTE;
-char            return IDL_CHAR;
-double          return IDL_DOUBLE;
-float           return IDL_FLOAT;
-hyper           return IDL_HYPER;
-long            return IDL_LONG;
-short           return IDL_SHORT;
-string          return IDL_STRING;
-type            return IDL_TYPE;
-unsigned        return IDL_UNSIGNED;
-void            return IDL_VOID;
-
-TRUE            return IDL_TRUE;
-True            return IDL_TRUE;
-FALSE           return IDL_FALSE;
-False           return IDL_FALSE;
-
-in              return IDL_IN;
-out             return IDL_OUT;
-inout           return IDL_INOUT;
-oneway          return IDL_ONEWAY;
-
-get             return IDL_GET;
-set             return IDL_SET;
-
-published       return IDL_PUBLISHED;
-
-"..."           return IDL_ELLIPSIS;
-
-("-")?{INT_LITERAL}+(l|L|u|U)?    {
-                return asciiToInteger(yytext, &yylval.ival, &yylval.uval);
-            }
-
-("-")?{OCT_LITERAL}+(l|L|u|U)?    {
-                return asciiToInteger(yytext, &yylval.ival, &yylval.uval);
-            }
-
-("-")?{HEX_LITERAL}+(l|L|u|U)?    {
-                return asciiToInteger(yytext, &yylval.ival, &yylval.uval);
-            }
-
-("-")?{DIGIT}+(e|E){1}(("+"|"-")?{DIGIT}+)+(f|F)?	|
-("-")?"."{DIGIT}+((e|E)("+"|"-")?{DIGIT}+)?(f|F)?	|
-("-")?{DIGIT}*"."{DIGIT}+((e|E)("+"|"-")?{DIGIT}+)?(f|F)?        {
-                yylval.dval = asciiToFloat( yytext );
-				return IDL_FLOATING_PT_LITERAL;
-            }
-
-{IDENTIFIER}	{
-				yylval.sval = new ::rtl::OString(yytext);
-				return IDL_IDENTIFIER;
-			}
-
-\<\<  	{
-		yylval.strval = yytext;
-		return IDL_LEFTSHIFT;
-	}
-\>\>	{
-		yylval.strval = yytext;
-		return IDL_RIGHTSHIFT;
-	}
-\:\:	{
-		yylval.strval = yytext;
-		return IDL_SCOPESEPARATOR;
-	}
-
-"/*"	{ 
-			BEGIN( COMMENT );
-			docu = ::rtl::OString();
-			beginLine = idlc()->getLineNumber();
-		}
-
-"/***"	{ 
-			BEGIN( COMMENT );
-			docu = ::rtl::OString();
-			beginLine = idlc()->getLineNumber();
-		}
-
-<COMMENT>[^*]+	{
-				docu += ::rtl::OString(yytext);
-			} 
-
-<COMMENT>"*"[^*/]+ 	{
-				docu += ::rtl::OString(yytext);
-			}
-
-<COMMENT>"**" 	{
-				docu += ::rtl::OString(yytext);
-			}
-
-<COMMENT>[*]+"/"  {
-				docu = docu.trim();
-                sal_Int32 nIndex = 0;
-                int count = 0;
-                do { docu.getToken( 0, '\n', nIndex ); count++; } while( nIndex != -1 );
-				idlc()->setLineNumber( beginLine + count - 1);
-			  	BEGIN( INITIAL );
-			}
-
-"/**"	{
-			BEGIN( DOCU );
-			docu = ::rtl::OString();
-			beginLine = idlc()->getLineNumber();
-		}
-
-<DOCU>[^*\n]+	{
-				docu += ::rtl::OString(yytext);
-			}
-
-<DOCU>"\n"[ \t]*"*"{1} 	{
-				idlc()->setLineNumber( idlc()->getLineNumber()  + 1);
-				docu += ::rtl::OString("\n");
-			}
-
-<DOCU>"\n"	{
-				idlc()->setLineNumber( idlc()->getLineNumber()  + 1);
-				docu += ::rtl::OString(yytext);
-			}
-
-<DOCU>"*"[^*^/\n]* 	{
-				docu += ::rtl::OString(yytext);
-			}
-
-<DOCU>"\n"[ \t]*"*/" 	{
-				docu = docu.trim();
-				sal_Int32 nIndex = 0;
-				int count = 0;
-				do { docu.getToken( 0, '\n', nIndex ); count++; } while( nIndex != -1 );
-				idlc()->setLineNumber( beginLine + count - 1);                
-				if ( (nIndex = docu.indexOf("/*")) >= 0 || (nIndex = docu.indexOf("///")) >= 0 )
-				{
-                    if ( 0 != nIndex &&
-                         (docu.getStr()[nIndex - 1] != '"' && docu.getStr()[nIndex - 1] != ':') )
-                        idlc()->error()->syntaxError(PS_NoState, idlc()->getLineNumber(),
-                                                     "nested documentation strings are not allowed!");
-				}
-				idlc()->setDocumentation(docu);
-			  	BEGIN( INITIAL );
-			}
-
-<DOCU>"*/"	{
-				docu = docu.trim();
-				sal_Int32 nIndex = 0;
-				int count = 0;
-				do { docu.getToken( 0, '\n', nIndex ); count++; } while( nIndex != -1 );
-				idlc()->setLineNumber( beginLine + count - 1);
-				if ( docu.indexOf("/*") >= 0 || docu.indexOf("//") >= 0 )
-				{
-                    if ( 0 != nIndex &&
-                         (docu.getStr()[nIndex - 1] != '"' && docu.getStr()[nIndex - 1] != ':') )
-                        idlc()->error()->syntaxError(PS_NoState, idlc()->getLineNumber(),
-                                                     "nested documentation strings are not allowed!");
-				}
-				idlc()->setDocumentation(docu);
-			  	BEGIN( INITIAL );
-			}
-
-"//"[^/]{1}.*"\n" {
-				/* only a comment */
-				::rtl::OString docStr(yytext);
-				docStr = docStr.copy( 0, docStr.lastIndexOf('\n') );
-				docStr = docStr.copy( docStr.lastIndexOf('/')+1 );
-				docStr = docStr.trim();
-				idlc()->incLineNumber();
-			}
-
-"///".*"\n"  {
-				::rtl::OString docStr(yytext);
-				docStr = docStr.copy( 0, docStr.lastIndexOf('\n') );
-				docStr = docStr.copy( docStr.lastIndexOf('/')+1 );
-				docStr = docStr.trim();
-				idlc()->incLineNumber();
-				idlc()->setDocumentation(docStr);
-			}
-
-.	return yytext[0];
-
-^#[ \t]*line[ \t]*[0-9]*" ""\""[^\"]*"\""\n    {
-	parseLineAndFile(yytext);
-}
-
-^#[ \t]*[0-9]*" ""\""[^\"]*"\""" "[0-9]*\n {
-	parseLineAndFile(yytext);
-}
-
-^#[ \t]*[0-9]*" ""\""[^\"]*"\""\n {
-	parseLineAndFile(yytext);
-}
-
-^#[ \t]*[0-9]*\n {
-	parseLineAndFile(yytext);
-}
-
-^#[ \t]*ident.*\n {
-	/* ignore cpp ident */
-	idlc()->incLineNumber();
-}
-
-^#[ \t]*pragma[ \t].*\n        {       /* remember pragma */
-	idlParsePragma(yytext);
-	idlc()->incLineNumber();
-}
-
-%%
diff --git a/idlc/source/wrap_parser.cxx b/idlc/source/wrap_parser.cxx
deleted file mode 100644
index 053713a..0000000
--- a/idlc/source/wrap_parser.cxx
+++ /dev/null
@@ -1,32 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org.  If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-
-#include "parser.cxx"
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/source/wrap_scanner.cxx b/idlc/source/wrap_scanner.cxx
deleted file mode 100644
index 94a068a..0000000
--- a/idlc/source/wrap_scanner.cxx
+++ /dev/null
@@ -1,38 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org.  If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifdef __clang__
-#pragma clang diagnostic ignored "-Wsign-compare"
-#endif
-
-#include "scanner.cxx"
-
-void (*avoid_unused_yyunput_in_scanner_cxx)(int, char*) = yyunput;
-int (*avoid_unused_yyinput_in_scanner_cxx)() = yyinput;
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/solenv/gbuild/Executable.mk b/solenv/gbuild/Executable.mk
index 8d565b6..2cb23fc 100644
--- a/solenv/gbuild/Executable.mk
+++ b/solenv/gbuild/Executable.mk
@@ -85,6 +85,8 @@ $(eval $(foreach method,\
 	add_objcxxobjects \
 	add_grammar \
 	add_grammars \
+	add_scanner \
+	add_scanners \
 	add_exception_objects \
 	add_noexception_objects \
 	add_generated_cobjects \
diff --git a/solenv/gbuild/Library.mk b/solenv/gbuild/Library.mk
index 4ba764e..2c74d6e 100644
--- a/solenv/gbuild/Library.mk
+++ b/solenv/gbuild/Library.mk
@@ -167,6 +167,8 @@ $(eval $(foreach method,\
 	use_library_objects \
 	add_grammar \
 	add_grammars \
+	add_scanner \
+	add_scanners \
 	add_cflags \
 	set_cflags \
 	add_cxxflags \
diff --git a/solenv/gbuild/LinkTarget.mk b/solenv/gbuild/LinkTarget.mk
index aa279bf..4b48f67 100644
--- a/solenv/gbuild/LinkTarget.mk
+++ b/solenv/gbuild/LinkTarget.mk
@@ -28,6 +28,7 @@
 
 #the following user-defined variables are supported:
 # YACCFLAGS
+# LEXFLAGS
 # CPPFLAGS
 # CFLAGS
 # CXXFLAGS
@@ -243,6 +244,34 @@ endef
 gb_YACC := bison
 
 
+# LexTarget class
+
+gb_LexTarget_get_source = $(1)/$(2).l
+
+.PHONY : $(call gb_LexTarget_get_clean_target,%)
+$(call gb_LexTarget_get_clean_target,%) :
+	$(call gb_Output_announce,$*,$(false),LEX,3)
+	$(call gb_Helper_abbreviate_dirs,\
+	    rm -f $(call gb_LexTarget_get_scanner_target,$*) $(call gb_LexTarget_get_target,$*))
+
+$(call gb_LexTarget_get_target,%) : $(call gb_LexTarget_get_source,$(SRCDIR),%)
+	$(call gb_LexTarget__command,$<,$*,$@,$(call gb_LexTarget_get_scanner_target,$*))
+
+# gb_LexTarget_LexTarget(scanner-file)
+define gb_LexTarget_LexTarget
+$(call gb_LexTarget_get_scanner_target,$(1)) :| $(call gb_LexTarget_get_target,$(1))
+
+endef
+
+#  gb_LexTarget__command(scanner-file, stem-for-message, done-pseudo-target, source-target)
+define gb_LexTarget__command
+$(call gb_Output_announce,$(2),$(true),LEX,3)
+$(call gb_Helper_abbreviate_dirs,\
+	mkdir -p $(dir $(3)) && \
+	$(FLEX) $(T_LEXFLAGS) -o $(4) $(1) && touch $(3) )
+endef
+
+
 # ObjCxxObject class
 #
 
@@ -453,6 +482,10 @@ $(call gb_LinkTarget_get_target,$(1)) : YACCOBJECT :=
 $(call gb_LinkTarget_get_clean_target,$(1)) \
 $(call gb_LinkTarget_get_target,$(1)) : T_YACCFLAGS := $$(gb_LinkTarget_YYACFLAGS) $(YACCFLAGS)
 $(call gb_LinkTarget_get_clean_target,$(1)) \
+$(call gb_LinkTarget_get_target,$(1)) : LEXOBJECT :=
+$(call gb_LinkTarget_get_clean_target,$(1)) \
+$(call gb_LinkTarget_get_target,$(1)) : T_LEXFLAGS := $$(gb_LinkTarget_LEXFLAGS) $(LEXFLAGS)
+$(call gb_LinkTarget_get_clean_target,$(1)) \
 $(call gb_LinkTarget_get_target,$(1)) : OBJCOBJECTS :=
 $(call gb_LinkTarget_get_clean_target,$(1)) \
 $(call gb_LinkTarget_get_target,$(1)) : OBJCXXOBJECTS :=
@@ -873,6 +906,22 @@ define gb_LinkTarget_add_grammars
 $(foreach grammar,$(2),$(call gb_LinkTarget_add_grammar,$(1),$(grammar),$(4)))
 endef
 
+# Add a flex scanner to the build.
+# gb_LinkTarget_add_scanner(<component>,<scanner file>)
+define gb_LinkTarget_add_scanner
+$(call gb_LexTarget_LexTarget,$(2))
+$(call gb_LinkTarget_add_generated_exception_object,$(1),LexTarget/$(2),$(3))
+$(call gb_LinkTarget_get_clean_target,$(1)) : $(call gb_LexTarget_get_clean_target,$(2))
+
+endef
+
+# Add flex scanners to the build.
+# gb_LinkTarget_add_scanners(<component>,<scanner file> [<scanner file>*])
+define gb_LinkTarget_add_scanners
+$(foreach scanner,$(2),$(call gb_LinkTarget_add_scanner,$(1),$(scanner)))
+
+endef
+
 define gb_LinkTarget_add_noexception_object
 $(call gb_LinkTarget_add_cxxobject,$(1),$(2),$(gb_LinkTarget_NOEXCEPTIONFLAGS) $(call gb_LinkTarget__get_cxxflags,$(3)))
 endef
diff --git a/solenv/gbuild/TargetLocations.mk b/solenv/gbuild/TargetLocations.mk
index df694b7..70ec351 100644
--- a/solenv/gbuild/TargetLocations.mk
+++ b/solenv/gbuild/TargetLocations.mk
@@ -141,6 +141,10 @@ gb_Configuration_get_target = $(WORKDIR)/Configuration/$(1).done
 gb_YaccTarget_get_grammar_target = $(WORKDIR)/YaccTarget/$(1).cxx
 gb_YaccTarget_get_header_target = $(WORKDIR)/YaccTarget/$(1).hxx
 gb_YaccTarget_get_target = $(WORKDIR)/YaccTarget/$(1).done
+
+gb_LexTarget_get_scanner_target = $(WORKDIR)/LexTarget/$(1).cxx
+gb_LexTarget_get_target = $(WORKDIR)/LexTarget/$(1).done
+
 gb_XcsTarget_get_target = $(WORKDIR)/XcsTarget/$(1)
 gb_XcuDataTarget_get_target = $(WORKDIR)/XcuDataTarget/$(1)
 gb_XcuLangpackTarget_get_target = $(WORKDIR)/XcuLangpackTarget/$(1)
@@ -194,6 +198,7 @@ $(eval $(call gb_Helper_make_clean_targets,\
 	UnoApiTarget \
 	WinResTarget \
 	YaccTarget \
+	LexTarget \
 	Zip \
 	XcsTarget \
 	XcuDataTarget \
commit b9d0e597a7bc328ca99a1bf338a609cac23a4284
Author: David Tardon <dtardon at redhat.com>
Date:   Tue May 1 07:16:16 2012 +0200

    export flex
    
    Change-Id: I7d5d8e380e12cc66255ddc3ac3f70bab7713f8b6

diff --git a/config_host.mk.in b/config_host.mk.in
index 5e02107..c7b2075 100644
--- a/config_host.mk.in
+++ b/config_host.mk.in
@@ -144,6 +144,7 @@ export EPM_FLAGS=@EPM_FLAGS@
 export EXTERNAL_WARNINGS_NOT_ERRORS=@EXTERNAL_WARNINGS_NOT_ERRORS@
 @x_Cygwin@ export FIND=@WIN_FIND@
 export FLAT_LOGO_SVG=@FLAT_LOGO_SVG@
+export FLEX=@FLEX@
 export FLUTE_JAR=@FLUTE_JAR@
 export FONTCONFIG_CFLAGS=@FONTCONFIG_CFLAGS@
 export FONTCONFIG_LIBS=@FONTCONFIG_LIBS@
diff --git a/configure.in b/configure.in
index f6466d8..1d67570 100644
--- a/configure.in
+++ b/configure.in
@@ -8371,6 +8371,7 @@ AC_PATH_PROG(FLEX, flex)
 if test -z "$FLEX"; then
     AC_MSG_ERROR([no flex found in \$PATH, install it])
 fi
+AC_SUBST([FLEX])
 dnl ***************************************
 dnl Checking for patch
 dnl ***************************************


More information about the Libreoffice-commits mailing list