summaryrefslogtreecommitdiff
path: root/support/pkgcheck/docs/pkgcheck.tex
diff options
context:
space:
mode:
Diffstat (limited to 'support/pkgcheck/docs/pkgcheck.tex')
-rw-r--r--support/pkgcheck/docs/pkgcheck.tex375
1 files changed, 375 insertions, 0 deletions
diff --git a/support/pkgcheck/docs/pkgcheck.tex b/support/pkgcheck/docs/pkgcheck.tex
new file mode 100644
index 0000000000..ab96cc390a
--- /dev/null
+++ b/support/pkgcheck/docs/pkgcheck.tex
@@ -0,0 +1,375 @@
+\listfiles
+\documentclass[fontsize=10pt,paper=a4,abstract=on]{scrartcl}
+
+\DeclareTOCStyleEntry[dynnumwidth=true]{default}{subsection}
+
+\usepackage{unicode-math}
+
+\usepackage[RM={StylisticSet=3}]{plex-otf}
+
+\usepackage[english]{babel}
+\usepackage[autostyle]{csquotes}
+
+\usepackage{array,multido}
+\usepackage{booktabs} % for examples
+%\usepackage{xltabular} % for examples
+\usepackage{listings}
+\lstset{columns=fixed,basicstyle=\ttfamily\small}
+\usepackage[table]{xcolor}
+\usepackage{xspace}
+
+\usepackage{longtable}
+
+\usepackage{minted}
+\usemintedstyle{emacs}
+
+\pagestyle{headings}
+
+\usepackage[colorlinks, pdfusetitle, hyperfootnotes=false]{hyperref}
+% define \code for url-like breaking of typewriter fragments.
+\ifx\nolinkurl\undefined \let\code\url \else \let\code\nolinkurl \fi
+
+% Define \cs to prepend a backslash, and be unbreakable:
+\DeclareRobustCommand\cs[1]{\mbox{\texttt{\char`\\#1}}}
+
+
+\newcommand{\pkgcheck}{\texttt{pkgcheck}\xspace}
+\newcommand{\msg}[1]{\texttt{#1}\xspace}
+
+\providecommand{\tightlist}{%
+ \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
+
+% \pdfinfo{
+% /Author (Manfred Lotz)
+% /Title pkgcheck Utility
+% }
+
+%\title{pkgcheck utility}
+\include{title}
+\author{Manfred Lotz}
+
+
+\begin{document}
+\maketitle
+\tableofcontents
+
+\begin{abstract}
+ This document describes the \pkgcheck command line utility which is used by the
+ author when checking uploaded packages to CTAN.
+\end{abstract}
+
+
+\section{Introduction}
+
+Uploaded packages to CTAN must satisfy various requirements in order to get
+installed on CTAN.
+
+A first introduction is given here \url{https://ctan.org/help/upload-pkg}.
+
+Even more details are to be found in the excellent CTAN-upload addendum
+\url{https://ctan.org/file/help/ctan/CTAN-upload-addendum} written by Petra Rübe-Pugliese.
+
+The \pkgcheck utility which runs on Linux systems only checks those requirements
+which can be checked by a program.
+
+\section{pkgcheck utility}
+
+The \pkgcheck utility is a compiled program written in the Rust programming
+language. It runs in a Linux environment. Currently, Windows is not supported.
+Simply, because the author doesn't use Windows at all.
+
+It will be invoked from the command line, and any error or
+warning message has a certain message id. \pkgcheck offers an option to get more
+information for a certain error.
+
+\section{Requirements}
+
+\pkgcheck doesn't have any special runtime requirements.
+
+The \pkgcheck is a 64-bit statically linked binary, and should work an any 64-bit Linux.
+It is available in the repository in directory \verb|bin/|.
+
+Currently, the only external programs required are:
+\begin{itemize}
+\item \verb|/usr/bin/unzip|
+
+Used only, when a TDS zip archive will be extracted.
+
+\item \verb|/usr/bin/pdfinfo|
+
+Used only, when a PDF document will be checked.
+
+\end{itemize}
+
+\section{Installation}
+
+Copy the binary from \verb|bin/pkgcheck| to a suitable location on your hard disk, and
+(recommended) make sure the directory is in the \verb|PATH| or call \verb|pkgcheck| using an
+absolute path name.
+
+\section{Utility usage}
+
+
+\subsection{Help option}
+
+Running \verb|pkgcheck --help| shows the available command line options.
+
+Here a sample output:
+
+\begin{verbatim}
+pkgcheck 1.0.0
+Manfred Lotz <manfred@ctan.org>
+A checker for uploaded packages to CTAN.
+
+USAGE:
+ pkgcheck [FLAGS] [OPTIONS]
+
+FLAGS:
+ -L, --correct-crlf Correct CRLF line endings
+ -C, --correct-perms Correct permissions
+ --explain-all Explains all error or warning messages
+ -h, --help Prints help information
+ -I, --ignore-dupes Ignore dupes
+ --no-colors Don't display messages in color
+ --show-temp-endings Show file endings for temporary files
+ --urlcheck Check URLs found in README files
+ -V, --version Prints version information
+ -v, --verbose Verbose operation?
+
+OPTIONS:
+ -e, --explain <explain> Explain error or warning message
+ -d, --package-dir <pkg_dir> Package directory
+ -T, --tds-zip <tds_zip> tds zip archive
+
+\end{verbatim}
+
+
+\subsection{Check a package}
+
+A package for CTAN is supposed to be uploaded as a ZIP or a g-zipped
+tar archive. The package must have a top level directory.
+
+After unpacking the archive of a package \texttt{mypkg} into directory
+\texttt{mypkg/} it can be checked by running \pkgcheck with
+option verb|--package-dir| or shorter \verb|-d|.
+
+
+\begin{minted}[linenos=true,frame=single,fontsize=\footnotesize]{sh}
+ pkgcheck -d mypkg
+\end{minted}
+
+\pkgcheck returns 1 if there are any errors, otherwise 0.
+
+
+
+\subsection{Check a package which has a TDS archive}
+
+If a package contains a TDS ZIP archive it is supposed to be in the
+top level directory of a package.
+
+In order to check the TDS ZIP archive the option
+\verb|-T <tds_zip>| or \verb|--tds-zip <tds_zip>| can be used.
+
+Please note that a TDS ZIP archive will always be checked together with
+the non-install tree of the package which means that
+\verb|--tds-zip| requires option \verb|--package-dir| as well.
+
+Checking package \texttt{mypkg} \pkgcheck will be invoked like follows:
+
+\begin{minted}[linenos=true,frame=single,fontsize=\footnotesize]{sh}
+ pkgcheck -d mypkg -T mypkg.tds.zip
+\end{minted}
+
+
+As before \pkgcheck returns 1 if there are any errors, otherwise 0.
+
+
+\subsection{Pkgcheck messages}
+
+\pkgcheck issues three kind of messages
+
+\begin{itemize}
+\item Information messages
+\item Warning messages
+\item Error messages
+\end{itemize}
+
+Messages have unique ids and the detailed explanation of a message can be either
+looked up in this document, or it can be displayed by using command line option
+\verb|--explain| or \verb|-e|.
+
+
+\begin{minted}[linenos=true,label=Example,frame=single,fontsize=\footnotesize]{sh}
+ pkgcheck --explain e0012
+\end{minted}
+
+
+
+\subsection{Duplicate files}
+
+By default, \pkgcheck detects duplicate files in a package. This could be
+disabled by using command line switch \verb|--ignore-dups| or shorter \verb|-I|.
+
+\subsection{Permissions}
+
+\pkgcheck offers the option \verb|--correct-crlf| or shorter \verb|-L| to
+correct wrong permissions in a package.
+
+
+\subsection{CRLF line endings}
+
+\pkgcheck detects CRLF line endings in text files as good as it can.
+It reads up to 1 MB to check for CRLF line endings.
+
+Option \verb|--correct-crlf| or for short \verb|-L| can be used to convert a
+file from CRLF to LF line endings.
+
+\subsection{Help options}
+
+\begin{itemize}
+\item \verb|-V|
+
+ Outputs \pkgcheck's version number.
+
+\item \verb|--help|
+
+ \verb|--help| shows the available command line options.
+
+\begin{verbatim}
+pkgcheck 1.0.0
+Manfred Lotz <manfred@ctan.org>
+A checker for uploaded packages to CTAN.
+
+USAGE:
+ pkgcheck [FLAGS] [OPTIONS]
+
+FLAGS:
+ -L, --correct-crlf Correct CRLF line endings
+ -C, --correct-perms Correct permissions
+ --explain-all Explains all error or warning messages
+ -h, --help Prints help information
+ -I, --ignore-dupes Ignore dupes
+ --no-colors Don't display messages in color
+ --show-temp-endings Show file endings for temporary files
+ --urlcheck Check URLs found in README files
+ -V, --version Prints version information
+ -v, --verbose Verbose operation?
+
+OPTIONS:
+ -e, --explain <explain> Explain error or warning message
+ -d, --package-dir <pkg_dir> Package directory
+ -T, --tds-zip <tds_zip> tds zip archive
+
+\end{verbatim}
+
+\item \verb|--explain <explain|
+
+ This option explains an error message in more detail.
+
+ Example:
+
+\begin{minted}[linenos=true,frame=single,fontsize=\footnotesize]{sh}
+ pkgcheck -e e0012
+\end{minted}
+
+
+\item \verb|--explain-all|
+
+Outputs a list of explanations of all messages.
+
+\item \verb|--show-temp-endings|
+
+ Outputs a list of all file name endings which \pkgcheck uses to detect
+ temporary files.
+\end{itemize}
+
+%\subsection{Other options}
+
+\section{About checking file types}
+
+\pkgcheck determines, similar to the UNIX \verb|file| command, the type of file.
+This is required before for example checking permissions or complaining that a
+text file has CRLF line endings.
+
+It is very important to note that determining file types is not bullet proof.
+So, it might happen in some cases that \pkgcheck makes mistakes when determining
+a file type. This could lead to a subseqent mistake when complaining about an
+x-bit, or complaining about CRF line ending.
+
+
+
+
+
+
+\section{About permissions checking}
+
+From an installation point of view the files and directories of a package
+\begin{itemize}
+\item must be at least world readable
+\item must be writable by owner or group
+\item must not have the x-bit on for the owner if the file isn't an executable,
+ i.e. a script or binary
+\end{itemize}
+
+The reason for this minimal requirement is that the installation utility used by
+the CTAN team (which by the way was written by Rainer Schöpf a long time ago)
+sets permissions correctly if the owner permission is set correctly.
+
+Examples:
+
+\begin{itemize}
+\item \verb|README.md| with \texttt{666} is ok because the installation utility converts
+ the permission to 664
+\item \verb|README.md| with \texttt{660} is wrong because the installation utility
+ wouldn't have access to the file
+\item \verb|some.pdf| with \texttt{744} would be wrong because a PDF document must not
+ have the x-bit on for the owner
+\end{itemize}
+
+Because of the smartness of the installation utility \pkgcheck does check
+minimal requirements only, i.e some weird looking permissions like the \texttt{666} above
+are accepted.
+
+\section{Different kind of messages}
+
+\begin{description}
+\item[Innnn] Informational messages
+
+ These are message which announce \pkgcheck actions.
+
+\item[Fnnnn] Fatal messages
+
+ Fatal messages report unrecoverable errors. In this case \pkgcheck's only
+ option is to terminate. If for example, the package directory specified at
+ the command line doesn't exist then the only option is to terminate.
+
+\item[Ennnn] Error messages
+
+ Error messages report errors which must be fixed before installing a package.
+
+\item[Wnnnn] Warning messages
+
+ Warning messages denote possible errors depending upon the situation.
+
+ For example, for a font package having many duplicate files might be ok. For
+ another package it could be regarded as an error.
+
+
+
+
+\end{description}
+\section{Informational messages}
+\input{informationd}
+
+\section{Warning messages}
+\input{warningsd}
+
+\section{Error messages}
+\input{errorsd}
+
+\section{Fatal messages}
+\input{fatald}
+
+\end{document}
+
+