1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
|
SHELL := bash
INSTALL ?= install
# Make sure we have git:
ifeq ($(shell which git),)
$(error 'git' is not installed on this system)
endif
# Set variables:
NAME := git-subrepo
LIB := lib/$(NAME)
DOC := doc/$(NAME).swim
MAN1 := man/man1
EXT := $(LIB).d
EXTS := $(shell find $(EXT) -type f) \
$(shell find $(EXT) -type l)
SHARE = share
# Install variables:
PREFIX ?= /usr/local
INSTALL_BIN ?= $(PREFIX)/bin
INSTALL_LIB ?= $(PREFIX)/share/$(NAME)
INSTALL_EXT ?= $(INSTALL_LIB)/$(NAME).d
INSTALL_MAN1 ?= $(PREFIX)/share/man/man1
LINK_REL_DIR := $(shell bash share/pnrelpath.sh $(INSTALL_BIN) $(INSTALL_LIB))
# Docker variables:
DOCKER_TAG ?= 0.0.6
DOCKER_IMAGE := ingy/bash-testing:$(DOCKER_TAG)
BASH_VERSIONS ?= 5.1 5.0 4.4 4.3 4.2 4.1 4.0
DOCKER_TESTS := $(BASH_VERSIONS:%=docker-test-%)
GIT_VERSIONS := 2.45 2.40 2.30 2.29 2.25 2.17 2.7
prove ?=
test ?= test/
bash ?= 5.1
git ?= 2.45
# Basic targets:
default: help
help:
@echo 'Makefile rules:'
@echo ''
@echo 'test Run all tests'
@echo 'install Install $(NAME)'
@echo 'uninstall Uninstall $(NAME)'
@echo 'env Show environment variables to set'
.PHONY: test
test:
@echo uname: '$(shell uname)'
prove $(prove) $(test)
test-all: test docker-tests
docker-test:
$(call docker-make-test,$(bash),$(git))
docker-tests: $(DOCKER_TESTS)
$(DOCKER_TESTS):
$(call docker-make-test,$(@:docker-test-%=%),$(git))
# Install support:
install:
$(INSTALL) -d -m 0755 $(DESTDIR)$(INSTALL_LIB)/
$(INSTALL) -C -m 0755 $(LIB) $(DESTDIR)$(INSTALL_LIB)/
sed -i 's!^SUBREPO_EXT_DIR=.*!SUBREPO_EXT_DIR=$(INSTALL_EXT)!' $(DESTDIR)$(INSTALL_LIB)/$(NAME)
$(INSTALL) -d -m 0755 $(DESTDIR)$(INSTALL_BIN)
ln -s $(LINK_REL_DIR)/$(NAME) $(DESTDIR)$(INSTALL_BIN)/$(NAME)
$(INSTALL) -d -m 0755 $(DESTDIR)$(INSTALL_EXT)/
$(INSTALL) -C -m 0644 $(EXTS) $(DESTDIR)$(INSTALL_EXT)/
$(INSTALL) -d -m 0755 $(DESTDIR)$(INSTALL_MAN1)/
$(INSTALL) -C -m 0644 $(MAN1)/$(NAME).1 $(DESTDIR)$(INSTALL_MAN1)/
# Uninstall support:
uninstall:
rm -f $(DESTDIR)$(INSTALL_BIN)/$(NAME)
rm -fr $(DESTDIR)$(INSTALL_EXT)
rm -fr $(DESTDIR)$(INSTALL_LIB)
rm -f $(DESTDIR)$(INSTALL_MAN1)/$(NAME).1
env:
@echo "export PATH=\"$$PWD/lib:\$$PATH\""
@echo "export MANPATH=\"$$PWD/man:\$$MANPATH\""
# Doc rules:
.PHONY: doc
update: doc compgen
force:
doc: ReadMe.pod Intro.pod $(MAN1)/$(NAME).1
perl pkg/bin/generate-help-functions.pl $(DOC) > \
$(EXT)/help-functions.bash
ReadMe.pod: $(DOC) force
swim --to=pod --wrap --complete $< > $@
Intro.pod: doc/intro-to-subrepo.swim force
swim --to=pod --wrap --complete $< > $@
$(MAN1)/%.1: doc/%.swim Makefile force
swim --to=man --wrap $< > $@
compgen: force
perl pkg/bin/generate-completion.pl bash $(DOC) $(LIB) > \
$(SHARE)/completion.bash
perl pkg/bin/generate-completion.pl zsh $(DOC) $(LIB) > \
$(SHARE)/zsh-completion/_git-subrepo
clean:
rm -fr tmp test/tmp test/repo .gitconfig
define docker-make-test
docker run --rm \
-v $(PWD):/git-subrepo \
-w /git-subrepo \
$(DOCKER_IMAGE) \
/bin/bash -c ' \
set -x && \
[[ -d /bash-$(1) ]] && \
[[ -d /git-$(2) ]] && \
export PATH=/bash-$(1)/bin:/git-$(2)/bin:$$PATH && \
bash --version && \
git --version && \
make test prove=$(prove) test=$(test) \
'
endef
|