diff --git a/Source/cmExtraSublimeTextGenerator.cxx b/Source/cmExtraSublimeTextGenerator.cxx index 03e2e1db6..b1741257e 100644 --- a/Source/cmExtraSublimeTextGenerator.cxx +++ b/Source/cmExtraSublimeTextGenerator.cxx @@ -161,7 +161,11 @@ void cmExtraSublimeTextGenerator std::string projectName = mf->GetProjectName(); std::string sublimeClangOptionsFilename = outputDir+"/"; sublimeClangOptionsFilename += projectName + ".sublimeclang-options"; - fout << "\t\"sublimeclang_options_file\": \"" << sublimeClangOptionsFilename + std::string sublimeClangOptionsScriptFilename = outputDir + "/" + + projectName + "_sublimeclang_options_script.py"; + fout << "\t\"sublimeclang_options_script\": \"python " + << sublimeClangOptionsScriptFilename << " " + << sublimeClangOptionsFilename << "\"\n\t"; // End of the settings section fout << "}\n"; @@ -171,8 +175,30 @@ void cmExtraSublimeTextGenerator this->WriteSublimeClangOptionsFile(sourceFileFlags, sublimeClangOptionsFilename); + this->WriteSublimeClangOptionsScript(sublimeClangOptionsScriptFilename); } +void cmExtraSublimeTextGenerator:: + WriteSublimeClangOptionsScript(const std::string& filename) +{ + cmGeneratedFileStream fout(filename.c_str()); + if(!fout) + { + return; + } + fout << "import json\n"; + fout << "import sys\n\n\n"; + fout << "if len(sys.argv) < 2:\n"; + fout << " sys.exit(1)\n"; + fout << "data = None\n"; + fout << "with open(sys.argv[1]) as f:\n"; + fout << " data = json.load(f)\n"; + fout << "if data is not None:\n"; + fout << " for arg in data.get(sys.argv[2], []):\n"; + fout << " print arg\n"; +} + + void cmExtraSublimeTextGenerator:: WriteSublimeClangOptionsFile(const MapSourceFileFlags& sourceFileFlags, const std::string& filename) @@ -351,6 +377,7 @@ void cmExtraSublimeTextGenerator:: this->ComputeDefines(*iter, lg, target, gtgt); flags.clear(); cmsys::RegularExpression flagRegex; + // Regular expression to extract compiler flags from a string // https://gist.github.com/3944250 const char* regexString = "(^|[ ])-[DIOUWfgs][^= ]+(=\\\"[^\"]+\\\"|=[^\"][^ ]+)?"; diff --git a/Source/cmExtraSublimeTextGenerator.h b/Source/cmExtraSublimeTextGenerator.h index 26e09a64d..8c0c1f39e 100644 --- a/Source/cmExtraSublimeTextGenerator.h +++ b/Source/cmExtraSublimeTextGenerator.h @@ -48,6 +48,7 @@ private: void CreateNewProjectFile(const std::vector& lgs, const std::string& filename); + void WriteSublimeClangOptionsScript(const std::string& filename); void WriteSublimeClangOptionsFile(const MapSourceFileFlags& sourceFileFlags, const std::string& filename); /** Appends all targets as build systems to the project file and get all