[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