различать MSYS и MSYS2 и CYGWIN

Как можно отличить MSYS от MSYS2 и CYGWIN, например, с помощью команды или предопределенной переменной среды?

Это различие потребуется таким инструментам, как Scons, для адаптации сгенерированных командных строк, например. вводя двойную обратную косую черту c:\\path\\to\\file или обратную косую черту `cygpath -w /c/path/to/file`.

Справочная информация: я хотел бы использовать MSYS2 из-за его превосходного управления пакетами. Scons генерирует /c/path/to/file на MSYS2, но csc (компилятор Microsoft C#) допускает только пути в стиле Windows.


person Roland Puntaier    schedule 08.09.2015    source источник
comment
MSYS может разрешить использовать имя пути, такое как 'C:\path\to\file', но предпочитает использовать '/c/path/to/file'. Проблема в любом случае должна быть спорной: когда вы вызываете любой собственный инструмент (например, компилятор Microsoft C#) из оболочки MSYS, путь «/c/path/to/file» преобразуется на лету в его собственные окна. эквивалентно (возможно, с обычными разделителями имен каталогов '/', которые действительны в собственных путях). Я не знаю, делает ли то же самое MSYS2 — я им не пользуюсь — но я понял, что так и должно быть.   -  person Keith Marshall    schedule 08.09.2015
comment
MSYS делает, но MSYS2 создает проблемы с csc (ошибка CS1504: Исходный файл не может быть открыт), вероятно, потому, что MSYS2 - это почти Cygwin.   -  person Roland Puntaier    schedule 09.09.2015
comment
MSYS2 — это независимый форк cygwin; он не поддерживается MinGW.org (который предоставляет MSYS) именно по той причине, что он, кажется, полностью упустил из виду первоначальный минималистский замысел MSYS, поэтому становится, как вы говорите, почти cygwin (так зачем возиться с этим, а не просто использовать cygwin?)   -  person Keith Marshall    schedule 09.09.2015
comment
Да правильно. Я обратился к нему в поисках простого способа установки MSYS с MinGW в Windows с помощью командной строки. Название MSYS2 вводит в заблуждение. Теперь я делаю choco install git && choco install mingw и копирую tools/mingw64 поверх git/mingw64 и использую git-bash.   -  person Roland Puntaier    schedule 09.09.2015
comment
Простой способ установки MinGW+MSYS из командной строки — mingw-get install ..., но сейчас у нас нет пакета git для этого. Кроме того, если вам конкретно нужен mingw-w64 -- что совершенно точно не MinGW -- тогда я не думаю, что для этого есть какие-либо пакеты с поддержкой mingw-get. .   -  person Keith Marshall    schedule 09.09.2015
comment
[Waf][waf.io/] работает на MSYS2, поскольку использует модуль подпроцесса Python без оболочки.   -  person Roland Puntaier    schedule 15.12.2015


Ответы (2)


Я не знаю ни одной переменной окружения, которая надежно передала бы эту информацию, но вывод uname -s должен сообщить вам об этом.

person Keith Marshall    schedule 08.09.2015
comment
cygwin: CYGWIN_NT-6.1-WOW64, MSYS: MINGW64_NT-6.1, MSYS2: MINGW64_NT-6.1. Так что это не помогает различать MSYS и MSYS2. Я думаю, что это проблема MSYS2. Я постараюсь переслать его туда. Спасибо. - person Roland Puntaier; 09.09.2015
comment
@RolandPuntaier: Что говорит uname -o? Это больше полезно? - person Keith Marshall; 09.09.2015
comment
uname -o — это cygwin: Cygwin, MSYS: Msys, MSYS2: Msys. То есть не лучше :-) - person Roland Puntaier; 09.09.2015
comment
@RolandPuntaier: uname -o ... не лучше. Тогда это недостаток в MSYS2, с которым я не могу помочь. Вам нужно будет отправить отчет об ошибке в соответствующий проект. - person Keith Marshall; 09.09.2015

Проверьте имя и версию системы:

case "$(uname -or)" in
    1.*Msys)  system='msys'   ;;
    2.*Msys)  system='msys2'  ;;
    .*Cygwin) system='cygwin' ;;
esac
person user6492686    schedule 21.06.2016