It is really strange that whe I run make, it does not build mgmt. This commit makes build the default target, without moving the target, therefore we keep as much as we can the order of the file. This also removes the confusion for designers that would run "make" instead of "make art", whose work would be disrupted when we add a -- let's say -- make alpharelese command. Signed-off-by: Julien Pivotto <roidelapluie@inuits.eu>
281 lines
10 KiB
Makefile
281 lines
10 KiB
Makefile
# Mgmt
|
|
# Copyright (C) 2013-2017+ James Shubin and the project contributors
|
|
# Written by James Shubin <james@shubin.ca> and the project contributors
|
|
#
|
|
# This program is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU Affero General Public License as published by
|
|
# the Free Software Foundation, either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU Affero General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU Affero General Public License
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
SHELL = /usr/bin/env bash
|
|
.PHONY: all art cleanart version program path deps run race generate build clean test gofmt yamlfmt format docs rpmbuild mkdirs rpm srpm spec tar upload upload-sources upload-srpms upload-rpms copr
|
|
.SILENT: clean
|
|
|
|
SVERSION := $(or $(SVERSION),$(shell git describe --match '[0-9]*\.[0-9]*\.[0-9]*' --tags --dirty --always))
|
|
VERSION := $(or $(VERSION),$(shell git describe --match '[0-9]*\.[0-9]*\.[0-9]*' --tags --abbrev=0))
|
|
PROGRAM := $(shell echo $(notdir $(CURDIR)) | cut -f1 -d"-")
|
|
OLDGOLANG := $(shell go version | grep -E 'go1.3|go1.4')
|
|
ifeq ($(VERSION),$(SVERSION))
|
|
RELEASE = 1
|
|
else
|
|
RELEASE = untagged
|
|
endif
|
|
ARCH = $(uname -m)
|
|
SPEC = rpmbuild/SPECS/$(PROGRAM).spec
|
|
SOURCE = rpmbuild/SOURCES/$(PROGRAM)-$(VERSION).tar.bz2
|
|
SRPM = rpmbuild/SRPMS/$(PROGRAM)-$(VERSION)-$(RELEASE).src.rpm
|
|
SRPM_BASE = $(PROGRAM)-$(VERSION)-$(RELEASE).src.rpm
|
|
RPM = rpmbuild/RPMS/$(PROGRAM)-$(VERSION)-$(RELEASE).$(ARCH).rpm
|
|
USERNAME := $(shell cat ~/.config/copr 2>/dev/null | grep username | awk -F '=' '{print $$2}' | tr -d ' ')
|
|
SERVER = 'dl.fedoraproject.org'
|
|
REMOTE_PATH = 'pub/alt/$(USERNAME)/$(PROGRAM)'
|
|
ifneq ($(GOTAGS),)
|
|
BUILD_FLAGS = -tags '$(GOTAGS)'
|
|
endif
|
|
|
|
default: build
|
|
|
|
#
|
|
# art
|
|
#
|
|
art: art/mgmt_logo_default_symbol.png art/mgmt_logo_default_tall.png art/mgmt_logo_default_wide.png art/mgmt_logo_reversed_symbol.png art/mgmt_logo_reversed_tall.png art/mgmt_logo_reversed_wide.png art/mgmt_logo_white_symbol.png art/mgmt_logo_white_tall.png art/mgmt_logo_white_wide.png
|
|
|
|
cleanart:
|
|
rm -f art/mgmt_logo_default_symbol.png art/mgmt_logo_default_tall.png art/mgmt_logo_default_wide.png art/mgmt_logo_reversed_symbol.png art/mgmt_logo_reversed_tall.png art/mgmt_logo_reversed_wide.png art/mgmt_logo_white_symbol.png art/mgmt_logo_white_tall.png art/mgmt_logo_white_wide.png
|
|
|
|
# NOTE: the widths are arbitrary
|
|
art/mgmt_logo_default_symbol.png: art/mgmt_logo_default_symbol.svg
|
|
inkscape --export-background='#ffffff' --without-gui --export-png "$@" --export-width 300 $(@:png=svg)
|
|
|
|
art/mgmt_logo_default_tall.png: art/mgmt_logo_default_tall.svg
|
|
inkscape --export-background='#ffffff' --without-gui --export-png "$@" --export-width 400 $(@:png=svg)
|
|
|
|
art/mgmt_logo_default_wide.png: art/mgmt_logo_default_wide.svg
|
|
inkscape --export-background='#ffffff' --without-gui --export-png "$@" --export-width 800 $(@:png=svg)
|
|
|
|
art/mgmt_logo_reversed_symbol.png: art/mgmt_logo_reversed_symbol.svg
|
|
inkscape --export-background='#231f20' --without-gui --export-png "$@" --export-width 300 $(@:png=svg)
|
|
|
|
art/mgmt_logo_reversed_tall.png: art/mgmt_logo_reversed_tall.svg
|
|
inkscape --export-background='#231f20' --without-gui --export-png "$@" --export-width 400 $(@:png=svg)
|
|
|
|
art/mgmt_logo_reversed_wide.png: art/mgmt_logo_reversed_wide.svg
|
|
inkscape --export-background='#231f20' --without-gui --export-png "$@" --export-width 800 $(@:png=svg)
|
|
|
|
art/mgmt_logo_white_symbol.png: art/mgmt_logo_white_symbol.svg
|
|
inkscape --export-background='#231f20' --without-gui --export-png "$@" --export-width 300 $(@:png=svg)
|
|
|
|
art/mgmt_logo_white_tall.png: art/mgmt_logo_white_tall.svg
|
|
inkscape --export-background='#231f20' --without-gui --export-png "$@" --export-width 400 $(@:png=svg)
|
|
|
|
art/mgmt_logo_white_wide.png: art/mgmt_logo_white_wide.svg
|
|
inkscape --export-background='#231f20' --without-gui --export-png "$@" --export-width 800 $(@:png=svg)
|
|
|
|
all: docs $(PROGRAM).static
|
|
|
|
# show the current version
|
|
version:
|
|
@echo $(VERSION)
|
|
|
|
program:
|
|
@echo $(PROGRAM)
|
|
|
|
path:
|
|
./misc/make-path.sh
|
|
|
|
deps:
|
|
./misc/make-deps.sh
|
|
|
|
run:
|
|
find . -maxdepth 1 -type f -name '*.go' -not -name '*_test.go' | xargs go run -ldflags "-X main.program=$(PROGRAM) -X main.version=$(SVERSION)"
|
|
|
|
# include race flag
|
|
race:
|
|
find . -maxdepth 1 -type f -name '*.go' -not -name '*_test.go' | xargs go run -race -ldflags "-X main.program=$(PROGRAM) -X main.version=$(SVERSION)"
|
|
|
|
generate:
|
|
go generate
|
|
|
|
build: $(PROGRAM)
|
|
|
|
$(PROGRAM): main.go
|
|
@echo "Building: $(PROGRAM), version: $(SVERSION)..."
|
|
ifneq ($(OLDGOLANG),)
|
|
@# avoid equals sign in old golang versions eg in: -X foo=bar
|
|
time go build -ldflags "-X main.program $(PROGRAM) -X main.version $(SVERSION)" -o $(PROGRAM) $(BUILD_FLAGS);
|
|
else
|
|
time go build -ldflags "-X main.program=$(PROGRAM) -X main.version=$(SVERSION)" -o $(PROGRAM) $(BUILD_FLAGS);
|
|
endif
|
|
|
|
$(PROGRAM).static: main.go
|
|
@echo "Building: $(PROGRAM).static, version: $(SVERSION)..."
|
|
go generate
|
|
ifneq ($(OLDGOLANG),)
|
|
@# avoid equals sign in old golang versions eg in: -X foo=bar
|
|
go build -a -installsuffix cgo -tags netgo -ldflags '-extldflags "-static" -X main.program $(PROGRAM) -X main.version $(SVERSION)' -o $(PROGRAM).static $(BUILD_FLAGS);
|
|
else
|
|
go build -a -installsuffix cgo -tags netgo -ldflags '-extldflags "-static" -X main.program=$(PROGRAM) -X main.version=$(SVERSION)' -o $(PROGRAM).static $(BUILD_FLAGS);
|
|
endif
|
|
|
|
clean:
|
|
[ ! -e $(PROGRAM) ] || rm $(PROGRAM)
|
|
rm -f *_stringer.go # generated by `go generate`
|
|
rm -f *_mock.go # generated by `go generate`
|
|
|
|
test:
|
|
./test.sh
|
|
|
|
gofmt:
|
|
find . -maxdepth 3 -type f -name '*.go' -not -path './old/*' -not -path './tmp/*' -exec gofmt -w {} \;
|
|
|
|
yamlfmt:
|
|
find . -maxdepth 3 -type f -name '*.yaml' -not -path './old/*' -not -path './tmp/*' -not -path './omv.yaml' -exec ruby -e "require 'yaml'; x=YAML.load_file('{}').to_yaml.each_line.map(&:rstrip).join(10.chr)+10.chr; File.open('{}', 'w').write x" \;
|
|
|
|
format: gofmt yamlfmt
|
|
|
|
docs: $(PROGRAM)-documentation.pdf
|
|
|
|
$(PROGRAM)-documentation.pdf: docs/documentation.md
|
|
pandoc docs/documentation.md -o docs/'$(PROGRAM)-documentation.pdf'
|
|
|
|
#
|
|
# build aliases
|
|
#
|
|
# TODO: does making an rpm depend on making a .srpm first ?
|
|
rpm: $(SRPM) $(RPM)
|
|
# do nothing
|
|
|
|
srpm: $(SRPM)
|
|
# do nothing
|
|
|
|
spec: $(SPEC)
|
|
# do nothing
|
|
|
|
tar: $(SOURCE)
|
|
# do nothing
|
|
|
|
rpmbuild/SOURCES/: tar
|
|
rpmbuild/SRPMS/: srpm
|
|
rpmbuild/RPMS/: rpm
|
|
|
|
upload: upload-sources upload-srpms upload-rpms
|
|
# do nothing
|
|
|
|
#
|
|
# rpmbuild
|
|
#
|
|
$(RPM): $(SPEC) $(SOURCE)
|
|
@echo Running rpmbuild -bb...
|
|
rpmbuild --define '_topdir $(shell pwd)/rpmbuild' -bb $(SPEC) && \
|
|
mv rpmbuild/RPMS/$(ARCH)/$(PROGRAM)-$(VERSION)-$(RELEASE).*.rpm $(RPM)
|
|
|
|
$(SRPM): $(SPEC) $(SOURCE)
|
|
@echo Running rpmbuild -bs...
|
|
rpmbuild --define '_topdir $(shell pwd)/rpmbuild' -bs $(SPEC)
|
|
# renaming is not needed because we aren't using the dist variable
|
|
#mv rpmbuild/SRPMS/$(PROGRAM)-$(VERSION)-$(RELEASE).*.src.rpm $(SRPM)
|
|
|
|
#
|
|
# spec
|
|
#
|
|
$(SPEC): rpmbuild/ spec.in
|
|
@echo Running templater...
|
|
cat spec.in > $(SPEC)
|
|
sed -e s/__PROGRAM__/$(PROGRAM)/g -e s/__VERSION__/$(VERSION)/g -e s/__RELEASE__/$(RELEASE)/g < spec.in > $(SPEC)
|
|
# append a changelog to the .spec file
|
|
git log --format="* %cd %aN <%aE>%n- (%h) %s%d%n" --date=local | sed -r 's/[0-9]+:[0-9]+:[0-9]+ //' >> $(SPEC)
|
|
|
|
#
|
|
# archive
|
|
#
|
|
$(SOURCE): rpmbuild/
|
|
@echo Running git archive...
|
|
# use HEAD if tag doesn't exist yet, so that development is easier...
|
|
git archive --prefix=$(PROGRAM)-$(VERSION)/ -o $(SOURCE) $(VERSION) 2> /dev/null || (echo 'Warning: $(VERSION) does not exist. Using HEAD instead.' && git archive --prefix=$(PROGRAM)-$(VERSION)/ -o $(SOURCE) HEAD)
|
|
# TODO: if git archive had a --submodules flag this would easier!
|
|
@echo Running git archive submodules...
|
|
# i thought i would need --ignore-zeros, but it doesn't seem necessary!
|
|
p=`pwd` && (echo .; git submodule foreach) | while read entering path; do \
|
|
temp="$${path%\'}"; \
|
|
temp="$${temp#\'}"; \
|
|
path=$$temp; \
|
|
[ "$$path" = "" ] && continue; \
|
|
(cd $$path && git archive --prefix=$(PROGRAM)-$(VERSION)/$$path/ HEAD > $$p/rpmbuild/tmp.tar && tar --concatenate --file=$$p/$(SOURCE) $$p/rpmbuild/tmp.tar && rm $$p/rpmbuild/tmp.tar); \
|
|
done
|
|
|
|
# TODO: ensure that each sub directory exists
|
|
rpmbuild/:
|
|
mkdir -p rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
|
|
|
|
mkdirs:
|
|
mkdir -p rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
|
|
|
|
#
|
|
# sha256sum
|
|
#
|
|
rpmbuild/SOURCES/SHA256SUMS: rpmbuild/SOURCES/ $(SOURCE)
|
|
@echo Running SOURCES sha256sum...
|
|
cd rpmbuild/SOURCES/ && sha256sum *.tar.bz2 > SHA256SUMS; cd -
|
|
|
|
rpmbuild/SRPMS/SHA256SUMS: rpmbuild/SRPMS/ $(SRPM)
|
|
@echo Running SRPMS sha256sum...
|
|
cd rpmbuild/SRPMS/ && sha256sum *src.rpm > SHA256SUMS; cd -
|
|
|
|
rpmbuild/RPMS/SHA256SUMS: rpmbuild/RPMS/ $(RPM)
|
|
@echo Running RPMS sha256sum...
|
|
cd rpmbuild/RPMS/ && sha256sum *.rpm > SHA256SUMS; cd -
|
|
|
|
#
|
|
# gpg
|
|
#
|
|
rpmbuild/SOURCES/SHA256SUMS.asc: rpmbuild/SOURCES/SHA256SUMS
|
|
@echo Running SOURCES gpg...
|
|
# the --yes forces an overwrite of the SHA256SUMS.asc if necessary
|
|
gpg2 --yes --clearsign rpmbuild/SOURCES/SHA256SUMS
|
|
|
|
rpmbuild/SRPMS/SHA256SUMS.asc: rpmbuild/SRPMS/SHA256SUMS
|
|
@echo Running SRPMS gpg...
|
|
gpg2 --yes --clearsign rpmbuild/SRPMS/SHA256SUMS
|
|
|
|
rpmbuild/RPMS/SHA256SUMS.asc: rpmbuild/RPMS/SHA256SUMS
|
|
@echo Running RPMS gpg...
|
|
gpg2 --yes --clearsign rpmbuild/RPMS/SHA256SUMS
|
|
|
|
#
|
|
# upload
|
|
#
|
|
# upload to public server
|
|
upload-sources: rpmbuild/SOURCES/ rpmbuild/SOURCES/SHA256SUMS rpmbuild/SOURCES/SHA256SUMS.asc
|
|
if [ "`cat rpmbuild/SOURCES/SHA256SUMS`" != "`ssh $(SERVER) 'cd $(REMOTE_PATH)/SOURCES/ && cat SHA256SUMS'`" ]; then \
|
|
echo Running SOURCES upload...; \
|
|
rsync -avz rpmbuild/SOURCES/ $(SERVER):$(REMOTE_PATH)/SOURCES/; \
|
|
fi
|
|
|
|
upload-srpms: rpmbuild/SRPMS/ rpmbuild/SRPMS/SHA256SUMS rpmbuild/SRPMS/SHA256SUMS.asc
|
|
if [ "`cat rpmbuild/SRPMS/SHA256SUMS`" != "`ssh $(SERVER) 'cd $(REMOTE_PATH)/SRPMS/ && cat SHA256SUMS'`" ]; then \
|
|
echo Running SRPMS upload...; \
|
|
rsync -avz rpmbuild/SRPMS/ $(SERVER):$(REMOTE_PATH)/SRPMS/; \
|
|
fi
|
|
|
|
upload-rpms: rpmbuild/RPMS/ rpmbuild/RPMS/SHA256SUMS rpmbuild/RPMS/SHA256SUMS.asc
|
|
if [ "`cat rpmbuild/RPMS/SHA256SUMS`" != "`ssh $(SERVER) 'cd $(REMOTE_PATH)/RPMS/ && cat SHA256SUMS'`" ]; then \
|
|
echo Running RPMS upload...; \
|
|
rsync -avz --prune-empty-dirs rpmbuild/RPMS/ $(SERVER):$(REMOTE_PATH)/RPMS/; \
|
|
fi
|
|
|
|
#
|
|
# copr build
|
|
#
|
|
copr: upload-srpms
|
|
./misc/copr-build.py https://$(SERVER)/$(REMOTE_PATH)/SRPMS/$(SRPM_BASE)
|
|
|
|
# vim: ts=8
|