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.

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