1SHELL ?= sh 2PREFIX ?= /usr/local 3 4CRAM_OPTS ?= -v 5 6PROJECT ?= $(CURDIR) 7BIN ?= ${PROJECT}/bin 8SRC ?= ${PROJECT}/src 9TESTS ?= ${PROJECT}/tests 10TOOLS ?= ${PROJECT}/tools 11TEST ?= ${PROJECT}/tests 12 13ZSH_VERSION ?= zsh-5.3 14CONTAINER_ROOT ?= /antigen 15USE_CONTAINER ?= docker 16CONTAINER_IMAGE ?= desyncr/zsh-docker- 17 18TARGET ?= ${BIN}/antigen.zsh 19SRC ?= ${SRC} 20EXTENSIONS ?= 21GLOB ?= 22 23WITH_DEBUG ?= yes 24WITH_EXTENSIONS ?= yes 25WITH_DEFER ?= yes 26WITH_LOCK ?= yes 27WITH_PARALLEL ?= yes 28WITH_CACHE ?= yes 29WITH_COMPLETION ?= yes 30 31ifeq (${WITH_EXTENSIONS}, yes) 32EXTENSIONS += ${SRC}/ext/ext.zsh 33endif 34ifeq (${WITH_DEFER}, yes) 35EXTENSIONS += ${SRC}/ext/defer.zsh 36endif 37ifeq (${WITH_LOCK}, yes) 38EXTENSIONS += ${SRC}/ext/lock.zsh 39endif 40ifeq (${WITH_PARALLEL}, yes) 41EXTENSIONS += ${SRC}/ext/parallel.zsh 42endif 43ifeq (${WITH_CACHE}, yes) 44GLOB += ${SRC}/boot.zsh 45EXTENSIONS += ${SRC}/ext/cache.zsh 46endif 47 48LIB = $(filter-out ${SRC}/lib/log.zsh,$(sort $(wildcard ${PWD}/src/lib/*.zsh))) 49HELPERS = $(sort $(wildcard ${PWD}/src/helpers/*.zsh)) 50COMMANDS= $(sort $(wildcard ${PWD}/src/commands/*.zsh)) 51GLOB += ${SRC}/antigen.zsh ${HELPERS} ${LIB} ${COMMANDS} ${EXTENSIONS} 52 53ifeq (${WITH_COMPLETION}, yes) 54GLOB += ${SRC}/_antigen 55endif 56# If debug is enabled then load debug functions 57ifeq (${WITH_DEBUG}, yes) 58GLOB += ${SRC}/lib/log.zsh 59endif 60 61VERSION ?= develop 62VERSION_FILE = ${PROJECT}/VERSION 63 64BANNER_SEP =$(shell printf '%*s' 70 | tr ' ' '\#') 65BANNER_TEXT =This file was autogenerated by \`make\`. Do not edit it directly! 66BANNER =${BANNER_SEP}\n\# ${BANNER_TEXT}\n${BANNER_SEP}\n 67 68HEADER_TEXT =\# Antigen: A simple plugin manager for zsh\n\ 69\# Authors: Shrikant Sharat Kandula\n\ 70\# and Contributors <https://github.com/zsh-users/antigen/contributors>\n\ 71\# Homepage: http://antigen.sharats.me\n\ 72\# License: MIT License <mitl.sharats.me>\n 73 74define ised 75 sed $(1) $(2) > "$(2).1" 76 mv "$(2).1" "$(2)" 77endef 78 79define isede 80 sed -E $(1) $(2) > "$(2).1" 81 mv "$(2).1" "$(2)" 82endef 83 84.PHONY: itests tests install all 85 86build: 87 @echo Building Antigen... 88 @printf "${BANNER}" > ${BIN}/antigen.zsh 89 @printf "${HEADER_TEXT}" >> ${BIN}/antigen.zsh 90 @for src in ${GLOB}; do echo "----> $$src"; cat "$$src" >> ${TARGET}; done 91 @echo "-antigen-env-setup" >> ${TARGET} 92 @echo "${VERSION}" > ${VERSION_FILE} 93 @$(call ised,"s/{{ANTIGEN_VERSION}}/$$(cat ${VERSION_FILE})/",${TARGET}) 94 @$(call ised,"s/{{ANTIGEN_REVISION}}/$$(git log -n1 --format=%h -- src)/",${TARGET}) 95 @$(call ised,"s/{{ANTIGEN_REVISION_DATE}}/$$(git log -n1 --format='%ai' -- src)/",${TARGET}) 96ifeq (${WITH_DEBUG}, no) 97 @$(call isede,"s/ (WARN|LOG|ERR|TRACE) .*&//",${TARGET}) 98 @$(call isede,"/ (WARN|LOG|ERR|TRACE) .*/d",${TARGET}) 99endif 100 @echo Done. 101 @ls -sh ${TARGET} 102 103release: 104 # Move to release branch 105 git checkout develop 106 git checkout -b release/${VERSION} 107 # Run build and tests 108 ${MAKE} build tests 109 # Update changelog 110 ${EDITOR} CHANGELOG.md 111 # Build release commit 112 git add CHANGELOG.md README.mkd ${VERSION_FILE} 113 git commit -S -m "Update changelog for ${VERSION}" 114 # Update binary artifact 115 git add ${TARGET} 116 git commit -S -m "Build release ${VERSION}" 117 118publish: 119 git push origin release/${VERSION} 120 # Merge release branch into develop before deploying 121 122deploy: 123 git checkout develop 124 git tag -m "Build release ${VERSION}" -s ${VERSION} 125 git archive --output=${VERSION}.tar.gz --prefix=antigen-$$(echo ${VERSION}|sed s/v//)/ ${VERSION} 126 zcat ${VERSION}.tar.gz | gpg --armor --detach-sign >${VERSION}.tar.gz.sign 127 # Verify signature 128 zcat ${VERSION}.tar.gz | gpg --verify ${VERSION}.tar.gz.sign - 129 # Push upstream 130 git push upstream ${VERSION} 131 132.container: 133ifeq (${USE_CONTAINER}, docker) 134 @docker run --rm --privileged=true -it -v ${PROJECT}:/antigen ${CONTAINER_IMAGE}${ZSH_VERSION} $(shell echo "${COMMAND}" | sed "s|${PROJECT}|${CONTAINER_ROOT}|g") 135else ifeq (${USE_CONTAINER}, no) 136 ${COMMAND} 137endif 138 139info: 140 @${MAKE} .container COMMAND="sh -c 'cat ${PROJECT}/VERSION; zsh --version; git --version; env'" 141 142itests: 143 @${MAKE} tests CRAM_OPTS=-i 144 145tests: 146 @${MAKE} .container COMMAND="sh -c 'ZDOTDIR=${TESTS} ANTIGEN=${PROJECT} cram ${CRAM_OPTS} --shell=zsh ${TEST}'" 147 148stats: 149 @${MAKE} .container COMMAND="${TOOLS}/stats --zsh zsh --antigen ${PROJECT}" 150 151install: 152 mkdir -p ${PREFIX}/share && cp ${TARGET} ${PREFIX}/share/antigen.zsh 153 154clean: 155 rm -f ${PREFIX}/share/antigen.zsh 156 157install-deps: 158 sudo pip install cram=='0.6.*' 159 160all: clean build install 161