parse_cmake.sh 4.2 KB

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