From 1ee26cae73ce3099a12a5bb2945f6ffe5e342937 Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Wed, 20 Oct 2021 16:22:05 -0700 Subject: [PATCH] Convert .meta_lic files to textproto Make it easier to write tools against .meta_lic files and store complex data by writing them in textproto. Test: builds Change-Id: Ibbb6cfbb1bdddd3d938a86d563673a049d826d66 --- core/definitions.mk | 36 ++++- tools/build-license-metadata.sh | 236 -------------------------------- 2 files changed, 32 insertions(+), 240 deletions(-) delete mode 100755 tools/build-license-metadata.sh diff --git a/core/definitions.mk b/core/definitions.mk index 1ea59fd70a..38b572b409 100644 --- a/core/definitions.mk +++ b/core/definitions.mk @@ -608,10 +608,25 @@ $(_dir)/$(1).meta_lic: PRIVATE_INSTALL_MAP := $(_map) $(_dir)/$(1).meta_lic: PRIVATE_MODULE_TYPE := $(ALL_MODULES.$(1).MODULE_TYPE) $(_dir)/$(1).meta_lic: PRIVATE_MODULE_CLASS := $(ALL_MODULES.$(1).MODULE_CLASS) $(_dir)/$(1).meta_lic: PRIVATE_INSTALL_MAP := $(_map) -$(_dir)/$(1).meta_lic : $(foreach d,$(_deps),$(call word-colon,1,$(d))) $(foreach n,$(_notices),$(call word-colon,1,$(n)) )build/make/tools/build-license-metadata.sh +$(_dir)/$(1).meta_lic: $(BUILD_LICENSE_METADATA) +$(_dir)/$(1).meta_lic : $(foreach d,$(_deps),$(call word-colon,1,$(d))) $(foreach n,$(_notices),$(call word-colon,1,$(n)) ) rm -f $$@ mkdir -p $$(dir $$@) - build/make/tools/build-license-metadata.sh -k $$(PRIVATE_KINDS) -c $$(PRIVATE_CONDITIONS) -n $$(PRIVATE_NOTICES) -d $$(PRIVATE_NOTICE_DEPS) -s $$(PRIVATE_SOURCES) -m $$(PRIVATE_INSTALL_MAP) -t $$(PRIVATE_TARGETS) -i $$(PRIVATE_INSTALLED) $$(if $$(PRIVATE_IS_CONTAINER),-is_container) -p '$$(PRIVATE_PACKAGE_NAME)' -mt $$(PRIVATE_MODULE_TYPE) -mc $$(PRIVATE_MODULE_CLASS) -r $$(PRIVATE_PATH) -o $$@ + $(BUILD_LICENSE_METADATA) \ + $$(addprefix -mt ,$$(PRIVATE_MODULE_TYPE)) \ + $$(addprefix -mc ,$$(PRIVATE_MODULE_CLASS)) \ + $$(addprefix -k ,$$(PRIVATE_KINDS)) \ + $$(addprefix -c ,$$(PRIVATE_CONDITIONS)) \ + $$(addprefix -n ,$$(PRIVATE_NOTICES)) \ + $$(addprefix -d ,$$(PRIVATE_NOTICE_DEPS)) \ + $$(addprefix -s ,$$(PRIVATE_SOURCES)) \ + $$(addprefix -m ,$$(PRIVATE_INSTALL_MAP)) \ + $$(addprefix -t ,$$(PRIVATE_TARGETS)) \ + $$(addprefix -i ,$$(PRIVATE_INSTALLED)) \ + $$(if $$(PRIVATE_IS_CONTAINER),-is_container) \ + -p '$$(PRIVATE_PACKAGE_NAME)' \ + $$(addprefix -r ,$$(PRIVATE_PATH)) \ + -o $$@ $(strip $(eval _mifs := $(sort $(ALL_MODULES.$(1).MODULE_INSTALLED_FILENAMES)))) $(strip $(eval _infs := $(sort $(ALL_MODULES.$(1).INSTALLED_NOTICE_FILE)))) @@ -662,10 +677,23 @@ $(_dir)/$(_tgt).meta_lic: PRIVATE_PATH := $(_path) $(_dir)/$(_tgt).meta_lic: PRIVATE_IS_CONTAINER := $(ALL_NON_MODULES.$(_tgt).IS_CONTAINER) $(_dir)/$(_tgt).meta_lic: PRIVATE_PACKAGE_NAME := $(strip $(ALL_NON_MODULES.$(_tgt).LICENSE_PACKAGE_NAME)) $(_dir)/$(_tgt).meta_lic: PRIVATE_INSTALL_MAP := $(strip $(_install_map)) -$(_dir)/$(_tgt).meta_lic : $(foreach d,$(_deps),$(call word-colon,1,$(d))) $(foreach n,$(_notices),$(call word-colon,1,$(n)) )build/make/tools/build-license-metadata.sh +$(_dir)/$(_tgt).meta_lic: $(BUILD_LICENSE_METADATA) +$(_dir)/$(_tgt).meta_lic : $(foreach d,$(_deps),$(call word-colon,1,$(d))) $(foreach n,$(_notices),$(call word-colon,1,$(n)) ) rm -f $$@ mkdir -p $$(dir $$@) - build/make/tools/build-license-metadata.sh -k $$(PRIVATE_KINDS) -c $$(PRIVATE_CONDITIONS) -n $$(PRIVATE_NOTICES) -d $$(PRIVATE_NOTICE_DEPS) -s $$(PRIVATE_SOURCES) -m $$(PRIVATE_INSTALL_MAP) -t $$(PRIVATE_TARGETS) $$(if $$(PRIVATE_IS_CONTAINER),-is_container) -p '$$(PRIVATE_PACKAGE_NAME)' -mt raw -mc unknown -r $$(PRIVATE_PATH) -o $$@ + $(BUILD_LICENSE_METADATA) \ + -mt raw -mc unknown \ + $$(addprefix -k ,$$(PRIVATE_KINDS)) \ + $$(addprefix -c ,$$(PRIVATE_CONDITIONS)) \ + $$(addprefix -n ,$$(PRIVATE_NOTICES)) \ + $$(addprefix -d ,$$(PRIVATE_NOTICE_DEPS)) \ + $$(addprefix -s ,$$(PRIVATE_SOURCES)) \ + $$(addprefix -m ,$$(PRIVATE_INSTALL_MAP)) \ + $$(addprefix -t ,$$(PRIVATE_TARGETS)) \ + $$(if $$(PRIVATE_IS_CONTAINER),-is_container) \ + -p '$$(PRIVATE_PACKAGE_NAME)' \ + $$(addprefix -r ,$$(PRIVATE_PATH)) \ + -o $$@ endef diff --git a/tools/build-license-metadata.sh b/tools/build-license-metadata.sh deleted file mode 100755 index 5051c61fca..0000000000 --- a/tools/build-license-metadata.sh +++ /dev/null @@ -1,236 +0,0 @@ -#!/bin/sh - -set -u - -ME=$(basename $0) - -USAGE="Usage: ${ME} {options} - -Builds a license metadata specification and outputs it to stdout or {outfile}. - -The available options are: - --k kind... license kinds --c condition... license conditions --p package... license package name --n notice... license notice file --d dependency... license metadata file dependency --s dependency... source (input) dependency --t target... built targets --i target... installed targets --r root... root directory of project --m target:installed... map dependent targets to their installed names --mc module_class... module class --mt module_type... module type --is_container preserved dependent target name when given --o outfile output file -" - -# Global flag variables -license_kinds= -license_conditions= -license_package_name= -license_notice= -license_deps= -module_class= -module_type= -source_deps= -targets= -installed= -installmap= -is_container=false -ofile= -roots= - -# Global variables -depfiles=" " - - -# Exits with a message. -# -# When the exit status is 2, assumes a usage error and outputs the usage message -# to stderr before outputting the specific error message to stderr. -# -# Parameters: -# Optional numeric exit status (defaults to 2, i.e. a usage error.) -# Remaining args treated as an error message sent to stderr. -die() { - lstatus=2 - case "${1:-}" in *[^0-9]*) ;; *) lstatus="$1"; shift ;; esac - case "${lstatus}" in 2) echo "${USAGE}" >&2; echo >&2 ;; esac - if [ -n "$*" ]; then - echo -e "$*\n" >&2 - fi - exit $lstatus -} - - -# Sets the flag variables based on the command-line. -# -# invoke with: process_args "$@" -process_args() { - lcurr_flag= - while [ "$#" -gt '0' ]; do - case "${1}" in - -h) - echo "${USAGE}" - exit 0 - ;; - -k) - lcurr_flag=kind - ;; - -c) - lcurr_flag=condition - ;; - -p) - lcurr_flag=package - ;; - -n) - lcurr_flag=notice - ;; - -d) - lcurr_flag=dependency - ;; - -s) - lcurr_flag=source - ;; - -t) - lcurr_flag=target - ;; - -i) - lcurr_flag=install - ;; - -m) - lcurr_flag=installmap - ;; - -mc) - lcurr_flag=class - ;; - -mt) - lcurr_flag=type - ;; - -o) - lcurr_flag=ofile - ;; - -r) - lcurr_flag=root - ;; - -is_container) - lcurr_flag= - is_container=true - ;; - -*) - die "Unknown flag: \"${1}\"" - ;; - *) - case "${lcurr_flag}" in - kind) - license_kinds="${license_kinds}${license_kinds:+ }${1}" - ;; - condition) - license_conditions="${license_conditions}${license_conditions:+ }${1}" - ;; - package) - license_package_name="${license_package_name}${license_package_name:+ }${1}" - ;; - notice) - license_notice="${license_notice}${license_notice:+ }${1}" - ;; - dependency) - license_deps="${license_deps}${license_deps:+ }${1}" - ;; - source) - source_deps="${source_deps}${source_deps:+ }${1}" - ;; - target) - targets="${targets}${targets:+ }${1}" - ;; - install) - installed="${installed}${installed:+ }${1}" - ;; - installmap) - installmap="${installmap}${installmap:+ }${1}" - ;; - class) - module_class="${module_class}${module_class:+ }${1}" - ;; - type) - module_type="${module_type}${module_type:+ }${1}" - ;; - root) - root="${1}" - while [ -n "${root}" ] && ! [ "${root}" == '.' ] && \ - ! [ "${root}" == '/' ]; \ - do - if [ -d "${root}/.git" ]; then - roots="${roots}${roots:+ }${root}" - break - fi - root=$(dirname "${root}") - done - ;; - ofile) - if [ -n "${ofile}" ]; then - die "Output file -o appears twice as \"${ofile}\" and \"${1}\"" - fi - ofile="${1}" - ;; - *) - die "Must precede argument \"${1}\" with type flag." - ;; - esac - ;; - esac - shift - done -} - - -process_args "$@" - -if [ -n "${ofile}" ]; then - # truncate the output file before appending results - : >"${ofile}" -else - ofile=/dev/stdout -fi - -# spit out the license metadata file content -( - echo 'license_package_name: "'"${license_package_name}"'"' - for t in ${module_type}; do - echo 'module_type: "'"${t}"'"' - done - for c in ${module_class}; do - echo 'module_class: "'"${c}"'"' - done - for r in ${roots}; do - echo 'root: "'"${r}"'"' - done - for kind in ${license_kinds}; do - echo 'license_kind: "'"${kind}"'"' - done - for condition in ${license_conditions}; do - echo 'license_condition: "'"${condition}"'"' - done - for f in ${license_notice}; do - echo 'license_text: "'"${f}"'"' - done - echo "is_container: ${is_container}" - for t in ${targets}; do - echo 'built: "'"${t}"'"' - done - for i in ${installed}; do - echo 'installed: "'"${i}"'"' - done - for m in ${installmap}; do - echo 'install_map: "'"${m}"'"' - done - for s in ${source_deps}; do - echo 'source: "'"${s}"'"' - done -) >>"${ofile}" -depfiles=" $(echo $(echo ${license_deps} | tr ' ' '\n' | sort -u)) " -for dep in ${depfiles}; do - echo 'dep: "'"${dep}"'"' -done >>"${ofile}"