[tvos] Handle a type error with target_xcode_platform
This is a follow-up CL of
https://gn-review.googlesource.com/c/gn/+/18840.
With this change, XcodeWriter returns an error when
target_xcode_platform is not a string.
It also updates variables and functions names.
Bug: chromium:391914246
Change-Id: I1204960e85f1ff7d63e52dee244befc4fa224244
Reviewed-on: https://gn-review.googlesource.com/c/gn/+/18880
Commit-Queue: Sylvain Defresne <sdefresne@chromium.org>
Reviewed-by: Sylvain Defresne <sdefresne@chromium.org>
Reviewed-by: David Turner <digit@google.com>
Reviewed-by: Takuto Ikuta <tikuta@google.com>
diff --git a/src/gn/xcode_writer.cc b/src/gn/xcode_writer.cc
index 62945ad..ed4b33e 100644
--- a/src/gn/xcode_writer.cc
+++ b/src/gn/xcode_writer.cc
@@ -48,9 +48,9 @@
WRITER_TARGET_OS_MACOS,
};
-enum TargetPlatformType {
- WRITER_TARGET_PLATFORM_IPHONEOS,
- WRITER_TARGET_PLATFORM_TVOS,
+enum TargetXcodePlatformType {
+ WRITER_TARGET_XCODE_PLATFORM_IPHONEOS,
+ WRITER_TARGET_XCODE_PLATFORM_TVOS,
};
const char* kXCTestFileSuffixes[] = {
@@ -86,23 +86,36 @@
return WRITER_TARGET_OS_MACOS;
}
-std::optional<TargetPlatformType> GetTargetPlatform(const Args& args,
- const ParseNode* node,
- Err* err) {
- const Value* target_platform_value =
+std::optional<TargetXcodePlatformType> GetTargetXcodePlatform(
+ const Args& args,
+ const ParseNode* node,
+ Err* err) {
+ const Value* target_xcode_platform_value =
args.GetArgOverride(variables::kTargetXcodePlatform);
- if (target_platform_value) {
- if (target_platform_value->type() == Value::STRING) {
- if (target_platform_value->string_value() == "tvos")
- return WRITER_TARGET_PLATFORM_TVOS;
- if (target_platform_value->string_value() != "iphoneos") {
- *err = Err(node, "Unknown target_platform value",
- target_platform_value->string_value());
- return std::nullopt;
- }
- }
+ if (!target_xcode_platform_value) {
+ return WRITER_TARGET_XCODE_PLATFORM_IPHONEOS;
}
- return WRITER_TARGET_PLATFORM_IPHONEOS;
+
+ if (target_xcode_platform_value->type() != Value::STRING) {
+ *err = Err(node, "target_xcode_platform value should be a string",
+ target_xcode_platform_value->ToString(false));
+ return std::nullopt;
+ }
+
+ const std::string& target_xcode_platform =
+ target_xcode_platform_value->string_value();
+
+ if (target_xcode_platform == "tvos") {
+ return WRITER_TARGET_XCODE_PLATFORM_TVOS;
+ }
+
+ if (target_xcode_platform == "iphoneos") {
+ return WRITER_TARGET_XCODE_PLATFORM_IPHONEOS;
+ }
+
+ *err = Err(node, "Unknown target_xcode_platform value",
+ target_xcode_platform);
+ return std::nullopt;
}
std::string GetBuildScript(const std::string& target_name,
@@ -428,11 +441,11 @@
PBXAttributes attributes;
switch (target_os) {
case WRITER_TARGET_OS_IOS: {
- const std::optional<TargetPlatformType> target_platform =
- GetTargetPlatform(build_settings->build_args(), node, err);
- if (!target_platform)
+ const std::optional<TargetXcodePlatformType> target_xcode_platform =
+ GetTargetXcodePlatform(build_settings->build_args(), node, err);
+ if (!target_xcode_platform)
return {};
- if (*target_platform == WRITER_TARGET_PLATFORM_TVOS) {
+ if (*target_xcode_platform == WRITER_TARGET_XCODE_PLATFORM_TVOS) {
attributes["SDKROOT"] = "appletvos";
attributes["TARGETED_DEVICE_FAMILY"] = "3";
} else {