Split scripts into `utils/'.

Add check for file encodings and line terminators.
Use GBK/CRLF for `*.bat'.
This commit is contained in:
Casper Ti. Vector 2012-05-17 21:56:29 +08:00
parent ecb5ffd3d2
commit e77a67d77d
8 changed files with 191 additions and 145 deletions

View File

@ -1,80 +1,19 @@
# vim:ft=make:ts=4:sw=4
TITLE = pkuthss
README = README
MAJORVER = 1.4
MINORVER = alpha2
README = README
TOLF = dos2unix -q
TOCRLF = unix2dos -q
TOGBK = recode UTF-8..GBK
PROJECT = $(TITLE)-$(call VER_GEN,)
DIST_DOC = $(PROJECT)/doc
DOC_UTF8LF = $(DIST_DOC)/utf8lf
DOC_GBKCRLF = $(DIST_DOC)/gbkcrlf
FIND_UTF8 = -name '*utf8*'
NUMDATE = $(shell date '+%Y/%m/%d')
CNDATE = $(shell date '+%Y年%-m月' | \
LANG=zh_CN.UTF-8 sed 'y/0123456789/〇一二三四五六七八九/')
VER_GEN = $(if $(MINORVER),$(MAJORVER)$(1)$(MINORVER),$(MAJORVER))
dist: dist-clean
make dist-dir
make doc-utf8lf
make doc-gbkcrlf
make dist-zip
dist-dir: tex/ doc/
mkdir -p $(DIST_DOC)/
cp -r tex/ $(PROJECT)/
cp -r doc/ $(DOC_UTF8LF)/
mv -f $(DOC_UTF8LF)/license/ $(DIST_DOC)/
cp -r $(DOC_UTF8LF)/ $(DOC_GBKCRLF)/
doc-utf8lf:
cd $(DOC_UTF8LF)/ && make
mv $(DOC_UTF8LF)/$(TITLE).pdf $(PROJECT)/$(README).pdf
cd $(DOC_UTF8LF)/ && make dist-clean
doc-gbkcrlf:
find $(DOC_GBKCRLF) -type f -exec $(TOCRLF) '{}' ';'
find $(DOC_GBKCRLF) -not '(' $(FIND_UTF8) ')' -type f -exec $(TOGBK) '{}' ';'
sed -i 's;\(\\documentclass\[[^][]*\)UTF8\([^][]*\]{pkuthss}\);\1GBK\2;g' \
$(DOC_GBKCRLF)/pkuthss.tex
sed -i 's;\(\.\./tex/pkuthss-\)utf8\(.def\);\1gbk\2;g' \
$(DOC_GBKCRLF)/chap/encl1.tex
dist-zip: $(PROJECT)
zip -rmT $(PROJECT).zip $(PROJECT)/
dist:
utils/dist TITLE=$(TITLE) README=$(README)
dist-clean:
cd doc && make dist-clean && cd -
rm -rf $(PROJECT)/ $(PROJECT).zip
utils/dist TITLE=$(TITLE) README=$(README) dist-clean
maintcheck:
@echo '======================================================================'
@echo '$@: keep GBK and UTF-8 files synchronised'
@echo '======================================================================'
iconv -f GBK tex/pkuthss-gbk.def | diff - tex/pkuthss-utf8.def || true
@echo '======================================================================'
@echo '$@: use "模版" instead of "模板"'
@echo '======================================================================'
grep -r '模板' . || true
@echo '======================================================================'
@echo '$@: remember to update documentation after modifications'
@echo '$@: remember to review `git diff`'
@echo '======================================================================'
qa:
utils/qa
revbump:
sed -i '/\\Provides/,+1 s;\[[^ ]* [^ ]*;[$(NUMDATE) v$(call VER_GEN,-);g' \
tex/*
sed -i '/\\newcommand{\\docversion}/ s;{[^{}]\+}$$;{v$(call VER_GEN, )};g' \
doc/pkuthss.tex
sed -i '/date = / s;{[^{}]\+},$$;{$(CNDATE)},;g' doc/pkuthss.tex
@echo '$@: remember to update the ChangeLog'
@echo '$@: remember to tag the commit'
@echo '$@: remember to use `git push --tags'\'
@echo '$@: remember to add new download on Google Code'
utils/revbump MAJORVER=$(MAJORVER) MINORVER=$(MINORVER)

View File

@ -1,44 +1,44 @@
@rem Copyright (c) 2008-2009 solvethis
@rem Copyright (c) 2010-2012 Casper Ti. Vector
@rem Public domain.
@echo off
set JOBNAME=pkuthss
@rem 这个变量的值可以为 latex 或 pdflatex。
set LATEX=latex
set BIBTEX=bibtex
set GBK2UNI=gbk2uni
set DVIPDF=dvipdfmx
if "%LATEX%"=="latex" (set DODVIPDF=%DVIPDF% %JOBNAME%
) else (set DODVIPDF=echo No need to run %DVIPDF%.)
@rem 用 pdflatex 时可能需要使用 gbk2uni 转换 .out 文件编码以防书签乱码。
if "%LATEX%"=="pdflatex" (@rem set DOGBK2UNI=%GBK2UNI% %JOBNAME%
) else (set DOGBK2UNI=echo No need to run %GBK2UNI%.)
if "%1"=="" goto doc
if "%1"=="doc" goto doc
if "%1"=="clear" (goto clear) else (goto usage)
:doc
cd img
call Make.bat
cd ..
%LATEX% %JOBNAME%
%BIBTEX% %JOBNAME%
%DOGBK2UNI%
%LATEX% %JOBNAME%
%LATEX% %JOBNAME%
%DODVIPDF%
goto end
:clear
del *.log *.aux *.bbl *.blg *.toc *.lof *.lot *.out *.dvi missfont.log chap\*.aux
goto end
:usage
echo %0 [doc] [clear]
goto end
:end
@rem Copyright (c) 2008-2009 solvethis
@rem Copyright (c) 2010-2012 Casper Ti. Vector
@rem Public domain.
@echo off
set JOBNAME=pkuthss
@rem 这个变量的值可以为 latex 或 pdflatex。
set LATEX=latex
set BIBTEX=bibtex
set GBK2UNI=gbk2uni
set DVIPDF=dvipdfmx
if "%LATEX%"=="latex" (set DODVIPDF=%DVIPDF% %JOBNAME%
) else (set DODVIPDF=echo No need to run %DVIPDF%.)
@rem 用 pdflatex 时可能需要使用 gbk2uni 转换 .out 文件编码以防书签乱码。
if "%LATEX%"=="pdflatex" (@rem set DOGBK2UNI=%GBK2UNI% %JOBNAME%
) else (set DOGBK2UNI=echo No need to run %GBK2UNI%.)
if "%1"=="" goto doc
if "%1"=="doc" goto doc
if "%1"=="clear" (goto clear) else (goto usage)
:doc
cd img
call Make.bat
cd ..
%LATEX% %JOBNAME%
%BIBTEX% %JOBNAME%
%DOGBK2UNI%
%LATEX% %JOBNAME%
%LATEX% %JOBNAME%
%DODVIPDF%
goto end
:clear
del *.log *.aux *.bbl *.blg *.toc *.lof *.lot *.out *.dvi missfont.log chap\*.aux
goto end
:usage
echo %0 [doc] [clear]
goto end
:end

View File

@ -48,8 +48,8 @@ doc:
$(DODVIPDF)
clean:
$(RM) $(JOBNAME).log $(JOBNAME).aux $(JOBNAME).bbl $(JOBNAME).blg\
$(JOBNAME).toc $(JOBNAME).lof $(JOBNAME).lot $(JOBNAME).out\
$(RM) $(JOBNAME).log $(JOBNAME).aux $(JOBNAME).bbl $(JOBNAME).blg \
$(JOBNAME).toc $(JOBNAME).lof $(JOBNAME).lot $(JOBNAME).out \
$(JOBNAME).dvi missfont.log
$(RM) chap/*.aux

View File

@ -1,29 +1,29 @@
@rem Copyright (c) 2008-2009 solvethis
@rem Copyright (c) 2010-2012 Casper Ti. Vector
@rem Public domain.
@echo off
set GS=gswin32c
set GSOPTS=-q -dSAFER -dNOPAUSE -dBATCH -sDEVICE=pdfwrite
set WIDTHOPT=-dDEVICEWIDTHPOINTS=
set HEIGHTOPT=-dDEVICEHEIGHTPOINTS=
set OUTPUTOPT=-sOutputFile=
if "%1"=="" goto pdf
if "%1"=="clean" (goto clean) else (goto usage)
:pdf
%GS% %GSOPTS% %WIDTHOPT%400 %HEIGHTOPT%400 %OUTPUTOPT%pkulogo.pdf -f pkulogo.eps
%GS% %GSOPTS% %WIDTHOPT%525 %HEIGHTOPT%150 %OUTPUTOPT%pkuword.pdf -f pkuword.eps
goto end
:clean
del pkulogo.pdf pkuword.pdf
goto end
:usage
echo %0 [pdf] [clean]
:end
@rem Copyright (c) 2008-2009 solvethis
@rem Copyright (c) 2010-2012 Casper Ti. Vector
@rem Public domain.
@echo off
set GS=gswin32c
set GSOPTS=-q -dSAFER -dNOPAUSE -dBATCH -sDEVICE=pdfwrite
set WIDTHOPT=-dDEVICEWIDTHPOINTS=
set HEIGHTOPT=-dDEVICEHEIGHTPOINTS=
set OUTPUTOPT=-sOutputFile=
if "%1"=="" goto pdf
if "%1"=="clean" (goto clean) else (goto usage)
:pdf
%GS% %GSOPTS% %WIDTHOPT%400 %HEIGHTOPT%400 %OUTPUTOPT%pkulogo.pdf -f pkulogo.eps
%GS% %GSOPTS% %WIDTHOPT%525 %HEIGHTOPT%150 %OUTPUTOPT%pkuword.pdf -f pkuword.eps
goto end
:clean
del pkulogo.pdf pkuword.pdf
goto end
:usage
echo %0 [pdf] [clean]
:end

View File

@ -33,5 +33,3 @@ pkuword.pdf: pkuword.eps
clean:
$(RM) pkulogo.pdf pkuword.pdf
.PHONY: clean

46
utils/dist Executable file
View File

@ -0,0 +1,46 @@
#!/usr/bin/make -f
# vim:ts=4:sw=4
MAJORVER = 1.4
MINORVER = alpha2
TOLF = dos2unix -q
TOCRLF = unix2dos -q
TOGBK = recode UTF-8..GBK
VER_GEN = $(if $(MINORVER),$(MAJORVER)$(1)$(MINORVER),$(MAJORVER))
PROJECT = $(TITLE)-$(call VER_GEN,)
DIST_DOC = $(PROJECT)/doc
DOC_UTF8LF = $(DIST_DOC)/utf8lf
DOC_GBKCRLF = $(DIST_DOC)/gbkcrlf
FIND_UTF8 = -name '*utf8*'
dist: dist-clean dist-dir doc-utf8lf doc-gbkcrlf dist-zip
dist-dir: tex/ doc/
mkdir -p $(DIST_DOC)/
cp -r tex/ $(PROJECT)/
cp -r doc/ $(DOC_UTF8LF)/
mv -f $(DOC_UTF8LF)/license/ $(DIST_DOC)/
cp -r $(DOC_UTF8LF)/ $(DOC_GBKCRLF)/
doc-utf8lf:
cd $(DOC_UTF8LF)/ && make
mv $(DOC_UTF8LF)/$(TITLE).pdf $(PROJECT)/$(README).pdf
cd $(DOC_UTF8LF)/ && make dist-clean
doc-gbkcrlf:
find $(DOC_GBKCRLF) -type f -exec $(TOCRLF) '{}' ';'
find $(DOC_GBKCRLF) -not '(' $(FIND_UTF8) ')' -type f -exec $(TOGBK) '{}' ';'
sed -i 's;\(\\documentclass\[[^][]*\)UTF8\([^][]*\]{pkuthss}\);\1GBK\2;g' \
$(DOC_GBKCRLF)/pkuthss.tex
sed -i 's;\(\.\./tex/pkuthss-\)utf8\(.def\);\1gbk\2;g' \
$(DOC_GBKCRLF)/chap/encl1.tex
dist-zip: $(PROJECT)
zip -rmT $(PROJECT).zip $(PROJECT)/
dist-clean:
cd doc && make dist-clean && cd -
rm -rf $(PROJECT)/ $(PROJECT).zip

44
utils/qa Executable file
View File

@ -0,0 +1,44 @@
#!/usr/bin/make -f
# vim:ts=4:sw=4
FIND_GBK = -name '*gbk*' -o -iname '*.bat*'
FIND_CRLF = -name '*.bat*'
FIND_VCS = -type -d -name '.git' -prune
# IGNORE "error"s intentionally.
.IGNORE qa: enc lt sync spell tail
enc:
@echo '======================================================================'
@echo '$@: check file encodings'
@echo '======================================================================'
find . $(FIND_GBK) -type f -exec file '{}' '+' | grep -v GB
find . -not '(' $(FIND_VCS) ')' -not '(' $(FIND_GBK) ')' \
-type f -exec file '{}' '+' | grep GB
lt:
@echo '======================================================================'
@echo '$@: check line terminators'
@echo '======================================================================'
find . $(FIND_CRLF) -type f -exec file '{}' '+' | grep -v CRLF
find . -not '(' $(FIND_VCS) ')' -not '(' $(FIND_CRLF) ')' \
-type f -exec file '{}' '+' | grep CRLF
sync:
@echo '======================================================================'
@echo '$@: keep GBK and UTF-8 files synchronised'
@echo '======================================================================'
iconv -f GBK tex/pkuthss-gbk.def | diff - tex/pkuthss-utf8.def
spell:
@echo '======================================================================'
@echo '$@: use "模版" instead of "模板"'
@echo '======================================================================'
grep -r '模板' .
tail:
@echo '======================================================================'
@echo '$@: remember to update documentation after modifications'
@echo '$@: remember to review `git diff`'
@echo '======================================================================'

19
utils/revbump Executable file
View File

@ -0,0 +1,19 @@
#!/usr/bin/make -f
# vim:ts=4:sw=4
NUMDATE = $(shell date '+%Y/%m/%d')
CNDATE = $(shell date '+%Y年%-m月' | \
LANG=zh_CN.UTF-8 sed 'y/0123456789/〇一二三四五六七八九/')
VER_GEN = $(if $(MINORVER),$(MAJORVER)$(1)$(MINORVER),$(MAJORVER))
revbump:
sed -i '/\\Provides/,+1 s;\[[^ ]* [^ ]*;[$(NUMDATE) v$(call VER_GEN,-);g' \
tex/*
sed -i -e '/date = / s;{[^{}]\+},$$;{$(CNDATE)},;g' \
-e '/\\newcommand{\\docversion}/ s;{[^{}]\+}$$;{v$(call VER_GEN, )};g' \
doc/pkuthss.tex
@echo '$@: remember to update the ChangeLog'
@echo '$@: remember to tag the commit'
@echo '$@: remember to `git push --tags'\'
@echo '$@: remember to add new download on Google Code'