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.

799 lines
24KB

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