| This file describes the development environment for Texinfo. | |
| Copyright 2002-2022 Free Software Foundation, Inc. | |
| Copying and distribution of this file, with or without modification, | |
| are permitted in any medium without royalty provided the copyright | |
| notice and this notice are preserved. | |
| The development sources for GNU Texinfo are available through git | |
| at Savannah: | |
| https://savannah.gnu.org/git/?group=texinfo | |
| This distribution uses whatever versions of Automake, Autoconf, and | |
| Gettext are listed in NEWS; usually the latest official releases. If | |
| you are getting the sources from the development repository (or change | |
| configure.ac), you'll need to have these tools installed to (re)build. | |
| You'll also need help2man. If you modify texindex/ti.twjr, you'll need | |
| gawk >= 4.0. All of these programs are available from | |
| http://ftp.gnu.org/gnu. | |
| After getting the development sources, and installing the tools above, | |
| you can run | |
| ./autogen.sh | |
| and then, for example, | |
| ./configure -C CFLAGS='-g' PERL_EXT_CFLAGS='-g' | |
| and then | |
| make | |
| The -C tells configure to cache test results, which usually speeds | |
| things up a bit. | |
| After the initial autogen && configure, simply running make should suffice. | |
| Gettext or help2man not installed do not cause configure to fail, | |
| though configure shows if they were found. This is because a release | |
| does not require those tools. Indeed, both prerequisites and | |
| result files are shipped in a release, such that the tools are only | |
| needed if the prerequisite changed. The tools are needed when building | |
| from developpement sources, however, as result files are not under version | |
| control. Make will fail with an explicit missing command for help2man, | |
| and with a command not found error for a Gettext utility command. | |
| Running make in one particular subdirectory is possible, for example | |
| make -C info. However there are interdependencies between the | |
| subdirectories, notably on gnulib, so if you don't want to run "make", | |
| you may have to run "make -C gnulib/lib" first. | |
| Additionally, make dist may not work until make has been run at least | |
| once, because of rules to create man pages under the man/ directory. | |
| "make dist" will fail if the use of Perl XS extension modules is | |
| disabled and there is no Makefile in the XSParagraph subdirectory. | |
| Using git | |
| --------- | |
| This section is if you have write access to the git repository. | |
| Usually commits to the git repository should include a ChangeLog | |
| entry. Please follow the existing style (the GNU Coding Standards | |
| has a guide). | |
| You can automatically use the contents of the most recent ChangeLog | |
| entry with a git commit hook .git/hooks/prepare-commit-msg | |
| ------------------------------------ | |
| #!/bin/sh | |
| # $1 - file that contains commit log message | |
| # $2 - source of commit message | |
| outfile="$1" | |
| case $2 in | |
| message|template|merge|squash|commit) | |
| ;; | |
| *) | |
| # Use latest ChangeLog entry as commit message | |
| sed -n -e '1,/^\w*$/d' -e '/^[^ ]/q' -e '{s/^ //;p}' ChangeLog >"$outfile" | |
| ;; | |
| esac | |
| ------------------------------------ | |
| When unable to push commits due to other commits being made, please | |
| use "git pull --rebase" (the default for "git pull" complicates the | |
| git history). To deal with conflicts in the ChangeLog, you should | |
| install the git-merge-changelog program. | |
| You can get better output from "git diff" for Texinfo files by putting | |
| the following section in your .gitconfig file: | |
| [diff "texinfo"] | |
| xfuncname = "^(@node .*)$" | |
| This shows which node each change occurred in. | |
| Gnulib | |
| ------ | |
| This distribution uses Gnulib (http://www.gnu.org/software/gnulib) | |
| to share common files. Gnulib files used in Texinfo are checked in to | |
| the repository. A Gnulib directory is setup in two locations, in | |
| the main directory and in tp/Texinfo/XS/. | |
| To update the gnulib files, get a checkout of gnulib in a separate | |
| directory, then run, say | |
| ../gnulib/gnulib-tool --add-import | |
| in your top-level Texinfo directory and | |
| ../../../../gnulib/gnulib-tool --add-import | |
| under tp/Texinfo/XS. (gnulib-tool is in the gnulib source tree.) | |
| The currently-used gnulib modules and other gnulib information are | |
| recorded in gnulib/m4/gnulib-cache.m4. | |
| gnulib-tool --add-import may also be used to add another gnulib module: | |
| ../gnulib/gnulib-tool --add-import other_gnulib_module | |
| After running gnulib-tool --add-import or otherwise adding modules, it is | |
| necessary to check what files were added or removed (e.g., run "git | |
| status -u") and add new files to the repository with "git add". | |
| Add any new generated files (typically gnulib/lib/foo.h from foo.h.in) | |
| to the ignore list in .gitignore. | |
| Subdirectories in repository | |
| ---------------------------- | |
| In addition to the subdirectories listed in README, there is the | |
| following directory in the source control repository: | |
| js/ - Work on enhanced browsing of HTML manuals with JavaScript | |
| infog/ - HTML-Info reader using WebKitGTK library | |
| Finally, the contrib/ directory contains additional files from users | |
| provided for your reading and/or hacking pleasure. They aren't part of | |
| Texinfo proper or maintained by the Texinfo developers. | |
| About running the Texinfo programs from a development source tree: | |
| - Once the distribution is built, you can run the compiled programs | |
| (info, install-info) out of the build tree without special settings; | |
| they don't try to read any installed data files. | |
| - The texi2dvi script and texinfo.tex can be run as-is, since they | |
| are standalone and don't require compilation. For the same reasons, | |
| they are officially updated between full Texinfo releases, at | |
| http://ftpmirror.gnu.org/texinfo. | |
| - Regarding texi2any (aka makeinfo), you can run tp/texi2any.pl | |
| directly. This is the original source file for the program, so it's | |
| convenient to be able to make changes and then run it. | |
| To run the output "tp/texi2any" instead, you can set the environment | |
| variable TEXINFO_DEV_SOURCE to 1. Otherwise, it will try to use | |
| Texinfo's Perl modules in the installed locations. "tp/texi2any" uses | |
| the Perl interpreter found by configure, so you might want to run that | |
| instead of texi2any.pl if it's different to the default interpreter in | |
| your environment. | |
| References for working on various parts of the system: | |
| If you want to delve into making a new backend for the Perl makeinfo, | |
| the documentation in tp/Texinfo/Convert/Converter.pm is a good starting | |
| point, as it describes the existing backends and other places to look. | |
| If you want to delve into texinfo.tex, a thorough plain TeX reference | |
| is available under the GFDL: | |
| TeX by Topic - http://www.eijkhout.net/texbytopic/texbytopic.html | |
| Another book on plain TeX, also available under the GFDL, is a GNU package: | |
| TeX for the Impatient - http://www.gnu.org/software/teximpatient/ | |
| Occasionally you may need to know about the details of the PDF format. | |
| A reference for this is the PDF reference, Sixth Edition, version 1.7, | |
| downloadable at http://www.adobe.com/devnet/pdf/pdf_reference_archive.html | |
| The texindex program is implemented using the TexiWebJR literate | |
| programming system, combining Texinfo and Awk | |
| (https://github.com/arnoldrobbins/texiwebjr). Running "make ti.pdf" | |
| in the texindex/ subdirectory creates the printable form of the | |
| program. All the usual Texinfo output formats are possible. | |
| Steps for making a release (pretest or official): | |
| - When close to official release: | |
| check at latest automake/autoconf/gettext version, and mention in NEWS | |
| (to upgrade gettext, run | |
| gettextize -f --po-dir=po --po-dir=po_document | |
| after installing new version of gettext. | |
| check that this does not actually downgrade files due to files also | |
| being updated from gnulib --add-import) | |
| # Under the top level, and also under tp/Texinfo/XS, which uses | |
| # a separate gnulib import. | |
| gnulib-tool --add-import | |
| 'git status -u' and add untracked files | |
| After upgrading automake/autoconf/gettext, run ./autogen.sh | |
| and/or "autoreconf --verbose --force --install" to update ancilliary | |
| files in build-aux and elsewhere. Check changes before committing. | |
| Use util/srclist-txi for checking files to be copied from gnulib | |
| run all tests with valgrind: | |
| * under info/t, put valgrind in $ginfo, then check t/*.val.log files after | |
| running test suite | |
| * edit install-info/tests/defs.in, uncomment valgrind line and run | |
| config.status to regenerate defs | |
| parsetexi memory leak checks with valgrind | |
| NYTProf profiling for Perl code | |
| * e.g. 'perl -d:NYTProf ../tp/texi2any.pl FILE.texi'. See Devel::NYTProf | |
| man page. | |
| try groff.texinfo from groff source repo. | |
| Check "make ccheck" and "make vcheck" work in "doc/refcard". | |
| process doc/texinfo-tex-test.texi with TeX and check that output is good. | |
| check for C compiler warnings by configuring with | |
| ./configure CFLAGS='-Wall -Wdeclaration-after-statement' \ | |
| PERL_EXT_CFLAGS='-Wall -Wdeclaration-after-statement' | |
| -Wdeclaration-after-statement is useful because a) intermixing | |
| declarations with statements is an easy thing to do accidentally, | |
| b) gcc doesn't warn about it by default, and c) other compilers that | |
| don't support it are still widespread. | |
| Not all compiler warnings have to be fixed, though. | |
| Have a look at the output of "git status -u" to check for files that | |
| should be tracked in git or ignored. | |
| make po-check # update po/POTFILES.in as needed | |
| check indices of Texinfo manuals and check for duplicates (with <1> in Info) | |
| - Official releases only: | |
| make V=1 pdf and fix underfull/overfull boxes. | |
| - Final (easy) checks: | |
| check OpenCSW build reports at | |
| https://buildfarm.opencsw.org/buildbot/waterfall?category=texinfo | |
| Check that translations have been updated, e.g.: | |
| rsync -Lrtzv translationproject.org::tp/latest/texinfo/ po | |
| rsync -Lrtzv translationproject.org::tp/latest/texinfo_document/ \ | |
| po_document # note the trailing slashes in these commands | |
| make | |
| make update-po # both po and po_document needed, build a dist first | |
| Ensure texinfo.tex, texi2dvi, and htmlxref.cnf are updated on ftp.gnu.org. | |
| Ensure TXI_XLATE in doc/Makefile.am matches actual file list. | |
| Check that LINGUAS under po and po_document match actual file list. | |
| Check that TEXINFO_DTD_VERSION has been updated to the next version in | |
| configure.ac if the DTD has been modified since the last release. | |
| See comments in configure.ac, and run (at the top level) make dtd-check. | |
| Check "dist-xz" is in the option list in configure.ac (often removed | |
| for speed when testing). | |
| update version in configure.ac, notice in ChangeLog. | |
| check up to date copyright years in files relevant to --version calls | |
| (tp/texi2any.pl, info/info.c, install-info/install-info.c) | |
| version number in texi2dvi, texi2pdf, txirefcard.tex. | |
| check that texindex version is updated properly | |
| (cd texindex ; rm texindex.awk ; make) | |
| (cd tp && ./maintain/change_perl_modules_version.sh auto) | |
| -- this updates all the version numbers in the Perl modules | |
| (cd tp ; maintain/regenerate_file_lists.pl) # list all test results | |
| - Official releases only: | |
| version and date in NEWS. | |
| version number in txirefcard.tex. | |
| (cd tp && maintain/regenerate_documentlanguages-loc.pl) | |
| -- regenerates tp/Texinfo/Documentlanguages.pm (requires Text::CSV) | |
| one last "git diff" to check release commit looks good | |
| make distcheck | |
| (export MALLOC_CHECK_=2; make distcheck) # repeat until clean | |
| git commit and push | |
| after uploading distribution, | |
| pretest announcement -> bug-texinfo / beebe / platform-testers to try. | |
| bcc coordinator@translationproject.org. | |
| - To do the actual upload: | |
| pkg=texinfo | |
| ver=7.0 | |
| then do one of: | |
| gnupload --to alpha.gnu.org:$pkg $pkg-$ver.tar.xz #pretest | |
| gnupload --to ftp.gnu.org:$pkg $pkg-$ver.tar.{gz,xz} *.diff.xz #official | |
| Use --user option if not using default key | |
| texinfo.tex and texi2dvi should already be up to date, but check. Use | |
| gnupload --replace --to ftp.gnu.org:texinfo texi2dvi | |
| # Official releases only: tag source tree | |
| git tag texinfo-6.6 | |
| git push --tags | |
| # ... set up dtd directory on web pages: | |
| cd $HOME/gnu/www/texinfo/dtd # or wherever webpages checkout is | |
| mkdir $ver && cvs add $ver | |
| cp $tutil/texinfo.dtd $ver | |
| cvs add -kb $ver $ver/texinfo.dtd | |
| cvs commit -m$ver $ver | |
| - When official release is out there ... | |
| update home page (texinfo.html) and commit as needed. | |
| including: | |
| pod2html $txi/Pod-Simple-Texinfo/pod2texi.pl \ | |
| | grep -Fv 'rev="made"' >manual/pod2texi.html | |
| check for http links that should be changed to https - then delete | |
| this item | |
| Build web documentation with | |
| make -C doc wwwdoc-build | |
| Copy documentation files to web checkout with, e.g. | |
| make -C doc \ | |
| wwwdoc-install www_target=../../TEXINFO_WEB_PAGES/texinfo/manual/ | |
| Check for removed files with, e.g. ls -ltu $(www_target)/*/html_node, | |
| followed by cvs rm -f. Likewise, check for added files with | |
| cvs -qn update, followed by cvs add. When done, run cvs commit. | |
| # Official releases only: Contact root@tug.org to update texinfo at tug.org. | |
| # If root@tug.org doesn't reply, can try webmaster@tug.org, | |
| # or (last resort) board@tug.org. | |
| # For official releases: | |
| send announcement to info-gnu, | |
| cc bug-texinfo and bcc coordinator@translationproject.org. | |
| news item at savannah. | |
| # ... post-release, or when development resumes: | |
| configure.ac, util/texi2dvi: add "dev" to versions for clarity, | |
| until it's time to do pretests again. | |
| after next release: | |
| rename old ChangeLog and start a new one | |
| check TODO file and do pending tasks | |
| discuss on mailing list changing the git branch structure to allow quick | |
| bug fix releases for severe bugs (e.g. glibc 2.34 incompatibility, info crash | |
| in Brazillian Portuguese locale) | |
| delete these lines from README-hacking | |