Audio plugin host https://kx.studio/carla
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.

478 lines
15KB

  1. #!/bin/bash
  2. # ---------------------------------------------------------------------------------------------------------------------
  3. # check dependencies
  4. if ! which debootstrap > /dev/null; then
  5. echo "debootstrap not found, please install it"
  6. exit 1
  7. fi
  8. # ---------------------------------------------------------------------------------------------------------------------
  9. # stop on error
  10. set -e
  11. # ---------------------------------------------------------------------------------------------------------------------
  12. # cd to correct path
  13. cd $(dirname $0)
  14. # ---------------------------------------------------------------------------------------------------------------------
  15. # set variables
  16. source common.env
  17. CHROOT_CARLA_DIR="/tmp/carla-src"
  18. PKG_FOLDER="Carla_2.0-RC4-linux"
  19. PKGS_NUM="20190227"
  20. # ---------------------------------------------------------------------------------------------------------------------
  21. # function to remove old stuff
  22. cleanup()
  23. {
  24. if [ -d ${TARGETDIR}/chroot32 ]; then
  25. sudo umount -lf ${TARGETDIR}/chroot32/dev/pts || true
  26. sudo umount -lf ${TARGETDIR}/chroot32/sys || true
  27. sudo umount -lf ${TARGETDIR}/chroot32/proc || true
  28. fi
  29. if [ -d ${TARGETDIR}/chroot64 ]; then
  30. sudo umount -lf ${TARGETDIR}/chroot64/dev/pts || true
  31. sudo umount -lf ${TARGETDIR}/chroot64/sys || true
  32. sudo umount -lf ${TARGETDIR}/chroot64/proc || true
  33. fi
  34. if [ -d ${TARGETDIR}/chroot32 ]; then
  35. sudo mv ${TARGETDIR}/chroot32 ${TARGETDIR}/chroot32-deleteme
  36. sudo rm -rf ${TARGETDIR}/chroot32-deleteme || true
  37. fi
  38. if [ -d ${TARGETDIR}/chroot64 ]; then
  39. sudo mv ${TARGETDIR}/chroot64 ${TARGETDIR}/chroot64-deleteme
  40. sudo rm -rf ${TARGETDIR}/chroot64-deleteme || true
  41. fi
  42. }
  43. # ---------------------------------------------------------------------------------------------------------------------
  44. # create chroots
  45. if [ ! -d ${TARGETDIR}/chroot32 ]; then
  46. sudo debootstrap --arch=i386 lucid ${TARGETDIR}/chroot32 http://old-releases.ubuntu.com/ubuntu/
  47. fi
  48. if [ ! -d ${TARGETDIR}/chroot64 ]; then
  49. sudo debootstrap --arch=amd64 lucid ${TARGETDIR}/chroot64 http://old-releases.ubuntu.com/ubuntu/
  50. fi
  51. # ---------------------------------------------------------------------------------------------------------------------
  52. # setup chroots
  53. chroot_setup()
  54. {
  55. CHROOT_DIR=${TARGETDIR}/chroot${ARCH}
  56. if [ ! -f ${CHROOT_DIR}/tmp/setup-aria2 ]; then
  57. pushd ${CHROOT_DIR}/tmp
  58. if [ x"${ARCH}" = x"32" ]; then
  59. wget -c https://github.com/q3aql/aria2-static-builds/releases/download/v1.34.0/aria2-1.34.0-linux-gnu-32bit-build1.tar.bz2
  60. else
  61. wget -c https://github.com/q3aql/aria2-static-builds/releases/download/v1.34.0/aria2-1.34.0-linux-gnu-64bit-build1.tar.bz2
  62. fi
  63. tar xf aria2-*.tar.bz2
  64. popd
  65. fi
  66. cat <<EOF | sudo chroot ${CHROOT_DIR}
  67. mount -t proc none /proc/
  68. mount -t sysfs none /sys/
  69. mount -t devpts none /dev/pts
  70. export HOME=/root
  71. export LANG=C
  72. export LC_ALL=C
  73. unset LC_TIME
  74. set -e
  75. if [ ! -f /tmp/setup-repo ]; then
  76. apt-get update
  77. apt-get install -y python-software-properties wget
  78. add-apt-repository ppa:kxstudio-debian/libs
  79. add-apt-repository ppa:kxstudio-debian/toolchain
  80. apt-get update
  81. touch /tmp/setup-repo
  82. fi
  83. if [ ! -f /tmp/setup-repo-list ]; then
  84. echo '
  85. deb http://old-releases.ubuntu.com/ubuntu/ lucid main restricted universe multiverse
  86. deb http://old-releases.ubuntu.com/ubuntu/ lucid-updates main restricted universe multiverse
  87. deb http://old-releases.ubuntu.com/ubuntu/ lucid-backports main restricted universe multiverse
  88. ' > /etc/apt/sources.list
  89. apt-get update
  90. touch /tmp/setup-repo-list
  91. fi
  92. if [ ! -f /tmp/setup-repo-upgrade ]; then
  93. dpkg-divert --local --rename --add /sbin/initctl
  94. ln -s /bin/true /sbin/initctl
  95. apt-get dist-upgrade
  96. touch /tmp/setup-repo-upgrade
  97. fi
  98. if [ ! -f /tmp/setup-repo-packages ]; then
  99. apt-get install -y build-essential autoconf libtool cmake libglib2.0-dev libgl1-mesa-dev git-core
  100. apt-get clean
  101. touch /tmp/setup-repo-packages
  102. fi
  103. if [ ! -f /tmp/setup-aria2 ]; then
  104. pushd /tmp/aria2-*
  105. make install
  106. popd
  107. rm -r /tmp/aria2-*
  108. touch /tmp/setup-aria2
  109. fi
  110. if [ ! -d ${CHROOT_CARLA_DIR} ]; then
  111. git clone --depth=1 -b master git://github.com/falkTX/Carla ${CHROOT_CARLA_DIR}
  112. fi
  113. if [ ! -f ${CHROOT_CARLA_DIR}/source/native-plugins/external/README.md ]; then
  114. git clone --depth=1 -b master git://github.com/falkTX/Carla-Plugins ${CHROOT_CARLA_DIR}/source/native-plugins/external
  115. fi
  116. cd ${CHROOT_CARLA_DIR}
  117. git checkout .
  118. git pull
  119. git submodule update
  120. # might be updated by git pull
  121. chmod 777 data/linux/*.sh
  122. chmod 777 data/linux/common.env
  123. sync
  124. EOF
  125. }
  126. export ARCH=32
  127. chroot_setup
  128. export ARCH=64
  129. chroot_setup
  130. # ---------------------------------------------------------------------------------------------------------------------
  131. # build base libs
  132. chroot_build_deps()
  133. {
  134. CHROOT_DIR=${TARGETDIR}/chroot${ARCH}
  135. cp build-deps.sh common.env ${CHROOT_DIR}${CHROOT_CARLA_DIR}/data/linux/
  136. sudo cp /etc/ca-certificates.conf ${CHROOT_DIR}/etc/
  137. sudo cp -r /usr/share/ca-certificates/* ${CHROOT_DIR}/usr/share/ca-certificates/
  138. cat <<EOF | sudo chroot ${CHROOT_DIR}
  139. export HOME=/root
  140. export LANG=C
  141. export LC_ALL=C
  142. unset LC_TIME
  143. set -e
  144. if [ ! -f /tmp/setup-repo-packages-extra1 ]; then
  145. if [ x"${ARCH}" != x"32" ]; then
  146. apt-get install -y g++-4.8-multilib ia32-libs
  147. apt-get clean
  148. fi
  149. touch /tmp/setup-repo-packages-extra1
  150. fi
  151. update-ca-certificates
  152. ${CHROOT_CARLA_DIR}/data/linux/build-deps.sh ${ARCH}
  153. if [ ! -f /tmp/setup-repo-packages-extra2 ]; then
  154. apt-get install -y --no-install-recommends libasound2-dev libgtk2.0-dev libqt4-dev libx11-dev
  155. apt-get install -y --no-install-recommends pyqt4-dev-tools python3-pyqt4.qtopengl python3-liblo python3-sip
  156. apt-get install -y cx-freeze-python3 zip
  157. apt-get clean
  158. touch /tmp/setup-repo-packages-extra2
  159. fi
  160. EOF
  161. }
  162. export ARCH=32
  163. chroot_build_deps
  164. export ARCH=64
  165. chroot_build_deps
  166. # ---------------------------------------------------------------------------------------------------------------------
  167. # build carla
  168. chroot_build_carla()
  169. {
  170. CHROOT_DIR=${TARGETDIR}/chroot${ARCH}
  171. CHROOT_TARGET_DIR=/root/builds
  172. cat <<EOF | sudo chroot ${CHROOT_DIR}
  173. export HOME=/root
  174. export LANG=C
  175. export LC_ALL=C
  176. unset LC_TIME
  177. set -e
  178. export CFLAGS="-I${CHROOT_TARGET_DIR}/carla${ARCH}/include"
  179. export CXXFLAGS=${CFLAGS}
  180. export LDFLAGS="-L${CHROOT_TARGET_DIR}/carla${ARCH}/lib"
  181. export PKG_CONFIG_PATH=${CHROOT_TARGET_DIR}/carla${ARCH}/lib/pkgconfig
  182. export RCC_QT4=/usr/bin/rcc
  183. export LINUX=true
  184. export DEFAULT_QT=4
  185. cd ${CHROOT_CARLA_DIR}
  186. make ${MAKE_ARGS}
  187. if [ x"${ARCH}" != x"32" ]; then
  188. export CFLAGS="-I${CHROOT_TARGET_DIR}/carla32/include -m32"
  189. export CXXFLAGS=${CFLAGS}
  190. export LDFLAGS="-L${CHROOT_TARGET_DIR}/carla32/lib -m32"
  191. export PKG_CONFIG_PATH=${CHROOT_TARGET_DIR}/carla32/lib/pkgconfig
  192. make posix32 ${MAKE_ARGS}
  193. fi
  194. EOF
  195. }
  196. export ARCH=32
  197. chroot_build_carla
  198. export ARCH=64
  199. chroot_build_carla
  200. # ---------------------------------------------------------------------------------------------------------------------
  201. # download carla extras
  202. download_carla_extras()
  203. {
  204. CHROOT_DIR=${TARGETDIR}/chroot${ARCH}
  205. CARLA_VER="1.9.14+git20190227"
  206. WINBR_VER="1.9.14+git20190227"
  207. WINE32_VER="1.9.14+git20190227"
  208. WINE64_VER="1.9.14.git20190227"
  209. cat <<EOF | sudo chroot ${CHROOT_DIR}
  210. set -e
  211. cd ${CHROOT_CARLA_DIR}
  212. if [ ! -d carla-pkgs${PKGS_NUM} ]; then
  213. mkdir -p tmp-carla-pkgs
  214. cd tmp-carla-pkgs
  215. wget -c https://launchpad.net/~kxstudio-debian/+archive/ubuntu/apps/+files/carla-bridge-win32_${WINBR_VER}_i386.deb
  216. wget -c https://launchpad.net/~kxstudio-debian/+archive/ubuntu/apps/+files/carla-bridge-wine32_${WINE32_VER}_i386.deb
  217. if [ x"${ARCH}" != x"32" ]; then
  218. aria2c https://github.com/KXStudio/Repository/releases/download/initial/carla-bridge-wine64_${WINE64_VER}_amd64.deb
  219. wget -c https://launchpad.net/~kxstudio-debian/+archive/ubuntu/apps/+files/carla-bridge-win64_${WINBR_VER}_amd64.deb
  220. wget -c https://launchpad.net/~kxstudio-debian/+archive/ubuntu/apps/+files/carla-git_${CARLA_VER}_amd64.deb
  221. else
  222. wget -c https://launchpad.net/~kxstudio-debian/+archive/ubuntu/apps/+files/carla-git_${CARLA_VER}_i386.deb
  223. fi
  224. cd ..
  225. mv tmp-carla-pkgs carla-pkgs${PKGS_NUM}
  226. fi
  227. if [ ! -f carla-pkgs${PKGS_NUM}/extrated ]; then
  228. cd carla-pkgs${PKGS_NUM}
  229. dpkg -x carla-bridge-win32_${WINBR_VER}_i386.deb .
  230. dpkg -x carla-bridge-wine32_${WINE32_VER}_i386.deb .
  231. if [ x"${ARCH}" != x"32" ]; then
  232. dpkg -x carla-bridge-win64_${WINBR_VER}_amd64.deb .
  233. dpkg -x carla-bridge-wine64_${WINE64_VER}_amd64.deb .
  234. dpkg -x carla-git_${CARLA_VER}_amd64.deb .
  235. else
  236. dpkg -x carla-git_${CARLA_VER}_i386.deb .
  237. fi
  238. touch extrated
  239. cd ..
  240. fi
  241. if [ ! -f extra-bins${PKGS_NUM}/carla-bridge-win32.exe ]; then
  242. mkdir -p extra-bins${PKGS_NUM}
  243. cp carla-pkgs${PKGS_NUM}/usr/lib/carla/*.exe extra-bins${PKGS_NUM}/
  244. cp carla-pkgs${PKGS_NUM}/usr/lib/carla/*.dll extra-bins${PKGS_NUM}/
  245. cp carla-pkgs${PKGS_NUM}/usr/lib/carla/*-gtk3 extra-bins${PKGS_NUM}/
  246. cp carla-pkgs${PKGS_NUM}/usr/lib/carla/*-qt5 extra-bins${PKGS_NUM}/
  247. fi
  248. EOF
  249. }
  250. export ARCH=32
  251. download_carla_extras
  252. export ARCH=64
  253. download_carla_extras
  254. # ---------------------------------------------------------------------------------------------------------------------
  255. # download carla extras
  256. chroot_pack_carla()
  257. {
  258. CHROOT_DIR=${TARGETDIR}/chroot${ARCH}
  259. CXFREEZE_FLAGS="--include-modules=re,sip,subprocess,inspect"
  260. cat <<EOF | sudo chroot ${CHROOT_DIR}
  261. export HOME=/root
  262. export LANG=C
  263. export LC_ALL=C
  264. unset LC_TIME
  265. set -e
  266. export PKG_CONFIG_PATH=${CHROOT_TARGET_DIR}/carla${ARCH}/lib/pkgconfig
  267. export RCC_QT4=/usr/bin/rcc
  268. export LINUX="true"
  269. cd ${CHROOT_CARLA_DIR}
  270. rm -rf ./tmp-install
  271. make ${MAKE_ARGS} install DESTDIR=./tmp-install PREFIX=/usr
  272. make -C data/windows/unzipfx-carla -f Makefile.linux ${MAKE_ARGS}
  273. make -C data/windows/unzipfx-carla-control -f Makefile.linux ${MAKE_ARGS}
  274. # ---------------------------------------------------------------------------------------------------------------------
  275. # Standalone
  276. rm -rf build-carla build-carla-control build-lv2 build-vst carla *.zip
  277. mkdir build-carla
  278. mkdir build-carla/resources
  279. mkdir build-carla/src
  280. mkdir build-carla/src/widgets
  281. cp extra-bins${PKGS_NUM}/* build-carla/
  282. cp -r ./tmp-install/usr/lib/carla/* build-carla/
  283. cp -LR ./tmp-install/usr/share/carla/resources/* build-carla/resources/
  284. cp ./tmp-install/usr/share/carla/carla build-carla/src/
  285. cp ./tmp-install/usr/share/carla/carla-control build-carla/src/
  286. cp ./tmp-install/usr/share/carla/*.py build-carla/src/
  287. cp ./tmp-install/usr/share/carla/widgets/*.py build-carla/src/widgets/
  288. mv build-carla/resources/carla-plugin build-carla/resources/carla-plugin.py
  289. mv build-carla/resources/bigmeter-ui build-carla/resources/bigmeter-ui.py
  290. mv build-carla/resources/midipattern-ui build-carla/resources/midipattern-ui.py
  291. mv build-carla/resources/notes-ui build-carla/resources/notes-ui.py
  292. cxfreeze-python3 ${CXFREEZE_FLAGS} build-carla/src/carla --target-dir=build-carla/
  293. cxfreeze-python3 ${CXFREEZE_FLAGS} build-carla/src/carla-control --target-dir=build-carla-control/
  294. cxfreeze-python3 ${CXFREEZE_FLAGS} build-carla/resources/carla-plugin.py --target-dir=build-carla/resources/
  295. cxfreeze-python3 ${CXFREEZE_FLAGS} build-carla/resources/bigmeter-ui.py --target-dir=build-carla/resources/
  296. cxfreeze-python3 ${CXFREEZE_FLAGS} build-carla/resources/midipattern-ui.py --target-dir=build-carla/resources/
  297. cxfreeze-python3 ${CXFREEZE_FLAGS} build-carla/resources/notes-ui.py --target-dir=build-carla/resources/
  298. cp /usr/lib/libpython3.2mu.so.1.0 build-carla/
  299. cp /usr/lib/libffi.so.5 build-carla/
  300. cp /usr/lib/libssl.so.0.9.8 build-carla/
  301. cp /usr/lib/libcrypto.so.0.9.8 build-carla/
  302. cp /lib/libbz2.so.1.0 build-carla/
  303. cp /lib/libselinux.so.1 build-carla/
  304. cp /root/builds/carla${ARCH}/share/misc/magic.mgc build-carla/
  305. cp /usr/lib/libpython3.2mu.so.1.0 build-carla-control/
  306. cp /usr/lib/libffi.so.5 build-carla-control/
  307. cp /usr/lib/libssl.so.0.9.8 build-carla-control/
  308. cp /usr/lib/libcrypto.so.0.9.8 build-carla-control/
  309. cp /lib/libbz2.so.1.0 build-carla-control/
  310. cp /lib/libselinux.so.1 build-carla-control/
  311. cp build-carla/libcarla_utils.so build-carla-control/
  312. cp -r build-carla/styles build-carla-control/
  313. find build-carla -name "*.py" -delete
  314. find build-carla -name PyQt4.QtAssistant.so -delete
  315. find build-carla -name PyQt4.QtNetwork.so -delete
  316. find build-carla -name PyQt4.QtScript.so -delete
  317. find build-carla -name PyQt4.QtTest.so -delete
  318. find build-carla -name PyQt4.QtXml.so -delete
  319. rm -rf build-carla/src
  320. find build-carla-control -name "*.py" -delete
  321. find build-carla-control -name PyQt4.QtAssistant.so -delete
  322. find build-carla-control -name PyQt4.QtNetwork.so -delete
  323. find build-carla-control -name PyQt4.QtScript.so -delete
  324. find build-carla-control -name PyQt4.QtTest.so -delete
  325. find build-carla-control -name PyQt4.QtXml.so -delete
  326. rm -rf build-carla-control/src
  327. cd build-carla/resources/ && \
  328. rm *.so* carla-plugin-patchbay && \
  329. ln -s ../*.so* . && \
  330. ln -s carla-plugin carla-plugin-patchbay && \
  331. cd ../..
  332. mkdir build-lv2
  333. cp -LR ./tmp-install/usr/lib/lv2/carla.lv2 build-lv2/
  334. rm -r build-lv2/carla.lv2/resources
  335. cp -LR build-carla/resources build-lv2/carla.lv2/
  336. cp build-carla/magic.mgc build-lv2/carla.lv2/
  337. cp extra-bins${PKGS_NUM}/* build-lv2/carla.lv2/
  338. rm build-lv2/carla.lv2/resources/*carla*.so build-lv2/carla.lv2/resources/carla-plugin-patchbay
  339. ln -s ../libcarla_utils.so build-lv2/carla.lv2/resources/
  340. ln -s carla-plugin build-lv2/carla.lv2/resources/carla-plugin-patchbay
  341. mkdir build-vst
  342. cp -LR ./tmp-install/usr/lib/vst/carla.vst build-vst/
  343. rm -r build-vst/carla.vst/resources
  344. cp -LR build-carla/resources build-vst/carla.vst/
  345. cp build-carla/magic.mgc build-vst/carla.vst/
  346. cp extra-bins${PKGS_NUM}/* build-vst/carla.vst/
  347. rm build-vst/carla.vst/resources/*carla*.so build-vst/carla.vst/resources/carla-plugin-patchbay
  348. ln -s ../libcarla_utils.so build-vst/carla.vst/resources/
  349. ln -s carla-plugin build-vst/carla.vst/resources/carla-plugin-patchbay
  350. mv build-carla carla
  351. zip --symlinks -r -9 carla.zip carla
  352. cat data/windows/unzipfx-carla/unzipfx2cat carla.zip > Carla
  353. chmod +x Carla
  354. rm -rf carla carla.zip
  355. mv build-carla-control carla-control
  356. zip --symlinks -r -9 carla-control.zip carla-control
  357. cat data/windows/unzipfx-carla-control/unzipfx2cat carla-control.zip > CarlaControl
  358. chmod +x CarlaControl
  359. rm -rf carla-control carla-control.zip
  360. rm -rf ${PKG_FOLDER}${ARCH}
  361. mkdir ${PKG_FOLDER}${ARCH}
  362. cp data/linux/README ${PKG_FOLDER}${ARCH}/
  363. mv Carla CarlaControl build-lv2/*.lv2 build-vst/*.vst ${PKG_FOLDER}${ARCH}/
  364. tar cJf ${PKG_FOLDER}${ARCH}.tar.xz ${PKG_FOLDER}${ARCH}
  365. mv ${PKG_FOLDER}${ARCH}.tar.xz /tmp/
  366. rmdir build-lv2 build-vst
  367. EOF
  368. }
  369. export ARCH=32
  370. chroot_pack_carla
  371. export ARCH=64
  372. chroot_pack_carla
  373. # ---------------------------------------------------------------------------------------------------------------------