diff --git a/Changes b/Changes index f0afd53fc..e23d0f5c0 100644 --- a/Changes +++ b/Changes @@ -5,6 +5,8 @@ indicates the contributor was also the author of the fix; Thanks! * Verilator 3.63** +**** Try all +libext's in the exact order given. [Michael Shinkarovsky] + **** Fix internal error when public for loop has empty body. [David Addison] * Verilator 3.633 2/7/2007 diff --git a/src/V3Options.cpp b/src/V3Options.cpp index b1a729475..8b0fea26e 100644 --- a/src/V3Options.cpp +++ b/src/V3Options.cpp @@ -48,7 +48,8 @@ struct V3OptionsImp { list m_allArgs; // List of every argument encountered list m_incDirs; // Include directories (ordered) set m_incDirSet; // Include directories (for removing duplicates) - set m_libExts; // Library extensions + list m_libExts; // Library extensions (ordered) + set m_libExtSet; // Library extensions (for removing duplicates) DirMap m_dirMap; // Directory listing // ACCESSOR METHODS @@ -59,8 +60,9 @@ struct V3OptionsImp { } } void addLibExt(const string& libext) { - if (m_libExts.find(libext) == m_libExts.end()) { - m_libExts.insert(libext); + if (m_libExtSet.find(libext) == m_libExtSet.end()) { + m_libExtSet.insert(libext); + m_libExts.push_back(libext); } } V3OptionsImp() {} @@ -193,7 +195,7 @@ string V3Options::filePath (FileLine* fl, const string& modname, const string& e // using the incdir and libext's. // Return "" if not found. for (list::iterator dirIter=m_impp->m_incDirs.begin(); dirIter!=m_impp->m_incDirs.end(); ++dirIter) { - for (set::iterator extIter=m_impp->m_libExts.begin(); extIter!=m_impp->m_libExts.end(); ++extIter) { + for (list::iterator extIter=m_impp->m_libExts.begin(); extIter!=m_impp->m_libExts.end(); ++extIter) { string fn = filenameFromDirBase(*dirIter,modname+*extIter); string exists = fileExists(fn); if (exists!="") { @@ -214,7 +216,7 @@ string V3Options::filePath (FileLine* fl, const string& modname, const string& e } else { fl->v3error("Looked in:"<::iterator dirIter=m_impp->m_incDirs.begin(); dirIter!=m_impp->m_incDirs.end(); ++dirIter) { - for (set::iterator extIter=m_impp->m_libExts.begin(); extIter!=m_impp->m_libExts.end(); ++extIter) { + for (list::iterator extIter=m_impp->m_libExts.begin(); extIter!=m_impp->m_libExts.end(); ++extIter) { string fn = filenameFromDirBase(*dirIter,modname+*extIter); fl->v3error(" "<