diff --git a/.gitignore b/.gitignore index 04c489f..c8da8cf 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ /_output +/out /yarr *.db *.db-shm diff --git a/cmd/package_macos/main.go b/cmd/package_macos/main.go deleted file mode 100644 index 8cd24d8..0000000 --- a/cmd/package_macos/main.go +++ /dev/null @@ -1,99 +0,0 @@ -package main - -import ( - "flag" - "fmt" - "io/ioutil" - "log" - "os" - "os/exec" - "path" - "strconv" - "strings" -) - -var plist = ` - - - - CFBundleName - yarr - CFBundleDisplayName - yarr - CFBundleIdentifier - nkanaev.yarr - CFBundleVersion - VERSION - CFBundlePackageType - APPL - CFBundleExecutable - yarr - - CFBundleIconFile - icon - LSApplicationCategoryType - public.app-category.news - - NSHighResolutionCapable - True - - LSMinimumSystemVersion - 10.13 - LSUIElement - - NSHumanReadableCopyright - Copyright © 2020 nkanaev. All rights reserved. - - -` - -func run(cmd ...string) { - fmt.Println(cmd) - err := exec.Command(cmd[0], cmd[1:]...).Run() - if err != nil { - log.Fatal(err) - } -} - -func main() { - var version, outdir string - flag.StringVar(&version, "version", "0.0", "") - flag.StringVar(&outdir, "outdir", "", "") - flag.Parse() - - outfile := "yarr" - - binDir := path.Join(outdir, "yarr.app", "Contents/MacOS") - resDir := path.Join(outdir, "yarr.app", "Contents/Resources") - - plistFile := path.Join(outdir, "yarr.app", "Contents/Info.plist") - pkginfoFile := path.Join(outdir, "yarr.app", "Contents/PkgInfo") - - os.MkdirAll(binDir, 0700) - os.MkdirAll(resDir, 0700) - - f, _ := ioutil.ReadFile(path.Join(outdir, outfile)) - ioutil.WriteFile(path.Join(binDir, outfile), f, 0755) - - ioutil.WriteFile(plistFile, []byte(strings.Replace(plist, "VERSION", version, 1)), 0644) - ioutil.WriteFile(pkginfoFile, []byte("APPL????"), 0644) - - iconFile := path.Join(outdir, "icon.png") - iconsetDir := path.Join(outdir, "icon.iconset") - os.Mkdir(iconsetDir, 0700) - - for _, res := range []int{1024, 512, 256, 128, 64, 32, 16} { - outfile := fmt.Sprintf("icon_%dx%d.png", res, res) - if res == 1024 || res == 64 { - outfile = fmt.Sprintf("icon_%dx%d@2x.png", res/2, res/2) - } - cmd := []string{ - "sips", "-s", "format", "png", "--resampleWidth", strconv.Itoa(res), - iconFile, "--out", path.Join(iconsetDir, outfile), - } - run(cmd...) - } - - icnsFile := path.Join(resDir, "icon.icns") - run("iconutil", "-c", "icns", iconsetDir, "-o", icnsFile) -} diff --git a/etc/icon.icns b/etc/icon.icns new file mode 100644 index 0000000..ec9171c Binary files /dev/null and b/etc/icon.icns differ diff --git a/etc/icon_macos.png b/etc/icon_macos.png new file mode 100644 index 0000000..467a58d Binary files /dev/null and b/etc/icon_macos.png differ diff --git a/etc/macos_package.sh b/etc/macos_package.sh new file mode 100755 index 0000000..f77d5c0 --- /dev/null +++ b/etc/macos_package.sh @@ -0,0 +1,62 @@ +#/bin/sh + +set -e + +usage() { + echo "usage: $0 VERSION path/to/icon.icns path/to/binary output/dir" +} + +if [ $# -eq 0 ]; then + usage + exit +fi + +VERSION=$1 +ICNFILE=$2 +BINFILE=$3 +OUTPATH=$4 + +mkdir -p $OUTPATH/yarr.app/Contents/MacOS +mkdir -p $OUTPATH/yarr.app/Contents/Resources + +mv $BINFILE $OUTPATH/yarr.app/Contents/MacOS/yarr +cp $ICNFILE $OUTPATH/yarr.app/Contents/Resources/icon.icns + +chmod u+x $OUTPATH/yarr.app/Contents/MacOS/yarr + +echo -n 'APPL????' >$OUTPATH/yarr.app/Contents/PkgInfo +cat <$OUTPATH/yarr.app/Contents/Info.plist + + + + + CFBundleName + yarr + CFBundleDisplayName + yarr + CFBundleIdentifier + nkanaev.yarr + CFBundleVersion + $VERSION + CFBundlePackageType + APPL + CFBundleExecutable + yarr + + CFBundleIconFile + icon + LSApplicationCategoryType + public.app-category.news + + NSHighResolutionCapable + True + + LSMinimumSystemVersion + 10.13 + LSUIElement + + NSHumanReadableCopyright + Copyright © 2020 nkanaev. All rights reserved. + + +EOF diff --git a/makefile b/makefile index 1d1a974..6691d8c 100644 --- a/makefile +++ b/makefile @@ -4,8 +4,10 @@ GITHASH=$(shell git rev-parse --short=8 HEAD) GO_TAGS = sqlite_foreign_keys sqlite_json GO_LDFLAGS = -s -w -X 'main.Version=$(VERSION)' -X 'main.GitHash=$(GITHASH)' -export GOARCH ?= amd64 -export CGO_ENABLED = 1 +GO_FLAGS = -tags "$(GO_TAGS)" -ldflags="$(GO_LDFLAGS)" +GO_FLAGS_GUI = -tags "$(GO_TAGS) gui" -ldflags="$(GO_LDFLAGS)" + +export CGO_ENABLED=1 build_default: mkdir -p _output @@ -27,8 +29,33 @@ build_windows: windres -i src/platform/versioninfo.rc -O coff -o src/platform/versioninfo.syso GOOS=windows go build -tags "$(GO_TAGS) windows" -ldflags="$(GO_LDFLAGS) -H windowsgui" -o _output/windows/yarr.exe ./cmd/yarr +etc/icon.icns: etc/icon_macos.png + mkdir -p etc/icon.iconset + sips -s format png --resampleWidth 1024 etc/icon_macos.png --out etc/icon.iconset/icon_512x512@2x.png + sips -s format png --resampleWidth 512 etc/icon_macos.png --out etc/icon.iconset/icon_512x512.png + sips -s format png --resampleWidth 256 etc/icon_macos.png --out etc/icon.iconset/icon_256x256.png + sips -s format png --resampleWidth 128 etc/icon_macos.png --out etc/icon.iconset/icon_128x128.png + sips -s format png --resampleWidth 64 etc/icon_macos.png --out etc/icon.iconset/icon_32x32@2x.png + sips -s format png --resampleWidth 32 etc/icon_macos.png --out etc/icon.iconset/icon_32x32.png + sips -s format png --resampleWidth 16 etc/icon_macos.png --out etc/icon.iconset/icon_16x16.png + iconutil -c icns etc/icon.iconset -o etc/icon.icns + +darwin_arm64_gui: etc/icon.icns + mkdir -p out/$@ + CGOGOOS=darwin GOARCH=arm64 go build $(GO_FLAGS_GUI) -o out/$@/yarr ./cmd/yarr + ./etc/macos_package.sh $(VERSION) etc/icon.icns out/$@/yarr out/$@ + +darwin_amd64_gui: etc/icon.icns + mkdir -p out/$@ + GOOS=darwin GOARCH=amd64 go build $(GO_FLAGS_GUI) -o out/$@/yarr ./cmd/yarr + ./etc/macos_package.sh $(VERSION) etc/icon.icns out/$@/yarr out/$@ + serve: - go run -tags "$(GO_TAGS)" ./cmd/yarr -db local.db + go run $(GO_FLAGS) ./cmd/yarr -db local.db test: - go test -tags "$(GO_TAGS)" ./... + go test $(GO_FLAGS) ./... + +.PHONY: serve test \ + mac_amd64_gui \ + mac_arm64_gui diff --git a/src/platform/fixconsole_default.go b/src/platform/fixconsole_default.go index 8b2c9c4..89eafa4 100644 --- a/src/platform/fixconsole_default.go +++ b/src/platform/fixconsole_default.go @@ -1,5 +1,4 @@ //go:build !windows -// +build !windows package platform diff --git a/src/platform/fixconsole_windows.go b/src/platform/fixconsole_windows.go index 39ea588..faba404 100644 --- a/src/platform/fixconsole_windows.go +++ b/src/platform/fixconsole_windows.go @@ -1,3 +1,5 @@ +//go:build windows + package platform import ( diff --git a/src/platform/gui.go b/src/platform/gui.go index 9920761..4e2e6e7 100644 --- a/src/platform/gui.go +++ b/src/platform/gui.go @@ -1,5 +1,4 @@ -//go:build macos || windows -// +build macos windows +//go:build (darwin || windows) && gui package platform diff --git a/src/platform/guiless.go b/src/platform/guiless.go index 58c1414..906114c 100644 --- a/src/platform/guiless.go +++ b/src/platform/guiless.go @@ -1,5 +1,4 @@ -//go:build !windows && !macos -// +build !windows,!macos +//go:build !gui package platform diff --git a/src/platform/icon_mac.go b/src/platform/icon_mac.go index 1840f9e..edd4dca 100644 --- a/src/platform/icon_mac.go +++ b/src/platform/icon_mac.go @@ -1,5 +1,4 @@ -//go:build macos -// +build macos +//go:build darwin && gui package platform diff --git a/src/platform/icon_win.go b/src/platform/icon_win.go index aef6bcd..b1f7cb3 100644 --- a/src/platform/icon_win.go +++ b/src/platform/icon_win.go @@ -1,5 +1,4 @@ -//go:build windows -// +build windows +//go:build windows && gui package platform diff --git a/src/platform/open_etc.go b/src/platform/open_etc.go index de5e978..020c9d8 100644 --- a/src/platform/open_etc.go +++ b/src/platform/open_etc.go @@ -1,5 +1,4 @@ -//go:build !windows && !darwin -// +build !windows,!darwin +//go:build linux package platform diff --git a/src/platform/open_mac.go b/src/platform/open_mac.go index 7d7ae20..3ba9786 100644 --- a/src/platform/open_mac.go +++ b/src/platform/open_mac.go @@ -1,5 +1,4 @@ //go:build darwin -// +build darwin package platform diff --git a/src/platform/open_win.go b/src/platform/open_win.go index c4f01eb..e6eb41b 100644 --- a/src/platform/open_win.go +++ b/src/platform/open_win.go @@ -1,5 +1,4 @@ //go:build windows -// +build windows package platform