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.

492 lines
12KB

  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. unset EXTRA_MAKE_ARGS
  102. export PATH="${OLD_PATH}"
  103. }
  104. # ---------------------------------------------------------------------------------------------------------------------
  105. function build_autoconf() {
  106. local name="${1}"
  107. local version="${2}"
  108. local extraconfrules="${3}"
  109. local pkgdir="${PAWPAW_BUILDDIR}/${name}-${version}"
  110. if [ "${CROSS_COMPILING}" -eq 1 ]; then
  111. extraconfrules="--host=${TOOLCHAIN_PREFIX} ${extraconfrules}"
  112. fi
  113. _prebuild "${name}" "${pkgdir}"
  114. if [ ! -f "${pkgdir}/.stamp_configured" ]; then
  115. pushd "${pkgdir}"
  116. ./configure --enable-static --disable-shared --disable-debug --disable-doc --disable-docs --disable-maintainer-mode --prefix="${PAWPAW_PREFIX}" ${extraconfrules}
  117. touch .stamp_configured
  118. popd
  119. fi
  120. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  121. pushd "${pkgdir}"
  122. make ${MAKE_ARGS} ${EXTRA_MAKE_ARGS}
  123. touch .stamp_built
  124. popd
  125. fi
  126. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  127. pushd "${pkgdir}"
  128. make ${MAKE_ARGS} install -j 1
  129. touch .stamp_installed
  130. popd
  131. fi
  132. _postbuild
  133. }
  134. function build_autoconfgen() {
  135. local name="${1}"
  136. local version="${2}"
  137. local extraconfrules="${3}"
  138. local pkgdir="${PAWPAW_BUILDDIR}/${name}-${version}"
  139. _prebuild "${name}" "${pkgdir}"
  140. if [ ! -f "${pkgdir}/.stamp_preconfigured" ]; then
  141. pushd "${pkgdir}"
  142. # autoreconf --force --install --verbose
  143. # ./autogen.sh
  144. autoconf
  145. touch .stamp_preconfigured
  146. popd
  147. fi
  148. _postbuild
  149. build_autoconf "${name}" "${version}" "${extraconfrules}"
  150. }
  151. function build_conf() {
  152. local name="${1}"
  153. local version="${2}"
  154. local extraconfrules="${3}"
  155. local pkgdir="${PAWPAW_BUILDDIR}/${name}-${version}"
  156. _prebuild "${name}" "${pkgdir}"
  157. if [ ! -f "${pkgdir}/.stamp_configured" ]; then
  158. pushd "${pkgdir}"
  159. ./configure ${extraconfrules}
  160. touch .stamp_configured
  161. popd
  162. fi
  163. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  164. pushd "${pkgdir}"
  165. make ${MAKE_ARGS} ${EXTRA_MAKE_ARGS}
  166. touch .stamp_built
  167. popd
  168. fi
  169. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  170. pushd "${pkgdir}"
  171. make ${MAKE_ARGS} -j 1 install
  172. touch .stamp_installed
  173. popd
  174. fi
  175. _postbuild
  176. }
  177. function build_cmake() {
  178. local name="${1}"
  179. local version="${2}"
  180. local extraconfrules="${3}"
  181. local pkgdir="${PAWPAW_BUILDDIR}/${name}-${version}"
  182. if [ "${CROSS_COMPILING}" -eq 1 ]; then
  183. extraconfrules="-DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME} ${extraconfrules}"
  184. fi
  185. _prebuild "${name}" "${pkgdir}"
  186. mkdir -p "${pkgdir}/build"
  187. if [ ! -f "${pkgdir}/.stamp_configured" ]; then
  188. pushd "${pkgdir}/build"
  189. cmake -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_PREFIX="${PAWPAW_PREFIX}" ${extraconfrules} ..
  190. touch ../.stamp_configured
  191. popd
  192. fi
  193. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  194. pushd "${pkgdir}/build"
  195. make ${MAKE_ARGS} ${EXTRA_MAKE_ARGS}
  196. touch ../.stamp_built
  197. popd
  198. fi
  199. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  200. pushd "${pkgdir}/build"
  201. make ${MAKE_ARGS} -j 1 install
  202. touch ../.stamp_installed
  203. popd
  204. fi
  205. _postbuild
  206. }
  207. function build_make() {
  208. local name="${1}"
  209. local version="${2}"
  210. local extraconfrules="${3}"
  211. local pkgdir="${PAWPAW_BUILDDIR}/${name}-${version}"
  212. _prebuild "${name}" "${pkgdir}"
  213. touch "${pkgdir}/.stamp_configured"
  214. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  215. pushd "${pkgdir}"
  216. make PREFIX="${PAWPAW_PREFIX}" PKG_CONFIG="${TARGET_PKG_CONFIG}" ${MAKE_ARGS} ${extraconfrules}
  217. touch .stamp_built
  218. popd
  219. fi
  220. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  221. pushd "${pkgdir}"
  222. make PREFIX="${PAWPAW_PREFIX}" PKG_CONFIG="${TARGET_PKG_CONFIG}" ${MAKE_ARGS} -j 1 install
  223. touch .stamp_installed
  224. popd
  225. fi
  226. _postbuild
  227. }
  228. function build_meson() {
  229. local name="${1}"
  230. local version="${2}"
  231. local extraconfrules="${3}"
  232. local pkgdir="${PAWPAW_BUILDDIR}/${name}-${version}"
  233. if [ "${CROSS_COMPILING}" -eq 1 ]; then
  234. extraconfrules="--cross-file ${PAWPAW_ROOT}/setup/meson/${PAWPAW_TARGET}.ini ${extraconfrules}"
  235. fi
  236. _prebuild "${name}" "${pkgdir}"
  237. if [ ! -f "${pkgdir}/.stamp_configured" ]; then
  238. pushd "${pkgdir}"
  239. meson build --buildtype release --prefix "${PAWPAW_PREFIX}" ${extraconfrules}
  240. touch .stamp_configured
  241. popd
  242. fi
  243. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  244. pushd "${pkgdir}"
  245. ninja -v -C build
  246. touch .stamp_built
  247. popd
  248. fi
  249. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  250. pushd "${pkgdir}"
  251. ninja -C build install
  252. touch .stamp_installed
  253. popd
  254. fi
  255. _postbuild
  256. }
  257. function build_qmake() {
  258. local name="${1}"
  259. local version="${2}"
  260. local extraconfrules="${3}"
  261. local pkgdir="${PAWPAW_BUILDDIR}/${name}-${version}"
  262. _prebuild "${name}" "${pkgdir}"
  263. if [ ! -f "${pkgdir}/.stamp_configured" ]; then
  264. pushd "${pkgdir}"
  265. qmake ${extraconfrules}
  266. touch .stamp_configured
  267. popd
  268. fi
  269. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  270. pushd "${pkgdir}"
  271. make ${MAKE_ARGS} ${EXTRA_MAKE_ARGS}
  272. touch .stamp_built
  273. popd
  274. fi
  275. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  276. pushd "${pkgdir}"
  277. make ${MAKE_ARGS} -j 1 install
  278. touch .stamp_installed
  279. popd
  280. fi
  281. _postbuild
  282. }
  283. function build_waf() {
  284. local name="${1}"
  285. local version="${2}"
  286. local extraconfrules="${3}"
  287. local pkgdir="${PAWPAW_BUILDDIR}/${name}-${version}"
  288. local python=python3
  289. if ! which python3 > /dev/null; then
  290. python=python
  291. fi
  292. _prebuild "${name}" "${pkgdir}"
  293. if [ ! -f "${pkgdir}/.stamp_configured" ]; then
  294. pushd "${pkgdir}"
  295. ${python} waf configure --prefix="${PAWPAW_PREFIX}" ${extraconfrules}
  296. touch .stamp_configured
  297. popd
  298. fi
  299. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  300. pushd "${pkgdir}"
  301. ${python} waf build ${WAF_ARGS}
  302. touch .stamp_built
  303. popd
  304. fi
  305. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  306. pushd "${pkgdir}"
  307. ${python} waf install ${WAF_ARGS} -j 1
  308. touch .stamp_installed
  309. popd
  310. fi
  311. _postbuild
  312. }
  313. # ---------------------------------------------------------------------------------------------------------------------
  314. function build_host_autoconf() {
  315. local name="${1}"
  316. local version="${2}"
  317. local extraconfrules="${3}"
  318. local pkgdir="${PAWPAW_BUILDDIR}/${name}-${version}"
  319. unset AR
  320. unset CC
  321. unset CXX
  322. unset LD
  323. unset STRIP
  324. unset CFLAGS
  325. unset CPPFLAGS
  326. unset CXXFLAGS
  327. unset LDFLAGS
  328. if [ ! -f "${pkgdir}/.stamp_configured" ]; then
  329. pushd "${pkgdir}"
  330. ./configure --enable-static --disable-shared --disable-maintainer-mode --prefix="${PAWPAW_PREFIX}" ${extraconfrules}
  331. touch .stamp_configured
  332. popd
  333. fi
  334. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  335. pushd "${pkgdir}"
  336. make ${MAKE_ARGS}
  337. touch .stamp_built
  338. popd
  339. fi
  340. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  341. pushd "${pkgdir}"
  342. make ${MAKE_ARGS} install -j 1
  343. touch .stamp_installed
  344. popd
  345. fi
  346. }
  347. # ---------------------------------------------------------------------------------------------------------------------
  348. function patch_file() {
  349. local name="${1}"
  350. local version="${2}"
  351. local file="${3}"
  352. local rule="${4}"
  353. local pkgdir="${PAWPAW_BUILDDIR}/${name}-${version}"
  354. sed -i -e "${rule}" "${pkgdir}/${file}"
  355. }
  356. function copy_file() {
  357. local name="${1}"
  358. local version="${2}"
  359. local source="${3}"
  360. local target="${4}"
  361. local pkgdir="${PAWPAW_BUILDDIR}/${name}-${version}"
  362. if [ ! -e "${pkgdir}/${target}" ]; then
  363. pushd "${pkgdir}"
  364. cp -v "${source}" "${target}"
  365. popd
  366. fi
  367. }
  368. function link_file() {
  369. local name="${1}"
  370. local version="${2}"
  371. local source="${3}"
  372. local target="${4}"
  373. local pkgdir="${PAWPAW_BUILDDIR}/${name}-${version}"
  374. if [ ! -e "${pkgdir}/${target}" ]; then
  375. pushd "${pkgdir}"
  376. ln -sfv "${source}" "${target}"
  377. popd
  378. fi
  379. }
  380. function remove_file() {
  381. local name="${1}"
  382. local version="${2}"
  383. local file="${3}"
  384. local pkgdir="${PAWPAW_BUILDDIR}/${name}-${version}"
  385. if [ ! -e "${pkgdir}/${file}" ]; then
  386. rm -fv "${pkgdir}/${file}"
  387. fi
  388. }
  389. # ---------------------------------------------------------------------------------------------------------------------