| # Copyright 2014 The Chromium Authors |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import("//build/apple/convert_plist.gni") |
| import("//build/config/chrome_build.gni") |
| import("//build/config/chromeos/ui_mode.gni") |
| import("//build/config/features.gni") |
| import("//build/timestamp.gni") |
| import("//build/toolchain/toolchain.gni") |
| import("//components/policy/resources/policy_templates.gni") |
| import("//components/policy/tools/generate_policy_source.gni") |
| import("//third_party/libprotobuf-mutator/fuzzable_proto_library.gni") |
| import("//third_party/protobuf/proto_library.gni") |
| import("//tools/grit/grit_args.gni") |
| import("//tools/grit/grit_rule.gni") |
| |
| # To generate policy documentation for local use, set this to true for the |
| # links between pages and subpages to work. |
| gen_policy_templates_local = false |
| |
| # To test policy generation for platforms different than your OS, override and |
| # enable these flags (but don't check that in!). |
| gen_policy_templates_common = true |
| gen_policy_templates_win = is_win |
| gen_policy_templates_linux = is_linux || is_chromeos |
| gen_policy_templates_android = is_android |
| gen_policy_templates_mac = is_mac |
| gen_policy_templates_ios = is_ios |
| |
| # The zip file is grabbed from the Windows build right now. |
| gen_policy_templates_zip = is_win |
| |
| # Make sure all dependencies of the zip are built. |
| if (gen_policy_templates_zip) { |
| gen_policy_templates_common = true |
| gen_policy_templates_win = true |
| } |
| |
| if (is_mac) { |
| import("//build/util/branding.gni") |
| } else if (gen_policy_templates_mac) { |
| chrome_mac_bundle_id = "DUMMY_MAC_BUNDLE_ID" |
| } |
| |
| if (is_component_build) { |
| # External code should depend on either //components/policy/core/browser or |
| # .../common depending on what code it needs. |
| component("policy") { |
| output_name = "policy_component" |
| visibility = [ |
| "//components/policy/core/browser", |
| "//components/policy/core/common", |
| ] |
| public_deps = [ |
| "//build:branding_buildflags", |
| "//components/policy/core/browser:internal", |
| "//components/policy/core/common:internal", |
| "//components/policy/core/common:policy_namespace_internal", |
| ] |
| } |
| } |
| |
| # Used by targets that compile into the implementation. |
| config("component_implementation") { |
| defines = [ "POLICY_COMPONENT_IMPLEMENTATION" ] |
| } |
| |
| # This protobuf is equivalent to chrome_settings.proto but shares messages |
| # for policies of the same type, so that less classes have to be generated |
| # and compiled. |
| cloud_policy_proto_path = "$target_gen_dir/proto/cloud_policy.proto" |
| |
| # This is the "full" protobuf, which defines one protobuf message per |
| # policy. It is also the format currently used by the server. |
| chrome_settings_proto_path = "$target_gen_dir/proto/chrome_settings.proto" |
| |
| constants_header_path = "$target_gen_dir/policy_constants.h" |
| constants_source_path = "$target_gen_dir/policy_constants.cc" |
| risk_tag_header_path = "$target_gen_dir/risk_tag.h" |
| |
| policy_templates_deps_file = "$policy_templates_base_dir/policy_templates.d" |
| policy_templates_generated_json_path = |
| "$policy_templates_base_dir/policy_templates.json" |
| |
| generate_policy_source("policy_code_generate") { |
| chunking = true |
| } |
| |
| policy_templates_grd_file = "resources/policy_templates.build.grd" |
| |
| # Generates a single policy_templates.json with a real JSON format. |
| action("generate_policy_templates") { |
| script = "resources/policy_templates.py" |
| depfile = policy_templates_deps_file |
| outputs = [ |
| "$policy_templates_generated_json_path", |
| "$policy_templates_deps_file", |
| ] |
| args = [ |
| "--dest", |
| rebase_path(policy_templates_generated_json_path, root_build_dir), |
| "--depfile", |
| rebase_path(policy_templates_deps_file, root_build_dir), |
| ] |
| } |
| |
| # Translates policy_templates.json into various languages. |
| grit("translate_policy_templates") { |
| deps = [ ":generate_policy_templates" ] |
| source = policy_templates_grd_file |
| inputs = [ policy_templates_generated_json_path ] |
| output_dir = "$root_gen_dir/chrome" |
| outputs = policy_templates_translation_outputs |
| grit_flags = [ |
| "-E", |
| "root_gen_dir=" + rebase_path(root_gen_dir, root_build_dir), |
| "-E", |
| "root_src_dir=" + rebase_path("//", root_build_dir), |
| ] |
| } |
| |
| # Generate the various templates and docs (admx, doc, json, etc.) |
| action("policy_templates") { |
| script = "tools/template_writers/template_formatter.py" |
| chrome_version_abspath = "//chrome/VERSION" |
| chrome_version_path = rebase_path(chrome_version_abspath, root_build_dir) |
| deps = [ ":translate_policy_templates_grit" ] |
| inputs = [ chrome_version_abspath ] + policy_templates_translation_outputs |
| outputs = [] |
| args = [ |
| "--translations", |
| rebase_path(policy_templates_translation_json_path, root_build_dir), |
| "--languages", |
| policy_templates_languages_str, |
| "--version_path", |
| chrome_version_path, |
| ] + grit_args |
| |
| if (gen_policy_templates_local) { |
| args += [ "--local" ] |
| } |
| if (gen_policy_templates_common) { |
| outputs += policy_templates_common_outputs |
| args += [ |
| "--doc", |
| rebase_path(policy_templates_doc_path, root_build_dir), |
| "--doc_atomic_groups", |
| rebase_path(policy_templates_doc_atomic_groups_path, root_build_dir), |
| ] |
| } |
| if (gen_policy_templates_android) { |
| outputs += policy_templates_android_outputs |
| args += [ |
| "--android_policy", |
| rebase_path(policy_templates_android_policy_path, root_build_dir), |
| ] |
| } |
| if (gen_policy_templates_linux) { |
| outputs += policy_templates_linux_outputs |
| args += [ |
| "--json", |
| rebase_path(policy_templates_json_path, root_build_dir), |
| ] |
| } |
| if (gen_policy_templates_mac) { |
| outputs += policy_templates_mac_outputs |
| args += [ |
| "--plist", |
| rebase_path(policy_templates_plist_path, root_build_dir), |
| "--plist_strings", |
| rebase_path(policy_templates_plist_strings_path, root_build_dir), |
| "--jamf", |
| rebase_path(policy_templates_jamf_path, root_build_dir), |
| "-D", |
| "mac_bundle_id=$chrome_mac_bundle_id", |
| ] |
| } |
| if (gen_policy_templates_win) { |
| outputs += policy_templates_win_outputs |
| args += [ |
| "--reg", |
| rebase_path(policy_templates_win_reg_path, root_build_dir), |
| "--adm", |
| rebase_path(policy_templates_win_adm_path, root_build_dir), |
| "--adml", |
| rebase_path(policy_templates_win_adml_path, root_build_dir), |
| "--admx", |
| rebase_path(policy_templates_win_admx_path, root_build_dir), |
| ] |
| if (is_chrome_branded) { |
| # Create google.admx and google.adml files that define a common 'Google' |
| # category used for Chrome, Chrome OS and possibly external tools, see |
| # crbug.com/665400. |
| outputs += policy_templates_win_google_outputs |
| args += [ |
| "--google_adml", |
| rebase_path(policy_templates_win_google_adml_path, root_build_dir), |
| "--google_admx", |
| rebase_path(policy_templates_win_google_admx_path, root_build_dir), |
| ] |
| } |
| } |
| if (gen_policy_templates_ios) { |
| outputs += policy_templates_ios_outputs |
| args += [ |
| "--ios_app_config", |
| rebase_path(policy_templates_ios_app_config_path, root_build_dir), |
| ] |
| } |
| } |
| |
| # Run the proto compiler over the generated file and make it a component. |
| component("cloud_policy_proto_generated_compile") { |
| public_deps = [ ":cloud_policy_proto_generated_compile_proto" ] |
| } |
| proto_library("cloud_policy_proto_generated_compile_proto") { |
| visibility = [ ":cloud_policy_proto_generated_compile" ] |
| |
| sources = [ cloud_policy_proto_path ] |
| |
| import_dirs = [ "//components/policy/proto" ] |
| proto_out_dir = "components/policy/proto" |
| cc_generator_options = "dllexport_decl=POLICY_PROTO_EXPORT:" |
| cc_include = "components/policy/proto/policy_proto_export.h" |
| component_build_force_source_set = true |
| defines = [ "POLICY_PROTO_COMPILATION" ] |
| |
| link_deps = |
| [ "//components/policy/proto:policy_common_definitions_compile_proto" ] |
| proto_deps = [ ":policy_code_generate" ] |
| } |
| |
| # This target builds the "full" protobuf, used for tests only. |
| component("chrome_settings_proto_generated_compile") { |
| testonly = true |
| public_deps = [ ":chrome_settings_proto_generated_compile_proto" ] |
| } |
| proto_library("chrome_settings_proto_generated_compile_proto") { |
| testonly = true |
| visibility = [ ":chrome_settings_proto_generated_compile" ] |
| |
| sources = [ chrome_settings_proto_path ] |
| |
| import_dirs = [ "//components/policy/proto" ] |
| proto_out_dir = "components/policy/proto" |
| cc_generator_options = "dllexport_decl=POLICY_CHROME_SETTINGS_PROTO_EXPORT:" |
| cc_include = "components/policy/proto/policy_proto_export.h" |
| component_build_force_source_set = true |
| defines = [ "POLICY_CHROME_SETTINGS_PROTO_COMPILATION" ] |
| |
| link_deps = |
| [ "//components/policy/proto:policy_common_definitions_compile_proto" ] |
| proto_deps = [ ":policy_code_generate" ] |
| } |
| |
| static_library("generated") { |
| sources = [ |
| constants_header_path, |
| constants_source_path, |
| risk_tag_header_path, |
| ] |
| |
| defines = [ "POLICY_COMPONENT_IMPLEMENTATION" ] |
| public_deps = [ |
| ":cloud_policy_proto_generated_compile", |
| ":policy_code_generate", |
| "//base", |
| "//components/policy/core/common:common_constants", |
| "//components/policy/proto:policy_common_definitions_compile_proto", |
| "//third_party/protobuf:protobuf_lite", |
| ] |
| deps = [ "//build:branding_buildflags" ] |
| } |
| |
| if (gen_policy_templates_android && is_android) { |
| import("//build/config/android/rules.gni") |
| |
| _generated_resources_dir = "$root_gen_dir/chrome/app/policy/android" |
| |
| copy("app_restrictions_resources_copy") { |
| sources = [ "$target_gen_dir/app_restrictions.xml" ] |
| outputs = [ "$_generated_resources_dir/xml-v21/app_restrictions.xml" ] |
| deps = [ |
| ":policy_code_generate", |
| ":policy_templates", |
| ] |
| } |
| |
| android_resources("app_restrictions_resources") { |
| sources = policy_templates_android_outputs + |
| [ "$_generated_resources_dir/xml-v21/app_restrictions.xml" ] |
| deps = [ |
| ":app_restrictions_resources_copy", |
| ":policy_templates", |
| ] |
| } |
| } else if (gen_policy_templates_mac && is_mac) { |
| convert_plist("convert_mcx_plist") { |
| source = "$policy_templates_base_dir/mac/app-Manifest.plist" |
| output = "$target_gen_dir/$chrome_mac_bundle_id.manifest" |
| format = "xml1" |
| |
| deps = [ ":policy_templates" ] |
| } |
| |
| bundle_data("manifest_bundle_data") { |
| sources = get_target_outputs(":convert_mcx_plist") |
| outputs = [ "{{bundle_resources_dir}}/{{source_file_part}}" ] |
| public_deps = [ ":convert_mcx_plist" ] |
| } |
| |
| # The reason we are not enumerating all the locales is that |
| # the translations would eat up 3.5MB disk space in the |
| # application bundle. |
| bundle_data("manifest_strings_bundle_data") { |
| sources = [ |
| "$policy_templates_base_dir/mac/strings/en.lproj/Localizable.strings", |
| ] |
| outputs = [ "{{bundle_resources_dir}}/en.lproj/{{source_file_part}}" ] |
| public_deps = [ ":policy_templates" ] |
| } |
| |
| create_bundle("chrome_manifest_bundle") { |
| bundle_root_dir = "$root_out_dir/$chrome_mac_bundle_id.manifest" |
| bundle_contents_dir = "$bundle_root_dir/Contents" |
| bundle_resources_dir = "$bundle_contents_dir/Resources" |
| |
| deps = [ |
| ":manifest_bundle_data", |
| ":manifest_strings_bundle_data", |
| ] |
| } |
| } |
| |
| if (gen_policy_templates_zip) { |
| version_path = "$policy_templates_base_dir/VERSION" |
| |
| copy("add_version") { |
| sources = [ "//chrome/VERSION" ] |
| outputs = [ version_path ] |
| } |
| |
| action("pack_policy_templates") { |
| output_zip_file = "$root_out_dir/policy_templates.zip" |
| script = "tools/make_policy_zip.py" |
| inputs = [ version_path ] + policy_templates_win_outputs + |
| policy_templates_common_outputs |
| outputs = [ output_zip_file ] |
| args = [ |
| "--output", |
| rebase_path(output_zip_file, root_build_dir), |
| "--timestamp", |
| build_timestamp, |
| "--base_dir", |
| rebase_path(policy_templates_base_dir, root_build_dir), |
| "--languages", |
| policy_templates_languages_str, |
| "--add", |
| rebase_path(version_path, root_build_dir), |
| "--add", |
| rebase_path(policy_templates_doc_path, root_build_dir), |
| "--add", |
| rebase_path(policy_templates_doc_atomic_groups_path, root_build_dir), |
| "--add", |
| rebase_path(policy_templates_win_reg_path, root_build_dir), |
| "--add", |
| rebase_path(policy_templates_win_adm_path, root_build_dir), |
| "--add", |
| rebase_path(policy_templates_win_adml_path, root_build_dir), |
| "--add", |
| rebase_path(policy_templates_win_admx_path, root_build_dir), |
| ] |
| if (is_chrome_branded) { |
| inputs += policy_templates_win_google_outputs |
| args += [ |
| "--add", |
| rebase_path(policy_templates_win_google_adml_path, root_build_dir), |
| "--add", |
| rebase_path(policy_templates_win_google_admx_path, root_build_dir), |
| ] |
| } |
| deps = [ |
| ":add_version", |
| ":policy_templates", |
| ] |
| } |
| } |