Print this page
    
buildctl should honor opts and pass them to build.sh scripts
    
      
        | Split | 
	Close | 
      
      | Expand all | 
      | Collapse all | 
    
    
          --- old/build/buildctl
          +++ new/build/buildctl
   1    1  #!/usr/bin/bash
   2    2  
   3    3  NOBANNER=1
   4    4  batch_flag=""
        5 +lint_flag=""
   5    6  if [ "${BATCH}" = 1 ]; then
   6    7      echo "Enabling batch mode."
   7    8      batch_flag="-b"
   8    9  fi
   9   10  . ../lib/functions.sh
  10   11  
  11   12  [ "${1}" == "licenses" ] && AUDIT_LICENSE=1
  12   13  
  13   14  # targets maps any valid package name to its build script.
  14   15  declare -A targets
  15   16  # fulltargets maps full package names to their build script.
  16   17  declare -A fulltargets
  17   18  declare -A licenses
  18   19  TCNT=0
  19   20  for build in */build*.sh
  20   21  do
  21   22      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;}}')
  22   23      do
  23   24          if [ -n "`echo ${PKG} | grep '.='`" ] ; then
  24   25              [ -z "${AUDIT_LICENSE}" ] && continue
  25   26              MOG=`echo ${PKG} | sed -e 's/^.*=//'`
  26   27              PKG=`echo ${PKG} | sed -e 's/=.*$//'`
  27   28              LOCALMOG=`echo ${build} | sed -e 's:/.*$:/local.mog:'`
  28   29              [ -f $MOG ] || MOG=""
  29   30              [ -f $LOCALMOG ] || LOCALMOG=""
  30   31              LICENSE=`nawk -F "[ =]" '/"/{gsub("\"", "")} /^license/ {print $3;}' $MOG $LOCALMOG /dev/null | xargs`
  31   32              licenses+=([$PKG]=$LICENSE)
  32   33              TCNT=$(($TCNT + 1))
  33   34              print -f "."
  34   35          else
  35   36              targets+=([$PKG]=$build)
  36   37              fulltargets+=([$PKG]=$build)
  37   38              #
  38   39              # Repeatedly strip off leading components to generate all valid
  39   40              # names for this package.
  40   41              #
  41   42              while [[ $PKG =~ '/' ]]; do
  42   43                  PKG=${PKG#*/}
  43   44                  targets+=([$PKG]=$build)
  44   45              done
  45   46          fi
  46   47      done
  47   48  done
  48   49  [ -n "${AUDIT_LICENSE}" ] && echo
  49   50  
  50   51  for manifest in */*.p5m
  51   52  do
  52   53      for PKG in $(awk '/^set name=pkg.fmri/ {print $3;}' $manifest | sed -e 's/value=//' -e 's/.*\/\/[^\/]*\///g' -e 's/@.*//')
  53   54      do
  54   55          targets+=([$PKG]=$manifest)
  55   56      done
  56   57  done
  57   58  
  58   59  usage() {
  59   60      echo $0
  60   61      echo "    list [grep pattern]"
  61   62      echo "    licenses"
  62   63      echo "    build <pkg> | all"
  63   64      exit
  64   65  }
  65   66  
  66   67  bail() {
  67   68      echo $*
  68   69      exit
  69   70  }
  70   71  
  71   72  list() {
  72   73      PAT=${1-.}
  73   74      for target in "${!fulltargets[@]}"
  74   75      do
  75   76          if [[ "$PAT" = "." ]]; then
  76   77              echo " * $target"
  77   78          elif [[ -n $(echo "$target" | grep "$PAT") ]]; then
  78   79              echo " * $target"
  79   80          fi
  80   81      done | sort
  81   82  }
  82   83  
  83   84  build() {
  84   85      if [[ -z "${targets[$1]}" ]]; then
  85   86          bail "Unknown package: $1"
  86   87      fi
  87   88      DIR=$(dirname ${targets[$1]})
  88   89      pushd $DIR > /dev/null || bail "Cannot chdir to $DIR"
  89   90          PKGSRVR=$DEFAULT_PKGSRVR
  90   91          PKGPUBLISHER=$DEFAULT_PKGPUBLISHER
  91   92          PKGROOT=`pwd`/root
  92   93          if [[ -f environment ]]; then
  93   94              logmsg "--- Setting new environment"
  94   95              . environment
  95   96          fi
  96   97          SCRIPT=$(basename ${targets[$1]})
  97   98          if [[ -n $(echo $SCRIPT | grep ".p5m$") ]]; then
  98   99              echo "Found a manifest file. Preparing it for publishing."
  99  100              sed -e "s/@PKGPUBLISHER@/$PKGPUBLISHER/g; s/@RELVER@/$RELVER/g; s/@PVER@/$PVER/g;" < $SCRIPT > $SCRIPT.final
 100  101              if [[ -f root.tar.bz2 ]]; then
 101  102                  echo "File archive found. Extracting..."
 102  103                  bzip2 -dc root.tar.bz2 | tar xf - || \
 103  104                      bail "Failed to extract root.tar.bz2"
 104  105                  echo "Publishing from $SCRIPT.final"
 105  106                  pkgsend -s $PKGSRVR publish -d $PKGROOT $SCRIPT.final || \
 106  107                      bail "pkgsend failed"
 107  108                  rm -rf $PKGROOT
 108  109              # In case we just have a tree of files and not a tarball
 109  110              elif [[ -d $PKGROOT ]]; then
 110  111                  echo "Publishing from $SCRIPT.final"
  
    | 
      ↓ open down ↓ | 
    96 lines elided | 
    
      ↑ open up ↑ | 
  
 111  112                  pkgsend -s $PKGSRVR publish -d $PKGROOT $SCRIPT.final || \
 112  113                      bail "pkgsend failed"
 113  114              # Else we just have a manifest to import
 114  115              else
 115  116                  echo "Simple manifest to import... importing to $PKGSRVR"
 116  117                  pkgsend -s $PKGSRVR publish $SCRIPT.final || \
 117  118                      bail "pkgsend failed"
 118  119                  rm $SCRIPT.final
 119  120              fi
 120  121          else
 121      -            PATH=$PATH:. $SCRIPT -r $PKGSRVR $batch_flag || \
      122 +            PATH=$PATH:. $SCRIPT -r $PKGSRVR $batch_flag $lint_flag || \
 122  123                  logerr "Unable to run $SCRIPT"
 123  124          fi
 124  125      popd >/dev/null
 125  126  }
 126  127  
 127  128  licenses() {
 128  129      LCNT=0
 129  130      for target in "${!licenses[@]}"
 130  131      do
 131  132          if [[ -n "${licenses[$target]}" ]]; then
 132  133              echo " * $target     -> ${licenses[$target]}"
 133  134              LCNT=$(($LCNT + 1))
 134  135          fi
 135  136      done | sort
 136  137      if [ $LCNT -ne $TCNT ]; then
 137  138          echo
 138  139          echo "=== Packages missing license information ==="
 139  140          for target in "${!licenses[@]}"
 140  141          do
  
    | 
      ↓ open down ↓ | 
    9 lines elided | 
    
      ↑ open up ↑ | 
  
 141  142              if [[ -z "${licenses[$target]}" ]]; then
 142  143                  echo " * $target"
 143  144              fi
 144  145          done | sort
 145  146      fi
 146  147  }
 147  148  
 148  149  DEFAULT_PKGSRVR=$PKGSRVR
 149  150  DEFAULT_PKGPUBLISHER=$PKGPUBLISHER
 150  151  
      152 +# When we get here, honor any -l or -b flags from the buildctl command line,
      153 +# or even the environment.
      154 +
      155 +if [ "${BATCH}" = 1 ]; then
      156 +    logmsg "Enabling batch mode."
      157 +    batch_flag="-b"
      158 +fi
      159 +if [ "${SKIP_PKGLINT}" = 1 ]; then
      160 +    logmsg "Disabling pkglint."
      161 +    lint_flag="-l"
      162 +fi
      163 +
 151  164  case "$1" in
 152  165      list)
 153  166          list $2
 154  167          exit
 155  168          ;;
 156  169  
 157  170      licenses)
 158  171          licenses
 159  172          exit
 160  173          ;;
 161  174  
 162  175      build)
 163  176          shift
 164  177          tobuild=$*
 165  178          if [ -z "$tobuild" ] || [ "$tobuild" == "all" ]; then
 166  179                  batch_flag="-b"
 167  180                  for tgt in "${!fulltargets[@]}"; do
 168  181                          # Uncomment the echo line if you want to see a
 169  182                          # one-package-per-line status of what's building in
 170  183                          # /tmp/debug.<PID>.
 171  184                          # echo "Target = $tgt" >> /tmp/debug.$$
 172  185                          build $tgt
 173  186                  done
 174  187          else
 175  188                  for tgt in $tobuild; do
 176  189                          build $tgt
 177  190                  done
 178  191          fi
 179  192          exit
 180  193          ;;
 181  194  
 182  195      *)
 183  196          usage
 184  197          ;;
 185  198  esac
 186  199  
  
    | 
      ↓ open down ↓ | 
    26 lines elided | 
    
      ↑ open up ↑ | 
  
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX