Изменить параметры сборки для Mac и Linux в пакете R

Я создаю пакет R, который использует сторонний API (с закрытым исходным кодом) для импорта файлов .edf в R (из отслеживания глаз SR Research Eyelink). Кто-то, кто уже получил это для работы в Linux, поделился своим кодом, и я смог заставить его работать на Mac. Это был вопрос изменения файлов src / Makevars, чтобы они указывали на API, как он установлен на Mac:

PKG_LIBS=-framework edfapi -F/Library/Frameworks/

Чтобы заставить его работать в Linux, Makevars должен иметь:

PKG_LIBS=-L/usr/local/lib -ledfapi -lm

Я знаю, что для параметров, специфичных для Windows, мне нужно создать файл Makevars.win, но как мне изменить параметры сборки для Mac и Linux? Я хотел бы сделать что-то вроде:

if [[ `uname` -eq Darwin ]] ; then

PKG_LIBS=-framework edfapi -F/Library/Frameworks/

fi

if [[ `uname` -eq Linux ]] ;then

PKG_LIBS=-L/usr/local/lib -ledfapi -lm

fi

но положить это в Makevars не работает. Из исследования этого кажется, что мне нужно сочетание параметров настройки в configure а также Makevars, но я не совсем понял это. Я знаком с программированием на R и знаю достаточно C ++, чтобы выполнять некоторые основные функции, но я до сих пор не понимаю всех нюансов, связанных с процессом сборки. Если бы кто-то мог объяснить основную цель configure/configure.ac против Makevars/Makevars.in это также было бы полезно.

В идеале я хотел бы связать API вместе с пакетом R и иметь разные версии в папке для конкретной платформы. API состоит всего из 3 заголовочных файлов и двоичного файла (и он редко изменяется). Я понимаю, что это помешало бы мне поставить пакет на CRAN, но это нормально. Мне удалось успешно собрать пакет с файлами API в другой папке, но во время выполнения он все еще ищет его в стандартном месте (/ Library / Frameworks). Я понимаю, что это более загруженный вопрос, и я также могу создать отдельный пост.

2

Решение

Этот пост помог мне понять это: stackoverflow.com/a/32590600/1457051

configure (в корневом каталоге пакета) выглядит так:

#!/bin/bash

#make the Makevars file
if [ ! -e "./src/Makevars" ]; then
touch ./src/Makevars
fi

#if mac
if [[ `uname` -eq Darwin ]] ; then

echo "PKG_LIBS=-framework edfapi -F/Library/Frameworks/" > ./src/Makevars
#if linux
elif [[ `uname` -eq Linux ]] ;then

echo "PKG_LIBS=-L/usr/local/lib -ledfapi -lm" > ./src/Makevars

fi

Makevars создан, и соответствующие опции добавляются в зависимости от платформы. Может быть более прямое решение, но это работает для моих целей.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]