Print this page
Factor out add_target and make sure the *.p5m files get read.
Reviewed & tested by: Dan McDonald <danmcd@omniti.com>

Split Close
Expand all
Collapse all
          --- old/build/buildctl
          +++ new/build/buildctl
↓ open down ↓ 7 lines elided ↑ open up ↑
   8    8      batch_flag="-b"
   9    9  fi
  10   10  . ../lib/functions.sh
  11   11  
  12   12  [ "${1}" == "licenses" ] && AUDIT_LICENSE=1
  13   13  
  14   14  # targets maps any valid package name to its build script.
  15   15  declare -A targets
  16   16  # fulltargets maps full package names to their build script.
  17   17  declare -A fulltargets
       18 +
       19 +add_target() {
       20 +        local pkg=$1
       21 +        local build=$2
       22 +        [[ -n ${fulltargets[$pkg]} ]] && \
       23 +            logerr "Target $pkg specified by ${fulltargets[$pkg]} and $build."
       24 +        fulltargets+=([$pkg]=$build)
       25 +
       26 +        #
       27 +        # Repeatedly strip off leading components to generate all valid
       28 +        # names for this package. If more than one package has the same
       29 +        # abbreviated name, the first one wins.
       30 +        #
       31 +        [[ -n ${targets[$pkg]} ]] || targets+=([$pkg]=$build)
       32 +        while [[ $pkg =~ '/' ]]; do
       33 +                pkg=${pkg#*/}
       34 +                [[ -n ${targets[$pkg]} ]] || targets+=([$pkg]=$build)
       35 +        done
       36 +}
       37 +
  18   38  declare -A licenses
  19   39  TCNT=0
  20   40  for build in */build*.sh
  21   41  do
  22   42      for PKG in $(grep -v '##IGNORE##' $build | sed -e 's/^ +//' -e 's/ +#.+//' -e 's/=/ /g' -e 's/^.+make_package/make_package/g' | awk '{if($1=="PKG"){PKG=$2; print $2;} if($1=="make_package"){print PKG"="$2;}}')
  23   43      do
  24   44          if [ -n "`echo ${PKG} | grep '.='`" ] ; then
  25   45              [ -z "${AUDIT_LICENSE}" ] && continue
  26   46              MOG=`echo ${PKG} | sed -e 's/^.*=//'`
  27   47              PKG=`echo ${PKG} | sed -e 's/=.*$//'`
  28   48              LOCALMOG=`echo ${build} | sed -e 's:/.*$:/local.mog:'`
  29   49              [ -f $MOG ] || MOG=""
  30   50              [ -f $LOCALMOG ] || LOCALMOG=""
  31   51              LICENSE=`nawk -F "[ =]" '/"/{gsub("\"", "")} /^license/ {print $3;}' $MOG $LOCALMOG /dev/null | xargs`
  32   52              licenses+=([$PKG]=$LICENSE)
  33   53              TCNT=$(($TCNT + 1))
  34   54              print -f "."
  35   55          else
  36      -            targets+=([$PKG]=$build)
  37      -            fulltargets+=([$PKG]=$build)
  38      -            #
  39      -            # Repeatedly strip off leading components to generate all valid
  40      -            # names for this package.
  41      -            #
  42      -            while [[ $PKG =~ '/' ]]; do
  43      -                PKG=${PKG#*/}
  44      -                targets+=([$PKG]=$build)
  45      -            done
       56 +                add_target $PKG $build
  46   57          fi
  47   58      done
  48   59  done
  49   60  [ -n "${AUDIT_LICENSE}" ] && echo
  50   61  
  51   62  for manifest in */*.p5m
  52   63  do
  53   64      for PKG in $(awk '/^set name=pkg.fmri/ {print $3;}' $manifest | sed -e 's/value=//' -e 's/.*\/\/[^\/]*\///g' -e 's/@.*//')
  54   65      do
  55      -        targets+=([$PKG]=$manifest)
       66 +        add_target $PKG $manifest
  56   67      done
  57   68  done
  58   69  
  59   70  usage() {
  60   71      echo $0
  61   72      echo "    list [grep pattern]"
  62   73      echo "    licenses"
  63   74      echo "    build <pkg> | all"
  64   75      exit
  65   76  }
↓ open down ↓ 134 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX