ADMIN=pegzmasta
AUTHOR="Michael Pagan"
NAME=genshiken
PROJ=Genshiken
VERSION=0.5.2
HOMEPAGE=http://www.nongnu.org/$(NAME)
SAVANNAH=savannah.nongnu.org
SOURCES=cvs.$(SAVANNAH):/sources
WEB=cvs.$(SAVANNAH):/web
RELEASES=dl.sv.nongnu.org
FEED=https://$(SAVANNAH)/news/atom.php?group=$(NAME)
LATEST_VERSION=$(shell lynx -source $(FEED) | sed -n "1,/<title>Announcing $(PROJ)/ s/.*[ ]\([0-9]\.[0-9].*\)<.*/\1/p")
LATEST_TARBALL=http://download-mirror.$(SAVANNAH)/releases/$(NAME)/$(NAME)-$(LATEST_VERSION).tar.gz
GPL=http://www.gnu.org/licenses/gpl.txt
FDL=http://www.gnu.org/licenses/fdl.txt
PREFIX ?= /usr/local
CVSROOT := $(shell echo $${CVSROOT:-$${PWD}/..})
BASH_COMP := $(shell echo $$BASH_COMPLETION_COMPAT_DIR | grep $(PREFIX)/etc/bash_completion.d/)
SUDO_USER := $(shell echo ~ | gawk -F/ '{ print $$3 }')
COPYRIGHT_CMD := "sed -n '/\*.*etc$$/,$$ p' TODO"
DIRS=etc lib bin sbin share
INSTALL_DIRS := `find $(DIRS) -type d 2> /dev/null`
INSTALL_FILES := `find $(DIRS) -type f 2> /dev/null`
PKG_NAME=$(NAME)-$(VERSION)
PKG_DIR=$(CVSROOT)/$(NAME)
PKG=$(CVSROOT)/$(PKG_NAME).tar.gz
SIG=$(PKG).sig
checkout-soft:
export CVS_RSH=ssh
cvs -z3 -d:ext:$(ADMIN)@$(SOURCES)/$(NAME) co -P $(NAME)
checkout-web:
export CVS_RSH=ssh
cvs -z3 -d:ext:$(ADMIN)@$(WEB)/$(NAME) co -P $(NAME)
endprog: $(PKG_DIR)/ChangeLog
cp $(shell find . -maxdepth 1 -name '[ACMNTn]*' -type f -print | sed 's_./__') $(CVSROOT)
cp $(PKG_DIR)/share/doc/$(NAME)/HACKING $(CVSROOT)
cp $(PKG_DIR)/share/doc/$(NAME)/readme.org $(CVSROOT)
cp $(PKG_DIR)/share/doc/$(NAME)/manual.org $(CVSROOT)
rm $(CVSROOT)/COPYING*
if [ -d $(PKG_DIR)/share/icons/hicolor/128x128/apps ]; then cp $(PKG_DIR)/share/icons/hicolor/128x128/apps/*png $(CVSROOT); fi
if [ -d $(PKG_DIR)/share/icons/hicolor/512x512/apps ]; then cp $(PKG_DIR)/share/icons/hicolor/512x512/apps/*png $(CVSROOT); fi
if [ -f $(PKG_DIR)/share/man/man1/$(NAME).1 ]; then cp $(PKG_DIR)/share/man/man1/$(NAME).1 $(CVSROOT); fi
if [ -d $(PKG_DIR) ]; then cvs release -d $(PKG_DIR); fi
fontify:
sed -i 's/#+STARTUP: content/#+STARTUP: showeverything/' NEWS
sed -i 's/#+STARTUP: showall/#+STARTUP: showeverything/' readme.org
sed -i 's/#+STARTUP: overview/#+STARTUP: showeverything/' HACKING
emacs --eval "(htmlize-file \"readme.org\")" --eval "(htmlize-file \"HACKING\")" --eval "(htmlize-file \"NEWS\")" --eval "(htmlize-file \"TODO\")" --eval "(htmlize-file \"Makefile\")" --eval "(htmlize-file \"ChangeLog\")" --eval "(htmlize-file \"manual.org\")" --eval "(htmlize-file \"news-maker.sh\")" -f save-buffers-kill-terminal
rename 's/\.html$$/\.org.html/' *.html
mv manual.org.org.html manual.org.html
mv readme.*html index.org.html
mv MANIFEST.org.html MANIFEST.html
htmlize:
# sed -i 's_\[\[file:.*/icons.*using-$(NAME)-big.png\]\]_\[\[file:img/using-$(NAME)-big.png\]\]_' readme.org
sed -i 's_\[\[file:.*/icons.*sos-gear.png\]\]_\[\[file:img/sos-gear.png\]\]_' readme.org
sed -i 's_\[\[file:.*/icons.*\]\]_\[\[file:img/sos-gear.png\]\]_' HACKING
# sed -i -e 's/\([^<]\)mailing-list\([^>]\)/\1mailing list\2/g' -e 's/<*\(mailing\)-\(list\)>*/\1 \2/' HACKING
sed -i -e 's/<*\(project member\)>*/\1/' HACKING
sed -i -e 's/<*\(the main purpose\)>*/\1/' HACKING
# sed -i 's/\[\[#savannah\]\[\([A-Za-z ]*\)\]\]/+\1+/g' HACKING
sed -i 's/\[\[#free-software\]\[\([A-Za-z ]*\)\]\]/+\1+/g' HACKING
sed -i "s/\[\[Get access to the $(PROJ) Repository\]\[\([A-Za-z ]*\)\]\]/+\1+/g" HACKING
# sed -i 's/\[\[%[^ ]*\]\[\([A-Za-z ]*\)\]\]/+\1+/g' HACKING
sed -i 's/\[\[%[^ ]*\]\[\([a-z ]*.\-[^ ]*\)\]\]/+\1+/g' HACKING
# sed -i '/\* License Notice/,$$ d' HACKING
sed -i "/This file is part of \*$(PROJ)\*./ d" readme.org
# sed -i 's/file:COPYING/GPL/' readme.org
sed -i 's/file:manual.org/file:manual.org.html/' readme.org
sed -i 's/=manual.html=/\[\[file:manual.html\]\[manual.html\]\]/' readme.org
sed -i 's/gpl.txt/gpl.html/' readme.org
sed -i 's/file:COPYING.manual/FDL/' HACKING
sed -i 's/fdl.txt/fdl.html/' HACKING
sed -i 's/\[free-software\]/\[file:what-is-fs-new.pdf\]/' HACKING
sed -i 's/file:readme.org/file:index.html/' HACKING
sed -i 's|file:index.html::Contact Information|$(HOMEPAGE)/$(NAME)/#orgheadline30|' HACKING
sed -i 's|file:index.html::License Notice|$(HOMEPAGE)/$(NAME)/#orgheadline33|' HACKING
sed -i 's/file:HACKING/file:HACKING.html/' readme.org
sed -i 's|file:HACKING.html::the%20main%20purpose|$(HOMEPAGE)/$(NAME)/HACKING.html#orgheadline3|' readme.org
sed -i 's/file:ChangeLog/file:ChangeLog.org.html/' HACKING
sed -i 's/file:ChangeLog/file:ChangeLog.org.html/' readme.org
sed -i 's/file:Makefile/file:Makefile.org.html/g' HACKING
sed -i 's/file:Makefile/file:Makefile.org.html/g' readme.org
sed -i 's/=MANIFEST.html=/\[\[file:MANIFEST.html\]\[the MANIFEST\]\]/' readme.org
sed -i 's/file:NEWS/file:NEWS.html/g' HACKING
sed -i 's/file:NEWS/file:NEWS.html/g' readme.org
sed -i 's/file:TODO/file:TODO.html/g' HACKING
sed -i 's/file:news-maker.sh/file:news-maker.sh.org.html/g' HACKING
# sed -i 's|man:man|http://man.he.net/?topic=man\§ion=all|g' HACKING
sed -i 's|man:bash|http://man.he.net/?topic=bash\§ion=all|g' HACKING
sed -i 's|man:gawk|http://man.he.net/?topic=gawk\§ion=all|g' HACKING
sed -i 's|man:cvs2cl|http://man.cx/cvs2cl%281%29|' HACKING
sed -i 's/man:$(NAME)/file:manual.html/g' HACKING
sed -i 's|info:sed|https://www.gnu.org/software/sed/manual/html_node/index.html|' HACKING
sed -i 's|info:cvs|https://web.archive.org/web/20140209043007/http://ximbiot.com/cvs/manual/cvs-1.12.13/cvs.html|' HACKING
sed -i 's|info:grep|https://www.gnu.org/software/grep/manual/html_node/index.html|' HACKING
sed -i 's|info:coreutils|https://www.gnu.org/software/coreutils/manual/html_node/index.html|' HACKING
sed -i -e 's|info:standards|https://www.gnu.org/prep/standards/html_node/|g' -e 's|\(html_node/\)#\([^ ]*\)\(\]\[\)|\1\2#\2\3|g' -e '/standards/ { s/\([A-Za-z]\)-\([A-Za-z]\)/\1_002d\2/g }' -e '/standards/ { s/%20/-/g }' HACKING
sed -i -e 's|info:maintain|https://www.gnu.org/prep/maintain/html_node/|g' -e 's|\(html_node/\)#\([^ ]*\)\(\]\[\)|\1\2#\2\3|g' -e '/maintain/ { s/\([A-Za-z]\)-\([A-Za-z]\)/\1_002d\2/g }' -e '/maintain/ { s/%20/-/g }' HACKING
sed -i -e 's|info:org|http://orgmode.org/manual/index.html|' -e 's|\(manual/\)index\(.html\)#\([^ ]*\)\(\]\[\)|\1\3\2#\3\4|g' -e '/orgmode.org.manual/ { s/\([A-Za-z]\)-\([A-Za-z]\)/\1_002d\2/g }' -e '/orgmode.org.manual/ { s/%20/-/g }' HACKING
sed -i 's|(\(https://www.gnu.org/prep/standards/html_node/\) |(\[\[\1\]\[standards\]\] |' HACKING
sed -i 's| \(https://www.gnu.org/prep/maintain/html_node/\))| \[\[\1\]\[maintain\]\])|' HACKING
# emacs --eval "(kill-this-buffer)" --visit readme.org HACKING NEWS TODO manual.org --eval "(switch-to-buffer \"readme.org\")" --eval "(org-html-export-to-html)" --eval "(switch-to-buffer \"HACKING\")" --eval "(org-html-export-to-html)" --eval "(switch-to-buffer \"NEWS\")" --eval "(org-html-export-to-html)" --eval "(switch-to-buffer \"TODO\")" --eval "(org-html-export-to-html)" --eval "(switch-to-buffer \"manual.org\")" --eval "(org-html-export-to-html)" -f save-buffers-kill-terminal
# sed -i '/CDATA/,$$ { /function CodeHighlightOn/ s|.*| function rpl(expr,a,b)\n \{\n var i=0\n while (i!=-1)\n \{\n i=expr.indexOf(a,i);\n if (i>=0)\n \{\n expr=expr.substring(0,i)+b+expr.substring(i+a.length);\n i+=b.length;\n \}\n \}\n return expr\n \}\n function show_org_source()\n \{\n document.location.href = rpl(document.location.href,"html","org.html");\n \}\n&| }' NEWS.html
sed -i '/CDATA/,$$ { /function CodeHighlightOn/ s|.*| function rpl(expr,a,b)\n \{\n var i=0\n while (i!=-1)\n \{\n i=expr.indexOf(a,i);\n if (i>=0)\n \{\n expr=expr.substring(0,i)+b+expr.substring(i+a.length);\n i+=b.length;\n \}\n \}\n return expr\n \}\n function show_org_source()\n \{\n document.location.href = rpl(document.location.href,"html","org.html");\n \}\n&| }' TODO.html
# groffer --local-file $(NAME).1 --html --html-viewer='lynx -source' > manual.html
# mv readme.*html index.html
# mv *.html $(PKG_DIR)
mv AUTHORS $(PKG_DIR)
mv Makefile $(PKG_DIR)
# rm ChangeLog
find . -maxdepth 1 -name '[HMNrTgmn]*' -type f -print | xargs rm
set-img:
mkdir -p $(PKG_DIR)/img
mv $(CVSROOT)/*png $(PKG_DIR)/img
web-repository:
make endprog && cd .. && make checkout-web && make fontify && make htmlize && cd $(PKG_DIR) && make set-img && cvs update && cvs commit
remove-old-docs:
if [ -f $(PKG_DIR)/COPYING -o -f $(PKG_DIR)/COPYING.manual ]; then rm $(PKG_DIR)/COPYING*; fi
if [ -f $(PKG_DIR)/NEWS ]; then rm $(PKG_DIR)/NEWS; fi
org-export-info:
[ ! -f $(PKG_DIR)/share/doc/readme.org ] && mv $(PKG_DIR)/share/doc/$(NAME)/readme.org $(PKG_DIR)/share/doc/ || :
cp $(PKG_DIR)/share/doc/readme.org readme.org
sed -i -e 's/\([^A-Za-z]\)_\([A-Za-z ][A-Za-z ]*\)_\([^A-Za-z]\)/\1\2\3/' -e 's/([0-9])//' readme.org
sed -i 's_\.\./\.\._share_' readme.org
sed -i 's_file:\($(NAME)-example-session.html\)_$(HOMEPAGE)/\1_' readme.org
# sed -i '/Last modified on/,/Code blocks are licensed/ d' readme.org
org-export-text:
[ ! -f $(PKG_DIR)/share/doc/readme.org ] && mv $(PKG_DIR)/share/doc/$(NAME)/readme.org $(PKG_DIR)/share/doc/ || :
cp $(PKG_DIR)/share/doc/readme.org readme.org
sed -i 's/:://' readme.org
sed -i 's_\.\./\.\._share_' readme.org
sed -i 's_file:\($(NAME)-example-session.html\)_$(HOMEPAGE)/\1_' readme.org
# sed -i '/Last modified on/,/Code blocks are licensed/ d' readme.org
$(PKG_DIR)/COPYING:
wget -O $(PKG_DIR)/COPYING $(GPL)
$(PKG_DIR)/COPYING.manual:
wget -O $(PKG_DIR)/COPYING.manual $(FDL)
license: remove-old-docs $(PKG_DIR)/COPYING $(PKG_DIR)/COPYING.manual
cp --preserve $(PKG_DIR)/COPY* $(PKG_DIR)/share/doc/$(NAME)
$(PKG_DIR)/NEWS:
cd $(PKG_DIR); ./news-maker.sh $(PROJ) $(AUTHOR) $(COPYRIGHT_CMD) --add-comments
$(PKG_DIR)/ChangeLog:
cd $(PKG_DIR); cvs2cl --usermap AUTHORS
cd $(PKG_DIR); eval 'sed -i "/\*[ ]*\$$/ { N; s/\n\t[ ]// }" ChangeLog'
cd $(PKG_DIR); eval $(COPYRIGHT_CMD) >> ChangeLog; sed -i '/^\* etc.*/,+2 d' ChangeLog
tac ChangeLog | sed '1,3 d' | tac > ChangeLog.1; mv ChangeLog.1 ChangeLog
tarball: license $(PKG_DIR)/NEWS $(PKG_DIR)/ChangeLog
cp --preserve $(PKG_DIR)/[AHNRTm]* $(PKG_DIR)/share/doc/$(NAME)
cp --preserve ChangeLog $(PKG_DIR)/share/doc/$(NAME)
# sed -i "s_VERSION=.*_VERSION=$(VERSION)_" $(PKG_DIR)/share/$(NAME)/$(NAME)-main.sh
cd $(CVSROOT); tar --exclude=CVS -czvf $(PKG) $(NAME)/*
$(PKG):
if [ ! -d $(PKG_DIR) ]; then make checkout-soft; fi
make tarball
build: $(PKG)
$(SIG):
gpg -b --use-agent $(PKG)
sign: $(SIG)
clean:
rm -f $(PKG) $(SIG) $(PKG_DIR)/ChangeLog $(PKG_DIR)/share/doc/$(NAME)/ChangeLog *~ 2> /dev/null
all: $(PKG) $(SIG)
test:
release: $(PKG) $(SIG)
scp $(PKG) $(SIG) $(ADMIN)@$(RELEASES):/releases/$(NAME)
make clean
grab-pkg:
if [ -d $(PKG_DIR) ]; then cd $(PKG_DIR)/..; else cd ..; fi; wget $(LATEST_TARBALL)
if [ -d $(PKG_DIR) ]; then cd $(PKG_DIR)/..; else cd ..; fi; wget $(LATEST_TARBALL).sig
if [ -d $(PKG_DIR) ]; then cd $(PKG_DIR); fi; gpg --verify ../$(PKG_NAME).tar.gz.sig
new-config:
mkdir -p ~/.config/$(NAME)-$(SUDO_USER)
echo '--colorize=dark' > ~/.config/$(NAME)-$(SUDO_USER)/config
echo '--impatient=1' >> ~/.config/$(NAME)-$(SUDO_USER)/config
remove-config:
rm -r ~/.config/$(NAME)-*/*
rmdir ~/.config/$(NAME)-*/
install:
sed -i "s_^main=.*_main=$(PREFIX)/share/$(NAME)/$(NAME)-main.sh_" bin/$(NAME)
sed -i "s_^doc=.*_doc=$(PREFIX)/share/doc/$(NAME)_" share/$(NAME)/$(NAME)-main.sh
sed -i "s_^readonly PROGNAME=.*_readonly PROGNAME=$(PROJ)_" share/$(NAME)/$(NAME)-main.sh
sed -i "s_^readonly VERSION=.*_readonly VERSION=$(VERSION)_" share/$(NAME)/$(NAME)-main.sh
sed -i "s_^functions=.*_functions=$(PREFIX)/share/$(NAME)/functions/*_" share/$(NAME)/$(NAME)-main.sh
# sed -i "s:^Icon=.*:Icon=$(PREFIX)/share/icons/hicolor/128x128/apps/using-gnu.svg:" share/applications/$(NAME)-anime.desktop
sed -i "s:^Icon=.*:Icon=$(PREFIX)/share/icons/hicolor/128x128/apps/sos-gear.svg:" share/applications/$(NAME)-manual.desktop
for dir in $(INSTALL_DIRS); do mkdir -p $(PREFIX)/$$dir; done
for file in $(INSTALL_FILES); do cp $$file $(PREFIX)/$$file; done
sed -i -e "s/USER/$(SUDO_USER)/g" -e "s_HOME/_$$HOME/_g" -e "s/$(NAME).1/$(NAME).1.gz/" $(PREFIX)/share/man/man1/$(NAME).1
if [ -z $(BASH_COMP) ]; then cp $(PREFIX)/etc/bash_completion.d/$(NAME).bash-completion /etc/bash_completion.d/; fi
gzip $(PREFIX)/share/man/man1/$(NAME).1
uninstall:
for file in $(INSTALL_FILES); do rm -f $(PREFIX)/$$file; done
for dir in $(INSTALL_DIRS); do echo $(PREFIX)/$$dir | grep ".*$(NAME).*" | xargs rm -rf; done
if [ -f $(PREFIX)/share/man/man1/$(NAME).1.gz ]; then rm $(PREFIX)/share/man/man1/$(NAME).1.gz; fi
if [ -f /etc/bash_completion.d/$(NAME).bash-completion ]; then rm /etc/bash_completion.d/$(NAME).bash-completion; fi
.PHONY: all build checkout-soft checkout-web clean endprog fontify grab-pkg htmlize install license new-config org-export-readme release remove-config remove-old-docs set-img sign tarball test uninstall web-repository