LINUX.ORG.RU

Установка плагина для GCC в Gentoo — нужно исправить ebuild или CMakeLists.txt?

 , , , ,


0

1

Во время установки ebuild получаю предупреждение:

>>> Install odb-9999 into /var/tmp/portage/dev-util/odb-9999/image category dev-util
>>> Working in BUILD_DIR: "/var/tmp/portage/dev-util/odb-9999/work/odb-9999_build"
[0/1] Install the project...
-- Install configuration: "Gentoo"
-- Installing: /var/tmp/portage/dev-util/odb-9999/image/usr/usr/lib/gcc/x86_64-pc-linux-gnu/7.3.0/plugin/libodb.so
-- Installing: /var/tmp/portage/dev-util/odb-9999/image/usr/bin/odb
>>> Completed installing odb-9999 into /var/tmp/portage/dev-util/odb-9999/image

 * Final size of build directory: 21196 KiB (20.6 MiB)
 * Final size of installed tree:   4632 KiB ( 4.5 MiB)

 * The ebuild is installing to one or more unexpected paths:
 * 
 *   /usr/usr
 * 
 * Please fix the ebuild to use correct FHS/Gentoo policy paths.

Вот в этом файле дважды встречается каталог usr:

/var/tmp/portage/dev-util/odb-9999/image/usr/usr/lib/gcc/x86_64-pc-linux-gnu/7.3.0/plugin/libodb.so

В CMakeLists.txt определяется каталог с плагинами для GCC таким образом:

execute_process (COMMAND ${CMAKE_CXX_COMPILER} "-print-file-name=plugin"
    OUTPUT_VARIABLE GCC_PLUGIN_DIR
    OUTPUT_STRIP_TRAILING_WHITESPACE
)
Пример значения переменной CMAKE_CXX_COMPILER:
/usr/lib/gcc/x86_64-pc-linux-gnu/7.3.0/plugin

И вот так идёт установка плагина в CMakeLists.txt:

install (TARGETS odb
    LIBRARY
        DESTINATION ${CMAKE_INSTALL_PREFIX}/${GCC_PLUGIN_DIR}
)
Так как нет других идей как определить путь к плагинам GCC, то в результате получаю абсолютный путь с /usr в начале. И добавляю ${CMAKE_INSTALL_PREFIX}, чтобы не использовать жестко закодированный абсолютный путь.

Теперь возникает вопрос: для того, чтобы исправить установку с помощью portage, мне нужно обработать эту ситуацию в ebuild или поменять логику в CMakeLists.txt?

Так как нет других идей как определить путь к плагинам GCC, то в результате получаю абсолютный путь с /usr в начале. И добавляю ${CMAKE_INSTALL_PREFIX}, чтобы не использовать жестко закодированный абсолютный путь.

Абсолютный путь как раз и должен быть, пути к плагинам GCC не могут зависеть от настроек сборки проекта

annulen ★★★★★
()
Ответ на: комментарий от annulen

Да, спасибо, убрал ${CMAKE_INSTALL_PREFIX}. Почему-то думал, что без префикса будет sandbox violation, но всё сработало корректно. Сейчас установка в CMakeLists.txt выглядит так:

install (TARGETS odb
    LIBRARY
        DESTINATION ${GCC_PLUGIN_DIR}
)

Да, действительно, если мы хотим полностью всё установить в какой-то нестандартный ${CMAKE_INSTALL_PREFIX}, то и должны подсунуть собранный с определенными опциями GCC, который будет выдавать нужный путь к плагинам.

Всё стало на свои места.

Pravorskyi ★★★
() автор топика
Ответ на: комментарий от Pravorskyi

Почему-то думал, что без префикса будет sandbox violation

При инсталляции используется DESTDIR, который добавляет путь к песочнице перед /usr

annulen ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.