1d9f0492fSopenharmony_ci# Copyright (c) 2021 Huawei Device Co., Ltd. 2d9f0492fSopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License"); 3d9f0492fSopenharmony_ci# you may not use this file except in compliance with the License. 4d9f0492fSopenharmony_ci# You may obtain a copy of the License at 5d9f0492fSopenharmony_ci# 6d9f0492fSopenharmony_ci# http://www.apache.org/licenses/LICENSE-2.0 7d9f0492fSopenharmony_ci# 8d9f0492fSopenharmony_ci# Unless required by applicable law or agreed to in writing, software 9d9f0492fSopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS, 10d9f0492fSopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11d9f0492fSopenharmony_ci# See the License for the specific language governing permissions and 12d9f0492fSopenharmony_ci# limitations under the License. 13d9f0492fSopenharmony_ci 14d9f0492fSopenharmony_ciimport("//build/config/python.gni") 15d9f0492fSopenharmony_ciimport("//build/templates/common/copy.gni") 16d9f0492fSopenharmony_ci 17d9f0492fSopenharmony_ci# Append something (files or lines) to a file and install it. 18d9f0492fSopenharmony_ci# 19d9f0492fSopenharmony_ci# Variables: 20d9f0492fSopenharmony_ci# source: file to be appended (Required) 21d9f0492fSopenharmony_ci# deps: some targets deps on (Optional) 22d9f0492fSopenharmony_ci# output: the final install file name (Optional); 23d9f0492fSopenharmony_ci# If not set, it will install with the source file name 24d9f0492fSopenharmony_ci# files: files to be appended to the end of source file (Optional) 25d9f0492fSopenharmony_ci# lines: lines of strings to be appended to the end of souce file (Optional) 26d9f0492fSopenharmony_ci# 27d9f0492fSopenharmony_ci# Example: 28d9f0492fSopenharmony_ci# ohos_file_appender("cust_passwd") { 29d9f0492fSopenharmony_ci# source = "//base/startup/init/services/etc/passwd" 30d9f0492fSopenharmony_ci# deps = [ "//base/startup/init/services/etc:passwd" ] 31d9f0492fSopenharmony_ci# files = [ "cust_passwd", "passwd2" ] 32d9f0492fSopenharmony_ci# lines = [ "tses::1222:1222:/bin/false", "tses2::1223:1223:/bin/false" ] 33d9f0492fSopenharmony_ci# output = "passwd" 34d9f0492fSopenharmony_ci# } 35d9f0492fSopenharmony_ci# It will append files and lines to source passwd file after deps targets 36d9f0492fSopenharmony_ci# 37d9f0492fSopenharmony_citemplate("ohos_file_appender") { 38d9f0492fSopenharmony_ci assert(defined(invoker.source), "source full target name must be defined.") 39d9f0492fSopenharmony_ci 40d9f0492fSopenharmony_ci _file_appender_target = "${target_name}_appended" 41d9f0492fSopenharmony_ci 42d9f0492fSopenharmony_ci if (defined(invoker.output)) { 43d9f0492fSopenharmony_ci _final_install_name = get_path_info(invoker.output, "file") 44d9f0492fSopenharmony_ci } else { 45d9f0492fSopenharmony_ci _final_install_name = get_path_info(invoker.source, "file") 46d9f0492fSopenharmony_ci } 47d9f0492fSopenharmony_ci 48d9f0492fSopenharmony_ci _appended_file = 49d9f0492fSopenharmony_ci target_gen_dir + "/${target_name}.appended/" + _final_install_name 50d9f0492fSopenharmony_ci 51d9f0492fSopenharmony_ci action_with_pydeps(_file_appender_target) { 52d9f0492fSopenharmony_ci script = "//base/startup/init/services/etc/appender/file_appender.py" 53d9f0492fSopenharmony_ci depfile = "${target_gen_dir}/${target_name}.d" 54d9f0492fSopenharmony_ci if (defined(invoker.deps)) { 55d9f0492fSopenharmony_ci deps = invoker.deps 56d9f0492fSopenharmony_ci } else { 57d9f0492fSopenharmony_ci deps = [] 58d9f0492fSopenharmony_ci } 59d9f0492fSopenharmony_ci args = [ 60d9f0492fSopenharmony_ci "--output", 61d9f0492fSopenharmony_ci rebase_path(_appended_file, root_build_dir), 62d9f0492fSopenharmony_ci "--source-file", 63d9f0492fSopenharmony_ci rebase_path(invoker.source, root_build_dir), 64d9f0492fSopenharmony_ci "--depfile", 65d9f0492fSopenharmony_ci rebase_path(depfile, root_build_dir), 66d9f0492fSopenharmony_ci ] 67d9f0492fSopenharmony_ci if (defined(invoker.files)) { 68d9f0492fSopenharmony_ci foreach(file, invoker.files) { 69d9f0492fSopenharmony_ci args += [ 70d9f0492fSopenharmony_ci "--append-file", 71d9f0492fSopenharmony_ci rebase_path(file, root_build_dir), 72d9f0492fSopenharmony_ci ] 73d9f0492fSopenharmony_ci } 74d9f0492fSopenharmony_ci } 75d9f0492fSopenharmony_ci if (defined(invoker.lines)) { 76d9f0492fSopenharmony_ci foreach(line, invoker.lines) { 77d9f0492fSopenharmony_ci args += [ 78d9f0492fSopenharmony_ci "--append-line", 79d9f0492fSopenharmony_ci line, 80d9f0492fSopenharmony_ci ] 81d9f0492fSopenharmony_ci } 82d9f0492fSopenharmony_ci } 83d9f0492fSopenharmony_ci inputs = [ invoker.source ] 84d9f0492fSopenharmony_ci outputs = [ _appended_file ] 85d9f0492fSopenharmony_ci } 86d9f0492fSopenharmony_ci 87d9f0492fSopenharmony_ci ohos_copy(target_name) { 88d9f0492fSopenharmony_ci forward_variables_from(invoker, 89d9f0492fSopenharmony_ci [ 90d9f0492fSopenharmony_ci "testonly", 91d9f0492fSopenharmony_ci "visibility", 92d9f0492fSopenharmony_ci 93d9f0492fSopenharmony_ci "deps", 94d9f0492fSopenharmony_ci "public_configs", 95d9f0492fSopenharmony_ci "subsystem_name", 96d9f0492fSopenharmony_ci "part_name", 97d9f0492fSopenharmony_ci 98d9f0492fSopenharmony_ci # For generate_module_info 99d9f0492fSopenharmony_ci "install_images", 100d9f0492fSopenharmony_ci "module_install_dir", 101d9f0492fSopenharmony_ci "relative_install_dir", 102d9f0492fSopenharmony_ci "symlink_target_name", 103d9f0492fSopenharmony_ci 104d9f0492fSopenharmony_ci # Open source license related 105d9f0492fSopenharmony_ci "license_file", 106d9f0492fSopenharmony_ci "license_as_sources", 107d9f0492fSopenharmony_ci ]) 108d9f0492fSopenharmony_ci if (defined(deps)) { 109d9f0492fSopenharmony_ci deps += [ ":$_file_appender_target" ] 110d9f0492fSopenharmony_ci } else { 111d9f0492fSopenharmony_ci deps = [ ":$_file_appender_target" ] 112d9f0492fSopenharmony_ci } 113d9f0492fSopenharmony_ci set_sources_assignment_filter([]) 114d9f0492fSopenharmony_ci sources = [ _appended_file ] 115d9f0492fSopenharmony_ci outputs = [ "${target_out_dir}/${target_name}/${_final_install_name}" ] 116d9f0492fSopenharmony_ci module_type = "etc" 117d9f0492fSopenharmony_ci install_enable = true 118d9f0492fSopenharmony_ci module_source_dir = "${target_out_dir}/${target_name}" 119d9f0492fSopenharmony_ci module_install_name = _final_install_name 120d9f0492fSopenharmony_ci if (defined(invoker.install_enable)) { 121d9f0492fSopenharmony_ci install_enable = invoker.install_enable 122d9f0492fSopenharmony_ci } 123d9f0492fSopenharmony_ci } 124d9f0492fSopenharmony_ci} 125