@@ -70,12 +70,33 @@ func tryBuild(cmd string, args ...string) bool {
70
70
return res && (! CheckExtracted || checkExtractorRun ())
71
71
}
72
72
73
- // Autobuild attempts to detect build system and run the corresponding command.
73
+ // If a project is accompanied by a build script (such as a makefile), then we try executing such
74
+ // build scripts to build the project. This type represents pairs of script names to check for
75
+ // and the names of corresponding build tools to invoke if those scripts exist.
76
+ type BuildScript struct {
77
+ Tool string // The name of the command to execute if the build script exists
78
+ Filename string // The name of the build script to check for
79
+ }
80
+
81
+ // An array of build scripts to check for and corresponding commands that we can execute
82
+ // if they exist.
83
+ var BuildScripts = []BuildScript {
84
+ {Tool : "make" , Filename : "Makefile" },
85
+ {Tool : "make" , Filename : "makefile" },
86
+ {Tool : "make" , Filename : "GNUmakefile" },
87
+ {Tool : "ninja" , Filename : "build.ninja" },
88
+ {Tool : "./build" , Filename : "build" },
89
+ {Tool : "./build.sh" , Filename : "build.sh" },
90
+ }
91
+
92
+ // Autobuild attempts to detect build systems based on the presence of build scripts from the
93
+ // list in `BuildScripts` and run the corresponding command. This may invoke zero or more
94
+ // build scripts in the order given by `BuildScripts`.
74
95
func Autobuild () bool {
75
- return tryBuildIfExists ( "Makefile" , "make" ) ||
76
- tryBuildIfExists ("makefile" , "make" ) ||
77
- tryBuildIfExists ( "GNUmakefile" , "make" ) ||
78
- tryBuildIfExists ( "build.ninja" , "ninja" ) ||
79
- tryBuildIfExists ( "build" , "./build" ) ||
80
- tryBuildIfExists ( "build.sh" , "./build.sh" )
96
+ for _ , script := range BuildScripts {
97
+ if tryBuildIfExists (script . Filename , script . Tool ) {
98
+ return true
99
+ }
100
+ }
101
+ return false
81
102
}
0 commit comments