$Id: packages.txt 73829 2025-02-09 23:06:52Z karl $
Public domain. Information on package maintenance in TeX Live.

Related:
- See http://tug.org/texlive/pkgupdate.html (and scripts) for information
  on the CTAN-to-TL update process.
- See ./releng.txt for info about setting up the pretest and doing a release.


To add a new platform:
- check that the config.guess output maps to our architecture name
  in the `platform_name' routine in TeXLive/TLUtils.pm.
- add the abbreviation to the full-name mapping in `platform_desc'.
- create directory in Master/bin and add at least one file,
  more likely the whole set.
- if windows-ish (.exe extension),
  update regexps in TLTREE.pm and tlmgr.pl and ctan2tds.
- add xz, maybe lz4, maybe wget binaries in Master/tlpkg/installer,
  update texlive.infra.tlpsrc if no wget or otherwise provided,
  update 00texlive.installer.tlpsrc if needed.
- update .tlpsrc files if necessary: most likely asymptote, biber, xindy.
- consider adding to prune= list in tl-update-images.
- regenerate tlpdb if desired.
- commit bin/NEWDIR/ tlpkg/
- update web texlive/build.html (and texlive-en.tex, at some point).
- if desired, put binaries into texlive/files and link on custom-bin.html.
- ask builder for entry in source/README.

To remove a platform:
- remove directory in Master/bin.
- remove xz, maybe wget, maybe lz4, binaries in Master/tlpkg/installer.
- remove any special cases in Master/tlpkg/tlpsrc.
- remove from prune list in tl-update-images, if present.
- remove entry in Build/source/README, if there is one.


 To change the engine used for a format:
- edit the necessary .tlpsrc file(s).
- after the next rebuild, the generated fmtutil.cnf in
  Master/texmf-dist/web2c/fmtutil.cnf should reflect the changes.
- update the links in the bindirs with:
    texlinks -m
  This will not update Windows-based systems; do those by hand.
  And definitely do an svn status before any commit, to check that only
    the expected updates were made by the script.
- update fmtutil.cnf in the source tree:
    cp /tmp/fmtutil.cnf Build/source/texk/texlive/tl_support/fmtutil.cnf
  This /tmp/fmtutil.cnf is created by the nightly build; see
    /tmp/tlchecktrunk.srclist and cron.tl, etc.

 To check tlpsrc changes without committing:
 tl-update-tlpdb --save-anyway
 tlmgr check --use-svn files   # or whatever
Do not fail to revert the tlpdb after you're done checking, or it will
cause an svn conflict.


 To remake tlcritical from scratch:
 cd /home/ftp/texlive
 rm -rf tlcritical
 mkdir tlcritical
 tl-update-tlcritical --recreate


 To branch before a release,
   in the unlikely event of separate development work before switching trunk:
svn copy -r 12205 -m'texlive-2009-dev tag based on r12205' \
  svn://tug.org/texlive/trunk svn://tug.org/texlive/tags/texlive-2009-dev
svn copy -r 12205 -m'branch2009-dev branch based on r12205' \
  svn://tug.org/texlive/trunk svn://tug.org/texlive/branches/branch2009-dev 

(Use -dev instead of .something because - will sort first, keeping the
listings in a nice chronological order.)


 To build tlnet in a separate location,
   e.g., if making changes to its structure.
   (e.g., in Oct 2019 we changed to versioned containers .rNNN.tar.xz.)

# First we build the test repository and test installation from scratch.
# Do it with no (significant) changes from the current source, for sanity.
# 
# Use subdir of /home/ftp/texlive or another dir ignored for backups
# (see /etc/rsnapshot.conf).
destdir=/home/ftp/texlive/test-tlnet
#
# since we're building into a new hierarchy for testing, have to touch tlpdb.
rm -rf $destdir
mkdir -p $destdir/tlpkg
touch !$/texlive.tlpdb

# Update (populate, the first time) the new repo.
# should take about 15 minutes; updating with the full scheme (which
# should be done at least once) instead of infraonly takes about 35 min.
tl-update-tlnet --critical --scheme infraonly --dest $destdir

# if there are errors, the build hierarchy will not be moved to the
# destination; can do it by hand if desired:
cd /home/ftp
rm -rf texlive/test-tlnet/ # just removing the empty file we created
mv tlnet-trial-*/tlsrc.try texlive/test-tlnet/
rmdir tlnet-trial-*

# If ever desired, could recreate every package from scratch.
# This will take hours.
#tl-update-tlnet --critical --recreate --scheme infraonly --dest $destdir

# Now we can test the new repo: do an installation into /tmp/ki (hardwired).
# The default scheme here is again infraonly.
tl-try-install --repo $destdir

# We'll want to test network, local disk, and from-development repositories.
# So move /tmp/ki, set the repository, and do it again.
mv /tmp/ki /tmp/tldsk
tl-try-install --repo $destdir
/tmp/tldsk/bin/x86_64-linux/tlmgr option repo $destdir
#
# For ftp access, want to use ftpmirror to log in, since anonymous ftp
# will often fail. See tug.org:~karl/.netrc or the ftpd setup on tug.
mv /tmp/ki /tmp/tlftp
/tmp/tlftp/bin/x86_64-linux/tlmgr option repo ftp://fm.tug.org/texlive/test-tlnet
#
# Create test installation from development tree.
# This exercises yet another code path.
Master=...
$Master/install-tl --profile=$Master/tlpkg/dev/profiles/TLinfra.pro 
mv /tmp/ki /tmp/tldev

# Now, from those repos, initial check with current tlmgr;
# update list should be empty at first.
/tmp/tldsk/bin/x86_64-linux/tlmgr update --list
/tmp/tlftp/bin/x86_64-linux/tlmgr update --list
/tmp/tldev/bin/x86_64-linux/tlmgr update --list

# So much for the setup and sanity checks. Now it's time to test
# whatever the real changes are. Make the changes (without
# committing), and update our test repo just as above (no need to recreate):
tl-update-tlnet --critical --scheme infraonly --dest $destdir

# Then re-update the installations:
/tmp/tldsk/bin/x86_64-linux/tlmgr update --self --all
/tmp/tlftp/bin/x86_64-linux/tlmgr update --self --all
/tmp/tldev/bin/x86_64-linux/tlmgr update --self --all

# Also try an older tlmgr against the test repo (readonly, don't want to
# update /usr/local/texlive/2019):
env PATH=/usr/local/texlive/2019/bin/x86_64-linux:/usr/bin \
  tlmgr -repo $destdir update --list | head
#
# Also must try creating and updating a 2019 install from the test-
# repo; best to do a full install here for complete testing.
rm -rf /tmp/ki
pro=--profile=/home/texlive/trunk/Master/tlpkg/dev/profiles/TLfull.pro
env PATH=/usr/bin \
  /usr/local/texlive/2019/install-tl $pro
test19=/tmp/tlt19
mv /tmp/ki $test19 # so we don't accidentally lose it with rm /tmp/ki
#
env PATH=$test19/bin/x86_64-linux:/usr/bin \
  tlmgr -repo $destdir update --self --all

# To create the disaster recovery scripts in the test repo:
tl-update-tlcritical --tlcrit $destdir --no-containers

# Repeat until satisfied: all changes are in test-tlnet and
# installations and working as intended. For the Nov 2019 update, that
# means symlinks pointing to new files for updated packages, old
# versioned containers removed, backups made, etc.

# The tlpkg/bin/tltestnet script has minimal support for some of the
# above in the November 2019 change - moving the dev files (to and
# back), creating a 2019-original-release installation, etc. Take a look
# for ideas and hacking; don't take it too seriously.

# If you need to make changes to files without a nightly build
# intervening, as will usually be the case, it is necessary to manually
# edit the Master/tlpkg/texlive.tlpdb in the test- repo to
# increment the "revision" number for texlive.infra, or whatever
# packages need to be updated. Otherwise tl-update-containers will think
# that nothing needs to be updated.
