• R/O
  • SSH
  • HTTPS

tsukurimashou: Commit


Commit MetaInfo

Revision734 (tree)
Time2021-07-01 01:45:13
Authormskala

Log Message

final edits for release

Change Summary

Incremental Difference

--- trunk/COPYING (revision 733)
+++ trunk/COPYING (revision 734)
@@ -31,11 +31,13 @@
3131 You should have received a copy of the GNU General Public License along
3232 with this program. If not, see <http://www.gnu.org/licenses/>.
3333
34-The IDSgrep program (not included in standard distributions of
35-Tsukurimashou, but available from the same source-control repositories) is
36-covered by the above notice except without the font-embedding exception,
37-which would be irrelevant to IDSgrep.
34+The IDSgrep program is covered by the above notice except without the
35+font-embedding exception, which would be irrelevant to IDSgrep.
3836
37+FontAnvil when considered by itself, instead of as part of the aggregate of
38+the Tsukurimashou Project, is covered by GNU GPL, version 3, "or any later
39+version."
40+
3941 The files mp/fntbase.mp and tools/mp2pf, which are modified versions of code
4042 from the METATYPE1 package, are public domain with the following notices:
4143
@@ -239,4 +241,3 @@
239241
240242 1.5 and later versions contain changes by, and are maintained by,
241243 Eddie Kohler <ekohler@gmail.com>.
242-
--- trunk/Makefile.am (revision 733)
+++ trunk/Makefile.am (revision 734)
@@ -67,7 +67,7 @@
6767
6868 # SILENT BUILD BLINKENLIGHTS
6969
70-TSU_V_REDIR=$(if $(AM_V_at),>& /dev/null)
70+TSU_V_REDIR=$(if $(AM_V_at),> /dev/null 2>&1)
7171
7272 if COND_COLOUR
7373 escchar:=$(strip $(shell echo x | tr 'x' '\033'))
@@ -984,7 +984,7 @@
984984
985985 doc_font_script := '$(PERL)' -CSD -e \
986986 'while (<>) { chomp; while (/%\s*$$/) { $$_.=<>; chomp; } if (\
987- /(newfontfamily|newfontface|setmainfont|setmonofont).*\{([^{}]+)\}+\s*$$/\
987+ /(fontspec|newfontfamily|newfontface|setmainfont|setmonofont).*\{([^{}]+)\}+\s*$$/\
988988 ) { $$d{"otf/$$2.otf"}=1; } if (/ItalicFont=\{([^{}]+)\}/) {\
989989 $$d{"otf/$$1.otf"}=1; } } print join(" ",keys %d);'
990990 filter_demo_deps = $(filter $(strip $(foreach st,$(SHORT_STYLES), \
@@ -1047,7 +1047,7 @@
10471047 echo >> makefile-pdf.inc ; \
10481048 done
10491049
1050-doc/usermanual.xdv: $(dist_otf_DATA)
1050+doc/usermanual.xdv: $(dist_otf_DATA) $(otf_DATA)
10511051
10521052 nocomma_date:=$(subst $(comma),,@release_date@)
10531053 doc/version.tex: hamlog/config.hl
--- trunk/beikaitoru/Makefile.am (revision 733)
+++ trunk/beikaitoru/Makefile.am (revision 734)
@@ -61,7 +61,7 @@
6161
6262 # SILENT BUILD BLINKENLIGHTS
6363
64-TSU_V_REDIR=$(if $(AM_V_at),>& /dev/null)
64+TSU_V_REDIR=$(if $(AM_V_at),> /dev/null 2>&1)
6565
6666 if COND_COLOUR
6767 escchar:=$(strip $(shell echo x | tr 'x' '\033'))
--- trunk/beikaitoru/configure.ac (revision 733)
+++ trunk/beikaitoru/configure.ac (revision 734)
@@ -206,9 +206,9 @@
206206 parallel-tests silent-rules])
207207 AC_CONFIG_SRCDIR([subfont.mp])
208208 AC_CONFIG_MACRO_DIR([m4])
209-AC_REVISION([$Id: configure.ac 8755 2021-04-06 02:23:52Z mskala $])
210-AC_COPYRIGHT([Copyright (C) 2013 Matthew Skala])
211-AC_SUBST([release_date],["March 7, 2013"])
209+AC_REVISION([$Id: configure.ac 9071 2021-06-27 03:00:17Z mskala $])
210+AC_COPYRIGHT([Copyright (C) 2013, 2021 Matthew Skala])
211+AC_SUBST([release_date],["July 1, 2021"])
212212 # this must be early so it will happen before depfiles
213213 TSU_FIX_MAKEFILE
214214 AM_SILENT_RULES
--- trunk/configure.ac (revision 733)
+++ trunk/configure.ac (revision 734)
@@ -200,9 +200,9 @@
200200 AC_CONFIG_SRCDIR([hamlog/hamlog])
201201 AC_CONFIG_HEADERS([config.h])
202202 AC_CONFIG_MACRO_DIR([m4])
203-AC_REVISION([$Id: configure.ac 8799 2021-04-24 14:18:02Z mskala $])
204-AC_COPYRIGHT([Copyright (C) 2011, 2012, 2013, 2014, 2015, 2016, 2017 Matthew Skala])
205-AC_SUBST([release_date],["November 17, 2017"])
203+AC_REVISION([$Id: configure.ac 9086 2021-06-29 17:48:34Z mskala $])
204+AC_COPYRIGHT([Copyright (C) 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2021 Matthew Skala])
205+AC_SUBST([release_date],["July 1, 2021"])
206206 # this must be early so it will happen before depfiles
207207 TSU_FIX_MAKEFILE([dnl
208208 s#TESTS = #TESTS = \$(otf_DATA) #;dnl
@@ -302,14 +302,14 @@
302302 [Define to 1 if BuDDy is available])],
303303 [have_buddy=no
304304 can_full_idsgrep=no
305- can_icemap=no])],
305+ can_build_icemap=no])],
306306 [have_buddy=no
307307 can_full_idsgrep=no
308- can_icemap=no])
308+ can_build_icemap=no])
309309 PKG_CHECK_MODULES([PCRE],[libpcre],[have_pcre=yes],
310310 [have_pcre=no
311311 can_full_idsgrep=no
312- can_icemap=no])
312+ can_build_icemap=no])
313313 #
314314 ############################################################################
315315 #
@@ -375,11 +375,6 @@
375375 [turn off PDF documentation])],
376376 [],
377377 [enable_docs=yes])
378-AC_ARG_ENABLE([download],
379- [AS_HELP_STRING([--enable-download=[yes|no]],
380- [automatically download Unicode data from UNICODE_URL [no]])],
381- [],
382- [enable_download=no])
383378 AC_ARG_ENABLE([ff-debug],
384379 [AS_HELP_STRING([--disable-ff-debug],
385380 [turn off FontAnvil debuggery warning])],
@@ -390,6 +385,11 @@
390385 [kanji coverage chart [auto]])],
391386 [],
392387 [enable_kanji_chart=auto])
388+AC_ARG_ENABLE([icemap],
389+ [AS_HELP_STRING([--enable-icemap],
390+ [(re-)generate table code with Icemap [auto]])],
391+ [],
392+ [enable_icemap=auto])
393393 AC_ARG_ENABLE([ot-features],
394394 [AS_HELP_STRING([--enable-ot-features[=TAGS]],
395395 [OpenType feature(s) to include [all,-pfed]])],
@@ -445,24 +445,37 @@
445445 AM_CONDITIONAL([COND_DOCS],[test '!' "$enable_docs" = no])
446446 AC_SUBST([enable_docs])
447447 #
448-AM_CONDITIONAL([COND_DOWNLOAD],[test '!' "$enable_download" = no])
449-#
450448 AS_IF([test "x$MPOST_FLAGS" = "x"],[MPOST_FLAGS="-numbersystem=double"])
451449 #
450+AS_IF([test "x$enable_icemap" = "xauto"],
451+ [AC_MSG_CHECKING([whether to automatically enable Icemap])
452+ enable_icemap=no
453+ m4_foreach_w([imcheckpath],[hinttab macenctab nonmactab unicodelib],[
454+ AS_IF([test '!' -s fontanvil/fontanvil/imcheckpath.c],[enable_icemap=yes])
455+ AS_IF([test '!' -s fontanvil/fontanvil/imcheckpath.h],[enable_icemap=yes])
456+ ])
457+ m4_foreach_w([imcheckpath],[widthtab],[
458+ AS_IF([test '!' -s idsgrep/imcheckpath.c],[enable_icemap=yes])
459+ AS_IF([test '!' -s idsgrep/imcheckpath.h],[enable_icemap=yes])
460+ ])
461+ AS_IF([pwd | $GREP -q _build/sub],[enable_icemap=no])
462+ AC_MSG_RESULT([$enable_icemap])
463+ ])
464+#
452465 AC_SUBST([enable_ot_features])
453466 #
454467 AC_CONFIG_SUBDIRS([kleknev icemap fontanvil beikaitoru genjimon idsgrep ocr])
455468 AS_IF([test "x$enable_parasites" = "xauto"],
456- [AS_IF([test '!' "x$FONTANVIL" = "x"],
457- [enable_parasites=none],
469+ [AS_IF([test "x$FONTANVIL" = "x" || ( pwd | $GREP -q _build/sub ) ],
458470 [local_fontanvil_kludge=yes
459- AS_IF(["$LEX" --version 2> /dev/null],[],[can_fontanvil=no])
460- AS_IF([test -s fontanvil/fontanvil/unicodelib.h || test -x icemap/icemap],
471+ AS_IF(["$LEX" --version 2> /dev/null],[],[can_build_fontanvil=no])
472+ AS_IF([test "x$enable_icemap" = "xno"],
461473 [enable_parasites=fontanvil],
462474 [local_icemap_kludge=yes
463475 enable_parasites=icemap,fontanvil
464- AS_IF([test '!' -s fontanvil/dat/Blocks.txt],
465- [dl_unicode_warn=yes])])])])
476+ AS_IF([test '!' "x$enable_icemap" = "xno"],
477+ [dl_unicode_warn=yes])])],
478+ [enable_parasites=none])])
466479 AC_SUBST([enable_parasites])
467480 #
468481 AS_IF([test "x$prefix" = "xNONE"],[prefix="$ac_default_prefix"])
@@ -564,12 +577,6 @@
564577 #
565578 TSU_BAD_PATHS
566579
567-AC_MSG_CHECKING([whether PGF 2.10 workaround is needed])
568-need_pgf_workaround=no
569-AS_VERSION_COMPARE([$pgf_version],[2.10],[],[need_pgf_workaround=yes])
570-AM_CONDITIONAL([COND_PGFWORKAROUND],[test "x$need_pgf_workaround" = "xyes"])
571-AC_MSG_RESULT([$need_pgf_workaround])
572-
573580 AC_MSG_CHECKING([safety of silent build rules])
574581 can_silent_rules=yes
575582 AS_IF([test "x$EXPECT" = "x"],
@@ -656,10 +663,10 @@
656663 [missing_fontanvil=yes
657664 can_core=no])])
658665 AS_IF([test "x$local_fontanvil_kludge" = "xyes"],
659- [AS_IF([test "x$can_fontanvil" = "xno"],
666+ [AS_IF([test "x$can_build_fontanvil" = "xno"],
660667 [can_build=no])])
661668 AS_IF([test "x$local_icemap_kludge" = "xyes"],
662- [AS_IF([test "x$can_icemap" = "xno"],
669+ [AS_IF([test "x$can_build_icemap" = "xno"],
663670 [can_build=no])])
664671 AS_IF([test "x$_cv_gnu_make_command" = "x"],
665672 [missing_gmake=yes
@@ -707,7 +714,7 @@
707714 can_docs=no],
708715 [kprevision=`kpsewhich pgf.revision.tex`
709716 kprcs=`kpsewhich pgfrcs.code.tex`
710- pgf_version=`cat $kprevision $kprcs /dev/null | "$PERL" -ne 'if (/^@<:@^%@:>@+pgfversion\{(.*)\}/) { print $1; exit; }'`
717+ pgf_version=`cat $kprevision $kprcs /dev/null | "$PERL" -ne 'if (/^@<:@^%@:>@+pgfversion\{(@<:@1-9@:>@.*)\}/) { print "$1 "; }'`
711718 AS_VERSION_COMPARE([$pgf_version],[2.00],
712719 [missing_pgf_version=yes
713720 can_docs=no])
@@ -719,6 +726,11 @@
719726 AS_IF([test "$enable_docs" = "yes" && test "$can_docs" = "no"],
720727 [can_build=no])
721728 AC_MSG_RESULT([$can_docs])
729+AC_MSG_CHECKING([whether PGF 2.10 workaround is needed])
730+need_pgf_workaround=no
731+AS_VERSION_COMPARE([$pgf_version],[2.10],[],[need_pgf_workaround=yes])
732+AM_CONDITIONAL([COND_PGFWORKAROUND],[test "x$need_pgf_workaround" = "xyes"])
733+AC_MSG_RESULT([$need_pgf_workaround])
722734
723735 AC_MSG_CHECKING([kanji chart prerequisites])
724736 can_kanji_chart=yes
@@ -747,8 +759,9 @@
747759 AS_IF([test "x$XELATEX" = "x"],
748760 [missing_xelatex=yes
749761 can_proofs=no],
750- [kprcs=`kpsewhich pgfrcs.code.tex`
751- pgf_version=`cat $kprcs /dev/null | "$PERL" -ne 'print $1 if /^@<:@^%@:>@+pgfversion\{(.*)\}/'`
762+ [kprevision=`kpsewhich pgf.revision.tex`
763+ kprcs=`kpsewhich pgfrcs.code.tex`
764+ pgf_version=`cat $kprevision $kprcs /dev/null | "$PERL" -ne 'if (/^@<:@^%@:>@+pgfversion\{(@<:@1-9@:>@.*)\}/) { print "$1 "; }'`
752765 AS_VERSION_COMPARE([$pgf_version],[2.00],
753766 [missing_pgf_version=yes
754767 can_proofs=no])
@@ -810,8 +823,6 @@
810823 [no],[$can_ffdebug])
811824 TSU_TABLE_LINE([build-system hacking ],[$enable_build_hacking],
812825 [no],[$can_bshack])
813-TSU_TABLE_LINE([Unicode auto-download ],[$enable_download],
814- [$enable_download],[yes])
815826 AS_ECHO([])
816827 AS_ECHO_N(["Character selection "])
817828 TSU_COLOURISE([$enable_chars],[6])AS_ECHO([])
@@ -1043,12 +1054,11 @@
10431054 AS_ECHO(["possibilities. The download target is recursive and running it from"])
10441055 AS_ECHO(["the top directory will also attempt to fetch dictionary data for IDSgrep."])
10451056 AS_ECHO(["Run make download in the fontanvil/ directory to only fetch what is"])
1046- AS_ECHO(["required by FontAnvil. This step will NOT be taken automatically unless"])
1047- AS_ECHO(["you specify the --enable-download=yes option, on the principle that build"])
1048- AS_ECHO(["systems should never make network connections without a specific user"])
1049- AS_ECHO(["request to do so. Use the UNICODE_URL environment variable to specify"])
1050- AS_ECHO(["an alternate URL for the source of the files and be a better neighbour"])
1051- AS_ECHO(["to the Unicode Consortium."])])
1057+ AS_ECHO(["required by FontAnvil. This step will NOT be taken automatically, on the"])
1058+ AS_ECHO(["principle that build systems should never make network connections without"])
1059+ AS_ECHO(["a specific user request to do so. Use the UNICODE_URL environment variable"])
1060+ AS_ECHO(["to specify an alternate URL for the source of the files and be a better"])
1061+ AS_ECHO(["neighbour to the Unicode Consortium."])])
10521062
10531063 AS_IF([test "x$has_bad_paths" = "xyes"],
10541064 [AS_ECHO([])
@@ -1060,22 +1070,24 @@
10601070 AS_ECHO(["characters from pathnames before continuing."])
10611071 ])
10621072
1063-AS_IF([test "x$can_fontanvil" = "xno"],
1073+AS_IF([test "x$can_build_fontanvil" = "xno"],
10641074 [AS_ECHO([])
1065- AS_ECHO(["One or more dependencies needed by FontAnvil are missing:"])
1075+ AS_ECHO(["One or more dependencies needed to build FontAnvil are missing:"])
10661076 AS_IF(["$LEX" --version 2> /dev/null],[],
10671077 [AS_ECHO([" flex http://flex.sourceforge.net/"])])
1068- AS_ECHO(["Since the current configuration requires FontAnvil, this blocks the build."])
1078+ AS_ECHO(["Since the current configuration requires building FontAnvil, this blocks"])
1079+ AS_ECHO(["the build."])
10691080 ])
10701081
1071-AS_IF([test "x$can_icemap" = "xno" && test "x$local_icemap_kludge" = "xyes"],
1082+AS_IF([test "x$can_build_icemap" = "xno" && test "x$local_icemap_kludge" = "xyes"],
10721083 [AS_ECHO([])
1073- AS_ECHO(["One or more libraries needed by Icemap are missing:"])
1084+ AS_ECHO(["One or more libraries needed to build Icemap are missing:"])
10741085 AS_IF([test '!' "$have_buddy" = "yes"],
10751086 [AS_ECHO([" BuDDy https://sourceforge.net/projects/buddy/"])])
10761087 AS_IF([test '!' "$have_pcre" = "yes"],
10771088 [AS_ECHO([" PCRE http://www.pcre.org"])])
1078- AS_ECHO(["Since the current configuration requires Icemap, this blocks the build."])
1089+ AS_ECHO(["Since the current configuration requires building Icemap, this blocks"])
1090+ AS_ECHO(["the build."])
10791091 ])
10801092 #
10811093 # Prognosticate
--- trunk/doc/bkstyle.tex (revision 733)
+++ trunk/doc/bkstyle.tex (revision 734)
@@ -336,7 +336,7 @@
336336 \vspace*{\fill}
337337
338338 Proofs and pretty-printed source code for Tsukurimashou\\
339-Copyright © 2011, 2012, 2013, 2014, 2015~~Matthew Skala
339+Copyright © 2011--2021~~Matthew Skala
340340
341341 This program is free software: you can redistribute it and/or modify
342342 it under the terms of the GNU General Public License as published by
--- trunk/doc/demo.tex (revision 733)
+++ trunk/doc/demo.tex (revision 734)
@@ -1,8 +1,8 @@
1-\documentclass[14pt]{extarticle}
1+\documentclass{article}
22
33 %
44 % Demo for Tsukurimashou
5-% Copyright (C) 2011, 2012, 2013, 2015 Matthew Skala
5+% Copyright (C) 2011, 2012, 2013, 2015, 2021 Matthew Skala
66 %
77 % This program is free software: you can redistribute it and/or modify
88 % it under the terms of the GNU General Public License as published by
@@ -32,6 +32,7 @@
3232
3333 \input{version.tex}
3434
35+\usepackage[fontsize=13pt]{scrextend}
3536 \usepackage{fontspec}
3637 \usepackage[margin=1.25in,top=0.85in]{geometry}
3738 \usepackage{wrapfig}
@@ -215,7 +216,7 @@
215216 \vspace*{\fill}
216217
217218 Demo for Tsukurimashou\\
218-Copyright © 2011~~Matthew Skala
219+Copyright © 2011, 2021~~Matthew Skala
219220
220221 This program is free software: you can redistribute it and/or modify
221222 it under the terms of the GNU General Public License as published by
--- trunk/doc/usermanual.tex (revision 733)
+++ trunk/doc/usermanual.tex (revision 734)
@@ -2,7 +2,7 @@
22
33 %
44 % User Manual for Tsukurimashou
5-% Copyright (C) 2011, 2012, 2013, 2014, 2015, 2017 Matthew Skala
5+% Copyright (C) 2011, 2012, 2013, 2014, 2015, 2017, 2021 Matthew Skala
66 %
77 % This program is free software: you can redistribute it and/or modify
88 % it under the terms of the GNU General Public License as published by
@@ -143,14 +143,14 @@
143143 \phantomsection\belowpdfbookmark{コピーライト Copyright}{bkm:copyright}
144144
145145 This project's English-language home page is at\\
146-\hspace*{1em}\url{http://tsukurimashou.osdn.jp/index.php.en}.\\
146+\hspace*{1em}\url{https://tsukurimashou.osdn.jp/index.php.en}.\\
147147 このプロジェクトは、日本語のページが\\
148-\hspace*{1em}\url{http://tsukurimashou.osdn.jp/index.php.ja}です。
148+\hspace*{1em}\url{https://tsukurimashou.osdn.jp/index.php.ja}です。
149149
150150 \vspace*{1in}
151151
152152 User manual for Tsukurimashou\\
153-Copyright © 2011, 2012, 2013, 2014, 2015, 2017\quad Matthew Skala
153+Copyright © 2011, 2012, 2013, 2014, 2015, 2017, 2021\quad Matthew Skala
154154
155155 This program is free software: you can redistribute it and/or modify
156156 it under the terms of the GNU General Public License as published by
@@ -372,14 +372,14 @@
372372
373373 The name ``Tsukurimashou'' could be translated as ``Let's make something!''
374374
375-From time to time, people ask how they can help with the project.
376-The one thing this project most needs is your \emph{attention}. I am not
377-looking for code contributions because of the pedagogical goal (part of the
378-point is for me to learn kanji by doing all the work); I am not looking for
379-money as such, although I could certainly use academic employment; but
375+From time to time, people ask how they can help with the project. The one
376+thing this project most needs is your \emph{attention}. I am not looking
377+for code contributions because of the pedagogical goal (part of the point is
378+for me to learn kanji by doing all the work); I am not looking for money
379+unless it's enough money to reduce my need for other paid employment; but
380380 public and third-party attention would be very helpful to the project's
381-long-term success. Use it, share it, and above all write about it.
382-At this point I'm not even sure anybody but me has ever so much as run the
381+long-term success. Use it, share it, and above all write about it. At this
382+point I'm not even sure anybody but me has ever so much as run the
383383 Tsukurimashou build process, and that really hurt my motivation to continue
384384 maintaining it as a published free software package when other demands in my
385385 life pile up.
@@ -386,9 +386,9 @@
386386
387387 The home pages for this project, where you can download the latest releases,
388388 browse the source-control repository, and so on, are:\\
389-\hspace*{1em}\url{http://tsukurimashou.osdn.jp/index.php.en}%
389+\hspace*{1em}\url{https://tsukurimashou.osdn.jp/index.php.en}%
390390 \quad (English)\\
391-\hspace*{1em}\url{http://tsukurimashou.osdn.jp/index.php.ja}%
391+\hspace*{1em}\url{https://tsukurimashou.osdn.jp/index.php.ja}%
392392 \quad(日本語)
393393
394394
@@ -401,76 +401,46 @@
401401 \blsubsection{\TsukurimashouVWide
402402 のニュース}{What's new in \TsukurimashouVersion?}
403403
404-I said in the version~0.9 ``what's new'' that the future of the project was
405-uncertain because of my career situation. That was a little over three
406-years ago. Subsequent to the 0.9 release, I went to Denmark for a couple of
407-years on a postdoctoral fellowship. I made some effort to work
408-Tsukurimashou into my academic work, including a couple of publications I
409-will cite below, but for the most part, work on this project was shelved as
410-I made it my top priority to find a long-term academic position.
404+It's been about three and a half years since the version~0.10 release, and
405+the COVID-19 pandemic, still ongoing as I write this in June of 2021,
406+affected more than a year of that time. I am still running my synthesizer
407+business, North Coast Synthesis Ltd. Please visit
408+\url{https://northcoastsynthesis.com/} for high-quality Eurorack modules and
409+kits. The business is bringing in enough money for me to live on, but just
410+barely. I'm still living from one customer order to the next.
411411
412-My efforts were not successful, and in 2016, after 15 years in academic
413-research aiming for a professorship, I decided it was time to seek a
414-different career path. I moved back to Canada and went into the electronic
415-musical instruments business. Please visit North Coast Synthesis Ltd., at
416-\url{https://northcoastsynthesis.com/}, for high-quality Eurorack modules
417-and kits.
412+My roadmap for Tsukurimashou is still much as it was in the last release.
413+This version~0.11 covers all the grade-school kanji up to a little past the
414+halfway mark of Grade Six, now including the 20 ``prefectural name''
415+characters that the Japanese school system added to Grade Four after the
416+time when I set up my checklists. I plan to complete Grade Six in
417+version~0.12. It only calls for 81 more kanji, plus whatever other ones are
418+convenient to add along the way. Then, after that, the next release will be
419+version~1.0, with no specific additional kanji planned, but the chance to
420+tidy up any issues that might be found in version~0.12 and have a clean
421+release that is complete in some important sense.
418422
419-With November 2017, I was considering doing a NaNoWriMo project (``National
420-Novel Writing Month''---the idea is to write a 50,000-word work of fiction
421-in 30 days) but decided instead to aim for adding five new kanji to
422-Tsukurimashou each day and have them be the ones needed for the next
423-release, namely Grade Five kanji. That actually meant more than five
424-characters per day on average, as some of the Grade Fives entailed creating
425-other characters first to use as components. A few days ago I completed
426-the Grade Five set and have spent the time since, working on other issues
427-needed to prepare the 0.10 release.
423+I feel pretty well committed to seeing this project through to the~1.0
424+release, but I don't know if I will continue it past there. It has been
425+about ten years' work now, and it will be at least a little more than that
426+by the time~1.0 is actually released. A lot has changed in my life over
427+that time. I haven't been as successful at learning the Japanese language
428+as I'd hoped, and some of the incentives for me to keep trying no longer
429+exist. This project also hasn't attracted as much third-party attention as
430+I had hoped it would, and third-party attention is now even more important
431+as a reason to continue it, than was earlier the case.
428432
429-This version~0.10 is being pushed out in a bit of a rush, again, because
430-after three years with no releases I'd like to confirm that the project is
431-not dead, and get as much visible progress in this November push as
432-possible. My roadmap for future releases is to push 0.11 halfway through
433-Grade Six, 0.12 at the end of Grade Six, and then it'll be the big one:
434-Tsukurimashou~1.0, with no specific kanji promised beyond Grade Six but a
435-more polished release addressing issues that may still remain after the 0.12
436-release. It is my hope that version~1.0 will be usable enough that I can
437-sell precompiled binaries of it; I have no illusions of actually making any
438-real money that way, but maybe some people would like to have an official,
439-physical DVD of the Tsukurimashou fonts and support the project a little.
433+But having a font family that can reasonably be used for at least some
434+practical typesetting, not just demonstration purposes, will be an important
435+milestone and will open up a lot of possibilities. I still have some hope
436+that once I push the version~1.0 release I can expect it to be actually
437+adopted by people other than myself, and that will improve the profile of
438+the project. I'm also still looking out for ways I might be able to gain
439+money or professional status from this project, which are the things that
440+I'd really need to have to make it feasible to keep working past~1.0.
440441
441-My academic journal article about IDSgrep was published in the
442-International Journal of Asian Language Processing and you can read
443-it (open access) at
444-\url{http://colips.org/journals/volume23/23.2.4_idsgrep-article-final.pdf}.
445-I also presented a conference paper on algorithmic aspects at the 9th
446-International Conference on Similarity Search and Applications (SISAP 2016)
447-in Tokyo, and that one is online (behind a paywall) at
448-\url{https://link.springer.com/chapter/10.1007/978-3-319-46759-7_11}.
442+よろしくお願いします。
449443
450-This version contains significant revisions to FontAnvil and some of the
451-other associated software, but those are still too new and experimental for
452-detailed comment here. FontForge contained a lot of semi-hardcoded tables
453-of font information, with semi-automated software for generating the C code
454-to express those tables. I have introduced a new tool of my own called
455-Icemap for solving that problem in a more principled way, but I'm not up to
456-writing a detailed document for it yet. Dig around in the source code, and
457-consider it pre-alpha, if you want.
458-
459-Without wanting to get too personal, the next couple of years are going to
460-be critical for me in the course of my life. I'm not making Tsukurimashou
461-for money but I do need money; academia didn't work out and it's not clear
462-electronics manufacturing will either; and any help and support you can give
463-me is welcome if it is in the form I need. The best thing you can do is buy
464-my synthesizer modules (that URL again is
465-\url{https://northcoastsynthesis.com/}); but I realize they are only of use
466-to a few people. Failing that anything that increases the profile of my
467-business or this project would be very welcome. Please, circulate that URL
468-and the URL of the Tsukurimashou home page
469-(\url{http://tsukurimashou.osdn.jp/}) in your social media, and talk and
470-write about Tsukurimashou! It is only
471-because of your continued support that I am able to continue working
472-on this project. よろしくお願いします。
473-
474444 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
475445
476446 \blsubsection{外のプロジェクト}{Other similar projects}
@@ -629,14 +599,13 @@
629599 \blsubsection{デベロップメントロードマップ}{Development roadmap}
630600
631601 This version contains all the kyouiku kanji (the ones taught in Japanese
632-elementary school) through Grade 5. The current plan is
633-to release a minor version after each grade level of kyouiku kanji and one
634-halfway through each grade level, which will take us up to version 0.12 at
635-the end of Grade 6. Version 1.0 will probably be a separate version
636-released shortly after 0.12, with a general clean-up and renovation, but
637-it's possible I might skip directly from 0.11 to 1.0.
602+elementary school) through Grade~5, and 100 of the 181 in Grade~6. The
603+current plan is to release a minor version after each grade level of kyouiku
604+kanji and one halfway through each grade level, which will take us up to
605+version 0.12 at the end of Grade~6. Version 1.0 will probably be a separate
606+version released shortly after 0.12, with a general clean-up and renovation.
638607
639-There are 1006 kyouiku kanji, though the fonts already contain more than
608+There are 1026 kyouiku kanji, though the fonts already contain far more than
640609 that number of kanji glyphs because my general practice is to add other
641610 glyphs that are convenient to add whenever they come up, regardless of their
642611 level. For instance, when I added the ``gate'' radical 門 it was easy to
@@ -647,39 +616,22 @@
647616 makes the end of the kyouiku kanji a good milestone for the first major
648617 version number.
649618
650-That may be a few years from now. Progress past that point will be somewhat
651-dependent on how I feel about the project by then and what my personal
652-career situation is. My hope is that at that point or before, I'll have the
653-chance to present this work at one or more conferences and that it will have
654-attracted some attention. Of course, if I can figure out a way to get paid
655-to do it that would be nice, but attention is more important.
656-
657619 Although this is subject to change and cancellation, my current thought is
658620 that the next major versions would be 2.0 with the jouyou kanji (taught in
659-high school, a total of 1130 additional glyphs), and 3.0 with the jinmeiyou
621+high school, a total of 1110 additional glyphs), and 3.0 with the jinmeiyou
660622 kanji (the ``name-only'' kanji, 983 additional glyphs). I don't know how
661623 I'd break those up into minor versions, but presumably I'd aim for a similar
662624 spacing of about 100 new characters per release. At the 3.0 point, with a
663-little over 3000 kanji, the fonts should be basically complete in the sense
664-of being usable to write the full Japanese language as most reasonably
665-competent native readers know it. Many more kanji exist; I don't know how
666-far I'll want to take this project toward covering them all. For reference,
667-looking at some other fonts I have handy, IPA Mincho contains 6682 kanji
668-(probably aiming to cover the JIS~208 standard), and Sazanami Gothic
669-contains 12202 (probably aiming to cover JIS~212). Those might be
670-reasonable milestones for 4.0 and 5.0.
625+little over 3000 specifically-required kanji, the fonts should be basically
626+complete in the sense of being usable to write the full Japanese language as
627+most reasonably competent native readers know it. The project already
628+contains a little over 2900 kanji because I've opportunistically added
629+lower-priority ones that were easy to add along the way (for instance, some
630+that are obscure in themselves but used as components of higher-priority
631+characters). Whether I will actually continue to work on the project past
632+version~1.0 is undecided at the moment. It will depend on how much
633+attention the versions up to~1.0 receive.
671634
672-Figure~\ref{fig:glyph-counts} is a chart of the progress to date. Note the
673-horizontal axis is labelled by version but scaled by time. Even-numbered
674-versions tend to take more time because I tend to do the easier characters
675-in each grade level first. All the glyph counts in these charts are for the
676-Tsukurimashou (Japanese) fonts alone. The Mandeubsida (Korean) fonts contain
677-the 11172-glyph block of precomposed syllables, which because they are
678-algorithmically generated cannot be well compared to the more
679-manually-created kanji and other glyphs. The Mandeubsida fonts also contain a
680-few hundred non-precomposed glyphs, beyond the core they share with
681-Tsukurimashou.
682-
683635 % glyph counts by release:
684636
685637 % version date jdate kanji glyphs LOC
@@ -693,113 +645,10 @@
693645 % 0.8 20130826 2456530 1502 2981 52508
694646 % 0.9 20140817 2456887 1754 3234 56641
695647 % 0.10 20171117 2458075 2353 3831 63345
648+% 0.11 20210701 2459397 2912 4390 69112
696649
697-\begin{figure}
698-\tikzset{horizontal axis/.style={xscale=0.045,xshift=1.5cm}}
699-\tikzset{vertical axis/.style={yscale=0.2}}
700-\centering
701-\begin{tikzpicture}
702- \begin{scope}[vertical axis]
703- \draw[arrows=-triangle 60] (0,-1) -- (0,42);
704- \foreach \y/\ylbl in
705- {0/0,10/1000,20/2000,30/3000,40/4000} {
706- \draw (-0.2,\y) -- (0.2,\y);
707- \node[anchor=east] at (-0.2,\y) {\scriptsize\ylbl};
708- }
709- \node[rotate=90] at (-2,16) {glyphs};
710- \end{scope}
711- \begin{scope}[horizontal axis]
712- \draw[arrows=-triangle 60] (-2,0) -- (252.0,0);
713- \foreach \x/\xlbl in
714- {1.2/0.1,5.8/0.2,9.2/0.3,25.1/0.4,31.1/0.5,49.6/0.6,76.0/0.7,%
715- 93.0/0.8,128.7/0.9,247.5/0.10} {
716- \draw (\x,-0.2) -- (\x,0.2);
717- \node[anchor=north] at (\x,-0.2) {\scriptsize\xlbl};
718- }
719- \node at (37.5,-1) {version and time};
720- \end{scope}
721- \begin{scope}[horizontal axis,vertical axis]
722- \node (v1k) at (1.2,0) {漢};
723- \node (v2k) at (5.8,1.98) {漢};
724- \node (v3k) at (9.2,3.48) {漢};
725- \node (v4k) at (25.1,5.73) {漢};
726- \node (v5k) at (31.1,7.76) {漢};
727- \node (v6k) at (49.6,11.10) {漢};
728- \node (v7k) at (75.7,12.91) {漢};
729- \node (v8k) at (93.0,15.02) {漢};
730- \node (v9k) at (128.7,17.54) {漢};
731- \node (v10k) at (247.5,23.53) {漢};
732- \node (v1t) at (1.2,13.07) {\labelitemi};
733- \node (v2t) at (5.8,16.46) {\labelitemi};
734- \node (v3t) at (9.2,17.97) {\labelitemi};
735- \node (v4t) at (25.1,20.21) {\labelitemi};
736- \node (v5t) at (31.1,22.60) {\labelitemi};
737- \node (v6t) at (49.6,25.86) {\labelitemi};
738- \node (v7t) at (75.7,27.70) {\labelitemi};
739- \node (v8t) at (93.0,29.81) {\labelitemi};
740- \node (v9t) at (128.7,32.34) {\labelitemi};
741- \node (v10t) at (247.5,38.31) {\labelitemi};
742- \draw (v1k) -- (v2k) -- (v3k) -- (v4k)
743- -- (v5k) -- (v6k) -- (v7k) -- (v8k) -- (v9k)
744- -- (v10k) node[sloped,above,midway] {kanji};
745- \draw (v1t) -- (v2t) -- (v3t) -- (v4t)
746- -- (v5t) -- (v6t) -- (v7t) -- (v8t) -- (v9t)
747- -- (v10t) node[sloped,above,midway] {total};
748- \end{scope}
749-\end{tikzpicture}
750-\caption{Growth of glyph counts}
751-\label{fig:glyph-counts}
752-\end{figure}
650+% lines of code are total lines in mp/*.mp minus mp/mande-*.mp
753651
754-Figure~\ref{fig:loc-per-glyph} gives a different view of development
755-progress: the number of lines of code (total lines in mp/*.mp, including
756-comments and blanks but not including code in other languages and locations;
757-also excluding mande-*.mp, but still including a few other files from
758-Mandeubsida) plotted against the total number of glyphs in the main
759-Tsukurimashou family.
760-
761-\begin{figure}
762-\tikzset{horizontal axis/.style={xscale=0.25}}
763-\tikzset{vertical axis/.style={yscale=0.15}}
764-\centering
765-\begin{tikzpicture}
766- \begin{scope}[vertical axis]
767- \draw[arrows=-triangle 60] (0,0) -- (0,72);
768- \foreach \y/\ylbl in
769- {0/0,10/10000,20/20000,30/30000,40/40000,50/50000,60/60000,70/70000} {
770- \draw (-0.2,\y) -- (0.2,\y);
771- \node[anchor=east] at (-0.2,\y) {\scriptsize\ylbl};
772- }
773- \node[rotate=90] at (-2.2,25) {lines of code};
774- \end{scope}
775- \begin{scope}[horizontal axis]
776- \draw[arrows=-triangle 60] (0,0) -- (42,0);
777- \foreach \x/\xlbl in
778- {0/0,10/1000,20/2000,30/3000,40/4000} {
779- \draw (\x,-0.2) -- (\x,0.2);
780- \node[anchor=north] at (\x,-0.2) {\scriptsize\xlbl};
781- }
782- \node at (15,-1.3) {glyphs};
783- \end{scope}
784- \begin{scope}[horizontal axis,vertical axis]
785- \node (v1) at (13.07,14.944) {\labelitemi};
786- \node (v2) at (16.46,21.157) {\labelitemi};
787- \node (v3) at (17.97,24.799) {\labelitemi};
788- \node (v4) at (20.21,30.148) {\labelitemi};
789- \node (v5) at (22.60,36.479) {\labelitemi};
790- \node (v6) at (25.86,46.635) {\labelitemi};
791- \node (v7) at (27.70,48.879) {\labelitemi};
792- \node (v8) at (29.81,52.508) {\labelitemi};
793- \node (v9) at (32.34,56.641) {\labelitemi};
794- \node (v10) at (38.31,63.345) {\labelitemi};
795- \draw (v1) -- (v2) -- (v3) -- (v4) -- (v5) -- (v6) -- (v7)
796- -- (v8) -- (v9) -- (v10);
797- \end{scope}
798-\end{tikzpicture}
799-\caption{Lines of code per glyph}
800-\label{fig:loc-per-glyph}
801-\end{figure}
802-
803652 \clearpage
804653
805654 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -818,31 +667,9 @@
818667 \blsubsubsection{METAFONTなど}{METAFONT, etc.}
819668
820669 \begin{itemize}
821- \item Metapost (maybe even METAFONT) issue propagated to METATYPE1:
822- the equation solver has a non-renewable resource of ``independent
823- variable instance serial numbers'' which are consumed as code executes.
824- Basically, one is used up permanently every time an assignment statement
825- executes. Very old versions of Metapost either did not have these, or
826- allowed the counter to wrap around, and so the solver would produce
827- incorrect results in long-running programs. At some time before
828- version 0.641, the solver
829- mistakes were fixed by the limited serial-number scheme, but
830- serial numbers would run out and cause a fatal error when they reached
831- $\textrm{2}^\textrm{\small 25}$. In version 1.501, the limit was
832- increased to $\textrm{2}^\textrm{\small 31}$. Any sufficiently
833- long-running Metapost program will eventually die as the limit is
834- exceeded. Some experimental versions of the Blackletter Lolita
835- curve-fitter would exceed the $\textrm{2}^\textrm{\small 25}$ limit; the
836- current experimental version is less computation-intensive, probably
837- wouldn't exceed $\textrm{2}^\textrm{\small 25}$, and certainly fits
838- comfortably in $\textrm{2}^\textrm{\small 31}$, but it seems like the
839- limit should not exist at all. Debugging is hindered by some currently
840- in progress redesign work on Metapost's data structures, such that (as
841- of October 2011) the cutting-edge development version leaks memory fast
842- and crashes for that reason long before the serial numbers can run out
843- anyway. Memory leaks acknowledged and planned to be fixed by Metapost
844- maintainer Taco Hoekwater, but it may take a while. I've posted a link
845- target to track this issue at \url{http://ansuz.sooke.bc.ca/entry/213}.
670+ \item The ``independent variable instance serial numbers'' issue in
671+ Metapost seems to no longer be significant in reasonably recent
672+ versions. As of Tsukurimashou version~0.11, I'm no longer tracking it.
846673
847674 \item METATYPE1 sometimes runs glyph names through the METAFONT
848675 tokenizer. At this point, I don't know how essential that is to
@@ -2274,7 +2101,9 @@
22742101
22752102 First I will describe building from a source distribution package. If you
22762103 wish to compile from a version-control checkout, then also read the specific
2277-notes about that in Subsection~\ref{sub:version-control}.
2104+notes about that in Subsection~\ref{sub:version-control}. If you want to
2105+create distribution packages, follow the procedure described in
2106+Subsection~\ref{sub:building-distro}.
22782107
22792108 Assuming you wish to embark on the adventure of compiling Tsukurimashou, you
22802109 must have at least the following:
@@ -2288,8 +2117,8 @@
22882117 \item GNU Make 3.82 or later (non-GNU versions will not work;
22892118 earlier versions will not work).
22902119 \item Metapost (this comes with most \TeX/\LaTeX\ installations)
2291- \item An interpreter of PE scripts. FontAnvil is preferred, and included
2292- with the Tsukurimashou sources. FontForge
2120+ \item An interpreter of PE scripts. FontAnvil is preferred, and is
2121+ included with the Tsukurimashou sources. FontForge
22932122 will also work, as long as it retains support for ``native'' scripting.
22942123 \end{itemize}
22952124
@@ -2329,7 +2158,7 @@
23292158 Python. To ensure continued support for Tsukurimashou, I now maintain a
23302159 standalone PE script interpreter called FontAnvil; this should be available
23312160 wherever you got the Tsukurimashou source code, and is the preferred PE
2332-script interpreter for building Tsukurimashou. As of version 0.9, both
2161+script interpreter for building Tsukurimashou. As of version 0.11, both
23332162 FontAnvil and FontForge will work, more or less equally well. Continued
23342163 FontForge compatibility in the future is not guaranteed.
23352164
@@ -2376,11 +2205,11 @@
23762205
23772206 The build system for Tsukurimashou is fairly elaborate; it may seem like
23782207 overkill, but given that I'm running it on a daily basis over the course of
2379-years, it's important that it should be pleasant for me and efficient in
2380-time consumption. Thus it defaults to ``silent'' build rules, uses pretty
2381-ANSI colours, and does a bunch of complicated checks on whether file
2382-contents (not just modification times) have changed in order to avoid
2383-expensive dependency rebuilds unless those are really needed, while
2208+many years, it's important that it should be bulletproof, pleasant for me,
2209+and efficient in time consumption. Thus it defaults to ``silent'' build
2210+rules, uses pretty ANSI colours, and does a bunch of complicated checks on
2211+whether file contents (not just modification times) have changed in order to
2212+avoid expensive dependency rebuilds unless those are really needed, while
23842213 triggering them automatically when I add new source files.
23852214
23862215 One important tip is that if things are failing, you can add ``V=1'' to the
@@ -2517,18 +2346,17 @@
25172346
25182347 If you try to do ``make distcheck,'' it will fail if any of the tests fail;
25192348 and the tests probably \emph{will} fail because of the bugs in FontAnvil
2520-spline geometry. A workaround, used in my Tsukurimashou 0.8 distribution
2521-packages, is to override the options for \texttt{fontlint.pe} as follows:
2522-\begin{verbatim}
2523-make DISTCHECK_CONFIGURE_FLAGS='FONTLINT_FLAGS="-w 2,3,5,23"' distcheck
2524-\end{verbatim}
2349+spline geometry among other reasons. See the notes in
2350+Subsection~\ref{sub:building-distro} for workarounds.
25252351
2526-The \texttt{DISTCHECK\_CONFIGURE\_FLAGS} variable specifies additional flags
2527-(actually a command-line fragment) that ``make distcheck'' will pass to
2528-``configure.'' Then inside that, the \texttt{FONTLINT\_FLAGS} variable
2529-specifies flags to pass to the font integrity checker. The codes 2, 3, 5,
2530-and 23 are the errors that I wasn't able to correct with the version of
2531-FontForge installed on my development system as of the time of the release.
2352+Some C source code in FontAnvil and IDSgrep needs to be automatically
2353+generated by Icemap, from data files downloaded from the Unicode Consortium.
2354+Distribution packages will contain pre-generated versions of these source
2355+files, so that neither Icemap nor a download is needed. However, if you are
2356+building from a source control checkout, or possibly if you have Icemap
2357+installed, the build system will attempt to regenerate these files, and in
2358+that case, you must run ``make download'' before running ``make'' to get the
2359+needed input files.
25322360
25332361 Don't bother with ``-{}-disable-dependency-tracking''; that is an
25342362 Autotools thing meant for much larger and more softwary packages. It
@@ -2539,9 +2367,9 @@
25392367 idea.
25402368
25412369 Autotools encourages the use of a separate build directory, with the
2542-sources remaining inviolate elsewhere, but that is not really
2370+sources remaining inviolate elsewhere, but that is not
25432371 recommended for Tsukurimashou. I try to make it pass ``make
2544-dist-check'' right before each release, which implies making separate
2372+distcheck'' right before each release, which implies making separate
25452373 build directories work, but if you are building Tsukurimashou from a
25462374 checked-out SVN version, it may or may not work. It's safer
25472375 to build right in the main directory. Even if VPATH builds work, they
@@ -2559,16 +2387,16 @@
25592387 installation directories, almost none of which are applicable to a package
25602388 of this type, and I took out most of the support for those to reduce the
25612389 cognitive load for users who would otherwise have to think about their
2562-inapplicability. This package doesn't install any executables, libraries, C
2563-header files, or similar, at all. (Although some of the parasites may...)
2564-Cross-compilation and executable name munging were removed for the same
2565-reason; some C programs are compiled for kerning and Type 1 opcode assembly,
2566-but these are only meant to run on the host system during build, with all
2567-the installable files being architecture-independent. The hacking I did on
2568-Autotools means that if you modify the build system such that you would be
2569-re-running Autotools, it's likely to break unless your version of Autotools
2570-is close to the 2.65 version I used. The configure script will try to
2571-detect such a situation and warn you.
2390+inapplicability. The main Tsukurimashou package doesn't install any
2391+executables, libraries, C header files, or similar, at all. (Some of the
2392+parasites do.) Cross-compilation and executable name munging were removed
2393+for the same reason; some C programs are compiled for kerning and Type 1
2394+opcode assembly, but these are only meant to run on the host system during
2395+build, with all the installable files being architecture-independent. The
2396+hacking I did on Autotools means that if you modify the build system such
2397+that you would be re-running Autotools, it's likely to break unless your
2398+version of Autotools is close to the version I used. The configure
2399+script will try to detect such a situation and warn you.
25722400
25732401 The design of this build system was influenced by Peter Miller's interesting
25742402 article ``Recursive Make Considered Harmful,'' available at
@@ -2602,8 +2430,8 @@
26022430 be distributed separately and made a dependency of all the other packages
26032431 that use it. A problem with doing that is that which code is or isn't
26042432 shared will vary a lot due to the wide range of different packages that
2605-might want to share some part of the system. Instead, the approach taken as
2606-of Tsukurimashou 0.7 is to introduce what I call ``parasite packages.''
2433+might want to share some part of the system. Instead, the approach
2434+introduced in Tsukurimashou~0.7 uses what I call ``parasite packages.''
26072435 These are sub-packages for Autotools purposes.
26082436
26092437 Each parasite appears in its own subdirectory of the full Tsukurimashou
@@ -2643,7 +2471,7 @@
26432471 GPLv3 with font embedding exception.
26442472
26452473 \item{FontAnvil} A PE script interpreter, for editing fonts under program
2646- control. Overall package GPLv3, some parts also available under
2474+ control. Overall package GPLv3 or later, some parts also available under
26472475 BSD-style and other licenses.
26482476
26492477 \item{Genjimon} A set of standalone fonts for the Genjimon symbols, which
@@ -2708,13 +2536,11 @@
27082536 ./tsukurimashou
27092537 \end{verbatim}
27102538
2711-OSDN is the preferred repository, but you may instead obtain it from
2712-Github:
2713-\begin{verbatim}
2714-git clone https://github.com/mskala/Tsukurimashou.git
2715-\end{verbatim}
2539+Although there may still be a mirror of some version of Tsukurimashou on
2540+Github, it is out of date and unlikely to be updated. Use the Subversion
2541+repository.
27162542
2717-Either of these commands downloads the sources from the repository and
2543+The checkout command downloads the sources from the repository and
27182544 creates a subdirectory called ``tsukurimashou'' in the current directory.
27192545
27202546 Use autoreconf to build the build system itself:
@@ -2793,6 +2619,130 @@
27932619
27942620 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
27952621
2622+\blsubsection{頒布のパケージを作って}{Building distribution packages}
2623+\label{sub:building-distro}
2624+
2625+It is not expected that general users of the Tsukurimashou project will have
2626+any reason to build distribution packages, and I don't encourage attempts
2627+because of possible confusion with ``official'' packages I prepare myself.
2628+However, it's worth having some documentation of the process for my own
2629+future reference and for the benefit of forks.
2630+
2631+This project uses Autotools, and it is preferred to use Autotools's ``make
2632+distcheck'' workflow for creating distribution packages. However, the make
2633+distcheck workflow depends on doing a VPATH build (that is, with generated
2634+files in a ``build'' directory separate from the source files) and that does
2635+not combine well with the multi-step information flow of Tsukurimashou.
2636+Unlike the typical C program that has clearly delineated source and object
2637+files, Tsukurimashou's source code is often used to generate files that are
2638+themselves much like ``source'' code and are processed further, through
2639+several steps. These are somewhere between source and object code and don't
2640+naturally fit into the hard division contemplated by Autotools's
2641+implementation of VPATH builds.
2642+
2643+There are also many files, especially those
2644+related to Icemap-managed data tables in IDSgrep and FontAnvil, which may be
2645+more like source or more like object files depending on whether the local
2646+configuration is using Icemap or just using pre-made data tables obtained
2647+from a distribution package. To work well with VPATH, the system must adapt
2648+to those files being in different places depending on the current
2649+configuration. Different branches of the larger project (such as FontAnvil
2650+and Icemap) depending on each other, creates further complexity as the
2651+directory layout and build order for sub-packages change depending on the
2652+style of build.
2653+
2654+The overall picture is that you shouldn't attempt a VPATH build except in
2655+the specific context of building a distribution package as described here.
2656+VPATH builds will cause warnings throughout the build system and it is
2657+assumed that if you ignore those warnings, then you think you know what
2658+you're doing. This is also my own small blow against the annoyance of other
2659+systems that produce dire warnings, or even refuse to compile at all, in
2660+\emph{non-}VPATH configurations, because somebody had the idea that use of
2661+VPATH ought to be encouraged as a general practice for all builds.
2662+
2663+Running make distcheck will run the test suites in those parts of the
2664+system that have them, and will refuse to package if any tests fail. That
2665+is, in general, the intended behaviour: we don't want to be distributing
2666+packages that don't work. However, FontAnvil's test suite is a work in
2667+progress. There are longstanding issues that cause some tests to fail; we
2668+don't want to remove those tests because they're an important guide to
2669+things that still need to be fixed; but they are basically harmless and
2670+should not impair releasing the entire project. Numerical issues in
2671+FontAnvil also cause some generated fonts to fail the strict validation of
2672+\texttt{fontlint.pe}, and that can cause several other parts of the system
2673+to fail testing.
2674+
2675+The Tsukurimashou build system in general is intended to work on a wide
2676+variety of Unix-like systems; that is part of the point of using Autotools.
2677+However, the distribution packaging workflow in particular is not as
2678+thoroughly tested on a wide range of systems as the ordinary build process,
2679+and it may not work well on systems much different from my Slackware Linux
2680+installation.
2681+
2682+To build a distribution of the entire project: start by configuring for a
2683+complete build, with all the font styles, features, character coverage, and
2684+parasites enabled. Do a ``make download'' to be sure all the necessary
2685+Unicode data is in place. Then run the complete build, in the source tree
2686+(not VPATH!). This should create usable and up-to-date versions of all the
2687+files that will eventually be distributed.
2688+
2689+To run ``make distcheck'' for the entire project and have it work, it is
2690+necessary that the invocation of configure \emph{inside} distcheck's build
2691+process be one that will allow distcheck's build process to run and
2692+distcheck's invocation of the test suite to pass. That requires disabling
2693+the tests we expect to fail. Use the following command line.
2694+
2695+\begin{verbatim}
2696+make DISTCHECK_CONFIGURE_FLAGS='FONTLINT_FLAGS="-w 2,3,5,23"'
2697+ distcheck_hack=0.5pre distcheck
2698+\end{verbatim}
2699+
2700+Cutting and pasting from the PDF file will probably not work
2701+because of the use of typographic quotation marks in this manual; you must
2702+edit them into ASCII quotation marks compatible with your shell.
2703+
2704+The DISTCHECK\_CONFIGURE\_FLAGS variable passed to make specifies a command
2705+line fragment that distcheck will use when invoking configure. The
2706+FONTLINT\_FLAGS variable (inside DISTCHECK\_CONFIGURE\allowbreak\_FLAGS)
2707+specifies
2708+error codes associated with FontAnvil's numerical problems, changing them
2709+into warnings instead of errors, so that they will not cause test suite
2710+failures.
2711+
2712+There are other problems beyond fontlint errors in FontAnvil's own test
2713+suite, overridden by the distcheck\_hack variable (outside
2714+DISTCHECK\allowbreak\_CONFIGURE\_FLAGS). This variable must be set to the
2715+current version number of the enclosed FontAnvil sources in order to take
2716+effect, so that the overrides cannot be accidentally applied to other
2717+releases without a deliberate intention to do so.
2718+
2719+A standalone distribution of one of the parasite packages, that is,
2720+a package that can be used without the rest of Tsukurimashou, will usually
2721+need to contain some files that would be automatically generated (or at least
2722+copied) when building the whole project. For instance, the basic Metapost
2723+infrastructure code for generating fonts needs to be included in every
2724+package, but in a source control checkout there should be only one copy of
2725+it, and parasite packages automatically copy the master version to
2726+themselves when it is updated. Getting this right in a standalone package
2727+is a bit tricky.
2728+
2729+To build a standalone distribution of a parasite package, start by building
2730+a complete version inside the project source tree. Run configure in the
2731+parasite's directory with -{}-enable-parasite=yes (or without this option,
2732+because it should be the default), and build. Then run configure again, with
2733+-{}-enable-parasite=no and without doing a ``make clean.'' After that it
2734+should be possible to do ``make distcheck'' and have it create a working
2735+standalone package. Use the test-overriding options described for the
2736+whole-project package above, as necessary to get distcheck to stop
2737+complaining.
2738+
2739+Once a standalone package is built, it should be possible to use it, and
2740+generate further distribution packages from it, without further reference to
2741+the rest of the Tsukurimashou sources, though stuff like rebuilding the
2742+Icemap-managed data tables will obviously require the relevant software.
2743+
2744+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2745+
27962746 \blsubsection{ツールの文書化}{Tool documentation}
27972747
27982748 There are a number of scripts included in the \texttt{tools/} subdirectory.
@@ -2815,6 +2765,21 @@
28152765 exceptions and special cases included to make it do the right thing with
28162766 macros defined in multiple places as a result of style overrides, and so on.
28172767
2768+\item \texttt{autolr}: automatically generate framework code for kanji that
2769+are left-right combinations of existing components. Note that the code
2770+generated by this utility will in general \emph{not} be usable as is; it is
2771+intended only as a starting point for human editing, to automate the
2772+repetitive work of getting character codes properly entered in decimal and
2773+hex, and so on. Run it with four arguments, from the root of the
2774+Tsukurimashou source tree: the (single character) component to put on the
2775+left; the prefix of the IDSgrep EIDS for dictionary entries with that
2776+component on the left; the (decimal numeric) X-coordinate for the division
2777+between the left and right sides; and the (decimal numeric) amount of overlap.
2778+The utility automatically runs IDSgrep to search for kanji with the
2779+specified structure and not already in Tsukurimashou, and generates to
2780+standard output some Metapost code that can be usefully edited to describe
2781+the new characters.
2782+
28182783 \item \texttt{build-plot}: generate a plot (using GNUplot, which is
28192784 required) of the current progress of a full build. This was hacked in at
28202785 the last minute to fill a specific need during the rather hurried
--- trunk/fontanvil/Makefile.am (revision 733)
+++ trunk/fontanvil/Makefile.am (revision 734)
@@ -53,7 +53,7 @@
5353
5454 # SILENT BUILD BLINKENLIGHTS
5555
56-TSU_V_REDIR=$(if $(AM_V_at),>& /dev/null)
56+TSU_V_REDIR=$(if $(AM_V_at),> /dev/null 2>&1)
5757
5858 if COND_COLOUR
5959 escchar:=$(strip $(shell echo x | tr 'x' '\033'))
@@ -236,8 +236,7 @@
236236 # "Makefile" was used before we had things we wanted to include for real
237237 # BUILT_SOURCES = Makefile
238238 BUILT_SOURCES = \
239- fontanvil/feascan.c fontanvil/feascan.h \
240- $(ICEMAP_INPUTS:.im=.c) $(ICEMAP_INPUTS:.im=.h)
239+ fontanvil/feascan.c fontanvil/feascan.h
241240
242241 bin_PROGRAMS = fontanvil/fontanvil
243242
@@ -405,32 +404,38 @@
405404 download:
406405 $(top_srcdir)/tools/dlunicode @UNICODE_URL@
407406
408-if COND_DOWNLOAD
409-
410-dat/Unihan_OtherMappings.txt: download
411-
412-endif
413-
414407 if COND_ICEMAP
415408
416-%.h:%.im $(ICEMAP)
417- $(TSU_V_ICE)'$(ICEMAP)' -H$@ -C$(patsubst %.h,%.c,$@) $< $(TSU_V_REDIR)
409+fontanvil/hinttab.h fontanvil/hinttab.c @grouped@: \
410+ fontanvil/hinttab.im $(filter-out no,$(ICEMAP))
411+ $(TSU_V_ICE)'$(ICEMAP)' \
412+ -H$(patsubst %.c,%.h,$(patsubst $(VPATH)/%,%,$@)) \
413+ -C$(patsubst %.h,%.c,$(patsubst $(VPATH)/%,%,$@)) \
414+ $< $(TSU_V_REDIR)
418415
419-fontanvil/hinttab.h: fontanvil/hinttab.im
420-fontanvil/hinttab.c: fontanvil/hinttab.h
416+fontanvil/macenctab.h fontanvil/macenctab.c @grouped@: \
417+ fontanvil/macenctab.im $(filter-out no,$(ICEMAP))
418+ $(TSU_V_ICE)'$(ICEMAP)' \
419+ -H$(patsubst %.c,%.h,$(patsubst $(VPATH)/%,%,$@)) \
420+ -C$(patsubst %.h,%.c,$(patsubst $(VPATH)/%,%,$@)) \
421+ $< $(TSU_V_REDIR)
421422
422-fontanvil/macenctab.h: fontanvil/macenctab.im
423-fontanvil/macenctab.c: fontanvil/macenctab.h
424-
425-fontanvil/nonmactab.h: fontanvil/nonmactab.im \
423+fontanvil/nonmactab.h fontanvil/nonmactab.c @grouped@: \
424+ fontanvil/nonmactab.im $(filter-out no,$(ICEMAP)) \
426425 dat/texbase.dat dat/gb2312.dat dat/glyphlist.txt
427426 $(AM_V_at)if test '!' "x$(VPATH)" = "x" ; then \
428- cp $(mvp)/dat/glyphlist.txt dat/ ; fi
429- $(TSU_V_ICE)'$(ICEMAP)' -H$@ -C$(patsubst %.h,%.c,$@) $< $(TSU_V_REDIR)
430-fontanvil/nonmactab.c: fontanvil/nonmactab.h
427+ ( cp $(mvp)/dat/glyphlist.txt dat/ || true ) ; fi
428+ $(TSU_V_ICE)'$(ICEMAP)' \
429+ -H$(patsubst %.c,%.h,$(patsubst $(VPATH)/%,%,$@)) \
430+ -C$(patsubst %.h,%.c,$(patsubst $(VPATH)/%,%,$@)) \
431+ $< $(TSU_V_REDIR)
431432
432-fontanvil/unicodelib.h: fontanvil/unicodelib.im
433-fontanvil/unicodelib.c: fontanvil/unicodelib.h
433+fontanvil/unicodelib.h fontanvil/unicodelib.c @grouped@: \
434+ fontanvil/unicodelib.im $(filter-out no,$(ICEMAP))
435+ $(TSU_V_ICE)'$(ICEMAP)' \
436+ -H$(patsubst %.c,%.h,$(patsubst $(VPATH)/%,%,$@)) \
437+ -C$(patsubst %.h,%.c,$(patsubst $(VPATH)/%,%,$@)) \
438+ $< $(TSU_V_REDIR)
434439
435440 if COND_KPSEWHICH
436441 dat/8r.enc: @eightrenc@
@@ -451,8 +456,14 @@
451456 $(AM_V_at)'$(PERL)' -n \
452457 -e 'printf "%02X%02X\t%s\n",$$2+161,$$3+161,$$1 ' \
453458 -e 'if /U\+([0-9a-f]{4})\tkGB0\t(\d\d)(\d\d)/i;' $< > $@
459+
454460 endif
455461
462+# additional dependencies that Autotools doesn't seem to pick up in a
463+# fresh version-control checkout
464+
465+fontanvil/encoding.o: fontanvil/nonmactab.h
466+
456467 ############################################################################
457468
458469 # PE SCRIPTS
@@ -478,7 +489,7 @@
478489
479490 # PDF DOCUMENTATION
480491
481-doc/fontanvil.pdf: $(texfiles) doc/mitsuba.cls \
492+doc/fontanvil.pdf: $(texfiles) $(abs_builddir)/doc/mitsuba.cls \
482493 doc/quixote-dore.jpg doc/quixote-daumier.jpg
483494 $(AM_V_at)rm -f fontanvil.aux
484495 $(AM_V_at)if test '!' "$(realpath $(mvp)/doc)" = \
@@ -566,9 +577,9 @@
566577
567578 if COND_PARASITE
568579
569-doc/mitsuba.cls: ../mitsuba/mitsuba.cls
580+$(abs_builddir)/doc/mitsuba.cls: ../mitsuba/mitsuba.cls
570581 $(MKDIR_P) doc
571- $(TSU_V_CP) cp $< $@
582+ $(TSU_V_CP) cp $(mvp)/../mitsuba/mitsuba.cls $@
572583
573584 m4/%.m4: ../m4/%.m4
574585 $(TSU_V_CP) cp $< $@
@@ -585,6 +596,7 @@
585596 m4/tsu_bad_paths.m4: ../m4/tsu_bad_paths.m4
586597 m4/tsu_colourise.m4: ../m4/tsu_colourise.m4
587598 m4/tsu_fix_makefile.m4: ../m4/tsu_fix_makefile.m4
599+m4/tsu_grouped_targets.m4: ../m4/tsu_grouped_targets.m4
588600
589601 dat/UnicodeData.txt: $(wildcard ../idsgrep/UnicodeData.txt)
590602 $(MKDIR_P) dat
@@ -594,6 +606,14 @@
594606 test-driver: ../test-driver
595607 $(TSU_V_CP) cp $< $@
596608
609+else
610+
611+$(abs_builddir)/doc/mitsuba.cls: doc/mitsuba.cls
612+ $(MKDIR_P) doc
613+ $(AM_V_at)if test '!' "$(realpath $(mvp)/doc)" = \
614+ "$(realpath $(abs_builddir)/doc)" ; then \
615+ cp $(mvp)/doc/mitsuba.cls $(abs_builddir)/doc/ ; fi
616+
597617 endif
598618
599619 ############################################################################
--- trunk/fontanvil/configure.ac (revision 733)
+++ trunk/fontanvil/configure.ac (revision 734)
@@ -138,15 +138,15 @@
138138 AC_CONFIG_MACRO_DIR([m4])
139139 AC_CANONICAL_BUILD
140140 AC_CANONICAL_HOST
141-AC_REVISION([$Id: configure.ac 8799 2021-04-24 14:18:02Z mskala $])
142-AC_COPYRIGHT([Copyright (C) 2014, 2015 Matthew Skala])
143-AC_SUBST([release_date],["December 8, 2015"])
141+AC_REVISION([$Id: configure.ac 9086 2021-06-29 17:48:34Z mskala $])
142+AC_COPYRIGHT([Copyright (C) 2014, 2015, 2021 Matthew Skala])
143+AC_SUBST([release_date],["July 1, 2021"])
144144 # this must be early so it will happen before depfiles
145145 TSU_FIX_MAKEFILE([],
146146 [if test '!' "x$ICEMAP" = "x" ; then "$PERL" -i -pe \
147147 's/^(@<:@a-z\-@:>@+:) (\$\(BUILT_SOURCES\))/'\
148148 '\1\n\t@\$(MAKE) -q \2 || \$(MAKE) \$(AM_MAKEFLAGS) \2/;' Makefile ; fi],
149- [ICEMAP=$ICEMAP])
149+ [])
150150 AM_SILENT_RULES
151151 AC_USE_SYSTEM_EXTENSIONS
152152 #
@@ -475,6 +475,7 @@
475475 # Checks for system services
476476 #
477477 AC_SYS_LONG_FILE_NAMES
478+TSU_GROUPED_TARGETS([have_grouped_targets=yes],[have_grouped_targets=no])
478479 AX_AM_JOBSERVER
479480 AS_IF([test '!' "x$KPSEWHICH" = "x"],[eightrenc=`"$KPSEWHICH" 8r.enc`])
480481 AC_SUBST([eightrenc])
@@ -499,11 +500,11 @@
499500 AS_IF([test "x$enable_debug" = xyes],
500501 [CFLAGS="$CFLAGS -g -O0" ; CPPFLAGS="$CPPFLAGS -g -O0"])
501502 #
502-AC_ARG_ENABLE([download],
503- [AS_HELP_STRING([--enable-download=[yes|no]],
504- [automatically download Unicode data from UNICODE_URL [no]])],
505- [],
506- [enable_download=no])
503+AC_ARG_ENABLE([icemap],
504+ [AS_HELP_STRING([--enable-icemap],
505+ [(re-)generate table code with Icemap [auto]])],
506+ [],
507+ [enable_icemap=auto])
507508 #
508509 AC_ARG_ENABLE([parasite],
509510 [AS_HELP_STRING([--enable-parasite=[yes|no|auto]],
@@ -526,7 +527,17 @@
526527 [],[tsu_colour=no])
527528 AM_CONDITIONAL([COND_COLOUR],[test '!' "$tsu_colour" = no])
528529 #
529-AM_CONDITIONAL([COND_DOWNLOAD],[test '!' "$enable_download" = no])
530+AS_IF([test "x$enable_icemap" = "xauto"],
531+ [AC_MSG_CHECKING([whether to automatically enable Icemap])
532+ enable_icemap=no
533+ m4_foreach_w([imcheckpath],[hinttab macenctab nonmactab unicodelib],[
534+ AS_IF([test '!' -s fontanvil/imcheckpath.c],[enable_icemap=yes])
535+ AS_IF([test '!' -s fontanvil/imcheckpath.h],[enable_icemap=yes])
536+ ])
537+ AS_IF([pwd | $GREP -q _build/sub],[enable_icemap=no])
538+ AC_MSG_RESULT([$enable_icemap])
539+ ])
540+AM_CONDITIONAL([COND_ICEMAP],[test '!' "$enable_icemap" = no])
530541 #
531542 AS_IF([test "x$enable_silent_rules" = "x"],
532543 [enable_silent_rules=yes
@@ -547,14 +558,12 @@
547558 AM_CONDITIONAL([COND_PARASITE],[test "x$enable_parasite" = "xyes"])
548559 AM_COND_IF([COND_PARASITE],
549560 [AC_MSG_RESULT([yes])
550- AS_IF([test "x$ICEMAP" = "x"],
561+ AS_IF([test "x$ICEMAP" = "x" && test '!' "x$enable_icemap" = "xno"],
551562 [AC_MSG_WARN([Depending on locally-built Icemap])
552- ICEMAP=$PWD/../icemap/icemap])
563+ ICEMAP=`realpath $PWD/../icemap/icemap`])
553564 parasite=yes],
554565 [parasite=no])
555566 AC_SUBST([parasite])
556-AS_IF([test "x$ICEMAP" = "x"],[ICEMAP=no])
557-AM_CONDITIONAL([COND_ICEMAP],[test '!' "x$ICEMAP" = "xno"])
558567 #
559568 ############################################################################
560569 #
@@ -613,12 +622,6 @@
613622 AS_ECHO_N([" http://gnu.org/software/automake/"])],
614623 [TSU_COLOURISE([yes],[2])])
615624 AS_ECHO([])
616- AS_ECHO_N(["icemap "])
617- AS_IF([test "x$ICEMAP" = "x"],
618- [TSU_COLOURISE([no],[1])
619- AS_ECHO_N([" http://tsukurimashou.osdn.jp/"])],
620- [TSU_COLOURISE([yes],[2])])
621- AS_ECHO([])
622625 AS_ECHO_N(["lex "])
623626 AS_IF([$LEX --version > /dev/null 2> /dev/null],
624627 [TSU_COLOURISE([yes],[2])],
@@ -650,6 +653,12 @@
650653 AS_ECHO_N([" https://tsukurimashou.osdn.jp/"])],
651654 [TSU_COLOURISE([yes],[2])])])
652655 AS_ECHO([])
656+AS_ECHO_N(["icemap "])
657+ AS_IF([test "x$ICEMAP" = "x"],
658+ [TSU_COLOURISE([no],[3])
659+ AS_ECHO_N([" https://tsukurimashou.osdn.jp/"])],
660+ [TSU_COLOURISE([yes],[2])])
661+ AS_ECHO([])
653662 AS_ECHO_N(["libjpeg "])
654663 AS_IF([test "x$with_libjpeg" = "xno"],
655664 [TSU_COLOURISE([no],[3])
@@ -711,6 +720,18 @@
711720 [TSU_COLOURISE([yes],[2])])
712721 AS_ECHO([])
713722 AS_ECHO([])
723+AS_IF([test '!' "x$enable_jobserver" = "xno"],
724+ [AS_IF([test "x$have_grouped_targets" = "xno"],
725+ [AS_ECHO([])
726+ AS_ECHO(["Warning: parallel build jobs are enabled, but your Make does not seem"])
727+ AS_ECHO(["to support the \"grouped targets\" feature introduced in GNU Make 4.3."])
728+ AS_ECHO(["In this situation there is a race condition that may possibly cause"])
729+ AS_ECHO(["corruption of files if two simultaneous build jobs attempt to invoke"])
730+ AS_ECHO(["the same Make recipe at the same time. In practice, the risk of file"])
731+ AS_ECHO(["corruption is very small, so this configuration is allowed; but it"])
732+ AS_ECHO(["would be preferable to upgrade Make to a version with the \"grouped"])
733+ AS_ECHO(["targets\" feature to remove doubt; and you will probably need to do"])
734+ AS_ECHO(["that in order to successfully build distribution packages."])])])
714735 AS_IF([test "x$has_bad_paths" = "xyes"],
715736 [AS_ECHO([])
716737 AS_ECHO(["The following pathnames contain illegal characters, such as spaces:"])
--- trunk/fontanvil/m4/tsu_grouped_targets.m4 (nonexistent)
+++ trunk/fontanvil/m4/tsu_grouped_targets.m4 (revision 734)
@@ -0,0 +1,52 @@
1+#
2+# SYNOPSIS
3+#
4+# TSU_GROUPED_TARGETS([run-if-true],[run-if-false])
5+#
6+# DESCRIPTION
7+#
8+# Check whether Make supports invoking a recipe only once to build
9+# multiple targets with the "grouped targets" feature and "&:" syntax.
10+# This was a feature introduced in GNU Make 4.3, but we are testing
11+# the feature itself rather than the Make version.
12+#
13+# If Make supports grouped targets, then the run-if-true code is
14+# executed. Otherwise, the run-if-false code is executed.
15+#
16+# The substitution variable "grouped" is set to "&" if Make supports
17+# grouped targets and to the empty string if not; this allows use of
18+# the syntax "@grouped@:" to write recipes that will be grouped if
19+# possible and not alarming to Make when the feature doesn't exist.
20+#
21+# LICENSE
22+#
23+# This macro is released to the public domain by its author,
24+# Matthew Skala <mskala@ansuz.sooke.bc.ca>.
25+
26+#serial 1
27+
28+AC_DEFUN([TSU_GROUPED_TARGETS], [
29+ AC_REQUIRE([AC_PROG_GREP])
30+ AC_REQUIRE([AC_PROG_MAKE_SET])
31+ AC_MSG_CHECKING([whether Make supports grouped targets])
32+ : "${TMPDIR:=/tmp}"
33+ {
34+ dir=`(umask 077 && mktemp -d "$TMPDIR/fooXXXXXX") 2>/dev/null` &&
35+ test -d "$dir"
36+ } || {
37+ dir=$TMPDIR/foo$$-$RANDOM
38+ (umask 077 && mkdir "$dir")
39+ }
40+ echo 'foo bar &: Makefile' > $dir/Makefile
41+ echo ' @echo YEAH' >> $dir/Makefile
42+ _make_gt_result=`$am_make -C $dir foo bar | $GREP YEAH`
43+ rm -rf $dir
44+ AC_SUBST([grouped],[])
45+ AS_IF([test "x$_make_gt_result" = "xYEAH"],
46+ [AC_MSG_RESULT([yes])
47+ grouped='&'
48+ $1],
49+ [AC_MSG_RESULT([no])
50+ grouped=''
51+ $2])
52+])
--- trunk/fontanvil/test/doccov.pl (revision 733)
+++ trunk/fontanvil/test/doccov.pl (revision 734)
@@ -1,6 +1,6 @@
11 #!/usr/bin/perl
22
3-exit(77) if $ENV{'distcheck_hack'} eq "0.4";
3+exit(77) if $ENV{'distcheck_hack'} eq "0.5pre";
44
55 $fail=0;
66
--- trunk/genjimon/Makefile.am (revision 733)
+++ trunk/genjimon/Makefile.am (revision 734)
@@ -61,7 +61,7 @@
6161
6262 # SILENT BUILD BLINKENLIGHTS
6363
64-TSU_V_REDIR=$(if $(AM_V_at),>& /dev/null)
64+TSU_V_REDIR=$(if $(AM_V_at),> /dev/null 2>&1)
6565
6666 if COND_COLOUR
6767 escchar:=$(strip $(shell echo x | tr 'x' '\033'))
--- trunk/genjimon/configure.ac (revision 733)
+++ trunk/genjimon/configure.ac (revision 734)
@@ -2,7 +2,7 @@
22
33 #
44 # Configuration source for Genjimon fonts
5-# Copyright (C) 2011, 2012, 2017 Matthew Skala
5+# Copyright (C) 2011, 2012, 2017, 2021 Matthew Skala
66 #
77 # This program is free software: you can redistribute it and/or modify
88 # it under the terms of the GNU General Public License as published by
@@ -197,9 +197,9 @@
197197 parallel-tests silent-rules])
198198 AC_CONFIG_SRCDIR([genjimon-black.mp])
199199 AC_CONFIG_MACRO_DIR([m4])
200-AC_REVISION([$Id: configure.ac 8721 2021-03-28 15:29:20Z mskala $])
201-AC_COPYRIGHT([Copyright (C) 2011, 2012 Matthew Skala])
202-AC_SUBST([release_date],["March 7, 2013"])
200+AC_REVISION([$Id: configure.ac 9071 2021-06-27 03:00:17Z mskala $])
201+AC_COPYRIGHT([Copyright (C) 2011, 2012, 2021 Matthew Skala])
202+AC_SUBST([release_date],["July 1, 2021"])
203203 # this must be early so it will happen before depfiles
204204 TSU_FIX_MAKEFILE
205205 AM_SILENT_RULES
--- trunk/genjimon/genjimon.tex (revision 733)
+++ trunk/genjimon/genjimon.tex (revision 734)
@@ -2,9 +2,9 @@
22
33 \usepackage{bigstrut}
44
5-\title{Genjimon fonts, v0.2}
5+\title{Genjimon fonts, v0.3pre}
66 \author{Matthew Skala}
7-\date{October 2, 2012}
7+\date{July 1, 2021}
88
99 \newfontface\genjiface[Scale=1.1,ExternalLocation]{GenjimonMedium.ttf}
1010 \newcommand\genji[1]{{\genjiface #1}}
--- trunk/icemap/Makefile.am (revision 733)
+++ trunk/icemap/Makefile.am (revision 734)
@@ -52,7 +52,7 @@
5252
5353 # SILENT BUILD BLINKENLIGHTS
5454
55-TSU_V_REDIR=$(if $(AM_V_at),>& /dev/null)
55+TSU_V_REDIR=$(if $(AM_V_at),> /dev/null 2>&1)
5656
5757 if COND_COLOUR
5858 escchar:=$(strip $(shell echo x | tr 'x' '\033'))
--- trunk/icemap/configure.ac (revision 733)
+++ trunk/icemap/configure.ac (revision 734)
@@ -122,9 +122,9 @@
122122 AC_CONFIG_SRCDIR([icemap.c])
123123 AC_CONFIG_HEADERS([config.h])
124124 AC_CONFIG_MACRO_DIR([m4])
125-AC_REVISION([$Id: configure.ac 8755 2021-04-06 02:23:52Z mskala $])
126-AC_COPYRIGHT([Copyright (C) 2014 Matthew Skala])
127-AC_SUBST([release_date],["November 1, 2014"])
125+AC_REVISION([$Id: configure.ac 9071 2021-06-27 03:00:17Z mskala $])
126+AC_COPYRIGHT([Copyright (C) 2014, 2021 Matthew Skala])
127+AC_SUBST([release_date],["July 1, 2021"])
128128 # this must be early so it will happen before depfiles
129129 TSU_FIX_MAKEFILE
130130 AM_SILENT_RULES
--- trunk/icemap/icemap.tex (revision 733)
+++ trunk/icemap/icemap.tex (revision 734)
@@ -25,7 +25,7 @@
2525 \vspace*{1in}
2626
2727 Icemap user manual\\
28-Copyright \copyright\ 2015\quad Matthew Skala
28+Copyright \copyright\ 2015, 2021\quad Matthew Skala
2929
3030 \vspace{\baselineskip}
3131
--- trunk/idsgrep/Makefile.am (revision 733)
+++ trunk/idsgrep/Makefile.am (revision 734)
@@ -52,7 +52,7 @@
5252
5353 # SILENT BUILD BLINKENLIGHTS
5454
55-TSU_V_REDIR=$(if $(AM_V_at),>& /dev/null)
55+TSU_V_REDIR=$(if $(AM_V_at),> /dev/null 2>&1)
5656
5757 if COND_COLOUR
5858 escchar:=$(strip $(shell echo x | tr 'x' '\033'))
@@ -316,19 +316,12 @@
316316 download-ud:
317317 -wget -N -nd @UNICODE_URL@UNIDATA/UnicodeData.txt
318318
319-if COND_DOWNLOAD
320-EastAsianWidth.txt: download-eaw
321-
322-UnicodeData.txt: download-ud
323-endif
324-
325319 cook.o: widthtab.h
326320
327321 if COND_ICEMAP
328-widthtab.h: widthtab.im $(ICEMAP) EastAsianWidth.txt UnicodeData.txt
322+widthtab.c widthtab.h @grouped@: \
323+ widthtab.im $(ICEMAP) EastAsianWidth.txt UnicodeData.txt
329324 $(ICEMAP) $<
330-
331-widthtab.c: widthtab.h
332325 endif
333326
334327 ############################################################################
@@ -362,6 +355,7 @@
362355 m4/tsu_bad_paths.m4: ../m4/tsu_bad_paths.m4
363356 m4/tsu_colourise.m4: ../m4/tsu_colourise.m4
364357 m4/tsu_fix_makefile.m4: ../m4/tsu_fix_makefile.m4
358+m4/tsu_grouped_targets.m4: ../m4/tsu_grouped_targets.m4
365359
366360 UnicodeData.txt: $(wildcard ../fontanvil/dat/UnicodeData.txt)
367361 $(TSU_V_CP) if test -s ../fontanvil/dat/UnicodeData.txt ; \
--- trunk/idsgrep/configure.ac (revision 733)
+++ trunk/idsgrep/configure.ac (revision 734)
@@ -165,9 +165,9 @@
165165 AC_CONFIG_SRCDIR([idsgrep.c])
166166 AC_CONFIG_HEADERS([config.h])
167167 AC_CONFIG_MACRO_DIR([m4])
168-AC_REVISION([$Id: configure.ac 8799 2021-04-24 14:18:02Z mskala $])
168+AC_REVISION([$Id: configure.ac 9089 2021-06-30 16:44:07Z mskala $])
169169 AC_COPYRIGHT([Copyright (C) 2012, 2013, 2014, 2020, 2021 Matthew Skala])
170-AC_SUBST([release_date],["March 29, 2021"])
170+AC_SUBST([release_date],["July 1, 2021"])
171171 # this must be early so it will happen before depfiles
172172 TSU_FIX_MAKEFILE
173173 AM_SILENT_RULES
@@ -196,7 +196,6 @@
196196 AS_IF([test "x$ICEMAP" = "x"],
197197 [AC_PATH_PROG([ICEMAP],[icemap],[],[$PATH:$PWD/../icemap])])
198198 AS_IF([test "x$ICEMAP" = "xno"],[ICEMAP=])
199-AM_CONDITIONAL([COND_ICEMAP],[test '!' "x$ICEMAP" = "x"])
200199 AC_PATH_PROG([ICONV],[iconv])
201200 AC_ARG_VAR([KLEKNEV],[Kleknev])
202201 AS_IF([test "x$KLEKNEV" = "x"],
@@ -272,6 +271,7 @@
272271 # Checks for system services
273272 #
274273 AC_SYS_LONG_FILE_NAMES
274+TSU_GROUPED_TARGETS([have_grouped_targets=yes],[have_grouped_targets=no])
275275 AX_AM_JOBSERVER
276276 #
277277 ############################################################################
@@ -292,6 +292,12 @@
292292 [enable_gcov=no])
293293 AM_CONDITIONAL([COND_GCOV],[test '!' "$enable_gcov" = no])
294294 #
295+AC_ARG_ENABLE([icemap],
296+ [AS_HELP_STRING([--enable-icemap],
297+ [(re-)generate table code with Icemap [auto]])],
298+ [],
299+ [enable_icemap=auto])
300+#
295301 AC_ARG_WITH([chise-ids],
296302 [AS_HELP_STRING([--with-chise-ids=PATH],
297303 [CHISE IDS database [auto]])],
@@ -434,6 +440,17 @@
434440 [edict_decomp=])
435441 AC_SUBST([edict_decomp])
436442 #
443+AS_IF([test "x$enable_icemap" = "xauto"],
444+ [AC_MSG_CHECKING([whether to automatically enable Icemap])
445+ enable_icemap=no
446+ m4_foreach_w([imcheckpath],[widthtab.c widthtab.h],[
447+ AS_IF([test '!' -s imcheckpath],[enable_icemap=yes])
448+ ])
449+ AS_IF([pwd | $GREP -q _build/sub],[enable_icemap=no])
450+ AC_MSG_RESULT([$enable_icemap])
451+ ])
452+AM_CONDITIONAL([COND_ICEMAP],[test '!' "$enable_icemap" = no])
453+#
437454 AC_ARG_ENABLE([parasite],
438455 [AS_HELP_STRING([--enable-parasite=[yes|no|auto]],
439456 [build as a parasite [auto]])],
--- trunk/idsgrep/m4/tsu_grouped_targets.m4 (nonexistent)
+++ trunk/idsgrep/m4/tsu_grouped_targets.m4 (revision 734)
@@ -0,0 +1,52 @@
1+#
2+# SYNOPSIS
3+#
4+# TSU_GROUPED_TARGETS([run-if-true],[run-if-false])
5+#
6+# DESCRIPTION
7+#
8+# Check whether Make supports invoking a recipe only once to build
9+# multiple targets with the "grouped targets" feature and "&:" syntax.
10+# This was a feature introduced in GNU Make 4.3, but we are testing
11+# the feature itself rather than the Make version.
12+#
13+# If Make supports grouped targets, then the run-if-true code is
14+# executed. Otherwise, the run-if-false code is executed.
15+#
16+# The substitution variable "grouped" is set to "&" if Make supports
17+# grouped targets and to the empty string if not; this allows use of
18+# the syntax "@grouped@:" to write recipes that will be grouped if
19+# possible and not alarming to Make when the feature doesn't exist.
20+#
21+# LICENSE
22+#
23+# This macro is released to the public domain by its author,
24+# Matthew Skala <mskala@ansuz.sooke.bc.ca>.
25+
26+#serial 1
27+
28+AC_DEFUN([TSU_GROUPED_TARGETS], [
29+ AC_REQUIRE([AC_PROG_GREP])
30+ AC_REQUIRE([AC_PROG_MAKE_SET])
31+ AC_MSG_CHECKING([whether Make supports grouped targets])
32+ : "${TMPDIR:=/tmp}"
33+ {
34+ dir=`(umask 077 && mktemp -d "$TMPDIR/fooXXXXXX") 2>/dev/null` &&
35+ test -d "$dir"
36+ } || {
37+ dir=$TMPDIR/foo$$-$RANDOM
38+ (umask 077 && mkdir "$dir")
39+ }
40+ echo 'foo bar &: Makefile' > $dir/Makefile
41+ echo ' @echo YEAH' >> $dir/Makefile
42+ _make_gt_result=`$am_make -C $dir foo bar | $GREP YEAH`
43+ rm -rf $dir
44+ AC_SUBST([grouped],[])
45+ AS_IF([test "x$_make_gt_result" = "xYEAH"],
46+ [AC_MSG_RESULT([yes])
47+ grouped='&'
48+ $1],
49+ [AC_MSG_RESULT([no])
50+ grouped=''
51+ $2])
52+])
--- trunk/kleknev/Makefile.am (revision 733)
+++ trunk/kleknev/Makefile.am (revision 734)
@@ -52,7 +52,7 @@
5252
5353 # SILENT BUILD BLINKENLIGHTS
5454
55-TSU_V_REDIR=$(if $(AM_V_at),>& /dev/null)
55+TSU_V_REDIR=$(if $(AM_V_at),> /dev/null 2>&1)
5656
5757 if COND_COLOUR
5858 escchar:=$(strip $(shell echo x | tr 'x' '\033'))
@@ -152,7 +152,7 @@
152152 kleknev_SOURCES = kleknev.c kleknev.h wrapper.c
153153 kleknev_argo_SOURCES = kleknev-argo.c kleknev.h wrapper.c
154154
155-# man1_MANS = kleknev.1 kleknev-argo.1
155+dist_man1_MANS = kleknev.1 # kleknev-argo.1
156156
157157 ############################################################################
158158
--- trunk/kleknev/configure.ac (revision 733)
+++ trunk/kleknev/configure.ac (revision 734)
@@ -122,9 +122,9 @@
122122 AC_CONFIG_SRCDIR([kleknev.c])
123123 AC_CONFIG_HEADERS([config.h])
124124 AC_CONFIG_MACRO_DIR([m4])
125-AC_REVISION([$Id: configure.ac 8755 2021-04-06 02:23:52Z mskala $])
126-AC_COPYRIGHT([Copyright (C) 2013 Matthew Skala])
127-AC_SUBST([release_date],["March 7, 2013"])
125+AC_REVISION([$Id: configure.ac 9071 2021-06-27 03:00:17Z mskala $])
126+AC_COPYRIGHT([Copyright (C) 2013, 2021 Matthew Skala])
127+AC_SUBST([release_date],["July 1, 2021"])
128128 # this must be early so it will happen before depfiles
129129 TSU_FIX_MAKEFILE
130130 AM_SILENT_RULES
--- trunk/ocr/Makefile.am (revision 733)
+++ trunk/ocr/Makefile.am (revision 734)
@@ -47,7 +47,7 @@
4747
4848 # SILENT BUILD BLINKENLIGHTS
4949
50-TSU_V_REDIR=$(if $(AM_V_at),>& /dev/null)
50+TSU_V_REDIR=$(if $(AM_V_at),> /dev/null 2>&1)
5151
5252 if COND_COLOUR
5353 escchar:=$(strip $(shell echo x | tr 'x' '\033'))
--- trunk/ocr/configure.ac (revision 733)
+++ trunk/ocr/configure.ac (revision 734)
@@ -192,9 +192,9 @@
192192 parallel-tests silent-rules])
193193 AC_CONFIG_SRCDIR([msk-ocra.mp])
194194 AC_CONFIG_MACRO_DIR([m4])
195-AC_REVISION([$Id: configure.ac 8799 2021-04-24 14:18:02Z mskala $])
195+AC_REVISION([$Id: configure.ac 9071 2021-06-27 03:00:17Z mskala $])
196196 AC_COPYRIGHT([public domain])
197-AC_SUBST([release_date],["March 28, 2021"])
197+AC_SUBST([release_date],["July 1, 2021"])
198198 # this must be early so it will happen before depfiles
199199 TSU_FIX_MAKEFILE
200200 AM_SILENT_RULES
--- trunk/ocr/ocr.tex (revision 733)
+++ trunk/ocr/ocr.tex (revision 734)
@@ -13,9 +13,9 @@
1313 \setlength{\parskip}{\baselineskip}
1414 \raggedright
1515
16-\title{OCR-A and OCR-B fonts\\version 0.3}
16+\title{OCR-A and OCR-B fonts\\version 0.4pre}
1717 \author{Matthew Skala}
18-\date{March 28, 2021}
18+\date{July 1, 2021}
1919
2020 \begin{document}
2121 \setmainfont{OCRB.otf}
Show on old repository browser