diff --git a/.fmf/version b/.fmf/version new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/.fmf/version @@ -0,0 +1 @@ +1 diff --git a/paps-0.6.8-ftbfs.patch b/paps-0.6.8-ftbfs.patch new file mode 100644 index 0000000..01bdb5c --- /dev/null +++ b/paps-0.6.8-ftbfs.patch @@ -0,0 +1,13 @@ +バイナリーファイル paps-0.6.8.orig/src/paps-paps.o とpaps-0.6.8/src/paps-paps.o は異なります +diff -pruN paps-0.6.8.orig/src/paps.c paps-0.6.8/src/paps.c +--- paps-0.6.8.orig/src/paps.c 2025-01-27 18:18:12.130570673 +0900 ++++ paps-0.6.8/src/paps.c 2025-01-27 18:47:05.214883811 +0900 +@@ -515,7 +515,7 @@ int main(int argc, char *argv[]) + } /* if (!cups_mode) */ + + paps = paps_new(); +- pango_context = paps_get_pango_context (paps); ++ pango_context = paps_get_pango_context (); + + /* Setup pango */ + pango_context_set_language (pango_context, get_language ()); diff --git a/paps-0.6.8-glib282.patch b/paps-0.6.8-glib282.patch new file mode 100644 index 0000000..7d3d165 --- /dev/null +++ b/paps-0.6.8-glib282.patch @@ -0,0 +1,12 @@ +diff -pruN paps-0.6.8.orig/src/paps.c paps-0.6.8/src/paps.c +--- paps-0.6.8.orig/src/paps.c 2024-09-13 21:07:13.225683344 +0900 ++++ paps-0.6.8/src/paps.c 2024-09-13 21:10:24.177041518 +0900 +@@ -784,7 +784,7 @@ split_text_into_paragraphs (PangoContext + while (p != NULL && *p) + { + wc = g_utf8_get_char (p); +- next = g_utf8_next_char (p); ++ next = (char *) g_utf8_next_char (p); + if (wc == (gunichar)-1) + { + fprintf (stderr, "%s: Invalid character in input\n", g_get_prgname ()); diff --git a/paps-c99.patch b/paps-c99.patch new file mode 100644 index 0000000..115043e --- /dev/null +++ b/paps-c99.patch @@ -0,0 +1,44 @@ +Use AC_USE_SYSTEM_EXTENSIONS and include , so that +makes a declaration of wcwidth available. Include +for a declaration of g_vasprintf. This avoids implicit function +declarations and build failures with future compilers. + +No need to upstream this because it only impacts the bundled 0.6.8 +sources, the later 0.8.0 version has already been fixed upstream. The +g_vasprintf call was introduced in the paps-0.6.6-lcnumeric.patch +downstream patch. + +diff -ur paps-0.8.0.orig/paps-0.6.8/configure.in paps-0.8.0/paps-0.6.8/configure.in +--- paps-0.8.0.orig/paps-0.6.8/configure.in 2023-04-13 11:56:29.571277839 +0200 ++++ paps-0.8.0/paps-0.6.8/configure.in 2023-04-13 12:00:03.228135149 +0200 +@@ -6,6 +6,7 @@ + AC_LANG_C + AC_PROG_CC + AM_PROG_LIBTOOL ++AC_USE_SYSTEM_EXTENSIONS + + dnl ====================================================== + dnl check for CUPS +diff -ur paps-0.8.0.orig/paps-0.6.8/src/paps.c paps-0.8.0/paps-0.6.8/src/paps.c +--- paps-0.8.0.orig/paps-0.6.8/src/paps.c 2023-04-13 11:56:29.583277719 +0200 ++++ paps-0.8.0/paps-0.6.8/src/paps.c 2023-04-13 12:02:28.958673663 +0200 +@@ -20,7 +20,7 @@ + * + */ + +- ++#include + #include + #include + #include "libpaps.h" +diff -ur paps-0.8.0.orig/paps-0.6.8/src/libpaps.c paps-0.8.0/paps-0.6.8/src/libpaps.c +--- paps-0.8.0.orig/paps-0.6.8/src/libpaps.c 2023-04-13 11:56:29.581277739 +0200 ++++ paps-0.8.0/paps-0.6.8/src/libpaps.c 2023-04-13 12:07:17.504779917 +0200 +@@ -23,6 +23,7 @@ + + #include "libpaps.h" + ++#include + #include + #include + #include diff --git a/paps-fix-build.patch b/paps-fix-build.patch new file mode 100644 index 0000000..e77f387 --- /dev/null +++ b/paps-fix-build.patch @@ -0,0 +1,85 @@ +From e2180b2e1493abc2a8d1165e10bf264d50fac0ae Mon Sep 17 00:00:00 2001 +From: Akira TAGOH +Date: Wed, 1 Mar 2023 15:24:27 +0900 +Subject: [PATCH] Fix the build issue + +Some code ignores a return value of g_string_free() and that causes: + +ignoring return value of 'gchar* g_string_free_and_steal(GString*)' declared with attribute 'warn_unused_result' [-Wunused-result] + +This fixes it. +--- + src/paps.cc | 21 ++++++++++++--------- + 1 file changed, 12 insertions(+), 9 deletions(-) + +diff --git a/src/paps.cc b/src/paps.cc +index cb48ddc..429b764 100644 +--- a/src/paps.cc ++++ b/src/paps.cc +@@ -368,6 +368,7 @@ copy_pango_parse_enum (GType type, + { + int i; + GString *s = g_string_new (nullptr); ++ gchar *gstr; + + for (i = 0, v = g_enum_get_value (klass, i); v; + i++ , v = g_enum_get_value (klass, i)) +@@ -382,10 +383,10 @@ copy_pango_parse_enum (GType type, + G_ENUM_CLASS_TYPE_NAME(klass), + s->str); + +- if (possible_values) +- *possible_values = s->str; ++ gstr = g_string_free (s, possible_values ? false : true); + +- g_string_free (s, possible_values ? false : true); ++ if (possible_values) ++ *possible_values = gstr; + } + } + +@@ -1001,7 +1002,7 @@ read_file (FILE *file, + if (ferror (file)) + { + fprintf(stderr, _("%s: Error reading file.\n"), g_get_prgname ()); +- g_string_free (inbuf, true); ++ (void) g_string_free (inbuf, true); + exit(1); + } + else if (bp == nullptr) +@@ -1043,8 +1044,7 @@ read_file (FILE *file, + if (inbuf->len && inbuf->str[inbuf->len-1] != '\n') + g_string_append(inbuf, "\n"); + +- text = inbuf->str; +- g_string_free (inbuf, false); ++ text = g_string_free (inbuf, false); + + if (encoding != nullptr && cvh != nullptr) + g_iconv_close(cvh); +@@ -1671,7 +1671,11 @@ get_date() + fprintf(stderr, _("%1$s: Error while converting date string from '%2$s' to UTF-8.\n"), + g_get_prgname(), get_encoding()); + /* Return the unconverted string. */ +- g_string_free(inbuf, false); ++ /* ++ * inbuf isn't used here, but a few memory is ++ * allocated by default. so it should be freed anyway. ++ */ ++ (void) g_string_free(inbuf, true); + g_iconv_close(cvh); + return date; + } +@@ -1679,8 +1683,7 @@ get_date() + obuffer[BUFSIZE * 6 - 1 - oblen] = 0; + g_string_append(inbuf, bp); + +- date_utf8 = inbuf->str; +- g_string_free(inbuf, false); ++ date_utf8 = g_string_free(inbuf, false); + g_iconv_close(cvh); + } + +-- +2.39.2 + diff --git a/paps-fix-cpi.patch b/paps-fix-cpi.patch index f917296..7bc3f61 100644 --- a/paps-fix-cpi.patch +++ b/paps-fix-cpi.patch @@ -310,7 +310,7 @@ index 334d547..72dbaad 100644 + + para->length = i; + next = g_utf8_offset_to_pointer(para->text, para->length); -+ wc = g_utf8_prev_char(next); ++ wc = g_utf8_get_char(g_utf8_prev_char(next)); + } else { + pango_layout_set_text(para->layout, para->text, para->length); + } diff --git a/paps-fix-src-to-paps.patch b/paps-fix-src-to-paps.patch new file mode 100644 index 0000000..d18f8af --- /dev/null +++ b/paps-fix-src-to-paps.patch @@ -0,0 +1,18 @@ +diff -pruN paps-0.8.0.orig/scripts/src-to-paps paps-0.8.0/scripts/src-to-paps +--- paps-0.8.0.orig/scripts/src-to-paps 2023-02-09 16:27:38.000000000 +0900 ++++ paps-0.8.0/scripts/src-to-paps 2023-03-01 15:00:27.801416563 +0900 +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/python3 + + ###################################################################### + # Use GNU source-hightlight to turn source code into pango markup +@@ -49,7 +49,7 @@ def arg_if_not_none(param_name, val): + # Defaults + + # TBD - Make this a configuration variable +-pango_outlang_path = '/usr/local/share/paps/pango_markup.outlang' ++pango_outlang_path = '/usr/share/paps/pango_markup.outlang' + + parser = argparse.ArgumentParser(description='Process a file') + parser.add_argument('-o', '--output', diff --git a/paps-glib282.patch b/paps-glib282.patch new file mode 100644 index 0000000..23bd2b4 --- /dev/null +++ b/paps-glib282.patch @@ -0,0 +1,34 @@ +g_utf8_next_char no longer includes a cast to char* as of 2.81.0: + +https://gitlab.gnome.org/GNOME/glib/-/merge_requests/4016 + +diff -up a/src/paps.cc b/src/paps.cc +--- a/src/paps.cc 2024-09-12 19:21:02.858439427 -0400 ++++ b/src/paps.cc 2024-09-12 21:15:46.905955152 -0400 +@@ -1115,7 +1115,7 @@ split_text_into_paragraphs (PangoContext + while (p != nullptr && *p) + { + wc = g_utf8_get_char (p); +- next = g_utf8_next_char (p); ++ next = (char *) g_utf8_next_char (p); + if (wc == (gunichar)-1) + { + fprintf (stderr, _("%s: Invalid character in input\n"), g_get_prgname ()); +@@ -1130,7 +1130,7 @@ split_text_into_paragraphs (PangoContext + para->length = p - last_para; + /* handle dos line breaks */ + if (wc == '\r' && *next == '\n') +- next = g_utf8_next_char(next); ++ next = (char *) g_utf8_next_char(next); + para->layout = pango_layout_new (pango_context); + + if (page_layout->cpi > 0.0L) +@@ -1201,7 +1201,7 @@ split_text_into_paragraphs (PangoContext + g_free (newtext); + + para->length = i; +- next = g_utf8_offset_to_pointer (para->text, para->length); ++ next = (char *) g_utf8_offset_to_pointer (para->text, para->length); + wc = g_utf8_get_char (g_utf8_prev_char (next)); + } + else diff --git a/paps.spec b/paps.spec index 8412055..2177152 100644 --- a/paps.spec +++ b/paps.spec @@ -1,13 +1,16 @@ Name: paps -Version: 0.6.8 -Release: 46%{?dist} +Version: 0.8.0 +Release: 14%{?dist} -License: LGPLv2+ -URL: http://paps.sourceforge.net/ -Source0: http://downloads.sourceforge.net/%{name}/%{name}-%{version}.tar.gz +License: LGPL-2.0-or-later +URL: https://github.com/dov/paps +Source0: https://github.com/dov/paps/archive/v%{name}/%{name}-%{version}.tar.gz Source1: paps.convs -Source2: 29-paps.conf -BuildRequires: pango-devel automake autoconf libtool doxygen cups-devel +Source2: 29-paps.conf +Source3: http://downloads.sourceforge.net/%{name}/%{name}-0.6.8.tar.gz +BuildRequires: make +BuildRequires: pango-devel automake autoconf libtool doxygen cups-devel intltool +BuildRequires: fmt-devel gcc-c++ ## https://sourceforge.net/tracker/index.php?func=detail&aid=1832897&group_id=153049&atid=786241 Patch0: paps-0.6.8-shared.patch ## https://sourceforge.net/tracker/index.php?func=detail&aid=1832924&group_id=153049&atid=786241 @@ -40,59 +43,78 @@ Patch59: %{name}-ft-header.patch Patch60: %{name}-a3.patch ## rhbz#1214939 Patch61: %{name}-fix-paper-size-truncate.patch +Patch62: paps-c99.patch +Patch63: paps-0.6.8-glib282.patch +Patch64: paps-0.6.8-ftbfs.patch +### For paps +Patch100: %{name}-fix-src-to-paps.patch +Patch101: %{name}-fix-build.patch +Patch102: %{name}-glib282.patch Summary: Plain Text to PostScript converter -Requires: %{name}-libs = %{version}-%{release} -Requires: cups-filesystem fontpackages-filesystem %description paps is a PostScript converter from plain text file using Pango. -%package libs -Summary: Libraries for paps -%description libs +%package -n texttopaps +Summary: CUPS filter based on paps +Obsoletes: %{name}-libs < %{version} +Obsoletes: %{name}-devel < %{version} +Requires: cups-filesystem fontpackages-filesystem +%description -n texttopaps + paps is a PostScript converter from plain text file using Pango. -This package contains the library for paps. +This package contains a CUPS filter based on paps. -%package devel -Summary: Development files for paps -Requires: %{name}-libs = %{version}-%{release} -%description devel -paps is a PostScript converter from plain text file using Pango. - -This package contains the development files that is necessary to develop -applications using paps API. %prep -%setup -q -%patch0 -p1 -b .shared -%patch1 -p1 -b .wordwrap -%patch2 -p1 -b .langinfo -%patch3 -p1 -b .lcnumeric -%patch4 -p1 -b .exitcode -%patch5 -p1 -b .manpage -%patch50 -p1 -b .cups -%patch51 -p1 -b .cpilpi -%patch52 -p1 -b .dsc -%patch53 -p1 -b .autoconf262 -%patch54 -p1 -b .fixcpi -%patch55 -p1 -b .loop -%patch56 -p1 -b .tab -%patch57 -p1 -b .weak-symbol -%patch58 -p1 -b .fsf -%patch59 -p1 -b .ft-header -%patch60 -p1 -b .a3 -%patch61 -p1 -b .paper-size +%setup -q -a 3 +%patch 100 -p1 -b .src-to-paps +%patch 101 -p1 -b .build +%patch 102 -p1 -b .glib282 +pushd %{name}-0.6.8 +%patch 0 -p1 -b .shared +%patch 1 -p1 -b .wordwrap +%patch 2 -p1 -b .langinfo +%patch 3 -p1 -b .lcnumeric +%patch 4 -p1 -b .exitcode +%patch 5 -p1 -b .manpage +%patch 50 -p1 -b .cups +%patch 51 -p1 -b .cpilpi +%patch 52 -p1 -b .dsc +%patch 53 -p1 -b .autoconf262 +%patch 54 -p1 -b .fixcpi +%patch 55 -p1 -b .loop +%patch 56 -p1 -b .tab +%patch 57 -p1 -b .weak-symbol +%patch 58 -p1 -b .fsf +%patch 59 -p1 -b .ft-header +%patch 60 -p1 -b .a3 +%patch 61 -p1 -b .paper-size +%patch 62 -p2 -b .configure-c99 +%patch 63 -p1 -b .glib282 +%patch 64 -p1 -b .ftbfs libtoolize -f -c autoreconf -f -i +popd %build +./autogen.sh +%set_build_flags +%if 0%{?rhel} +CXXFLAGS="$CXXFLAGS -DFMT_HEADER_ONLY" +%endif %configure --disable-static make %{?_smp_mflags} +pushd %{name}-0.6.8 +%configure --disable-static +make %{?_smp_mflags} +popd %install +pushd %{name}-0.6.8 make install DESTDIR=$RPM_BUILD_ROOT INSTALL="/usr/bin/install -p" # remove unnecessary files @@ -100,7 +122,8 @@ rm $RPM_BUILD_ROOT%{_libdir}/libpaps.la # make a symlink for CUPS filter install -d $RPM_BUILD_ROOT%{_cups_serverbin}/filter # Not libdir -ln -s %{_bindir}/paps $RPM_BUILD_ROOT%{_cups_serverbin}/filter/texttopaps +mv $RPM_BUILD_ROOT%{_bindir}/paps $RPM_BUILD_ROOT%{_cups_serverbin}/filter/texttopaps +mv $RPM_BUILD_ROOT%{_mandir}/man1/paps.1 $RPM_BUILD_ROOT%{_mandir}/man1/texttopaps.1 install -d $RPM_BUILD_ROOT%{_datadir}/cups/mime install -p -m0644 %{SOURCE1} $RPM_BUILD_ROOT%{_datadir}/cups/mime/ @@ -108,27 +131,106 @@ install -p -m0644 %{SOURCE1} $RPM_BUILD_ROOT%{_datadir}/cups/mime/ install -d $RPM_BUILD_ROOT%{_sysconfdir}/fonts/conf.d install -p -m0644 %{SOURCE2} $RPM_BUILD_ROOT%{_sysconfdir}/fonts/conf.d/ +rm -rf $RPM_BUILD_ROOT%{_includedir} +rm $RPM_BUILD_ROOT%{_libdir}/libpaps.so +popd + +make install DESTDIR=$RPM_BUILD_ROOT INSTALL="/usr/bin/install -p" %ldconfig_scriptlets libs %files -%doc AUTHORS COPYING.LIB README TODO +%doc AUTHORS COPYING.LIB README +%dir %{_datadir}/paps %{_bindir}/paps +%{_bindir}/src-to-paps +%{_datadir}/paps/pango_markup.outlang %{_mandir}/man1/paps.1* + +%files -n texttopaps +%doc %{name}-0.6.8/COPYING.LIB %{name}-0.6.8/AUTHORS %{name}-0.6.8/README +%{_mandir}/man1/texttopaps.1* +%{_libdir}/libpaps.so.* %{_cups_serverbin}/filter/texttopaps %{_datadir}/cups/mime/paps.convs %{_sysconfdir}/fonts/conf.d/29-paps.conf -%files libs -%doc COPYING.LIB -%{_libdir}/libpaps.so.* - -%files devel -%doc COPYING.LIB -%{_includedir}/libpaps.h -%{_libdir}/libpaps.so %changelog +* Thu Jul 24 2025 Fedora Release Engineering - 0.8.0-14 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild + +* Mon Jan 27 2025 Akira TAGOH - 0.8.0-13 +- Fix FTBFS + Resolves: rhbz#2341001 + +* Fri Jan 17 2025 Fedora Release Engineering - 0.8.0-12 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild + +* Fri Sep 13 2024 Akira TAGOH - 0.8.0-11 +- Fix build with glib 2.82 + Patch from Yaakov Selkowitz + +* Thu Jul 18 2024 Fedora Release Engineering - 0.8.0-10 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild + +* Fri Jun 7 2024 Akira TAGOH - 0.8.0-9 +- Own /usr/share/paps + Resolves: rhbz#2283284 + +* Thu Jan 25 2024 Fedora Release Engineering - 0.8.0-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Sun Jan 21 2024 Fedora Release Engineering - 0.8.0-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Wed Jan 17 2024 Akira TAGOH - 0.8.0-6 +- Fix C type error in paps 0.6.8. + Resolves: rhbz#2256906 + +* Mon Aug 14 2023 Yaakov Selkowitz - 0.8.0-5 +- Use fmt in header-only mode in RHEL builds + +* Thu Jul 20 2023 Fedora Release Engineering - 0.8.0-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Wed Jun 28 2023 Vitaly Zaitsev - 0.8.0-3 +- Rebuilt due to fmt 10 update. + +* Thu Apr 13 2023 Florian Weimer - 0.8.0-2 +- C99 compatibility fixes for paps 0.6.8 + +* Wed Mar 1 2023 Akira TAGOH - 0.8.0-1 +- New upstream release. + Resolves: rhbz#2168726 + +* Tue Feb 7 2023 Akira TAGOH - 0.7.9-1 +- New upstream release. + Resolves: rhbz#2164212 + +* Thu Jan 19 2023 Fedora Release Engineering - 0.7.1-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Mon Dec 5 2022 Akira TAGOH - 0.7.1-6 +- Convert License tag to SPDX. + +* Fri Jul 22 2022 Fedora Release Engineering - 0.7.1-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Thu Jan 20 2022 Fedora Release Engineering - 0.7.1-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Thu Jul 22 2021 Fedora Release Engineering - 0.7.1-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Tue Jan 26 2021 Fedora Release Engineering - 0.7.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Thu Oct 8 2020 Akira TAGOH - 0.7.1-1 +- New upstream release. + Resolves: rhbz#1254352 +- Sub-package texttopaps with old code. + * Tue Jul 28 2020 Fedora Release Engineering - 0.6.8-46 - Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild diff --git a/plans/basic.fmf b/plans/basic.fmf new file mode 100644 index 0000000..c1627f9 --- /dev/null +++ b/plans/basic.fmf @@ -0,0 +1,5 @@ +summary: Basic smoke test +discover: + how: fmf +execute: + how: tmt diff --git a/sources b/sources index a9fd861..fcb89c4 100644 --- a/sources +++ b/sources @@ -1 +1,2 @@ -e9508132bf27609bf2fded2bfd9cb3f1 paps-0.6.8.tar.gz +SHA512 (paps-0.6.8.tar.gz) = db657d90179e11fe42bbcdbebe09a84f1927c99d0b539c9e29b66b3cb8ffcf33ff500c9d81835ae5a0880382bf8f24801f04742517b76b8e005b125a139d8bba +SHA512 (paps-0.8.0.tar.gz) = 33afad0e3dae9cef0fb3afb9994650bf1a7326e72782346e05ab91f7c84f092145247658cdf57868105df47a1bd08e1a961c1ef4c07a2a8fd01eaf8ecd9d948a diff --git a/tests/basic/main.fmf b/tests/basic/main.fmf new file mode 100644 index 0000000..d9d7de5 --- /dev/null +++ b/tests/basic/main.fmf @@ -0,0 +1,5 @@ +summary: Basic test +require: + - paps +test: ./test.sh +framework: beakerlib diff --git a/tests/basic/test.sh b/tests/basic/test.sh new file mode 100755 index 0000000..e07c777 --- /dev/null +++ b/tests/basic/test.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# vim: dict+=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +rlJournalStart + rlPhaseStartSetup + rlRun "tmp=\$(mktemp -d)" 0 "Create tmp directory" + rlRun "pushd $tmp" + rlRun "set -o pipefail" + rlPhaseEnd + + rlPhaseStartTest + rlRun "paps --help | tee output" 0 "Check help message" + rlAssertGrep "paps" "output" + rlPhaseEnd + + rlPhaseStartCleanup + rlRun "popd" + rlRun "rm -r $tmp" 0 "Remove tmp directory" + rlPhaseEnd +rlJournalEnd