diff --git a/build/config/BUILDCONFIG.gn b/build/config/BUILDCONFIG.gn index c8e8d9ec7d514a..78f64e8e1d6b06 100644 --- a/build/config/BUILDCONFIG.gn +++ b/build/config/BUILDCONFIG.gn @@ -511,11 +511,13 @@ template("component") { set_sources_assignment_filter([]) if (defined(invoker.all_dependent_configs)) { all_dependent_configs = invoker.all_dependent_configs } + if (defined(invoker.allow_circular_includes_from)) { allow_circular_includes_from = invoker.allow_circular_includes_from } if (defined(invoker.cflags)) { cflags = invoker.cflags } if (defined(invoker.cflags_c)) { cflags_c = invoker.cflags_c } if (defined(invoker.cflags_cc)) { cflags_cc = invoker.cflags_cc } if (defined(invoker.cflags_objc)) { cflags_objc = invoker.cflags_objc } if (defined(invoker.cflags_objcc)) { cflags_objcc = invoker.cflags_objcc } + if (defined(invoker.check_includes)) { check_includes = invoker.check_includes } if (defined(invoker.data)) { data = invoker.data } if (defined(invoker.datadeps)) { datadeps = invoker.datadeps } if (defined(invoker.defines)) { defines = invoker.defines } @@ -530,6 +532,7 @@ template("component") { if (defined(invoker.output_name)) { output_name = invoker.output_name } if (defined(invoker.public)) { public = invoker.public } if (defined(invoker.sources)) { sources = invoker.sources } + if (defined(invoker.testonly)) { testonly = invoker.testonly } if (defined(invoker.visibility)) { visibility = invoker.visibility } } } else { @@ -542,11 +545,13 @@ template("component") { set_sources_assignment_filter([]) if (defined(invoker.all_dependent_configs)) { all_dependent_configs = invoker.all_dependent_configs } + if (defined(invoker.allow_circular_includes_from)) { allow_circular_includes_from = invoker.allow_circular_includes_from } if (defined(invoker.cflags)) { cflags = invoker.cflags } if (defined(invoker.cflags_c)) { cflags_c = invoker.cflags_c } if (defined(invoker.cflags_cc)) { cflags_cc = invoker.cflags_cc } if (defined(invoker.cflags_objc)) { cflags_objc = invoker.cflags_objc } if (defined(invoker.cflags_objcc)) { cflags_objcc = invoker.cflags_objcc } + if (defined(invoker.check_includes)) { check_includes = invoker.check_includes } if (defined(invoker.data)) { data = invoker.data } if (defined(invoker.datadeps)) { datadeps = invoker.datadeps } if (defined(invoker.defines)) { defines = invoker.defines } @@ -561,6 +566,7 @@ template("component") { if (defined(invoker.output_name)) { output_name = invoker.output_name } if (defined(invoker.public)) { public = invoker.public } if (defined(invoker.sources)) { sources = invoker.sources } + if (defined(invoker.testonly)) { testonly = invoker.testonly } if (defined(invoker.visibility)) { visibility = invoker.visibility } } } @@ -586,11 +592,13 @@ template("test") { set_sources_assignment_filter([]) if (defined(invoker.all_dependent_configs)) { all_dependent_configs = invoker.all_dependent_configs } + if (defined(invoker.allow_circular_includes_from)) { allow_circular_includes_from = invoker.allow_circular_includes_from } if (defined(invoker.cflags)) { cflags = invoker.cflags } if (defined(invoker.cflags_c)) { cflags_c = invoker.cflags_c } if (defined(invoker.cflags_cc)) { cflags_cc = invoker.cflags_cc } if (defined(invoker.cflags_objc)) { cflags_objc = invoker.cflags_objc } if (defined(invoker.cflags_objcc)) { cflags_objcc = invoker.cflags_objcc } + if (defined(invoker.check_includes)) { check_includes = invoker.check_includes } if (defined(invoker.data)) { data = invoker.data } if (defined(invoker.datadeps)) { datadeps = invoker.datadeps } if (defined(invoker.defines)) { defines = invoker.defines } diff --git a/chrome/BUILD.gn b/chrome/BUILD.gn index 6577651baf3f39..d49ff3db1e649e 100644 --- a/chrome/BUILD.gn +++ b/chrome/BUILD.gn @@ -58,7 +58,7 @@ executable("chrome") { "//base/allocator", # Needed to use the master_preferences functions "//chrome/installer/util", - "//content/app:both", + "//content/public/app:both", ] # Needed for chrome_main.cc initialization of libraries. diff --git a/content/BUILD.gn b/content/BUILD.gn index 7f749aa7dbe01b..30d4109246c5a0 100644 --- a/content/BUILD.gn +++ b/content/BUILD.gn @@ -13,20 +13,20 @@ content_shared_components = [ "//content/gpu", "//content/plugin", "//content/ppapi_plugin", - "//content/public/app", "//content/public/browser:sources", "//content/public/child", "//content/public/common", "//content/public/plugin", "//content/public/renderer", + "//content/public/utility", "//content/renderer", - "//content/utility", ] if (is_component_build) { shared_library("content") { deps = content_shared_components + [ "//content/app", + "//content/public/app", ] forward_dependent_configs_from = deps } diff --git a/content/public/app/BUILD.gn b/content/public/app/BUILD.gn index 37d2847278c0a0..fa087e3b056c4d 100644 --- a/content/public/app/BUILD.gn +++ b/content/public/app/BUILD.gn @@ -2,7 +2,8 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -source_set("app") { +# Used internally to hold the sources shared between the various targets below. +source_set("app_sources") { sources = [ "android_library_loader_hooks.h", "content_main.h", @@ -23,3 +24,45 @@ source_set("app") { "//content/public/utility", ] } + +# The structure of this is like the private content/app implementation. +if (is_component_build) { + + group("app") { + deps = [ + ":app_sources", + "//content/app", + ] + } + group("browser") { + deps = [ "//content" ] + } + group("child") { + deps = [ "//content" ] + } + group("both") { + deps = [ "//content" ] + } + +} else { + + group("browser") { + deps = [ + ":app_sources", + "//content/app:browser" + ] + } + group("child") { + deps = [ + ":app_sources", + "//content/app:child" + ] + } + group("both") { + deps = [ + ":app_sources", + "//content/app:both" + ] + } + +} diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn index 75ada2c4a4ee05..5de37542c701d9 100644 --- a/content/test/BUILD.gn +++ b/content/test/BUILD.gn @@ -15,7 +15,7 @@ content_tests_gypi_values = exec_script( # GYP version //content/content_tests.gypi:test_support_content static_library("test_support") { deps = [ - "//content/public/app", + "//content/public/app:both", "//content/public/browser", "//content/public/common", "//net:test_support", diff --git a/extensions/BUILD.gn b/extensions/BUILD.gn index 93da8526a9c54e..7ef2e774a1f0df 100644 --- a/extensions/BUILD.gn +++ b/extensions/BUILD.gn @@ -58,10 +58,14 @@ source_set("test_support") { sources = [ "browser/api/dns/mock_host_resolver_creator.cc", "browser/api/dns/mock_host_resolver_creator.h", + "browser/api/storage/settings_test_util.cc", + "browser/api/storage/settings_test_util.h", "browser/api_test_utils.cc", "browser/api_test_utils.h", "browser/extensions_test.cc", "browser/extensions_test.h", + "browser/mock_extension_system.cc", + "browser/mock_extension_system.h", "browser/test_extensions_browser_client.cc", "browser/test_extensions_browser_client.h", "browser/test_management_policy.cc", @@ -145,6 +149,10 @@ repack("shell_and_test_pak") { } # TODO(GYP): Enable this link errors are fixed. +# This gives a link error in web_modal that is very mysterious. The GYP build +# doesn't seem to pull in web_content_modal_dialog_manager.o since the build +# does not have a reference to CreateNativeWebModalManager but it still links. +# The GN build fails with this symbol being undefined. if (false) { # TODO(tfarina): Many extension unit tests run as part of Chrome"s # unit_tests target. They should be moved here, which may require some @@ -154,8 +162,41 @@ test("unittests") { output_name = "extensions_unittests" sources = [ + "browser/admin_policy_unittest.cc", + "browser/api/api_resource_manager_unittest.cc", + "browser/api/declarative/deduping_factory_unittest.cc", + "browser/api/sockets_tcp/sockets_tcp_api_unittest.cc", + "browser/api/storage/settings_quota_unittest.cc", + "browser/api/storage/storage_api_unittest.cc", + "browser/api/storage/storage_frontend_unittest.cc", + "browser/computed_hashes_unittest.cc", + "browser/content_hash_tree_unittest.cc", + "browser/event_listener_map_unittest.cc", + "browser/event_router_unittest.cc", + "browser/api_unittest.cc", + "browser/api_unittest.h", + "browser/extension_pref_value_map_unittest.cc", + "browser/extension_registry_unittest.cc", + "browser/file_highlighter_unittest.cc", + "browser/file_reader_unittest.cc", + "browser/guest_view/guest_view_manager_unittest.cc", + "browser/image_loader_unittest.cc", + "browser/image_util_unittest.cc", "browser/info_map_unittest.cc", + "browser/lazy_background_task_queue_unittest.cc", + "browser/management_policy_unittest.cc", "browser/process_manager_unittest.cc", + "browser/process_map_unittest.cc", + "browser/quota_service_unittest.cc", + "browser/runtime_data_unittest.cc", + "browser/value_store/leveldb_value_store_unittest.cc", + "browser/value_store/testing_value_store_unittest.cc", + "browser/value_store/value_store_change_unittest.cc", + "browser/value_store/value_store_frontend_unittest.cc", + "browser/value_store/value_store_unittest.cc", + "browser/value_store/value_store_unittest.h", + "browser/verified_contents_unittest.cc", + "browser/warning_service_unittest.cc", "common/api/sockets/sockets_manifest_permission_unittest.cc", "common/csp_validator_unittest.cc", "common/event_filter_unittest.cc", @@ -185,14 +226,16 @@ test("unittests") { "renderer/script_context_set_unittest.cc", "renderer/utils_unittest.cc", "test/extensions_unittests_main.cc", - ] + ] deps = [ ":extensions_resources", ":shell_and_test_pak", ":test_support", "//base", + "//base:prefs_test_support", "//base/test:test_support", + "//components/keyed_service/content", "//content/test:test_support", "//device/serial", "//device/serial:test_util", @@ -205,6 +248,7 @@ test("unittests") { "//mojo/system", "//testing/gmock", "//testing/gtest", + "//third_party/leveldatabase", ] if (is_win) { diff --git a/extensions/browser/BUILD.gn b/extensions/browser/BUILD.gn index a8cc9857c4540a..deba657f779384 100644 --- a/extensions/browser/BUILD.gn +++ b/extensions/browser/BUILD.gn @@ -381,6 +381,7 @@ source_set("browser") { "//components/storage_monitor", "//crypto:platform", "//device/bluetooth", + "//device/core", "//device/hid", "//device/serial", "//device/usb", diff --git a/extensions/extensions.gyp b/extensions/extensions.gyp index cca73d6d69c233..e58f707ce89350 100644 --- a/extensions/extensions.gyp +++ b/extensions/extensions.gyp @@ -875,6 +875,7 @@ '<(SHARED_INTERMEDIATE_DIR)', ], 'sources': [ + # Note: sources list duplicated in GN build. 'browser/api/dns/mock_host_resolver_creator.cc', 'browser/api/dns/mock_host_resolver_creator.h', 'browser/api/storage/settings_test_util.cc', diff --git a/extensions/generated_extensions_api.gni b/extensions/generated_extensions_api.gni index 793ec64a11726c..81c5e860782124 100644 --- a/extensions/generated_extensions_api.gni +++ b/extensions/generated_extensions_api.gni @@ -109,7 +109,11 @@ template("generated_extensions_api") { "--namespace=$root_namespace", "--generator=cpp", "--include-rules=$schema_include_rules" ] - visibility = target_visibility + + if (defined(invoker.visibility)) { + # If visibility is restricted, add our own target to it. + visibility = [ invoker.visibility, target_visibility ] + } } } diff --git a/mojo/public/tools/bindings/mojom.gni b/mojo/public/tools/bindings/mojom.gni index eeb32bd6efb500..816edf77c9fd10 100644 --- a/mojo/public/tools/bindings/mojom.gni +++ b/mojo/public/tools/bindings/mojom.gni @@ -12,8 +12,10 @@ # List of source .mojom files to compile. # # deps (optional) +# # visibility (optional) -# Normal meaning. +# Normal meaning. However, this must be a list (normal visibility +# allows a single string). template("mojom") { assert(defined(invoker.sources), "\"sources\" must be defined for the $target_name template.") diff --git a/tools/gn/input_file_manager.cc b/tools/gn/input_file_manager.cc index eb255080a9da68..f358fdc2e68420 100644 --- a/tools/gn/input_file_manager.cc +++ b/tools/gn/input_file_manager.cc @@ -215,11 +215,20 @@ const ParseNode* InputFileManager::SyncLoadFile( } } - // The other load could have failed. In this case that error will be printed - // to the console, but we need to return something here, so make up a + // The other load could have failed. In this case that error was probably + // printed to the console, but we need to return something here, so make up a // dummy error. - if (!data->parsed_root) - *err = Err(origin, "File parse failed"); + // + // There is a race condition. The other load could have failed, but if the + // other thread is delayed for some reason, this thread could end up + // reporting the error to the scheduler first (since first error report + // wins). The user will see this one and the "real" one will be discarded. + if (!data->parsed_root) { + *err = Err(origin, "File parse failed.", + "If you see this, I'm really sorry, but a race condition has caused\n" + "me to eat your error message. It was crunchy. If the parse error\n" + "in your imported file isn't obvious, try re-running GN."); + } return data->parsed_root.get(); } diff --git a/ui/app_list/BUILD.gn b/ui/app_list/BUILD.gn index dee6a85cfeae1b..886eeeec170299 100644 --- a/ui/app_list/BUILD.gn +++ b/ui/app_list/BUILD.gn @@ -58,6 +58,7 @@ component("app_list") { "//base:i18n", "//base/third_party/dynamic_annotations", "//skia", + "//sync", "//third_party/icu", "//ui/accessibility", "//ui/base", diff --git a/ui/aura/BUILD.gn b/ui/aura/BUILD.gn index b5f08499f5b74c..10962d3352fc34 100644 --- a/ui/aura/BUILD.gn +++ b/ui/aura/BUILD.gn @@ -183,6 +183,7 @@ source_set("test_support") { "//ui/events:test_support", "//ui/gfx", "//ui/gfx/geometry", + "//ui/wm", ] if (is_win) { diff --git a/ui/base/BUILD.gn b/ui/base/BUILD.gn index 94b1864a0065ed..00994275e34f0c 100644 --- a/ui/base/BUILD.gn +++ b/ui/base/BUILD.gn @@ -308,6 +308,10 @@ component("base") { ] } else { deps += [ "//ui/base/ime" ] + + # http://crbug.com/408648 Circular includes from the ime sub-target to this + # one. + allow_circular_includes_from = [ "//ui/base/ime" ] } if (toolkit_views) { diff --git a/ui/keyboard/BUILD.gn b/ui/keyboard/BUILD.gn index cb1a01fdfdc0ff..8dbdf774bb755c 100644 --- a/ui/keyboard/BUILD.gn +++ b/ui/keyboard/BUILD.gn @@ -41,6 +41,10 @@ component("keyboard") { "//ui/keyboard/webui", "//ui/wm", ] + + # http://crbug.com/408651 Include cycle between this target and the "webui" + # sub-target. + allow_circular_includes_from = [ "//ui/keyboard/webui" ] } grit("resources_grit") { diff --git a/ui/shell_dialogs/BUILD.gn b/ui/shell_dialogs/BUILD.gn index 3579f17e5d36b7..dc9fd0938cdb44 100644 --- a/ui/shell_dialogs/BUILD.gn +++ b/ui/shell_dialogs/BUILD.gn @@ -66,9 +66,6 @@ component("shell_dialogs") { } } -# TODO(GYP) enable shell_dialogs_unittests when media is converted. -if (false) { - test("shell_dialogs_unittests") { sources = [ "select_file_dialog_win_unittest.cc", @@ -82,5 +79,3 @@ test("shell_dialogs_unittests") { "//testing/gtest", ] } - -} # if false diff --git a/ui/wm/BUILD.gn b/ui/wm/BUILD.gn index ec2da754f27b8d..d762bc6db7fdb1 100644 --- a/ui/wm/BUILD.gn +++ b/ui/wm/BUILD.gn @@ -87,6 +87,9 @@ component("wm") { "//ui/gfx/geometry", "//ui/resources", ] + + # http://crbug.com/408650 Circular dependency between this target and Aura. + allow_circular_includes_from = [ "//ui/aura" ] } static_library("test_support") {