# # 2013 Nico Schottelius (nico-cdist at schottelius.org) # # This file is part of cdist. # # cdist is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # cdist 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 General Public License for more details. # # You should have received a copy of the GNU General Public License # along with cdist. If not, see <http://www.gnu.org/licenses/>. # # # dist = local # release = remote A2XM=a2x -f manpage --no-xmllint -a encoding=UTF-8 A2XH=a2x -f xhtml --no-xmllint -a encoding=UTF-8 helper=./bin/build-helper MANDIR=docs/man SPEECHDIR=docs/speeches TYPEDIR=cdist/conf/type WEBSRCDIR=docs/web WEBDIR=$$HOME/www.nico.schottelius.org WEBBLOG=$(WEBDIR)/blog WEBBASE=$(WEBDIR)/software/cdist WEBPAGE=$(WEBBASE).mdwn CHANGELOG_VERSION=$(shell $(helper) changelog-version) CHANGELOG_FILE=docs/changelog VERSION_FILE=cdist/version.py ################################################################################ # Manpages # MAN1DSTDIR=$(MANDIR)/man1 MAN7DSTDIR=$(MANDIR)/man7 # Manpages #1: Types # Use shell / ls to get complete list - $(TYPEDIR)/*/man.text does not work MANTYPESRC=$(shell ls $(TYPEDIR)/*/man.text) # replace first path component MANTYPEPREFIX=$(subst $(TYPEDIR)/,$(MAN7DSTDIR)/cdist-type,$(MANTYPESRC)) # replace man.text with .7 or .html MANTYPEMAN=$(subst /man.text,.7,$(MANTYPEPREFIX)) MANTYPEHTML=$(subst /man.text,.html,$(MANTYPEPREFIX)) MANTYPEALL=$(MANTYPEMAN) $(MANTYPEHTML) # Link manpage so A2XH does not create man.html but correct named file $(MAN7DSTDIR)/cdist-type%.text: $(TYPEDIR)/%/man.text ln -sf "../../../$^" $@ # Manpages #2: reference MANREF=$(MAN7DSTDIR)/cdist-reference.text MANREFSH=$(MANDIR)/cdist-reference.text.sh MANREFMAN=$(MANREF:.text=.7) MANREFHTML=$(MANREF:.text=.html) MANREFALL=$(MANREFMAN) $(MANREFHTML) $(MANREF): $(MANREFSH) $(MANREFSH) # Manpages #3: static pages MAN1STATIC=$(shell ls $(MAN1DSTDIR)/*.text) MAN7STATIC=$(shell ls $(MAN7DSTDIR)/*.text) MANSTATICMAN=$(MAN1STATIC:.text=.1) $(MAN7STATIC:.text=.7) MANSTATICHTML=$(MAN1STATIC:.text=.html) $(MAN7STATIC:.text=.html) MANSTATICALL=$(MANSTATICMAN) $(MANSTATICHTML) # Manpages #4: generic part # Creating the type manpage %.1 %.7: %.text $(A2XM) $^ # Creating the type html page %.html: %.text $(A2XH) $^ man: $(MANTYPEALL) $(MANREFALL) $(MANSTATICALL) # Manpages #5: release part MANWEBDIR=$(WEBBASE)/man/$(CHANGELOG_VERSION) man-dist: man check-date rm -rf "${MANWEBDIR}" mkdir -p "${MANWEBDIR}/man1" "${MANWEBDIR}/man7" cp ${MAN1DSTDIR}/*.html ${MAN1DSTDIR}/*.css ${MANWEBDIR}/man1 cp ${MAN7DSTDIR}/*.html ${MAN7DSTDIR}/*.css ${MANWEBDIR}/man7 cd ${MANWEBDIR} && git add . && git commit -m "cdist manpages update: $(CHANGELOG_VERSION)" || true man-release: web-release # Fix ikiwiki, which does not like symlinks for pseudo security ssh tee.schottelius.org \ "cd /home/services/www/nico/www.nico.schottelius.org/www/software/cdist/man && rm -f latest && ln -sf "$(CHANGELOG_VERSION)" latest" ################################################################################ # Speeches # SPEECHESOURCES=$(SPEECHDIR)/*.tex SPEECHES=$(SPEECHESOURCES:.tex=.pdf) SPEECHESWEBDIR=$(WEBBASE)/speeches # Create speeches and ensure Toc is up-to-date $(SPEECHDIR)/%.pdf: $(SPEECHDIR)/%.tex pdflatex -output-directory $(SPEECHDIR) $^ pdflatex -output-directory $(SPEECHDIR) $^ pdflatex -output-directory $(SPEECHDIR) $^ speeches: $(SPEECHES) speeches-dist: speeches rm -rf "${SPEECHESWEBDIR}" mkdir -p "${SPEECHESWEBDIR}" cp ${SPEECHES} "${SPEECHESWEBDIR}" cd ${SPEECHESWEBDIR} && git add . && git commit -m "cdist speeches updated" || true ################################################################################ # Website # BLOGFILE=$(WEBBLOG)/cdist-$(CHANGELOG_VERSION)-released.mdwn $(BLOGFILE): $(CHANGELOG_FILE) $(helper) blog $(CHANGELOG_VERSION) $(BLOGFILE) web-blog: $(BLOGFILE) web-doc: # Go to top level, because of cdist.mdwn rsync -av "$(WEBSRCDIR)/" "${WEBBASE}/.." cd "${WEBBASE}/.." && git add cdist* && git commit -m "cdist doc update" cdist* || true web-dist: web-blog web-doc web-release: web-dist man-dist speeches-dist cd "${WEBDIR}" && make pub ################################################################################ # Release: Mailinglist # ML_FILE=.lock-ml # Only send mail once - lock until new changelog things happened $(ML_FILE): $(CHANGELOG_FILE) git-release web-release $(helper) ml-release $(CHANGELOG_VERSION) touch $@ ml-release: $(ML_FILE) ################################################################################ # Release: Freecode # FREECODE_FILE=.lock-freecode $(FREECODE_FILE): $(CHANGELOG_FILE) $(helper) freecode-release $(CHANGELOG_VERSION) touch $@ freecode-release: $(FREECODE_FILE) ################################################################################ # git and git dependent stuff # GIT_TAG_FILE=.git/refs/tags/$(CHANGELOG_VERSION) GIT_SRC_BRANCH=master GIT_DST_BRANCH=$(shell echo $(CHANGELOG_VERSION) | cut -d. -f '1,2') GIT_CURRENT=.git-current-branch git-tag: $(GIT_TAG_FILE) $(GIT_TAG_FILE): @printf "Enter tag description for $(CHANGELOG_VERSION)> " @read tagmessage; git tag "$(CHANGELOG_VERSION)" -m "$$tagmessage" git-branch-merge: git-checkout-stable git merge "$(CHANGELOG_VERSION)" git-checkout-stable: git-tag @git rev-parse --abbrev-ref HEAD > $(GIT_CURRENT) @git checkout "$(GIT_DST_BRANCH)" git-checkout-current: git checkout "$$(cat $(GIT_CURRENT))" $(VERSION_FILE): .git/refs/heads/* .git/refs/tags/* .git/HEAD echo "VERSION = \"$$(git describe)\"" > $@ git-release: git-tag make git-branch-merge make git-checkout-current make pub ################################################################################ # pypi # PYPI_FILE=.lock-pypi pypi-release: $(PYPI_FILE) $(PYPI_FILE): man $(VERSION_FILE) python3 setup.py sdist upload touch $@ ################################################################################ # archlinux # ARCHLINUX_FILE=.lock-archlinux ARCHLINUXTAR=cdist-$(CHANGELOG_VERSION)-1.src.tar.gz $(ARCHLINUXTAR): PKGBUILD pypi-release makepkg -c --source PKGBUILD: PKGBUILD.in $(VERSION_FILE) ./PKGBUILD.in $(CHANGELOG_VERSION) $(ARCHLINUX_FILE): $(ARCHLINUXTAR) $(VERSION_FILE) burp -c system $(ARCHLINUXTAR) touch $@ archlinux-release: $(ARCHLINUX_FILE) ################################################################################ # Release # CHECKS=check-date check-unittest check-unittest: $(VERSION_FILE) RELEASE=speeches-dist web-release RELEASE+=ml-release freecode-release RELEASE+=man-dist pypi-release git-release RELEASE+=archlinux-release release: $(CHECKS) $(RELEASE) #release: | $(CHECKS) man speeches echo "Manual steps: linkedin, twitter" # Code that is better handled in a shell script check-%: $(helper) $@ ################################################################################ # Cleanup # clean: rm -f $(MAN7DSTDIR)/cdist-reference.text find "$(MANDIR)" -mindepth 2 -type l \ -o -name "*.1" \ -o -name "*.7" \ -o -name "*.html" \ -o -name "*.xml" \ | xargs rm -f find * -name __pycache__ | xargs rm -rf distclean: clean rm -f cdist/version.py MANIFEST PKGBUILD rm -rf dist/ # Archlinux rm -f cdist-*.pkg.tar.xz cdist-*.tar.gz rm -rf pkg/ src/ ################################################################################ # Misc # # The pub is Nico's "push to all git remotes" way ("make pub") pub: for remote in "" github sf; do \ echo "Pushing to $$remote"; \ git push --mirror $$remote; \ done test: $(helper) $@