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.

167 lines
7.3KB

  1. #!/bin/bash
  2. set -e
  3. if [ x"${1}" = x"" ]; then
  4. echo "usage: $0 <target>"
  5. exit 1
  6. fi
  7. function get_linux_deb_arch() {
  8. case "${1}" in
  9. "linux-arm64"|"linux-aarch64") echo "arm64" ;;
  10. "linux-armhf") echo "armhf" ;;
  11. "linux-i386"|"linux-i686") echo "i386" ;;
  12. "linux-riscv64") echo "riscv64" ;;
  13. "linux-x86_64") echo "amd64" ;;
  14. esac
  15. }
  16. function install_compiler() {
  17. local arch="${1}"
  18. local release="${2}"
  19. apt-get install -yqq g++
  20. if [ -n "${GITHUB_ENV}" ] && [ "${release}" = "bionic" ]; then
  21. apt-get install -yqq g++-11
  22. update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 60 --slave /usr/bin/g++ g++ /usr/bin/g++-11
  23. fi
  24. case "${arch}" in
  25. "linux-aarch64")
  26. if [ "$(uname -m)" != "aarch64" ]; then
  27. apt-get install -yqq g++-aarch64-linux-gnu
  28. elif [ -n "${GITHUB_ENV}" ] && [ "${release}" = "bionic" ]; then
  29. update-alternatives --install /usr/bin/aarch64-linux-gnu-gcc aarch64-linux-gnu-gcc /usr/bin/gcc-11 60 --slave /usr/bin/aarch64-linux-gnu-g++ aarch64-linux-gnu-g++ /usr/bin/g++-11
  30. fi
  31. ;;
  32. "linux-armhf")
  33. if [ "$(uname -m)" != "armhf" ]; then
  34. apt-get install -yqq g++-arm-linux-gnueabihf
  35. elif [ -n "${GITHUB_ENV}" ] && [ "${release}" = "bionic" ]; then
  36. update-alternatives --install /usr/bin/arm-linux-gnueabihf-gcc arm-linux-gnueabihf-gcc /usr/bin/gcc-11 60 --slave /usr/bin/arm-linux-gnueabihf-g++ arm-linux-gnueabihf-g++ /usr/bin/g++-11
  37. fi
  38. ;;
  39. "linux-i686")
  40. if [ "$(uname -m)" != "i686" ]; then
  41. apt-get install -yqq g++-i686-linux-gnu
  42. elif [ -n "${GITHUB_ENV}" ] && [ "${release}" = "bionic" ]; then
  43. update-alternatives --install /usr/bin/i686-linux-gnu-gcc i686-linux-gnu-gcc /usr/bin/gcc-11 60 --slave /usr/bin/i686-linux-gnu-g++ i686-linux-gnu-g++ /usr/bin/g++-11
  44. fi
  45. ;;
  46. "linux-riscv64")
  47. if [ "$(uname -m)" != "riscv64" ]; then
  48. apt-get install -yqq g++-riscv64-linux-gnu
  49. fi
  50. ;;
  51. "linux-x86_64")
  52. if [ "$(uname -m)" != "x86_64" ]; then
  53. apt-get install -yqq g++-x86_64-linux-gnu
  54. elif [ -n "${GITHUB_ENV}" ] && [ "${release}" = "bionic" ]; then
  55. update-alternatives --install /usr/bin/x86_64-linux-gnu-gcc x86_64-linux-gnu-gcc /usr/bin/gcc-11 60 --slave /usr/bin/x86_64-linux-gnu-g++ x86_64-linux-gnu-g++ /usr/bin/g++-11
  56. fi
  57. ;;
  58. "win32")
  59. apt-get install -yqq binutils-mingw-w64-i686 g++-mingw-w64-i686
  60. ;;
  61. "win64")
  62. apt-get install -yqq binutils-mingw-w64-x86-64 g++-mingw-w64-x86-64
  63. ;;
  64. esac
  65. }
  66. case "${1}" in
  67. "macos"|"macos-intel"|"macos-10.15"|"macos-universal"|"macos-universal-10.15")
  68. brew uninstall --ignore-dependencies --force cairo cmake freetype
  69. brew install autoconf automake coreutils gawk git gnu-sed jq libtool make meson
  70. [ -n "${GITHUB_ENV}" ] && echo "PAWPAW_PACK_NAME=${1}-$(sw_vers -productVersion | cut -d '.' -f 1)" >> "${GITHUB_ENV}"
  71. ;;
  72. *)
  73. if [ "$(id -u)" -ne 0 ] && [ -e /usr/bin/sudo ]; then
  74. exec /usr/bin/sudo $0 "$@"
  75. fi
  76. apt-get update -qq
  77. apt-get install -yqq autoconf automake build-essential curl cmake file git jq libglib2.0-dev-bin libtool lsb-release make meson gperf patchelf pkg-config uuid-dev zlib1g-dev
  78. linux_arch=$(get_linux_deb_arch "${1}")
  79. release=$(lsb_release -cs 2>/dev/null)
  80. if [ -n "${linux_arch}" ]; then
  81. if [ "$(lsb_release -si 2>/dev/null)" = "Ubuntu" ]; then
  82. if [ -e /etc/apt/sources.list.d/ubuntu.sources ]; then
  83. sed -i 's|Types: deb|Types: deb\nArchitectures: amd64 i386|g' /etc/apt/sources.list.d/ubuntu.sources
  84. else
  85. sed -i "s/deb http/deb [arch=i386,amd64] http/" /etc/apt/sources.list
  86. sed -i "s/deb mirror/deb [arch=i386,amd64] mirror/" /etc/apt/sources.list
  87. fi
  88. if [ "${linux_arch}" != "amd64" ] && [ "${linux_arch}" != "i386" ]; then
  89. echo "deb [arch=${linux_arch}] http://ports.ubuntu.com/ubuntu-ports ${release} main restricted universe multiverse" | tee -a /etc/apt/sources.list
  90. echo "deb [arch=${linux_arch}] http://ports.ubuntu.com/ubuntu-ports ${release}-updates main restricted universe multiverse" | tee -a /etc/apt/sources.list
  91. echo "deb [arch=${linux_arch}] http://ports.ubuntu.com/ubuntu-ports ${release}-backports main restricted universe multiverse" | tee -a /etc/apt/sources.list
  92. fi
  93. if [ -n "${GITHUB_ENV}" ] && [ "${release}" = "bionic" ]; then
  94. apt-get install -yqq --no-install-recommends software-properties-common
  95. add-apt-repository -yn ppa:ubuntu-toolchain-r/test
  96. fi
  97. fi
  98. dpkg --add-architecture ${linux_arch}
  99. apt-get update -qq
  100. apt-get install -yqq --allow-downgrades \
  101. binfmt-support \
  102. qemu-user-static \
  103. x11proto-dev x11proto-render-dev x11proto-xf86vidmode-dev \
  104. libasound2-dev:${linux_arch} \
  105. libdbus-1-dev:${linux_arch} \
  106. libfftw3-dev:${linux_arch} \
  107. libfreetype6-dev:${linux_arch} \
  108. libgl1-mesa-dev:${linux_arch} \
  109. libglib2.0-dev:${linux_arch} \
  110. libpcre2-dev:${linux_arch} \
  111. libpcre3-dev:${linux_arch} \
  112. libvulkan-dev:${linux_arch} \
  113. libx11-dev:${linux_arch} \
  114. libxcb1-dev:${linux_arch} \
  115. libxcb-dri2-0-dev:${linux_arch} \
  116. libxcursor-dev:${linux_arch} \
  117. libxdamage-dev:${linux_arch} \
  118. libxext-dev:${linux_arch} \
  119. libxfixes-dev:${linux_arch} \
  120. libxrandr-dev:${linux_arch} \
  121. libxrender-dev:${linux_arch} \
  122. libxxf86vm-dev:${linux_arch} \
  123. uuid-dev:${linux_arch}
  124. apt-get install -yqq --allow-downgrades \
  125. qtbase5-dev-tools \
  126. libqt5svg5-dev:${linux_arch} \
  127. qtbase5-dev:${linux_arch}
  128. elif [ "${1}" = "win32" ] || [ "${1}" = "win64" ]; then
  129. dpkg --add-architecture i386
  130. apt-get update -qq
  131. apt-get install -yqq autopoint libffi-dev libreadline-dev mingw-w64
  132. if [ "$(lsb_release -si 2>/dev/null)" = "Debian" ]; then
  133. apt-get install -yqq wine wine32 wine64
  134. else
  135. apt-get install -yqq wine-stable
  136. fi
  137. fi
  138. case "${release}" in
  139. "bionic"|"bullseye"|"focal")
  140. apt-get install -yqq --no-install-recommends python3-pip
  141. pip3 install --isolated --upgrade --no-cache-dir --force-reinstall pip
  142. pip3 install --isolated --upgrade --no-cache-dir --force-reinstall cmake meson
  143. ;;
  144. esac
  145. install_compiler "${1}" "${release}"
  146. [ -n "${GITHUB_ENV}" ] && echo "PAWPAW_PACK_NAME=${1}-${release}" >> "${GITHUB_ENV}"
  147. ;;
  148. esac
  149. # if we reach this point in the script, make sure to return/exit 0
  150. exit 0