parse_cmake.sh 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. #!/bin/bash
  2. #
  3. # Common utilities used by tools for automating tagging and release
  4. #
  5. #We want any failures to be fatal
  6. set -e
  7. SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
  8. REMOTE=origin
  9. FORCE=
  10. DRYRUN=
  11. IGNORE=
  12. RETAG=
  13. VERBOSE=
  14. VERSIONFILE=version.cmake
  15. POSITIONAL=()
  16. while [[ $# -gt 0 ]]
  17. do
  18. key="$1"
  19. case $key in
  20. -f|--force)
  21. FORCE=-f
  22. shift
  23. ;;
  24. -i|--ignore)
  25. IGNORE=$1
  26. shift
  27. ;;
  28. -v|--verbose)
  29. VERBOSE=$1
  30. shift
  31. ;;
  32. --retag)
  33. RETAG=$1
  34. shift
  35. ;;
  36. -d|--dryrun)
  37. DRYRUN=$1
  38. shift
  39. ;;
  40. -r|--remote)
  41. if [ $# -eq 1 ] ; then
  42. echo "$1 option requires an argument"
  43. exit 2
  44. fi
  45. REMOTE="$2"
  46. shift
  47. shift
  48. ;;
  49. *) # unknown option
  50. POSITIONAL+=("$1") # save it in an array for later
  51. shift # past argument
  52. ;;
  53. esac
  54. done
  55. set -- "${POSITIONAL[@]}" # restore positional parameters
  56. if [ "$#" -ge 1 ] ; then
  57. VERSIONFILE=$1
  58. shift 1
  59. fi
  60. GIT_BRANCH=$(git rev-parse --symbolic-full-name --abbrev-ref HEAD)
  61. # brute-force way to read cmake values by "parsing" the line that sets them
  62. # note that this makes some assumptions about how the version.cmake is laid out!
  63. function extract()
  64. {
  65. local _file=$1
  66. local _name=$2
  67. local _search=$2
  68. local _result=`grep -i "set *( *$_search " $_file | sed -E "s/^.*$_search *\"?//" | sed -E "s/\"? *\)//"`
  69. eval "$_name='$_result'"
  70. }
  71. function parse_cmake()
  72. {
  73. if [ ! -f $VERSIONFILE ]; then
  74. echo "File $VERSIONFILE not found"
  75. exit 2
  76. fi
  77. extract $VERSIONFILE HPCC_NAME
  78. extract $VERSIONFILE HPCC_PROJECT
  79. extract $VERSIONFILE HPCC_MAJOR
  80. extract $VERSIONFILE HPCC_MINOR
  81. extract $VERSIONFILE HPCC_POINT
  82. extract $VERSIONFILE HPCC_MATURITY
  83. extract $VERSIONFILE HPCC_SEQUENCE
  84. if [ -z "$HPCC_NAME" ] ; then
  85. if [ "$HPCC_PROJECT" == "community" ] ; then
  86. HPCC_NAME="Community Edition"
  87. else
  88. HPCC_NAME="Enterprise Edition"
  89. fi
  90. fi
  91. }
  92. function doit()
  93. {
  94. if [ -n "$VERBOSE" ] || [ -n "$DRYRUN" ] ; then echo $1 ; fi
  95. if [ -z "$DRYRUN" ] ; then eval $1 ; fi
  96. }
  97. function doit2()
  98. {
  99. if [ -n "$VERBOSE" ] || [ -n "$DRYRUN" ] ; then echo $1 ; fi
  100. eval $1
  101. }
  102. function set_tag()
  103. {
  104. local _prefix=$1
  105. if [ "$HPCC_MATURITY" = "release" ]; then
  106. HPCC_SHORT_TAG=$HPCC_MAJOR.$HPCC_MINOR.$HPCC_POINT
  107. HPCC_LONG_TAG=${_prefix}_$HPCC_SHORT_TAG-$HPCC_SEQUENCE
  108. else
  109. HPCC_SHORT_TAG=$HPCC_MAJOR.$HPCC_MINOR.$HPCC_POINT-$HPCC_MATURITY$HPCC_SEQUENCE
  110. HPCC_LONG_TAG=${_prefix}_$HPCC_SHORT_TAG
  111. fi
  112. }
  113. function update_version_file()
  114. {
  115. # Update the version.cmake file
  116. local _new_maturity=$1
  117. local _new_point=$2
  118. local _new_sequence=$3
  119. local _new_minor=$4
  120. if [ -z "$_new_minor" ] ; then
  121. _new_minor=$HPCC_MINOR
  122. fi
  123. if [ -n "$VERBOSE" ] ; then
  124. echo sed -E \
  125. -e "\"s/HPCC_MINOR +$HPCC_MINOR *\)/HPCC_MINOR $_new_minor )/\"" \
  126. -e "\"s/HPCC_POINT +$HPCC_POINT *\)/HPCC_POINT $_new_point )/\"" \
  127. -e "\"s/HPCC_SEQUENCE +$HPCC_SEQUENCE *\)/HPCC_SEQUENCE $_new_sequence )/\"" \
  128. -e "\"s/HPCC_MATURITY +\"$HPCC_MATURITY\" *\)/HPCC_MATURITY \"$_new_maturity\" )/\"" \
  129. -i.bak $VERSIONFILE
  130. fi
  131. if [ -z "$DRYRUN" ] ; then
  132. sed -E \
  133. -e "s/HPCC_MINOR +$HPCC_MINOR *\)/HPCC_MINOR $_new_minor )/" \
  134. -e "s/HPCC_POINT +$HPCC_POINT *\)/HPCC_POINT $_new_point )/" \
  135. -e "s/HPCC_SEQUENCE +$HPCC_SEQUENCE *\)/HPCC_SEQUENCE $_new_sequence )/" \
  136. -e "s/HPCC_MATURITY +\"$HPCC_MATURITY\" *\)/HPCC_MATURITY \"$_new_maturity\" )/" \
  137. -i.bak $VERSIONFILE
  138. cat $VERSIONFILE
  139. else
  140. sed -E \
  141. -e "s/HPCC_MINOR +$HPCC_MINOR *\)/HPCC_MINOR $_new_minor )/" \
  142. -e "s/HPCC_POINT +$HPCC_POINT *\)/HPCC_POINT $_new_point )/" \
  143. -e "s/HPCC_SEQUENCE +$HPCC_SEQUENCE *\)/HPCC_SEQUENCE $_new_sequence )/" \
  144. -e "s/HPCC_MATURITY +\"$HPCC_MATURITY\" *\)/HPCC_MATURITY \"$_new_maturity\" )/" \
  145. $VERSIONFILE
  146. fi
  147. }
  148. function do_tag()
  149. {
  150. for f in ${HPCC_PROJECT}; do
  151. set_tag $f
  152. if [ "$FORCE" = "-f" ] ; then
  153. doit "git tag -d $HPCC_LONG_TAG"
  154. fi
  155. doit "git tag $HPCC_LONG_TAG"
  156. doit "git push $REMOTE $HPCC_LONG_TAG $FORCE"
  157. done
  158. }
  159. function sync_git()
  160. {
  161. doit "git fetch $REMOTE"
  162. doit "git merge --ff-only $REMOTE/$GIT_BRANCH"
  163. doit "git submodule update --init --recursive"
  164. }