build.sh 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. #! /bin/sh
  2. # We want to use BASH, not whatever /bin/sh points to.
  3. if test -z "$BASH"; then
  4. PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
  5. bash="`which bash`"
  6. ${bash} $0 ${1+"$@"}
  7. exit 0
  8. fi
  9. PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:${HOME}/bin
  10. # Prefer gawk
  11. AWK="`which awk`"
  12. if test -z "${AWK}"; then
  13. AWK="`which gawk`"
  14. fi
  15. if [ -d .git ]; then
  16. BUILDTS=$(git log -1 --pretty=format:%ct HEAD)
  17. ver=$(git describe)
  18. else
  19. ver=$($AWK '/^VERSION/ {print $3}' Makefile.in)
  20. BUILDTS=`grep -m 1 "BUILDTS = " Makefile.in | ${AWK} '{print $3}'`
  21. fi
  22. # Convert timestamp into readable format
  23. rm -f ts > /dev/null 2>&1
  24. gcc -o ts src/timestamp.c > /dev/null 2>&1
  25. builddate=`./ts ${BUILDTS}`
  26. rm -f ts > /dev/null 2>&1
  27. #Display banner
  28. clear
  29. head -n 8 README
  30. echo -e "Version: ${ver}\nBuild: ${builddate}"
  31. echo ""
  32. usage()
  33. {
  34. echo "Usage: $0 [-bcCdnP] pack.cfg"
  35. echo
  36. echo " The options are as follows:"
  37. echo " -b Use bzip2 instead of gzip when packaging."
  38. echo " -c Cleans up old binaries/files before compile."
  39. echo " -C Preforms a distclean before making."
  40. echo " -d Builds a debug package."
  41. echo " -n Do not package the binaries."
  42. echo " -P For development (Don't compile/rm binaries)"
  43. }
  44. debug=0
  45. clean=0
  46. nopkg=0
  47. bzip=0
  48. pkg=0
  49. while getopts bCcdhnP: opt ; do
  50. case "$opt" in
  51. b) bzip=1 ;;
  52. c) clean=1 ;;
  53. C) clean=2 ;;
  54. d) debug=1 ;;
  55. h) usage; exit 0 ;;
  56. n) nopkg=1 ;;
  57. P) pkg=1 ;;
  58. *) usage; exit 1 ;;
  59. esac
  60. done
  61. shift $(($OPTIND - 1))
  62. pack=$1
  63. if ! [ -f $pack ]; then
  64. echo "Cannot read $pack" >&2
  65. exit 1
  66. fi
  67. if test -z "$1"; then
  68. usage
  69. exit 1
  70. fi
  71. PACKNAME=`grep "PACKNAME " ${pack} | $AWK '/PACKNAME/ {print $2}'`
  72. rm=1
  73. compile=1
  74. if [ $pkg = "1" ]; then
  75. rm=0
  76. compile=0
  77. fi
  78. if [ $debug = "1" ]; then
  79. dmake="d"
  80. d="-debug"
  81. else
  82. dmake=""
  83. d=""
  84. fi
  85. # Figure what bins we're making
  86. case `uname` in
  87. Linux) os=Linux;;
  88. FreeBSD) os=FreeBSD;;
  89. # FreeBSD) case `uname -r` in
  90. # 5*) os=FreeBSD5;;
  91. # 4*) os=FreeBSD4;;
  92. # 3*) os=FreeBSD3;;
  93. # esac;;
  94. OpenBSD) os=OpenBSD;;
  95. NetBSD) os=NetBSD;;
  96. SunOS) os=Solaris;;
  97. esac
  98. if test -z $os
  99. then
  100. echo "[!] Automated packaging disabled, `uname` isn't recognized"
  101. fi
  102. if [ $compile = "1" ]; then
  103. echo "[*] Building ${PACKNAME} for $os"
  104. MAKE="`which gmake`"
  105. if test -z "${MAKE}"; then
  106. MAKE="`which make`"
  107. fi
  108. if [ $clean = "2" ]; then
  109. if test -f Makefile; then
  110. echo "[*] DistCleaning old files..."
  111. ${MAKE} distclean > /dev/null
  112. fi
  113. fi
  114. # Run ./configure, then verify it's ok
  115. echo "[*] Configuring..."
  116. umask 077 >/dev/null
  117. ./configure --silent
  118. if [ $clean = "1" ]; then
  119. echo "[*] Cleaning up old binaries/files..."
  120. ${MAKE} clean > /dev/null
  121. fi
  122. fi
  123. _build()
  124. {
  125. if [ $compile = "1" ]; then
  126. echo "[*] Building ${dmake}${tb}..."
  127. ${MAKE} ${dmake}${tb}
  128. if ! test -f ${tb}; then
  129. echo "[!] ${dmake}${tb} build failed"
  130. exit 1
  131. fi
  132. fi
  133. if [ $nopkg = "0" -o $pkg = "1" ]; then
  134. echo "[*] Hashing and initializing settings in binary"
  135. cp ${tb} ${tb}.$os-$ver${d} > /dev/null 2>&1
  136. ./${tb}.$os-$ver${d} -q ${pack}
  137. rm=1
  138. elif [ $nopkg = "0" ]; then
  139. mv ${tb} ${tb}.$os-$ver${d} > /dev/null 2>&1
  140. fi
  141. }
  142. tb="wraith"
  143. _build
  144. if [ $bzip = "1" ]; then
  145. zip="j"
  146. ext="bz2"
  147. else
  148. zip="z"
  149. ext="gz"
  150. fi
  151. # Wrap it nicely up into an archive
  152. if [ $nopkg = "0" -o $pkg = "1" ]; then
  153. echo "[*] Packaging..."
  154. tar -c${zip}f ${PACKNAME}.$os-$ver${d}.tar.${ext} wraith.$os-$ver${d}
  155. chmod 0644 ${PACKNAME}.$os-$ver${d}.tar.${ext}
  156. if [ $rm = "1" ]; then
  157. rm -f *$os-$ver${d}
  158. fi
  159. echo "Binaries are now in '${PACKNAME}.$os-$ver${d}.tar.${ext}'."
  160. fi