SHA256
1
0
forked from pool/transfig

Accepting request 1070588 from home:StefanBruens:branches:Publishing

OBS-URL: https://build.opensuse.org/request/show/1070588
OBS-URL: https://build.opensuse.org/package/show/Publishing/transfig?expand=0&rev=83
This commit is contained in:
Dr. Werner Fink 2023-03-10 08:19:23 +00:00 committed by Git OBS Bridge
parent 8b9196e968
commit 9615ad6216
3 changed files with 205 additions and 71 deletions

View File

@ -0,0 +1,123 @@
From e72a9d017742366cba636d783ea121279bfb7d6c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stefan=20Br=C3=BCns?= <stefan.bruens@rwth-aachen.de>
Date: Thu, 9 Mar 2023 19:19:51 +0100
Subject: [PATCH] Make ModDate and CreationDate in PDF reproducible
Ghostscript ignores the date in the preamble and uses the current
time instead. This notably breaks the SOURCE_DATE_EPOCH support
for reproducible builds.
Passing the creation time as DOCINFO pdfmark forces gs to use the
specified date/time. Although ghostscript still adds the unreproducible
DocumentUUID and trailer ID, it is sufficient when including the PDF
figure with pdflatex.
Reuse the SOURCE_DATE_EPOCH code from creation_date for determining
the wanted timestamp, and return the formatted time via the new
`creation_date_pdfmark` function.
---
fig2dev/creationdate.c | 38 +++++++++++++++++++++++++++++++++-----
fig2dev/creationdate.h | 1 +
fig2dev/dev/genps.c | 8 ++++++++
3 files changed, 42 insertions(+), 5 deletions(-)
diff --git a/fig2dev/creationdate.c b/fig2dev/creationdate.c
index a51bfd4..de914a5 100644
--- a/fig2dev/creationdate.c
+++ b/fig2dev/creationdate.c
@@ -36,8 +36,8 @@
#include "creationdate.h"
-int
-creation_date(char *buf)
+static struct tm*
+parse_time()
{
time_t now;
@@ -70,15 +70,43 @@ creation_date(char *buf)
} else {
/* no errors, epoch is valid */
now = epoch;
- strftime(buf, CREATION_TIME_LEN, "%F %H:%M:%S", gmtime(&now));
- return true;
+ return gmtime(&now);
}
}
#endif
/* fall trough on errors or !source_date_epoch */
time(&now);
- if (strftime(buf, CREATION_TIME_LEN, "%F %H:%M:%S", localtime(&now)))
+ return localtime(&now);
+}
+
+static struct tm*
+get_time()
+{
+ static struct tm time = { 0 };
+ static int initialized = 0;
+ if (!initialized) {
+ time = *parse_time();
+ initialized = 1;
+ }
+ return &time;
+}
+
+int
+creation_date(char *buf)
+{
+ if (strftime(buf, CREATION_TIME_LEN, "%F %H:%M:%S", get_time()))
+ return true;
+ else
+ return false;
+}
+
+int
+creation_date_pdfmark(char *buf)
+{
+ // Pdfmark format should be D:YYYYMMDDHHmmSSOHHmm.
+ // Timezone offset (O...) may be omitted
+ if (strftime(buf, CREATION_TIME_LEN, "D:%Y%m%d%H%M%S", get_time()))
return true;
else
return false;
diff --git a/fig2dev/creationdate.h b/fig2dev/creationdate.h
index 048508a..199d985 100644
--- a/fig2dev/creationdate.h
+++ b/fig2dev/creationdate.h
@@ -21,3 +21,4 @@
#define CREATION_TIME_LEN 36
extern int creation_date(char *buf);
+extern int creation_date_pdfmark(char *buf);
diff --git a/fig2dev/dev/genps.c b/fig2dev/dev/genps.c
index 5bea35c..48e05a6 100644
--- a/fig2dev/dev/genps.c
+++ b/fig2dev/dev/genps.c
@@ -1181,6 +1181,7 @@ genps_end(void)
const int h = pageheight, w = pagewidth;
int epslen, tiflen;
struct stat fstat;
+ char date_buf[CREATION_TIME_LEN];
/* for multipage, translate and output objects for each page */
if (multi_page) {
@@ -1368,6 +1369,13 @@ genps_end(void)
/* final DSC comment for eps output (EOF = end of document) */
fputs("%EOF\n", tfp);
+ if (pdfflag) {
+ if (creation_date_pdfmark(date_buf))
+ fprintf(tfp,
+ "[ /ModDate (%s)\n /CreationDate (%s)\n /DOCINFO pdfmark\n",
+ date_buf, date_buf);
+ }
+
/* all ok */
return 0;
}
--
2.39.2

View File

@ -1,3 +1,20 @@
-------------------------------------------------------------------
Thu Mar 9 19:39:39 UTC 2023 - Stefan Brüns <stefan.bruens@rwth-aachen.de>
- Make PDF output via ghostscript (for large parts) reproducible,
add 0001-Make-ModDate-and-CreationDate-in-PDF-reproducible.patch
-------------------------------------------------------------------
Thu Mar 9 17:02:41 UTC 2023 - Stefan Brüns <stefan.bruens@rwth-aachen.de>
- Fix fig2mpdf documentation:
* rerun latex to get references right.
* uudecode images for html documentation.
- Clean up spec file, remove parts for EOLed SLE 11.
- Depend on texlive-epstopdf only if texlive is installed.
- Use weak dependency on ghostscript, vector output formats
like EPS, PS and SVG do not depend on it.
------------------------------------------------------------------- -------------------------------------------------------------------
Wed Oct 6 10:45:30 UTC 2021 - Dr. Werner Fink <werner@suse.de> Wed Oct 6 10:45:30 UTC 2021 - Dr. Werner Fink <werner@suse.de>

View File

@ -1,7 +1,7 @@
# #
# spec file for package transfig # spec file for package transfig
# #
# Copyright (c) 2021 SUSE LLC # Copyright (c) 2023 SUSE LLC
# #
# All modifications and additions to the file contributed by third parties # All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed # remain the property of their copyright owners, unless otherwise agreed
@ -17,52 +17,14 @@
Name: transfig Name: transfig
BuildRequires: fdupes
BuildRequires: libjpeg-devel
BuildRequires: netpbm
BuildRequires: texlive-latex
%if %suse_version > 1220
BuildRequires: texlive-amsfonts
BuildRequires: texlive-cm-super
BuildRequires: texlive-courier
BuildRequires: texlive-dvips
%if 0%{?suse_version} > 1315
BuildRequires: texlive-epstopdf
%endif
BuildRequires: texlive-pdftex
BuildRequires: texlive-times
BuildRequires: tex(beamer.cls)
%if 0%{?suse_version} > 1315
BuildRequires: tex(german.sty)
%endif
BuildRequires: tex(multimedia.sty)
BuildRequires: tex(times.sty)
BuildRequires: tex(xmpmulti.sty)
%endif
BuildRequires: libpng-devel
%if 0%{?suse_version} > 1310
BuildRequires: pkgconfig(xpm)
%else
BuildRequires: xorg-x11-libXpm-devel
BuildRequires: xz
BuildRoot: %{_tmppath}/%{name}-%{version}-build
%endif
# www.xfig.org is dead
URL: http://mcj.sourceforge.net/
Provides: fig2dev
Provides: transfig.3.2.3d
Requires: ghostscript-fonts-std
Requires: ghostscript-library
Requires: netpbm
%if 0%{?suse_version} > 1315
Requires: texlive-epstopdf
%endif
Version: 3.2.8b Version: 3.2.8b
Release: 0 Release: 0
Summary: Graphic Converter Summary: Graphic Converter
#Source: http://sourceforge.net/projects/mcj/files/fig2dev-%{version}.tar.xz/download#/fig2dev-%{version}.tar.xz # www.xfig.org is dead
URL: https://mcj.sourceforge.net/
License: MIT License: MIT
Group: Productivity/Graphics/Convertors Group: Productivity/Graphics/Convertors
#Source: http://sourceforge.net/projects/mcj/files/fig2dev-%%{version}.tar.xz/download#/fig2dev-%%{version}.tar.xz
Source: fig2dev-%{version}.tar.xz Source: fig2dev-%{version}.tar.xz
Patch0: transfig-3.2.8.dif Patch0: transfig-3.2.8.dif
Patch1: 1b09a8.patch Patch1: 1b09a8.patch
@ -70,6 +32,37 @@ Patch4: transfig-fix-afl.patch
Patch43: fig2dev-3.2.6-fig2mpdf.patch Patch43: fig2dev-3.2.6-fig2mpdf.patch
Patch44: fig2dev-3.2.6-fig2mpdf-doc.patch Patch44: fig2dev-3.2.6-fig2mpdf-doc.patch
Patch45: fig2dev-3.2.6a-RGBFILE.patch Patch45: fig2dev-3.2.6a-RGBFILE.patch
Patch46: 0001-Make-ModDate-and-CreationDate-in-PDF-reproducible.patch
BuildRequires: fdupes
BuildRequires: libjpeg-devel
BuildRequires: libpng-devel
BuildRequires: netpbm
BuildRequires: sharutils
#!BuildIgnore: texlive-tex4ht
BuildRequires: texlive-courier
BuildRequires: texlive-latex
%if 0%{?suse_version} > 1315
BuildRequires: texlive-epstopdf
%endif
BuildRequires: texlive-pdftex
BuildRequires: texlive-times
BuildRequires: tex(8r.enc)
BuildRequires: tex(beamer.cls)
%if 0%{?suse_version} > 1315
BuildRequires: tex(german.sty)
%endif
BuildRequires: pkgconfig(xpm)
BuildRequires: tex(multimedia.sty)
BuildRequires: tex(times.sty)
BuildRequires: tex(xmpmulti.sty)
Provides: fig2dev
Recommends: ghostscript-fonts-std
Recommends: ghostscript-library
Requires: netpbm
Recommends: texlive-epstopdf
%if 0%{?suse_version} > 1315
Requires: (texlive-epstopdf if texlive-latex)
%endif
%description %description
TransFig is a set of tools for creating TeX documents with graphics TransFig is a set of tools for creating TeX documents with graphics
@ -81,27 +74,16 @@ which generates a Makefile which translates Fig code to various
graphics description languages using the fig2dev program. In previous graphics description languages using the fig2dev program. In previous
releases, this command was implemented as a shell script. releases, this command was implemented as a shell script.
Documentation: man transfig
Authors:
--------
Anthony Starks <ajs@merck.com>
George Ferguson <ferguson@cs.rochester.edu>
Herbert Bauer <heb@regent.e-technik.tu-muenchen.de>
Micah Beck <supoj@sally.utexas.edu>
Supoj Sutantavibul <beck@cs.utk.ecu>
%prep %prep
%setup -q -n fig2dev-%{version} %setup -q -n fig2dev-%{version}
find -type f | xargs -r chmod a-x,go-w find -type f -exec chmod a-x,go-w '{}' \;
%patch0 -p0 -b .0 %patch0 -p0 -b .0
%patch1 -p0 -b .1 %patch1 -p0 -b .1
%patch4 -p1 -b .afl %patch4 -p1 -b .afl
%patch43 -p1 -b .mpdf %patch43 -p1 -b .mpdf
%patch44 -p1 -b .mpdfdoc %patch44 -p1 -b .mpdfdoc
%patch45 -p1 -b .p45 %patch45 -p1 -b .p45
%patch46 -p1 -b .pdfmark
%build %build
ulimit -v unlimited || : ulimit -v unlimited || :
@ -155,32 +137,44 @@ chmod 755 configure
--docdir=%{_defaultdocdir}/%{name} \ --docdir=%{_defaultdocdir}/%{name} \
--enable-transfig \ --enable-transfig \
--enable-scale-pic2t2e --enable-scale-pic2t2e
make %{?_smp_mflags} CCOPTIONS="$CFLAGS" %make_build CCOPTIONS="$CFLAGS"
pushd transfig/doc
../../fig2dev/fig2dev -L latex trans.fig > trans.tex
pdflatex -draft manual.tex
pdflatex -draft manual.tex
pdflatex manual.tex
popd
pushd fig2mpdf/doc
%if 0%{?suse_version} > 1315
make
while $(grep -q -i 'rerunfilecheck.*warning' sample-presentation.log); do
pdflatex sample-presentation
done
%endif
mkdir htmlimg
(cd htmlimg; uudecode ../*.uue)
popd
%install %install
find -name '*.mpdfdoc' -o -name '*.mpdf' | xargs -r rm -vf #find -name '*.mpdfdoc' -o -name '*.mpdf' | xargs -r rm -vf
make DESTDIR=%{buildroot} install %make_install
install -m 0755 fig2mpdf/fig2mpdf %{buildroot}%{_bindir} install -m 0755 fig2mpdf/fig2mpdf %{buildroot}%{_bindir}
install -m 0644 fig2mpdf/fig2mpdf.1 %{buildroot}%{_mandir}/man1/ install -m 0644 fig2mpdf/fig2mpdf.1 %{buildroot}%{_mandir}/man1/
gzip -9 %{buildroot}%{_mandir}/man1/fig2mpdf.1
mkdir -p %{buildroot}%{_defaultdocdir}/%{name} mkdir -p %{buildroot}%{_defaultdocdir}/%{name}
install -m 0644 [CLNR]* %{buildroot}%{_defaultdocdir}/%{name} install -m 0644 [CLNR]* %{buildroot}%{_defaultdocdir}/%{name}
%if 0%{?suse_version} > 1315 install -m 0644 transfig/doc/manual.pdf %{buildroot}%{_defaultdocdir}/%{name}/transfig.pdf
pushd fig2mpdf/doc pushd fig2mpdf/doc
make
mkdir %{buildroot}%{_defaultdocdir}/%{name}/fig2mpdf mkdir %{buildroot}%{_defaultdocdir}/%{name}/fig2mpdf
rm -f overlay-sample-?.pdf install -m 0644 *.{html,css,lfig} %{buildroot}%{_defaultdocdir}/%{name}/fig2mpdf/
rm -f *.aux *.log *.nav *.out *.snm *.toc install -m 0644 htmlimg/*.{jpg,gif,pdf} %{buildroot}%{_defaultdocdir}/%{name}/fig2mpdf/
install -m 0644 * %{buildroot}%{_defaultdocdir}/%{name}/fig2mpdf/ install -m 0644 sample-presentation.tex Makefile %{buildroot}%{_defaultdocdir}/%{name}/fig2mpdf/
popd %if 0%{?suse_version} > 1315
install -m 0644 sample-presentation.pdf %{buildroot}%{_defaultdocdir}/%{name}/fig2mpdf/
%endif %endif
pushd transfig/doc
../../fig2dev/fig2dev -L latex trans.fig > trans.tex
pdflatex manual.tex
pdflatex manual.tex
pdflatex manual.tex
install -m 0644 manual.pdf %{buildroot}%{_defaultdocdir}/%{name}/transfig.pdf
popd popd
%fdupes %{buildroot} %fdupes %{buildroot}