github.com/mattdotmatt/gauge@v0.3.2-0.20160421115137-425a4cdccb62/build/mkrpm.sh (about)

     1  #!/bin/bash
     2  # Original source: https://github.com/gauge/gauge/blob/master/script/mkrpm
     3  
     4  # Usage:
     5  # ./build/mkrpm.sh [--rebuild]
     6  
     7  set -e
     8  
     9  function err () {
    10      echo "ERROR: $1"
    11      exit 1
    12  }
    13  
    14  ROOT=`pwd -P`
    15  DEPLOY_DIR="$ROOT/deploy"
    16  BUILD_DIR="$ROOT/build"
    17  OS=`uname -s | tr '[:upper:]' '[:lower:]'`
    18  ARCH="i386"
    19  NAME="gauge"
    20  FILE_EXT="zip"
    21  FILE_MODE=755
    22  RELEASE=all
    23  SPEC_FILE="$BUILD_DIR/packaging/rpm/gauge.spec"
    24  GAUGE_SETUP_FILE="$BUILD_DIR/packaging/gauge_setup"
    25  
    26  if [ "$OS" != "linux" ]; then
    27      err "This script can only be run on Linux systems"
    28  fi
    29  
    30  if [ "$1" == "--rebuild" ]; then
    31      REBUILD_NEEDED=1
    32  fi
    33  
    34  if [ "$2" == "--nightly" ]; then
    35      NIGHTLY="--nightly"
    36  fi
    37  
    38  function rebuild () {
    39      rm -rf "$DEPLOY_DIR"
    40      go run build/make.go --all-platforms --target-linux $NIGHTLY
    41      go run build/make.go --distro --all-platforms --target-linux $NIGHTLY
    42  }
    43  
    44  function check_and_rebuild() {
    45      if [ ! -d "$DEPLOY_DIR" ]; then
    46          echo -e "Building distro packages...\n"
    47          rebuild
    48      elif [ ! -z "$REBUILD_NEEDED" ]; then
    49          echo -e "Rebuild flag set. Rebuilding distro packages...\n"
    50          rebuild
    51      else
    52          echo -e "Reusing existing distro package. Use '--rebuild' to trigger a package rebuild...\n"
    53      fi
    54  }
    55  
    56  function set_arch() {
    57      if [ -z "$1" ]; then
    58          ARCHTYPE=$(ls $NAME*.$FILE_EXT | head -1 | rev | cut -d '-' -f 1 | rev | cut -d '.' -f 2)
    59      else
    60          ARCHTYPE=$(echo $1 | sed "s/^[a-z]*\///" | rev | cut -d '-' -f 1 | rev | cut -d '.' -f 2)
    61      fi
    62  
    63      if [ "$ARCHTYPE" == "x86_64" ]; then
    64          ARCH="x86_64"
    65      else
    66          ARCH="i386"
    67      fi
    68  }
    69  
    70  function set_version() {
    71      if [ -z "$1" ]; then
    72          VERSION=$(ls $NAME*$ARCHTYPE.$FILE_EXT | head -1 | sed "s/\.[^\.]*$//" | sed "s/$NAME-//" | sed "s/-[a-z]*\.[a-z0-9_]*$//")
    73      else
    74          VERSION=$(echo `basename $1` | sed "s/^[a-z]*\///" | sed "s/\.[^\.]*$//" | sed "s/$NAME-//" | sed "s/-[a-z]*\.[a-z0-9_]*$//")
    75      fi
    76      RPM_VERSION=$(echo $VERSION | sed "s/-//g")
    77  }
    78  
    79  function set_pkg_info() {
    80      PKG="$DEPLOY_DIR/$NAME-$VERSION-$OS.$ARCHTYPE.$FILE_EXT"
    81      PKG_SRC="$DEPLOY_DIR/$NAME-$VERSION-pkg"
    82  }
    83  
    84  function set_info() {
    85      set_arch "$1"
    86      set_version "$1"
    87      set_pkg_info
    88  }
    89  
    90  function clean_stage() {
    91      TARGET="$HOME/rpmbuild"
    92      rm -rf "$TARGET"
    93      RPM_PATH="$DEPLOY_DIR/"
    94  }
    95  
    96  function prep_rpm() {
    97      echo "Preparing .rpm data..."
    98      rpmdev-setuptree
    99  
   100      cp -r "$PKG_SRC/bin" "$TARGET/BUILD/"
   101      cp -r "$PKG_SRC/share" "$TARGET/BUILD/"
   102      cp "$GAUGE_SETUP_FILE" "$TARGET/BUILD/bin/gauge_setup"
   103  
   104      SPEC_DATA=`cat "$SPEC_FILE"`
   105      echo "$SPEC_DATA" | sed "s/<version>/$RPM_VERSION/g" | sed "s/<release>/$RELEASE/g" > "$TARGET/SPECS/gauge.spec"
   106      cat $TARGET/SPECS/gauge.spec
   107      # Copy generated LICENSE.md to /usr/share/doc/gauge/copyright
   108      mkdir -m $FILE_MODE -p "$TARGET/BUILD/usr/share/doc/$NAME"
   109      cp "$ROOT/LICENSE" "$TARGET/BUILD/usr/share/doc/$NAME/copyright"
   110  }
   111  
   112  function create_rpm() {
   113      echo "Generating .rpm..."
   114      rpmbuild --target $ARCH-redhat-linux -ba "$TARGET/SPECS/gauge.spec"
   115      mv $TARGET/RPMS/$ARCH/$NAME-$RPM_VERSION-$RELEASE.$ARCH.rpm "$RPM_PATH/"
   116  }
   117  
   118  function cleanup_temp() {
   119      rm -rf "$TARGET"
   120      rm -rf "$PKG_SRC"
   121  }
   122  
   123  function print_status() {
   124      echo -e "\nCreated .rpm package in: $RPM_PATH$NAME-$RPM_VERSION-$RELEASE.$ARCH.rpm"
   125      echo -e "  Version : $VERSION"
   126      echo -e "  Arch    : $ARCH\n"
   127  }
   128  
   129  function init() {
   130      check_and_rebuild
   131  
   132      for f in `ls $DEPLOY_DIR/$NAME-*$OS*.$FILE_EXT`; do
   133          clean_stage
   134  
   135          pushd $DEPLOY_DIR > /dev/null
   136          set_info "$f"
   137          unzip -q "$PKG" -d "$PKG_SRC"
   138          popd > /dev/null
   139  
   140          clean_stage
   141          prep_rpm
   142          create_rpm
   143          cleanup_temp
   144          print_status
   145      done
   146  }
   147  
   148  # Let the game begin
   149  init