|
|
@@ -39,6 +39,10 @@
|
|
|
{ # this ensures the entire script is downloaded #
|
|
|
set -eu
|
|
|
|
|
|
+ # Prevent user grep settings from injecting flags (e.g. --color=always) that
|
|
|
+ # corrupt captured output and break pattern matching throughout this script.
|
|
|
+ unset GREP_OPTIONS GREP_COLOR GREP_COLORS
|
|
|
+
|
|
|
BOOTSTRAP_TMPDIR="$(mktemp -d /tmp/qmk-bootstrap-failure.XXXXXX)"
|
|
|
trap 'rm -rf "$BOOTSTRAP_TMPDIR" >/dev/null 2>&1 || true' EXIT
|
|
|
FAILURE_FILE="${BOOTSTRAP_TMPDIR}/fail"
|
|
|
@@ -225,11 +229,28 @@ __EOT__
|
|
|
macos) echo "zstd clang-format make hidapi libusb dos2unix git" ;;
|
|
|
windows) echo "base-devel: zstd:p toolchain:p clang:p hidapi:p dos2unix: git: unzip:" ;;
|
|
|
linux)
|
|
|
+ if ldd --version 2>&1 | grep -qi musl; then
|
|
|
+ echo >&2
|
|
|
+ echo "Sorry, QMK's pre-built toolchains are compiled against glibc and will not run on musl-based Linux distributions." >&2
|
|
|
+ echo >&2
|
|
|
+ echo "Try using a glibc-based distribution, or use Docker instead:" >&2
|
|
|
+ echo " - https://docs.qmk.fm/newbs_getting_started#set-up-your-environment" >&2
|
|
|
+ echo " - https://docs.qmk.fm/#/getting_started_docker" >&2
|
|
|
+ echo >&2
|
|
|
+ echo "If you cannot use a compatible distro, you can try installing the \`qmk\` Python package manually using \`pip\`, most likely requiring a virtual environment:" >&2
|
|
|
+ echo " % python3 -m pip install qmk" >&2
|
|
|
+ echo >&2
|
|
|
+ echo "All other dependencies will need to be installed manually, such as make, git, AVR and ARM toolchains, and associated flashing utilities." >&2
|
|
|
+ echo >&2
|
|
|
+ echo "**NOTE**: QMK does not provide official support for musl-based environments. Here be dragons, you are on your own." >&2
|
|
|
+ signal_execution_failure
|
|
|
+ return
|
|
|
+ fi
|
|
|
case $(grep ID /etc/os-release) in
|
|
|
*arch* | *manjaro* | *cachyos*) echo "zstd base-devel clang diffutils wget unzip zip hidapi dos2unix git" ;;
|
|
|
*debian* | *ubuntu*) echo "zstd build-essential clang-format diffutils wget unzip zip libhidapi-hidraw0 dos2unix git" ;;
|
|
|
*fedora*) echo "zstd clang diffutils which gcc git wget unzip zip hidapi dos2unix libusb-devel libusb1-devel libusb-compat-0.1-devel libusb0-devel git epel-release" ;;
|
|
|
- *suse*) echo "zstd clang diffutils wget unzip zip libhidapi-hidraw0 dos2unix git libusb-1_0-devel gzip which" ;;
|
|
|
+ *suse*) echo "zstd make gcc binutils clang diffutils wget unzip zip libhidapi-hidraw0 dos2unix git libusb-1_0-devel gzip which" ;;
|
|
|
*gentoo*) echo "zstd sys-apps/diffutils wget unzip zip dev-libs/hidapi dos2unix dev-vcs/git dev-libs/libusb app-arch/gzip which" ;;
|
|
|
*)
|
|
|
echo >&2
|
|
|
@@ -321,25 +342,24 @@ __EOT__
|
|
|
*fedora*)
|
|
|
echo "It will also install the following system packages using 'dnf':" >&2
|
|
|
print_package_manager_deps_and_delay
|
|
|
- # Some RHEL-likes need EPEL for hidapi
|
|
|
+ # Some RHEL-likes need EPEL for hidapi and libusb packages
|
|
|
$(nsudo) dnf -y install epel-release 2>/dev/null || true
|
|
|
- # RHEL-likes have some naming differences in libusb packages, so manually handle those
|
|
|
- $(nsudo) dnf -y install $(get_package_manager_deps | tr ' ' '\n' | grep -v 'epel-release' | grep -v libusb | tr '\n' ' ')
|
|
|
- for pkg in $(get_package_manager_deps | tr ' ' '\n' | grep libusb); do
|
|
|
+ # RHEL-likes have naming differences in libusb/hidapi packages; try each individually
|
|
|
+ $(nsudo) dnf -y install $(get_package_manager_deps | tr ' ' '\n' | grep -v 'epel-release' | grep -v libusb | grep -v hidapi | tr '\n' ' ')
|
|
|
+ for pkg in $(get_package_manager_deps | tr ' ' '\n' | grep -E 'libusb|hidapi'); do
|
|
|
$(nsudo) dnf -y install "$pkg" 2>/dev/null || true
|
|
|
done
|
|
|
;;
|
|
|
*opensuse* | *suse*)
|
|
|
- echo "It will also install development tools as well as the following system packages using 'zypper':" >&2
|
|
|
+ echo "It will also install the following system packages using 'zypper':" >&2
|
|
|
print_package_manager_deps_and_delay
|
|
|
$(nsudo) zypper --non-interactive refresh
|
|
|
- $(nsudo) zypper --non-interactive install -t pattern devel_basis devel_C_C++
|
|
|
$(nsudo) zypper --non-interactive install $(get_package_manager_deps)
|
|
|
;;
|
|
|
*gentoo*)
|
|
|
echo "It will also install the following system packages using 'emerge':" >&2
|
|
|
print_package_manager_deps_and_delay
|
|
|
- $(nsudo) emerge --sync
|
|
|
+ $(nsudo) emerge-webrsync
|
|
|
$(nsudo) emerge --noreplace --ask=n $(get_package_manager_deps | tr ' ' '\n') || signal_execution_failure
|
|
|
exit_if_execution_failed
|
|
|
;;
|