@@ -251,6 +251,25 @@ static std::string make_vcxproj_cl_entry(const std::string& file, ClType type)
251251 return outstr;
252252}
253253
254+ static std::vector<std::string> prioritizelib (const std::vector<std::string>& libfiles)
255+ {
256+ std::map<std::string, std::size_t > priorities;
257+ std::size_t prio = libfiles.size ();
258+ for (const auto &l : libfiles) {
259+ priorities.emplace (l, prio--);
260+ }
261+ priorities[" lib/valueflow.cpp" ] = 1000 ;
262+ priorities[" lib/tokenize.cpp" ] = 900 ;
263+ priorities[" lib/symboldatabase.cpp" ] = 800 ;
264+ std::vector<std::string> libfiles_prio = libfiles;
265+ std::sort (libfiles_prio.begin (), libfiles_prio.end (), [&](const std::string &l1, const std::string &l2) {
266+ const auto p1 = priorities.find (l1);
267+ const auto p2 = priorities.find (l2);
268+ return (p1 != priorities.end () ? p1->second : 0 ) > (p2 != priorities.end () ? p2->second : 0 );
269+ });
270+ return libfiles_prio;
271+ }
272+
254273int main (int argc, char **argv)
255274{
256275 const bool release (argc >= 2 && std::string (argv[1 ]) == " --release" );
@@ -262,6 +281,7 @@ int main(int argc, char **argv)
262281 std::cerr << err << std::endl;
263282 return EXIT_FAILURE ;
264283 }
284+ const std::vector<std::string> libfiles_prio = prioritizelib (libfiles);
265285
266286 std::vector<std::string> extfiles;
267287 err = getCppFiles (extfiles, " externals/" , true );
@@ -349,7 +369,7 @@ int main(int argc, char **argv)
349369 outstr += make_vcxproj_cl_entry (R"( ..\externals\simplecpp\simplecpp.cpp)" , Compile);
350370 outstr += make_vcxproj_cl_entry (R"( ..\externals\tinyxml2\tinyxml2.cpp)" , Compile);
351371
352- for (const std::string &libfile: libfiles ) {
372+ for (const std::string &libfile: libfiles_prio ) {
353373 const std::string l = libfile.substr (4 );
354374 outstr += make_vcxproj_cl_entry (l, l == " check.cpp" ? Precompile : Compile);
355375 }
@@ -400,7 +420,7 @@ int main(int argc, char **argv)
400420 fout1 << " \\\n " << std::string (11 , ' ' );
401421 }
402422 fout1 << " \n\n SOURCES += " ;
403- for (const std::string &libfile : libfiles ) {
423+ for (const std::string &libfile : libfiles_prio ) {
404424 fout1 << " $${PWD}/" << libfile.substr (4 );
405425 if (libfile != libfiles.back ())
406426 fout1 << " \\\n " << std::string (11 , ' ' );
@@ -638,18 +658,18 @@ int main(int argc, char **argv)
638658 fout << " MAN_SOURCE=man/cppcheck.1.xml\n\n " ;
639659
640660 fout << " \n ###### Object Files\n\n " ;
641- fout << " LIBOBJ = " << objfiles (libfiles ) << " \n\n " ;
661+ fout << " LIBOBJ = " << objfiles (libfiles_prio ) << " \n\n " ;
642662 fout << " EXTOBJ = " << objfiles (extfiles) << " \n\n " ;
643663 fout << " CLIOBJ = " << objfiles (clifiles) << " \n\n " ;
644664 fout << " TESTOBJ = " << objfiles (testfiles) << " \n\n " ;
645665
646666 fout << " .PHONY: run-dmake tags\n\n " ;
647667 fout << " \n ###### Targets\n\n " ;
648- fout << " cppcheck: $(LIBOBJ ) $(CLIOBJ ) $(EXTOBJ )\n " ;
668+ fout << " cppcheck: $(EXTOBJ ) $(LIBOBJ ) $(CLIOBJ )\n " ;
649669 fout << " \t $(CXX) $(CPPFLAGS) $(CXXFLAGS) -o $@ $^ $(LIBS) $(LDFLAGS) $(RDYNAMIC)\n\n " ;
650670 fout << " all:\t cppcheck testrunner\n\n " ;
651671 // TODO: generate from clifiles
652- fout << " testrunner: $(TESTOBJ ) $(LIBOBJ ) $(EXTOBJ ) cli/executor.o cli/processexecutor.o cli/singleexecutor.o cli/threadexecutor.o cli/cmdlineparser.o cli/cppcheckexecutor.o cli/cppcheckexecutorseh.o cli/cppcheckexecutorsig.o cli/stacktrace.o cli/filelister.o\n " ;
672+ fout << " testrunner: $(EXTOBJ ) $(TESTOBJ ) $(LIBOBJ ) cli/executor.o cli/processexecutor.o cli/singleexecutor.o cli/threadexecutor.o cli/cmdlineparser.o cli/cppcheckexecutor.o cli/cppcheckexecutorseh.o cli/cppcheckexecutorsig.o cli/stacktrace.o cli/filelister.o\n " ;
653673 fout << " \t $(CXX) $(CPPFLAGS) $(CXXFLAGS) -o $@ $^ $(LIBS) $(LDFLAGS) $(RDYNAMIC)\n\n " ;
654674 fout << " test:\t all\n " ;
655675 fout << " \t ./testrunner\n\n " ;
@@ -745,7 +765,7 @@ int main(int argc, char **argv)
745765
746766 fout << " \n ###### Build\n\n " ;
747767
748- compilefiles (fout, libfiles , " ${INCLUDE_FOR_LIB}" );
768+ compilefiles (fout, libfiles_prio , " ${INCLUDE_FOR_LIB}" );
749769 compilefiles (fout, clifiles, " ${INCLUDE_FOR_CLI}" );
750770 compilefiles (fout, testfiles, " ${INCLUDE_FOR_TEST}" );
751771 compilefiles (fout, extfiles, emptyString);
0 commit comments