Edited at

depでのパッケージ管理で、インストール時にc/c++が必要な場合に発生する可能性があるエラーについて


概要

depを使ってvendor内に必要パッケージをインストールするが、その過程でC/C++の開発環境を使ったパッケージがあると、それらはインストールされないので、go testなどでテストを実行する過程でエラーが発生した。

$ go test 

# .../vendor/github.com/karalabe/hid
.../vendor/github.com/karalabe/hid/hid_enabled.go:38:11: fatal error: 'hidapi/mac/hid.c' file not found
#include "hidapi/mac/hid.c"
^~~~~~~~~~~~~~~~~~
1 error generated.
FAIL ... [build failed]


解決策

vendorの中のパッケージを消して、githubから直接git cloneするのが対症療法としては一番速い。と思ったものの、 Gopkg.tomlでの記述を工夫すれば同じく解決した。

デフォルトでは、depの仕様により、次のオプションはtrueになっている。

オプション名
機能
初期値

unused-packages
未使用パッケージを除外
true

go-tests
テストコードを除外
true

non-go
Go言語コード以外のファイルを除外
true

したがって、Goに関係のない(未使用 or test)部分は、自動的にvendorの中身から排除される仕組みになっている。

しかし、今回のように、Goとは関係ないが、インストールするときに依存しているパッケージも含まれている場合は、Gopkg.tomlで次のように記述すれば良い。


[[prune.project]]
name = "github.com/karalabe/hid"
unused-packages = false