Пример #1
0
Level Config::
level() const
{
    std::vector<Setting> settings;

    for (Entry const &entry : _contents) {
        switch (entry.type()) {
            case Entry::Type::Setting: {
                Setting const &setting = *entry.setting();
                settings.push_back(setting);
                break;
            }
            case Entry::Type::Include: {
                Level level = entry.config()->level();
                settings.insert(settings.end(), level.settings().begin(), level.settings().end());
                break;
            }
        }
    }

    return Level(settings);
}
Пример #2
0
bool PackageType::
parse(Context *context, plist::Dictionary const *dict, std::unordered_set<std::string> *seen, bool check)
{
    if (!Specification::parse(context, dict, seen, false))
        return false;

    auto unpack = plist::Keys::Unpack("PackageType", dict, seen);

    auto PR  = unpack.cast <plist::Dictionary> ("ProductReference");
    auto DBS = unpack.cast <plist::Dictionary> ("DefaultBuildSettings");

    if (!unpack.complete(check)) {
        fprintf(stderr, "%s", unpack.errorText().c_str());
    }

    if (PR != nullptr) {
        ProductReference productReference;
        if (productReference.parse(PR)) {
            _productReference = productReference;
        }
    }

    if (DBS != nullptr) {
        std::vector<Setting> settings;
        for (size_t n = 0; n < DBS->count(); n++) {
            auto DBSK = DBS->key(n);
            auto DBSV = DBS->value <plist::String> (DBSK);

            if (DBSV != nullptr) {
                Setting setting = Setting::Parse(DBSK, DBSV->value());
                settings.push_back(setting);
            }
        }
        _defaultBuildSettings = Level(settings);
    }

    return true;
}
Пример #3
0
bool ProductType::
parse(Context *context, plist::Dictionary const *dict, std::unordered_set<std::string> *seen, bool check)
{
    if (!Specification::parse(context, dict, seen, false))
        return false;

    auto unpack = plist::Keys::Unpack("ProductType", dict, seen);

    auto DTN   = unpack.cast <plist::String> ("DefaultTargetName");
    auto DBP   = unpack.cast <plist::Dictionary> ("DefaultBuildProperties");
    auto V     = unpack.cast <plist::Dictionary> ("Validation");
    auto INP   = unpack.cast <plist::String> ("IconNamePrefix");
    auto PTs   = unpack.cast <plist::Array> ("PackageTypes");
    auto HIP   = unpack.coerce <plist::Boolean> ("HasInfoPlist");
    auto HIPS  = unpack.coerce <plist::Boolean> ("HasInfoPlistStrings");
    auto IW    = unpack.coerce <plist::Boolean> ("IsWrapper");
    auto IJ    = unpack.coerce <plist::Boolean> ("IsJava");
    auto SZL   = unpack.coerce <plist::Boolean> ("SupportsZeroLink");
    auto APSS  = unpack.coerce <plist::Boolean> ("AlwaysPerformSeparateStrip");
    auto WSTE  = unpack.coerce <plist::Boolean> ("WantsSimpleTargetEditing");
    auto AWCR  = unpack.coerce <plist::Boolean> ("AddWatchCompanionRequirement");
    auto ROP   = unpack.coerce <plist::Boolean> ("RunsOnProxy");
    auto DSA   = unpack.coerce <plist::Boolean> ("DisableSchemeAutocreation");
    auto VEB   = unpack.coerce <plist::Boolean> ("ValidateEmbeddedBinaries");
    auto SODR  = unpack.coerce <plist::Boolean> ("SupportsOnDemandResources");
    auto CEAL  = unpack.coerce <plist::Boolean> ("CanEmbedAddressSanitizerLibraries");
    auto RSEF  = unpack.coerce <plist::String> ("RunpathSearchPathForEmbeddedFrameworks");
    auto IE    = unpack.coerce <plist::Boolean> ("IsEmbeddable");
    auto BPIWE = unpack.coerce <plist::Array> ("BuildPhaseInjectionsWhenEmbedding");
    auto RBPD  = unpack.coerce <plist::String> ("RequiredBuiltProductsDir");

    if (!unpack.complete(check)) {
        fprintf(stderr, "%s", unpack.errorText().c_str());
    }

    if (DTN != nullptr) {
        _defaultTargetName = DTN->value();
    }

    if (DBP != nullptr) {
        std::vector<Setting> settings;
        for (size_t n = 0; n < DBP->count(); n++) {
            auto DBPK = DBP->key(n);
            auto DBPV = DBP->value <plist::String> (DBPK);

            if (DBPV != nullptr) {
                Setting setting = Setting::Parse(DBPK, DBPV->value());
                settings.push_back(setting);
            }
        }
        _defaultBuildProperties = Level(settings);
    }

    if (V != nullptr) {
        _validation = Validation();
        _validation->parse(V);
    }

    if (INP != nullptr) {
        _iconNamePrefix = INP->value();
    }

    if (PTs != nullptr) {
        _packageTypes = std::vector<std::string>();
        for (size_t n = 0; n < PTs->count(); n++) {
            if (auto PT = PTs->value <plist::String> (n)) {
                _packageTypes->push_back(PT->value());
            }
        }
    }

    if (HIP != nullptr) {
        _hasInfoPlist = HIP->value();
    }

    if (HIPS != nullptr) {
        _hasInfoPlistStrings = HIPS->value();
    }

    if (IW != nullptr) {
        _isWrapper = IW->value();
    }

    if (IJ != nullptr) {
        _isJava = IJ->value();
    }

    if (SZL != nullptr) {
        _supportsZeroLink = SZL->value();
    }

    if (APSS != nullptr) {
        _alwaysPerformSeparateStrip = APSS->value();
    }

    if (WSTE != nullptr) {
        _wantsSimpleTargetEditing = WSTE->value();
    }

    if (AWCR != nullptr) {
        _addWatchCompanionRequirement = AWCR->value();
    }

    if (ROP != nullptr) {
        _runsOnProxy = ROP->value();
    }

    if (DSA != nullptr) {
        _disableSchemeAutocreation = DSA->value();
    }

    if (VEB != nullptr) {
        _validateEmbeddedBinaries = VEB->value();
    }

    if (SODR != nullptr) {
        _supportsOnDemandResources = SODR->value();
    }

    if (CEAL != nullptr) {
        _canEmbedAddressSanitizerLibraries = CEAL->value();
    }

    if (RSEF != nullptr) {
        _runpathSearchPathForEmbeddedFrameworks = RSEF->value();
    }

    if (IE != nullptr) {
        _isEmbeddable = IE->value();
    }

    if (BPIWE != nullptr) {
        _buildPhaseInjectionsWhenEmbedding = std::vector<BuildPhaseInjection>();
        for (size_t n = 0; n < BPIWE->count(); n++) {
            auto BPI = BPIWE->value <plist::Dictionary> (n);
            if (BPI != nullptr) {
                BuildPhaseInjection injection;
                if (injection.parse(BPI)) {
                    _buildPhaseInjectionsWhenEmbedding->push_back(injection);
                }
            }
        }
    }

    if (RBPD != nullptr) {
        _requiredBuiltProductsDir = RBPD->value();
    }

    return true;
}