| /* |
| * 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()); |
| } |
| } |
| } |