blob: 381c27646c9ab8ffb78902c0bdfb75024773755e [file] [log] [blame]
/*
* Copyright 2014-present Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License. You may obtain
* a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
package com.facebook.buck.apple.xcode.xcspec;
import com.dd.plist.NSDictionary;
import com.dd.plist.NSObject;
import com.dd.plist.NSString;
import com.dd.plist.PropertyListParser;
import com.google.common.collect.ImmutableMap;
import java.io.InputStream;
/**
* Parsing logic for SDKSettings property list file that ships with Xcode.
*/
public final class SDKSettings {
/**
* Key into the default properties dictionary for the default compiler identifier.
*/
public static final String DEFAULT_COMPILER_KEY = "DEFAULT_COMPILER";
private static final String DEFAULT_PROPERTIES_KEY = "DefaultProperties";
// Utility class. Do not instantiate.
private SDKSettings() { }
/**
* Parses the contents of the provided SDKSettings.plist input stream
* and extracts the dictionary of DefaultProperties values.
*/
public static void parseDefaultPropertiesFromPlist(
InputStream sdkSettingsPlist,
ImmutableMap.Builder<String, String> defaultPropertiesBuilder)
throws Exception {
NSObject sdkSettings = PropertyListParser.parse(sdkSettingsPlist);
if (!(sdkSettings instanceof NSDictionary)) {
throw new RuntimeException(
"Unexpected SDKSettings.plist contents (expected NSDictionary, got " + sdkSettings + ")");
}
getDefaultPropertiesFromNSDictionary((NSDictionary) sdkSettings, defaultPropertiesBuilder);
}
private static void getDefaultPropertiesFromNSDictionary(
NSDictionary sdkSettingsDict,
ImmutableMap.Builder<String, String> defaultPropertiesBuilder) {
NSObject defaultProperties = sdkSettingsDict.objectForKey(DEFAULT_PROPERTIES_KEY);
if (!(defaultProperties instanceof NSDictionary)) {
throw new RuntimeException(
"Unexpected " + DEFAULT_PROPERTIES_KEY + " contents (expected NSDictionary, got " +
defaultProperties + ")");
}
NSDictionary defaultPropertiesDict = (NSDictionary) defaultProperties;
for (String key : defaultPropertiesDict.allKeys()) {
NSObject value = defaultPropertiesDict.objectForKey(key);
if (!(value instanceof NSString)) {
throw new RuntimeException(
"Unexpected key " + key + " contents (expected NSString, got " +
value + ")");
}
NSString stringValue = (NSString) value;
defaultPropertiesBuilder.put(key, stringValue.toString());
}
}
}