diff options
Diffstat (limited to 'src/configimpl.l')
-rw-r--r-- | src/configimpl.l | 377 |
1 files changed, 217 insertions, 160 deletions
diff --git a/src/configimpl.l b/src/configimpl.l index 4da1634..d07e25c 100644 --- a/src/configimpl.l +++ b/src/configimpl.l @@ -11,6 +11,9 @@ */ %option never-interactive %option prefix="configimplYY" +%top{ +#include <stdint.h> +} %{ @@ -30,8 +33,8 @@ #include <qregexp.h> #include <qstack.h> #include <qglobal.h> -#include <qthread.h> - +#include <thread> + #include "configimpl.h" #include "version.h" #include "portable.h" @@ -44,7 +47,11 @@ #define YY_NO_INPUT 1 #define YY_NO_UNISTD_H 1 +#define USE_STATE2STRING 0 + +#if USE_STATE2STRING static const char *stateToString(int state); +#endif static const char *warning_str = "warning: "; static const char *error_str = "error: "; @@ -93,20 +100,27 @@ static QCString convertToComment(const QCString &s, const QCString &u) QCString tmp=s.stripWhiteSpace(); const char *p=tmp.data(); char c; - result+="#"; - if (*p && *p!='\n') - result+=" "; - while ((c=*p++)) + if (p) { - if (c=='\n') + result+="#"; + if (*p && *p!='\n') { - result+="\n#"; - if (*p && *p!='\n') - result+=" "; + result+=" "; + } + while ((c=*p++)) + { + if (c=='\n') + { + result+="\n#"; + if (*p && *p!='\n') + { + result+=" "; + } + } + else result+=c; } - else result+=c; + result+='\n'; } - result+='\n'; } if (!u.isEmpty()) { @@ -131,7 +145,7 @@ void ConfigOption::writeStringValue(FTextStream &t,QCString &s) { char c; bool needsEscaping=FALSE; - // convert the string back to it original encoding + // convert the string back to it original g_encoding QCString se = configStringRecode(s,"UTF-8",m_encoding); const char *p=se.data(); if (p) @@ -218,6 +232,25 @@ void ConfigBool::convertStrToVal() } } +void ConfigEnum::convertStrToVal() +{ + QCString val = m_value.stripWhiteSpace().lower(); + const char *s=m_valueRange.first(); + while (s) + { + if (QCString(s).lower() == val) + { + m_value = s; + return; + } + s = m_valueRange.next(); + } + + config_warn("argument '%s' for option %s is not a valid enum value\n" + "Using the default: %s!\n",m_value.data(),m_name.data(),m_defValue.data()); + m_value = m_defValue; +} + QCString &ConfigImpl::getString(const char *fileName,int num,const char *name) const { ConfigOption *opt = m_dict->find(name); @@ -508,47 +541,47 @@ struct ConfigFileState QCString fileName; }; -static const char *inputString; -static int inputPosition; -static int yyLineNr; -static QCString yyFileName; -static QCString tmpString; -static QCString *s=0; -static bool *b=0; -static QStrList *l=0; -static int lastState; -static QCString elemStr; -static QStrList includePathList; -static QStack<ConfigFileState> includeStack; -static int includeDepth; -static bool config_upd = FALSE; -static QCString encoding; -static ConfigImpl *config; +static const char *g_inputString; +static int g_inputPosition; +static int g_yyLineNr; +static QCString g_yyFileName; +static QCString g_tmpString; +static QCString *g_string=0; +static bool *g_bool=0; +static QStrList *g_list=0; +static int g_lastState; +static QCString g_elemStr; +static QStrList g_includePathList; +static QStack<ConfigFileState> g_includeStack; +static int g_includeDepth; +static bool g_configUpdate = FALSE; +static QCString g_encoding; +static ConfigImpl *g_config; /* ----------------------------------------------------------------- */ #undef YY_INPUT #define YY_INPUT(buf,result,max_size) result=yyread(buf,max_size); -static int yyread(char *buf,int max_size) +static yy_size_t yyread(char *buf,yy_size_t max_size) { - // no file included - if (includeStack.isEmpty()) - { - int c=0; - if (inputString==0) return c; - while( c < max_size && inputString[inputPosition] ) - { - *buf = inputString[inputPosition++] ; - c++; buf++; - } - return c; - } - else + // no file included + if (g_includeStack.isEmpty()) + { + yy_size_t c=0; + if (g_inputString==0) return c; + while( c < max_size && g_inputString[g_inputPosition] ) { - //assert(includeStack.current()->newState==YY_CURRENT_BUFFER); - return (int)fread(buf,1,max_size,includeStack.current()->filePtr); + *buf = g_inputString[g_inputPosition++] ; + c++; buf++; } + return c; + } + else + { + //assert(g_includeStack.current()->newState==YY_CURRENT_BUFFER); + return (yy_size_t)fread(buf,1,max_size,g_includeStack.current()->filePtr); + } } @@ -591,8 +624,8 @@ static QCString configStringRecode( static void checkEncoding() { - ConfigString *option = (ConfigString*)config->get("DOXYFILE_ENCODING"); - encoding = *option->valueRef(); + ConfigString *option = (ConfigString*)g_config->get("DOXYFILE_ENCODING"); + g_encoding = *option->valueRef(); } static FILE *tryPath(const char *path,const char *fileName) @@ -621,21 +654,21 @@ static FILE *findFile(const char *fileName) { return tryPath(NULL, fileName); } - substEnvVarsInStrList(includePathList); - char *s=includePathList.first(); + substEnvVarsInStrList(g_includePathList); + char *s=g_includePathList.first(); while (s) // try each of the include paths { FILE *f = tryPath(s,fileName); if (f) return f; - s=includePathList.next(); + s=g_includePathList.next(); } - // try cwd if includePathList fails + // try cwd if g_includePathList fails return tryPath(".",fileName); } static void readIncludeFile(const char *incName) { - if (includeDepth==MAX_INCLUDE_DEPTH) { + if (g_includeDepth==MAX_INCLUDE_DEPTH) { config_term("maximum include depth (%d) reached, %s is not included. Aborting...\n", MAX_INCLUDE_DEPTH,incName); } @@ -655,23 +688,23 @@ static void readIncludeFile(const char *incName) { // For debugging #if SHOW_INCLUDES - for (i=0;i<includeStack.count();i++) msg(" "); + for (i=0;i<g_includeStack.count();i++) msg(" "); msg("@INCLUDE = %s: parsing...\n",inc.data()); #endif // store the state of the old file ConfigFileState *fs=new ConfigFileState; fs->oldState=YY_CURRENT_BUFFER; - fs->lineNr=yyLineNr; - fs->fileName=yyFileName; + fs->lineNr=g_yyLineNr; + fs->fileName=g_yyFileName; fs->filePtr=f; // push the state on the stack - includeStack.push(fs); + g_includeStack.push(fs); // set the scanner to the include file yy_switch_to_buffer(yy_create_buffer(f, YY_BUF_SIZE)); fs->newState=YY_CURRENT_BUFFER; - yyFileName=inc; - includeDepth++; + g_yyFileName=inc; + g_includeDepth++; } else { @@ -691,6 +724,7 @@ static void readIncludeFile(const char *incName) %x GetString %x GetBool %x GetStrList +%x GetStrList1 %x GetQuotedString %x GetEnvVar %x Include @@ -698,26 +732,26 @@ static void readIncludeFile(const char *incName) %% <*>\0x0d -<PreStart>"##".*"\n" { config->appendStartComment(yytext);yyLineNr++;} +<PreStart>"##".*"\n" { g_config->appendStartComment(yytext);g_yyLineNr++;} <PreStart>. { BEGIN(Start); unput(*yytext); } -<Start,GetString,GetStrList,GetBool,SkipInvalid>"##".*"\n" { config->appendUserComment(yytext);yyLineNr++;} -<Start,GetString,GetStrList,GetBool,SkipInvalid>"#" { BEGIN(SkipComment); } +<Start,GetString,GetStrList,GetStrList1,GetBool,SkipInvalid>"##".*"\n" { g_config->appendUserComment(yytext);g_yyLineNr++;} +<Start,GetString,GetStrList,GetStrList1,GetBool,SkipInvalid>"#" { BEGIN(SkipComment); } <Start>[a-z_A-Z][a-z_A-Z0-9]*[ \t]*"=" { QCString cmd=yytext; cmd=cmd.left(cmd.length()-1).stripWhiteSpace(); - ConfigOption *option = config->get(cmd); + ConfigOption *option = g_config->get(cmd); if (option==0) // oops not known { config_warn("ignoring unsupported tag '%s' at line %d, file %s\n", - cmd.data(),yyLineNr,yyFileName.data()); + cmd.data(),g_yyLineNr,g_yyFileName.data()); BEGIN(SkipInvalid); } else // known tag { - option->setUserComment(config->takeUserComment()); - option->setEncoding(encoding); + option->setUserComment(g_config->takeUserComment()); + option->setEncoding(g_encoding); switch(option->kind()) { case ConfigOption::O_Info: @@ -725,56 +759,63 @@ static void readIncludeFile(const char *incName) BEGIN(SkipInvalid); break; case ConfigOption::O_List: - l = ((ConfigList *)option)->valueRef(); - l->clear(); - elemStr=""; - BEGIN(GetStrList); + g_list = ((ConfigList *)option)->valueRef(); + g_list->clear(); + g_elemStr=""; + if (cmd == "PREDEFINED") + { + BEGIN(GetStrList1); + } + else + { + BEGIN(GetStrList); + } break; case ConfigOption::O_Enum: - s = ((ConfigEnum *)option)->valueRef(); - s->resize(0); + g_string = ((ConfigEnum *)option)->valueRef(); + g_string->resize(0); BEGIN(GetString); break; case ConfigOption::O_String: - s = ((ConfigString *)option)->valueRef(); - s->resize(0); + g_string = ((ConfigString *)option)->valueRef(); + g_string->resize(0); BEGIN(GetString); break; case ConfigOption::O_Int: - s = ((ConfigInt *)option)->valueStringRef(); - s->resize(0); + g_string = ((ConfigInt *)option)->valueStringRef(); + g_string->resize(0); BEGIN(GetString); break; case ConfigOption::O_Bool: - s = ((ConfigBool *)option)->valueStringRef(); - s->resize(0); + g_string = ((ConfigBool *)option)->valueStringRef(); + g_string->resize(0); BEGIN(GetString); break; case ConfigOption::O_Obsolete: - if (config_upd) + if (g_configUpdate) { config_warn("Tag '%s' at line %d of file '%s' has become obsolete.\n" - " This tag has been removed.\n", cmd.data(),yyLineNr,yyFileName.data()); + " This tag has been removed.\n", cmd.data(),g_yyLineNr,g_yyFileName.data()); } else { config_warn("Tag '%s' at line %d of file '%s' has become obsolete.\n" " To avoid this warning please remove this line from your configuration " - "file or upgrade it using \"doxygen -u\"\n", cmd.data(),yyLineNr,yyFileName.data()); + "file or upgrade it using \"doxygen -u\"\n", cmd.data(),g_yyLineNr,g_yyFileName.data()); } BEGIN(SkipInvalid); break; case ConfigOption::O_Disabled: - if (config_upd) + if (g_configUpdate) { config_warn("Tag '%s' at line %d of file '%s' belongs to an option that was not enabled at compile time.\n" - " This tag has been removed.\n", cmd.data(),yyLineNr,yyFileName.data()); + " This tag has been removed.\n", cmd.data(),g_yyLineNr,g_yyFileName.data()); } else { config_warn("Tag '%s' at line %d of file '%s' belongs to an option that was not enabled at compile time.\n" " To avoid this warning please remove this line from your configuration " - "file or upgrade it using \"doxygen -u\", or recompile doxygen with this feature enabled.\n", cmd.data(),yyLineNr,yyFileName.data()); + "file or upgrade it using \"doxygen -u\", or recompile doxygen with this feature enabled.\n", cmd.data(),g_yyLineNr,g_yyFileName.data()); } BEGIN(SkipInvalid); break; @@ -783,16 +824,16 @@ static void readIncludeFile(const char *incName) } <Start>[a-z_A-Z][a-z_A-Z0-9]*[ \t]*"+=" { QCString cmd=yytext; cmd=cmd.left(cmd.length()-2).stripWhiteSpace(); - ConfigOption *option = config->get(cmd); + ConfigOption *option = g_config->get(cmd); if (option==0) // oops not known { config_warn("ignoring unsupported tag '%s' at line %d, file %s\n", - cmd.data(),yyLineNr,yyFileName.data()); + cmd.data(),g_yyLineNr,g_yyFileName.data()); BEGIN(SkipInvalid); } else // known tag { - option->setUserComment(config->takeUserComment()); + option->setUserComment(g_config->takeUserComment()); switch(option->kind()) { case ConfigOption::O_Info: @@ -800,135 +841,153 @@ static void readIncludeFile(const char *incName) BEGIN(SkipInvalid); break; case ConfigOption::O_List: - l = ((ConfigList *)option)->valueRef(); - elemStr=""; - BEGIN(GetStrList); + g_list = ((ConfigList *)option)->valueRef(); + g_elemStr=""; + if (cmd == "PREDEFINED") + { + BEGIN(GetStrList1); + } + else + { + BEGIN(GetStrList); + } break; case ConfigOption::O_Enum: case ConfigOption::O_String: case ConfigOption::O_Int: case ConfigOption::O_Bool: config_warn("operator += not supported for '%s'. Ignoring line at line %d, file %s\n", - yytext,yyLineNr,yyFileName.data()); + yytext,g_yyLineNr,g_yyFileName.data()); BEGIN(SkipInvalid); break; case ConfigOption::O_Obsolete: config_warn("Tag '%s' at line %d of file %s has become obsolete.\n" "To avoid this warning please update your configuration " - "file using \"doxygen -u\"\n", cmd.data(),yyLineNr,yyFileName.data()); + "file using \"doxygen -u\"\n", cmd.data(),g_yyLineNr,g_yyFileName.data()); BEGIN(SkipInvalid); break; case ConfigOption::O_Disabled: config_warn("Tag '%s' at line %d of file %s belongs to an option that was not enabled at compile time.\n" "To avoid this warning please remove this line from your configuration " - "file, upgrade it using \"doxygen -u\", or recompile doxygen with this feature enabled.\n", cmd.data(),yyLineNr,yyFileName.data()); + "file, upgrade it using \"doxygen -u\", or recompile doxygen with this feature enabled.\n", cmd.data(),g_yyLineNr,g_yyFileName.data()); BEGIN(SkipInvalid); break; } } } -<Start>"@INCLUDE_PATH"[ \t]*"=" { BEGIN(GetStrList); l=&includePathList; l->clear(); elemStr=""; } - /* include a config file */ +<Start>"@INCLUDE_PATH"[ \t]*"=" { BEGIN(GetStrList); g_list=&g_includePathList; g_list->clear(); g_elemStr=""; } + /* include a g_config file */ <Start>"@INCLUDE"[ \t]*"=" { BEGIN(Include);} <Include>([^ \"\t\r\n]+)|("\""[^\n\"]+"\"") { - readIncludeFile(configStringRecode(yytext,encoding,"UTF-8")); + readIncludeFile(configStringRecode(yytext,g_encoding,"UTF-8")); BEGIN(Start); } <<EOF>> { //printf("End of include file\n"); //printf("Include stack depth=%d\n",g_includeStack.count()); - if (includeStack.isEmpty()) + if (g_includeStack.isEmpty()) { //printf("Terminating scanner!\n"); yyterminate(); } else { - ConfigFileState *fs=includeStack.pop(); + ConfigFileState *fs=g_includeStack.pop(); fclose(fs->filePtr); YY_BUFFER_STATE oldBuf = YY_CURRENT_BUFFER; yy_switch_to_buffer( fs->oldState ); yy_delete_buffer( oldBuf ); - yyLineNr=fs->lineNr; - yyFileName=fs->fileName; + g_yyLineNr=fs->lineNr; + g_yyFileName=fs->fileName; delete fs; fs=0; - includeDepth--; + g_includeDepth--; } } -<Start>[a-z_A-Z0-9]+ { config_warn("ignoring unknown tag '%s' at line %d, file %s\n",yytext,yyLineNr,yyFileName.data()); } -<GetString,GetBool,SkipInvalid>\n { yyLineNr++; BEGIN(Start); } -<GetStrList>\n { - yyLineNr++; - if (!elemStr.isEmpty()) +<Start>[a-z_A-Z0-9]+ { config_warn("ignoring unknown tag '%s' at line %d, file %s\n",yytext,g_yyLineNr,g_yyFileName.data()); } +<GetString,GetBool,SkipInvalid>\n { g_yyLineNr++; BEGIN(Start); } +<GetStrList,GetStrList1>\n { + g_yyLineNr++; + if (!g_elemStr.isEmpty()) { - //printf("elemStr1='%s'\n",elemStr.data()); - l->append(elemStr); + //printf("elemStr1='%s'\n",g_elemStr.data()); + g_list->append(g_elemStr); } BEGIN(Start); } +<GetStrList1>[ \t]+ { + if (!g_elemStr.isEmpty()) + { + //printf("elemStr2='%s'\n",g_elemStr.data()); + g_list->append(g_elemStr); + } + g_elemStr.resize(0); + } <GetStrList>[ \t,]+ { - if (!elemStr.isEmpty()) + if (!g_elemStr.isEmpty()) { - //printf("elemStr2='%s'\n",elemStr.data()); - l->append(elemStr); + //printf("elemStr2='%s'\n",g_elemStr.data()); + g_list->append(g_elemStr); } - elemStr.resize(0); + g_elemStr.resize(0); } -<GetString>[^ \"\t\r\n]+ { (*s)+=configStringRecode(yytext,encoding,"UTF-8"); +<GetString>[^ \"\t\r\n]+ { (*g_string)+=configStringRecode(yytext,g_encoding,"UTF-8"); checkEncoding(); } -<GetString,GetStrList,SkipInvalid>"\"" { lastState=YY_START; +<GetString,GetStrList,GetStrList1,SkipInvalid>"\"" { g_lastState=YY_START; BEGIN(GetQuotedString); - tmpString.resize(0); + g_tmpString.resize(0); } <GetQuotedString>"\""|"\n" { // we add a bogus space to signal that the string was quoted. This space will be stripped later on. - tmpString+=" "; - //printf("Quoted String = '%s'\n",tmpString.data()); - if (lastState==GetString) + g_tmpString+=" "; + //printf("Quoted String = '%s'\n",g_tmpString.data()); + if (g_lastState==GetString) { - (*s)+=configStringRecode(tmpString,encoding,"UTF-8"); + (*g_string)+=configStringRecode(g_tmpString,g_encoding,"UTF-8"); checkEncoding(); } else { - elemStr+=configStringRecode(tmpString,encoding,"UTF-8"); + g_elemStr+=configStringRecode(g_tmpString,g_encoding,"UTF-8"); } if (*yytext=='\n') { - config_warn("Missing end quote (\") on line %d, file %s\n",yyLineNr,yyFileName.data()); - yyLineNr++; + config_warn("Missing end quote (\") on line %d, file %s\n",g_yyLineNr,g_yyFileName.data()); + g_yyLineNr++; } - BEGIN(lastState); + BEGIN(g_lastState); } <GetQuotedString>"\\\"" { - tmpString+='"'; + g_tmpString+='"'; } -<GetQuotedString>. { tmpString+=*yytext; } +<GetQuotedString>. { g_tmpString+=*yytext; } <GetBool>[a-zA-Z]+ { QCString bs=yytext; bs=bs.upper(); if (bs=="YES" || bs=="1") - *b=TRUE; + *g_bool=TRUE; else if (bs=="NO" || bs=="0") - *b=FALSE; + *g_bool=FALSE; else { - *b=FALSE; + *g_bool=FALSE; config_warn("Invalid value '%s' for " "boolean tag in line %d, file %s; use YES or NO\n", - bs.data(),yyLineNr,yyFileName.data()); + bs.data(),g_yyLineNr,g_yyFileName.data()); } } +<GetStrList1>[^ \#\"\t\r\n]+ { + g_elemStr+=configStringRecode(yytext,g_encoding,"UTF-8"); + } <GetStrList>[^ \#\"\t\r\n,]+ { - elemStr+=configStringRecode(yytext,encoding,"UTF-8"); + g_elemStr+=configStringRecode(yytext,g_encoding,"UTF-8"); } -<SkipComment>\n { yyLineNr++; BEGIN(Start); } -<SkipComment>\\[ \r\t]*\n { yyLineNr++; BEGIN(Start); } -<*>\\[ \r\t]*\n { yyLineNr++; } +<SkipComment>\n { g_yyLineNr++; BEGIN(Start); } +<SkipComment>\\[ \r\t]*\n { g_yyLineNr++; BEGIN(Start); } +<*>\\[ \r\t]*\n { g_yyLineNr++; } <*>. -<*>\n { yyLineNr++ ; } +<*>\n { g_yyLineNr++ ; } %% @@ -942,7 +1001,7 @@ void ConfigImpl::writeTemplate(FTextStream &t,bool sl,bool upd) { t << takeStartComment() << endl; } - t << "# Doxyfile " << getVersion() << endl << endl; + t << "# Doxyfile " << getDoxygenVersion() << endl << endl; if (!sl) { t << convertToComment(m_header,""); @@ -963,11 +1022,7 @@ void ConfigImpl::writeTemplate(FTextStream &t,bool sl,bool upd) void ConfigImpl::compareDoxyfile(FTextStream &t) { - t << "# Difference with default Doxyfile " << getVersion(); - if (strlen(getGitVersion())) - { - t << " (" << getGitVersion() << ")"; - } + t << "# Difference with default Doxyfile " << getFullVersion(); t << endl; QListIterator<ConfigOption> it = iterator(); ConfigOption *option; @@ -1231,27 +1286,27 @@ static QCString configFileToString(const char *name) bool ConfigImpl::parseString(const char *fn,const char *str,bool update) { - config = ConfigImpl::instance(); - inputString = str; - inputPosition = 0; - yyFileName = fn; - yyLineNr = 1; - includeStack.setAutoDelete(TRUE); - includeStack.clear(); - includeDepth = 0; + g_config = ConfigImpl::instance(); + g_inputString = str; + g_inputPosition = 0; + g_yyFileName = fn; + g_yyLineNr = 1; + g_includeStack.setAutoDelete(TRUE); + g_includeStack.clear(); + g_includeDepth = 0; configimplYYrestart( configimplYYin ); BEGIN( PreStart ); - config_upd = update; + g_configUpdate = update; configimplYYlex(); - config_upd = FALSE; - inputString = 0; + g_configUpdate = FALSE; + g_inputString = 0; return TRUE; } bool ConfigImpl::parse(const char *fn,bool update) { int retval; - encoding = "UTF-8"; + g_encoding = "UTF-8"; printlex(yy_flex_debug, TRUE, __FILE__, fn); retval = parseString(fn,configFileToString(fn), update); printlex(yy_flex_debug, FALSE, __FILE__, fn); @@ -1284,13 +1339,13 @@ static void cleanUpPaths(QStrList &str) if (fi.exists() && fi.isDir()) { int i = str.at(); - QCString p = fi.absFilePath().utf8(); - if (p[p.length()-1]!='/') p+='/'; + QCString path_str = fi.absFilePath().utf8(); + if (path_str[path_str.length()-1]!='/') path_str+='/'; str.remove(); if (str.at()==i) // did not remove last item - str.insert(i,p); + str.insert(i,path_str); else - str.append(p); + str.append(path_str); } } sfp = str.next(); @@ -1541,6 +1596,9 @@ void Config::checkAndCorrect() s=aliasList.next(); } + // check EXTENSION_MAPPING + checkList(Config_getList(EXTENSION_MAPPING),"EXTENSION_MAPPING",TRUE,TRUE); + // check FILTER_PATTERNS checkList(Config_getList(FILTER_PATTERNS),"FILTER_PATTERNS",TRUE,TRUE); @@ -1556,9 +1614,6 @@ void Config::checkAndCorrect() checkList(Config_getList(EXTRA_SEARCH_MAPPINGS),"EXTRA_SEARCH_MAPPING",TRUE,TRUE); } - // check TCL_SUBST - checkList(Config_getList(TCL_SUBST),"TCL_SUBST",TRUE,TRUE); - // check if GENERATE_TREEVIEW and GENERATE_HTMLHELP are both enabled if (Config_getBool(GENERATE_TREEVIEW) && Config_getBool(GENERATE_HTMLHELP)) { @@ -1623,7 +1678,7 @@ void Config::checkAndCorrect() } else if (dotNumThreads<=0) { - dotNumThreads=QMAX(2,QThread::idealThreadCount()+1); + dotNumThreads=QMAX(2,std::thread::hardware_concurrency()+1); } // check dot path @@ -1952,7 +2007,7 @@ void Config::postProcess(bool clearHeaderAndFooter, bool compare) if (!compare)ConfigImpl::instance()->emptyValueToDefault(); ConfigImpl::instance()->convertStrToVal(); - // avoid bootstrapping issues when the config file already + // avoid bootstrapping issues when the g_config file already // refers to the files that we are supposed to parse. if (clearHeaderAndFooter) { @@ -1968,4 +2023,6 @@ void Config::deinit() ConfigImpl::instance()->deleteInstance(); } +#if USE_STATE2STRING #include "configimpl.l.h" +#endif |