Allow building app_shell with GN.

BUG=424333
[email protected], [email protected]
TEST=manually

Review URL: https://codereview.chromium.org/676043005

Cr-Commit-Position: refs/heads/master@{#301798}
diff --git a/extensions/shell/BUILD.gn b/extensions/shell/BUILD.gn
index 5e501e3c..9d30fe0 100644
--- a/extensions/shell/BUILD.gn
+++ b/extensions/shell/BUILD.gn
@@ -11,3 +11,149 @@
     "app_shell_resources.pak",
   ]
 }
+
+source_set("app_shell_lib") {
+  # This library is testonly because it depends on testonly libarries,
+  # namely //base:prefs_test_support and //content/shell:content_shell_lib
+  # TODO(jamescook): investigate and get rid of test dependencies.
+  testonly = true
+  deps = [
+    ":resources",
+    ":version_header",
+    "//base",
+    "//base:prefs_test_support",
+    "//components/omaha_query_params",
+    "//components/pref_registry",
+    "//components/user_prefs",
+    "//components/web_cache/renderer",
+    "//content",
+    "//content/shell:content_shell_lib",
+    "//device/core",
+    "//device/hid",
+    "//extensions/common/api",
+    "//extensions/common/api:api_registration",
+    "//extensions/browser",
+    "//extensions/common",
+    "//extensions/renderer",
+    "//extensions/shell/common/api",
+    "//extensions/shell/common/api:api_registration",
+    "//extensions:extensions_resources",
+    "//extensions:shell_and_test_pak",
+    "//mojo/edk/system",
+    "//mojo/environment:chromium",
+    "//skia",
+    "//third_party/WebKit/public:blink",
+    "//ui/wm",
+    "//v8",
+  ]
+  sources = [
+    "app/shell_main_delegate.cc",
+    "app/shell_main_delegate.h",
+    "browser/api/identity/identity_api.cc",
+    "browser/api/identity/identity_api.h",
+    "browser/default_shell_browser_main_delegate.cc",
+    "browser/default_shell_browser_main_delegate.h",
+    "browser/desktop_controller.cc",
+    "browser/desktop_controller.h",
+    "browser/media_capture_util.cc",
+    "browser/media_capture_util.h",
+    "browser/shell_app_delegate.cc",
+    "browser/shell_app_delegate.h",
+    "browser/shell_app_window_client.cc",
+    "browser/shell_app_window_client.h",
+    "browser/shell_audio_controller_chromeos.cc",
+    "browser/shell_audio_controller_chromeos.h",
+    "browser/shell_browser_context.cc",
+    "browser/shell_browser_context.h",
+    "browser/shell_browser_main_delegate.h",
+    "browser/shell_browser_main_parts.cc",
+    "browser/shell_browser_main_parts.h",
+    "browser/shell_content_browser_client.cc",
+    "browser/shell_content_browser_client.h",
+    "browser/shell_desktop_controller.cc",
+    "browser/shell_desktop_controller.h",
+    "browser/shell_device_client.cc",
+    "browser/shell_device_client.h",
+    "browser/shell_display_info_provider.cc",
+    "browser/shell_display_info_provider.h",
+    "browser/shell_extension_host_delegate.cc",
+    "browser/shell_extension_host_delegate.h",
+    "browser/shell_extension_system.cc",
+    "browser/shell_extension_system.h",
+    "browser/shell_extension_system_factory.cc",
+    "browser/shell_extension_system_factory.h",
+    "browser/shell_extension_web_contents_observer.cc",
+    "browser/shell_extension_web_contents_observer.h",
+    "browser/shell_extensions_browser_client.cc",
+    "browser/shell_extensions_browser_client.h",
+    "browser/shell_native_app_window.cc",
+    "browser/shell_native_app_window.h",
+    "browser/shell_network_controller_chromeos.cc",
+    "browser/shell_network_controller_chromeos.h",
+    "browser/shell_network_delegate.cc",
+    "browser/shell_network_delegate.h",
+    "browser/shell_oauth2_token_service.cc",
+    "browser/shell_oauth2_token_service.h",
+    "browser/shell_omaha_query_params_delegate.cc",
+    "browser/shell_omaha_query_params_delegate.h",
+    "browser/shell_runtime_api_delegate.cc",
+    "browser/shell_runtime_api_delegate.h",
+    "browser/shell_special_storage_policy.cc",
+    "browser/shell_special_storage_policy.h",
+    "browser/shell_url_request_context_getter.cc",
+    "browser/shell_url_request_context_getter.h",
+    "browser/shell_web_contents_modal_dialog_manager.cc",
+    "common/shell_content_client.cc",
+    "common/shell_content_client.h",
+    "common/shell_extensions_client.cc",
+    "common/shell_extensions_client.h",
+    "common/switches.cc",
+    "common/switches.h",
+    "renderer/shell_content_renderer_client.cc",
+    "renderer/shell_content_renderer_client.h",
+    "renderer/shell_extensions_renderer_client.cc",
+    "renderer/shell_extensions_renderer_client.h",
+  ]
+  if (is_chromeos) {
+    deps += [
+      "//chromeos",
+      "//ui/chromeos:ui_chromeos",
+      "//ui/display",
+    ]
+  }
+}
+
+executable("app_shell") {
+  # testonly because :app_shell_lib is testonly. See :app_shell_lib comment.
+  testonly = true
+  deps = [
+    ":app_shell_lib",
+    "//extensions:shell_and_test_pak",
+  ]
+  sources = [ "app/shell_main.cc" ]
+}
+
+action("version_header") {
+  script = "//build/util/version.py"
+  version_path = "//chrome/VERSION"
+  lastchange_path = "//build/util/LASTCHANGE"
+  version_h = "common/version.h.in"
+  version_full = exec_script(
+    script,
+    ["-f", rebase_path(version_path, root_build_dir),
+     "-t", "@MAJOR@.@MINOR@.@BUILD@.@PATCH@"],
+    "trim string",
+    ["VERSION"])
+  inputs = [
+    lastchange_path,
+    version_path,
+    version_h
+  ]
+  outputs = [ "$target_gen_dir/common/version.h" ]
+  args = [
+    "-f", rebase_path(lastchange_path, root_build_dir),
+    "-e", "VERSION_FULL=\"$version_full\"",
+    rebase_path(version_h, root_build_dir),
+    rebase_path("$target_gen_dir/common/version.h")
+  ]
+}