github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/go/build/build.go (about) 1 // Copyright 2011 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package build 6 7 import ( 8 "github.com/shogo82148/std/go/token" 9 "github.com/shogo82148/std/io" 10 "github.com/shogo82148/std/io/fs" 11 ) 12 13 // Contextは、ビルドのサポートコンテキストを指定します。 14 type Context struct { 15 GOARCH string 16 GOOS string 17 GOROOT string 18 GOPATH string 19 20 // Dirは呼び出し元の作業ディレクトリです。空の文字列の場合、実行中のプロセスのカレントディレクトリが使用されます。モジュールモードでは、これはメインモジュールを特定するために使用されます。 21 // 22 // Dirが空でない場合、ImportとImportDirに渡されるディレクトリは絶対である必要があります。 23 Dir string 24 25 CgoEnabled bool 26 UseAllFiles bool 27 Compiler string 28 29 // build、tool、およびrelease タグは、go:build 行の処理時に満たされていると考慮されるビルド制約を指定します。 30 // 新しいコンテキストを作成するクライアントは、BuildTags をカスタマイズすることができます。デフォルトは空ですが、ToolTags や ReleaseTags をカスタマイズすることは通常エラーです。 31 // ToolTags は、現在の Go ツールチェインの構成に適したビルドタグをデフォルトで持ちます。 32 // ReleaseTags は、現在のリリースが互換性のある Go のリリースの一覧をデフォルトで持ちます。 33 // BuildTags は、デフォルトのビルドコンテキストでは設定されません。 34 // BuildTags、ToolTags、ReleaseTags に加えて、ビルド制約は GOARCH と GOOS の値を満たしたタグとして考慮されます。 35 // ReleaseTags の最後の要素は現在のリリースと見なされます。 36 BuildTags []string 37 ToolTags []string 38 ReleaseTags []string 39 40 // InstallSuffixは、インストールディレクトリの名前に使用する接尾辞を指定します。 41 // デフォルトでは空ですが、カスタムビルドでは出力を分離する必要がある場合にInstallSuffixを設定できます。 42 // たとえば、レースディテクタを使用する場合、goコマンドはInstallSuffix = "race"を使用するため、 43 // Linux/386システムでは、通常の「linux_386」の代わりに「linux_386_race」という名前のディレクトリにパッケージが書き込まれます。 44 InstallSuffix string 45 46 // JoinPathはパスフラグメントのシーケンスを1つのパスに結合します。 47 // JoinPathがnilの場合、Importはfilepath.Joinを使用します。 48 JoinPath func(elem ...string) string 49 50 // SplitPathList はパスリストを個々のパスのスライスに分割します。 51 // SplitPathList が nil の場合、Import は filepath.SplitList を使用します。 52 SplitPathList func(list string) []string 53 54 // IsAbsPathは、パスが絶対パスかどうかを報告します。 55 // IsAbsPathがnilの場合、Importはfilepath.IsAbsを使用します。 56 IsAbsPath func(path string) bool 57 58 // IsDirはパスがディレクトリかどうかを報告します。 59 // IsDirがnilの場合、Importはos.Statを呼び出し、結果のIsDirメソッドを使用します。 60 IsDir func(path string) bool 61 62 // HasSubdirは、dirがrootの下位ディレクトリであるかどうかを報告します。 63 // 複数のレベル下位かもしれません。dirが存在するかどうかを確認しようとはしません。 64 // もしそうであれば、HasSubdirはrelをスラッシュで区切られたパスとして設定し、 65 // rootに結合してdirと同等のパスを生成することができます。 66 // HasSubdirがnilの場合、Importはfilepath.EvalSymlinksを基に実装されたものを使用します。 67 HasSubdir func(root, dir string) (rel string, ok bool) 68 69 // ReadDirはディレクトリの内容を表すfs.FileInfoのスライスを名前でソートして返します。 70 // ReadDirがnilの場合、Importはos.ReadDirを使用します。 71 ReadDir func(dir string) ([]fs.FileInfo, error) 72 73 // OpenFileは読み取り用にファイル(ディレクトリではありません)を開きます。 74 // OpenFileがnilの場合、Importはos.Openを使用します。 75 OpenFile func(path string) (io.ReadCloser, error) 76 } 77 78 // SrcDirsはパッケージソースルートディレクトリのリストを返します。 79 // 現在のGoルートとGoパスから引っ張りますが、存在しないディレクトリは省略します。 80 func (ctxt *Context) SrcDirs() []string 81 82 // Defaultはビルド用のデフォルトのContextです。 83 // もし設定している場合は、GOARCH、GOOS、GOROOT、およびGOPATHの環境変数を使用します。 84 // 設定されていない場合は、コンパイルされたコードのGOARCH、GOOS、およびGOROOTが使用されます。 85 var Default Context = defaultContext() 86 87 // ImportModeはImportメソッドの動作を制御します。 88 type ImportMode uint 89 90 const ( 91 92 // FindOnlyが設定されている場合、Importはパッケージのソースが含まれるディレクトリを見つけた後に停止します。ディレクトリ内のファイルは読み込まれません。 93 FindOnly ImportMode = 1 << iota 94 95 // AllowBinaryが設定されている場合、対応するソースコードなしでコンパイル済みのパッケージオブジェクトでImportを満たすことができます。 96 // 97 // 廃止予定: 98 // コンパイルのみのパッケージを作成するサポートされる方法は、ファイルの先頭に//go:binary-only-packageコメントを含むソースコードを書くことです。このようなパッケージは、このフラグの設定に関係なく認識されます(ソースコードを持っているので)し、戻り値のパッケージにBinaryOnlyフラグがtrueで設定されます。 99 AllowBinary 100 101 // ImportCommentが設定されている場合、パッケージ文のimportコメントを解析します。 102 // もし理解できないコメントが見つかるか、複数のソースファイルで矛盾するコメントが見つかった場合、エラーが返されます。 103 // 詳細はgolang.org/s/go14customimportを参照してください。 104 ImportComment 105 106 // デフォルトでは、Importは指定されたソースディレクトリ内のベンダーディレクトリを検索します。 107 // GOROOTとGOPATHのルートを検索する前に適用されるベンダーディレクトリを検索します。 108 // もしImportがベンダーディレクトリを見つけてパッケージを返す場合、返されるImportPathは完全なパスです。 109 // "vendor"までのパス要素を含み、"vendor"自体を含むパッケージのパスです。 110 // 例えば、Import("y", "x/subdir", 0)が"x/vendor/y"を見つけた場合、返されるパッケージのImportPathは"x/vendor/y"です。 111 // 単純に"y"ではありません。 112 // 詳細については、golang.org/s/go15vendorを参照してください。 113 // 114 // IgnoreVendorを設定すると、ベンダーディレクトリは無視されます。 115 // 116 // パッケージのImportPathとは異なり、返されるパッケージのImports、TestImports、およびXTestImportsは常にソースファイルからの正確なインポートパスです。 117 // Importはこれらのパスを解決したり確認したりする試みはしません。 118 IgnoreVendor 119 ) 120 121 // パッケージは、ディレクトリにあるGoパッケージを説明します。 122 type Package struct { 123 Dir string 124 Name string 125 ImportComment string 126 Doc string 127 ImportPath string 128 Root string 129 SrcRoot string 130 PkgRoot string 131 PkgTargetRoot string 132 BinDir string 133 Goroot bool 134 PkgObj string 135 AllTags []string 136 ConflictDir string 137 BinaryOnly bool 138 139 // ソースファイル 140 GoFiles []string 141 CgoFiles []string 142 IgnoredGoFiles []string 143 InvalidGoFiles []string 144 IgnoredOtherFiles []string 145 CFiles []string 146 CXXFiles []string 147 MFiles []string 148 HFiles []string 149 FFiles []string 150 SFiles []string 151 SwigFiles []string 152 SwigCXXFiles []string 153 SysoFiles []string 154 155 // Cgoの指令 156 CgoCFLAGS []string 157 CgoCPPFLAGS []string 158 CgoCXXFLAGS []string 159 CgoFFLAGS []string 160 CgoLDFLAGS []string 161 CgoPkgConfig []string 162 163 // テスト情報 164 TestGoFiles []string 165 XTestGoFiles []string 166 167 // ソースファイル内で見つかったGoディレクティブコメント(//go:zzz...)。 168 Directives []Directive 169 TestDirectives []Directive 170 XTestDirectives []Directive 171 172 // 依存関係情報 173 Imports []string 174 ImportPos map[string][]token.Position 175 TestImports []string 176 TestImportPos map[string][]token.Position 177 XTestImports []string 178 XTestImportPos map[string][]token.Position 179 180 // //go:embed はGoのソースファイル内で見つかるパターンです。 181 // 例えば、ソースファイルに次のように記述されている場合、 182 // //go:embed a* b.c 183 // このリストはそれぞれの文字列を別々のエントリとして含んでいます。 184 // (//go:embedについての詳細はパッケージembedを参照してください。) 185 EmbedPatterns []string 186 EmbedPatternPos map[string][]token.Position 187 TestEmbedPatterns []string 188 TestEmbedPatternPos map[string][]token.Position 189 XTestEmbedPatterns []string 190 XTestEmbedPatternPos map[string][]token.Position 191 } 192 193 // Directiveは、ソースファイル内で見つかるGoのディレクティブコメント(//go:zzz...)です。 194 type Directive struct { 195 Text string 196 Pos token.Position 197 } 198 199 // IsCommandは、パッケージがインストールされるコマンド(単なるライブラリではない)として 200 // 考えられるかどうかを報告します。 201 // "main"という名前のパッケージはコマンドとして扱われます。 202 func (p *Package) IsCommand() bool 203 204 // ImportDirは、名前付きディレクトリで見つかったGoパッケージを処理する [Import] のようなものです。 205 func (ctxt *Context) ImportDir(dir string, mode ImportMode) (*Package, error) 206 207 // NoGoErrorは、ビルド可能なGoソースファイルが含まれていないディレクトリを説明するために [Import] で使用されるエラーです。(テストファイル、ビルドタグによって非表示にされたファイルなどは含まれる可能性があります。) 208 type NoGoError struct { 209 Dir string 210 } 211 212 func (e *NoGoError) Error() string 213 214 type MultiplePackageError struct { 215 Dir string 216 Packages []string 217 Files []string 218 } 219 220 func (e *MultiplePackageError) Error() string 221 222 // Importはimportパスによって指定されたGoパッケージについての詳細を返します。 223 // srcDirディレクトリを基準として、ローカルなimportパスを解釈します。 224 // もしパッケージが標準のimportパスを使用してインポート可能なローカルなパッケージの場合、返されるパッケージにはp.ImportPathがそのパスに設定されます。 225 // 226 // パッケージを含むディレクトリでは、.go、.c、.h、および.sファイルはパッケージの一部と見なされますが、以下のものは除外されます: 227 // 228 // - パッケージドキュメント内の.goファイル 229 // - _または.で始まるファイル(おそらくエディタの一時ファイル) 230 // - コンテキストで満たされないビルド制約を持つファイル 231 // 232 // エラーが発生した場合、Importは非nilのエラーと部分的な情報を含む非nilの*[Package] を返します。 233 func (ctxt *Context) Import(path string, srcDir string, mode ImportMode) (*Package, error) 234 235 // MatchFileは、指定されたディレクトリ内の指定された名前のファイルがコンテキストに一致し、そのディレクトリで [ImportDir] によって作成される [Package] に含まれるかどうかを報告します。 236 // 237 // MatchFileは、ファイルの名前を考慮し、ctxt.OpenFileを使用してファイルの内容の一部または全部を読み取ることがあります。 238 func (ctxt *Context) MatchFile(dir, name string) (match bool, err error) 239 240 // Import は Default.Import の略記法です。 241 func Import(path, srcDir string, mode ImportMode) (*Package, error) 242 243 // ImportDir は Default.ImportDir の省略形です。 244 func ImportDir(dir string, mode ImportMode) (*Package, error) 245 246 // ToolDirはビルドツールを含むディレクトリです。 247 var ToolDir = getToolDir() 248 249 // IsLocalImportは、インポートパスがローカルなインポートパス("."、".."、"./foo"、または"../foo"など)であるかどうかを報告します。 250 func IsLocalImport(path string) bool 251 252 // ArchCharは"?"とエラーを返します。 253 // Goの以前のバージョンでは、返された文字列はコンパイラとリンカのツール名、デフォルトのオブジェクトファイルの接尾辞、 254 // およびデフォルトのリンカの出力名に使用されました。Go 1.5以降、これらの文字列はアーキテクチャによって異なりません。 255 // それらの文字列は、compile、link、.o、およびa.outです。 256 func ArchChar(goarch string) (string, error)