Blueprint for language specs system
Current ModelManagerInterface::ProjectPart has following problems:
- Pure C can be set only for whole ProjectPart. Objective C headers and objective C++ headers/sources cannot be set.
- C++ language extensions not handled.
- Project managers for autotools and cmake assume that any file is C++ source
- ProjectManager can use only C++ flags and must ignore C/ObjC/ObjC++ flags.
- QMake project manager doesn’t read OBJECTIVE_HEADERS variable
How clang can handle different languages:
- Clang supports 4 languages: C, C++, ObjectiveC and ObjectiveC++. Each language has headers and implementation files. Like in such code:
- bool isHeader,
- bool isObjC)
- {
- QStringList opts;
- if (cxxEnabled && isHeader && isObjC)
- else if (!cxxEnabled && isHeader && isObjC)
- else if (cxxEnabled && !isHeader && isObjC)
- else if (!cxxEnabled && !isHeader && isObjC)
- else if (cxxEnabled && isHeader && !isObjC)
- else if (!cxxEnabled && isHeader && !isObjC)
- else if (cxxEnabled && !isHeader && !isObjC)
- else // !cxxEnabled && !isHeader && !isObjC
- return opts;
- }
- If file directly included to project, than it language and isHeader flag can be determined by each project manager plugin. Otherwise, we can use dependency table and assume that <iostream> file is “c++-header”, because it included only by C++ files. (sergey shambir: I don’t know how to handle inclusion from both C++ and ObjectiveC++ files. Probably it should have type of file from which it was opened in editor).
- Each language can have extensions: GNU, Microsoft and Borland. Only one extensions group used.
- Each language can have own set of flags, at least in QMAKE
- Each language can have several standards: c89, c99 and c11; c++98 and c++11

