Cross-Platform build scripts for audio plugins
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

414 lines
10KB

  1. #!/bin/bash
  2. # ---------------------------------------------------------------------------------------------------------------------
  3. function download() {
  4. local name="${1}"
  5. local version="${2}"
  6. local dlbaseurl="${3}"
  7. local dlext="${4}"
  8. local dlmethod="${5}"
  9. if [ -z "${dlext}" ]; then
  10. dlext="tar.gz"
  11. fi
  12. local dlfile="${PAWPAW_DOWNLOADDIR}/${name}-${version}.${dlext}"
  13. local dlfolder="${PAWPAW_BUILDDIR}/${name}-${version}"
  14. if [ ! -f "${dlfile}" ]; then
  15. if [ -n "${dlmethod}" ] && [ "${dlmethod}" = "git" ]; then
  16. local tmprepodir="${PAWPAW_TMPDIR}/${name}-${version}"
  17. rm -rf "${tmprepodir}"
  18. git clone --recursive "${dlbaseurl}" "${tmprepodir}"
  19. git -C "${tmprepodir}" checkout "${version}"
  20. git -C "${tmprepodir}" submodule update
  21. tar --exclude=".git" -czf "${dlfile}" -C "${PAWPAW_TMPDIR}" "${name}-${version}"
  22. rm -rf "${tmprepodir}"
  23. else
  24. local dlurl
  25. if echo ${dlbaseurl} | grep -q github.com; then
  26. dlurl="${dlbaseurl}/v${version}.${dlext}"
  27. elif [ "${dlext}" = "orig.tar.gz" ]; then
  28. dlurl="${dlbaseurl}/${name}_${version}.${dlext}"
  29. else
  30. dlurl="${dlbaseurl}/${name}-${version}.${dlext}"
  31. fi
  32. curl -L "${dlurl}" -o "${dlfile}"
  33. fi
  34. fi
  35. if [ ! -d "${dlfolder}" ]; then
  36. mkdir "${dlfolder}"
  37. tar -xf "${dlfile}" -C "${dlfolder}" --strip-components=1
  38. fi
  39. }
  40. function copy_download() {
  41. local name1="${1}"
  42. local name2="${2}"
  43. local version="${3}"
  44. local dlext="${4}"
  45. if [ -z "${dlext}" ]; then
  46. dlext="tar.gz"
  47. fi
  48. local dlfile1="${PAWPAW_DOWNLOADDIR}/${name1}-${version}.${dlext}"
  49. local dlfolder2="${PAWPAW_BUILDDIR}/${name2}-${version}"
  50. if [ ! -d "${dlfolder2}" ]; then
  51. mkdir "${dlfolder2}"
  52. tar -xf "${dlfile1}" -C "${dlfolder2}" --strip-components=1
  53. fi
  54. }
  55. # ---------------------------------------------------------------------------------------------------------------------
  56. function _prebuild() {
  57. local name="${1}"
  58. local pkgdir="${2}"
  59. export AR="${TARGET_AR}"
  60. export CC="${TARGET_CC}"
  61. export CXX="${TARGET_CXX}"
  62. export LD="${TARGET_LD}"
  63. export STRIP="${TARGET_STRIP}"
  64. export CFLAGS="${TARGET_CFLAGS} ${EXTRA_CFLAGS}"
  65. export CXXFLAGS="${TARGET_CXXFLAGS} ${EXTRA_CXXFLAGS}"
  66. export LDFLAGS="${TARGET_LDFLAGS} ${EXTRA_LDFLAGS}"
  67. export PKG_CONFIG_PATH="${TARGET_PKG_CONFIG_PATH}"
  68. unset CPPFLAGS
  69. export OLD_PATH="${PATH}"
  70. export PATH="${TARGET_PATH}"
  71. if [ -d "${PAWPAW_ROOT}/patches/${name}" ]; then
  72. for p in $(ls "${PAWPAW_ROOT}/patches/${name}/" | grep "\.patch" | sort); do
  73. if [ ! -f "${pkgdir}/.stamp_applied_${p}" ]; then
  74. patch -p1 -d "${pkgdir}" -i "${PAWPAW_ROOT}/patches/${name}/${p}"
  75. touch "${pkgdir}/.stamp_applied_${p}"
  76. fi
  77. done
  78. fi
  79. if [ ! -f "${pkgdir}/.stamp_configured" ]; then
  80. rm -f "${pkgdir}/.stamp_built"
  81. rm -f "${pkgdir}/.stamp_installed"
  82. rm -f "${pkgdir}/CMakeCache.txt"
  83. elif [ ! -f "${pkgdir}/.stamp_built" ]; then
  84. rm -f "${pkgdir}/.stamp_installed"
  85. fi
  86. }
  87. function _postbuild() {
  88. unset AR
  89. unset CC
  90. unset CXX
  91. unset LD
  92. unset STRIP
  93. unset CFLAGS
  94. unset CPPFLAGS
  95. unset CXXFLAGS
  96. unset LDFLAGS
  97. unset PKG_CONFIG_PATH
  98. unset EXTRA_CFLAGS
  99. unset EXTRA_CXXFLAGS
  100. unset EXTRA_LDFLAGS
  101. export PATH="${OLD_PATH}"
  102. }
  103. # ---------------------------------------------------------------------------------------------------------------------
  104. function build_autoconf() {
  105. local name="${1}"
  106. local version="${2}"
  107. local extraconfrules="${3}"
  108. local pkgdir="${PAWPAW_BUILDDIR}/${name}-${version}"
  109. if [ "${CROSS_COMPILING}" -eq 1 ]; then
  110. extraconfrules="--host=${TOOLCHAIN_PREFIX} ${extraconfrules}"
  111. fi
  112. _prebuild "${name}" "${pkgdir}"
  113. if [ ! -f "${pkgdir}/.stamp_configured" ]; then
  114. pushd "${pkgdir}"
  115. ./configure --enable-static --disable-shared --disable-debug --disable-doc --disable-maintainer-mode --prefix="${PAWPAW_PREFIX}" ${extraconfrules}
  116. touch .stamp_configured
  117. popd
  118. fi
  119. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  120. pushd "${pkgdir}"
  121. make ${MAKE_ARGS}
  122. touch .stamp_built
  123. popd
  124. fi
  125. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  126. pushd "${pkgdir}"
  127. make ${MAKE_ARGS} install
  128. touch .stamp_installed
  129. popd
  130. fi
  131. _postbuild
  132. }
  133. function build_conf() {
  134. local name="${1}"
  135. local version="${2}"
  136. local extraconfrules="${3}"
  137. local pkgdir="${PAWPAW_BUILDDIR}/${name}-${version}"
  138. _prebuild "${name}" "${pkgdir}"
  139. if [ ! -f "${pkgdir}/.stamp_configured" ]; then
  140. pushd "${pkgdir}"
  141. ./configure ${extraconfrules}
  142. touch .stamp_configured
  143. popd
  144. fi
  145. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  146. pushd "${pkgdir}"
  147. make ${MAKE_ARGS}
  148. touch .stamp_built
  149. popd
  150. fi
  151. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  152. pushd "${pkgdir}"
  153. make ${MAKE_ARGS} install
  154. touch .stamp_installed
  155. popd
  156. fi
  157. _postbuild
  158. }
  159. function build_cmake() {
  160. local name="${1}"
  161. local version="${2}"
  162. local extraconfrules="${3}"
  163. local pkgdir="${PAWPAW_BUILDDIR}/${name}-${version}"
  164. if [ "${CROSS_COMPILING}" -eq 1 ]; then
  165. extraconfrules="-DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME} ${extraconfrules}"
  166. fi
  167. _prebuild "${name}" "${pkgdir}"
  168. mkdir -p "${pkgdir}/build"
  169. if [ ! -f "${pkgdir}/.stamp_configured" ]; then
  170. pushd "${pkgdir}/build"
  171. cmake -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_PREFIX="${PAWPAW_PREFIX}" ${extraconfrules} ..
  172. touch ../.stamp_configured
  173. popd
  174. fi
  175. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  176. pushd "${pkgdir}/build"
  177. make ${MAKE_ARGS}
  178. touch ../.stamp_built
  179. popd
  180. fi
  181. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  182. pushd "${pkgdir}/build"
  183. make ${MAKE_ARGS} install
  184. touch ../.stamp_installed
  185. popd
  186. fi
  187. _postbuild
  188. }
  189. function build_make() {
  190. local name="${1}"
  191. local version="${2}"
  192. local extraconfrules="${3}"
  193. local pkgdir="${PAWPAW_BUILDDIR}/${name}-${version}"
  194. _prebuild "${name}" "${pkgdir}"
  195. touch "${pkgdir}/.stamp_configured"
  196. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  197. pushd "${pkgdir}"
  198. make PREFIX="${PAWPAW_PREFIX}" PKG_CONFIG="${TARGET_PKG_CONFIG}" ${MAKE_ARGS} ${extraconfrules}
  199. touch .stamp_built
  200. popd
  201. fi
  202. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  203. pushd "${pkgdir}"
  204. make PREFIX="${PAWPAW_PREFIX}" PKG_CONFIG="${TARGET_PKG_CONFIG}" ${MAKE_ARGS} install
  205. touch .stamp_installed
  206. popd
  207. fi
  208. _postbuild
  209. }
  210. function build_meson() {
  211. local name="${1}"
  212. local version="${2}"
  213. local extraconfrules="${3}"
  214. local pkgdir="${PAWPAW_BUILDDIR}/${name}-${version}"
  215. if [ "${CROSS_COMPILING}" -eq 1 ]; then
  216. extraconfrules="--cross-file ${PAWPAW_ROOT}/setup/meson/${PAWPAW_TARGET}.ini ${extraconfrules}"
  217. fi
  218. _prebuild "${name}" "${pkgdir}"
  219. if [ ! -f "${pkgdir}/.stamp_configured" ]; then
  220. pushd "${pkgdir}"
  221. meson build --buildtype release --prefix "${PAWPAW_PREFIX}" ${extraconfrules}
  222. touch .stamp_configured
  223. popd
  224. fi
  225. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  226. pushd "${pkgdir}"
  227. ninja -v -C build
  228. touch .stamp_built
  229. popd
  230. fi
  231. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  232. pushd "${pkgdir}"
  233. ninja -C build install
  234. touch .stamp_installed
  235. popd
  236. fi
  237. _postbuild
  238. }
  239. function build_waf() {
  240. local name="${1}"
  241. local version="${2}"
  242. local extraconfrules="${3}"
  243. local pkgdir="${PAWPAW_BUILDDIR}/${name}-${version}"
  244. _prebuild "${name}" "${pkgdir}"
  245. if [ ! -f "${pkgdir}/.stamp_configured" ]; then
  246. pushd "${pkgdir}"
  247. ./waf configure --prefix="${PAWPAW_PREFIX}" ${extraconfrules}
  248. touch .stamp_configured
  249. popd
  250. fi
  251. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  252. pushd "${pkgdir}"
  253. ./waf build
  254. touch .stamp_built
  255. popd
  256. fi
  257. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  258. pushd "${pkgdir}"
  259. ./waf install
  260. touch .stamp_installed
  261. popd
  262. fi
  263. _postbuild
  264. }
  265. # ---------------------------------------------------------------------------------------------------------------------
  266. function build_host_autoconf() {
  267. local name="${1}"
  268. local version="${2}"
  269. local extraconfrules="${3}"
  270. local pkgdir="${PAWPAW_BUILDDIR}/${name}-${version}"
  271. unset AR
  272. unset CC
  273. unset CXX
  274. unset LD
  275. unset STRIP
  276. unset CFLAGS
  277. unset CPPFLAGS
  278. unset CXXFLAGS
  279. unset LDFLAGS
  280. if [ ! -f "${pkgdir}/.stamp_configured" ]; then
  281. pushd "${pkgdir}"
  282. ./configure --enable-static --disable-shared --disable-maintainer-mode --prefix="${PAWPAW_PREFIX}" ${extraconfrules}
  283. touch .stamp_configured
  284. popd
  285. fi
  286. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  287. pushd "${pkgdir}"
  288. make ${MAKE_ARGS}
  289. touch .stamp_built
  290. popd
  291. fi
  292. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  293. pushd "${pkgdir}"
  294. make install
  295. touch .stamp_installed
  296. popd
  297. fi
  298. }
  299. # ---------------------------------------------------------------------------------------------------------------------
  300. function patch_file() {
  301. local name="${1}"
  302. local version="${2}"
  303. local file="${3}"
  304. local rule="${4}"
  305. local pkgdir="${PAWPAW_BUILDDIR}/${name}-${version}"
  306. sed -i -e "${rule}" "${pkgdir}/${file}"
  307. }
  308. function link_file() {
  309. local name="${1}"
  310. local version="${2}"
  311. local source="${3}"
  312. local target="${4}"
  313. local pkgdir="${PAWPAW_BUILDDIR}/${name}-${version}"
  314. if [ ! -e "${pkgdir}/${target}" ]; then
  315. pushd "${pkgdir}"
  316. ln -sf "${source}" "${target}"
  317. popd
  318. fi
  319. }
  320. function remove_file() {
  321. local name="${1}"
  322. local version="${2}"
  323. local file="${3}"
  324. local pkgdir="${PAWPAW_BUILDDIR}/${name}-${version}"
  325. echo rm -f "${pkgdir}/${file}"
  326. rm -f "${pkgdir}/${file}"
  327. }
  328. # ---------------------------------------------------------------------------------------------------------------------