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.

452 lines
14KB

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