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.

936 lines
28KB

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