BUILD.gn 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365
  1. # Copyright (c) 2013 The Chromium Authors. All rights reserved.
  2. # Use of this source code is governed by a BSD-style license that can be
  3. # found in the LICENSE file.
  4. import("//build/buildflag_header.gni")
  5. import("//testing/libfuzzer/fuzzer_test.gni")
  6. import("//testing/test.gni")
  7. import("features.gni")
  8. if (is_android) {
  9. import("//build/config/android/config.gni")
  10. import("//build/config/android/rules.gni")
  11. }
  12. buildflag_header("buildflags") {
  13. header = "buildflags.h"
  14. flags = [ "USE_PLATFORM_ICU_ALTERNATIVES=$use_platform_icu_alternatives" ]
  15. }
  16. component("url") {
  17. sources = [
  18. "gurl.cc",
  19. "gurl.h",
  20. "origin.cc",
  21. "origin.h",
  22. "scheme_host_port.cc",
  23. "scheme_host_port.h",
  24. "third_party/mozilla/url_parse.cc",
  25. "third_party/mozilla/url_parse.h",
  26. "url_canon.cc",
  27. "url_canon.h",
  28. "url_canon_etc.cc",
  29. "url_canon_filesystemurl.cc",
  30. "url_canon_fileurl.cc",
  31. "url_canon_host.cc",
  32. "url_canon_internal.cc",
  33. "url_canon_internal.h",
  34. "url_canon_internal_file.h",
  35. "url_canon_ip.cc",
  36. "url_canon_ip.h",
  37. "url_canon_mailtourl.cc",
  38. "url_canon_path.cc",
  39. "url_canon_pathurl.cc",
  40. "url_canon_query.cc",
  41. "url_canon_relative.cc",
  42. "url_canon_stdstring.cc",
  43. "url_canon_stdstring.h",
  44. "url_canon_stdurl.cc",
  45. "url_constants.cc",
  46. "url_constants.h",
  47. "url_file.h",
  48. "url_parse_file.cc",
  49. "url_parse_internal.h",
  50. "url_util.cc",
  51. "url_util.h",
  52. "url_util_internal.h",
  53. ]
  54. defines = [ "IS_URL_IMPL" ]
  55. public_deps = [ "//base" ]
  56. deps = [
  57. "//base/third_party/dynamic_annotations",
  58. "//ipc:param_traits",
  59. ]
  60. if (is_win) {
  61. # Don't conflict with Windows' "url.dll".
  62. output_name = "url_lib"
  63. }
  64. # ICU support.
  65. if (use_platform_icu_alternatives) {
  66. if (is_android) {
  67. sources += [ "url_idna_icu_alternatives_android.cc" ]
  68. deps += [
  69. ":buildflags",
  70. ":url_java",
  71. ":url_jni_headers",
  72. "//base",
  73. "//base/third_party/dynamic_annotations",
  74. ]
  75. } else if (is_ios) {
  76. sources += [ "url_idna_icu_alternatives_ios.mm" ]
  77. } else {
  78. assert(false,
  79. "ICU alternative is not implemented for platform: " + target_os)
  80. }
  81. } else {
  82. # Use ICU.
  83. sources += [
  84. "url_canon_icu.cc",
  85. "url_canon_icu.h",
  86. "url_idna_icu.cc",
  87. ]
  88. deps += [
  89. "//base:i18n",
  90. "//third_party/icu",
  91. ]
  92. }
  93. }
  94. if (is_android) {
  95. source_set("gurl_android") {
  96. sources = [
  97. "android/gurl_android.cc",
  98. "android/gurl_android.h",
  99. "android/parsed_android.cc",
  100. "android/parsed_android.h",
  101. ]
  102. deps = [
  103. ":gurl_jni_headers",
  104. ":url",
  105. "//base:base",
  106. ]
  107. }
  108. static_library("origin_android") {
  109. sources = [ "android/origin_android.cc" ]
  110. deps = [
  111. ":url",
  112. ":url_jni_headers",
  113. "//base",
  114. "//url/mojom:url_mojom_origin",
  115. ]
  116. }
  117. android_library("url_java") {
  118. sources = [ "android/java/src/org/chromium/url/IDNStringUtil.java" ]
  119. deps = [ "//base:jni_java" ]
  120. }
  121. android_library("gurl_java") {
  122. sources = [
  123. "android/java/src/org/chromium/url/GURL.java",
  124. "android/java/src/org/chromium/url/Parsed.java",
  125. "android/java/src/org/chromium/url/URI.java",
  126. ]
  127. deps = [
  128. "//base:base_java",
  129. "//base:jni_java",
  130. "//build/android:build_java",
  131. "//third_party/android_deps:com_google_errorprone_error_prone_annotations_java",
  132. "//third_party/androidx:androidx_annotation_annotation_java",
  133. ]
  134. annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ]
  135. }
  136. android_library("origin_java") {
  137. sources = [ "android/java/src/org/chromium/url/Origin.java" ]
  138. deps = [
  139. "//base:jni_java",
  140. "//mojo/public/java:bindings_java",
  141. "//mojo/public/mojom/base:base_java",
  142. "//url/mojom:url_mojom_origin_java",
  143. ]
  144. }
  145. generate_jni("url_jni_headers") {
  146. sources = [
  147. "android/java/src/org/chromium/url/IDNStringUtil.java",
  148. "android/java/src/org/chromium/url/Origin.java",
  149. ]
  150. }
  151. generate_jni("gurl_jni_headers") {
  152. sources = [
  153. "android/java/src/org/chromium/url/GURL.java",
  154. "android/java/src/org/chromium/url/Parsed.java",
  155. ]
  156. }
  157. }
  158. source_set("url_test_support") {
  159. testonly = true
  160. sources = [
  161. "gurl_abstract_tests.h",
  162. "origin_abstract_tests.cc",
  163. "origin_abstract_tests.h",
  164. ]
  165. public_deps = [
  166. ":url",
  167. "//base",
  168. "//base/test:test_support",
  169. "//testing/gmock",
  170. "//testing/gtest",
  171. ]
  172. }
  173. test("url_unittests") {
  174. sources = [
  175. "gurl_unittest.cc",
  176. "origin_unittest.cc",
  177. "run_all_unittests.cc",
  178. "scheme_host_port_unittest.cc",
  179. "url_canon_icu_unittest.cc",
  180. "url_canon_unittest.cc",
  181. "url_parse_unittest.cc",
  182. "url_test_utils.h",
  183. "url_util_unittest.cc",
  184. ]
  185. deps = [
  186. ":url",
  187. ":url_test_support",
  188. "//base",
  189. "//base/test:test_support",
  190. "//testing/gmock",
  191. "//testing/gtest",
  192. ]
  193. if (use_platform_icu_alternatives) {
  194. # Unit tests that are not supported by the current ICU alternatives on Android.
  195. if (is_android) {
  196. sources -= [
  197. "url_canon_icu_unittest.cc",
  198. "url_canon_unittest.cc",
  199. ]
  200. deps += [ ":url_java" ]
  201. }
  202. # Unit tests that are not supported by the current ICU alternatives on iOS.
  203. if (is_ios) {
  204. sources -= [
  205. "origin_unittest.cc",
  206. "scheme_host_port_unittest.cc",
  207. "url_canon_icu_unittest.cc",
  208. "url_canon_unittest.cc",
  209. ]
  210. }
  211. } else { # !use_platform_icu_alternatives
  212. deps += [ "//third_party/icu:icuuc" ]
  213. }
  214. if (!is_ios) {
  215. sources += [
  216. "mojom/scheme_host_port_mojom_traits_unittest.cc",
  217. "mojom/url_gurl_mojom_traits_unittest.cc",
  218. ]
  219. deps += [
  220. "//mojo/core/embedder",
  221. "//mojo/public/cpp/test_support:test_utils",
  222. "//url/ipc:url_ipc_unittests",
  223. "//url/mojom:mojom_traits",
  224. "//url/mojom:test_url_mojom_gurl",
  225. ]
  226. }
  227. }
  228. test("url_perftests") {
  229. sources = [
  230. "run_all_perftests.cc",
  231. "url_parse_perftest.cc",
  232. ]
  233. deps = [
  234. ":url",
  235. "//base",
  236. "//base/test:test_support",
  237. "//testing/gtest",
  238. ]
  239. }
  240. fuzzer_test("gurl_fuzzer") {
  241. sources = [ "gurl_fuzzer.cc" ]
  242. deps = [
  243. ":url",
  244. "//base",
  245. "//base:i18n",
  246. ]
  247. dict = "gurl_fuzzer.dict"
  248. }
  249. if (is_android) {
  250. source_set("gurl_android_test_helper") {
  251. testonly = true
  252. sources = [ "android/gurl_java_test_helper.cc" ]
  253. deps = [
  254. ":gurl_android",
  255. ":gurl_j_test_jni_headers",
  256. ":url",
  257. "//base/test:test_support",
  258. "//testing/gtest",
  259. ]
  260. }
  261. android_library("gurl_android_test_helper_java") {
  262. testonly = true
  263. sources =
  264. [ "android/javatests/src/org/chromium/url/GURLJavaTestHelper.java" ]
  265. deps = [
  266. ":gurl_java",
  267. "//base:base_java_test_support",
  268. "//base:jni_java",
  269. ]
  270. }
  271. # Targets depending on gurl_junit_test_support do not need to bypass platform
  272. # checks.
  273. android_library("gurl_junit_test_support") {
  274. testonly = true
  275. sources = [ "android/test/java/src/org/chromium/url/JUnitTestGURLs.java" ]
  276. deps = [ ":gurl_java" ]
  277. }
  278. # Unlike gurl_junit_test_support targets depending on gurl_junit_shadows must
  279. # bypass platform checks.
  280. robolectric_library("gurl_junit_shadows") {
  281. sources = [ "android/test/java/src/org/chromium/url/ShadowGURL.java" ]
  282. deps = [
  283. ":gurl_java",
  284. ":gurl_junit_test_support",
  285. ]
  286. }
  287. android_library("gurl_java_unit_tests") {
  288. testonly = true
  289. sources = [
  290. "android/javatests/src/org/chromium/url/GURLJavaTest.java",
  291. "android/javatests/src/org/chromium/url/JUnitTestGURLsTest.java",
  292. ]
  293. deps = [
  294. ":gurl_android_test_helper_java",
  295. ":gurl_java",
  296. ":gurl_junit_test_support",
  297. "//base:base_java",
  298. "//base:base_java_test_support",
  299. "//base:jni_java",
  300. "//content/public/test/android:content_java_test_support",
  301. "//third_party/android_support_test_runner:rules_java",
  302. "//third_party/android_support_test_runner:runner_java",
  303. "//third_party/androidx:androidx_core_core_java",
  304. "//third_party/androidx:androidx_test_runner_java",
  305. "//third_party/junit",
  306. "//third_party/mockito:mockito_java",
  307. ]
  308. annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ]
  309. }
  310. # See https://bugs.chromium.org/p/chromium/issues/detail?id=908819 for why we
  311. # can't put 'java' in the name here.
  312. generate_jni("gurl_j_test_jni_headers") {
  313. testonly = true
  314. sources =
  315. [ "android/javatests/src/org/chromium/url/GURLJavaTestHelper.java" ]
  316. }
  317. robolectric_library("gurl_junit_tests") {
  318. sources = [ "android/junit/src/org/chromium/url/ShadowGURLTest.java" ]
  319. deps = [
  320. ":gurl_java",
  321. ":gurl_junit_shadows",
  322. ":gurl_junit_test_support",
  323. "//base:base_java_test_support",
  324. "//base:base_junit_test_support",
  325. "//base/test:test_support_java",
  326. "//third_party/junit",
  327. ]
  328. }
  329. }