| Index: build/json_schema_api.gni
 | 
| diff --git a/build/json_schema_api.gni b/build/json_schema_api.gni
 | 
| index 68a9fdd57ab4bd116ff39c7255c994c64250e213..aa6365b948ee505484650961634ee9aee2c35055 100644
 | 
| --- a/build/json_schema_api.gni
 | 
| +++ b/build/json_schema_api.gni
 | 
| @@ -46,7 +46,10 @@
 | 
|  #   If any deps are specified they will be inherited by the static library
 | 
|  #   target.
 | 
|  #
 | 
| -# The static library target also inherits the visibility and output_name
 | 
| +# generate_static_library [optional, defaults to false]
 | 
| +#   Produces a static library instead of a source_set.
 | 
| +#
 | 
| +# The generated library target also inherits the visibility and output_name
 | 
|  # of its invoker.
 | 
|  
 | 
|  template("json_schema_api") {
 | 
| @@ -75,7 +78,6 @@ template("json_schema_api") {
 | 
|      visibility = target_visibility
 | 
|    }
 | 
|  
 | 
| -  sources = invoker.sources
 | 
|    root_namespace = invoker.root_namespace
 | 
|  
 | 
|    compiler_root = "//tools/json_schema_compiler"
 | 
| @@ -97,6 +99,7 @@ template("json_schema_api") {
 | 
|      schema_generator_name = target_name + "_schema_generator"
 | 
|      action_foreach(schema_generator_name) {
 | 
|        script = compiler_script
 | 
| +      sources = invoker.sources
 | 
|        inputs = compiler_sources
 | 
|        outputs = [
 | 
|          "$target_gen_dir/{{source_name_part}}.cc",
 | 
| @@ -127,7 +130,7 @@ template("json_schema_api") {
 | 
|      bundle_generator_schema_name = target_name + "_bundle_generator_schema"
 | 
|      action(bundle_generator_schema_name) {
 | 
|        script = compiler_script
 | 
| -      inputs = compiler_sources + sources + uncompiled_sources
 | 
| +      inputs = compiler_sources + invoker.sources + uncompiled_sources
 | 
|        outputs = [
 | 
|          "$target_gen_dir/generated_schemas.cc",
 | 
|          "$target_gen_dir/generated_schemas.h",
 | 
| @@ -138,7 +141,7 @@ template("json_schema_api") {
 | 
|                 "--namespace=$root_namespace",
 | 
|                 "--generator=cpp-bundle-schema",
 | 
|                 "--include-rules=$schema_include_rules",
 | 
| -             ] + rebase_path(sources, root_build_dir) +
 | 
| +             ] + rebase_path(invoker.sources, root_build_dir) +
 | 
|               rebase_path(uncompiled_sources, root_build_dir)
 | 
|      }
 | 
|    }
 | 
| @@ -157,7 +160,7 @@ template("json_schema_api") {
 | 
|          target_name + "_bundle_generator_registration"
 | 
|      action(bundle_generator_registration_name) {
 | 
|        script = compiler_script
 | 
| -      inputs = compiler_sources + sources + uncompiled_sources
 | 
| +      inputs = compiler_sources + invoker.sources + uncompiled_sources
 | 
|        outputs = [
 | 
|          "$root_gen_dir/$impl_dir/generated_api_registration.cc",
 | 
|          "$root_gen_dir/$impl_dir/generated_api_registration.h",
 | 
| @@ -169,43 +172,69 @@ template("json_schema_api") {
 | 
|                 "--generator=cpp-bundle-registration",
 | 
|                 "--impl-dir=" + rebase_path(impl_dir, "//"),
 | 
|                 "--include-rules=$schema_include_rules",
 | 
| -             ] + rebase_path(sources, root_build_dir) +
 | 
| +             ] + rebase_path(invoker.sources, root_build_dir) +
 | 
|               rebase_path(uncompiled_sources, root_build_dir)
 | 
|      }
 | 
|    }
 | 
|  
 | 
| -  source_set(target_name) {
 | 
| -    sources = []
 | 
| -    deps = []
 | 
| -    public_deps = []
 | 
| +  # Compute the contents of the library/source set.
 | 
| +  lib_sources = invoker.sources
 | 
| +  lib_deps = []
 | 
| +  lib_public_deps = []
 | 
| +  lib_extra_configs = []
 | 
|  
 | 
| -    if (schemas) {
 | 
| -      sources += get_target_outputs(":$schema_generator_name")
 | 
| -      public_deps += [ ":$schema_generator_name" ]
 | 
| -      deps += [ "//tools/json_schema_compiler:generated_api_util" ]
 | 
| -      configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]
 | 
| -    }
 | 
| +  if (schemas) {
 | 
| +    lib_sources += get_target_outputs(":$schema_generator_name")
 | 
| +    lib_public_deps += [ ":$schema_generator_name" ]
 | 
| +    lib_deps += [ "//tools/json_schema_compiler:generated_api_util" ]
 | 
| +    lib_extra_configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]
 | 
| +  }
 | 
|  
 | 
| -    if (bundle) {
 | 
| -      sources += get_target_outputs(":$bundle_generator_schema_name")
 | 
| -      deps += [ ":$bundle_generator_schema_name" ]
 | 
| -    }
 | 
| +  if (bundle) {
 | 
| +    lib_sources += get_target_outputs(":$bundle_generator_schema_name")
 | 
| +    lib_deps += [ ":$bundle_generator_schema_name" ]
 | 
| +  }
 | 
|  
 | 
| -    if (bundle_registration) {
 | 
| -      sources += get_target_outputs(":$bundle_generator_registration_name")
 | 
| -      deps += [ ":$bundle_generator_registration_name" ]
 | 
| -    }
 | 
| +  if (bundle_registration) {
 | 
| +    lib_sources += get_target_outputs(":$bundle_generator_registration_name")
 | 
| +    lib_deps += [ ":$bundle_generator_registration_name" ]
 | 
| +  }
 | 
|  
 | 
| -    if (defined(invoker.deps)) {
 | 
| -      deps += invoker.deps
 | 
| -    }
 | 
| -    public_configs = [ ":$generated_config_name" ]
 | 
| +  if (defined(invoker.deps)) {
 | 
| +    lib_deps += invoker.deps
 | 
| +  }
 | 
| +
 | 
| +  # Generate either a static library or a source set.
 | 
| +  if (defined(invoker.generate_static_library) &&
 | 
| +      invoker.generate_static_library) {
 | 
| +    static_library(target_name) {
 | 
| +      sources = lib_sources
 | 
| +      deps = lib_deps
 | 
| +      public_deps = lib_public_deps
 | 
| +      configs += lib_extra_configs
 | 
| +      public_configs = [ ":$generated_config_name" ]
 | 
|  
 | 
| -    if (defined(invoker.visibility)) {
 | 
| -      visibility = invoker.visibility
 | 
| +      if (defined(invoker.visibility)) {
 | 
| +        visibility = invoker.visibility
 | 
| +      }
 | 
| +      if (defined(invoker.output_name)) {
 | 
| +        output_name = invoker.output_name
 | 
| +      }
 | 
|      }
 | 
| -    if (defined(invoker.output_name)) {
 | 
| -      output_name = invoker.output_name
 | 
| +  } else {
 | 
| +    source_set(target_name) {
 | 
| +      sources = lib_sources
 | 
| +      deps = lib_deps
 | 
| +      public_deps = lib_public_deps
 | 
| +      configs += lib_extra_configs
 | 
| +      public_configs = [ ":$generated_config_name" ]
 | 
| +
 | 
| +      if (defined(invoker.visibility)) {
 | 
| +        visibility = invoker.visibility
 | 
| +      }
 | 
| +      if (defined(invoker.output_name)) {
 | 
| +        output_name = invoker.output_name
 | 
| +      }
 | 
|      }
 | 
|    }
 | 
|  }
 | 
| 
 |