build.sh 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. #!/bin/sh
  2. #
  3. # Automated build and test of libarchive on CI systems
  4. #
  5. # Variables that can be passed via environment:
  6. # BS= # build system (autotools or cmake)
  7. # CRYPTO= # cryptography provider (openssl, nettle or mbedtls)
  8. # BUILDDIR= # build directory
  9. # SRCDIR= # source directory
  10. # CONFIGURE_ARGS= # configure arguments
  11. # CMAKE_ARGS= # cmake arguments
  12. # MAKE_ARGS= # make arguments
  13. # DEBUG= # set -g -fsanitize=address flags
  14. ACTIONS=
  15. if [ -n "${BUILD_SYSTEM}" ]; then
  16. BS="${BUILD_SYSTEM}"
  17. fi
  18. BS="${BS:-autotools}"
  19. MAKE="${MAKE:-make}"
  20. CMAKE="${CMAKE:-cmake}"
  21. CURDIR=`pwd`
  22. SRCDIR="${SRCDIR:-`pwd`}"
  23. RET=0
  24. usage () {
  25. echo "Usage: $0 [-b autotools|cmake] [-a autogen|configure|build|test|install|distcheck ] [ -a ... ] [ -d builddir ] [-c openssl|nettle|mbedtls] [-s srcdir ]"
  26. }
  27. inputerror () {
  28. echo $1
  29. usage
  30. exit 1
  31. }
  32. while getopts a:b:c:d:s: opt; do
  33. case ${opt} in
  34. a)
  35. case "${OPTARG}" in
  36. autogen) ;;
  37. configure) ;;
  38. build) ;;
  39. test) ;;
  40. install) ;;
  41. distcheck) ;;
  42. artifact) ;;
  43. dist-artifact) ;;
  44. *) inputerror "Invalid action (-a)" ;;
  45. esac
  46. ACTIONS="${ACTIONS} ${OPTARG}"
  47. ;;
  48. b) BS="${OPTARG}"
  49. case "${BS}" in
  50. autotools) ;;
  51. cmake) ;;
  52. *) inputerror "Invalid build system (-b)" ;;
  53. esac
  54. ;;
  55. c) CRYPTO="${OPTARG}"
  56. case "${CRYPTO}" in
  57. mbedtls) ;;
  58. openssl) ;;
  59. nettle) ;;
  60. *) inputerror "Invalid crypto provider (-c)" ;;
  61. esac
  62. ;;
  63. d)
  64. BUILDDIR="${OPTARG}"
  65. ;;
  66. s)
  67. SRCDIR="${OPTARG}"
  68. if [ ! -f "${SRCDIR}/build/version" ]; then
  69. inputerror "Missing file: ${SRCDIR}/build/version"
  70. fi
  71. ;;
  72. esac
  73. done
  74. case "${CRYPTO}" in
  75. mbedtls)
  76. CMAKE_ARGS="${CMAKE_ARGS} -DENABLE_OPENSSL=OFF -DENABLE_MBEDTLS=ON"
  77. CONFIGURE_ARGS="${CONFIGURE_ARGS} --without-openssl --with-mbedtls"
  78. ;;
  79. nettle)
  80. CMAKE_ARGS="${CMAKE_ARGS} -DENABLE_OPENSSL=OFF -DENABLE_NETTLE=ON"
  81. CONFIGURE_ARGS="${CONFIGURE_ARGS} --without-openssl --with-nettle"
  82. ;;
  83. esac
  84. if [ -z "${MAKE_ARGS}" ]; then
  85. if [ "${BS}" = "autotools" ]; then
  86. MAKE_ARGS="V=1"
  87. elif [ "${BS}" = "cmake" ]; then
  88. MAKE_ARGS="VERBOSE=1"
  89. fi
  90. fi
  91. if [ -n "${DEBUG}" ]; then
  92. if [ -n "${CFLAGS}" ]; then
  93. export CFLAGS="${CFLAGS} -g -fsanitize=address"
  94. else
  95. export CFLAGS="-g -fsanitize=address"
  96. fi
  97. if [ "${BS}" = "cmake" ]; then
  98. CMAKE_ARGS="${CMAKE_ARGS} -DCMAKE_C_CFLAGS=-g -fsanitize=address"
  99. fi
  100. fi
  101. if [ -z "${ACTIONS}" ]; then
  102. ACTIONS="autogen configure build test install"
  103. fi
  104. if [ -z "${BS}" ]; then
  105. inputerror "Missing build system (-b) parameter"
  106. fi
  107. if [ -z "${BUILDDIR}" ]; then
  108. BUILDDIR="${CURDIR}/build_ci/${BS}"
  109. fi
  110. mkdir -p "${BUILDDIR}"
  111. for action in ${ACTIONS}; do
  112. cd "${BUILDDIR}"
  113. case "${action}" in
  114. autogen)
  115. case "${BS}" in
  116. autotools)
  117. cd "${SRCDIR}"
  118. sh build/autogen.sh
  119. RET="$?"
  120. ;;
  121. esac
  122. ;;
  123. configure)
  124. case "${BS}" in
  125. autotools) "${SRCDIR}/configure" ${CONFIGURE_ARGS} ;;
  126. cmake) ${CMAKE} ${CMAKE_ARGS} "${SRCDIR}" ;;
  127. esac
  128. RET="$?"
  129. ;;
  130. build)
  131. ${MAKE} ${MAKE_ARGS}
  132. RET="$?"
  133. ;;
  134. test)
  135. case "${BS}" in
  136. autotools)
  137. ${MAKE} ${MAKE_ARGS} check LOG_DRIVER="${SRCDIR}/build/ci/test_driver"
  138. ;;
  139. cmake)
  140. ${MAKE} ${MAKE_ARGS} test
  141. ;;
  142. esac
  143. RET="$?"
  144. find ${TMPDIR:-/tmp} -path '*_test.*' -name '*.log' -print -exec cat {} \;
  145. ;;
  146. install)
  147. ${MAKE} ${MAKE_ARGS} install DESTDIR="${BUILDDIR}/destdir"
  148. RET="$?"
  149. cd "${BUILDDIR}/destdir" && ls -lR .
  150. ;;
  151. distcheck)
  152. ${MAKE} ${MAKE_ARGS} distcheck || (
  153. RET="$?"
  154. find . -name 'test-suite.log' -print -exec cat {} \;
  155. find ${TMPDIR:-/tmp} -path '*_test.*' -name '*.log' -print -exec cat {} \;
  156. exit "${RET}"
  157. )
  158. RET="$?"
  159. ;;
  160. artifact)
  161. tar -c -J -C "${BUILDDIR}/destdir" -f "${CURDIR}/libarchive.tar.xz" usr
  162. ls -l "${CURDIR}/libarchive.tar.xz"
  163. ;;
  164. dist-artifact)
  165. tar -c -C "${BUILDDIR}" -f "${CURDIR}/libarchive-dist.tar" \
  166. libarchive-*.tar.gz libarchive-*.tar.xz libarchive-*.zip
  167. ls -l "${CURDIR}/libarchive-dist.tar"
  168. ;;
  169. esac
  170. if [ "${RET}" != "0" ]; then
  171. exit "${RET}"
  172. fi
  173. cd "${CURDIR}"
  174. done
  175. exit "${RET}"