Я пытаюсь собрать Bash 4.2 как пакет RPM для использования в системах Enterprise Linux 5, которые по умолчанию идут с 3.2.25. Это работает успешно, однако я хочу, чтобы обе версии сосуществовали в системе, чтобы избежать конфликтов с системным пакетом и позволить системным/другим скриптам продолжать использовать bash3, с которым они совместимы.
Мой план таков:
- Переименуйте пакет в «bash4» и не допускайте конфликта с «bash» или укажите «sh».
- Настройте bash для сборки с двоичным именем «bash4» и измените путь ко всем файлам документации или поддержки соответствующим образом.
Теоретически это просто, и Vim предлагает двоичный префикс/суффикс в своих скриптах конфигурации, однако bash, похоже, не имеет этой функции. Ближайший, который я нашел, это EXEEXT от automake, который обеспечивает поддержку исполняемых расширений (таких как .exe в Windows), но он на самом деле не предназначен для того, что я хочу сделать, и не решает проблему с документацией.
решение1
Хотя bash
версия autoconf (2.63) немного устарела (сентябрь 2008 г.), она поддерживает функции --program-transform-name
и --program-suffix
. К сожалению, процесс сборки bash не использует эти функции какподробно описано в документации, а также не использует параметры, позволяющие обрабатывать страницы руководства во время сборки.
Поскольку количество файлов и изменений невелико, я рекомендую полуручной подход, т.е. написать небольшой скрипт для внесения изменений перед установкой. Вы можете использоватьустановитьсмотретьчтобы убедиться, что вы все перехватите во время установки, но bash
на самом деле это довольно минимальная информация. (Кстати, я быстро просмотрел порты FreeBSD bash и патчи Debian bash, но никаких признаков подходящего исправления не обнаружил.)
Хотя это, в общем-то, интересный способ сломать сборки, выможетзлоупотребление EXEEXT
здесь:
ac_cv_exeext=42 ./configure [...]
make
./bash42 -c 'echo $BASH_VERSION'
4.2.42(1)-release
поскольку все, что вам это спасло, это переименование, я действительно не рекомендую этого делать ;-)
Еще кое-что можно получить от:
./configure [...]
make -e Program=bash42
поскольку это также отражает ваши изменения в сгенерированном bashbug
скрипте (хотя и не переименовывает его).