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.

608 lines
16KB

  1. #!/bin/bash
  2. # ---------------------------------------------------------------------------------------------------------------------
  3. function download() {
  4. local name="${1}"
  5. local version="${2}"
  6. local dlbaseurl="${3}"
  7. local dlext="${4}"
  8. local dlmethod="${5}"
  9. if [ -z "${dlext}" ]; then
  10. dlext="tar.gz"
  11. fi
  12. local dlfile="${PAWPAW_DOWNLOADDIR}/${name}-${version}.${dlext}"
  13. local dlfolder="${PAWPAW_BUILDDIR}/${name}-${version}"
  14. if [ ! -f "${dlfile}" ]; then
  15. if [ -n "${dlmethod}" ] && [ "${dlmethod}" = "git" ]; then
  16. local tmprepodir="${PAWPAW_TMPDIR}/${name}-${version}"
  17. rm -rf "${tmprepodir}"
  18. git clone --recursive "${dlbaseurl}" "${tmprepodir}"
  19. git -C "${tmprepodir}" checkout "${version}"
  20. git -C "${tmprepodir}" submodule update
  21. tar --exclude=".git" -czf "${dlfile}" -C "${PAWPAW_TMPDIR}" "${name}-${version}"
  22. rm -rf "${tmprepodir}"
  23. else
  24. local dlurl
  25. if echo ${dlbaseurl} | grep -q github.com; then
  26. if [ x"${dlmethod}" = x"nv" ]; then
  27. dlurl="${dlbaseurl}/${version}.${dlext}"
  28. else
  29. dlurl="${dlbaseurl}/v${version}.${dlext}"
  30. fi
  31. elif [ "${dlext}" = "orig.tar.gz" ]; then
  32. dlurl="${dlbaseurl}/${name}_${version}.${dlext}"
  33. else
  34. dlurl="${dlbaseurl}/${name}-${version}.${dlext}"
  35. fi
  36. curl -L "${dlurl}" -o "${dlfile}"
  37. fi
  38. fi
  39. if [ ! -d "${dlfolder}" ]; then
  40. mkdir "${dlfolder}"
  41. tar -xf "${dlfile}" -C "${dlfolder}" --strip-components=1
  42. fi
  43. }
  44. function copy_download() {
  45. local name1="${1}"
  46. local name2="${2}"
  47. local version="${3}"
  48. local dlext="${4}"
  49. if [ -z "${dlext}" ]; then
  50. dlext="tar.gz"
  51. fi
  52. local dlfile1="${PAWPAW_DOWNLOADDIR}/${name1}-${version}.${dlext}"
  53. local dlfolder2="${PAWPAW_BUILDDIR}/${name2}-${version}"
  54. if [ ! -d "${dlfolder2}" ]; then
  55. mkdir "${dlfolder2}"
  56. tar -xf "${dlfile1}" -C "${dlfolder2}" --strip-components=1
  57. fi
  58. }
  59. # ---------------------------------------------------------------------------------------------------------------------
  60. function _prebuild() {
  61. local name="${1}"
  62. local pkgdir="${2}"
  63. export AR="${TARGET_AR}"
  64. export CC="${TARGET_CC}"
  65. export CXX="${TARGET_CXX}"
  66. export LD="${TARGET_LD}"
  67. export STRIP="${TARGET_STRIP}"
  68. export CFLAGS="${TARGET_CFLAGS} ${EXTRA_CFLAGS}"
  69. export CXXFLAGS="${TARGET_CXXFLAGS} ${EXTRA_CXXFLAGS}"
  70. export LDFLAGS="${TARGET_LDFLAGS} ${EXTRA_LDFLAGS}"
  71. export PKG_CONFIG_PATH="${TARGET_PKG_CONFIG_PATH}"
  72. unset CPPFLAGS
  73. export OLD_PATH="${PATH}"
  74. export PATH="${TARGET_PATH}"
  75. if [ -d "${PAWPAW_ROOT}/patches/${name}" ]; then
  76. for p in $(ls "${PAWPAW_ROOT}/patches/${name}/" | grep "\.patch" | sort); do
  77. if [ ! -f "${pkgdir}/.stamp_applied_${p}" ]; then
  78. patch -p1 -d "${pkgdir}" -i "${PAWPAW_ROOT}/patches/${name}/${p}"
  79. touch "${pkgdir}/.stamp_applied_${p}"
  80. fi
  81. done
  82. fi
  83. if [ -d "${PAWPAW_ROOT}/patches/${name}/${PAWPAW_TARGET}" ]; then
  84. for p in $(ls "${PAWPAW_ROOT}/patches/${name}/${PAWPAW_TARGET}/" | grep "\.patch" | sort); do
  85. if [ ! -f "${pkgdir}/.stamp_applied_${p}" ]; then
  86. patch -p1 -d "${pkgdir}" -i "${PAWPAW_ROOT}/patches/${name}/${PAWPAW_TARGET}/${p}"
  87. touch "${pkgdir}/.stamp_applied_${p}"
  88. fi
  89. done
  90. fi
  91. if [ ! -f "${pkgdir}/.stamp_configured" ]; then
  92. rm -f "${pkgdir}/.stamp_built"
  93. rm -f "${pkgdir}/.stamp_installed"
  94. rm -f "${pkgdir}/CMakeCache.txt"
  95. elif [ ! -f "${pkgdir}/.stamp_built" ]; then
  96. rm -f "${pkgdir}/.stamp_installed"
  97. fi
  98. }
  99. function _postbuild() {
  100. unset AR
  101. unset CC
  102. unset CXX
  103. unset LD
  104. unset STRIP
  105. unset CFLAGS
  106. unset CPPFLAGS
  107. unset CXXFLAGS
  108. unset LDFLAGS
  109. unset PKG_CONFIG_PATH
  110. unset EXTRA_CFLAGS
  111. unset EXTRA_CXXFLAGS
  112. unset EXTRA_LDFLAGS
  113. unset EXTRA_MAKE_ARGS
  114. export PATH="${OLD_PATH}"
  115. }
  116. # ---------------------------------------------------------------------------------------------------------------------
  117. function build_autoconf() {
  118. local name="${1}"
  119. local version="${2}"
  120. local extraconfrules="${3}"
  121. local pkgdir="${PAWPAW_BUILDDIR}/${name}-${version}"
  122. if [ "${CROSS_COMPILING}" -eq 1 ]; then
  123. extraconfrules="--host=${TOOLCHAIN_PREFIX} ${extraconfrules}"
  124. fi
  125. _prebuild "${name}" "${pkgdir}"
  126. if [ ! -f "${pkgdir}/.stamp_configured" ]; then
  127. pushd "${pkgdir}"
  128. ./configure --enable-static --disable-shared --disable-debug --disable-doc --disable-docs --disable-maintainer-mode --prefix="${PAWPAW_PREFIX}" ${extraconfrules}
  129. touch .stamp_configured
  130. popd
  131. fi
  132. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  133. pushd "${pkgdir}"
  134. make ${MAKE_ARGS} ${EXTRA_MAKE_ARGS}
  135. touch .stamp_built
  136. popd
  137. fi
  138. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  139. pushd "${pkgdir}"
  140. make ${MAKE_ARGS} install -j 1
  141. touch .stamp_installed
  142. popd
  143. fi
  144. _postbuild
  145. }
  146. function build_autoconfgen() {
  147. local name="${1}"
  148. local version="${2}"
  149. local extraconfrules="${3}"
  150. local pkgdir="${PAWPAW_BUILDDIR}/${name}-${version}"
  151. local EXTRA_CFLAGS2="${EXTRA_CFLAGS}"
  152. local EXTRA_CXXFLAGS2="${EXTRA_CXXFLAGS}"
  153. local EXTRA_LDFLAGS2="${EXTRA_LDFLAGS}"
  154. local EXTRA_MAKE_ARGS2="${EXTRA_MAKE_ARGS}"
  155. _prebuild "${name}" "${pkgdir}"
  156. if [ ! -f "${pkgdir}/.stamp_preconfigured" ]; then
  157. pushd "${pkgdir}"
  158. autoconf
  159. touch .stamp_preconfigured
  160. popd
  161. fi
  162. _postbuild
  163. export EXTRA_CFLAGS="${EXTRA_CFLAGS2}"
  164. export EXTRA_CXXFLAGS="${EXTRA_CXXFLAGS2}"
  165. export EXTRA_LDFLAGS="${EXTRA_LDFLAGS2}"
  166. export EXTRA_MAKE_ARGS="${EXTRA_MAKE_ARGS2}"
  167. build_autoconf "${name}" "${version}" "${extraconfrules}"
  168. }
  169. function build_conf() {
  170. local name="${1}"
  171. local version="${2}"
  172. local extraconfrules="${3}"
  173. local pkgdir="${PAWPAW_BUILDDIR}/${name}-${version}"
  174. _prebuild "${name}" "${pkgdir}"
  175. if [ ! -f "${pkgdir}/.stamp_configured" ]; then
  176. pushd "${pkgdir}"
  177. ./configure ${extraconfrules}
  178. touch .stamp_configured
  179. popd
  180. fi
  181. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  182. pushd "${pkgdir}"
  183. make ${MAKE_ARGS} ${EXTRA_MAKE_ARGS}
  184. touch .stamp_built
  185. popd
  186. fi
  187. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  188. pushd "${pkgdir}"
  189. make ${MAKE_ARGS} -j 1 install
  190. touch .stamp_installed
  191. popd
  192. fi
  193. _postbuild
  194. }
  195. function build_cmake() {
  196. local name="${1}"
  197. local version="${2}"
  198. local extraconfrules="${3}"
  199. local pkgdir="${PAWPAW_BUILDDIR}/${name}-${version}"
  200. if [ "${CROSS_COMPILING}" -eq 1 ]; then
  201. extraconfrules="-DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME} ${extraconfrules}"
  202. fi
  203. _prebuild "${name}" "${pkgdir}"
  204. mkdir -p "${pkgdir}/build"
  205. if [ ! -f "${pkgdir}/.stamp_configured" ]; then
  206. pushd "${pkgdir}/build"
  207. cmake -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_PREFIX="${PAWPAW_PREFIX}" ${extraconfrules} ..
  208. touch ../.stamp_configured
  209. popd
  210. fi
  211. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  212. pushd "${pkgdir}/build"
  213. make ${MAKE_ARGS} ${EXTRA_MAKE_ARGS}
  214. touch ../.stamp_built
  215. popd
  216. fi
  217. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  218. pushd "${pkgdir}/build"
  219. make ${MAKE_ARGS} -j 1 install
  220. touch ../.stamp_installed
  221. popd
  222. fi
  223. _postbuild
  224. }
  225. function build_make() {
  226. local name="${1}"
  227. local version="${2}"
  228. local extraconfrules="${3}"
  229. local pkgdir="${PAWPAW_BUILDDIR}/${name}-${version}"
  230. _prebuild "${name}" "${pkgdir}"
  231. touch "${pkgdir}/.stamp_configured"
  232. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  233. pushd "${pkgdir}"
  234. make PREFIX="${PAWPAW_PREFIX}" PKG_CONFIG="${TARGET_PKG_CONFIG}" ${MAKE_ARGS} ${extraconfrules}
  235. touch .stamp_built
  236. popd
  237. fi
  238. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  239. pushd "${pkgdir}"
  240. make PREFIX="${PAWPAW_PREFIX}" PKG_CONFIG="${TARGET_PKG_CONFIG}" ${MAKE_ARGS} ${extraconfrules} -j 1 install
  241. touch .stamp_installed
  242. popd
  243. fi
  244. _postbuild
  245. }
  246. function build_meson() {
  247. local name="${1}"
  248. local version="${2}"
  249. local extraconfrules="${3}"
  250. local pkgdir="${PAWPAW_BUILDDIR}/${name}-${version}"
  251. if [ "${CROSS_COMPILING}" -eq 1 ]; then
  252. extraconfrules="--cross-file "${PAWPAW_ROOT}/setup/meson/${PAWPAW_TARGET}.ini" ${extraconfrules}"
  253. fi
  254. _prebuild "${name}" "${pkgdir}"
  255. if [ ! -f "${pkgdir}/.stamp_configured" ]; then
  256. pushd "${pkgdir}"
  257. meson build --buildtype release --prefix "${PAWPAW_PREFIX}" ${extraconfrules}
  258. touch .stamp_configured
  259. popd
  260. fi
  261. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  262. pushd "${pkgdir}"
  263. ninja -v -C build
  264. touch .stamp_built
  265. popd
  266. fi
  267. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  268. pushd "${pkgdir}"
  269. ninja -C build install
  270. touch .stamp_installed
  271. popd
  272. fi
  273. _postbuild
  274. }
  275. function build_python() {
  276. local name="${1}"
  277. local version="${2}"
  278. local extraconfrules="${3}"
  279. local pkgdir="${PAWPAW_BUILDDIR}/${name}-${version}"
  280. local python=python3
  281. if ! which python3 > /dev/null; then
  282. python=python
  283. fi
  284. _prebuild "${name}" "${pkgdir}"
  285. touch "${pkgdir}/.stamp_configured"
  286. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  287. pushd "${pkgdir}"
  288. ${python} setup.py build ${extraconfrules}
  289. touch .stamp_built
  290. popd
  291. fi
  292. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  293. pushd "${pkgdir}"
  294. ${python} setup.py install --prefix="${PAWPAW_PREFIX}" ${extraconfrules}
  295. touch .stamp_installed
  296. popd
  297. fi
  298. _postbuild
  299. }
  300. function build_qmake() {
  301. local name="${1}"
  302. local version="${2}"
  303. local extraconfrules="${3}"
  304. local pkgdir="${PAWPAW_BUILDDIR}/${name}-${version}"
  305. _prebuild "${name}" "${pkgdir}"
  306. if [ ! -f "${pkgdir}/.stamp_configured" ]; then
  307. pushd "${pkgdir}"
  308. qmake ${extraconfrules}
  309. touch .stamp_configured
  310. popd
  311. fi
  312. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  313. pushd "${pkgdir}"
  314. make ${MAKE_ARGS} ${EXTRA_MAKE_ARGS}
  315. touch .stamp_built
  316. popd
  317. fi
  318. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  319. pushd "${pkgdir}"
  320. make ${MAKE_ARGS} -j 1 install
  321. touch .stamp_installed
  322. popd
  323. fi
  324. _postbuild
  325. }
  326. function build_waf() {
  327. local name="${1}"
  328. local version="${2}"
  329. local extraconfrules="${3}"
  330. local pkgdir="${PAWPAW_BUILDDIR}/${name}-${version}"
  331. local python=python3
  332. if ! which python3 > /dev/null; then
  333. python=python
  334. fi
  335. _prebuild "${name}" "${pkgdir}"
  336. if [ ! -f "${pkgdir}/.stamp_configured" ]; then
  337. pushd "${pkgdir}"
  338. ${python} waf configure --prefix="${PAWPAW_PREFIX}" ${extraconfrules}
  339. touch .stamp_configured
  340. popd
  341. fi
  342. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  343. pushd "${pkgdir}"
  344. ${python} waf build ${WAF_ARGS}
  345. touch .stamp_built
  346. popd
  347. fi
  348. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  349. pushd "${pkgdir}"
  350. ${python} waf install ${WAF_ARGS} --prefix="${PAWPAW_PREFIX}" ${extraconfrules} -j 1
  351. rm -f ${PAWPAW_PREFIX}/lib/lv2/*/*.a
  352. touch .stamp_installed
  353. popd
  354. fi
  355. _postbuild
  356. }
  357. # ---------------------------------------------------------------------------------------------------------------------
  358. function build_host_autoconf() {
  359. local name="${1}"
  360. local version="${2}"
  361. local extraconfrules="${3}"
  362. local pkgdir="${PAWPAW_BUILDDIR}/${name}-${version}"
  363. unset AR
  364. unset CC
  365. unset CXX
  366. unset LD
  367. unset STRIP
  368. unset CFLAGS
  369. unset CPPFLAGS
  370. unset CXXFLAGS
  371. unset LDFLAGS
  372. if [ ! -f "${pkgdir}/.stamp_configured" ]; then
  373. pushd "${pkgdir}"
  374. ./configure --enable-static --disable-shared --disable-maintainer-mode --prefix="${PAWPAW_PREFIX}" ${extraconfrules}
  375. touch .stamp_configured
  376. popd
  377. fi
  378. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  379. pushd "${pkgdir}"
  380. make ${MAKE_ARGS}
  381. touch .stamp_built
  382. popd
  383. fi
  384. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  385. pushd "${pkgdir}"
  386. make ${MAKE_ARGS} install -j 1
  387. touch .stamp_installed
  388. popd
  389. fi
  390. }
  391. # ---------------------------------------------------------------------------------------------------------------------
  392. function patch_file() {
  393. local name="${1}"
  394. local version="${2}"
  395. local file="${3}"
  396. local rule="${4}"
  397. local pkgdir="${PAWPAW_BUILDDIR}/${name}-${version}"
  398. if [ -e "${pkgdir}/${file}" ]; then
  399. sed -i -e "${rule}" "${pkgdir}/${file}"
  400. fi
  401. }
  402. function copy_file() {
  403. local name="${1}"
  404. local version="${2}"
  405. local source="${3}"
  406. local target="${4}"
  407. local pkgdir="${PAWPAW_BUILDDIR}/${name}-${version}"
  408. if [ ! -e "${pkgdir}/${target}" ]; then
  409. pushd "${pkgdir}"
  410. cp -v "${source}" "${target}"
  411. popd
  412. fi
  413. }
  414. function install_file() {
  415. local name="${1}"
  416. local version="${2}"
  417. local source="${3}"
  418. local targetdir="${4}"
  419. local pkgdir="${PAWPAW_BUILDDIR}/${name}-${version}"
  420. if [ ! -e "${PAWPAW_PREFIX}/${targetdir}/$(basename ${source})" ]; then
  421. pushd "${pkgdir}"
  422. cp -v "${source}" "${PAWPAW_PREFIX}/${targetdir}/"
  423. popd
  424. fi
  425. }
  426. function link_file() {
  427. local name="${1}"
  428. local version="${2}"
  429. local source="${3}"
  430. local target="${4}"
  431. local pkgdir="${PAWPAW_BUILDDIR}/${name}-${version}"
  432. if [ ! -e "${pkgdir}/${target}" ]; then
  433. pushd "${pkgdir}"
  434. ln -sfv "${source}" "${target}"
  435. popd
  436. fi
  437. }
  438. function remove_file() {
  439. local name="${1}"
  440. local version="${2}"
  441. local file="${3}"
  442. local pkgdir="${PAWPAW_BUILDDIR}/${name}-${version}"
  443. if [ -e "${pkgdir}/${file}" ]; then
  444. rm -fv "${pkgdir}/${file}"
  445. fi
  446. }
  447. # ---------------------------------------------------------------------------------------------------------------------
  448. function patch_osx_binary_libs() {
  449. local file="${1}"
  450. if [ -L "${file}" ]; then
  451. return 0
  452. fi
  453. idname=$(otool -D "${file}")
  454. if otool -L "${file}" | grep -v ":" | grep -v "${idname}" | grep -q "${PAWPAW_PREFIX}"; then
  455. #install_name_tool -change "@rpath/QtCore.framework/Versions/5/QtCore" "@executable_path/QtCore" "${file}"
  456. #install_name_tool -change "@rpath/QtGui.framework/Versions/5/QtGui" "@executable_path/QtGui" "${file}"
  457. #install_name_tool -change "@rpath/QtWidgets.framework/Versions/5/QtWidgets" "@executable_path/QtWidgets" "${file}"
  458. #install_name_tool -change "@rpath/QtXml.framework/Versions/5/QtXml" "@executable_path/QtXml" "${file}"
  459. install_name_tool -change "@executable_path/../Frameworks/libjack.0.dylib" "/usr/local/lib/libjack.0.dylib" "${file}"
  460. install_name_tool -change "${PAWPAW_PREFIX}/jack2/lib/libjack.0.dylib" "/usr/local/lib/libjack.0.dylib" "${file}"
  461. install_name_tool -change "${PAWPAW_PREFIX}/jack2/lib/libjacknet.0.dylib" "/usr/local/lib/libjacknet.0.dylib" "${file}"
  462. install_name_tool -change "${PAWPAW_PREFIX}/jack2/lib/libjackserver.0.dylib" "/usr/local/lib/libjackserver.0.dylib" "${file}"
  463. fi
  464. }
  465. function patch_osx_qtapp() {
  466. local name="${1}"
  467. local version="${2}"
  468. local appfile="${3}"
  469. local pkgdir="${PAWPAW_BUILDDIR}/${name}-${version}"
  470. _prebuild "${name}" "${pkgdir}"
  471. mkdir -p "${appfile}/Contents/PlugIns/platforms"
  472. mkdir -p "${appfile}/Contents/PlugIns/printsupport"
  473. cp -v "${PAWPAW_PREFIX}/lib/qt5/plugins/platforms/libqcocoa.dylib" "${appfile}/Contents/PlugIns/platforms/"
  474. cp -v "${PAWPAW_PREFIX}/lib/qt5/plugins/printsupport/libcocoaprintersupport.dylib" "${appfile}/Contents/PlugIns/printsupport/"
  475. macdeployqt "${appfile}"
  476. rm -f "${appfile}/Contents/Frameworks/libjack.0.dylib"
  477. _postbuild
  478. }
  479. # ---------------------------------------------------------------------------------------------------------------------