概要
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