[med-svn] r16959 - in trunk/packages/genometools/trunk/debian: . patches

Sascha Steinbiss sascha-guest at moszumanska.debian.org
Mon May 19 22:10:19 UTC 2014


Author: sascha-guest
Date: 2014-05-19 22:10:19 +0000 (Mon, 19 May 2014)
New Revision: 16959

Added:
   trunk/packages/genometools/trunk/debian/patches/arm64-no-m64
   trunk/packages/genometools/trunk/debian/patches/fix-unsigned-char
Modified:
   trunk/packages/genometools/trunk/debian/changelog
   trunk/packages/genometools/trunk/debian/control
   trunk/packages/genometools/trunk/debian/patches/series
   trunk/packages/genometools/trunk/debian/patches/split-manuals
Log:
fix building on some exotic archs, incorporate patches from Ubuntu


Modified: trunk/packages/genometools/trunk/debian/changelog
===================================================================
--- trunk/packages/genometools/trunk/debian/changelog	2014-05-19 11:10:35 UTC (rev 16958)
+++ trunk/packages/genometools/trunk/debian/changelog	2014-05-19 22:10:19 UTC (rev 16959)
@@ -1,3 +1,13 @@
+genometools (1.5.2-3) unstable; urgency=low
+
+  * Address building issues on s390x, powerpc and armhf
+  * Don't use -m64 for arm64 (thanks to Logan Rosen) 
+    Closes: #748708
+  * Build-depend on docbook-xsl to fix FTBFS while offline (thanks to Logan Rosen)
+    Closes: #748709
+
+ -- Sascha Steinbiss <steinbiss at zbh.uni-hamburg.de>  Mon, 19 May 2014 23:06:34 +0000
+
 genometools (1.5.2-2) unstable; urgency=low
 
   * Split manuals into separate documents to avoid strange LaTeX build issues. 

Modified: trunk/packages/genometools/trunk/debian/control
===================================================================
--- trunk/packages/genometools/trunk/debian/control	2014-05-19 11:10:35 UTC (rev 16958)
+++ trunk/packages/genometools/trunk/debian/control	2014-05-19 22:10:19 UTC (rev 16959)
@@ -27,7 +27,8 @@
                asciidoc,
                libxml2-utils,
                xsltproc,
-               ruby
+               ruby,
+               docbook-xsl
 Standards-Version: 3.9.5
 Vcs-Browser: http://anonscm.debian.org/viewvc/debian-med/trunk/packages/genometools/trunk/
 Vcs-Svn: svn://anonscm.debian.org/debian-med/trunk/packages/genometools/trunk/

Added: trunk/packages/genometools/trunk/debian/patches/arm64-no-m64
===================================================================
--- trunk/packages/genometools/trunk/debian/patches/arm64-no-m64	                        (rev 0)
+++ trunk/packages/genometools/trunk/debian/patches/arm64-no-m64	2014-05-19 22:10:19 UTC (rev 16959)
@@ -0,0 +1,11 @@
+--- a/Makefile
++++ b/Makefile
+@@ -308,7 +308,7 @@
+ endif
+ 
+ ifeq ($(m64),yes)
+-  ifeq (,$(filter $(MACHINE),ia64 alpha mips64 mips64el))
++  ifeq (,$(filter $(MACHINE),ia64 alpha mips64 mips64el aarch64))
+     GT_CFLAGS += -m64
+     GT_LDFLAGS += -m64
+     SQLITE_CFLAGS += -m64

Added: trunk/packages/genometools/trunk/debian/patches/fix-unsigned-char
===================================================================
--- trunk/packages/genometools/trunk/debian/patches/fix-unsigned-char	                        (rev 0)
+++ trunk/packages/genometools/trunk/debian/patches/fix-unsigned-char	2014-05-19 22:10:19 UTC (rev 16959)
@@ -0,0 +1,115 @@
+--- a/src/core/safearith.c
++++ b/src/core/safearith.c
+@@ -182,8 +182,10 @@
+   gt_error_check(err);
+ 
+   {
++    /* This is not always true, e.g. on PPC and ARM!
++       cf. http://www.network-theory.co.uk/docs/gccintro/gccintro_71.html
+     gt_ensure(__MIN(char) == -128);
+-    gt_ensure(__MAX(char) == 127);
++    gt_ensure(__MAX(char) == 127); */
+     gt_ensure(__MIN(unsigned char) == 0);
+     gt_ensure(__MAX(unsigned char) == 255);
+ 
+--- a/src/core/tokenizer.c
++++ b/src/core/tokenizer.c
+@@ -45,7 +45,9 @@
+ 
+ GtStr* gt_tokenizer_get_token(GtTokenizer *t)
+ {
+-  char c = EOF;
++  char c;
++  bool has_eof = true;
++  int rval = 0;
+   gt_assert(t);
+ 
+   /* if we have no current token, get it if possible */
+@@ -53,32 +55,44 @@
+     if (t->skip_comment_lines && gt_io_line_start(t->io)) {
+       for (;;) {
+         gt_assert(gt_io_line_start(t->io));
+-        if ((gt_io_get_char(t->io, &c) != -1)) {
+-          if (c == '#') {
++        if ((gt_io_get_char(t->io, (char*) &c) != -1)) {
++          if ((char) c == '#') {
+             /* skip line */
+             while ((gt_io_get_char(t->io, &c) != -1) && c != '\n');
+-            c = EOF;
++            has_eof = true;
+           }
+           else {
+             gt_io_unget_char(t->io, c);
++            has_eof = false;
+             break;
+           }
+         }
+-        else
++        else {
++          c = EOF;
+           break;
++        }
+       }
+-    }
+-    while ((gt_io_get_char(t->io, &c) != -1) && c == ' '); /* skip blanks */
++    } /* skip blanks */
++    while (((rval = gt_io_get_char(t->io, &c)) != -1) && c == ' ');
++    if (rval == -1)
++      has_eof = true;
++    else
++      has_eof = false;
+     do {
+-      if (c != EOF) {
++      if (!has_eof) {
+         if (!t->token)
+           t->token = gt_str_new();
+         if (c == '\n')
+           break;
+         gt_str_append_char(t->token, c);
+       }
+-    } while ((gt_io_get_char(t->io, &c) != -1) && c != ' ' && c != '\n');
+-    if (c == '\n' && c != EOF) {
++    } while (((rval = gt_io_get_char(t->io, &c)) != -1)
++              && c != ' ' && c != '\n');
++    if (rval == -1)
++      has_eof = true;
++    else
++      has_eof = false;
++    if (c == '\n' && !has_eof) {
+       gt_assert(t->token);
+       gt_str_append_char(t->token, c);
+     }
+--- a/src/core/tokenizer.h
++++ b/src/core/tokenizer.h
+@@ -33,7 +33,7 @@
+ bool          gt_tokenizer_has_token(GtTokenizer*);
+ bool          gt_tokenizer_line_start(const GtTokenizer*);
+ void          gt_tokenizer_next_token(GtTokenizer*); /* go to the next token */
+-GtUword gt_tokenizer_get_line_number(const GtTokenizer*);
++GtUword       gt_tokenizer_get_line_number(const GtTokenizer*);
+ const char*   gt_tokenizer_get_filename(const GtTokenizer*);
+ int           gt_tokenizer_unit_test(GtError*);
+ void          gt_tokenizer_delete(GtTokenizer*);
+--- a/src/core/trans_table.c
++++ b/src/core/trans_table.c
+@@ -21,7 +21,7 @@
+ #include "core/ma.h"
+ #include "core/trans_table.h"
+ 
+-#define GT_AMINOACIDFAIL            -1
++#define GT_AMINOACIDFAIL ((char) 0)
+ 
+ /* The integer which a T is encoded to. */
+ #define GT_T_CODE  0
+--- a/src/extended/gff3_escaping.c
++++ b/src/extended/gff3_escaping.c
+@@ -64,7 +64,8 @@
+   unsigned char d;
+   gt_assert(str && out);
+   if (!(GtIsHexChar[(int) *(str+1)] & 2)
+-        || !(GtIsHexChar[(int) *(str+2)] & 1)) {
++        || !(GtIsHexChar[(int) *(str+2)] & 1)
++        || !strncmp(str, "%7F", 3 * (sizeof (char)))) {
+     return -1;
+   }
+   d = (GtHexToDec[(int) *(str+1)] << 4) | (GtHexToDec[(int) *(str+2)]);

Modified: trunk/packages/genometools/trunk/debian/patches/series
===================================================================
--- trunk/packages/genometools/trunk/debian/patches/series	2014-05-19 11:10:35 UTC (rev 16958)
+++ trunk/packages/genometools/trunk/debian/patches/series	2014-05-19 22:10:19 UTC (rev 16959)
@@ -1,3 +1,4 @@
+fix-unsigned-char
 add-libtre
 adding_soname
 libbam-fix
@@ -8,3 +9,4 @@
 no-xmllint
 spelling
 split-manuals
+arm64-no-m64

Modified: trunk/packages/genometools/trunk/debian/patches/split-manuals
===================================================================
--- trunk/packages/genometools/trunk/debian/patches/split-manuals	2014-05-19 11:10:35 UTC (rev 16958)
+++ trunk/packages/genometools/trunk/debian/patches/split-manuals	2014-05-19 22:10:19 UTC (rev 16959)
@@ -1,5 +1,3 @@
-Description: Split manuals into separate documents to avoid strange LaTeX build issues.
-Author: Sascha Steinbiss <steinbiss at zbh.uni-hamburg.de>
 --- a/doc/manuals/matstat.tex
 +++ b/doc/manuals/matstat.tex
 @@ -1,2 +1,160 @@
@@ -38,18 +36,18 @@
 +
 +The program \Program is called as follows:
 +\par
-+\noindent\Program [\textit{options}] \Showoption{query} \Showoptionarg{files} [\textit{options}]
++\noindent\Program [\textit{options}] \Showoption{query} \Showoptionarg{files} [\textit{options}] 
 +\par
-+\Showoptionarg{files} is a white space separated list of at least one
++\Showoptionarg{files} is a white space separated list of at least one 
 +filename. Any sequence occurring in any file specified in \Showoptionarg{files}
 +is called \textit{unit} in the following.
 +In addition to the mandatory option \Showoption{query}, the program
 +must be called with either option \Showoption{pck} or \Showoption{esa}
-+which specify to use a packed index or an enhanced suffix array for
++which specify to use a packed index or an enhanced suffix array for 
 +a given set of subject sequences.
 +
-+\Program computes the  \textit{matching statistics} for each unit. That is,
-+for each position \(i\) in
++\Program computes the  \textit{matching statistics} for each unit. That is, 
++for each position \(i\) in 
 +each unit, say \(s\) of length \(n\), \(\MS{i}=(l,j)\) is computed. Here
 +\(l\) is the largest integer such that \(\Substring{s}{i}{i+l-1}\) matches
 +a substring represented by the index and \(j\) is a start position of the
@@ -77,20 +75,20 @@
 +
 +\Option{query}{$\Showoptionarg{files}$}{
 +Specify a white space separated list of query files containing the units.
-+At least one query file must be given. The files may be in
++At least one query file must be given. The files may be in 
 +gzipped format, in which case they have to end with the suffix \texttt{.gz}.
 +}
 +
-+\Option{min}{$\ell$}{
++\Option{min}{$\ell$}{                                                           
 +Specify the minimum value $\ell$ for the length of the matching statistics.
-+That is, for each unit \(s\) and each position \(i\) in \(s\), the program
-+reports all values \(i\) and \(\MS{i}\) if the
++That is, for each unit \(s\) and each position \(i\) in \(s\), the program 
++reports all values \(i\) and \(\MS{i}\) if the 
 +length of \(\MS{i}\) is at least \(\ell\).
 +}
 +
 +\Option{max}{$\ell$}{
 +Specify the maximum length $\ell$ for the length of the matching statistics.
-+That is, for each unit \(s\) and each positions \(i\) in \(s\), the program
++That is, for each unit \(s\) and each positions \(i\) in \(s\), the program 
 +reports the values \(i\) and \(\MS{i}\) if the length of \(\MS{i}\)
 +is at most \(\ell\).
 +}
@@ -100,7 +98,7 @@
 +$\Showoptionkey{subjectpos}$,
 +$\Showoptionkey{querypos}$, and
 +$\Showoptionkey{sequence}$ must be used.
-+Using the keyword $\Showoptionkey{subjectpos}$ shows the
++Using the keyword $\Showoptionkey{subjectpos}$ shows the 
 +subject position of the matching statistics.
 +Using the keyword $\Showoptionkey{querypos}$ shows the query position.
 +Using the keyword $\Showoptionkey{sequence}$ shows the sequence content
@@ -125,7 +123,7 @@
 +\section{Examples}
 +
 +Suppose that in some directory, say \texttt{homo-sapiens}, we have 25 gzipped
-+fasta files containing all 24 human chromomsomes plus one file with
++fasta files containing all 24 human chromomsomes plus one file with 
 +mitrochondrial sequences. These may have been downloaded from
 +\url{ftp://ftp.ensembl.org/pub/current_fasta/homo_sapiens_47_36i/dna}.
 +
@@ -136,7 +134,7 @@
 +                       -indexname human-all -db homo-sapiens/*.gz
 +\end{Output}
 +
-+The program runs for almost two hours and delivers
++The program runs for almost two hours and delivers 
 +an index \texttt{human-all} consisting of three files:
 +
 +\begin{Output}
@@ -149,7 +147,7 @@
 +This is used in the following call to the program \Program:
 +
 +\begin{Output}
-+gt matstat -output subjectpos querypos sequence -min 20 -max 30
++gt matstat -output subjectpos querypos sequence -min 20 -max 30 
 +           -query queryfile.fna -pck human-all
 +unit 0 (Mus musculus, chr 1, complete sequence)
 +22 20 390765125 actgtatctcaaaatataaa
@@ -168,12 +166,12 @@
 --- a/doc/manuals/uniquesub.tex
 +++ b/doc/manuals/uniquesub.tex
 @@ -8,38 +8,15 @@
-
+ 
  \usepackage{verbatim}
  \usepackage{ifthen}
 -\usepackage{comment}
  \usepackage{optionman}
-
+ 
 -\ifthenelse{\isundefined{\BuildMatstat}}{%
 -\includecomment{AboutUniquesub}
 -\excludecomment{AboutMatstat}
@@ -187,7 +185,7 @@
 -}
 -
  \newcommand{\Substring}[3]{#1[#2..#3]}
-
+ 
 -\begin{AboutUniquesub}
  \newcommand{\Program}[0]{\texttt{uniquesub}\xspace}
  \newcommand{\Mup}[1]{\mathit{mup(s,#1)}}
@@ -203,96 +201,44 @@
 -       matching statistics\\
 -       a manual}
 -\end{AboutMatstat}
-
+ 
  \author{\begin{tabular}{c}
           \textit{Stefan Kurtz}\\
-@@ -54,47 +31,35 @@
-
- The program \Program is called as follows:
- \par
--\noindent\Program [\textit{options}] \Showoption{query} \Showoptionarg{files} [\textit{options}]
-+\noindent\Program [\textit{options}] \Showoption{query} \Showoptionarg{files} [\textit{options}]
- \par
--\Showoptionarg{files} is a white space separated list of at least one
-+\Showoptionarg{files} is a white space separated list of at least one
- filename. Any sequence occurring in any file specified in \Showoptionarg{files}
- is called \textit{unit} in the following.
- In addition to the mandatory option \Showoption{query}, the program
- must be called with either option \Showoption{pck} or \Showoption{esa}
--which specify to use a packed index or an enhanced suffix array for
-+which specify to use a packed index or an enhanced suffix array for
+@@ -64,7 +41,6 @@
+ which specify to use a packed index or an enhanced suffix array for 
  a given set of subject sequences.
-
+ 
 -\begin{AboutUniquesub}
  \Program computes for all positions \(i\) in each unit, say \(s\) of length
--\(n\), the length \(\Mup{i}\) of the minimum unique prefix
-+\(n\), the length \(\Mup{i}\) of the minimum unique prefix
+ \(n\), the length \(\Mup{i}\) of the minimum unique prefix 
  at position \(i\), if it exists. Uniqueness always refers to all substrings
--represented by the index. \(\Mup{i}\) is defined by the following two
-+represented by the index. \(\Mup{i}\) is defined by the following two
- statements:
- \begin{itemize}
- \item
- If \(\Substring{s}{i}{n-1}\) is not unique in the index, then \(\Mup{i}=\bot\).
- That is, it is undefined.
- \item
--If \(\Substring{s}{i}{n-1}\) is unique in the index, then \(\Mup{i}=m\), where
--\(m\) is the smallest value such that \(i+m-1\leq n-1\) and
-+If \(\Substring{s}{i}{n-1}\) is unique in the index, then \(\Mup{i}=m\), where
-+\(m\) is the smallest value such that \(i+m-1\leq n-1\) and
- \(\Substring{s}{i}{i+m-1}\) occurs exactly once as a substring in the index.
- \end{itemize}
--Note that it is possible that for all \(i\in[0,n-1]\) we have
--\(\Mup{i}=\bot\), which means that unit \(s\) does not contain any unique
-+Note that it is possible that for all \(i\in[0,n-1]\) we have
-+\(\Mup{i}=\bot\), which means that unit \(s\) does not contain any unique
+@@ -84,17 +60,6 @@
  substring. In this case, the program reports nothing for the corresponding
  unit. The program was developed for designing whole genome tiling arrays.
  The corresponding publication is \cite{GRAE:NIE:KUR:HUY:BIR:STU:FLI:2007}.
 -\end{AboutUniquesub}
 -
 -\begin{AboutMatstat}
--\Program computes the  \textit{matching statistics} for each unit. That is,
--for each position \(i\) in
+-\Program computes the  \textit{matching statistics} for each unit. That is, 
+-for each position \(i\) in 
 -each unit, say \(s\) of length \(n\), \(\MS{i}=(l,j)\) is computed. Here
 -\(l\) is the largest integer such that \(\Substring{s}{i}{i+l-1}\) matches
 -a substring represented by the index and \(j\) is a start position of the
 -matching substring in the index. We say that \(l\) is the length of \(\MS{i}\)
 -and \(j\) is the subject position of \(\MS{i}\).
 -\end{AboutMatstat}
-
+ 
  The following options are available in \Program:
-
-@@ -117,58 +82,29 @@
-
- \Option{query}{$\Showoptionarg{files}$}{
- Specify a white space separated list of query files containing the units.
--At least one query file must be given. The files may be in
-+At least one query file must be given. The files may be in
+ 
+@@ -121,7 +86,6 @@
  gzipped format, in which case they have to end with the suffix \texttt{.gz}.
  }
-
+ 
 -\begin{AboutUniquesub}
  \Option{min}{$\ell$}{
  Specify the minimum length $\ell$ of the minimum unique prefixes.
--That is, for each unit \(s\) and each positions \(i\) in \(s\), the program
--reports the values \(i\) and \(\Mup{i}\) whenever \(\Mup{i}\geq\ell\).
-+That is, for each unit \(s\) and each positions \(i\) in \(s\), the program
-+reports the values \(i\) and \(\Mup{i}\) whenever \(\Mup{i}\geq\ell\).
- }
-
- \Option{max}{$\ell$}{
- Specify the maximum length $\ell$ of the minimum unique prefixes.
--That is, for each unit \(s\) and each positions \(i\) in \(s\), the program
-+That is, for each unit \(s\) and each positions \(i\) in \(s\), the program
- reports the values \(i\) and \(\Mup{i}\) whenever \(\Mup{i}\leq\ell\).
- }
-
- \Option{output}{(\Showoptionkey{querypos}$\mid$\Showoptionkey{sequence})}{
- Specify what to output. At least one of the two keys words
--$\Showoptionkey{querypos}$ and $\Showoptionkey{sequence}$ must be used.
-+$\Showoptionkey{querypos}$ and $\Showoptionkey{sequence}$ must be used.
- Using the keyword $\Showoptionkey{querypos}$ shows the query position.
+ That is, for each unit \(s\) and each positions \(i\) in \(s\), the program 
+@@ -141,34 +105,6 @@
  Using the keyword $\Showoptionkey{sequence}$ shows the sequence content
  of the match.
  }
@@ -301,14 +247,14 @@
 -\begin{AboutMatstat}
 -\Option{min}{$\ell$}{
 -Specify the minimum value $\ell$ for the length of the matching statistics.
--That is, for each unit \(s\) and each position \(i\) in \(s\), the program
--reports all values \(i\) and \(\MS{i}\) if the
+-That is, for each unit \(s\) and each position \(i\) in \(s\), the program 
+-reports all values \(i\) and \(\MS{i}\) if the 
 -length of \(\MS{i}\) is at least \(\ell\).
 -}
 -
 -\Option{max}{$\ell$}{
 -Specify the maximum length $\ell$ for the length of the matching statistics.
--That is, for each unit \(s\) and each positions \(i\) in \(s\), the program
+-That is, for each unit \(s\) and each positions \(i\) in \(s\), the program 
 -reports the values \(i\) and \(\MS{i}\) if the length of \(\MS{i}\)
 -is at most \(\ell\).
 -}
@@ -318,62 +264,23 @@
 -$\Showoptionkey{subjectpos}$,
 -$\Showoptionkey{querypos}$, and
 -$\Showoptionkey{sequence}$ must be used.
--Using the keyword $\Showoptionkey{subjectpos}$ shows the
+-Using the keyword $\Showoptionkey{subjectpos}$ shows the 
 -subject position of the matching statistics.
 -Using the keyword $\Showoptionkey{querypos}$ shows the query position.
 -Using the keyword $\Showoptionkey{sequence}$ shows the sequence content
 -}
 -\end{AboutMatstat}
-
+ 
  \Helpoption
-
-@@ -189,7 +125,7 @@
- \section{Examples}
-
- Suppose that in some directory, say \texttt{homo-sapiens}, we have 25 gzipped
--fasta files containing all 24 human chromomsomes plus one file with
-+fasta files containing all 24 human chromomsomes plus one file with
- mitrochondrial sequences. These may have been downloaded from
- \url{ftp://ftp.ensembl.org/pub/current_fasta/homo_sapiens_47_36i/dna}.
-
-@@ -200,7 +136,7 @@
-                        -indexname human-all -db homo-sapiens/*.gz
- \end{Output}
-
--The program runs for almost two hours and delivers
-+The program runs for almost two hours and delivers
- an index \texttt{human-all} consisting of three files:
-
- \begin{Output}
-@@ -212,9 +148,8 @@
-
+ 
+@@ -212,7 +148,6 @@
+ 
  This is used in the following call to the program \Program:
-
+ 
 -\begin{AboutUniquesub}
  \begin{Output}
--gt uniquesub -output querypos -min 20 -max 30 -query queryfile.fna
-+gt uniquesub -output querypos -min 20 -max 30 -query queryfile.fna
+ gt uniquesub -output querypos -min 20 -max 30 -query queryfile.fna 
               -pck human-all
- unit 0 (Mus musculus, chr 1, complete sequence)
- 1007 20
-@@ -227,7 +162,7 @@
-
- For all units \(s\) in the multiple \Fasta file \texttt{queryfile.fna},
- a line is shown, reporting the number of the unit and the original fasta
--header. Also, all for positions \(i\) in \(s\) satisfying
-+header. Also, all for positions \(i\) in \(s\) satisfying
- \(20\leq \Mup{i}\leq 30\), \(i\) and \(\Mup{i}\) is reported.
-
- The first column is the relative position in the unit sequence (counting
-@@ -238,7 +173,7 @@
- \Showoption{output}:
-
- \begin{Output}
--gt uniquesub -output querypos sequence -min 20 -max 30
-+gt uniquesub -output querypos sequence -min 20 -max 30
-              -query queryfile.fna -pck human-all
- unit 0 (Mus musculus, chr 1, complete sequence)
- 1007 20 ctgacagtttttttttttta
 @@ -248,27 +183,7 @@
  1013 21 gttttttttttttactttata
  ...
@@ -382,7 +289,7 @@
 -
 -\begin{AboutMatstat}
 -\begin{Output}
--gt matstat -output subjectpos querypos sequence -min 20 -max 30
+-gt matstat -output subjectpos querypos sequence -min 20 -max 30 
 -           -query queryfile.fna -pck human-all
 -unit 0 (Mus musculus, chr 1, complete sequence)
 -22 20 390765125 actgtatctcaaaatataaa
@@ -397,14 +304,14 @@
 -the corresponding length value. The third column shows position of the
 -matching sequence in the index, and the fourth shows the sequence content.
 -\end{AboutMatstat}
-
+ 
 -\begin{AboutUniquesub}
  %\bibliographystyle{plain}
  %\bibliography{defines,kurtz}
  \begin{thebibliography}{1}
 @@ -280,5 +195,4 @@
  \newblock {\em {Bioinformatics}}, {23 ISMB/ECCB 2007}:{i195--i204}, 2007.
-
+ 
  \end{thebibliography}
 -\end{AboutUniquesub}
  \end{document}




More information about the debian-med-commit mailing list