История вопроса: я пытаюсь создать ADLINK Vortex OpenSplice Community Edition в рецепт Yocto.
Все работает нормально, когда я пытаюсь собрать OpenSplice в оболочке Bash. Однако, когда я пытаюсь собрать OpenSplice в оболочке sh, возникает множество проблем. Проблема в том, что скрипт configure (и скрипты, которые он вызывает) имеют множество башизмов (массивы, popd, pushd и т. Д.). Файлы конфигурации Bash слишком длинные и сложные, чтобы их можно было переписать в sh с помощью файла исправления Yocto.
Проблема. Я не могу создать сценарий Bash для установки переменных среды в do_configure () в рецепте Yocto.
Я могу запустить сценарий configure в моем рецепте Yocto. Это работает, например: bash -c "printf '5' | source ${S}/configure"
Сценарий configure спрашивает, для какой платформы я хочу создать OpenSplice, printf '5'
вводит параметр 5.
Но этот сценарий не устанавливает переменные среды, которые должны быть установлен. Я знаю, что Bash запускает дочернюю оболочку, и переменные среды не покидают эту оболочку.
Я пытался использовать исходный код Bash в своем рецепте: . bash -c "printf '5' | source ${S}/configure"
Но это дает следующую ошибку: sh: 3: /bin/bash: Syntax error: Unterminated quoted string
Я также пробовал использовать системные вызовы в Python. Но это дает ту же проблему, он открывает дочернюю оболочку, а переменные среды недоступны в родительской оболочке.
Вопрос Итак, вопрос в том, как я могу создать сценарий Bash в рецепте Yocto? Приветствуются любые решения, в том числе и грязные.
Рецепт
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://LICENSE;md5=c4bfc022908a26f6f895ab14b6baebca"
# Opensplice does not work with semantic versioning. Therefore ${PV} cannot be used.
# OSPL_V6_9_190925OSS_RELEASE is the 10th release of Opensplice V6.9 (.9 in zero-based
# numbering). SRCREV is commit hash of OSPL_V6_9_190925OSS_RELEASE.
SRC_URI = "git://github.com/ADLINK-IST/opensplice.git"
SRCREV = "c98e118a2e4366d2a5a6af8cbcecdf112bf9e4ab"
S = "${WORKDIR}/git"
DEPENDS += " bash gcc gawk flex bison perl bison-native "
RDEPENDS_${PN} += " bash bison "
do_configure () {
# # configure prompts for choice of target architecture
# # printf '5' enters choice 5; armv7l.linux-release
bash -c "printf '5' | source ${S}/configure"
}
do_build () {
make
}
do_install () {
make install
}