Подготовить пакет CRAN R с внешними зависимостями (nlopt)

Я пытаюсь отправить пакет в CRAN, который не работает во время предварительного тестирования в Debian.

Я использую код C ++, который взаимодействует с библиотекой оптимизации nlopt с помощью Rcpp / RcppArmadillo (с использованием <nlopt.hpp>). Таким образом, моему пакету требуется системная версия nlopt, которую можно установить через deb-пакет libnlopt-dev (я добавил это в поле SystemRequirements).

Я использую сценарий конфигурации и pkg-config для получения (надеюсь) соответствующих флагов компилятора, которые затем отправляю в src / Makevars.

NLOPT_LIBS=`pkg-config --libs ${PKG_CONFIG_NAME}`
NLOPT_FLAG=`pkg-config --cflags ${PKG_CONFIG_NAME}`

Этот подход работает в моей системе (Ubuntu 18.04, R 3.5.2) и в Travis (Linux и Mac OS), но не работает на сервере Debian CRAN: https://win-builder.r-project.org/incoming_pretest/PLNmodels_0.7_20190119_161032/Debian/00install.

Я добавил немного подробностей, чтобы проверить, что флаги были правильно экспортированы на серверы CRAN, и мне они кажутся подходящими: по крайней мере, в системе обнаружена версия nlopt (см. Ниже, NLOPT_LIBS=-lnlopt -lm). Однако <nlopt.hpp> не найден последним на ...

Любая помощь будет принята с благодарностью. Спасибо, что нашли время прочитать это.

* installing *source* package ‘PLNmodels’ ...
Using NLOPT_LIBS=-lnlopt -lm
Using NLOPT_FLAG=
** libs
g++-8  -std=gnu++11 -I"/home/hornik/tmp/R/include" -DNDEBUG -fopenmp
-I"/home/hornik/lib/R/Library/3.6/x86_64-linux-gnu/Rcpp/include"
-I"/home/hornik/lib/R/Library/3.6/x86_64-linux-gnu/RcppArmadillo/include"
-I/usr/local/include -fopenmp  -fpic  -g -O2 -Wall -pedantic
-mtune=native -c RcppExports.cpp -o RcppExports.o
g++-8  -std=gnu++11 -I"/home/hornik/tmp/R/include" -DNDEBUG -fopenmp
-I"/home/hornik/lib/R/Library/3.6/x86_64-linux-gnu/Rcpp/include"
-I"/home/hornik/lib/R/Library/3.6/x86_64-linux-gnu/RcppArmadillo/include"
-I/usr/local/include -fopenmp  -fpic  -g -O2 -Wall -pedantic
-mtune=native -c call_nlopt_PLN_VE.cpp -o call_nlopt_PLN_VE.o
In file included from call_nlopt_PLN_VE.cpp:6:
utils.h:5:10: fatal error: nlopt.hpp: No such file or directory
 #include <nlopt.hpp>
          ^~~~~~~~~~~
compilation terminated.
make: *** [/home/hornik/tmp/R/etc/Makeconf:173: call_nlopt_PLN_VE.o] Error 1
ERROR: compilation failed for package ‘PLNmodels’
* removing ‘/srv/hornik/tmp/CRAN/PLNmodels.Rcheck/PLNmodels’

person Julien Chiquet    schedule 23.01.2019    source источник


Ответы (2)


Интерфейс C ++ для nlopt перенесен в отдельный пакет Debian, c.f. https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=855600. Таким образом, похоже, что эта конкретная машина CRAN использует либо Debian Testing, либо Stable + Backports и имеет только libnlopt-dev, но не libnlopt-cxx-dev. Вам нужно будет связаться с сопровождающими CRAN, чтобы установить эту зависимость.

Кстати, в идеале такие ошибки должны быть обнаружены в configure скрипте, т.е. вы должны попытаться скомпилировать простую программу, которая требует nlopt.hpp.

person Ralf Stubner    schedule 23.01.2019

Вы задали тот же вопрос здесь, на r-package-devel и у меня не было для вас хорошего ответа.

По сути, у вас есть прекрасные вариации в пределах одного необходимого апстрима. Это очень деликатно. Я не могу придумать ничего, кроме того, что предложил @Ralf: проверить.

Или, может быть, вы просто не можете сообщить CRAN о требованиях вашего пакета. Но это был бы еще более простой вопрос, и когда обнаруживается неправильная версия, вы обречены на провал установки.

В общем, моя рекомендация такая же, как и раньше: работайте с Джелмером и подождите, пока он выпустит обновленную nloptr версию. До тех пор все решения обязательно будут ложными, поскольку вы не можете контролировать, с какой версией nloptr ваш пакет может столкнуться.

person Dirk Eddelbuettel    schedule 23.01.2019
comment
Спасибо за вашу рекомендацию, теперь я перестану искать гипотетическое решение этой проблемы. - person Julien Chiquet; 23.01.2019