OovStringVec ComponentTypesFile::getComponentFiles(OovStringRef const compName, OovStringRef const tagStr, bool getNested) const { OovStringVec files; OovStringVec names = getComponentNames(); OovString parentName = compName; for(auto const &name : names) { bool match = false; if(getNested) { if(strcmp(compName, Project::getRootComponentName()) == 0) { match = true; } else { match = compareComponentNames(parentName, name); } } else { match = (parentName == name); } if(match) { OovString tag = ComponentTypesFile::getCompTagName(name, tagStr); OovString val = mCompSourceListFile.getValue(tag); OovStringVec newFiles = CompoundValueRef::parseString(val); files.insert(files.end(), newFiles.begin(), newFiles.end()); } } return files; }
void CMaker::makeComponentFile(OovStringRef const compName, ComponentTypesFile::eCompTypes compType, OovStringVec const &sources, OovStringRef const destName) { OovString str; if(mVerbose) printf("Processing %s\n %s\n", compName.getStr(), destName.getStr()); if(compType == ComponentTypesFile::CT_Program) { if(mVerbose) printf(" Executable\n"); addCommandAndNames(CT_Exec, compName, sources, str); addLibsAndIncs(compName, str); str += "install(TARGETS "; str += compName; str += "\n EXPORT "; str += mProjectName; str += "Targets"; str += "\n RUNTIME DESTINATION \"${INSTALL_BIN_DIR}\" COMPONENT lib)\n"; } else if(compType == ComponentTypesFile::CT_SharedLib) { if(mVerbose) printf(" SharedLib\n"); addCommandAndNames(CT_Shared, compName, sources, str); addLibsAndIncs(compName, str); str += "install(TARGETS "; str += compName; str += "\n LIBRARY DESTINATION \"${INSTALL_LIB_DIR}\" COMPONENT lib)\n"; } else if(compType == ComponentTypesFile::CT_StaticLib) { if(mVerbose) printf(" Library\n"); OovStringVec headers = mCompTypes.getComponentIncludes(compName); discardDirs(headers); OovStringVec allFiles = headers; allFiles.insert(allFiles.end(), sources.begin(), sources.end() ); std::sort(allFiles.begin(), allFiles.end(), compareNoCase); if(sources.size() == 0) { addCommandAndNames(CT_Interface, compName, allFiles, str); str += "set_target_properties("; str += compName; str += " PROPERTIES LINKER_LANGUAGE CXX)\n"; } else addCommandAndNames(CT_Static, compName, allFiles, str); addCommandAndNames(CT_TargHeaders, compName, headers, str); str += "install(TARGETS "; str += compName; str += "\n EXPORT "; str += mProjectName; str += "Targets"; str += "\n ARCHIVE DESTINATION \"${INSTALL_LIB_DIR}\" COMPONENT lib"; str += "\n PUBLIC_HEADER DESTINATION \"${INSTALL_INCLUDE_DIR}/"; str += mProjectName; str += "\" COMPONENT dev)\n"; } writeFile(destName, str); }