|
@@ -24,6 +24,7 @@ import (
|
|
|
"os"
|
|
|
"os/exec"
|
|
|
"os/user"
|
|
|
+ "path"
|
|
|
"path/filepath"
|
|
|
"regexp"
|
|
|
"runtime"
|
|
@@ -59,7 +60,7 @@ type target struct {
|
|
|
debpre string
|
|
|
debpost string
|
|
|
description string
|
|
|
- buildPkg string
|
|
|
+ buildPkgs []string
|
|
|
binaryName string
|
|
|
archiveFiles []archiveFile
|
|
|
systemdServices []string
|
|
@@ -76,9 +77,8 @@ type archiveFile struct {
|
|
|
var targets = map[string]target{
|
|
|
"all": {
|
|
|
// Only valid for the "build" and "install" commands as it lacks all
|
|
|
- // the archive creation stuff.
|
|
|
- buildPkg: "github.com/syncthing/syncthing/cmd/...",
|
|
|
- tags: []string{"purego"},
|
|
|
+ // the archive creation stuff. buildPkgs gets filled out in init()
|
|
|
+ tags: []string{"purego"},
|
|
|
},
|
|
|
"syncthing": {
|
|
|
// The default target for "build", "install", "tar", "zip", "deb", etc.
|
|
@@ -87,7 +87,7 @@ var targets = map[string]target{
|
|
|
debdeps: []string{"libc6", "procps"},
|
|
|
debpost: "script/post-upgrade",
|
|
|
description: "Open Source Continuous File Synchronization",
|
|
|
- buildPkg: "github.com/syncthing/syncthing/cmd/syncthing",
|
|
|
+ buildPkgs: []string{"github.com/syncthing/syncthing/cmd/syncthing"},
|
|
|
binaryName: "syncthing", // .exe will be added automatically for Windows builds
|
|
|
archiveFiles: []archiveFile{
|
|
|
{src: "{{binary}}", dst: "{{binary}}", perm: 0755},
|
|
@@ -131,7 +131,7 @@ var targets = map[string]target{
|
|
|
debdeps: []string{"libc6"},
|
|
|
debpre: "cmd/stdiscosrv/scripts/preinst",
|
|
|
description: "Syncthing Discovery Server",
|
|
|
- buildPkg: "github.com/syncthing/syncthing/cmd/stdiscosrv",
|
|
|
+ buildPkgs: []string{"github.com/syncthing/syncthing/cmd/stdiscosrv"},
|
|
|
binaryName: "stdiscosrv", // .exe will be added automatically for Windows builds
|
|
|
archiveFiles: []archiveFile{
|
|
|
{src: "{{binary}}", dst: "{{binary}}", perm: 0755},
|
|
@@ -159,7 +159,7 @@ var targets = map[string]target{
|
|
|
debdeps: []string{"libc6"},
|
|
|
debpre: "cmd/strelaysrv/scripts/preinst",
|
|
|
description: "Syncthing Relay Server",
|
|
|
- buildPkg: "github.com/syncthing/syncthing/cmd/strelaysrv",
|
|
|
+ buildPkgs: []string{"github.com/syncthing/syncthing/cmd/strelaysrv"},
|
|
|
binaryName: "strelaysrv", // .exe will be added automatically for Windows builds
|
|
|
archiveFiles: []archiveFile{
|
|
|
{src: "{{binary}}", dst: "{{binary}}", perm: 0755},
|
|
@@ -187,7 +187,7 @@ var targets = map[string]target{
|
|
|
debname: "syncthing-relaypoolsrv",
|
|
|
debdeps: []string{"libc6"},
|
|
|
description: "Syncthing Relay Pool Server",
|
|
|
- buildPkg: "github.com/syncthing/syncthing/cmd/strelaypoolsrv",
|
|
|
+ buildPkgs: []string{"github.com/syncthing/syncthing/cmd/strelaypoolsrv"},
|
|
|
binaryName: "strelaypoolsrv", // .exe will be added automatically for Windows builds
|
|
|
archiveFiles: []archiveFile{
|
|
|
{src: "{{binary}}", dst: "{{binary}}", perm: 0755},
|
|
@@ -217,6 +217,18 @@ var dependencyRepos = []dependencyRepo{
|
|
|
}
|
|
|
|
|
|
func init() {
|
|
|
+ all := targets["all"]
|
|
|
+ pkgs, _ := filepath.Glob("cmd/*")
|
|
|
+ for _, pkg := range pkgs {
|
|
|
+ pkg = filepath.Base(pkg)
|
|
|
+ if strings.HasPrefix(pkg, ".") {
|
|
|
+ // ignore dotfiles
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ all.buildPkgs = append(all.buildPkgs, fmt.Sprintf("github.com/syncthing/syncthing/cmd/%s", pkg))
|
|
|
+ }
|
|
|
+ targets["all"] = all
|
|
|
+
|
|
|
// The "syncthing" target includes a few more files found in the "etc"
|
|
|
// and "extra" dirs.
|
|
|
syncthingPkg := targets["syncthing"]
|
|
@@ -382,9 +394,6 @@ func install(target target, tags []string) {
|
|
|
}
|
|
|
os.Setenv("GOBIN", filepath.Join(cwd, "bin"))
|
|
|
|
|
|
- args := []string{"install", "-v"}
|
|
|
- args = appendParameters(args, tags, target)
|
|
|
-
|
|
|
os.Setenv("GOOS", goos)
|
|
|
os.Setenv("GOARCH", goarch)
|
|
|
os.Setenv("CC", cc)
|
|
@@ -400,19 +409,20 @@ func install(target target, tags []string) {
|
|
|
defer shouldCleanupSyso(sysoPath)
|
|
|
}
|
|
|
|
|
|
- runPrint(goCmd, args...)
|
|
|
+ for _, pkg := range target.buildPkgs {
|
|
|
+ args := []string{"install", "-v"}
|
|
|
+ args = appendParameters(args, tags, pkg)
|
|
|
+
|
|
|
+ runPrint(goCmd, args...)
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
func build(target target, tags []string) {
|
|
|
lazyRebuildAssets()
|
|
|
-
|
|
|
tags = append(target.tags, tags...)
|
|
|
|
|
|
rmr(target.BinaryName())
|
|
|
|
|
|
- args := []string{"build", "-v"}
|
|
|
- args = appendParameters(args, tags, target)
|
|
|
-
|
|
|
os.Setenv("GOOS", goos)
|
|
|
os.Setenv("GOARCH", goarch)
|
|
|
os.Setenv("CC", cc)
|
|
@@ -432,10 +442,15 @@ func build(target target, tags []string) {
|
|
|
defer shouldCleanupSyso(sysoPath)
|
|
|
}
|
|
|
|
|
|
- runPrint(goCmd, args...)
|
|
|
+ for _, pkg := range target.buildPkgs {
|
|
|
+ args := []string{"build", "-v"}
|
|
|
+ args = appendParameters(args, tags, pkg)
|
|
|
+
|
|
|
+ runPrint(goCmd, args...)
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
-func appendParameters(args []string, tags []string, target target) []string {
|
|
|
+func appendParameters(args []string, tags []string, pkg string) []string {
|
|
|
if pkgdir != "" {
|
|
|
args = append(args, "-pkgdir", pkgdir)
|
|
|
}
|
|
@@ -451,7 +466,7 @@ func appendParameters(args []string, tags []string, target target) []string {
|
|
|
|
|
|
if !debugBinary {
|
|
|
// Regular binaries get version tagged and skip some debug symbols
|
|
|
- args = append(args, "-ldflags", ldflags())
|
|
|
+ args = append(args, "-ldflags", ldflags(path.Base(pkg)))
|
|
|
} else {
|
|
|
// -gcflags to disable optimizations and inlining. Skip -ldflags
|
|
|
// because `Could not launch program: decoding dwarf section info at
|
|
@@ -460,7 +475,7 @@ func appendParameters(args []string, tags []string, target target) []string {
|
|
|
args = append(args, "-gcflags", "-N -l")
|
|
|
}
|
|
|
|
|
|
- return append(args, target.buildPkg)
|
|
|
+ return append(args, pkg)
|
|
|
}
|
|
|
|
|
|
func buildTar(target target) {
|
|
@@ -708,6 +723,7 @@ func listFiles(dir string) []string {
|
|
|
if err != nil {
|
|
|
return err
|
|
|
}
|
|
|
+
|
|
|
if fi.Mode().IsRegular() {
|
|
|
res = append(res, path)
|
|
|
}
|
|
@@ -789,7 +805,7 @@ func transifex() {
|
|
|
runPrint(goCmd, "run", "../../../../script/transifexdl.go")
|
|
|
}
|
|
|
|
|
|
-func ldflags() string {
|
|
|
+func ldflags(program string) string {
|
|
|
sep := '='
|
|
|
if goVersion > 0 && goVersion < 1.5 {
|
|
|
sep = ' '
|
|
@@ -801,8 +817,9 @@ func ldflags() string {
|
|
|
fmt.Fprintf(b, " -X github.com/syncthing/syncthing/lib/build.Stamp%c%d", sep, buildStamp())
|
|
|
fmt.Fprintf(b, " -X github.com/syncthing/syncthing/lib/build.User%c%s", sep, buildUser())
|
|
|
fmt.Fprintf(b, " -X github.com/syncthing/syncthing/lib/build.Host%c%s", sep, buildHost())
|
|
|
+ fmt.Fprintf(b, " -X github.com/syncthing/syncthing/lib/build.Program%c%s", sep, program)
|
|
|
if v := os.Getenv("EXTRA_LDFLAGS"); v != "" {
|
|
|
- fmt.Fprintf(b, " %s", v);
|
|
|
+ fmt.Fprintf(b, " %s", v)
|
|
|
}
|
|
|
return b.String()
|
|
|
}
|