Index: third_party/mojo/src/mojo/public/dart/rules.gni |
diff --git a/third_party/mojo/src/mojo/public/dart/rules.gni b/third_party/mojo/src/mojo/public/dart/rules.gni |
index 930a8967711a7e6997ec86eacdda4d559b5d98c1..03b17b18f958a04b9f75f61fcdabc89f334beb93 100644 |
--- a/third_party/mojo/src/mojo/public/dart/rules.gni |
+++ b/third_party/mojo/src/mojo/public/dart/rules.gni |
@@ -2,11 +2,12 @@ |
# Use of this source code is governed by a BSD-style license that can be |
# found in the LICENSE file. |
-# Rules to generate python packaged applications for Dart |
+# Rules to generate zipped applications for Dart. |
+# Rules to generate dart-pkg and dart-pkg/packages. |
import("//build/module_args/mojo.gni") |
-template("dart_package") { |
+template("dartzip_package") { |
package_target_name = "$target_name" |
package_output = "$target_out_dir/$target_name.dartzip" |
@@ -16,6 +17,11 @@ template("dart_package") { |
target_dir = get_label_info(":$target_name", "dir") |
script = rebase_path("mojo/public/tools/gn/zip.py", ".", mojo_sdk_root) |
+ package_name = "$package_target_name" |
+ if (defined(invoker.package_name_override)) { |
+ package_name = invoker.package_name_override |
+ } |
+ |
# Get a list of the files in packages/ as inputs. |
list_packages_contents_script = |
rebase_path("mojo/public/tools/dart_list_packages_contents.py", |
@@ -26,6 +32,8 @@ template("dart_package") { |
[ |
"--target-directory", |
rebase_target_dir, |
+ "--package-name", |
+ package_name, |
], |
"list lines", |
[ target_dir + "/pubspec.lock" ]) |
@@ -36,7 +44,7 @@ template("dart_package") { |
outputs = [ |
output, |
] |
- rebase_base_dir = rebase_target_dir + "/packages" |
+ rebase_base_dir = rebase_target_dir |
rebase_inputs = rebase_path(inputs, root_build_dir) |
rebase_output = rebase_path(output, root_build_dir) |
args = [ |
@@ -48,7 +56,8 @@ template("dart_package") { |
} |
action("${package_target_name}_package") { |
- script = rebase_path("mojo/public/tools/gn/zip.py", ".", mojo_sdk_root) |
+ script = |
+ rebase_path("mojo/public/tools/dart_package.py", ".", mojo_sdk_root) |
inputs = invoker.sources |
@@ -86,6 +95,7 @@ template("dart_package") { |
rebase_inputs = rebase_path(inputs, root_build_dir) |
rebase_zip_inputs = rebase_path(zip_inputs, root_build_dir) |
rebase_output = rebase_path(output, root_build_dir) |
+ |
args = [ |
"--base-dir=$rebase_base_dir", |
"--inputs=$rebase_inputs", |
@@ -107,7 +117,7 @@ template("dart_package") { |
rebase_path("$target_gen_dir/${package_target_name}_analyze.stamp"), |
"--no-hints", |
"--url-mapping=dart:mojo.io,/" + |
- rebase_path("mojo/public/dart/io.dart", "/", mojo_sdk_root), |
+ rebase_path("mojo/public/dart/lib/io.dart", "/", mojo_sdk_root), |
] |
deps = [ |
@@ -131,8 +141,8 @@ template("dart_package") { |
# files should be named main.dart and contain a main function as the |
# entry point. Dependencies of dart_packaged_application targets should be |
# either mojom targets (and specified using the mojom_deps variable) or |
-# dart_package targets. |
-template("dart_packaged_application") { |
+# dartzip_package targets. |
+template("dartzip_packaged_application") { |
package_name = "${target_name}_package" |
package_output = "$target_out_dir/$package_name.dartzip" |
@@ -142,7 +152,7 @@ template("dart_packaged_application") { |
mojo_output = "$root_out_dir/" + target_name + ".mojo" |
} |
- dart_package(package_name) { |
+ dartzip_package(package_name) { |
sources = invoker.sources |
if (defined(invoker.deps)) { |
deps = invoker.deps |
@@ -198,3 +208,93 @@ template("dart_packaged_application") { |
] |
} |
} |
+ |
+# Creates a gen/dart-pkg/package_name directory containing symlinks to package |
+# sources. Also copies any mojom dependencies into lib/mojom. |
+# |
+# sources |
+# List of sources to include in the package. |
+# |
+# deps (optional) |
+# Note: this can only contain mojom targets. |
+# |
+# datadeps (optional) |
+# |
+# sdk_ext_directory (optional) |
+# Directory containing sdk-ext .dart sources. |
+# |
+template("dart_pkg") { |
+ pubspec_yaml_path = rebase_path("pubspec.yaml") |
+ dart_package_name_script = |
+ rebase_path("mojo/public/tools/dart_package_name.py", ".", mojo_sdk_root) |
+ package_name = exec_script(dart_package_name_script, |
+ [ |
+ "--pubspec", |
+ pubspec_yaml_path, |
+ ], |
+ "trim string", |
+ [ pubspec_yaml_path ]) |
+ |
+ pkg_directory = rebase_path("$root_gen_dir/dart-pkg") |
+ package_root = rebase_path("$root_gen_dir/dart-pkg/packages") |
+ stamp_file = "$root_gen_dir/dart-pkg/${package_name}.stamp" |
+ |
+ assert(defined(invoker.sources)) |
+ |
+ action(target_name) { |
+ deps = [] |
+ if (defined(invoker.deps)) { |
+ deps += invoker.deps |
+ } |
+ |
+ datadeps = [] |
+ if (defined(invoker.datadeps)) { |
+ datadeps += invoker.datadeps |
+ } |
+ |
+ list_mojoms_script = |
+ rebase_path("mojo/public/tools/dart_list_mojoms.py", ".", mojo_sdk_root) |
+ mojom_sources = [] |
+ foreach(d, deps) { |
+ root_prefix = rebase_path(".", "", mojo_sdk_root) |
+ source_directory = rebase_path(get_label_info(d, "dir")) |
+ mojom_sources += exec_script(list_mojoms_script, |
+ [ |
+ source_directory, |
+ root_prefix, |
+ ], |
+ "list lines") |
+ } |
+ |
+ sdk_ext_directory = [] |
+ if (defined(invoker.sdk_ext_directory)) { |
+ sdk_ext_directory += [ invoker.sdk_ext_directory ] |
+ } |
+ |
+ script = rebase_path("mojo/public/tools/dart_pkg.py", ".", mojo_sdk_root) |
+ outputs = [ |
+ stamp_file, |
+ ] |
+ |
+ inputs = [ |
+ list_mojoms_script, |
+ script, |
+ ] + rebase_path(invoker.sources) |
+ |
+ args = [ |
+ "--package-name", |
+ package_name, |
+ "--gen-directory", |
+ rebase_path("$root_gen_dir/dart-gen"), |
+ "--pkg-directory", |
+ pkg_directory, |
+ "--package-root", |
+ package_root, |
+ "--stamp-file", |
+ rebase_path(stamp_file), |
+ "--package-sources", |
+ ] + rebase_path(invoker.sources) + [ "--mojom-sources" ] + |
+ rebase_path(mojom_sources, "", mojo_sdk_root) + |
+ [ "--sdk-ext-directories" ] + rebase_path(sdk_ext_directory) |
+ } |
+} |