filesystem: make msystems pluggable. (#5381)

The /etc/msystem script sources /etc/msystem.d/${MSYSTEM,,} (but using
only POSIX shell features rather than a bash-ism to lower-case since
/etc/msystem is included in /etc/profile, so may be used by a non-bash
shell).  /usr/bin/shell validates an MSYSTEM by checking for the
existence of that file.
This commit is contained in:
jeremyd2019 2025-05-19 23:02:41 -07:00 committed by GitHub
parent 8acde9d1c0
commit dc17e6ed9e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 67 additions and 60 deletions

View File

@ -4,7 +4,7 @@
# Contributor: Alethea Rose <alethea@alethearose.com>
pkgname=filesystem
pkgver=2025.02.23
pkgver=2025.05.08
pkgrel=1
pkgdesc='Base filesystem'
arch=('i686' 'x86_64')
@ -32,6 +32,12 @@ source=('bash.bashrc'
'clangarm64.ico'
'msys2_shell.cmd'
'msystem'
'msystem.d.CLANG64'
'msystem.d.CLANGARM64'
'msystem.d.MINGW32'
'msystem.d.MINGW64'
'msystem.d.MSYS'
'msystem.d.UCRT64'
'nsswitch.conf'
'profile'
'profile.lang.sh'
@ -62,13 +68,19 @@ sha256sums=('36d4affa25606c87e70c42a5fe2294aa7898fb54f93a27910fb55224f4d6588a'
'56d4080c15dff89a6263f3d5f9aa68849b2062179cabd6d78edfe0e3af6bf64a'
'3b7af99516768485383b34d606749e6f98a250372a8191bc8d3a962d66bdfe35'
'eab4c7fae0702821951223a3333cb5ce2547553dc1287058324a39cc374d48a7'
'b0a722f7a4096f8d9a572bf6f530b53d39f2a94b4d0e1ed3f70f26ce7469bbea'
'74bd56de00e49c3917deca2ede723eecd1312a86357b100ae8aabd219f6e7d5e'
'f2b01902f08feb07fed47f5ffea3462764034abc19e9ddf3aa6f20f93afeaab6'
'82859ae69d40de560d03c0a59e38e8b3405293003c1d24237f6bbd5efe3c87ef'
'809ff47346e21e0e1d285e64f3e0975e7345e311e98bb4e100c8da15e1426d9b'
'879495ad6b15f59ec2057551e06fb2917715c66de80f5bf915d6176d78e50eee'
'c218288806ec0dcadc2b8807c221cdf6c7bcbce8a21502c29885cf4622b52a69'
'240fa8efb6fe4b7dae826f5f6d481e41a09913462fe61b5a4ff036d6daa7a835'
'91f1f918cf13deab0124082086e990786113b0e710dbda4678d8fc14905ad94d'
'b8abe6231cd2b089d708d3e3097ef8c279af1e1594aa15c6eaab4150ed9dffdc'
'6c0ca979c7b146b3750103b1296a399764f4e1b222ee091d3aa072b6da16c1a5'
'cbec90c9403826bf6d8dd1fed16240b9d8695ec15df5dcdab7e485bb46c016ab'
'a2ec65de2adb0277f51001463c1a0759f8a5bc35cf2f213fa26ee73df52c5280'
'14a23772ffb216d34a18012d42d6ec5edf3c3cfb6162bc46d390624a69092ae6'
'70d8b1351768765976d71ee2b7b66eb65cc23a263698cfcecf65cef3bf57177c'
'f63241cc56aa7b7ec6962d19991d211b4e1641b78ba5226835118ab493830a8b'
'e96c1f54ffff792e738aa032815c82c30821b0683806e5ed0ba2a759db2fd494'
'3a4d629d72ab8ac58427097c3a8915c4e8186f819cd369c2da5eca955d08fceb'
@ -98,11 +110,15 @@ package() {
# setup /etc
#
install -d etc/{fstab.d,skel,profile.d,post-install}
install -d etc/{fstab.d,skel,profile.d,post-install,msystem.d}
for f in bash.bashrc fstab shells profile nsswitch.conf msystem os-release; do
install -m644 ${srcdir}/${f} etc/
done
for f in ${srcdir}/msystem.d.*; do
install -m644 ${f} "etc/msystem.d/${f#${srcdir}/msystem.d.}"
done
for f in ${srcdir}/*.post; do
install -m644 ${f} etc/post-install/
done

View File

@ -20,56 +20,8 @@ unset MINGW_CHOST
unset MINGW_PREFIX
unset MINGW_PACKAGE_PREFIX
case "${MSYSTEM}" in
MINGW32)
MSYSTEM_PREFIX='/mingw32'
MSYSTEM_CARCH='i686'
MSYSTEM_CHOST='i686-w64-mingw32'
MINGW_CHOST="${MSYSTEM_CHOST}"
MINGW_PREFIX="${MSYSTEM_PREFIX}"
MINGW_PACKAGE_PREFIX="mingw-w64-${MSYSTEM_CARCH}"
export MSYSTEM_PREFIX MSYSTEM_CARCH MSYSTEM_CHOST MINGW_CHOST MINGW_PREFIX MINGW_PACKAGE_PREFIX
;;
MINGW64)
MSYSTEM_PREFIX='/mingw64'
MSYSTEM_CARCH='x86_64'
MSYSTEM_CHOST='x86_64-w64-mingw32'
MINGW_CHOST="${MSYSTEM_CHOST}"
MINGW_PREFIX="${MSYSTEM_PREFIX}"
MINGW_PACKAGE_PREFIX="mingw-w64-${MSYSTEM_CARCH}"
export MSYSTEM_PREFIX MSYSTEM_CARCH MSYSTEM_CHOST MINGW_CHOST MINGW_PREFIX MINGW_PACKAGE_PREFIX
;;
CLANG64)
MSYSTEM_PREFIX='/clang64'
MSYSTEM_CARCH='x86_64'
MSYSTEM_CHOST='x86_64-w64-mingw32'
MINGW_CHOST="${MSYSTEM_CHOST}"
MINGW_PREFIX="${MSYSTEM_PREFIX}"
MINGW_PACKAGE_PREFIX="mingw-w64-clang-${MSYSTEM_CARCH}"
export MSYSTEM_PREFIX MSYSTEM_CARCH MSYSTEM_CHOST MINGW_CHOST MINGW_PREFIX MINGW_PACKAGE_PREFIX
;;
CLANGARM64)
MSYSTEM_PREFIX='/clangarm64'
MSYSTEM_CARCH='aarch64'
MSYSTEM_CHOST='aarch64-w64-mingw32'
MINGW_CHOST="${MSYSTEM_CHOST}"
MINGW_PREFIX="${MSYSTEM_PREFIX}"
MINGW_PACKAGE_PREFIX="mingw-w64-clang-${MSYSTEM_CARCH}"
export MSYSTEM_PREFIX MSYSTEM_CARCH MSYSTEM_CHOST MINGW_CHOST MINGW_PREFIX MINGW_PACKAGE_PREFIX
;;
UCRT64)
MSYSTEM_PREFIX='/ucrt64'
MSYSTEM_CARCH='x86_64'
MSYSTEM_CHOST='x86_64-w64-mingw32'
MINGW_CHOST="${MSYSTEM_CHOST}"
MINGW_PREFIX="${MSYSTEM_PREFIX}"
MINGW_PACKAGE_PREFIX="mingw-w64-ucrt-${MSYSTEM_CARCH}"
export MSYSTEM_PREFIX MSYSTEM_CARCH MSYSTEM_CHOST MINGW_CHOST MINGW_PREFIX MINGW_PACKAGE_PREFIX
;;
*)
MSYSTEM_PREFIX='/usr'
MSYSTEM_CARCH="$(/usr/bin/uname -m)"
MSYSTEM_CHOST="${MSYSTEM_CARCH}-pc-msys"
export MSYSTEM_PREFIX MSYSTEM_CARCH MSYSTEM_CHOST
;;
esac
if [ -e "/etc/msystem.d/${MSYSTEM}" ]; then
source "/etc/msystem.d/${MSYSTEM}"
else
source "/etc/msystem.d/MSYS"
fi

View File

@ -0,0 +1,7 @@
MSYSTEM_PREFIX='/clang64'
MSYSTEM_CARCH='x86_64'
MSYSTEM_CHOST='x86_64-w64-mingw32'
MINGW_CHOST="${MSYSTEM_CHOST}"
MINGW_PREFIX="${MSYSTEM_PREFIX}"
MINGW_PACKAGE_PREFIX="mingw-w64-clang-${MSYSTEM_CARCH}"
export MSYSTEM_PREFIX MSYSTEM_CARCH MSYSTEM_CHOST MINGW_CHOST MINGW_PREFIX MINGW_PACKAGE_PREFIX

View File

@ -0,0 +1,7 @@
MSYSTEM_PREFIX='/clangarm64'
MSYSTEM_CARCH='aarch64'
MSYSTEM_CHOST='aarch64-w64-mingw32'
MINGW_CHOST="${MSYSTEM_CHOST}"
MINGW_PREFIX="${MSYSTEM_PREFIX}"
MINGW_PACKAGE_PREFIX="mingw-w64-clang-${MSYSTEM_CARCH}"
export MSYSTEM_PREFIX MSYSTEM_CARCH MSYSTEM_CHOST MINGW_CHOST MINGW_PREFIX MINGW_PACKAGE_PREFIX

View File

@ -0,0 +1,7 @@
MSYSTEM_PREFIX='/mingw32'
MSYSTEM_CARCH='i686'
MSYSTEM_CHOST='i686-w64-mingw32'
MINGW_CHOST="${MSYSTEM_CHOST}"
MINGW_PREFIX="${MSYSTEM_PREFIX}"
MINGW_PACKAGE_PREFIX="mingw-w64-${MSYSTEM_CARCH}"
export MSYSTEM_PREFIX MSYSTEM_CARCH MSYSTEM_CHOST MINGW_CHOST MINGW_PREFIX MINGW_PACKAGE_PREFIX

View File

@ -0,0 +1,7 @@
MSYSTEM_PREFIX='/mingw64'
MSYSTEM_CARCH='x86_64'
MSYSTEM_CHOST='x86_64-w64-mingw32'
MINGW_CHOST="${MSYSTEM_CHOST}"
MINGW_PREFIX="${MSYSTEM_PREFIX}"
MINGW_PACKAGE_PREFIX="mingw-w64-${MSYSTEM_CARCH}"
export MSYSTEM_PREFIX MSYSTEM_CARCH MSYSTEM_CHOST MINGW_CHOST MINGW_PREFIX MINGW_PACKAGE_PREFIX

View File

@ -0,0 +1,4 @@
MSYSTEM_PREFIX='/usr'
MSYSTEM_CARCH="$(/usr/bin/uname -m)"
MSYSTEM_CHOST="${MSYSTEM_CARCH}-pc-msys"
export MSYSTEM_PREFIX MSYSTEM_CARCH MSYSTEM_CHOST

View File

@ -0,0 +1,7 @@
MSYSTEM_PREFIX='/ucrt64'
MSYSTEM_CARCH='x86_64'
MSYSTEM_CHOST='x86_64-w64-mingw32'
MINGW_CHOST="${MSYSTEM_CHOST}"
MINGW_PREFIX="${MSYSTEM_PREFIX}"
MINGW_PACKAGE_PREFIX="mingw-w64-ucrt-${MSYSTEM_CARCH}"
export MSYSTEM_PREFIX MSYSTEM_CARCH MSYSTEM_CHOST MINGW_CHOST MINGW_PREFIX MINGW_PACKAGE_PREFIX

View File

@ -8,7 +8,7 @@ if [[ -z "${1}" || "${1}" =~ ^(--help|-h)$ ]]; then tee <<done
Copyright (C) 2016 Renato Silva
Licensed under public domain
Usage: source $(basename "${0}") mingw32|mingw64|msys
Usage: source $(basename "${0}") msystem_name
Switch between shells without restarting MSYS2. This is done by setting the
MSYSTEM variable and sourcing /etc/profile. For interactive shells,
@ -36,12 +36,12 @@ fi
# Argument validation
if [[ "${BASH_SOURCE}" != "${0}" && ! "${1}" =~ ^(mingw32|mingw64|ucrt64|clang64|clangarm64|msys)$ ]]; then
if [[ "${BASH_SOURCE}" != "${0}" && ( ! "${1}" =~ ^[a-z]+(32|64)?$ || ! -e "/etc/msystem.d/${1^^}" ) ]]; then
echo "Unrecognized shell type ${1}"
return 1
fi
if [[ "${BASH_SOURCE}" = "${0}" && "${1}" =~ ^(mingw32|mingw64|ucrt64|clang64|clangarm64|msys)$ ]]; then
if [[ "${BASH_SOURCE}" = "${0}" && "${1}" =~ ^[a-z]+(32|64)?$ && -e "/etc/msystem.d/${1^^}" ]]; then
echo "Cannot switch to ${1} shell without sourcing"
exit 1
fi