メモ:FreeBSD 10.2でRStudio Serverをビルドしようとした

さっきの記事の続き。

基本的にはここの指示に従う。

ただし、FreeBSDについては指示がないのでlinuxのところを見ながら何をすればいいか推測する。

Rをビルドしなおす

なんかRStudioをビルドしようとすると、libR.aがない!というエラーが出て、調べるとRをビルドするときにそれも生成しないとだめでした。--enable-R-static-libを付けます。

$ cd R-3.2.5/
$ env MAIN_LDFLAGS=-Wl,--export-dynamic CC=clang CXX=clang++ ./configure --without-x --disable-java --enable-R-static-lib
$ gmake

これをインストールするにはinstall-libRです。

$ sudo gmake install-libR

必要なパッケージをインストール

CMakeとBoostは問答無用で必要なのでインストール。ossp-uuidはUUIDを生成するライブラリ。Linuxだとlibcにあるから必要ないけどFreeBSDだと必要、とかいう話っぽい。bashは、dependencies/common/install-commonを実行するために必要。不本意ながら/bin/bashシンボリックリンクも張らなければいけない。

$ sudo pkg install cmake boost-libs ossp-uuid bash apache-ant
$ sudo ln -s /usr/local/bin/bash /bin/bash

RStudioのソースコードを取得

$ wget https://github.com/rstudio/rstudio/archive/v0.99.1171.tar.gz
$ tar xf v0.99.1171.tar.gz
$ cd rstudio-0.99.1171/

install-common

依存パッケージをダウンロードしてきます。boostをビルドするので時間がかかります。

$ cd dependencies/common
$ ./install-common

たぶん、install-pandocでこんなエラーがでます。

cp: pandoc-1.17.0.2/linux/debian/amd64/pandoc*: No such file or directory

ARCHi386x84_64を想定しているためです。これはたぶんどっちみちコンパイルしなおさないと動かないので、適当にスキップします。私はこの行のARCHamd64に置き換えました:rstudio/install-pandoc at c968c9026fbfa20c0f03968481ebca98c401af68 · rstudio/rstudio · GitHub

cmake

DL_LIBRARYは、何なのかよく分かりませんがなくても動くっぽいです。ということで空にしてみました。rstudio/FindPAM.cmake at ebb054efe3e650de818a251b11087311e5169ed8 · rstudio/rstudio · GitHub

$ mkdir rstudio-0.99.1171/build
$ cd rstudio-0.99.1171/build
$ cmake .. -DRSTUDIO_TARGET=Server -DCMAKE_BUILD_TYPE=Release -DUUID_LIBRARIES=/usr/local/include/ossp/uuid.h -DDL_LIBRARIES=

gmake

$ gmake

libclangのビルドでこける? なんかよくわからないのでギブアップ…

In file included from /home/freebsd/rstudio-0.99.1171/src/cpp/core/libclang/CodeCompleteResults.cpp:18:
/home/freebsd/rstudio-0.99.1171/src/cpp/core/include/core/libclang/LibClang.hpp:54:8: error:
      expected member name or ';' after declaration specifiers
   int major() const { return major_; }
   ~~~ ^
/usr/include/sys/types.h:359:20: note: expanded from macro 'major'
#define major(x)        ((int)(((u_int)(x) >> 8)&0xff)) /* major number */
                          ^
In file included from /home/freebsd/rstudio-0.99.1171/src/cpp/core/libclang/CodeCompleteResults.cpp:18:
/home/freebsd/rstudio-0.99.1171/src/cpp/core/include/core/libclang/LibClang.hpp:54:8: error:
      expected ')'
/usr/include/sys/types.h:359:20: note: expanded from macro 'major'
#define major(x)        ((int)(((u_int)(x) >> 8)&0xff)) /* major number */
                          ^
/home/freebsd/rstudio-0.99.1171/src/cpp/core/include/core/libclang/LibClang.hpp:54:8: note:
      to match this '('
/usr/include/sys/types.h:359:19: note: expanded from macro 'major'
#define major(x)        ((int)(((u_int)(x) >> 8)&0xff)) /* major number */