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.

549 lines
24KB

  1. #!/bin/bash
  2. set -e
  3. cd $(dirname ${0})
  4. PAWPAW_ROOT="${PWD}"
  5. # ---------------------------------------------------------------------------------------------------------------------
  6. # check target
  7. target="${1}"
  8. if [ -z "${target}" ]; then
  9. echo "usage: ${0} <target>"
  10. exit 1
  11. fi
  12. # ---------------------------------------------------------------------------------------------------------------------
  13. # LTO is unwanted for MOD builds, make sure it is off
  14. export PAWPAW_SKIP_LTO=1
  15. # ---------------------------------------------------------------------------------------------------------------------
  16. # run bootstrap dependencies
  17. export MODAUDIO=1
  18. ./bootstrap-common.sh "${target}"
  19. ./bootstrap-jack2.sh "${target}"
  20. ./bootstrap-plugins.sh "${target}"
  21. ./bootstrap-python.sh "${target}"
  22. # ---------------------------------------------------------------------------------------------------------------------
  23. # source setup code
  24. source setup/check_target.sh
  25. source setup/env.sh
  26. source setup/functions.sh
  27. source setup/versions.sh
  28. # Use local Qt on Linux builds
  29. if [ "${LINUX}" -eq 1 ]; then
  30. if [ "${LINUX_TARGET}" = "linux-aarch64" ]; then
  31. export PKG_CONFIG_PATH=/usr/lib/aarch64-linux-gnu/pkgconfig
  32. elif [ "${LINUX_TARGET}" = "linux-armhf" ]; then
  33. export PKG_CONFIG_PATH=/usr/lib/arm-linux-gnueabihf/pkgconfig
  34. elif [ "${LINUX_TARGET}" = "linux-i686" ]; then
  35. export PKG_CONFIG_PATH=/usr/lib/i386-linux-gnu/pkgconfig
  36. elif [ "${LINUX_TARGET}" = "linux-riscv64" ]; then
  37. export PKG_CONFIG_PATH=/usr/lib/riscv64-linux-gnu/pkgconfig
  38. elif [ "${LINUX_TARGET}" = "linux-x86_64" ]; then
  39. export PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig
  40. fi
  41. if ! pkg-config --print-errors --exists Qt5Core Qt5Gui Qt5Svg Qt5Widgets; then
  42. echo "Qt system libs are not available, cannot continue"
  43. exit 2
  44. fi
  45. if [ ! -e "${TARGET_PKG_CONFIG_PATH}/Qt5Core.pc" ]; then
  46. cp $(pkg-config --variable=pcfiledir Qt5Core)/Qt5Core.pc ${TARGET_PKG_CONFIG_PATH}/
  47. sed -i '/Libs.private/d' ${TARGET_PKG_CONFIG_PATH}/Qt5Core.pc
  48. fi
  49. if [ ! -e "${TARGET_PKG_CONFIG_PATH}/Qt5Gui.pc" ]; then
  50. cp $(pkg-config --variable=pcfiledir Qt5Gui)/Qt5Gui.pc ${TARGET_PKG_CONFIG_PATH}/
  51. sed -i '/Libs.private/d' ${TARGET_PKG_CONFIG_PATH}/Qt5Gui.pc
  52. fi
  53. if [ ! -e "${TARGET_PKG_CONFIG_PATH}/Qt5Svg.pc" ]; then
  54. cp $(pkg-config --variable=pcfiledir Qt5Svg)/Qt5Svg.pc ${TARGET_PKG_CONFIG_PATH}/
  55. sed -i '/Libs.private/d' ${TARGET_PKG_CONFIG_PATH}/Qt5Svg.pc
  56. fi
  57. if [ ! -e "${TARGET_PKG_CONFIG_PATH}/Qt5Widgets.pc" ]; then
  58. cp $(pkg-config --variable=pcfiledir Qt5Widgets)/Qt5Widgets.pc ${TARGET_PKG_CONFIG_PATH}/
  59. sed -i '/Libs.private/d' ${TARGET_PKG_CONFIG_PATH}/Qt5Widgets.pc
  60. fi
  61. else
  62. ./bootstrap-qt.sh "${target}"
  63. fi
  64. # ---------------------------------------------------------------------------------------------------------------------
  65. # merged usr mode
  66. mkdir -p "${PAWPAW_PREFIX}/bin"
  67. mkdir -p "${PAWPAW_PREFIX}/docs"
  68. mkdir -p "${PAWPAW_PREFIX}/etc"
  69. mkdir -p "${PAWPAW_PREFIX}/include"
  70. mkdir -p "${PAWPAW_PREFIX}/lib"
  71. mkdir -p "${PAWPAW_PREFIX}/share"
  72. mkdir -p "${PAWPAW_PREFIX}/usr"
  73. if [ ! -e "${PAWPAW_PREFIX}/usr/bin" ]; then
  74. ln -s ../bin "${PAWPAW_PREFIX}/usr/bin"
  75. fi
  76. if [ ! -e "${PAWPAW_PREFIX}/usr/docs" ]; then
  77. ln -s ../docs "${PAWPAW_PREFIX}/usr/docs"
  78. fi
  79. if [ ! -e "${PAWPAW_PREFIX}/usr/etc" ]; then
  80. ln -s ../etc "${PAWPAW_PREFIX}/usr/etc"
  81. fi
  82. if [ ! -e "${PAWPAW_PREFIX}/usr/include" ]; then
  83. ln -s ../include "${PAWPAW_PREFIX}/usr/include"
  84. fi
  85. if [ ! -e "${PAWPAW_PREFIX}/usr/lib" ]; then
  86. ln -s ../lib "${PAWPAW_PREFIX}/usr/lib"
  87. fi
  88. if [ ! -e "${PAWPAW_PREFIX}/usr/share" ]; then
  89. ln -s ../share "${PAWPAW_PREFIX}/usr/share"
  90. fi
  91. # ---------------------------------------------------------------------------------------------------------------------
  92. # merged usr mode (host)
  93. mkdir -p "${PAWPAW_PREFIX}-host/bin"
  94. mkdir -p "${PAWPAW_PREFIX}-host/usr"
  95. if [ ! -e "${PAWPAW_PREFIX}-host/usr/bin" ]; then
  96. ln -s ../bin "${PAWPAW_PREFIX}-host/usr/bin"
  97. fi
  98. # ---------------------------------------------------------------------------------------------------------------------
  99. # GNU tools by default on macOS
  100. if [ "${MACOS}" -eq 1 ]; then
  101. if [ ! -e "${PAWPAW_PREFIX}-host/bin/awk" ]; then
  102. ln -s $(command -v gawk) "${PAWPAW_PREFIX}-host/bin/awk"
  103. fi
  104. if [ ! -e "${PAWPAW_PREFIX}-host/bin/cp" ]; then
  105. ln -s $(command -v gcp) "${PAWPAW_PREFIX}-host/bin/cp"
  106. fi
  107. if [ ! -e "${PAWPAW_PREFIX}-host/bin/install" ]; then
  108. ln -s $(command -v ginstall) "${PAWPAW_PREFIX}-host/bin/install"
  109. fi
  110. if [ ! -e "${PAWPAW_PREFIX}-host/bin/libtool" ]; then
  111. ln -s $(command -v glibtool) "${PAWPAW_PREFIX}-host/bin/libtool"
  112. fi
  113. if [ ! -e "${PAWPAW_PREFIX}-host/bin/libtoolize" ]; then
  114. ln -s $(command -v glibtoolize) "${PAWPAW_PREFIX}-host/bin/libtoolize"
  115. fi
  116. if [ ! -e "${PAWPAW_PREFIX}-host/bin/m4" ]; then
  117. ln -s $(command -v gm4) "${PAWPAW_PREFIX}-host/bin/m4"
  118. fi
  119. if [ ! -e "${PAWPAW_PREFIX}-host/bin/make" ]; then
  120. ln -s $(command -v gmake) "${PAWPAW_PREFIX}-host/bin/make"
  121. fi
  122. if [ ! -e "${PAWPAW_PREFIX}-host/bin/readlink" ]; then
  123. ln -s $(command -v greadlink) "${PAWPAW_PREFIX}-host/bin/readlink"
  124. fi
  125. if [ ! -e "${PAWPAW_PREFIX}-host/bin/realpath" ]; then
  126. ln -s $(command -v grealpath) "${PAWPAW_PREFIX}-host/bin/realpath"
  127. fi
  128. if [ ! -e "${PAWPAW_PREFIX}-host/bin/sed" ]; then
  129. ln -s $(command -v gsed) "${PAWPAW_PREFIX}-host/bin/sed"
  130. fi
  131. fi
  132. # ---------------------------------------------------------------------------------------------------------------------
  133. # armadillo
  134. ARMADILLO_VERSION="12.6.5"
  135. ARMADILLO_URL="http://download.sourceforge.net/arma"
  136. download armadillo "${ARMADILLO_VERSION}" "${ARMADILLO_URL}" "tar.xz"
  137. build_cmake armadillo "${ARMADILLO_VERSION}" "${ARMADILLO_EXTRAFLAGS}"
  138. # ---------------------------------------------------------------------------------------------------------------------
  139. # hylia
  140. HYLIA_VERSION="6421909123974ffd431ace47589975f5929bc746"
  141. HYLIA_URL="https://github.com/falkTX/hylia.git"
  142. HYLIA_EXTRAFLAGS="NOOPT=true"
  143. download hylia "${HYLIA_VERSION}" "${HYLIA_URL}" "" "git"
  144. build_make hylia "${HYLIA_VERSION}" "${HYLIA_EXTRAFLAGS}"
  145. # ---------------------------------------------------------------------------------------------------------------------
  146. # jack2
  147. JACK2_VERSION="806da09a120f254ae231c2ef87cf9fe2f4fb4f5b"
  148. JACK2_URL="https://github.com/jackaudio/jack2.git"
  149. JACK2_EXTRAFLAGS=""
  150. JACK2_EXTRAFLAGS+=" --autostart=none"
  151. JACK2_EXTRAFLAGS+=" --classic"
  152. JACK2_EXTRAFLAGS+=" --db=no"
  153. JACK2_EXTRAFLAGS+=" --doxygen=no"
  154. JACK2_EXTRAFLAGS+=" --firewire=no"
  155. JACK2_EXTRAFLAGS+=" --iio=no"
  156. JACK2_EXTRAFLAGS+=" --celt=no"
  157. JACK2_EXTRAFLAGS+=" --opus=no"
  158. JACK2_EXTRAFLAGS+=" --samplerate=no"
  159. JACK2_EXTRAFLAGS+=" --systemd=no"
  160. if [ "${LINUX}" -eq 1 ]; then
  161. JACK2_EXTRAFLAGS+=" --platform=linux --portaudio=yes --alsa=yes --libdbus=yes"
  162. elif [ "${MACOS}" -eq 1 ]; then
  163. JACK2_EXTRAFLAGS+=" --platform=darwin"
  164. elif [ "${WIN32}" -eq 1 ]; then
  165. JACK2_EXTRAFLAGS+=" --platform=win32"
  166. fi
  167. if [ "${WIN32}" -eq 1 ]; then
  168. JACK2_EXTRAFLAGS+=" --static"
  169. fi
  170. if [ "${LINUX}" -eq 1 ]; then
  171. export EXTRA_LDFLAGS='-Wl,-rpath,$ORIGIN -Wl,-rpath,$ORIGIN/.. -Wl,-rpath,$ORIGIN/../lib'
  172. fi
  173. download jack2 "${JACK2_VERSION}" "${JACK2_URL}" "" "git"
  174. patch_file jack2 "${JACK2_VERSION}" "dbus/audio_reserve.c" "s/Jack audio server/MOD App/"
  175. build_waf jack2 "${JACK2_VERSION}" "${JACK2_EXTRAFLAGS}"
  176. # patch pkg-config file for static win32 builds
  177. if [ "${WIN32}" -eq 1 ]; then
  178. if [ "${WIN64}" -eq 1 ]; then
  179. s="64"
  180. else
  181. s=""
  182. fi
  183. sed -i -e "s/-L\${libdir} -ljack${s}/-L\${libdir} -Wl,-Bdynamic -ljackserver${s} -Wl,-Bstatic/" "${PAWPAW_PREFIX}/lib/pkgconfig/jack.pc"
  184. fi
  185. # ---------------------------------------------------------------------------------------------------------------------
  186. # jack-example-tools
  187. JACK_EXAMPLE_TOOLS_VERSION="7cf014d3b3b75ad88a0785957b0f2cffad243b6b"
  188. JACK_EXAMPLE_TOOLS_URL="https://github.com/jackaudio/jack-example-tools.git"
  189. JACK_EXAMPLE_TOOLS_EXTRAFLAGS=""
  190. JACK_EXAMPLE_TOOLS_EXTRAFLAGS+=" -Dalsa_in_out=disabled"
  191. JACK_EXAMPLE_TOOLS_EXTRAFLAGS+=" -Djack_net=disabled"
  192. JACK_EXAMPLE_TOOLS_EXTRAFLAGS+=" -Djack_netsource=disabled"
  193. JACK_EXAMPLE_TOOLS_EXTRAFLAGS+=" -Djack_rec=disabled"
  194. JACK_EXAMPLE_TOOLS_EXTRAFLAGS+=" -Dopus_support=disabled"
  195. JACK_EXAMPLE_TOOLS_EXTRAFLAGS+=" -Dreadline_support=disabled"
  196. JACK_EXAMPLE_TOOLS_EXTRAFLAGS+=" -Dzalsa=disabled"
  197. if [ "${LINUX}" -eq 1 ]; then
  198. JACK_EXAMPLE_TOOLS_EXTRAFLAGS+=" -Dalsa_midi=enabled"
  199. else
  200. JACK_EXAMPLE_TOOLS_EXTRAFLAGS+=" -Dalsa_midi=disabled"
  201. fi
  202. download jack-example-tools "${JACK_EXAMPLE_TOOLS_VERSION}" "${JACK_EXAMPLE_TOOLS_URL}" "" "git"
  203. build_meson jack-example-tools "${JACK_EXAMPLE_TOOLS_VERSION}" "${JACK_EXAMPLE_TOOLS_EXTRAFLAGS}"
  204. # ---------------------------------------------------------------------------------------------------------------------
  205. # lvtk1
  206. LVTK1_VERSION="c105fd5077b4f7d963ad543b9979b94b9b052551"
  207. LVTK1_URL="https://github.com/lvtk/lvtk.git"
  208. LVTK1_EXTRAFLAGS=""
  209. LVTK1_EXTRAFLAGS+=" --disable-examples"
  210. LVTK1_EXTRAFLAGS+=" --disable-tools"
  211. LVTK1_EXTRAFLAGS+=" --disable-ui"
  212. download lvtk1 "${LVTK1_VERSION}" "${LVTK1_URL}" "" "git"
  213. # force waf update for py3 compat
  214. if [ ! -e "${PAWPAW_BUILDDIR}/lvtk1-${LVTK1_VERSION}/.stamp_configured" ]; then
  215. cp -v "${PAWPAW_BUILDDIR}/jack2-${JACK2_VERSION}/waf" "${PAWPAW_BUILDDIR}/lvtk1-${LVTK1_VERSION}/"
  216. cp -rv "${PAWPAW_BUILDDIR}/jack2-${JACK2_VERSION}/waflib" "${PAWPAW_BUILDDIR}/lvtk1-${LVTK1_VERSION}/"
  217. fi
  218. build_waf lvtk1 "${LVTK1_VERSION}" "${LVTK1_EXTRAFLAGS}"
  219. # ---------------------------------------------------------------------------------------------------------------------
  220. # aggdraw
  221. AGGDRAW_VERSION="1.3.11"
  222. export EXTRA_CFLAGS="$(${PAWPAW_PREFIX}/bin/pkg-config --cflags python3 freetype2 libpng)"
  223. export EXTRA_LDFLAGS="$(${PAWPAW_PREFIX}/bin/pkg-config --libs python3 freetype2 libpng) -shared"
  224. if [ "${MACOS}" -eq 1 ]; then
  225. export EXTRA_LDFLAGS+=" -Wl,-undefined,dynamic_lookup"
  226. elif [ "${WIN32}" -eq 1 ]; then
  227. export EXTRA_LDFLAGS+=" -lgdi32 -lkernel32 -luser32"
  228. fi
  229. export AGGDRAW_FREETYPE_ROOT="${PAWPAW_PREFIX}"
  230. export LDSHARED="${TARGET_CXX}"
  231. download aggdraw "${AGGDRAW_VERSION}" "https://files.pythonhosted.org/packages/ef/29/fddf555c68920bb0aff977425af786226db2a78379e706951ff32b4492ef"
  232. build_python aggdraw "${AGGDRAW_VERSION}"
  233. unset AGGDRAW_FREETYPE_ROOT
  234. unset LDSHARED
  235. if [ "${WIN32}" -eq 1 ] && [ "${CROSS_COMPILING}" -eq 1 ]; then
  236. PYTHONPATH="${PAWPAW_PREFIX}/lib/python3.8/site-packages"
  237. if [ ! -e "${PYTHONPATH}/aggdraw.py" ]; then
  238. ln -sv "${PYTHONPATH}"/aggdraw-*.egg/aggdraw.py "${PYTHONPATH}/aggdraw.py"
  239. fi
  240. if [ ! -e "${PYTHONPATH}/aggdraw.pyd" ]; then
  241. ln -sv "${PYTHONPATH}"/aggdraw-*.egg/*.so "${PYTHONPATH}/aggdraw.pyd"
  242. fi
  243. unset PYTHONPATH
  244. fi
  245. # ---------------------------------------------------------------------------------------------------------------------
  246. # setuptools
  247. SETUPTOOLS_VERSION="68.2.2"
  248. download setuptools "${SETUPTOOLS_VERSION}" "https://files.pythonhosted.org/packages/ef/cc/93f7213b2ab5ed383f98ce8020e632ef256b406b8569606c3f160ed8e1c9"
  249. build_python setuptools "${SETUPTOOLS_VERSION}"
  250. if [ "${WIN32}" -eq 1 ] && [ "${CROSS_COMPILING}" -eq 1 ]; then
  251. PYTHONPATH="${PAWPAW_PREFIX}/lib/python3.8/site-packages"
  252. if [ ! -e "${PYTHONPATH}/_distutils_hack" ]; then
  253. ln -sv "${PYTHONPATH}"/setuptools-*.egg/_distutils_hack "${PYTHONPATH}/_distutils_hack"
  254. fi
  255. if [ ! -e "${PYTHONPATH}/pkg_resources" ]; then
  256. ln -sv "${PYTHONPATH}"/setuptools-*.egg/pkg_resources "${PYTHONPATH}/pkg_resources"
  257. fi
  258. if [ ! -e "${PYTHONPATH}/setuptools" ]; then
  259. ln -sv "${PYTHONPATH}"/setuptools-*.egg/setuptools "${PYTHONPATH}/setuptools"
  260. fi
  261. unset PYTHONPATH
  262. fi
  263. # ---------------------------------------------------------------------------------------------------------------------
  264. # Pillow
  265. PILLOW_VERSION="8.2.0"
  266. export EXTRA_CFLAGS="$(${PAWPAW_PREFIX}/bin/pkg-config --cflags python3 freetype2 libpng)"
  267. export EXTRA_LDFLAGS="$(${PAWPAW_PREFIX}/bin/pkg-config --libs python3 freetype2 libpng) -shared"
  268. if [ "${MACOS}" -eq 1 ]; then
  269. export EXTRA_LDFLAGS+=" -Wl,-undefined,dynamic_lookup"
  270. elif [ "${WIN32}" -eq 1 ]; then
  271. export EXTRA_LDFLAGS+=" -lgdi32 -lkernel32 -lpsapi -luser32"
  272. fi
  273. export LDSHARED="${TARGET_CXX}"
  274. PILLOW_EXTRAFLAGS=""
  275. PILLOW_EXTRAFLAGS+=" --enable-freetype"
  276. PILLOW_EXTRAFLAGS+=" --enable-zlib"
  277. PILLOW_EXTRAFLAGS+=" --disable-imagequant"
  278. PILLOW_EXTRAFLAGS+=" --disable-jpeg"
  279. PILLOW_EXTRAFLAGS+=" --disable-jpeg2000"
  280. PILLOW_EXTRAFLAGS+=" --disable-tiff"
  281. PILLOW_EXTRAFLAGS+=" --disable-webp"
  282. PILLOW_EXTRAFLAGS+=" --disable-webpmux"
  283. PILLOW_EXTRAFLAGS+=" --disable-xcb"
  284. if [ "${WIN32}" -eq 1 ] && [ "${CROSS_COMPILING}" -eq 1 ]; then
  285. PILLOW_EXTRAFLAGS+=" --disable-platform-guessing"
  286. fi
  287. download Pillow "${PILLOW_VERSION}" "https://files.pythonhosted.org/packages/21/23/af6bac2a601be6670064a817273d4190b79df6f74d8012926a39bc7aa77f"
  288. build_python Pillow "${PILLOW_VERSION}" "${PILLOW_EXTRAFLAGS}"
  289. unset LDSHARED
  290. if [ "${WIN32}" -eq 1 ] && [ "${CROSS_COMPILING}" -eq 1 ]; then
  291. PYTHONPATH="${PAWPAW_PREFIX}/lib/python3.8/site-packages"
  292. if [ ! -e "${PYTHONPATH}/PIL" ]; then
  293. ln -sv "${PYTHONPATH}"/Pillow-*.egg/PIL "${PYTHONPATH}/PIL"
  294. fi
  295. if [ ! -e "${PYTHONPATH}/PIL/_imaging.pyd" ]; then
  296. ln -sv "${PYTHONPATH}"/Pillow-*.egg/PIL/_imaging.*.so "${PYTHONPATH}/PIL/_imaging.pyd"
  297. fi
  298. if [ ! -e "${PYTHONPATH}/PIL/_imagingft.pyd" ]; then
  299. ln -sv "${PYTHONPATH}"/Pillow-*.egg/PIL/_imagingft.*.so "${PYTHONPATH}/PIL/_imagingft.pyd"
  300. fi
  301. if [ ! -e "${PYTHONPATH}/PIL/_imagingmath.pyd" ]; then
  302. ln -sv "${PYTHONPATH}"/Pillow-*.egg/PIL/_imagingmath.*.so "${PYTHONPATH}/PIL/_imagingmath.pyd"
  303. fi
  304. if [ ! -e "${PYTHONPATH}/PIL/_imagingmorph.pyd" ]; then
  305. ln -sv "${PYTHONPATH}"/Pillow-*.egg/PIL/_imagingmorph.*.so "${PYTHONPATH}/PIL/_imagingmorph.pyd"
  306. fi
  307. if [ ! -e "${PYTHONPATH}/PIL/_imagingtk.pyd" ]; then
  308. ln -sv "${PYTHONPATH}"/Pillow-*.egg/PIL/_imagingtk.*.so "${PYTHONPATH}/PIL/_imagingtk.pyd"
  309. fi
  310. unset PYTHONPATH
  311. fi
  312. # ---------------------------------------------------------------------------------------------------------------------
  313. # tornado
  314. TORNADO_VERSION="4.3"
  315. download tornado "${TORNADO_VERSION}" "https://files.pythonhosted.org/packages/21/29/e64c97013e97d42d93b3d5997234a6f17455f3744847a7c16289289f8fa6"
  316. build_python tornado "${TORNADO_VERSION}"
  317. if [ "${WIN32}" -eq 1 ] && [ "${CROSS_COMPILING}" -eq 1 ]; then
  318. PYTHONPATH="${PAWPAW_PREFIX}/lib/python3.8/site-packages"
  319. if [ ! -e "${PYTHONPATH}/tornado" ]; then
  320. ln -sv "${PYTHONPATH}"/tornado-*.egg/tornado "${PYTHONPATH}/tornado"
  321. fi
  322. unset PYTHONPATH
  323. fi
  324. # ---------------------------------------------------------------------------------------------------------------------
  325. # cryptodome
  326. CRYPTODOME_VERSION="3.19.0"
  327. export EXTRA_CFLAGS="$(${PAWPAW_PREFIX}/bin/pkg-config --cflags python3 openssl)"
  328. export EXTRA_LDFLAGS="$(${PAWPAW_PREFIX}/bin/pkg-config --libs python3 openssl) -shared"
  329. export LDSHARED="${TARGET_CXX}"
  330. download pycryptodomex "${CRYPTODOME_VERSION}" "https://files.pythonhosted.org/packages/14/c9/09d5df04c9f29ae1b49d0e34c9934646b53bb2131a55e8ed2a0d447c7c53"
  331. build_python pycryptodomex "${CRYPTODOME_VERSION}"
  332. if [ "${WIN32}" -eq 1 ] && [ "${CROSS_COMPILING}" -eq 1 ]; then
  333. PYTHONPATH="${PAWPAW_PREFIX}/lib/python3.8/site-packages"
  334. if [ ! -e "${PYTHONPATH}/Cryptodome" ]; then
  335. ln -sv "${PYTHONPATH}"/pycryptodomex-*.egg/Cryptodome "${PYTHONPATH}/Cryptodome"
  336. fi
  337. if [ ! -e "${PYTHONPATH}/Cryptodome/Cipher/_ARC4.pyd" ]; then
  338. ln -sv "${PYTHONPATH}"/pycryptodomex-*.egg/Cryptodome/Cipher/_ARC4.abi3.so "${PYTHONPATH}/Cryptodome/Cipher/_ARC4.pyd"
  339. fi
  340. if [ ! -e "${PYTHONPATH}/Cryptodome/Cipher/_chacha20.pyd" ]; then
  341. ln -sv "${PYTHONPATH}"/pycryptodomex-*.egg/Cryptodome/Cipher/_chacha20.abi3.so "${PYTHONPATH}/Cryptodome/Cipher/_chacha20.pyd"
  342. fi
  343. if [ ! -e "${PYTHONPATH}/Cryptodome/Cipher/_pkcs1_decode.pyd" ]; then
  344. ln -sv "${PYTHONPATH}"/pycryptodomex-*.egg/Cryptodome/Cipher/_pkcs1_decode.abi3.so "${PYTHONPATH}/Cryptodome/Cipher/_pkcs1_decode.pyd"
  345. fi
  346. if [ ! -e "${PYTHONPATH}/Cryptodome/Cipher/_raw_aes.pyd" ]; then
  347. ln -sv "${PYTHONPATH}"/pycryptodomex-*.egg/Cryptodome/Cipher/_raw_aes.abi3.so "${PYTHONPATH}/Cryptodome/Cipher/_raw_aes.pyd"
  348. fi
  349. if [ ! -e "${PYTHONPATH}/Cryptodome/Cipher/_raw_aesni.pyd" ]; then
  350. ln -sv "${PYTHONPATH}"/pycryptodomex-*.egg/Cryptodome/Cipher/_raw_aesni.abi3.so "${PYTHONPATH}/Cryptodome/Cipher/_raw_aesni.pyd"
  351. fi
  352. if [ ! -e "${PYTHONPATH}/Cryptodome/Cipher/_raw_arc2.pyd" ]; then
  353. ln -sv "${PYTHONPATH}"/pycryptodomex-*.egg/Cryptodome/Cipher/_raw_arc2.abi3.so "${PYTHONPATH}/Cryptodome/Cipher/_raw_arc2.pyd"
  354. fi
  355. if [ ! -e "${PYTHONPATH}/Cryptodome/Cipher/_raw_blowfish.pyd" ]; then
  356. ln -sv "${PYTHONPATH}"/pycryptodomex-*.egg/Cryptodome/Cipher/_raw_blowfish.abi3.so "${PYTHONPATH}/Cryptodome/Cipher/_raw_blowfish.pyd"
  357. fi
  358. if [ ! -e "${PYTHONPATH}/Cryptodome/Cipher/_raw_cast.pyd" ]; then
  359. ln -sv "${PYTHONPATH}"/pycryptodomex-*.egg/Cryptodome/Cipher/_raw_cast.abi3.so "${PYTHONPATH}/Cryptodome/Cipher/_raw_cast.pyd"
  360. fi
  361. if [ ! -e "${PYTHONPATH}/Cryptodome/Cipher/_raw_cbc.pyd" ]; then
  362. ln -sv "${PYTHONPATH}"/pycryptodomex-*.egg/Cryptodome/Cipher/_raw_cbc.abi3.so "${PYTHONPATH}/Cryptodome/Cipher/_raw_cbc.pyd"
  363. fi
  364. if [ ! -e "${PYTHONPATH}/Cryptodome/Cipher/_raw_cfb.pyd" ]; then
  365. ln -sv "${PYTHONPATH}"/pycryptodomex-*.egg/Cryptodome/Cipher/_raw_cfb.abi3.so "${PYTHONPATH}/Cryptodome/Cipher/_raw_cfb.pyd"
  366. fi
  367. if [ ! -e "${PYTHONPATH}/Cryptodome/Cipher/_raw_ctr.pyd" ]; then
  368. ln -sv "${PYTHONPATH}"/pycryptodomex-*.egg/Cryptodome/Cipher/_raw_ctr.abi3.so "${PYTHONPATH}/Cryptodome/Cipher/_raw_ctr.pyd"
  369. fi
  370. if [ ! -e "${PYTHONPATH}/Cryptodome/Cipher/_raw_des3.pyd" ]; then
  371. ln -sv "${PYTHONPATH}"/pycryptodomex-*.egg/Cryptodome/Cipher/_raw_des3.abi3.so "${PYTHONPATH}/Cryptodome/Cipher/_raw_des3.pyd"
  372. fi
  373. if [ ! -e "${PYTHONPATH}/Cryptodome/Cipher/_raw_des.pyd" ]; then
  374. ln -sv "${PYTHONPATH}"/pycryptodomex-*.egg/Cryptodome/Cipher/_raw_des.abi3.so "${PYTHONPATH}/Cryptodome/Cipher/_raw_des.pyd"
  375. fi
  376. if [ ! -e "${PYTHONPATH}/Cryptodome/Cipher/_raw_ecb.pyd" ]; then
  377. ln -sv "${PYTHONPATH}"/pycryptodomex-*.egg/Cryptodome/Cipher/_raw_ecb.abi3.so "${PYTHONPATH}/Cryptodome/Cipher/_raw_ecb.pyd"
  378. fi
  379. if [ ! -e "${PYTHONPATH}/Cryptodome/Cipher/_raw_eksblowfish.pyd" ]; then
  380. ln -sv "${PYTHONPATH}"/pycryptodomex-*.egg/Cryptodome/Cipher/_raw_eksblowfish.abi3.so "${PYTHONPATH}/Cryptodome/Cipher/_raw_eksblowfish.pyd"
  381. fi
  382. if [ ! -e "${PYTHONPATH}/Cryptodome/Cipher/_raw_ocb.pyd" ]; then
  383. ln -sv "${PYTHONPATH}"/pycryptodomex-*.egg/Cryptodome/Cipher/_raw_ocb.abi3.so "${PYTHONPATH}/Cryptodome/Cipher/_raw_ocb.pyd"
  384. fi
  385. if [ ! -e "${PYTHONPATH}/Cryptodome/Cipher/_raw_ofb.pyd" ]; then
  386. ln -sv "${PYTHONPATH}"/pycryptodomex-*.egg/Cryptodome/Cipher/_raw_ofb.abi3.so "${PYTHONPATH}/Cryptodome/Cipher/_raw_ofb.pyd"
  387. fi
  388. if [ ! -e "${PYTHONPATH}/Cryptodome/Cipher/_Salsa20.pyd" ]; then
  389. ln -sv "${PYTHONPATH}"/pycryptodomex-*.egg/Cryptodome/Cipher/_Salsa20.abi3.so "${PYTHONPATH}/Cryptodome/Cipher/_Salsa20.pyd"
  390. fi
  391. if [ ! -e "${PYTHONPATH}/Cryptodome/Hash/_BLAKE2b.pyd" ]; then
  392. ln -sv "${PYTHONPATH}"/pycryptodomex-*.egg/Cryptodome/Hash/_BLAKE2b.abi3.so "${PYTHONPATH}/Cryptodome/Hash/_BLAKE2b.pyd"
  393. fi
  394. if [ ! -e "${PYTHONPATH}/Cryptodome/Hash/_BLAKE2s.pyd" ]; then
  395. ln -sv "${PYTHONPATH}"/pycryptodomex-*.egg/Cryptodome/Hash/_BLAKE2s.abi3.so "${PYTHONPATH}/Cryptodome/Hash/_BLAKE2s.pyd"
  396. fi
  397. if [ ! -e "${PYTHONPATH}/Cryptodome/Hash/_ghash_clmul.pyd" ]; then
  398. ln -sv "${PYTHONPATH}"/pycryptodomex-*.egg/Cryptodome/Hash/_ghash_clmul.abi3.so "${PYTHONPATH}/Cryptodome/Hash/_ghash_clmul.pyd"
  399. fi
  400. if [ ! -e "${PYTHONPATH}/Cryptodome/Hash/_ghash_portable.pyd" ]; then
  401. ln -sv "${PYTHONPATH}"/pycryptodomex-*.egg/Cryptodome/Hash/_ghash_portable.abi3.so "${PYTHONPATH}/Cryptodome/Hash/_ghash_portable.pyd"
  402. fi
  403. if [ ! -e "${PYTHONPATH}/Cryptodome/Hash/_keccak.pyd" ]; then
  404. ln -sv "${PYTHONPATH}"/pycryptodomex-*.egg/Cryptodome/Hash/_keccak.abi3.so "${PYTHONPATH}/Cryptodome/Hash/_keccak.pyd"
  405. fi
  406. if [ ! -e "${PYTHONPATH}/Cryptodome/Hash/_MD2.pyd" ]; then
  407. ln -sv "${PYTHONPATH}"/pycryptodomex-*.egg/Cryptodome/Hash/_MD2.abi3.so "${PYTHONPATH}/Cryptodome/Hash/_MD2.pyd"
  408. fi
  409. if [ ! -e "${PYTHONPATH}/Cryptodome/Hash/_MD4.pyd" ]; then
  410. ln -sv "${PYTHONPATH}"/pycryptodomex-*.egg/Cryptodome/Hash/_MD4.abi3.so "${PYTHONPATH}/Cryptodome/Hash/_MD4.pyd"
  411. fi
  412. if [ ! -e "${PYTHONPATH}/Cryptodome/Hash/_MD5.pyd" ]; then
  413. ln -sv "${PYTHONPATH}"/pycryptodomex-*.egg/Cryptodome/Hash/_MD5.abi3.so "${PYTHONPATH}/Cryptodome/Hash/_MD5.pyd"
  414. fi
  415. if [ ! -e "${PYTHONPATH}/Cryptodome/Hash/_poly1305.pyd" ]; then
  416. ln -sv "${PYTHONPATH}"/pycryptodomex-*.egg/Cryptodome/Hash/_poly1305.abi3.so "${PYTHONPATH}/Cryptodome/Hash/_poly1305.pyd"
  417. fi
  418. if [ ! -e "${PYTHONPATH}/Cryptodome/Hash/_RIPEMD160.pyd" ]; then
  419. ln -sv "${PYTHONPATH}"/pycryptodomex-*.egg/Cryptodome/Hash/_RIPEMD160.abi3.so "${PYTHONPATH}/Cryptodome/Hash/_RIPEMD160.pyd"
  420. fi
  421. if [ ! -e "${PYTHONPATH}/Cryptodome/Hash/_SHA1.pyd" ]; then
  422. ln -sv "${PYTHONPATH}"/pycryptodomex-*.egg/Cryptodome/Hash/_SHA1.abi3.so "${PYTHONPATH}/Cryptodome/Hash/_SHA1.pyd"
  423. fi
  424. if [ ! -e "${PYTHONPATH}/Cryptodome/Hash/_SHA224.pyd" ]; then
  425. ln -sv "${PYTHONPATH}"/pycryptodomex-*.egg/Cryptodome/Hash/_SHA224.abi3.so "${PYTHONPATH}/Cryptodome/Hash/_SHA224.pyd"
  426. fi
  427. if [ ! -e "${PYTHONPATH}/Cryptodome/Hash/_SHA256.pyd" ]; then
  428. ln -sv "${PYTHONPATH}"/pycryptodomex-*.egg/Cryptodome/Hash/_SHA256.abi3.so "${PYTHONPATH}/Cryptodome/Hash/_SHA256.pyd"
  429. fi
  430. if [ ! -e "${PYTHONPATH}/Cryptodome/Hash/_SHA384.pyd" ]; then
  431. ln -sv "${PYTHONPATH}"/pycryptodomex-*.egg/Cryptodome/Hash/_SHA384.abi3.so "${PYTHONPATH}/Cryptodome/Hash/_SHA384.pyd"
  432. fi
  433. if [ ! -e "${PYTHONPATH}/Cryptodome/Hash/_SHA512.pyd" ]; then
  434. ln -sv "${PYTHONPATH}"/pycryptodomex-*.egg/Cryptodome/Hash/_SHA512.abi3.so "${PYTHONPATH}/Cryptodome/Hash/_SHA512.pyd"
  435. fi
  436. if [ ! -e "${PYTHONPATH}/Cryptodome/Math/_modexp.pyd" ]; then
  437. ln -sv "${PYTHONPATH}"/pycryptodomex-*.egg/Cryptodome/Math/_modexp.abi3.so "${PYTHONPATH}/Cryptodome/Math/_modexp.pyd"
  438. fi
  439. if [ ! -e "${PYTHONPATH}/Cryptodome/Protocol/_scrypt.pyd" ]; then
  440. ln -sv "${PYTHONPATH}"/pycryptodomex-*.egg/Cryptodome/Protocol/_scrypt.abi3.so "${PYTHONPATH}/Cryptodome/Protocol/_scrypt.pyd"
  441. fi
  442. if [ ! -e "${PYTHONPATH}/Cryptodome/PublicKey/_ec_ws.pyd" ]; then
  443. ln -sv "${PYTHONPATH}"/pycryptodomex-*.egg/Cryptodome/PublicKey/_ec_ws.abi3.so "${PYTHONPATH}/Cryptodome/PublicKey/_ec_ws.pyd"
  444. fi
  445. if [ ! -e "${PYTHONPATH}/Cryptodome/PublicKey/_ed25519.pyd" ]; then
  446. ln -sv "${PYTHONPATH}"/pycryptodomex-*.egg/Cryptodome/PublicKey/_ed25519.abi3.so "${PYTHONPATH}/Cryptodome/PublicKey/_ed25519.pyd"
  447. fi
  448. if [ ! -e "${PYTHONPATH}/Cryptodome/PublicKey/_ed448.pyd" ]; then
  449. ln -sv "${PYTHONPATH}"/pycryptodomex-*.egg/Cryptodome/PublicKey/_ed448.abi3.so "${PYTHONPATH}/Cryptodome/PublicKey/_ed448.pyd"
  450. fi
  451. if [ ! -e "${PYTHONPATH}/Cryptodome/PublicKey/_x25519.pyd" ]; then
  452. ln -sv "${PYTHONPATH}"/pycryptodomex-*.egg/Cryptodome/PublicKey/_x25519.abi3.so "${PYTHONPATH}/Cryptodome/PublicKey/_x25519.pyd"
  453. fi
  454. if [ ! -e "${PYTHONPATH}/Cryptodome/Util/_cpuid_c.pyd" ]; then
  455. ln -sv "${PYTHONPATH}"/pycryptodomex-*.egg/Cryptodome/Util/_cpuid_c.abi3.so "${PYTHONPATH}/Cryptodome/Util/_cpuid_c.pyd"
  456. fi
  457. if [ ! -e "${PYTHONPATH}/Cryptodome/Util/_strxor.pyd" ]; then
  458. ln -sv "${PYTHONPATH}"/pycryptodomex-*.egg/Cryptodome/Util/_strxor.abi3.so "${PYTHONPATH}/Cryptodome/Util/_strxor.pyd"
  459. fi
  460. unset PYTHONPATH
  461. fi
  462. # ---------------------------------------------------------------------------------------------------------------------