| # Copyright 2014 The Chromium OS Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| # $Header: $ |
| |
| inherit eutils |
| |
| # @ECLASS: osreleased.eclass |
| # @MAINTAINER: |
| # Chromium OS build team; |
| # @BUGREPORTS: |
| # Please report bugs via http://crbug.com/new (with label Build) |
| # @VCSURL: https://chromium.googlesource.com/chromiumos/overlays/chromiumos-overlay/+/master/eclass/@ECLASS@ |
| # @BLURB: Eclass for setting fields in /etc/os-release.d/ |
| |
| # @FUNCTION: do_osrelease_field |
| # @USAGE: <field_name> <field_value> |
| # @DESCRIPTION: |
| # Creates a file named /etc/os-release.d/<file_name> containing <field_value>. |
| # All files in os-release.d will be combined to create /etc/os-release when |
| # building the image. |
| do_osrelease_field() { |
| [[ $# -eq 2 && -n $1 && -n $2 ]] || die "Usage: ${FUNCNAME} <field_name> <field_value>" |
| local namevalidregex="[_A-Z]+" |
| local valuevalidregex="[^\n]+" |
| |
| local field_name="$1" |
| local field_value="$2" |
| |
| local filtered_name=$(echo "${field_name}" |\ |
| LC_ALL=C sed -r "s:${namevalidregex}::") |
| local number_lines=$(echo "${field_value}" | wc -l) |
| if [[ -n "${filtered_name}" ]]; then |
| die "Invalid input. Field name must satisfy: ${validregex}" |
| fi |
| if [[ "${number_lines}" != "1" ]]; then |
| die "Invalid input. Field value must not contain new lines." |
| fi |
| dodir /etc/os-release.d |
| |
| local field_file="${D}/etc/os-release.d/${field_name}" |
| [[ -e ${field_file} ]] && die "The field ${field_name} has already been set!" |
| echo "${field_value}" > "${field_file}" || \ |
| die "creating ${os_release} failed!" |
| } |
| |
| # @FUNCTION: dometricsproductid |
| # @USAGE: <product_id> |
| # @DESCRIPTION: |
| # Sets the GOOGLE_METRICS_PRODUCT_ID field in /etc/os-release.d/; |
| # GOOGLE_METRICS_PRODUCT_ID should be a positive integer, matching the product |
| # id defined by the UMA backend protobuf (chrome_user_metrics_extension.proto). |
| # This product id will be used by chromeos-base/metrics to report metrics when |
| # the metrics_uploader USE flag is set. |
| # @CODE |
| # dometricsproductid 12 |
| # @CODE |
| # will write 12 in /etc/os-release.d/GOOGLE_METRICS_PRODUCT_ID. |
| dometricsproductid() { |
| [[ $# -eq 1 && -n $1 ]] || die "Usage: ${FUNCNAME} <product_id>" |
| local product_id="$1" |
| [[ -z ${product_id//[0-9]} ]] || die "The product id must be a number." |
| |
| do_osrelease_field "GOOGLE_METRICS_PRODUCT_ID" "${product_id}" |
| } |