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.

957 lines
29KB

  1. #!/bin/bash
  2. # NOTE `setup/check_target.sh` and `setup/env.sh` must be imported before this one, in that order
  3. # ---------------------------------------------------------------------------------------------------------------------
  4. function download() {
  5. local pkgname="${1}"
  6. local version="${2}"
  7. local dlbaseurl="${3}"
  8. local dlext="${4}"
  9. local dlmethod="${5}"
  10. local dlname="${6}"
  11. if [ -z "${dlext}" ]; then
  12. dlext="tar.gz"
  13. fi
  14. if [ -z "${dlname}" ]; then
  15. dlname="${pkgname}"
  16. fi
  17. local dlfile="${PAWPAW_DOWNLOADDIR}/${dlname}-${version}.${dlext}"
  18. local dlfolder="${PAWPAW_BUILDDIR}/${pkgname}-${version}"
  19. if [ ! -f "${dlfile}" ]; then
  20. if [ -n "${dlmethod}" ] && [ "${dlmethod}" = "git" ]; then
  21. local tmprepodir="${PAWPAW_TMPDIR}/${dlname}-${version}"
  22. rm -rf "${tmprepodir}"
  23. git clone --recursive "${dlbaseurl}" "${tmprepodir}"
  24. git -C "${tmprepodir}" checkout "${version}"
  25. git -C "${tmprepodir}" submodule update --recursive --init
  26. tar --exclude=".git" -czf "${dlfile}" -C "${PAWPAW_TMPDIR}" "${dlname}-${version}"
  27. rm -rf "${tmprepodir}"
  28. else
  29. local dlurl1
  30. local dlurl2
  31. if echo ${dlbaseurl} | grep -q github.com | grep -q -v releases; then
  32. if [ x"${dlmethod}" = x"nv" ]; then
  33. dlurl1="${dlbaseurl}/${version}.${dlext}"
  34. dlurl2="${KXSTUDIO_FILES_URL}/${version}.${dlext}"
  35. else
  36. dlurl1="${dlbaseurl}/v${version}.${dlext}"
  37. dlurl2="${KXSTUDIO_FILES_URL}/v${version}.${dlext}"
  38. fi
  39. elif [ "${dlext}" = "orig.tar.gz" ]; then
  40. dlurl1="${dlbaseurl}/${dlname}_${version}.${dlext}"
  41. dlurl2="${KXSTUDIO_FILES_URL}/${dlname}_${version}.${dlext}"
  42. else
  43. dlurl1="${dlbaseurl}/${dlname}-${version}.${dlext}"
  44. dlurl2="${KXSTUDIO_FILES_URL}/${dlname}-${version}.${dlext}"
  45. fi
  46. echo "Downloading ${dlurl1}"
  47. curl -L "${dlurl1}" -o "${dlfile}" --fail || curl -L "${dlurl2}" -o "${dlfile}" --fail
  48. fi
  49. fi
  50. if [ ! -d "${dlfolder}" ]; then
  51. mkdir "${dlfolder}"
  52. echo "Extracting ${dlfile}"
  53. # file "${dlfile}"
  54. # md5sum "${dlfile}"
  55. tar -xf "${dlfile}" -C "${dlfolder}" --strip-components=1
  56. fi
  57. }
  58. function copy_download() {
  59. local pkgname1="${1}"
  60. local pkgname2="${2}"
  61. local version="${3}"
  62. local dlext="${4}"
  63. if [ -z "${dlext}" ]; then
  64. dlext="tar.gz"
  65. fi
  66. local dlfile1="${PAWPAW_DOWNLOADDIR}/${pkgname1}-${version}.${dlext}"
  67. local dlfolder2="${PAWPAW_BUILDDIR}/${pkgname2}-${version}"
  68. if [ ! -d "${dlfolder2}" ]; then
  69. mkdir "${dlfolder2}"
  70. tar -xf "${dlfile1}" -C "${dlfolder2}" --strip-components=1
  71. fi
  72. }
  73. function git_clone() {
  74. local pkgname="${1}"
  75. local hash="${2}"
  76. local repourl="${3}"
  77. local dlname="${4}"
  78. if [ -z "${dlname}" ]; then
  79. dlname="${pkgname}"
  80. fi
  81. local dlfile="${PAWPAW_DOWNLOADDIR}/${dlname}-${hash}.tar.gz"
  82. local dlfolder="${PAWPAW_BUILDDIR}/${pkgname}-${hash}"
  83. if [ ! -f "${dlfile}" ]; then
  84. local tmprepodir="${PAWPAW_TMPDIR}/${dlname}-${hash}"
  85. rm -rf "${tmprepodir}"
  86. git clone --recursive "${repourl}" "${tmprepodir}"
  87. git -C "${tmprepodir}" checkout "${hash}"
  88. git -C "${tmprepodir}" submodule update --recursive --init
  89. tar --exclude=".git" -czf "${dlfile}" -C "${PAWPAW_TMPDIR}" "${dlname}-${hash}"
  90. rm -rf "${tmprepodir}"
  91. fi
  92. if [ ! -d "${dlfolder}" ]; then
  93. mkdir "${dlfolder}"
  94. tar -xf "${dlfile}" -C "${dlfolder}" --strip-components=1
  95. fi
  96. }
  97. # ---------------------------------------------------------------------------------------------------------------------
  98. function _prebuild() {
  99. local pkgname="${1}"
  100. local pkgdir="${2}"
  101. export AR="${TARGET_AR}"
  102. export CC="${TARGET_CC}"
  103. export CXX="${TARGET_CXX}"
  104. export DLLWRAP="${TARGET_DLLWRAP}"
  105. export LD="${TARGET_LD}"
  106. export NM="${TARGET_NM}"
  107. export RANLIB="${TARGET_RANLIB}"
  108. export STRIP="${TARGET_STRIP}"
  109. export WINDRES="${TARGET_WINDRES}"
  110. export CFLAGS="${TARGET_CFLAGS} ${EXTRA_CFLAGS}"
  111. export CXXFLAGS="${TARGET_CXXFLAGS} ${EXTRA_CXXFLAGS}"
  112. export LDFLAGS="${TARGET_LDFLAGS} ${EXTRA_LDFLAGS}"
  113. export PKG_CONFIG_PATH="${TARGET_PKG_CONFIG_PATH}"
  114. if [ -n "${EXTRA_CPPFLAGS}" ]; then
  115. export CPPFLAGS="${EXTRA_CPPFLAGS}"
  116. else
  117. unset CPPFLAGS
  118. fi
  119. export OLD_PATH="${PATH}"
  120. export PATH="${TARGET_PATH}"
  121. if [ -e "${PAWPAW_ROOT}/patches/${pkgname}" ] && [ ! -f "${pkgdir}/.stamp_cleanup" ] && [ ! -f "${pkgdir}/.stamp_configured" ]; then
  122. local patchtargets="${PAWPAW_TARGET}"
  123. if [[ "${PAWPAW_TARGET}" = "linux-"* ]]; then
  124. patchtargets+=" linux"
  125. elif [ "${PAWPAW_TARGET}" = "macos-universal-10.15" ]; then
  126. patchtargets+=" macos-10.15 macos-universal"
  127. elif [ "${PAWPAW_TARGET}" = "win64" ]; then
  128. patchtargets+=" win32"
  129. fi
  130. for target in ${patchtargets[@]}; do
  131. if [ -e "${PAWPAW_ROOT}/patches/${pkgname}/${target}" ]; then
  132. for p in $(ls "${PAWPAW_ROOT}/patches/${pkgname}/${target}/" | grep "\.patch$" | sort); do
  133. if [ ! -f "${pkgdir}/.stamp_applied_${p}" ]; then
  134. patch -p1 -d "${pkgdir}" -i "${PAWPAW_ROOT}/patches/${pkgname}/${target}/${p}"
  135. touch "${pkgdir}/.stamp_applied_${p}"
  136. fi
  137. done
  138. fi
  139. done
  140. for p in $(ls "${PAWPAW_ROOT}/patches/${pkgname}/" | grep "\.patch$" | sort); do
  141. if [ ! -f "${pkgdir}/.stamp_applied_${p}" ]; then
  142. patch -p1 -d "${pkgdir}" -i "${PAWPAW_ROOT}/patches/${pkgname}/${p}"
  143. touch "${pkgdir}/.stamp_applied_${p}"
  144. fi
  145. done
  146. fi
  147. if [ ! -f "${pkgdir}/.stamp_configured" ]; then
  148. rm -f "${pkgdir}/.stamp_built"
  149. rm -f "${pkgdir}/.stamp_installed"
  150. rm -f "${pkgdir}/.stamp_verified"
  151. rm -f "${pkgdir}/CMakeCache.txt"
  152. elif [ ! -f "${pkgdir}/.stamp_built" ]; then
  153. rm -f "${pkgdir}/.stamp_installed"
  154. rm -f "${pkgdir}/.stamp_verified"
  155. elif [ ! -f "${pkgdir}/.stamp_installed" ]; then
  156. rm -f "${pkgdir}/.stamp_verified"
  157. fi
  158. }
  159. function _postbuild() {
  160. unset AR
  161. unset CC
  162. unset CXX
  163. unset DLLWRAP
  164. unset LD
  165. unset NM
  166. unset RANLIB
  167. unset STRIP
  168. unset WINDRES
  169. unset CFLAGS
  170. unset CPPFLAGS
  171. unset CXXFLAGS
  172. unset LDFLAGS
  173. unset PKG_CONFIG_PATH
  174. unset EXTRA_CFLAGS
  175. unset EXTRA_CPPFLAGS
  176. unset EXTRA_CXXFLAGS
  177. unset EXTRA_LDFLAGS
  178. unset EXTRA_MAKE_ARGS
  179. export PATH="${OLD_PATH}"
  180. }
  181. # ---------------------------------------------------------------------------------------------------------------------
  182. function build_autoconf() {
  183. local pkgname="${1}"
  184. local version="${2}"
  185. local extraconfrules="${3}"
  186. local pkgdir="${PAWPAW_BUILDDIR}/${pkgname}-${version}"
  187. if [ "${LINUX}" -eq 1 ] || [ "${WASM}" -eq 1 ]; then
  188. extraconfrules+=" --build=$(uname -m)-linux-gnu ac_cv_build=$(uname -m)-linux-gnu"
  189. fi
  190. if [ "${LINUX}" -eq 1 ] && [ "$(uname -m)" != "x86_64" ]; then
  191. extraconfrules+=" --host=$(uname -m)-linux-gnu ac_cv_host=$(uname -m)-linux-gnu"
  192. elif [ "${WASM}" -eq 1 ]; then
  193. extraconfrules+=" --host=i686-linux-gnu ac_cv_host=i686-linux-gnu"
  194. elif [ -n "${TOOLCHAIN_PREFIX}" ]; then
  195. extraconfrules+=" --host=${TOOLCHAIN_PREFIX} ac_cv_host=${TOOLCHAIN_PREFIX}"
  196. fi
  197. if echo "${extraconfrules}" | grep -q -e '--enable-debug' -e '--disable-debug'; then
  198. true
  199. elif [ -n "${PAWPAW_DEBUG}" ] && [ "${PAWPAW_DEBUG}" -eq 1 ]; then
  200. extraconfrules+=" --enable-debug"
  201. else
  202. extraconfrules+=" --disable-debug"
  203. fi
  204. _prebuild "${pkgname}" "${pkgdir}"
  205. if [ ! -f "${pkgdir}/.stamp_configured" ]; then
  206. pushd "${pkgdir}"
  207. ./configure --enable-static --disable-shared --disable-doc --disable-docs --disable-maintainer-mode --prefix="${PAWPAW_PREFIX}" ${extraconfrules}
  208. touch .stamp_configured
  209. popd
  210. fi
  211. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  212. pushd "${pkgdir}"
  213. make ${MAKE_ARGS} ${EXTRA_MAKE_ARGS}
  214. touch .stamp_built
  215. popd
  216. fi
  217. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  218. pushd "${pkgdir}"
  219. make ${MAKE_ARGS} install -j 1
  220. touch .stamp_installed
  221. popd
  222. fi
  223. _postbuild
  224. }
  225. function build_autoconfgen() {
  226. local pkgname="${1}"
  227. local version="${2}"
  228. local extraconfrules="${3}"
  229. local pkgdir="${PAWPAW_BUILDDIR}/${pkgname}-${version}"
  230. local EXTRA_CFLAGS2="${EXTRA_CFLAGS}"
  231. local EXTRA_CXXFLAGS2="${EXTRA_CXXFLAGS}"
  232. local EXTRA_LDFLAGS2="${EXTRA_LDFLAGS}"
  233. local EXTRA_MAKE_ARGS2="${EXTRA_MAKE_ARGS}"
  234. _prebuild "${pkgname}" "${pkgdir}"
  235. if [ ! -f "${pkgdir}/.stamp_preconfigured" ]; then
  236. pushd "${pkgdir}"
  237. if [ -f utils/autogen.sh ]; then
  238. ./utils/autogen.sh
  239. else
  240. ${autoconf}
  241. fi
  242. touch .stamp_preconfigured
  243. popd
  244. fi
  245. _postbuild
  246. export EXTRA_CFLAGS="${EXTRA_CFLAGS2}"
  247. export EXTRA_CXXFLAGS="${EXTRA_CXXFLAGS2}"
  248. export EXTRA_LDFLAGS="${EXTRA_LDFLAGS2}"
  249. export EXTRA_MAKE_ARGS="${EXTRA_MAKE_ARGS2}"
  250. build_autoconf "${pkgname}" "${version}" "${extraconfrules}"
  251. }
  252. function build_conf() {
  253. local pkgname="${1}"
  254. local version="${2}"
  255. local extraconfrules="${3}"
  256. local pkgdir="${PAWPAW_BUILDDIR}/${pkgname}-${version}"
  257. _prebuild "${pkgname}" "${pkgdir}"
  258. if [ ! -f "${pkgdir}/.stamp_configured" ]; then
  259. pushd "${pkgdir}"
  260. ./configure ${extraconfrules}
  261. touch .stamp_configured
  262. popd
  263. fi
  264. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  265. pushd "${pkgdir}"
  266. make ${MAKE_ARGS} ${EXTRA_MAKE_ARGS}
  267. touch .stamp_built
  268. popd
  269. fi
  270. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  271. pushd "${pkgdir}"
  272. make ${MAKE_ARGS} -j 1 install
  273. touch .stamp_installed
  274. popd
  275. fi
  276. _postbuild
  277. }
  278. function build_cmake() {
  279. local pkgname="${1}"
  280. local version="${2}"
  281. local extraconfrules="${3}"
  282. local pkgdir="${PAWPAW_BUILDDIR}/${pkgname}-${version}"
  283. _prebuild "${pkgname}" "${pkgdir}"
  284. mkdir -p "${pkgdir}/build"
  285. if [ "${WASM}" -eq 1 ]; then
  286. CMAKE_EXE_WRAPPER="emcmake"
  287. elif [ "${CROSS_COMPILING}" -eq 1 ]; then
  288. local CMAKE_AR=$(which ${TARGET_AR})
  289. local CMAKE_RANLIB=$(which ${TARGET_RANLIB})
  290. extraconfrules+=" -DCMAKE_CROSSCOMPILING=ON"
  291. extraconfrules+=" -DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME}"
  292. extraconfrules+=" -DCMAKE_SYSTEM_PROCESSOR=${CMAKE_SYSTEM_PROCESSOR}"
  293. extraconfrules+=" -DCMAKE_AR=${CMAKE_AR}"
  294. extraconfrules+=" -DCMAKE_C_COMPILER_AR=${CMAKE_AR}"
  295. extraconfrules+=" -DCMAKE_CXX_COMPILER_AR=${CMAKE_AR}"
  296. extraconfrules+=" -DCMAKE_RANLIB=${CMAKE_RANLIB}"
  297. extraconfrules+=" -DCMAKE_C_COMPILER_RANLIB=${CMAKE_RANLIB}"
  298. extraconfrules+=" -DCMAKE_CXX_COMPILER_RANLIB=${CMAKE_RANLIB}"
  299. if [ -n "${EXE_WRAPPER}" ]; then
  300. extraconfrules+=" -DCMAKE_CROSSCOMPILING_EMULATOR=${EXE_WRAPPER}"
  301. fi
  302. fi
  303. if [ "${MACOS}" -eq 1 ]; then
  304. extraconfrules+=" -DCMAKE_OSX_SYSROOT=macosx"
  305. if [ "${MACOS_10_15}" -eq 1 ]; then
  306. extraconfrules+=" -DCMAKE_OSX_DEPLOYMENT_TARGET=10.15"
  307. elif [ "${MACOS_UNIVERSAL}" -eq 1 ]; then
  308. extraconfrules+=" -DCMAKE_OSX_DEPLOYMENT_TARGET=10.12"
  309. else
  310. extraconfrules+=" -DCMAKE_OSX_DEPLOYMENT_TARGET=10.8"
  311. fi
  312. if [ "${MACOS_UNIVERSAL}" -eq 1 ]; then
  313. extraconfrules+=" -DCMAKE_OSX_ARCHITECTURES='arm64;x86_64'"
  314. else
  315. extraconfrules+=" -DCMAKE_OSX_ARCHITECTURES=x86_64"
  316. fi
  317. elif [ "${WIN32}" -eq 1 ]; then
  318. extraconfrules+=" -DCMAKE_RC_COMPILER=${WINDRES}"
  319. fi
  320. if [ -n "${PAWPAW_DEBUG}" ] && [ "${PAWPAW_DEBUG}" -eq 1 ]; then
  321. extraconfrules+=" -DCMAKE_BUILD_TYPE=Debug -DCMAKE_DEBUG_POSTFIX="
  322. else
  323. extraconfrules+=" -DCMAKE_BUILD_TYPE=Release"
  324. fi
  325. extraconfrules+=" -DCMAKE_POLICY_VERSION_MINIMUM=3.5"
  326. if [ ! -f "${pkgdir}/.stamp_configured" ]; then
  327. pushd "${pkgdir}/build"
  328. ${CMAKE_EXE_WRAPPER} ${cmake} -DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_PREFIX="${PAWPAW_PREFIX}" ${extraconfrules} ..
  329. touch ../.stamp_configured
  330. popd
  331. fi
  332. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  333. pushd "${pkgdir}/build"
  334. make ${MAKE_ARGS} ${EXTRA_MAKE_ARGS}
  335. touch ../.stamp_built
  336. popd
  337. fi
  338. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  339. pushd "${pkgdir}/build"
  340. make ${MAKE_ARGS} -j 1 install
  341. touch ../.stamp_installed
  342. popd
  343. fi
  344. _postbuild
  345. }
  346. function build_make() {
  347. local pkgname="${1}"
  348. local version="${2}"
  349. local extraconfrules="${3}"
  350. local pkgdir="${PAWPAW_BUILDDIR}/${pkgname}-${version}"
  351. _prebuild "${pkgname}" "${pkgdir}"
  352. touch "${pkgdir}/.stamp_configured"
  353. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  354. pushd "${pkgdir}"
  355. make PREFIX="${PAWPAW_PREFIX}" PKG_CONFIG="${TARGET_PKG_CONFIG}" ${MAKE_ARGS} ${extraconfrules}
  356. touch .stamp_built
  357. popd
  358. fi
  359. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  360. pushd "${pkgdir}"
  361. make PREFIX="${PAWPAW_PREFIX}" PKG_CONFIG="${TARGET_PKG_CONFIG}" ${MAKE_ARGS} ${extraconfrules} -j 1 install
  362. touch .stamp_installed
  363. popd
  364. fi
  365. _postbuild
  366. }
  367. function build_meson() {
  368. local pkgname="${1}"
  369. local version="${2}"
  370. local extraconfrules="${3}"
  371. local pkgdir="${PAWPAW_BUILDDIR}/${pkgname}-${version}"
  372. if [ "${CROSS_COMPILING}" -eq 1 ]; then
  373. extraconfrules+=" --cross-file ${PAWPAW_ROOT}/setup/meson/${PAWPAW_TARGET}.ini"
  374. fi
  375. if [ -n "${PAWPAW_DEBUG}" ] && [ "${PAWPAW_DEBUG}" -eq 1 ]; then
  376. extraconfrules+=" --buildtype debug"
  377. else
  378. extraconfrules+=" --buildtype release"
  379. fi
  380. _prebuild "${pkgname}" "${pkgdir}"
  381. if [ ! -f "${pkgdir}/.stamp_configured" ]; then
  382. pushd "${pkgdir}"
  383. env NINJA="${ninja}" ${meson} setup build --prefix "${PAWPAW_PREFIX}" --libdir lib ${extraconfrules}
  384. touch .stamp_configured
  385. popd
  386. fi
  387. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  388. pushd "${pkgdir}"
  389. ${ninja} -v -C build
  390. touch .stamp_built
  391. popd
  392. fi
  393. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  394. pushd "${pkgdir}"
  395. ${ninja} -C build install
  396. touch .stamp_installed
  397. popd
  398. fi
  399. _postbuild
  400. }
  401. function build_python() {
  402. local pkgname="${1}"
  403. local version="${2}"
  404. local extraconfrules="${3}"
  405. local pkgdir="${PAWPAW_BUILDDIR}/${pkgname}-${version}"
  406. local python="python$(echo ${PYTHON_VERSION} | cut -b 1,2,3)"
  407. _prebuild "${pkgname}" "${pkgdir}"
  408. # remove flags not compatible with python
  409. export CFLAGS="$(echo ${CFLAGS} | sed -e 's/-fvisibility=hidden//')"
  410. export CFLAGS="$(echo ${CFLAGS} | sed -e 's/-fdata-sections -ffunction-sections//')"
  411. export CFLAGS="$(echo ${CFLAGS} | sed -e 's/-ffast-math//')"
  412. export CFLAGS="$(echo ${CFLAGS} | sed -e 's/-fno-finite-math-only//')"
  413. export CFLAGS="$(echo ${CFLAGS} | sed -e 's/-fno-strict-aliasing -flto//')"
  414. export CXXFLAGS="$(echo ${CXXFLAGS} | sed -e 's/-fvisibility=hidden//')"
  415. export CXXFLAGS="$(echo ${CXXFLAGS} | sed -e 's/-fvisibility-inlines-hidden//')"
  416. export CXXFLAGS="$(echo ${CXXFLAGS} | sed -e 's/-fdata-sections -ffunction-sections//')"
  417. export CXXFLAGS="$(echo ${CXXFLAGS} | sed -e 's/-ffast-math//')"
  418. export CXXFLAGS="$(echo ${CXXFLAGS} | sed -e 's/-fno-finite-math-only//')"
  419. export CXXFLAGS="$(echo ${CXXFLAGS} | sed -e 's/-fno-strict-aliasing -flto//')"
  420. export LDFLAGS="$(echo ${LDFLAGS} | sed -e 's/-Wl,-dead_strip,-dead_strip_dylibs,-x//')"
  421. export LDFLAGS="$(echo ${LDFLAGS} | sed -e 's/-Wl,--gc-sections,--no-undefined//')"
  422. export LDFLAGS="$(echo ${LDFLAGS} | sed -e 's/-Wl,-O1//')"
  423. export LDFLAGS="$(echo ${LDFLAGS} | sed -e 's/-Wl,--as-needed,--strip-all//')"
  424. export LDFLAGS="$(echo ${LDFLAGS} | sed -e 's/-fdata-sections -ffunction-sections//')"
  425. export LDFLAGS="$(echo ${LDFLAGS} | sed -e 's/-fno-strict-aliasing -flto//')"
  426. # add host/native binaries to path
  427. if [ "${CROSS_COMPILING}" -eq 1 ]; then
  428. export PATH="${PAWPAW_PREFIX}-host/bin:${PATH}"
  429. elif [ "${LINUX}" -eq 1 ]; then
  430. export LD_LIBRARY_PATH="${PAWPAW_PREFIX}/lib"
  431. fi
  432. touch "${pkgdir}/.stamp_configured"
  433. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  434. pushd "${pkgdir}"
  435. ${python} setup.py build_ext ${extraconfrules} --verbose
  436. touch .stamp_built
  437. popd
  438. fi
  439. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  440. pushd "${pkgdir}"
  441. # always try twice, python checks for installed deps and fails the first time
  442. ${python} setup.py install --prefix="${PAWPAW_PREFIX}" --verbose || \
  443. ${python} setup.py install --prefix="${PAWPAW_PREFIX}" --verbose || true
  444. touch .stamp_installed
  445. popd
  446. fi
  447. if [ "${CROSS_COMPILING}" -eq 0 ] && [ "${LINUX}" -eq 1 ]; then
  448. unset LD_LIBRARY_PATH
  449. fi
  450. _postbuild
  451. }
  452. function build_qmake() {
  453. local pkgname="${1}"
  454. local version="${2}"
  455. local extraconfrules="${3}"
  456. local pkgdir="${PAWPAW_BUILDDIR}/${pkgname}-${version}"
  457. _prebuild "${pkgname}" "${pkgdir}"
  458. # if [ "${CROSS_COMPILING}" -eq 1 ]; then
  459. # export PKG_CONFIG_LIBDIR="${TARGET_PKG_CONFIG_PATH}"
  460. # export PKG_CONFIG_SYSROOT_DIR="/"
  461. # fi
  462. if [ ! -f "${pkgdir}/.stamp_configured" ]; then
  463. pushd "${pkgdir}"
  464. qmake ${extraconfrules}
  465. touch .stamp_configured
  466. popd
  467. fi
  468. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  469. pushd "${pkgdir}"
  470. make ${MAKE_ARGS} ${EXTRA_MAKE_ARGS}
  471. touch .stamp_built
  472. popd
  473. fi
  474. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  475. pushd "${pkgdir}"
  476. make ${MAKE_ARGS} -j 1 install
  477. touch .stamp_installed
  478. popd
  479. fi
  480. # unset PKG_CONFIG_LIBDIR
  481. # unset PKG_CONFIG_SYSROOT_DIR
  482. _postbuild
  483. }
  484. function build_waf() {
  485. local pkgname="${1}"
  486. local version="${2}"
  487. local extraconfrules="${3}"
  488. local pkgdir="${PAWPAW_BUILDDIR}/${pkgname}-${version}"
  489. local python=python3
  490. if ! which python3 > /dev/null; then
  491. python=python
  492. fi
  493. if [ "${CROSS_COMPILING}" -eq 0 ] && [ "${LINUX}" -eq 1 ]; then
  494. export LD_LIBRARY_PATH="${PAWPAW_PREFIX}/lib"
  495. fi
  496. _prebuild "${pkgname}" "${pkgdir}"
  497. if [ ! -f "${pkgdir}/.stamp_configured" ]; then
  498. pushd "${pkgdir}"
  499. ${python} waf configure --prefix="${PAWPAW_PREFIX}" ${extraconfrules}
  500. touch .stamp_configured
  501. popd
  502. fi
  503. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  504. pushd "${pkgdir}"
  505. ${python} waf build ${WAF_ARGS}
  506. touch .stamp_built
  507. popd
  508. fi
  509. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  510. pushd "${pkgdir}"
  511. ${python} waf install ${WAF_ARGS} --prefix="${PAWPAW_PREFIX}" ${extraconfrules} -j 1
  512. rm -f ${PAWPAW_PREFIX}/lib/lv2/*/*.a
  513. touch .stamp_installed
  514. popd
  515. fi
  516. if [ "${CROSS_COMPILING}" -eq 0 ] && [ "${LINUX}" -eq 1 ]; then
  517. unset LD_LIBRARY_PATH
  518. fi
  519. _postbuild
  520. }
  521. # ---------------------------------------------------------------------------------------------------------------------
  522. function run_make() {
  523. local pkgname="${1}"
  524. local version="${2}"
  525. local makerule="${3}"
  526. local pkgdir="${PAWPAW_BUILDDIR}/${pkgname}-${version}"
  527. _prebuild "${pkgname}" "${pkgdir}"
  528. if [ ! -f "${pkgdir}/.stamp_custom_run" ] && [ ! -f "${pkgdir}/.stamp_cleanup" ]; then
  529. pushd "${pkgdir}"
  530. make ${MAKE_ARGS} ${makerule}
  531. touch .stamp_custom_run
  532. popd
  533. fi
  534. _postbuild
  535. }
  536. # ---------------------------------------------------------------------------------------------------------------------
  537. function build_host_autoconf() {
  538. local pkgname="${1}"
  539. local version="${2}"
  540. local extraconfrules="${3}"
  541. local pkgdir="${PAWPAW_BUILDDIR}/${pkgname}-${version}"
  542. unset AR
  543. unset CC
  544. unset CXX
  545. unset LD
  546. unset STRIP
  547. unset CPPFLAGS
  548. export CFLAGS="${EXTRA_CFLAGS}"
  549. export CXXFLAGS="${EXTRA_CXXFLAGS}"
  550. export LDFLAGS="${EXTRA_LDFLAGS}"
  551. if [ -e "${PAWPAW_ROOT}/patches/${pkgname}" ] && [ ! -f "${pkgdir}/.stamp_cleanup" ] && [ ! -f "${pkgdir}/.stamp_configured" ]; then
  552. local patchtargets="${PAWPAW_TARGET}"
  553. if [[ "${PAWPAW_TARGET}" = "linux-"* ]]; then
  554. patchtargets+=" linux"
  555. elif [ "${PAWPAW_TARGET}" = "macos-universal-10.15" ]; then
  556. patchtargets+=" macos-10.15 macos-universal"
  557. elif [ "${PAWPAW_TARGET}" = "win64" ]; then
  558. patchtargets+=" win32"
  559. fi
  560. for target in ${patchtargets[@]}; do
  561. if [ -e "${PAWPAW_ROOT}/patches/${pkgname}/${target}" ]; then
  562. for p in $(ls "${PAWPAW_ROOT}/patches/${pkgname}/${target}/" | grep "\.patch$" | sort); do
  563. if [ ! -f "${pkgdir}/.stamp_applied_${p}" ]; then
  564. patch -p1 -d "${pkgdir}" -i "${PAWPAW_ROOT}/patches/${pkgname}/${target}/${p}"
  565. touch "${pkgdir}/.stamp_applied_${p}"
  566. fi
  567. done
  568. fi
  569. done
  570. for p in $(ls "${PAWPAW_ROOT}/patches/${pkgname}/" | grep "\.patch$" | sort); do
  571. if [ ! -f "${pkgdir}/.stamp_applied_${p}" ]; then
  572. patch -p1 -d "${pkgdir}" -i "${PAWPAW_ROOT}/patches/${pkgname}/${p}"
  573. touch "${pkgdir}/.stamp_applied_${p}"
  574. fi
  575. done
  576. fi
  577. if [ ! -f "${pkgdir}/.stamp_configured" ]; then
  578. pushd "${pkgdir}"
  579. ./configure --enable-static --disable-shared --disable-maintainer-mode --prefix="${PAWPAW_PREFIX}" ${extraconfrules}
  580. touch .stamp_configured
  581. popd
  582. fi
  583. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  584. pushd "${pkgdir}"
  585. make ${MAKE_ARGS}
  586. touch .stamp_built
  587. popd
  588. fi
  589. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  590. pushd "${pkgdir}"
  591. make ${MAKE_ARGS} install -j 1
  592. touch .stamp_installed
  593. popd
  594. fi
  595. unset CFLAGS
  596. unset CXXFLAGS
  597. unset LDFLAGS
  598. }
  599. function build_host_cmake() {
  600. local pkgname="${1}"
  601. local version="${2}"
  602. local extraconfrules="${3}"
  603. local pkgdir="${PAWPAW_BUILDDIR}/${pkgname}-${version}"
  604. unset AR
  605. unset CC
  606. unset CXX
  607. unset LD
  608. unset STRIP
  609. unset CFLAGS
  610. unset CPPFLAGS
  611. unset CXXFLAGS
  612. unset LDFLAGS
  613. if [ -e "${PAWPAW_ROOT}/patches/${pkgname}" ] && [ ! -f "${pkgdir}/.stamp_cleanup" ] && [ ! -f "${pkgdir}/.stamp_configured" ]; then
  614. local patchtargets="${PAWPAW_TARGET}"
  615. if [[ "${PAWPAW_TARGET}" = "linux-"* ]]; then
  616. patchtargets+=" linux"
  617. elif [ "${PAWPAW_TARGET}" = "macos-universal-10.15" ]; then
  618. patchtargets+=" macos-10.15 macos-universal"
  619. elif [ "${PAWPAW_TARGET}" = "win64" ]; then
  620. patchtargets+=" win32"
  621. fi
  622. for target in ${patchtargets[@]}; do
  623. if [ -e "${PAWPAW_ROOT}/patches/${pkgname}/${target}" ]; then
  624. for p in $(ls "${PAWPAW_ROOT}/patches/${pkgname}/${target}/" | grep "\.patch$" | sort); do
  625. if [ ! -f "${pkgdir}/.stamp_applied_${p}" ]; then
  626. patch -p1 -d "${pkgdir}" -i "${PAWPAW_ROOT}/patches/${pkgname}/${target}/${p}"
  627. touch "${pkgdir}/.stamp_applied_${p}"
  628. fi
  629. done
  630. fi
  631. done
  632. for p in $(ls "${PAWPAW_ROOT}/patches/${pkgname}/" | grep "\.patch$" | sort); do
  633. if [ ! -f "${pkgdir}/.stamp_applied_${p}" ]; then
  634. patch -p1 -d "${pkgdir}" -i "${PAWPAW_ROOT}/patches/${pkgname}/${p}"
  635. touch "${pkgdir}/.stamp_applied_${p}"
  636. fi
  637. done
  638. fi
  639. mkdir -p "${pkgdir}/build"
  640. if [ ! -f "${pkgdir}/.stamp_configured" ]; then
  641. pushd "${pkgdir}/build"
  642. ${CMAKE_EXE_WRAPPER} ${cmake} \
  643. -DCMAKE_BUILD_TYPE=Release \
  644. -DCMAKE_INSTALL_LIBDIR=lib \
  645. -DCMAKE_INSTALL_PREFIX="${PAWPAW_PREFIX}-host" \
  646. -DCMAKE_MODULE_PATH="${PAWPAW_PREFIX}-host/lib/cmake" \
  647. -DBUILD_SHARED_LIBS=OFF \
  648. ${extraconfrules} ..
  649. touch ../.stamp_configured
  650. popd
  651. fi
  652. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  653. pushd "${pkgdir}/build"
  654. make ${MAKE_ARGS} ${EXTRA_MAKE_ARGS}
  655. touch ../.stamp_built
  656. popd
  657. fi
  658. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  659. pushd "${pkgdir}/build"
  660. make ${MAKE_ARGS} -j 1 install
  661. touch ../.stamp_installed
  662. popd
  663. fi
  664. }
  665. # ---------------------------------------------------------------------------------------------------------------------
  666. function patch_file() {
  667. local pkgname="${1}"
  668. local version="${2}"
  669. local file="${3}"
  670. local rule="${4}"
  671. local pkgdir="${PAWPAW_BUILDDIR}/${pkgname}-${version}"
  672. if [ -e "${pkgdir}/${file}" ]; then
  673. sed -i -e "${rule}" "${pkgdir}/${file}"
  674. fi
  675. }
  676. function copy_file() {
  677. local pkgname="${1}"
  678. local version="${2}"
  679. local source="${3}"
  680. local target="${4}"
  681. local pkgdir="${PAWPAW_BUILDDIR}/${pkgname}-${version}"
  682. if [ ! -e "${pkgdir}/${target}" ] || [ "${source}" -nt "${target}" ]; then
  683. pushd "${pkgdir}"
  684. cp -v "${source}" "${target}"
  685. popd
  686. fi
  687. }
  688. function install_file() {
  689. local pkgname="${1}"
  690. local version="${2}"
  691. local source="${3}"
  692. local targetdir="${4}"
  693. local targetname="${5}"
  694. if [ -z "${targetname}" ]; then
  695. targetname="$(basename ${source})"
  696. fi
  697. local pkgdir="${PAWPAW_BUILDDIR}/${pkgname}-${version}"
  698. if [ ! -e "${PAWPAW_PREFIX}/${targetdir}/${targetname}" ]; then
  699. pushd "${pkgdir}"
  700. cp -v "${source}" "${PAWPAW_PREFIX}/${targetdir}/${targetname}"
  701. popd
  702. fi
  703. }
  704. function link_file() {
  705. local pkgname="${1}"
  706. local version="${2}"
  707. local source="${3}"
  708. local target="${4}"
  709. local pkgdir="${PAWPAW_BUILDDIR}/${pkgname}-${version}"
  710. if [ ! -e "${pkgdir}/${target}" ]; then
  711. pushd "${pkgdir}"
  712. ln -sfv "${source}" "${target}"
  713. popd
  714. fi
  715. }
  716. function link_host_file() {
  717. local pkgname="${1}"
  718. local version="${2}"
  719. local source="${3}"
  720. local target="${4}"
  721. local pkgdir="${PAWPAW_BUILDDIR}/${pkgname}-${version}"
  722. if [ ! -e "${PAWPAW_PREFIX}-host/${target}" ]; then
  723. ln -sfv "${source}" "${PAWPAW_PREFIX}-host/${target}"
  724. fi
  725. }
  726. function link_target_file() {
  727. local pkgname="${1}"
  728. local version="${2}"
  729. local source="${3}"
  730. local target="${4}"
  731. local pkgdir="${PAWPAW_BUILDDIR}/${pkgname}-${version}"
  732. if [ ! -e "${PAWPAW_PREFIX}/${target}" ]; then
  733. ln -sfv "${source}" "${PAWPAW_PREFIX}/${target}"
  734. fi
  735. }
  736. function remove_file() {
  737. local pkgname="${1}"
  738. local version="${2}"
  739. local file="${3}"
  740. local pkgdir="${PAWPAW_BUILDDIR}/${pkgname}-${version}"
  741. if [ -e "${pkgdir}/${file}" ]; then
  742. rm -fv "${pkgdir}/${file}"
  743. fi
  744. }
  745. # ---------------------------------------------------------------------------------------------------------------------
  746. function patch_osx_binary_libs() {
  747. local file="${1}"
  748. if [ -L "${file}" ]; then
  749. return 0
  750. fi
  751. idname=$(otool -D "${file}")
  752. if otool -L "${file}" | grep -v ":" | grep -v "${idname}" | grep -q "${PAWPAW_PREFIX}"; then
  753. #install_name_tool -change "@rpath/QtCore.framework/Versions/5/QtCore" "@executable_path/QtCore" "${file}"
  754. #install_name_tool -change "@rpath/QtGui.framework/Versions/5/QtGui" "@executable_path/QtGui" "${file}"
  755. #install_name_tool -change "@rpath/QtWidgets.framework/Versions/5/QtWidgets" "@executable_path/QtWidgets" "${file}"
  756. #install_name_tool -change "@rpath/QtXml.framework/Versions/5/QtXml" "@executable_path/QtXml" "${file}"
  757. install_name_tool -change "@executable_path/../Frameworks/libjack.0.dylib" "/usr/local/lib/libjack.0.dylib" "${file}"
  758. install_name_tool -change "${PAWPAW_PREFIX}/jack2/lib/libjack.0.dylib" "/usr/local/lib/libjack.0.dylib" "${file}"
  759. install_name_tool -change "${PAWPAW_PREFIX}/jack2/lib/libjacknet.0.dylib" "/usr/local/lib/libjacknet.0.dylib" "${file}"
  760. install_name_tool -change "${PAWPAW_PREFIX}/jack2/lib/libjackserver.0.dylib" "/usr/local/lib/libjackserver.0.dylib" "${file}"
  761. fi
  762. }
  763. function patch_osx_qtapp() {
  764. local pkgname="${1}"
  765. local version="${2}"
  766. local appfile="${3}"
  767. local pkgdir="${PAWPAW_BUILDDIR}/${pkgname}-${version}"
  768. _prebuild "${pkgname}" "${pkgdir}"
  769. mkdir -p "${appfile}/Contents/PlugIns/platforms"
  770. mkdir -p "${appfile}/Contents/PlugIns/printsupport"
  771. cp -v "${PAWPAW_PREFIX}/lib/qt5/plugins/platforms/libqcocoa.dylib" "${appfile}/Contents/PlugIns/platforms/"
  772. cp -v "${PAWPAW_PREFIX}/lib/qt5/plugins/printsupport/libcocoaprintersupport.dylib" "${appfile}/Contents/PlugIns/printsupport/"
  773. macdeployqt "${appfile}"
  774. rm -f "${appfile}/Contents/Frameworks/libjack.0.1.0.dylib"
  775. _postbuild
  776. }
  777. # ---------------------------------------------------------------------------------------------------------------------