diff --git a/Makefile b/Makefile index aef5e10..989adee 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,8 @@ MANSECTION ?= 1 SHELL=/bin/bash +# Sanitize VERSION for use in filenames and tar transform expressions +# Replace forward slashes with dashes to avoid issues with tar --transform +VERSION_SAFE = $(subst /,-,$(VERSION)) .PHONY: clean snap rpm rpm-setup rpm-local rpm-clean ci-sim-ubuntu ci-sim-fedora ci-sim default: linux all: linux windows darwin freebsd @@ -20,7 +23,7 @@ deb/linux-amd64: bin/linux-amd64/mdview cp -r bin/linux-amd64/mdview package/usr/bin/mdview cp mdview.1 package/usr/share/man/man1/ dpkg-deb --build package - mv package.deb mdview_$(VERSION)_amd64.deb + mv package.deb mdview_$(VERSION_SAFE)_amd64.deb deb/linux-arm64: bin/linux-arm64/mdview mkdir -p package/DEBIAN @@ -31,7 +34,7 @@ deb/linux-arm64: bin/linux-arm64/mdview cp -r bin/linux-arm64/mdview package/usr/bin/mdview cp mdview.1 package/usr/share/man/man1/ dpkg-deb --build package - mv package.deb mdview_$(VERSION)_arm64.deb + mv package.deb mdview_$(VERSION_SAFE)_arm64.deb snap: snapcraft pack @@ -39,36 +42,36 @@ snap: bin/linux-amd64/mdview: manpage env GOOS=linux GOARCH=amd64 go build -buildvcs=false -ldflags "-X main.appVersion=$(VERSION)" -o ./bin/linux-amd64/mdview cp mdview.1 bin/linux-amd64/ - tar czvf mdview-$(VERSION)-linux-amd64.tar.gz --transform s/linux-amd64/mdview-$(VERSION)/ -C bin linux-amd64 + tar czvf mdview-$(VERSION_SAFE)-linux-amd64.tar.gz --transform s/linux-amd64/mdview-$(VERSION_SAFE)/ -C bin linux-amd64 bin/linux-i386/mdview: env GOOS=linux GOARCH=386 go build -buildvcs=false -ldflags "-X main.appVersion=$(VERSION)" -o ./bin/linux-i386/mdview cp mdview.1 bin/linux-i386/ - tar czvf mdview-$(VERSION)-linux-i386.tar.gz --transform s/linux-i386/mdview-$(VERSION)/ -C bin linux-i386 + tar czvf mdview-$(VERSION_SAFE)-linux-i386.tar.gz --transform s/linux-i386/mdview-$(VERSION_SAFE)/ -C bin linux-i386 bin/linux-arm64/mdview: env GOOS=linux GOARCH=arm64 go build -buildvcs=false -ldflags "-X main.appVersion=$(VERSION)" -o ./bin/linux-arm64/mdview cp mdview.1 bin/linux-arm64/ - tar czvf mdview-$(VERSION)-linux-arm64.tar.gz --transform s/linux-arm64/mdview-$(VERSION)/ -C bin linux-arm64 + tar czvf mdview-$(VERSION_SAFE)-linux-arm64.tar.gz --transform s/linux-arm64/mdview-$(VERSION_SAFE)/ -C bin linux-arm64 bin/windows-amd64/mdview.exe: env GOOS=windows GOARCH=amd64 go build -buildvcs=false -ldflags "-X main.appVersion=$(VERSION)" -o ./bin/windows-amd64/mdview.exe - zip -j mdview-$(VERSION)-windows-amd64.zip bin/windows-amd64/mdview.exe + zip -j mdview-$(VERSION_SAFE)-windows-amd64.zip bin/windows-amd64/mdview.exe bin/darwin-amd64/mdview: env GOOS=darwin GOARCH=amd64 go build -buildvcs=false -ldflags "-X main.appVersion=$(VERSION)" -o ./bin/darwin-amd64/mdview cp mdview.1 bin/darwin-amd64/ - tar czvf mdview-$(VERSION)-darwin-amd64.tar.gz --transform s/darwin-amd64/mdview-$(VERSION)/ -C bin darwin-amd64 + tar czvf mdview-$(VERSION_SAFE)-darwin-amd64.tar.gz --transform s/darwin-amd64/mdview-$(VERSION_SAFE)/ -C bin darwin-amd64 bin/darwin-arm64/mdview: env GOOS=darwin GOARCH=arm64 go build -buildvcs=false -ldflags "-X main.appVersion=$(VERSION)" -o ./bin/darwin-arm64/mdview cp mdview.1 bin/darwin-arm64/ - tar czvf mdview-$(VERSION)-darwin-arm64.tar.gz --transform s/darwin-arm64/mdview-$(VERSION)/ -C bin darwin-arm64 + tar czvf mdview-$(VERSION_SAFE)-darwin-arm64.tar.gz --transform s/darwin-arm64/mdview-$(VERSION_SAFE)/ -C bin darwin-arm64 bin/freebsd-amd64/mdview: env GOOS=freebsd GOARCH=amd64 go build -buildvcs=false -ldflags "-X main.appVersion=$(VERSION)" -o ./bin/freebsd-amd64/mdview cp mdview.1 bin/freebsd-amd64/mdview - tar czvf mdview-$(VERSION)-freebsd-amd64.tar.gz --transform s/freebsd-amd64/mdview-$(VERSION)/ -C bin freebsd-amd64 + tar czvf mdview-$(VERSION_SAFE)-freebsd-amd64.tar.gz --transform s/freebsd-amd64/mdview-$(VERSION_SAFE)/ -C bin freebsd-amd64 clean: rm -rf bin diff --git a/build-rpm.sh b/build-rpm.sh index 4a53bac..ea780f9 100755 --- a/build-rpm.sh +++ b/build-rpm.sh @@ -36,19 +36,33 @@ EOF } check_dependencies() { - local deps=("rpm-build" "go" "pandoc" "make" "git") - local missing=() - - for dep in "${deps[@]}"; do - if ! command -v "$dep" &> /dev/null; then - missing+=("$dep") + # Command name -> Package name mapping for Fedora + declare -A deps=( + ["rpmbuild"]="rpm-build" + ["go"]="golang" + ["pandoc"]="pandoc" + ["make"]="make" + ["git"]="git" + ) + local missing_cmds=() + local missing_pkgs=() + + for cmd in "${!deps[@]}"; do + if ! command -v "$cmd" &> /dev/null; then + missing_cmds+=("$cmd") + missing_pkgs+=("${deps[$cmd]}") fi done - if [ ${#missing[@]} -ne 0 ]; then - echo -e "${RED}Error: Missing dependencies: ${missing[*]}${NC}" - echo -e "${YELLOW}Install on Fedora:${NC}" - echo " sudo dnf install -y rpm-build golang pandoc make git" + if [ ${#missing_cmds[@]} -ne 0 ]; then + echo -e "${RED}Error: Missing required commands: ${missing_cmds[*]}${NC}" + echo + echo -e "${YELLOW}These commands are required but not found in your PATH.${NC}" + echo + echo -e "${YELLOW}To install on Fedora:${NC}" + echo " sudo dnf install -y ${missing_pkgs[*]}" + echo + echo -e "${YELLOW}If packages are already installed, ensure the commands are in your PATH.${NC}" exit 1 fi }