예제 #1
0
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;
    }
예제 #2
0
파일: oovCMaker.cpp 프로젝트: 8l/oovcde
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);
    }