1 #!/bin/bash 2 3 #TODO(b/35570956): Do with Soong instead. 4 5 #Note: see do_makefiles_update below. 6 7 function package_root_to_package() { 8 echo $1 | cut -f1 -d: 9 } 10 11 function package_root_to_root() { 12 echo $1 | cut -f2 -d: 13 } 14 15 ## 16 # Makes sure the appropriate directories are visible. 17 # Usage: check_dirs root_or_cwd [package:root ...] 18 function check_dirs() { 19 local root_or_cwd=$1 20 shift 1 21 22 for package_root in "$@"; do 23 dir=$(package_root_to_root $package_root) 24 if [ ! -d $root_or_cwd$dir ] ; then 25 echo "Where is $dir?"; 26 return 1; 27 fi 28 done 29 } 30 31 ## 32 # Gets all packages in a directory. 33 # Usage: get_packages package root 34 function get_packages() { 35 local current_dir=$1 36 local current_package=$2 37 pushd $current_dir > /dev/null; 38 find . -type f -name \*.hal -exec dirname {} \; | sort -u | \ 39 cut -c3- | \ 40 awk -F'/' \ 41 '{printf("'$current_package'"); for(i=1;i<NF;i++){printf(".%s", $i);}; printf("@%s\n", $NF);}'; 42 popd > /dev/null; 43 } 44 45 ## 46 # Package roots to arguments. 47 # Usage: get_root_arguments [package:root ...] 48 function get_root_arguments() { 49 for package_root in "$@"; do 50 echo "-r $package_root" 51 done 52 } 53 54 ## 55 # Returns directory path for a package 56 # Usage: get_package_dir package_root_dir package_prefix package 57 function get_package_dir() { 58 local package_dir=`echo $3 | cut -f1 -d@ | sed "s/$2\.//" | sed "s/\./\//g"` 59 local package_version=`echo $3 | cut -f2 -d@` 60 echo $1/$package_dir/$package_version 61 } 62 63 ## 64 # Helps manage the package root of a HAL directory. 65 # Should be called from the android root directory. 66 # 67 # Usage: do_makefiles_update [-O owner-name] [package:root ...] 68 # Where the first package root is the current one. 69 # 70 function do_makefiles_update() { 71 local owner= 72 if [[ "$1" = "-O" ]]; then 73 owner="$2" 74 shift 2 75 fi 76 77 local root_or_cwd=${ANDROID_BUILD_TOP%%/}${ANDROID_BUILD_TOP:+/} 78 79 local current_package=$(package_root_to_package $1) 80 local current_dir=$root_or_cwd$(package_root_to_root $1) 81 82 echo "Updating makefiles for $current_package in $current_dir." 83 84 check_dirs "$root_or_cwd" $@ || return 1 85 86 local packages=$(get_packages $current_dir $current_package) || return 1 87 local root_arguments=$(get_root_arguments $@) || return 1 88 89 for p in $packages; do 90 echo "Updating $p"; 91 hidl-gen -O "$owner" -Landroidbp $root_arguments $p; 92 rc=$?; if [[ $rc != 0 ]]; then return $rc; fi 93 done 94 } 95