diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 418dd77..dbf8378 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -5,10 +5,6 @@ on: tags: - v* workflow_dispatch: - workflow_run: - workflows: [Test] - types: - - completed jobs: build_macos: diff --git a/cmd/generate_versioninfo/main.go b/cmd/generate_versioninfo/main.go deleted file mode 100644 index 390cb70..0000000 --- a/cmd/generate_versioninfo/main.go +++ /dev/null @@ -1,48 +0,0 @@ -package main - -import ( - "flag" - "io/ioutil" - "strings" -) - -var rsrc = `1 VERSIONINFO -FILEVERSION {VERSION_COMMA},0,0 -PRODUCTVERSION {VERSION_COMMA},0,0 -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "080904E4" - BEGIN - VALUE "CompanyName", "Old MacDonald's Farm" - VALUE "FileDescription", "Yet another RSS reader" - VALUE "FileVersion", "{VERSION}" - VALUE "InternalName", "yarr" - VALUE "LegalCopyright", "nkanaev" - VALUE "OriginalFilename", "yarr.exe" - VALUE "ProductName", "yarr" - VALUE "ProductVersion", "{VERSION}" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x809, 1252 - END -END - -1 ICON "icon.ico" -` - -func main() { - var version, outfile string - flag.StringVar(&version, "version", "0.0", "") - flag.StringVar(&outfile, "outfile", "versioninfo.rc", "") - flag.Parse() - - version_comma := strings.ReplaceAll(version, ".", ",") - - out := strings.ReplaceAll(rsrc, "{VERSION}", version) - out = strings.ReplaceAll(out, "{VERSION_COMMA}", version_comma) - - ioutil.WriteFile(outfile, []byte(out), 0644) -} diff --git a/etc/windows_versioninfo.sh b/etc/windows_versioninfo.sh new file mode 100755 index 0000000..64d1f7c --- /dev/null +++ b/etc/windows_versioninfo.sh @@ -0,0 +1,89 @@ +#!/bin/bash + +set -e + +# Function to display usage information +usage() { + echo "Usage: $0 [-version VERSION] [-outfile FILENAME]" + echo " -version VERSION Set the version number (default: 0.0)" + echo " -outfile FILENAME Set the output file name (default: versioninfo.rc)" + echo "" + echo "This script generates a Windows resource file with version information." + exit 1 +} + +# Default values +version="0.0" +outfile="versioninfo.rc" + +# Check if help is requested +if [[ "$1" == "-h" || "$1" == "--help" ]]; then + usage +fi + +if [ $# -eq 0 ]; then + usage +fi + +# Parse command-line options +while [[ $# -gt 0 ]]; do + case $1 in + -version) + if [[ -z "$2" || "$2" == -* ]]; then + echo "Error: Missing value for -version parameter" + usage + fi + version="$2" + shift 2 + ;; + -outfile) + if [[ -z "$2" || "$2" == -* ]]; then + echo "Error: Missing value for -outfile parameter" + usage + fi + outfile="$2" + shift 2 + ;; + *) + echo "Error: Unknown parameter: $1" + usage + ;; + esac +done + +# Replace dots with commas for version_comma +version_comma="${version//./,}" + +# Use a here document for the template with ENDFILE delimiter +cat < "$outfile" +1 VERSIONINFO +FILEVERSION $version_comma,0,0 +PRODUCTVERSION $version_comma,0,0 +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "080904E4" + BEGIN + VALUE "CompanyName", "Old MacDonald's Farm" + VALUE "FileDescription", "Yet another RSS reader" + VALUE "FileVersion", "$version" + VALUE "InternalName", "yarr" + VALUE "LegalCopyright", "nkanaev" + VALUE "OriginalFilename", "yarr.exe" + VALUE "ProductName", "yarr" + VALUE "ProductVersion", "$version" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x809, 1252 + END +END + +1 ICON "icon.ico" +ENDFILE + +# Set the correct permissions +chmod 644 "$outfile" + +echo "Generated $outfile with version $version" diff --git a/makefile b/makefile index d5f286d..d7bf9d7 100644 --- a/makefile +++ b/makefile @@ -4,30 +4,15 @@ 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)' -GO_FLAGS = -tags "$(GO_TAGS)" -ldflags="$(GO_LDFLAGS)" -GO_FLAGS_GUI = -tags "$(GO_TAGS) gui" -ldflags="$(GO_LDFLAGS)" +GO_FLAGS = -tags "$(GO_TAGS)" -ldflags="$(GO_LDFLAGS)" +GO_FLAGS_GUI = -tags "$(GO_TAGS) gui" -ldflags="$(GO_LDFLAGS)" +GO_FLAGS_GUI_WIN = -tags "$(GO_TAGS) gui" -ldflags="$(GO_LDFLAGS) -H windowsgui" export CGO_ENABLED=1 -build_default: - mkdir -p _output - go build -tags "$(GO_TAGS)" -ldflags="$(GO_LDFLAGS)" -o _output/yarr ./cmd/yarr +default: test host -build_macos: - mkdir -p _output/macos - GOOS=darwin go build -tags "$(GO_TAGS) macos" -ldflags="$(GO_LDFLAGS)" -o _output/macos/yarr ./cmd/yarr - cp src/platform/icon.png _output/macos/icon.png - go run ./cmd/package_macos -outdir _output/macos -version "$(VERSION)" - -build_linux: - mkdir -p _output/linux - GOOS=linux go build -tags "$(GO_TAGS) linux" -ldflags="$(GO_LDFLAGS)" -o _output/linux/yarr ./cmd/yarr - -build_windows: - mkdir -p _output/windows - go run ./cmd/generate_versioninfo -version "$(VERSION)" -outfile src/platform/versioninfo.rc - 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 +# platform-specific files etc/icon.icns: etc/icon_macos.png mkdir -p etc/icon.iconset @@ -40,6 +25,15 @@ etc/icon.icns: etc/icon_macos.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 +src/platform/versioninfo.rc: + ./etc/windows_versioninfo.sh -version "$(VERSION)" -outfile src/platform/versioninfo.rc + windres -i src/platform/versioninfo.rc -O coff -o src/platform/versioninfo.syso + +# build targets + +host: + go build $(GO_FLAGS) -o out/yarr ./cmd/yarr + darwin_amd64: # not supported yet # CC="zig cc -target x86_64-macos-none" GOOS=darwin GOARCH=arm64 go build $(subst -s ,,$(GO_FLAGS)) -o out/$@/yarr ./cmd/yarr @@ -63,21 +57,29 @@ windows_arm64: CC="zig cc -target aarch64-windows-gnu" GOOS=windows GOARCH=arm64 go build $(GO_FLAGS) -o out/$@/yarr ./cmd/yarr darwin_arm64_gui: etc/icon.icns - mkdir -p out/$@ GOOS=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/$@ +windows_amd64_gui: windows_versioninfo + GOOS=windows GOARCH=amd64 go build $(GO_FLAGS_GUI_WIN) -o out/$@/yarr ./cmd/yarr + +windows_arm64_gui: src/platform/versioninfo.rc + GOOS=windows GOARCH=arm64 go build $(GO_FLAGS_GUI_WIN) -o out/$@/yarr ./cmd/yarr + serve: go run $(GO_FLAGS) ./cmd/yarr -db local.db test: go test $(GO_FLAGS) ./... -.PHONY: serve test \ +.PHONY: \ + host \ darwin_amd64 darwin_amd64_gui \ - darwin_arm64 darwin_arm64_gui + darwin_arm64 darwin_arm64_gui \ + windows_amd64 windows_amd64_gui \ + windows_arm64 windows_arm64_gui \ + serve test