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.

949 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 [ "${WASM}" -eq 1 ]; then
  188. extraconfrules+=" --host=$(uname -m)-linux-gnu"
  189. elif [ -n "${TOOLCHAIN_PREFIX}" ]; then
  190. extraconfrules+=" --host=${TOOLCHAIN_PREFIX} ac_cv_build=$(uname -m)-linux-gnu ac_cv_host=${TOOLCHAIN_PREFIX}"
  191. fi
  192. if echo "${extraconfrules}" | grep -q -e '--enable-debug' -e '--disable-debug'; then
  193. true
  194. elif [ -n "${PAWPAW_DEBUG}" ] && [ "${PAWPAW_DEBUG}" -eq 1 ]; then
  195. extraconfrules+=" --enable-debug"
  196. else
  197. extraconfrules+=" --disable-debug"
  198. fi
  199. _prebuild "${pkgname}" "${pkgdir}"
  200. if [ ! -f "${pkgdir}/.stamp_configured" ]; then
  201. pushd "${pkgdir}"
  202. ./configure --enable-static --disable-shared --disable-doc --disable-docs --disable-maintainer-mode --prefix="${PAWPAW_PREFIX}" ${extraconfrules}
  203. touch .stamp_configured
  204. popd
  205. fi
  206. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  207. pushd "${pkgdir}"
  208. make ${MAKE_ARGS} ${EXTRA_MAKE_ARGS}
  209. touch .stamp_built
  210. popd
  211. fi
  212. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  213. pushd "${pkgdir}"
  214. make ${MAKE_ARGS} install -j 1
  215. touch .stamp_installed
  216. popd
  217. fi
  218. _postbuild
  219. }
  220. function build_autoconfgen() {
  221. local pkgname="${1}"
  222. local version="${2}"
  223. local extraconfrules="${3}"
  224. local pkgdir="${PAWPAW_BUILDDIR}/${pkgname}-${version}"
  225. local EXTRA_CFLAGS2="${EXTRA_CFLAGS}"
  226. local EXTRA_CXXFLAGS2="${EXTRA_CXXFLAGS}"
  227. local EXTRA_LDFLAGS2="${EXTRA_LDFLAGS}"
  228. local EXTRA_MAKE_ARGS2="${EXTRA_MAKE_ARGS}"
  229. _prebuild "${pkgname}" "${pkgdir}"
  230. if [ ! -f "${pkgdir}/.stamp_preconfigured" ]; then
  231. pushd "${pkgdir}"
  232. if [ -f utils/autogen.sh ]; then
  233. ./utils/autogen.sh
  234. else
  235. ${autoconf}
  236. fi
  237. touch .stamp_preconfigured
  238. popd
  239. fi
  240. _postbuild
  241. export EXTRA_CFLAGS="${EXTRA_CFLAGS2}"
  242. export EXTRA_CXXFLAGS="${EXTRA_CXXFLAGS2}"
  243. export EXTRA_LDFLAGS="${EXTRA_LDFLAGS2}"
  244. export EXTRA_MAKE_ARGS="${EXTRA_MAKE_ARGS2}"
  245. build_autoconf "${pkgname}" "${version}" "${extraconfrules}"
  246. }
  247. function build_conf() {
  248. local pkgname="${1}"
  249. local version="${2}"
  250. local extraconfrules="${3}"
  251. local pkgdir="${PAWPAW_BUILDDIR}/${pkgname}-${version}"
  252. _prebuild "${pkgname}" "${pkgdir}"
  253. if [ ! -f "${pkgdir}/.stamp_configured" ]; then
  254. pushd "${pkgdir}"
  255. ./configure ${extraconfrules}
  256. touch .stamp_configured
  257. popd
  258. fi
  259. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  260. pushd "${pkgdir}"
  261. make ${MAKE_ARGS} ${EXTRA_MAKE_ARGS}
  262. touch .stamp_built
  263. popd
  264. fi
  265. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  266. pushd "${pkgdir}"
  267. make ${MAKE_ARGS} -j 1 install
  268. touch .stamp_installed
  269. popd
  270. fi
  271. _postbuild
  272. }
  273. function build_cmake() {
  274. local pkgname="${1}"
  275. local version="${2}"
  276. local extraconfrules="${3}"
  277. local pkgdir="${PAWPAW_BUILDDIR}/${pkgname}-${version}"
  278. _prebuild "${pkgname}" "${pkgdir}"
  279. mkdir -p "${pkgdir}/build"
  280. if [ "${WASM}" -eq 1 ]; then
  281. CMAKE_EXE_WRAPPER="emcmake"
  282. elif [ "${CROSS_COMPILING}" -eq 1 ]; then
  283. local CMAKE_AR=$(which ${TARGET_AR})
  284. local CMAKE_RANLIB=$(which ${TARGET_RANLIB})
  285. extraconfrules+=" -DCMAKE_CROSSCOMPILING=ON"
  286. extraconfrules+=" -DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME}"
  287. extraconfrules+=" -DCMAKE_SYSTEM_PROCESSOR=${CMAKE_SYSTEM_PROCESSOR}"
  288. extraconfrules+=" -DCMAKE_AR=${CMAKE_AR}"
  289. extraconfrules+=" -DCMAKE_C_COMPILER_AR=${CMAKE_AR}"
  290. extraconfrules+=" -DCMAKE_CXX_COMPILER_AR=${CMAKE_AR}"
  291. extraconfrules+=" -DCMAKE_RANLIB=${CMAKE_RANLIB}"
  292. extraconfrules+=" -DCMAKE_C_COMPILER_RANLIB=${CMAKE_RANLIB}"
  293. extraconfrules+=" -DCMAKE_CXX_COMPILER_RANLIB=${CMAKE_RANLIB}"
  294. if [ -n "${EXE_WRAPPER}" ]; then
  295. extraconfrules+=" -DCMAKE_CROSSCOMPILING_EMULATOR=${EXE_WRAPPER}"
  296. fi
  297. fi
  298. if [ "${MACOS}" -eq 1 ]; then
  299. extraconfrules+=" -DCMAKE_OSX_SYSROOT=macosx"
  300. if [ "${MACOS_10_15}" -eq 1 ]; then
  301. extraconfrules+=" -DCMAKE_OSX_DEPLOYMENT_TARGET=10.15"
  302. elif [ "${MACOS_UNIVERSAL}" -eq 1 ]; then
  303. extraconfrules+=" -DCMAKE_OSX_DEPLOYMENT_TARGET=10.12"
  304. else
  305. extraconfrules+=" -DCMAKE_OSX_DEPLOYMENT_TARGET=10.8"
  306. fi
  307. if [ "${MACOS_UNIVERSAL}" -eq 1 ]; then
  308. extraconfrules+=" -DCMAKE_OSX_ARCHITECTURES='arm64;x86_64'"
  309. else
  310. extraconfrules+=" -DCMAKE_OSX_ARCHITECTURES=x86_64"
  311. fi
  312. elif [ "${WIN32}" -eq 1 ]; then
  313. extraconfrules+=" -DCMAKE_RC_COMPILER=${WINDRES}"
  314. fi
  315. if [ -n "${PAWPAW_DEBUG}" ] && [ "${PAWPAW_DEBUG}" -eq 1 ]; then
  316. extraconfrules+=" -DCMAKE_BUILD_TYPE=Debug -DCMAKE_DEBUG_POSTFIX="
  317. else
  318. extraconfrules+=" -DCMAKE_BUILD_TYPE=Release"
  319. fi
  320. if [ ! -f "${pkgdir}/.stamp_configured" ]; then
  321. pushd "${pkgdir}/build"
  322. ${CMAKE_EXE_WRAPPER} ${cmake} -DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_PREFIX="${PAWPAW_PREFIX}" ${extraconfrules} ..
  323. touch ../.stamp_configured
  324. popd
  325. fi
  326. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  327. pushd "${pkgdir}/build"
  328. make ${MAKE_ARGS} ${EXTRA_MAKE_ARGS}
  329. touch ../.stamp_built
  330. popd
  331. fi
  332. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  333. pushd "${pkgdir}/build"
  334. make ${MAKE_ARGS} -j 1 install
  335. touch ../.stamp_installed
  336. popd
  337. fi
  338. _postbuild
  339. }
  340. function build_make() {
  341. local pkgname="${1}"
  342. local version="${2}"
  343. local extraconfrules="${3}"
  344. local pkgdir="${PAWPAW_BUILDDIR}/${pkgname}-${version}"
  345. _prebuild "${pkgname}" "${pkgdir}"
  346. touch "${pkgdir}/.stamp_configured"
  347. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  348. pushd "${pkgdir}"
  349. make PREFIX="${PAWPAW_PREFIX}" PKG_CONFIG="${TARGET_PKG_CONFIG}" ${MAKE_ARGS} ${extraconfrules}
  350. touch .stamp_built
  351. popd
  352. fi
  353. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  354. pushd "${pkgdir}"
  355. make PREFIX="${PAWPAW_PREFIX}" PKG_CONFIG="${TARGET_PKG_CONFIG}" ${MAKE_ARGS} ${extraconfrules} -j 1 install
  356. touch .stamp_installed
  357. popd
  358. fi
  359. _postbuild
  360. }
  361. function build_meson() {
  362. local pkgname="${1}"
  363. local version="${2}"
  364. local extraconfrules="${3}"
  365. local pkgdir="${PAWPAW_BUILDDIR}/${pkgname}-${version}"
  366. if [ "${CROSS_COMPILING}" -eq 1 ]; then
  367. extraconfrules+=" --cross-file ${PAWPAW_ROOT}/setup/meson/${PAWPAW_TARGET}.ini"
  368. fi
  369. if [ -n "${PAWPAW_DEBUG}" ] && [ "${PAWPAW_DEBUG}" -eq 1 ]; then
  370. extraconfrules+=" --buildtype debug"
  371. else
  372. extraconfrules+=" --buildtype release"
  373. fi
  374. _prebuild "${pkgname}" "${pkgdir}"
  375. if [ ! -f "${pkgdir}/.stamp_configured" ]; then
  376. pushd "${pkgdir}"
  377. env NINJA="${ninja}" ${meson} setup build --prefix "${PAWPAW_PREFIX}" --libdir lib ${extraconfrules}
  378. touch .stamp_configured
  379. popd
  380. fi
  381. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  382. pushd "${pkgdir}"
  383. ${ninja} -v -C build
  384. touch .stamp_built
  385. popd
  386. fi
  387. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  388. pushd "${pkgdir}"
  389. ${ninja} -C build install
  390. touch .stamp_installed
  391. popd
  392. fi
  393. _postbuild
  394. }
  395. function build_python() {
  396. local pkgname="${1}"
  397. local version="${2}"
  398. local extraconfrules="${3}"
  399. local pkgdir="${PAWPAW_BUILDDIR}/${pkgname}-${version}"
  400. local python="python$(echo ${PYTHON_VERSION} | cut -b 1,2,3)"
  401. _prebuild "${pkgname}" "${pkgdir}"
  402. # remove flags not compatible with python
  403. export CFLAGS="$(echo ${CFLAGS} | sed -e 's/-fvisibility=hidden//')"
  404. export CFLAGS="$(echo ${CFLAGS} | sed -e 's/-fdata-sections -ffunction-sections//')"
  405. export CFLAGS="$(echo ${CFLAGS} | sed -e 's/-ffast-math//')"
  406. export CFLAGS="$(echo ${CFLAGS} | sed -e 's/-fno-finite-math-only//')"
  407. export CFLAGS="$(echo ${CFLAGS} | sed -e 's/-fno-strict-aliasing -flto//')"
  408. export CXXFLAGS="$(echo ${CXXFLAGS} | sed -e 's/-fvisibility=hidden//')"
  409. export CXXFLAGS="$(echo ${CXXFLAGS} | sed -e 's/-fvisibility-inlines-hidden//')"
  410. export CXXFLAGS="$(echo ${CXXFLAGS} | sed -e 's/-fdata-sections -ffunction-sections//')"
  411. export CXXFLAGS="$(echo ${CXXFLAGS} | sed -e 's/-ffast-math//')"
  412. export CXXFLAGS="$(echo ${CXXFLAGS} | sed -e 's/-fno-finite-math-only//')"
  413. export CXXFLAGS="$(echo ${CXXFLAGS} | sed -e 's/-fno-strict-aliasing -flto//')"
  414. export LDFLAGS="$(echo ${LDFLAGS} | sed -e 's/-Wl,-dead_strip,-dead_strip_dylibs,-x//')"
  415. export LDFLAGS="$(echo ${LDFLAGS} | sed -e 's/-Wl,--gc-sections,--no-undefined//')"
  416. export LDFLAGS="$(echo ${LDFLAGS} | sed -e 's/-Wl,-O1//')"
  417. export LDFLAGS="$(echo ${LDFLAGS} | sed -e 's/-Wl,--as-needed,--strip-all//')"
  418. export LDFLAGS="$(echo ${LDFLAGS} | sed -e 's/-fdata-sections -ffunction-sections//')"
  419. export LDFLAGS="$(echo ${LDFLAGS} | sed -e 's/-fno-strict-aliasing -flto//')"
  420. # add host/native binaries to path
  421. if [ "${CROSS_COMPILING}" -eq 1 ]; then
  422. export PATH="${PAWPAW_PREFIX}-host/bin:${PATH}"
  423. elif [ "${LINUX}" -eq 1 ]; then
  424. export LD_LIBRARY_PATH="${PAWPAW_PREFIX}/lib"
  425. fi
  426. touch "${pkgdir}/.stamp_configured"
  427. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  428. pushd "${pkgdir}"
  429. ${python} setup.py build_ext ${extraconfrules} --verbose
  430. touch .stamp_built
  431. popd
  432. fi
  433. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  434. pushd "${pkgdir}"
  435. # always try twice, python checks for installed deps and fails the first time
  436. ${python} setup.py install --prefix="${PAWPAW_PREFIX}" --verbose || \
  437. ${python} setup.py install --prefix="${PAWPAW_PREFIX}" --verbose || true
  438. touch .stamp_installed
  439. popd
  440. fi
  441. if [ "${CROSS_COMPILING}" -eq 0 ] && [ "${LINUX}" -eq 1 ]; then
  442. unset LD_LIBRARY_PATH
  443. fi
  444. _postbuild
  445. }
  446. function build_qmake() {
  447. local pkgname="${1}"
  448. local version="${2}"
  449. local extraconfrules="${3}"
  450. local pkgdir="${PAWPAW_BUILDDIR}/${pkgname}-${version}"
  451. _prebuild "${pkgname}" "${pkgdir}"
  452. # if [ "${CROSS_COMPILING}" -eq 1 ]; then
  453. # export PKG_CONFIG_LIBDIR="${TARGET_PKG_CONFIG_PATH}"
  454. # export PKG_CONFIG_SYSROOT_DIR="/"
  455. # fi
  456. if [ ! -f "${pkgdir}/.stamp_configured" ]; then
  457. pushd "${pkgdir}"
  458. qmake ${extraconfrules}
  459. touch .stamp_configured
  460. popd
  461. fi
  462. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  463. pushd "${pkgdir}"
  464. make ${MAKE_ARGS} ${EXTRA_MAKE_ARGS}
  465. touch .stamp_built
  466. popd
  467. fi
  468. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  469. pushd "${pkgdir}"
  470. make ${MAKE_ARGS} -j 1 install
  471. touch .stamp_installed
  472. popd
  473. fi
  474. # unset PKG_CONFIG_LIBDIR
  475. # unset PKG_CONFIG_SYSROOT_DIR
  476. _postbuild
  477. }
  478. function build_waf() {
  479. local pkgname="${1}"
  480. local version="${2}"
  481. local extraconfrules="${3}"
  482. local pkgdir="${PAWPAW_BUILDDIR}/${pkgname}-${version}"
  483. local python=python3
  484. if ! which python3 > /dev/null; then
  485. python=python
  486. fi
  487. if [ "${CROSS_COMPILING}" -eq 0 ] && [ "${LINUX}" -eq 1 ]; then
  488. export LD_LIBRARY_PATH="${PAWPAW_PREFIX}/lib"
  489. fi
  490. _prebuild "${pkgname}" "${pkgdir}"
  491. if [ ! -f "${pkgdir}/.stamp_configured" ]; then
  492. pushd "${pkgdir}"
  493. ${python} waf configure --prefix="${PAWPAW_PREFIX}" ${extraconfrules}
  494. touch .stamp_configured
  495. popd
  496. fi
  497. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  498. pushd "${pkgdir}"
  499. ${python} waf build ${WAF_ARGS}
  500. touch .stamp_built
  501. popd
  502. fi
  503. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  504. pushd "${pkgdir}"
  505. ${python} waf install ${WAF_ARGS} --prefix="${PAWPAW_PREFIX}" ${extraconfrules} -j 1
  506. rm -f ${PAWPAW_PREFIX}/lib/lv2/*/*.a
  507. touch .stamp_installed
  508. popd
  509. fi
  510. if [ "${CROSS_COMPILING}" -eq 0 ] && [ "${LINUX}" -eq 1 ]; then
  511. unset LD_LIBRARY_PATH
  512. fi
  513. _postbuild
  514. }
  515. # ---------------------------------------------------------------------------------------------------------------------
  516. function run_make() {
  517. local pkgname="${1}"
  518. local version="${2}"
  519. local makerule="${3}"
  520. local pkgdir="${PAWPAW_BUILDDIR}/${pkgname}-${version}"
  521. _prebuild "${pkgname}" "${pkgdir}"
  522. if [ ! -f "${pkgdir}/.stamp_custom_run" ] && [ ! -f "${pkgdir}/.stamp_cleanup" ]; then
  523. pushd "${pkgdir}"
  524. make ${MAKE_ARGS} ${makerule}
  525. touch .stamp_custom_run
  526. popd
  527. fi
  528. _postbuild
  529. }
  530. # ---------------------------------------------------------------------------------------------------------------------
  531. function build_host_autoconf() {
  532. local pkgname="${1}"
  533. local version="${2}"
  534. local extraconfrules="${3}"
  535. local pkgdir="${PAWPAW_BUILDDIR}/${pkgname}-${version}"
  536. unset AR
  537. unset CC
  538. unset CXX
  539. unset LD
  540. unset STRIP
  541. unset CPPFLAGS
  542. export CFLAGS="${EXTRA_CFLAGS}"
  543. export CXXFLAGS="${EXTRA_CXXFLAGS}"
  544. export LDFLAGS="${EXTRA_LDFLAGS}"
  545. if [ -e "${PAWPAW_ROOT}/patches/${pkgname}" ] && [ ! -f "${pkgdir}/.stamp_cleanup" ] && [ ! -f "${pkgdir}/.stamp_configured" ]; then
  546. local patchtargets="${PAWPAW_TARGET}"
  547. if [[ "${PAWPAW_TARGET}" = "linux-"* ]]; then
  548. patchtargets+=" linux"
  549. elif [ "${PAWPAW_TARGET}" = "macos-universal-10.15" ]; then
  550. patchtargets+=" macos-10.15 macos-universal"
  551. elif [ "${PAWPAW_TARGET}" = "win64" ]; then
  552. patchtargets+=" win32"
  553. fi
  554. for target in ${patchtargets[@]}; do
  555. if [ -e "${PAWPAW_ROOT}/patches/${pkgname}/${target}" ]; then
  556. for p in $(ls "${PAWPAW_ROOT}/patches/${pkgname}/${target}/" | grep "\.patch$" | sort); do
  557. if [ ! -f "${pkgdir}/.stamp_applied_${p}" ]; then
  558. patch -p1 -d "${pkgdir}" -i "${PAWPAW_ROOT}/patches/${pkgname}/${target}/${p}"
  559. touch "${pkgdir}/.stamp_applied_${p}"
  560. fi
  561. done
  562. fi
  563. done
  564. for p in $(ls "${PAWPAW_ROOT}/patches/${pkgname}/" | grep "\.patch$" | sort); do
  565. if [ ! -f "${pkgdir}/.stamp_applied_${p}" ]; then
  566. patch -p1 -d "${pkgdir}" -i "${PAWPAW_ROOT}/patches/${pkgname}/${p}"
  567. touch "${pkgdir}/.stamp_applied_${p}"
  568. fi
  569. done
  570. fi
  571. if [ ! -f "${pkgdir}/.stamp_configured" ]; then
  572. pushd "${pkgdir}"
  573. ./configure --enable-static --disable-shared --disable-maintainer-mode --prefix="${PAWPAW_PREFIX}" ${extraconfrules}
  574. touch .stamp_configured
  575. popd
  576. fi
  577. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  578. pushd "${pkgdir}"
  579. make ${MAKE_ARGS}
  580. touch .stamp_built
  581. popd
  582. fi
  583. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  584. pushd "${pkgdir}"
  585. make ${MAKE_ARGS} install -j 1
  586. touch .stamp_installed
  587. popd
  588. fi
  589. unset CFLAGS
  590. unset CXXFLAGS
  591. unset LDFLAGS
  592. }
  593. function build_host_cmake() {
  594. local pkgname="${1}"
  595. local version="${2}"
  596. local extraconfrules="${3}"
  597. local pkgdir="${PAWPAW_BUILDDIR}/${pkgname}-${version}"
  598. unset AR
  599. unset CC
  600. unset CXX
  601. unset LD
  602. unset STRIP
  603. unset CFLAGS
  604. unset CPPFLAGS
  605. unset CXXFLAGS
  606. unset LDFLAGS
  607. if [ -e "${PAWPAW_ROOT}/patches/${pkgname}" ] && [ ! -f "${pkgdir}/.stamp_cleanup" ] && [ ! -f "${pkgdir}/.stamp_configured" ]; then
  608. local patchtargets="${PAWPAW_TARGET}"
  609. if [[ "${PAWPAW_TARGET}" = "linux-"* ]]; then
  610. patchtargets+=" linux"
  611. elif [ "${PAWPAW_TARGET}" = "macos-universal-10.15" ]; then
  612. patchtargets+=" macos-10.15 macos-universal"
  613. elif [ "${PAWPAW_TARGET}" = "win64" ]; then
  614. patchtargets+=" win32"
  615. fi
  616. for target in ${patchtargets[@]}; do
  617. if [ -e "${PAWPAW_ROOT}/patches/${pkgname}/${target}" ]; then
  618. for p in $(ls "${PAWPAW_ROOT}/patches/${pkgname}/${target}/" | grep "\.patch$" | sort); do
  619. if [ ! -f "${pkgdir}/.stamp_applied_${p}" ]; then
  620. patch -p1 -d "${pkgdir}" -i "${PAWPAW_ROOT}/patches/${pkgname}/${target}/${p}"
  621. touch "${pkgdir}/.stamp_applied_${p}"
  622. fi
  623. done
  624. fi
  625. done
  626. for p in $(ls "${PAWPAW_ROOT}/patches/${pkgname}/" | grep "\.patch$" | sort); do
  627. if [ ! -f "${pkgdir}/.stamp_applied_${p}" ]; then
  628. patch -p1 -d "${pkgdir}" -i "${PAWPAW_ROOT}/patches/${pkgname}/${p}"
  629. touch "${pkgdir}/.stamp_applied_${p}"
  630. fi
  631. done
  632. fi
  633. mkdir -p "${pkgdir}/build"
  634. if [ ! -f "${pkgdir}/.stamp_configured" ]; then
  635. pushd "${pkgdir}/build"
  636. ${CMAKE_EXE_WRAPPER} ${cmake} \
  637. -DCMAKE_BUILD_TYPE=Release \
  638. -DCMAKE_INSTALL_LIBDIR=lib \
  639. -DCMAKE_INSTALL_PREFIX="${PAWPAW_PREFIX}-host" \
  640. -DCMAKE_MODULE_PATH="${PAWPAW_PREFIX}-host/lib/cmake" \
  641. -DBUILD_SHARED_LIBS=OFF \
  642. ${extraconfrules} ..
  643. touch ../.stamp_configured
  644. popd
  645. fi
  646. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  647. pushd "${pkgdir}/build"
  648. make ${MAKE_ARGS} ${EXTRA_MAKE_ARGS}
  649. touch ../.stamp_built
  650. popd
  651. fi
  652. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  653. pushd "${pkgdir}/build"
  654. make ${MAKE_ARGS} -j 1 install
  655. touch ../.stamp_installed
  656. popd
  657. fi
  658. }
  659. # ---------------------------------------------------------------------------------------------------------------------
  660. function patch_file() {
  661. local pkgname="${1}"
  662. local version="${2}"
  663. local file="${3}"
  664. local rule="${4}"
  665. local pkgdir="${PAWPAW_BUILDDIR}/${pkgname}-${version}"
  666. if [ -e "${pkgdir}/${file}" ]; then
  667. sed -i -e "${rule}" "${pkgdir}/${file}"
  668. fi
  669. }
  670. function copy_file() {
  671. local pkgname="${1}"
  672. local version="${2}"
  673. local source="${3}"
  674. local target="${4}"
  675. local pkgdir="${PAWPAW_BUILDDIR}/${pkgname}-${version}"
  676. if [ ! -e "${pkgdir}/${target}" ] || [ "${source}" -nt "${target}" ]; then
  677. pushd "${pkgdir}"
  678. cp -v "${source}" "${target}"
  679. popd
  680. fi
  681. }
  682. function install_file() {
  683. local pkgname="${1}"
  684. local version="${2}"
  685. local source="${3}"
  686. local targetdir="${4}"
  687. local targetname="${5}"
  688. if [ -z "${targetname}" ]; then
  689. targetname="$(basename ${source})"
  690. fi
  691. local pkgdir="${PAWPAW_BUILDDIR}/${pkgname}-${version}"
  692. if [ ! -e "${PAWPAW_PREFIX}/${targetdir}/${targetname}" ]; then
  693. pushd "${pkgdir}"
  694. cp -v "${source}" "${PAWPAW_PREFIX}/${targetdir}/${targetname}"
  695. popd
  696. fi
  697. }
  698. function link_file() {
  699. local pkgname="${1}"
  700. local version="${2}"
  701. local source="${3}"
  702. local target="${4}"
  703. local pkgdir="${PAWPAW_BUILDDIR}/${pkgname}-${version}"
  704. if [ ! -e "${pkgdir}/${target}" ]; then
  705. pushd "${pkgdir}"
  706. ln -sfv "${source}" "${target}"
  707. popd
  708. fi
  709. }
  710. function link_host_file() {
  711. local pkgname="${1}"
  712. local version="${2}"
  713. local source="${3}"
  714. local target="${4}"
  715. local pkgdir="${PAWPAW_BUILDDIR}/${pkgname}-${version}"
  716. if [ ! -e "${PAWPAW_PREFIX}-host/${target}" ]; then
  717. ln -sfv "${source}" "${PAWPAW_PREFIX}-host/${target}"
  718. fi
  719. }
  720. function link_target_file() {
  721. local pkgname="${1}"
  722. local version="${2}"
  723. local source="${3}"
  724. local target="${4}"
  725. local pkgdir="${PAWPAW_BUILDDIR}/${pkgname}-${version}"
  726. if [ ! -e "${PAWPAW_PREFIX}/${target}" ]; then
  727. ln -sfv "${source}" "${PAWPAW_PREFIX}/${target}"
  728. fi
  729. }
  730. function remove_file() {
  731. local pkgname="${1}"
  732. local version="${2}"
  733. local file="${3}"
  734. local pkgdir="${PAWPAW_BUILDDIR}/${pkgname}-${version}"
  735. if [ -e "${pkgdir}/${file}" ]; then
  736. rm -fv "${pkgdir}/${file}"
  737. fi
  738. }
  739. # ---------------------------------------------------------------------------------------------------------------------
  740. function patch_osx_binary_libs() {
  741. local file="${1}"
  742. if [ -L "${file}" ]; then
  743. return 0
  744. fi
  745. idname=$(otool -D "${file}")
  746. if otool -L "${file}" | grep -v ":" | grep -v "${idname}" | grep -q "${PAWPAW_PREFIX}"; then
  747. #install_name_tool -change "@rpath/QtCore.framework/Versions/5/QtCore" "@executable_path/QtCore" "${file}"
  748. #install_name_tool -change "@rpath/QtGui.framework/Versions/5/QtGui" "@executable_path/QtGui" "${file}"
  749. #install_name_tool -change "@rpath/QtWidgets.framework/Versions/5/QtWidgets" "@executable_path/QtWidgets" "${file}"
  750. #install_name_tool -change "@rpath/QtXml.framework/Versions/5/QtXml" "@executable_path/QtXml" "${file}"
  751. install_name_tool -change "@executable_path/../Frameworks/libjack.0.dylib" "/usr/local/lib/libjack.0.dylib" "${file}"
  752. install_name_tool -change "${PAWPAW_PREFIX}/jack2/lib/libjack.0.dylib" "/usr/local/lib/libjack.0.dylib" "${file}"
  753. install_name_tool -change "${PAWPAW_PREFIX}/jack2/lib/libjacknet.0.dylib" "/usr/local/lib/libjacknet.0.dylib" "${file}"
  754. install_name_tool -change "${PAWPAW_PREFIX}/jack2/lib/libjackserver.0.dylib" "/usr/local/lib/libjackserver.0.dylib" "${file}"
  755. fi
  756. }
  757. function patch_osx_qtapp() {
  758. local pkgname="${1}"
  759. local version="${2}"
  760. local appfile="${3}"
  761. local pkgdir="${PAWPAW_BUILDDIR}/${pkgname}-${version}"
  762. _prebuild "${pkgname}" "${pkgdir}"
  763. mkdir -p "${appfile}/Contents/PlugIns/platforms"
  764. mkdir -p "${appfile}/Contents/PlugIns/printsupport"
  765. cp -v "${PAWPAW_PREFIX}/lib/qt5/plugins/platforms/libqcocoa.dylib" "${appfile}/Contents/PlugIns/platforms/"
  766. cp -v "${PAWPAW_PREFIX}/lib/qt5/plugins/printsupport/libcocoaprintersupport.dylib" "${appfile}/Contents/PlugIns/printsupport/"
  767. macdeployqt "${appfile}"
  768. rm -f "${appfile}/Contents/Frameworks/libjack.0.1.0.dylib"
  769. _postbuild
  770. }
  771. # ---------------------------------------------------------------------------------------------------------------------