summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/nameauth/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/nameauth/Makefile')
-rw-r--r--macros/latex/contrib/nameauth/Makefile526
1 files changed, 437 insertions, 89 deletions
diff --git a/macros/latex/contrib/nameauth/Makefile b/macros/latex/contrib/nameauth/Makefile
index ffd7d76e94..6bd5f42d95 100644
--- a/macros/latex/contrib/nameauth/Makefile
+++ b/macros/latex/contrib/nameauth/Makefile
@@ -1,115 +1,463 @@
-#Copyright (C) 2020 by Charles P. Schaum <charles[dot]schaum@comcast.net>
-#-------------------------------------------------------
+# Copyright (C) 2023 by Charles P. Schaum <charles[dot]schaum@comcast.net>
+# -------------------------------------------------------------------
#
-#This file may be distributed and/or modified under the
-#conditions of the LaTeX Project Public License, either version 1.3
-#of this license or (at your option) any later version.
-#The latest version of this license is in:
+# This file may be distributed and/or modified under the
+# conditions of the LaTeX Project Public License, either version 1.3
+# of this license or (at your option) any later version.
+# The latest version of this license is in:
#
# http://www.latex-project.org/lppl.txt
#
-#and version 1.3 or later is part of all distributions of LaTeX
-#version 2005/12/01 or later.
+# and version 1.3 or later is part of all distributions of LaTeX
+# version 2005/12/01 or later.
#
+# -------------------------------------------------------------------
+#
+# Usage:
+#
+# Delete all generated files, do clean build on
+# POSIX-compliant systems, WSL, or Cygwin.
+#
+# make
+#
+# This target does the same default build as above.
+#
+# make release
+#
+# Just do a quick rebuild; keep generated files.
+# One must edit or touch `$(NAME).dtx'.
+#
+# make package
+#
+# Install/remove supplied files into the user's texmf tree.
+# These targets only work in a POSIX environment and do not
+# install from WSL or Cygwin into a Windows wnvironment
+# They have not been tested on MikTeX for Linux.
+#
+# make inst
+# make uninst
+#
+# Install/remove supplied files into the local texmf tree.
+# Needs an appropriate level of permission. These targets
+# only work in a fully POSIX environment. They have not
+# been tested on MikTeX for Linux. Note that one should
+# not put "sudo" before these commands because they will
+# not find the proper path variables. Just let the make
+# target ask for the password.
+#
+# make install
+# make uninstall
+#
+# Compile examples file with pdflatex.
+#
+# make examples
+#
+# Compile examples file with all different engines.
+#
+# make examples ENGINE=xelatex
+# make examples ENGINE=lualatex
+# make examples ENGINE=dvilualatex
+# make examples ENGINE=pdflatex
+# make examples ENGINE=latex
+#
+# Compile test files with pdflatex.
+#
+# make tests
+#
+# Compile test files with all different engines.
+#
+# make tests ENGINE=xelatex
+# make tests ENGINE=lualatex
+# make tests ENGINE=dvilualatex
+# make tests ENGINE=pdflatex
+# make tests ENGINE=latex
+#
+# Clean up auxiliary files for the package, examples, and tests.
+#
+# make clean
+# make exclean
+# make testclean
+#
+# Remove all generated files.
+#
+# make distclean
+#
+# Regenerate files from the dtx file if needed.
+#
+# make unpack
+#
+# Generate manual illustrations on POSIX-compliant systems
+# and TeX distributions that support doing so. This requires
+# the use of pdfjam, which is not available in some cases.
+#
+# make images
+#
+# Do a clean package build and create a zip archive
+# ready for distribution.
+#
+# make zip
+#
+# -------------------------------------------------------------------
+#
+# Programs minimally necessary to execute this make file:
+#
+# make bash pdflatex kpsewhich
+# makeindex zip pdftex
+#
+# -------------------------------------------------------------------
+
+#
+# Assign most variables in this section. Here we determine what
+# programs exist and choices related to that.
+#
+
# Name of package
+
NAME = nameauth
-# LaTeX engine to use for package; below is the default.
-# One can choose from latex, pdflatex, xelatex, lualatex, dvilualatex.
-ENGINE ?= pdflatex
+
# Shell to use; default is bash
+
SHELL = bash
+
# Value of current working directory
-PWD = $(shell pwd)
-# Package version info
-VERS = $(shell ltxfileinfo -v $(NAME).dtx|sed -e 's/^v//')
+
+PWD = $(shell pwd)
+
+# LaTeX engines to use for building th package and for typesetting
+# the examples file and testing files; below is the default.
+# One can choose from latex, pdflatex, xelatex, lualatex, dvilualatex.
+
+ENGINE ?= pdflatex
+BUILDENGINE := $(shell command -v pdflatex 2> /dev/null)
+TESTENGINE := $(shell command -v $(ENGINE) 2> /dev/null)
+
+# If we cannot find the engine, add a .exe extension and try that instead.
+# This usually occurs only when using WSL and a Windows-native TeX distro.
+
+ifeq ($(strip $(BUILDENGINE)),)
+ BUILDENGINE = pdflatex
+ EXT = .exe
+else
+ BUILDENGINE = pdflatex
+ EXT =
+endif
+
+ifeq ($(strip $(TESTENGINE)),)
+ TESTENGINE = $(ENGINE)
+ EXT = .exe
+else
+ TESTENGINE = $(ENGINE)
+ EXT =
+endif
+
+# Now if we still can't find things, something is very wrong.
+
+ifeq ($(strip $(BUILDENGINE)$(EXT)),)
+ $(error Cannot find $(BUILDENGINE). Please check your installation.")
+endif
+
+ifeq ($(strip $(TESTENGINE)$(EXT)),)
+ $(error Cannot find $(TESTENGINE). Please check your installation.")
+endif
+
+# Get Package pversion info; check if not available in some environments.
+# Create a zip file name that will not cause problems, e.g., in Windows.
+
+DOVERSION := $(shell command -v ltxfileinfo 2> /dev/null)
+
+ifeq ($(strip $(DOVERSION)),)
+ ZIPNAME = $(NAME)
+else
+ ZIPNAME = $(NAME)-$(shell ltxfileinfo -v $(NAME).dtx|sed -e 's/^v//')
+endif
+
+# Determine which dvi to pdf converter to use. If Ghostscript is installed
+# use dvipdf, otherwise dvipdfmx.
+
+DVIPDF := $(shell command -v dvipdf 2> /dev/null)
+
+ifeq ($(strip $(DVIPDF)),)
+ DVIPDF = dvipdfmx
+else
+ DVIPDF = dvipdf
+endif
+
+# Test if pdfjam is available.
+
+PDFJAM := $(shell command -v pdfjam 2> /dev/null)
+
+# Build options are in this variable.
+
+BUILDOPTS = -recorder -interaction=nonstopmode
+
+# Test and example options are in this variable.
+
+TESTOPTS = -interaction=nonstopmode
+
+# Add options with this variable, e.g.: make ADDOPTS="--synctex=1"
+
+ADDOPTS ?=
+
+# Core options for generating the sty file and included files
+# the normal way. Alternate is via make unpack.
+
+COREOPTS = -shell-escape -recorder -interaction=batchmode
+
# Local, system-wide tex tree
-LOCAL = $(shell kpsewhich --var-value TEXMFLOCAL)
+
+LOCAL = $(shell kpsewhich$(EXT) --var-value TEXMFLOCAL)
+
# Tex tree in user's home directory
-UTREE = $(shell kpsewhich --var-value TEXMFHOME)
-#
-# Default make target is release and its dependencies
-release: $(NAME).pdf
-#
-# The testing target also compiles the examples file.
-testing: $(NAME).pdf examples.pdf
-
-#
-# This is the recipe for examples.pdf. It will work also for dvi output.
-examples.pdf : examples.tex
- $(ENGINE) --interaction=nonstopmode examples > /dev/null
- $(ENGINE) --interaction=nonstopmode examples > /dev/null
- if [ -f examples.idx ]; then makeindex -o examples.ind examples.idx; fi
- if [ -f examples.rdx ]; then makeindex -o examples.rnd examples.rdx; fi
- $(ENGINE) --interaction=nonstopmode examples > /dev/null
- $(ENGINE) --interaction=nonstopmode examples > /dev/null
- if [ -f examples.dvi ]; then dvipdf examples; fi
- if [ -f examples.out.ps ]; then rm examples.out.ps; fi
-#
-# This is the recipe for the package docs. It will work also for dvi output.
-$(NAME).pdf : $(NAME).dtx nameauth.sty nameauth.ins
- $(ENGINE) -shell-escape -recorder -interaction=batchmode $(NAME).dtx >/dev/null
- $(ENGINE) --recorder --interaction=nonstopmode $(NAME).dtx > /dev/null
- if [ -f $(NAME).glo ]; then makeindex -q -s gglo.ist -o $(NAME).gls $(NAME).glo; fi
- if [ -f $(NAME).idx ]; then makeindex -q -s gind.ist -o $(NAME).ind $(NAME).idx; fi
- $(ENGINE) --recorder --interaction=nonstopmode $(NAME).dtx > /dev/null
- $(ENGINE) --recorder --interaction=nonstopmode $(NAME).dtx > /dev/null
- if [ -f $(NAME).dvi ]; then dvipdf $(NAME); fi
-#
-# These are the recipes for all the files that need to be extracted
-# from the dtx file. Any one of them simply extracts the following:
-# README.md, nameauth.ins, nameauth.sty, examples.tex
-#
-# Once any one of these recipes is run, the rest will be satisfied.
-# But they need to be there for dependencies to work best.
-README.md : $(NAME).dtx
- pdftex $(NAME).dtx
-
-nameauth.ins : $(NAME).dtx
- pdftex $(NAME).dtx
-
-nameauth.sty : $(NAME).dtx
- pdftex $(NAME).dtx
-
-examples.tex : $(NAME).dtx
- pdftex $(NAME).dtx
-#
-# Using this recipe deletes the auxiliary and log files
-clean:
- rm -f $(NAME).{aux,fls,glo,gls,hd,idx,ilg,ind,ins,log,out,toc}
- rm -f examples.{rdx,rnd,aux,fls,glo,gls,hd,idx,ilg,ind,ins,log,out,toc}
-#
-# Using this recipe cleans also all generated files
-distclean: clean
- rm -f $(NAME).{dvi,pdf,sty,synctex.gz,"synctex(busy)"} README.md
- rm -f examples.{dvi,pdf,synctex.gz,"synctex(busy)",tex}
-#
-# Using this recipe deletes files for testong
-testclean:
- rm -f examples.{aux,fls,glo,gls,hd,idx,ilg,ind,ins,log,out,toc}
- rm -f examples.{dvi,pdf,synctex.gz,"synctex(busy)"}
-#
-# This recipe installs the package release into the user's tree
-inst: release
+
+UTREE = $(shell kpsewhich$(EXT) --var-value TEXMFHOME)
+
+#
+# Package Building Section
+#
+
+# Default make target is the package release and its dependencies.
+# When building, erase all generated files to make a fresh build.
+
+release : distclean package
+
+# Use this recipe to make the package without removing all prior files.
+
+package : $(NAME).pdf
+ @echo "Package has been made successfully."
+
+# This is the recipe for the package and the docs.
+
+$(NAME).pdf : $(NAME).sty
+ $(BUILDENGINE)$(EXT) $(BUILDOPTS) $(ADDOPTS) $(NAME).dtx > /dev/null
+ makeindex$(EXT) -q -s gglo.ist -o $(NAME).gls $(NAME).glo
+ makeindex$(EXT) -q -s gind.ist -o $(NAME).ind $(NAME).idx
+ $(BUILDENGINE)$(EXT) $(BUILDOPTS) $(ADDOPTS) $(NAME).dtx > /dev/null
+ $(BUILDENGINE)$(EXT) $(BUILDOPTS) $(ADDOPTS) $(NAME).dtx > /dev/null
+
+# This is the core dependency. When run we get all extracted files:
+# README.md, nameauth.ins, nameauth.sty, examples.tex, and the test
+# files as well.
+
+$(NAME).sty : $(NAME).dtx
+ $(BUILDENGINE)$(EXT) $(COREOPTS) $(ADDOPTS) $(NAME).dtx >/dev/null
+
+#
+# Examples and Testing Section
+#
+
+# Compile the test files into their output documents.
+
+tests :
+ $(TESTFILES)
+ $(MAKE) testout
+ @echo "Test files have been made successfully."
+
+testout : test01_01.pdf \
+ test07_01.pdf test07_02.pdf \
+ test09_01.pdf \
+ test11_01.pdf test11_02.pdf test11_03.pdf test11_04.pdf \
+ test11_05.pdf test11_06.pdf test11_07.pdf test11_08.pdf \
+ test11_09.pdf test11_10.pdf \
+ test13_01.pdf test13_02.pdf test13_03.pdf test13_04.pdf
+
+# Regardless of what engine is used for tests, one must use the
+# build engine (pdflatex) to extract the tests.
+
+TESTFILES = $(BUILDENGINE)$(EXT) \
+ "\def\NameauthDoTestFiles{}\input{nameauth.dtx}" \
+ > /dev/null
+
+# Make the example pdf using the TeX to pdf pattern rule.
+# Ensure that at least the style file exists when doing so.
+
+examples : $(NAME).sty examples.pdf
+ @echo "Examples file has been made successfully."
+
+# Pattern for pdf files; works on tests or examples with or without
+# indexes, those with multiple indexes, and with or without TOC.
+
+%.pdf : %.tex
+ $(TESTENGINE)$(EXT) $(TESTOPTS) $< > /dev/null
+ $(TESTENGINE)$(EXT) $(TESTOPTS) $< > /dev/null
+ if [ -f $*.idx ]; \
+ then makeindex$(EXT) -q -o $*.ind $*.idx > /dev/null; fi
+ if [ -f $*.rdx ]; \
+ then makeindex$(EXT) -q -o $*.rnd $*.rdx > /dev/null; fi
+ $(TESTENGINE)$(EXT) $(TESTOPTS) $< > /dev/null
+ $(TESTENGINE)$(EXT) $(TESTOPTS) $< > /dev/null
+ if [ -f $*.dvi ]; then $(DVIPDF)$(EXT) $*; fi
+ if [ -f $*.out.ps ]; then rm $*.out.ps; fi
+
+#
+# Generate Manual Images from Examples
+#
+
+# Create example images instead of using the supplied pdf files.
+# For this recipe one needs the pdfjam script to be somewhere in
+# the command search path. Otherwise, this recipe will fail.
+# In case of failure, use another application to split the pdf
+# files and rename the appropriate pages, or use the pdfpages
+# package. Normally, users should not need to make this recipe.
+# This target may fail if using MikTeX.
+
+images :
+ $(TESTFILES)
+ $(MAKE) imageout ENGINE=pdflatex
+ifeq ($(strip $(PDFJAM)),)
+ @echo "Image files have been typeset, but you need to split \
+ and rename the pages manually; pdfjam is not available. Sorry."
+ @echo "Page 3 of test07_02.pdf -> cat01.pdf"
+ @echo "Pages 1,2,3 of testo9_01.pdf -> beamer01.pdf, \
+ beamer02.pdf, beamer03.pdf"
+else
+ pdfjam --paper a6paper --landscape --quiet \
+ test07_02.pdf 3 --outfile cat01.pdf
+ pdfjam --paper a5paper --landscape --quiet \
+ test09_01.pdf 1 --outfile beamer01.pdf
+ pdfjam --paper a5paper --landscape --quiet \
+ test09_01.pdf 2 --outfile beamer02.pdf
+ pdfjam --paper a5paper --landscape --quiet \
+ test09_01.pdf 3 --outfile beamer03.pdf
+ @echo "Image files have been made successfully."
+endif
+
+imageout : test07_02.pdf test09_01.pdf
+
+#
+# Utility Section
+#
+
+# Set up phony targets that do not depend on any specific files.
+
+.PHONY: tests images unpack clean exclean testclean distclean uninst ununstall
+
+# Simply unpack the other supplied files from the dtx file.
+# Not usually deeded to build the package, but can be used,
+# for example, in case one accidentally deletes a file.
+
+unpack :
+ pdftex$(EXT) $(NAME).dtx
+
+# Delete all auxiliary and log files for the package; prep for
+# re-running building and packaging targets. The file
+# "nameauth.dtx.aux" has appeared in some systems. Just in case
+# someone tries to create a "nameauth.dvi" file, we delete it.
+
+clean :
+ rm -f $(NAME).{aux,glo,gls,idx,rdx,ilg,ind,rnd,toc}
+ rm -f $(NAME).{dvi,fls,hd,log,out,tmp}
+ rm -f $(NAME).synctex.gz
+ rm -f $(NAME).'synctex(busy)'
+ rm -f $(NAME).dtx.aux
+
+# Delete all auxiliary and log files for the examples files; leave
+# just the TeX file for re-running the examples target.
+
+exclean :
+ rm -f examples.{aux,glo,gls,idx,rdx,ilg,ind,rnd,toc}
+ rm -f examples.{dvi,fls,hd,log,out,pdf,tmp}
+ rm -f examples.synctex.gz
+ rm -f examples.'synctex(busy)'
+
+# Delete all test-related files to prep for re-running tests.
+
+testclean :
+ rm -f test*
+
+# Delete all generated files related to package building except zip.
+
+distclean : clean exclean testclean
+ rm -f $(NAME).{pdf,ins,sty,zip}
+ rm -f README.md
+ rm -f compat.tex
+ rm -f examples.tex
+
+# Install the package release into the user's tree.
+# Note that this target depends on the "package" target,
+# so we do not do a clean build. This may aid testing.
+
+inst : package
+ifeq ($(strip $(UTREE)),)
+ $(error "Unable to install; no path to user tree." )
+else
mkdir -p $(UTREE)/{tex,source,doc}/latex/$(NAME)
cp $(NAME).dtx $(UTREE)/source/latex/$(NAME)
cp Makefile $(UTREE)/source/latex/$(NAME)
cp $(NAME).sty $(UTREE)/tex/latex/$(NAME)
cp $(NAME).pdf $(UTREE)/doc/latex/$(NAME)
- cp examples.tex $(UTREE)/doc/latex/$(NAME)
+ cp *.tex $(UTREE)/doc/latex/$(NAME)
cp README.md $(UTREE)/doc/latex/$(NAME)
-#
-# This recipe installs the package release into the system tree
-install: release
+endif
+
+# Install the package release into the system tree.
+# Note that this target depends on the "package" target,
+# so we do not do a clean build. This may aid testing.
+
+install : package
+ifeq ($(strip $(LOCAL)),)
+ $(error "Unable to install; no path to local tree." )
+else
sudo mkdir -p $(LOCAL)/{tex,source,doc}/latex/$(NAME)
sudo cp $(NAME).dtx $(LOCAL)/source/latex/$(NAME)
sudo cp Makefile $(LOCAL)/source/latex/$(NAME)
sudo cp $(NAME).sty $(LOCAL)/tex/latex/$(NAME)
sudo cp $(NAME).pdf $(LOCAL)/doc/latex/$(NAME)
- sudo cp examples.tex $(LOCAL)/doc/latex/$(NAME)
+ sudo cp *.tex $(LOCAL)/doc/latex/$(NAME)
sudo cp README.md $(LOCAL)/doc/latex/$(NAME)
-#
-# This recipe creates a zip file for upload to CTAN
-zip: release
+endif
+
+# Uninstall the package release from the user's tree.
+# Show the state of the texmf tree thereafter.
+
+uninst :
+ifeq ($(strip $(LOCAL)),)
+ $(error "Unable to uninstall; no path to user tree." )
+else
+ rm -f $(UTREE)/source/latex/$(NAME)/$(NAME).dtx
+ rm -f $(UTREE)/source/latex/$(NAME)/Makefile
+ rm -f $(UTREE)/tex/latex/$(NAME)/$(NAME).sty
+ rm -f $(UTREE)/doc/latex/$(NAME)/$(NAME).pdf
+ rm -f $(UTREE)/doc/latex/$(NAME)/*.tex
+ rm -f $(UTREE)/doc/latex/$(NAME)/README.md
+ rmdir $(UTREE)/{tex,source,doc}/latex/$(NAME)
+ @echo "The texmf tree now looks like:"
+ ls $(UTREE)/source/latex/
+ ls $(UTREE)/tex/latex/
+ ls $(UTREE)/doc/latex/
+endif
+
+# Uninstall the package release from the system tree.
+
+uninstall :
+ifeq ($(strip $(LOCAL)),)
+ $(error "Unable to uninstall; no path to local tree." )
+else
+ sudo rm -f $(LOCAL)/source/latex/$(NAME)/$(NAME).dtx
+ sudo rm -f $(LOCAL)/source/latex/$(NAME)/Makefile
+ sudo rm -f $(LOCAL)/tex/latex/$(NAME)/$(NAME).sty
+ sudo rm -f $(LOCAL)/doc/latex/$(NAME)/$(NAME).pdf
+ sudo rm -f $(LOCAL)/doc/latex/$(NAME)/*.tex
+ sudo rm -f $(LOCAL)/doc/latex/$(NAME)/README.md
+ sudo rmdir $(LOCAL)/{tex,source,doc}/latex/$(NAME)
+ @echo "The texmf tree now looks like:"
+ ls $(LOCAL)/source/latex/
+ ls $(LOCAL)/tex/latex/
+ ls $(LOCAL)/doc/latex/
+endif
+
+# Create a zip file for upload to CTAN. On systems where ltxfileinfo
+# cannot be found, we create a zip file without a version in its name
+# instead of a zip file with a dash at the end, which can cause some
+# problems on Windows in certain cases.
+
+zip : release
+ rm -f $(NAME)*.zip
ln -sf . $(NAME)
- zip -Drq $(PWD)/$(NAME)-$(VERS).zip $(NAME)/{README.md,examples.tex,Makefile,$(NAME).{pdf,dtx}}
+ zip -Drq $(PWD)/$(ZIPNAME).zip \
+ $(NAME)/{Makefile,\
+ cat01.pdf,beamer01.pdf,beamer02.pdf,beamer03.pdf,\
+ $(NAME).dtx,\
+ compat.tex,examples.tex,$(NAME).pdf,README.md}
rm $(NAME)
+ @echo "Zip file has been made successfully."
+