SSブログ

git-cryptをcygwin環境でビルドしてみる [ソフトウェア/PC関係]

特に脈絡もない話題だが,cygwin環境でgit-cryptを使用する必要に迫られたので調べてみた。

git-cryptはパスワードなどの情報を暗号化してgitレポジトリに格納するための透過的な仕組みであるが,gitの標準的なパッケージには含まれていないため,別途用意する必要がある。ところが残念ながら,cygwinにはパッケージが用意されていない。Linuxのubuntuにもないようなので,それはまぁ仕方ないところだろう。それじゃ自分でビルドしてやろう,ということになるわけだ。

git-cryptはgithub上のレポジトリ,https://github.com/AGWA/git-crypt で公開されている。レポジトリのファイルの中に,ビルドの仕方についてのドキュメントも含まれている。それによると,ビルドにはGNU makeとg++,libssl-devの3つのパッケージが必須のようだ。cygwinにも相当のものはあるので,cygwinのインストーラー(setup.exe)で事前にインストールしておこう。もちろんgit-cryptを動作させるためにも,git-cryptのレポジトリをクローンするためにもgitのパッケージが必要である。

で,まず手始めに,適当なディレクトリで「git clone」を実行して git-cryptのレポジトリをクローンする。次に,git-cryptのディレクトリに移って,makeを実行する。

cd git-crypt
make

これであっさりうまくいくかと思いきや,util.cppのコンパイル中にあえなくコンパイルエラーが発生する。

g++ -Wall -pedantic -Wno-long-long -O2 -std=c++11   -c -o util.o util.cpp
In file included from util.cpp:156:
util-unix.cpp: In member function ‘void temp_fstream::open(std::ios_base::openmode)’:
util-unix.cpp:79:38: error: ‘mkstemp’ was not declared in this scope; did you mean ‘mkdtemp’?
   79 |         int                     fd = mkstemp(path);
      |                                      ^~~~~~~
      |                                      mkdtemp
util-unix.cpp: In function ‘std::string our_exe_path()’:
util-unix.cpp:135:51: error: ‘realpath’ was not declared in this scope
  135 |                 char*           resolved_path_p = realpath(argv0, nullptr);
      |                                                   ^~~~~~~~
make: *** [<builtin>: util.o] Error 1
  
mkstemp関数が宣言されていないとはどういうこと? stdlib.hもインクルードしてるのに。狐につままれたような気分でmkstemp関数だけを呼び出すテストコードを書いてみたら,問題なくコンパイル出来た。違いはなにかというと,コンパイル・オプションだろうか。上記の出力を見ると一目瞭然だが,git-cryptの方は「-std=c++11」が指定されている。C++11仕様でコンパイルするという指定だ。C++11でmkstemp周りが変更されたという認識はなかったが,試しにこのオプションを外してみることにした。C++11じゃないとコンパイルできないコードがあればエラーになるだろう。と思っていたが結果的に何のエラーもなくビルドが完了した。それならわざわざ「-std=c++11」を指定してる理由は何なのだろう。このまま使っているとなにか不具合が起きるのだろうか。取り敢えず手元の暗号化/復号化は動作しているようなのであまり深く追求する気はない。しばらく様子見としよう。
nice!(0)  コメント(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。