2017-05-04 3 views
0

RcppRcppGSLを使用するCRANに私のRパッケージを提出したいのですが、私はwinbuilderにR CMD checkを渡すパッケージをビルドできません。私が理解しているのは、i386パッケージが構築されているが、R CMD checkの間にインストールおよびチェックされていないためです。 x64パッケージは、チェックをビルドして渡します(私は--no-multiarchでチェックを実行します)。このウィンドウを64ビットで動作させる時間が限られていたので、私の理解には少しばかり問題がありました。 は、これは私がMakevars.winに右フラグを渡すために、このconfigure.winを使用しています。なお、Makevars.win.geni386ビルドのためにR CMDチェックを受け入れることができません

PKG_CPPFLAGS = $(GSL_CFLAGS) -I"$(LIB_GSL)/include" -I"$(LIB_GSL)/include/gsl" -I../inst/include -I../inst -Wall -Wno-unused-but-set-variable -Wno-long-long -Wno-sign-compare -Wno-deprecated -pedantic -pthread -fPIC -O2 -g 
ARCH=x64 
ifeq "$(WIN)" "64" 
ARCH= i386 
else 
ARCH= x64 
endif 
RCPPGSL_LDFLAGS = `$(R_HOME)/bin/$(R_ARCH_BIN)/Rscript -e "RcppGSL:::LdFlags()"` 
GRAPHM_OBJ = ./algorithm_ca.o ./algorithm_ext.o ./algorithm_fsol.o ./algorithm_iden.o ./algorithm_lp.o ./algorithm.o ./algorithm_path.o ./algorithm_qcv.o ./algorithm_rand.o ./algorithm_rank.o ./algorithm_umeyama.o ./algorithm_unif.o ./experiment.o ./graph.o ./hungarian.o ./rpc.o 
GRAPHM_OBJ_REL = $(addprefix ./graphm/,$(GRAPHM_OBJ)) 

PKG_LIBS = $(LDFLAGS) -L"$(LIB_GSL)\lib"$(R_ARCH_BIN) $(RCPPGSL_LDFLAGS) $(GSL_LIBS) -lgsl -lgslcblas 

CXX ?= g++ 
SHVER= 1 
VPATH= ./graphm:./graphm-0.52 


SOURCES= graphmatch_rcpp.cpp RcppExports.cpp 
OBJECTS= $(SOURCES:.cpp=.o) $(GRAPHM_OBJ_REL) 

#all: $(SHLIB) $(OBJECTS) 
$(SHLIB): $(OBJECTS) 
#all: $(ALLFILES) ../inst/libgraphm.a 
# cd graphm && $(MAKE) 
# $(CXX) $(CXXFLAGS) $(OBJECTS) ../inst/libgraphm.a $(PKG_LIBS) 

./experiment.o: experiment.cpp experiment.h 
     cd graphm && $(CXX) $(PKG_CPPFLAGS) -I"$(LIB_GSL)\include" -c experiment.cpp -o ./experiment.o 
./rpc.o: rpc.cpp rpc.h 
     cd graphm && $(CXX) $(PKG_CPPFLAGS) -I"$(LIB_GSL)\include" -c rpc.cpp -o ./rpc.o 
./graph.o: graph.cpp graph.h 
     cd graphm && $(CXX) $(PKG_CPPFLAGS) -I"$(LIB_GSL)\include" -c graph.cpp -o ./graph.o 
./hungarian.o: hungarian.cpp hungarian.h 
     cd graphm && $(CXX) $(PKG_CPPFLAGS) -I"$(LIB_GSL)\include" -c hungarian.cpp -o ./hungarian.o 
./algorithm.o: algorithm.cpp algorithm.h 
     cd graphm && $(CXX) $(PKG_CPPFLAGS) -I"$(LIB_GSL)\include" -c algorithm.cpp -o ./algorithm.o 
#graph matching algorithms 
./algorithm_ca.o: algorithm_ca.cpp algorithm_ca.h 
     cd graphm && $(CXX) $(PKG_CPPFLAGS) -I"$(LIB_GSL)\include" -c algorithm_ca.cpp -o ./algorithm_ca.o 
./algorithm_path.o: algorithm_path.cpp algorithm_path.h 
     cd graphm && $(CXX) $(PKG_CPPFLAGS) -I"$(LIB_GSL)\include" -c algorithm_path.cpp -o ./algorithm_path.o 
./algorithm_ext.o: algorithm_ext.cpp algorithm_ext.h 
     cd graphm && $(CXX) $(PKG_CPPFLAGS) -I"$(LIB_GSL)\include" -c algorithm_ext.cpp -o ./algorithm_ext.o 
./algorithm_fsol.o: algorithm_fsol.cpp algorithm_fsol.h 
     cd graphm && $(CXX) $(PKG_CPPFLAGS) -I"$(LIB_GSL)\include" -c algorithm_fsol.cpp -o ./algorithm_fsol.o 
./algorithm_iden.o: algorithm_iden.cpp algorithm_iden.h 
     cd graphm && $(CXX) $(PKG_CPPFLAGS) -I"$(LIB_GSL)\include" -c algorithm_iden.cpp -o ./algorithm_iden.o 
./algorithm_lp.o: algorithm_lp.cpp algorithm_lp.h 
     cd graphm && $(CXX) $(PKG_CPPFLAGS) -I"$(LIB_GSL)\include" -c algorithm_lp.cpp -o ./algorithm_lp.o 
./algorithm_qcv.o: algorithm_qcv.cpp algorithm_qcv.h 
     cd graphm && $(CXX) $(PKG_CPPFLAGS) -I"$(LIB_GSL)\include" -c algorithm_qcv.cpp -o ./algorithm_qcv.o 
./algorithm_rand.o: algorithm_rand.cpp algorithm_rand.h 
     cd graphm && $(CXX) $(PKG_CPPFLAGS) -I"$(LIB_GSL)\include" -c algorithm_rand.cpp -o ./algorithm_rand.o 
./algorithm_rank.o: algorithm_rank.cpp algorithm_rank.h 
     cd graphm && $(CXX) $(PKG_CPPFLAGS) -I"$(LIB_GSL)\include" -c algorithm_rank.cpp -o ./algorithm_rank.o 
./algorithm_umeyama.o: algorithm_umeyama.cpp algorithm_umeyama.h 
     cd graphm && $(CXX) $(PKG_CPPFLAGS) -I"$(LIB_GSL)\include" -c algorithm_umeyama.cpp -o ./algorithm_umeyama.o 
./algorithm_unif.o: algorithm_unif.cpp algorithm_unif.h 
     cd graphm && $(CXX) $(PKG_CPPFLAGS) -I"$(LIB_GSL)\include" -c algorithm_unif.cpp -o ./algorithm_unif.o 

ALLOBJ: $(OBJECTS) $(GRAPHM_OBJ) 

ALLFILES: $(OBJECTS) $(GRAPHM_OBJ_REL) ../inst/libgraphm.a 



../inst/libgraphm.a: RcppExports.o $(GRAPHM_OBJ) 
    ar -rvs ../inst/libgraphm.a $(GRAPHM_OBJ_REL) 


clean: cleana cleanb 

cleana: 
    rm $(OBJECTS) 
cleanb: 
    rm $(GRAPHM_OBJ_REL) 

#.PHONY: all test clean 

です。しかし、これは本当に不要です。なぜなら、私はMakevars.win.genから@ GSL_LIBS @を削除したからです。これが、R CMDチェック中にi386ビルドがインストールされていない理由ですか?

ifeq "$(WIN)" "64" 
R_ARCH_BIN="/x64" 
else 
R_ARCH_BIN="/i386" 
endif 
GSL_CFLAGS=`"${R_HOME}/bin$(R_ARCH_BIN)/Rscript.exe" -e "require(RcppGSL);RcppGSL:::CFlags()"` 
GSL_LIBS=`"${R_HOME}/bin$(R_ARCH_BIN)/Rscript.exe" -e "require(RcppGSL);RcppGSL:::LdFlags()"` 
sed -e "s|@[email protected]|${GSL_LIBS}|" \ 
-e "s|@[email protected]|${GSL_CFLAGS}|" \ 
src/Makevars.win.gen > src/Makevars.win 

事前に構築されたWindowsライブラリに依存しているマルチアーチRパッケージを構築するための関連する任意の補助情報をいただければ幸いです。

答えて

1

あなたの最初の仮定は間違っています。あなたはこれをあまりにも難しくしているかもしれません。

ローカルにビルドマルチアーチを作成するには、実際には適切なマルチアーチセットアップがローカルに必要です。これは、GSLの32ビットと64ビットのビルドを意味します。あなたは、1つまたは複数のを実行することができ、両方の

  • 勝利ビルダーへ
  • Rハブ

両方のあなたの源を提出することができます -

しかし、あなたはローカルに構築する必要はありませんWindowsはあなたのために構築されます!アップロードするたびに使用します。

複雑なことをすべて必ずしもMakevars.winする必要はありません。 (CRAN上)マイRcppZigguratパッケージには、ちょうどこれらの2つの命令があります。

PKG_CPPFLAGS = -I. -I../inst/include 
## Use the R_HOME indirection to support installations of multiple R version 
PKG_LIBS = $(shell "${R_HOME}/bin${R_ARCH_BIN}/Rscript.exe" \ 
      -e "RcppGSL:::LdFlags()") 

(と私は手で改行を追加しました)。

最後に、RcppGSLには4つの逆依存があるため、学習する4つの作業例があります。例えばmvabundが

## This assumes that the LIB_GSL variable points to working GSL libraries 
PKG_CPPFLAGS=-std=c++0x -Wall -pedantic -I$(LIB_GSL)/include -I. -I../inst/include 
PKG_LIBS=-L$(LIB_GSL)/lib -lgsl -lgslcblas 
+0

いくつかの複雑さは、パッケージの周りにラップされたCライブラリによるものです。私はパッケージをCライブラリと同時にビルドしたいと思っています。残りの複雑さは、私が解決しようとしているネイティブコードとRパッケージビルドプロセスについての私の弱い理解によるものです。 –

+0

私はこれについてコメントしていました。Makefileはその部分を見ていますが、あなたの質問は言いませんでした!しかし、あなたの二分の一は、ほぼ完全にそれに起因すると思います。できればこれを単純化してみてください。おそらく 'src /'にすべてのライブラリを含めるだけです。 –

+0

(そして手書きで改行を追加しました)。それはどういう意味ですか? –

0

本体のみのアーキテクチャを構築するためのパッケージソースツリーの力でconfigure.winの存在を行い、R CMDチェックは--no-ない限り

<package> is not installed for architecture -- i386 

のようなメッセージで失敗しますマルチアーチが存在する。ウィンドウのCRAN構築プロセスは両方のアーキテクチャ(i386、x64)をチェックするので、-no-multi-archを使用したローカルR CMDチェックが成功する可能性があるにもかかわらず、CRANサブミットプロセス中にR CMDチェックが失敗します。

+0

良いキャッチ。私が必要としたとき、私はいくつかのアーチ依存の「設定」(ここではファイルの取得)をMakevars.win自体に貼り付けました - 例えば[ここ](https://github.com/Rblp/Rblpapi/blob/master) /src/Makevars.win) –

関連する問題