Подготовить пакет CRAN R с внешними зависимостями (nlopt) - PullRequest
0 голосов
/ 23 января 2019

Я пытаюсь отправить пакет в CRAN, который не прошел тестирование процесс в Debian.

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

Я использую скрипт configure и 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.out

Я добавил некоторые подробности, чтобы проверить правильность экспорта флагов на серверах 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’

Ответы [ 2 ]

0 голосов
/ 23 января 2019

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

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

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

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

0 голосов
/ 23 января 2019

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

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

...