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.

955 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. if [ ! -f "${pkgdir}/.stamp_configured" ]; then
  326. pushd "${pkgdir}/build"
  327. ${CMAKE_EXE_WRAPPER} ${cmake} -DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_PREFIX="${PAWPAW_PREFIX}" ${extraconfrules} ..
  328. touch ../.stamp_configured
  329. popd
  330. fi
  331. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  332. pushd "${pkgdir}/build"
  333. make ${MAKE_ARGS} ${EXTRA_MAKE_ARGS}
  334. touch ../.stamp_built
  335. popd
  336. fi
  337. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  338. pushd "${pkgdir}/build"
  339. make ${MAKE_ARGS} -j 1 install
  340. touch ../.stamp_installed
  341. popd
  342. fi
  343. _postbuild
  344. }
  345. function build_make() {
  346. local pkgname="${1}"
  347. local version="${2}"
  348. local extraconfrules="${3}"
  349. local pkgdir="${PAWPAW_BUILDDIR}/${pkgname}-${version}"
  350. _prebuild "${pkgname}" "${pkgdir}"
  351. touch "${pkgdir}/.stamp_configured"
  352. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  353. pushd "${pkgdir}"
  354. make PREFIX="${PAWPAW_PREFIX}" PKG_CONFIG="${TARGET_PKG_CONFIG}" ${MAKE_ARGS} ${extraconfrules}
  355. touch .stamp_built
  356. popd
  357. fi
  358. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  359. pushd "${pkgdir}"
  360. make PREFIX="${PAWPAW_PREFIX}" PKG_CONFIG="${TARGET_PKG_CONFIG}" ${MAKE_ARGS} ${extraconfrules} -j 1 install
  361. touch .stamp_installed
  362. popd
  363. fi
  364. _postbuild
  365. }
  366. function build_meson() {
  367. local pkgname="${1}"
  368. local version="${2}"
  369. local extraconfrules="${3}"
  370. local pkgdir="${PAWPAW_BUILDDIR}/${pkgname}-${version}"
  371. if [ "${CROSS_COMPILING}" -eq 1 ]; then
  372. extraconfrules+=" --cross-file ${PAWPAW_ROOT}/setup/meson/${PAWPAW_TARGET}.ini"
  373. fi
  374. if [ -n "${PAWPAW_DEBUG}" ] && [ "${PAWPAW_DEBUG}" -eq 1 ]; then
  375. extraconfrules+=" --buildtype debug"
  376. else
  377. extraconfrules+=" --buildtype release"
  378. fi
  379. _prebuild "${pkgname}" "${pkgdir}"
  380. if [ ! -f "${pkgdir}/.stamp_configured" ]; then
  381. pushd "${pkgdir}"
  382. env NINJA="${ninja}" ${meson} setup build --prefix "${PAWPAW_PREFIX}" --libdir lib ${extraconfrules}
  383. touch .stamp_configured
  384. popd
  385. fi
  386. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  387. pushd "${pkgdir}"
  388. ${ninja} -v -C build
  389. touch .stamp_built
  390. popd
  391. fi
  392. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  393. pushd "${pkgdir}"
  394. ${ninja} -C build install
  395. touch .stamp_installed
  396. popd
  397. fi
  398. _postbuild
  399. }
  400. function build_python() {
  401. local pkgname="${1}"
  402. local version="${2}"
  403. local extraconfrules="${3}"
  404. local pkgdir="${PAWPAW_BUILDDIR}/${pkgname}-${version}"
  405. local python="python$(echo ${PYTHON_VERSION} | cut -b 1,2,3)"
  406. _prebuild "${pkgname}" "${pkgdir}"
  407. # remove flags not compatible with python
  408. export CFLAGS="$(echo ${CFLAGS} | sed -e 's/-fvisibility=hidden//')"
  409. export CFLAGS="$(echo ${CFLAGS} | sed -e 's/-fdata-sections -ffunction-sections//')"
  410. export CFLAGS="$(echo ${CFLAGS} | sed -e 's/-ffast-math//')"
  411. export CFLAGS="$(echo ${CFLAGS} | sed -e 's/-fno-finite-math-only//')"
  412. export CFLAGS="$(echo ${CFLAGS} | sed -e 's/-fno-strict-aliasing -flto//')"
  413. export CXXFLAGS="$(echo ${CXXFLAGS} | sed -e 's/-fvisibility=hidden//')"
  414. export CXXFLAGS="$(echo ${CXXFLAGS} | sed -e 's/-fvisibility-inlines-hidden//')"
  415. export CXXFLAGS="$(echo ${CXXFLAGS} | sed -e 's/-fdata-sections -ffunction-sections//')"
  416. export CXXFLAGS="$(echo ${CXXFLAGS} | sed -e 's/-ffast-math//')"
  417. export CXXFLAGS="$(echo ${CXXFLAGS} | sed -e 's/-fno-finite-math-only//')"
  418. export CXXFLAGS="$(echo ${CXXFLAGS} | sed -e 's/-fno-strict-aliasing -flto//')"
  419. export LDFLAGS="$(echo ${LDFLAGS} | sed -e 's/-Wl,-dead_strip,-dead_strip_dylibs,-x//')"
  420. export LDFLAGS="$(echo ${LDFLAGS} | sed -e 's/-Wl,--gc-sections,--no-undefined//')"
  421. export LDFLAGS="$(echo ${LDFLAGS} | sed -e 's/-Wl,-O1//')"
  422. export LDFLAGS="$(echo ${LDFLAGS} | sed -e 's/-Wl,--as-needed,--strip-all//')"
  423. export LDFLAGS="$(echo ${LDFLAGS} | sed -e 's/-fdata-sections -ffunction-sections//')"
  424. export LDFLAGS="$(echo ${LDFLAGS} | sed -e 's/-fno-strict-aliasing -flto//')"
  425. # add host/native binaries to path
  426. if [ "${CROSS_COMPILING}" -eq 1 ]; then
  427. export PATH="${PAWPAW_PREFIX}-host/bin:${PATH}"
  428. elif [ "${LINUX}" -eq 1 ]; then
  429. export LD_LIBRARY_PATH="${PAWPAW_PREFIX}/lib"
  430. fi
  431. touch "${pkgdir}/.stamp_configured"
  432. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  433. pushd "${pkgdir}"
  434. ${python} setup.py build_ext ${extraconfrules} --verbose
  435. touch .stamp_built
  436. popd
  437. fi
  438. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  439. pushd "${pkgdir}"
  440. # always try twice, python checks for installed deps and fails the first time
  441. ${python} setup.py install --prefix="${PAWPAW_PREFIX}" --verbose || \
  442. ${python} setup.py install --prefix="${PAWPAW_PREFIX}" --verbose || true
  443. touch .stamp_installed
  444. popd
  445. fi
  446. if [ "${CROSS_COMPILING}" -eq 0 ] && [ "${LINUX}" -eq 1 ]; then
  447. unset LD_LIBRARY_PATH
  448. fi
  449. _postbuild
  450. }
  451. function build_qmake() {
  452. local pkgname="${1}"
  453. local version="${2}"
  454. local extraconfrules="${3}"
  455. local pkgdir="${PAWPAW_BUILDDIR}/${pkgname}-${version}"
  456. _prebuild "${pkgname}" "${pkgdir}"
  457. # if [ "${CROSS_COMPILING}" -eq 1 ]; then
  458. # export PKG_CONFIG_LIBDIR="${TARGET_PKG_CONFIG_PATH}"
  459. # export PKG_CONFIG_SYSROOT_DIR="/"
  460. # fi
  461. if [ ! -f "${pkgdir}/.stamp_configured" ]; then
  462. pushd "${pkgdir}"
  463. qmake ${extraconfrules}
  464. touch .stamp_configured
  465. popd
  466. fi
  467. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  468. pushd "${pkgdir}"
  469. make ${MAKE_ARGS} ${EXTRA_MAKE_ARGS}
  470. touch .stamp_built
  471. popd
  472. fi
  473. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  474. pushd "${pkgdir}"
  475. make ${MAKE_ARGS} -j 1 install
  476. touch .stamp_installed
  477. popd
  478. fi
  479. # unset PKG_CONFIG_LIBDIR
  480. # unset PKG_CONFIG_SYSROOT_DIR
  481. _postbuild
  482. }
  483. function build_waf() {
  484. local pkgname="${1}"
  485. local version="${2}"
  486. local extraconfrules="${3}"
  487. local pkgdir="${PAWPAW_BUILDDIR}/${pkgname}-${version}"
  488. local python=python3
  489. if ! which python3 > /dev/null; then
  490. python=python
  491. fi
  492. if [ "${CROSS_COMPILING}" -eq 0 ] && [ "${LINUX}" -eq 1 ]; then
  493. export LD_LIBRARY_PATH="${PAWPAW_PREFIX}/lib"
  494. fi
  495. _prebuild "${pkgname}" "${pkgdir}"
  496. if [ ! -f "${pkgdir}/.stamp_configured" ]; then
  497. pushd "${pkgdir}"
  498. ${python} waf configure --prefix="${PAWPAW_PREFIX}" ${extraconfrules}
  499. touch .stamp_configured
  500. popd
  501. fi
  502. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  503. pushd "${pkgdir}"
  504. ${python} waf build ${WAF_ARGS}
  505. touch .stamp_built
  506. popd
  507. fi
  508. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  509. pushd "${pkgdir}"
  510. ${python} waf install ${WAF_ARGS} --prefix="${PAWPAW_PREFIX}" ${extraconfrules} -j 1
  511. rm -f ${PAWPAW_PREFIX}/lib/lv2/*/*.a
  512. touch .stamp_installed
  513. popd
  514. fi
  515. if [ "${CROSS_COMPILING}" -eq 0 ] && [ "${LINUX}" -eq 1 ]; then
  516. unset LD_LIBRARY_PATH
  517. fi
  518. _postbuild
  519. }
  520. # ---------------------------------------------------------------------------------------------------------------------
  521. function run_make() {
  522. local pkgname="${1}"
  523. local version="${2}"
  524. local makerule="${3}"
  525. local pkgdir="${PAWPAW_BUILDDIR}/${pkgname}-${version}"
  526. _prebuild "${pkgname}" "${pkgdir}"
  527. if [ ! -f "${pkgdir}/.stamp_custom_run" ] && [ ! -f "${pkgdir}/.stamp_cleanup" ]; then
  528. pushd "${pkgdir}"
  529. make ${MAKE_ARGS} ${makerule}
  530. touch .stamp_custom_run
  531. popd
  532. fi
  533. _postbuild
  534. }
  535. # ---------------------------------------------------------------------------------------------------------------------
  536. function build_host_autoconf() {
  537. local pkgname="${1}"
  538. local version="${2}"
  539. local extraconfrules="${3}"
  540. local pkgdir="${PAWPAW_BUILDDIR}/${pkgname}-${version}"
  541. unset AR
  542. unset CC
  543. unset CXX
  544. unset LD
  545. unset STRIP
  546. unset CPPFLAGS
  547. export CFLAGS="${EXTRA_CFLAGS}"
  548. export CXXFLAGS="${EXTRA_CXXFLAGS}"
  549. export LDFLAGS="${EXTRA_LDFLAGS}"
  550. if [ -e "${PAWPAW_ROOT}/patches/${pkgname}" ] && [ ! -f "${pkgdir}/.stamp_cleanup" ] && [ ! -f "${pkgdir}/.stamp_configured" ]; then
  551. local patchtargets="${PAWPAW_TARGET}"
  552. if [[ "${PAWPAW_TARGET}" = "linux-"* ]]; then
  553. patchtargets+=" linux"
  554. elif [ "${PAWPAW_TARGET}" = "macos-universal-10.15" ]; then
  555. patchtargets+=" macos-10.15 macos-universal"
  556. elif [ "${PAWPAW_TARGET}" = "win64" ]; then
  557. patchtargets+=" win32"
  558. fi
  559. for target in ${patchtargets[@]}; do
  560. if [ -e "${PAWPAW_ROOT}/patches/${pkgname}/${target}" ]; then
  561. for p in $(ls "${PAWPAW_ROOT}/patches/${pkgname}/${target}/" | grep "\.patch$" | sort); do
  562. if [ ! -f "${pkgdir}/.stamp_applied_${p}" ]; then
  563. patch -p1 -d "${pkgdir}" -i "${PAWPAW_ROOT}/patches/${pkgname}/${target}/${p}"
  564. touch "${pkgdir}/.stamp_applied_${p}"
  565. fi
  566. done
  567. fi
  568. done
  569. for p in $(ls "${PAWPAW_ROOT}/patches/${pkgname}/" | grep "\.patch$" | sort); do
  570. if [ ! -f "${pkgdir}/.stamp_applied_${p}" ]; then
  571. patch -p1 -d "${pkgdir}" -i "${PAWPAW_ROOT}/patches/${pkgname}/${p}"
  572. touch "${pkgdir}/.stamp_applied_${p}"
  573. fi
  574. done
  575. fi
  576. if [ ! -f "${pkgdir}/.stamp_configured" ]; then
  577. pushd "${pkgdir}"
  578. ./configure --enable-static --disable-shared --disable-maintainer-mode --prefix="${PAWPAW_PREFIX}" ${extraconfrules}
  579. touch .stamp_configured
  580. popd
  581. fi
  582. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  583. pushd "${pkgdir}"
  584. make ${MAKE_ARGS}
  585. touch .stamp_built
  586. popd
  587. fi
  588. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  589. pushd "${pkgdir}"
  590. make ${MAKE_ARGS} install -j 1
  591. touch .stamp_installed
  592. popd
  593. fi
  594. unset CFLAGS
  595. unset CXXFLAGS
  596. unset LDFLAGS
  597. }
  598. function build_host_cmake() {
  599. local pkgname="${1}"
  600. local version="${2}"
  601. local extraconfrules="${3}"
  602. local pkgdir="${PAWPAW_BUILDDIR}/${pkgname}-${version}"
  603. unset AR
  604. unset CC
  605. unset CXX
  606. unset LD
  607. unset STRIP
  608. unset CFLAGS
  609. unset CPPFLAGS
  610. unset CXXFLAGS
  611. unset LDFLAGS
  612. if [ -e "${PAWPAW_ROOT}/patches/${pkgname}" ] && [ ! -f "${pkgdir}/.stamp_cleanup" ] && [ ! -f "${pkgdir}/.stamp_configured" ]; then
  613. local patchtargets="${PAWPAW_TARGET}"
  614. if [[ "${PAWPAW_TARGET}" = "linux-"* ]]; then
  615. patchtargets+=" linux"
  616. elif [ "${PAWPAW_TARGET}" = "macos-universal-10.15" ]; then
  617. patchtargets+=" macos-10.15 macos-universal"
  618. elif [ "${PAWPAW_TARGET}" = "win64" ]; then
  619. patchtargets+=" win32"
  620. fi
  621. for target in ${patchtargets[@]}; do
  622. if [ -e "${PAWPAW_ROOT}/patches/${pkgname}/${target}" ]; then
  623. for p in $(ls "${PAWPAW_ROOT}/patches/${pkgname}/${target}/" | grep "\.patch$" | sort); do
  624. if [ ! -f "${pkgdir}/.stamp_applied_${p}" ]; then
  625. patch -p1 -d "${pkgdir}" -i "${PAWPAW_ROOT}/patches/${pkgname}/${target}/${p}"
  626. touch "${pkgdir}/.stamp_applied_${p}"
  627. fi
  628. done
  629. fi
  630. done
  631. for p in $(ls "${PAWPAW_ROOT}/patches/${pkgname}/" | grep "\.patch$" | sort); do
  632. if [ ! -f "${pkgdir}/.stamp_applied_${p}" ]; then
  633. patch -p1 -d "${pkgdir}" -i "${PAWPAW_ROOT}/patches/${pkgname}/${p}"
  634. touch "${pkgdir}/.stamp_applied_${p}"
  635. fi
  636. done
  637. fi
  638. mkdir -p "${pkgdir}/build"
  639. if [ ! -f "${pkgdir}/.stamp_configured" ]; then
  640. pushd "${pkgdir}/build"
  641. ${CMAKE_EXE_WRAPPER} ${cmake} \
  642. -DCMAKE_BUILD_TYPE=Release \
  643. -DCMAKE_INSTALL_LIBDIR=lib \
  644. -DCMAKE_INSTALL_PREFIX="${PAWPAW_PREFIX}-host" \
  645. -DCMAKE_MODULE_PATH="${PAWPAW_PREFIX}-host/lib/cmake" \
  646. -DBUILD_SHARED_LIBS=OFF \
  647. ${extraconfrules} ..
  648. touch ../.stamp_configured
  649. popd
  650. fi
  651. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  652. pushd "${pkgdir}/build"
  653. make ${MAKE_ARGS} ${EXTRA_MAKE_ARGS}
  654. touch ../.stamp_built
  655. popd
  656. fi
  657. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  658. pushd "${pkgdir}/build"
  659. make ${MAKE_ARGS} -j 1 install
  660. touch ../.stamp_installed
  661. popd
  662. fi
  663. }
  664. # ---------------------------------------------------------------------------------------------------------------------
  665. function patch_file() {
  666. local pkgname="${1}"
  667. local version="${2}"
  668. local file="${3}"
  669. local rule="${4}"
  670. local pkgdir="${PAWPAW_BUILDDIR}/${pkgname}-${version}"
  671. if [ -e "${pkgdir}/${file}" ]; then
  672. sed -i -e "${rule}" "${pkgdir}/${file}"
  673. fi
  674. }
  675. function copy_file() {
  676. local pkgname="${1}"
  677. local version="${2}"
  678. local source="${3}"
  679. local target="${4}"
  680. local pkgdir="${PAWPAW_BUILDDIR}/${pkgname}-${version}"
  681. if [ ! -e "${pkgdir}/${target}" ] || [ "${source}" -nt "${target}" ]; then
  682. pushd "${pkgdir}"
  683. cp -v "${source}" "${target}"
  684. popd
  685. fi
  686. }
  687. function install_file() {
  688. local pkgname="${1}"
  689. local version="${2}"
  690. local source="${3}"
  691. local targetdir="${4}"
  692. local targetname="${5}"
  693. if [ -z "${targetname}" ]; then
  694. targetname="$(basename ${source})"
  695. fi
  696. local pkgdir="${PAWPAW_BUILDDIR}/${pkgname}-${version}"
  697. if [ ! -e "${PAWPAW_PREFIX}/${targetdir}/${targetname}" ]; then
  698. pushd "${pkgdir}"
  699. cp -v "${source}" "${PAWPAW_PREFIX}/${targetdir}/${targetname}"
  700. popd
  701. fi
  702. }
  703. function link_file() {
  704. local pkgname="${1}"
  705. local version="${2}"
  706. local source="${3}"
  707. local target="${4}"
  708. local pkgdir="${PAWPAW_BUILDDIR}/${pkgname}-${version}"
  709. if [ ! -e "${pkgdir}/${target}" ]; then
  710. pushd "${pkgdir}"
  711. ln -sfv "${source}" "${target}"
  712. popd
  713. fi
  714. }
  715. function link_host_file() {
  716. local pkgname="${1}"
  717. local version="${2}"
  718. local source="${3}"
  719. local target="${4}"
  720. local pkgdir="${PAWPAW_BUILDDIR}/${pkgname}-${version}"
  721. if [ ! -e "${PAWPAW_PREFIX}-host/${target}" ]; then
  722. ln -sfv "${source}" "${PAWPAW_PREFIX}-host/${target}"
  723. fi
  724. }
  725. function link_target_file() {
  726. local pkgname="${1}"
  727. local version="${2}"
  728. local source="${3}"
  729. local target="${4}"
  730. local pkgdir="${PAWPAW_BUILDDIR}/${pkgname}-${version}"
  731. if [ ! -e "${PAWPAW_PREFIX}/${target}" ]; then
  732. ln -sfv "${source}" "${PAWPAW_PREFIX}/${target}"
  733. fi
  734. }
  735. function remove_file() {
  736. local pkgname="${1}"
  737. local version="${2}"
  738. local file="${3}"
  739. local pkgdir="${PAWPAW_BUILDDIR}/${pkgname}-${version}"
  740. if [ -e "${pkgdir}/${file}" ]; then
  741. rm -fv "${pkgdir}/${file}"
  742. fi
  743. }
  744. # ---------------------------------------------------------------------------------------------------------------------
  745. function patch_osx_binary_libs() {
  746. local file="${1}"
  747. if [ -L "${file}" ]; then
  748. return 0
  749. fi
  750. idname=$(otool -D "${file}")
  751. if otool -L "${file}" | grep -v ":" | grep -v "${idname}" | grep -q "${PAWPAW_PREFIX}"; then
  752. #install_name_tool -change "@rpath/QtCore.framework/Versions/5/QtCore" "@executable_path/QtCore" "${file}"
  753. #install_name_tool -change "@rpath/QtGui.framework/Versions/5/QtGui" "@executable_path/QtGui" "${file}"
  754. #install_name_tool -change "@rpath/QtWidgets.framework/Versions/5/QtWidgets" "@executable_path/QtWidgets" "${file}"
  755. #install_name_tool -change "@rpath/QtXml.framework/Versions/5/QtXml" "@executable_path/QtXml" "${file}"
  756. install_name_tool -change "@executable_path/../Frameworks/libjack.0.dylib" "/usr/local/lib/libjack.0.dylib" "${file}"
  757. install_name_tool -change "${PAWPAW_PREFIX}/jack2/lib/libjack.0.dylib" "/usr/local/lib/libjack.0.dylib" "${file}"
  758. install_name_tool -change "${PAWPAW_PREFIX}/jack2/lib/libjacknet.0.dylib" "/usr/local/lib/libjacknet.0.dylib" "${file}"
  759. install_name_tool -change "${PAWPAW_PREFIX}/jack2/lib/libjackserver.0.dylib" "/usr/local/lib/libjackserver.0.dylib" "${file}"
  760. fi
  761. }
  762. function patch_osx_qtapp() {
  763. local pkgname="${1}"
  764. local version="${2}"
  765. local appfile="${3}"
  766. local pkgdir="${PAWPAW_BUILDDIR}/${pkgname}-${version}"
  767. _prebuild "${pkgname}" "${pkgdir}"
  768. mkdir -p "${appfile}/Contents/PlugIns/platforms"
  769. mkdir -p "${appfile}/Contents/PlugIns/printsupport"
  770. cp -v "${PAWPAW_PREFIX}/lib/qt5/plugins/platforms/libqcocoa.dylib" "${appfile}/Contents/PlugIns/platforms/"
  771. cp -v "${PAWPAW_PREFIX}/lib/qt5/plugins/printsupport/libcocoaprintersupport.dylib" "${appfile}/Contents/PlugIns/printsupport/"
  772. macdeployqt "${appfile}"
  773. rm -f "${appfile}/Contents/Frameworks/libjack.0.1.0.dylib"
  774. _postbuild
  775. }
  776. # ---------------------------------------------------------------------------------------------------------------------