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/.cvsignore b/.gitignore similarity index 100% rename from .cvsignore rename to .gitignore diff --git a/29-paps.conf b/29-paps.conf new file mode 100644 index 0000000..1ae98a4 --- /dev/null +++ b/29-paps.conf @@ -0,0 +1,24 @@ + + + + + + + paps + + + true + + + + + + texttopaps + + + true + + + + + diff --git a/Makefile b/Makefile deleted file mode 100644 index 2525be0..0000000 --- a/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -# Makefile for source rpm: paps -# $Id: Makefile,v 1.1 2006/06/27 07:10:51 tagoh Exp $ -NAME := paps -SPECFILE = $(firstword $(wildcard *.spec)) - -define find-makefile-common -for d in common ../common ../../common ; do if [ -f $$d/Makefile.common ] ; then if [ -f $$d/CVS/Root -a -w $$/Makefile.common ] ; then cd $$d ; cvs -Q update ; fi ; echo "$$d/Makefile.common" ; break ; fi ; done -endef - -MAKEFILE_COMMON := $(shell $(find-makefile-common)) - -ifeq ($(MAKEFILE_COMMON),) -# attempt a checkout -define checkout-makefile-common -test -f CVS/Root && { cvs -Q -d $$(cat CVS/Root) checkout common && echo "common/Makefile.common" ; } || { echo "ERROR: I can't figure out how to checkout the 'common' module." ; exit -1 ; } >&2 -endef - -MAKEFILE_COMMON := $(shell $(checkout-makefile-common)) -endif - -include $(MAKEFILE_COMMON) diff --git a/paps-0.6.6-fix-wcswidth.patch b/paps-0.6.6-fix-wcswidth.patch deleted file mode 100644 index c6604c2..0000000 --- a/paps-0.6.6-fix-wcswidth.patch +++ /dev/null @@ -1,47 +0,0 @@ -diff -ruN paps-0.6.6.orig/src/paps.c paps-0.6.6/src/paps.c ---- paps-0.6.6.orig/src/paps.c 2006-12-04 20:08:36.000000000 +0900 -+++ paps-0.6.6/src/paps.c 2006-12-04 20:16:59.000000000 +0900 -@@ -712,7 +712,7 @@ - PangoRectangle ink_rect, logical_rect; - wchar_t *wtext, *wnewtext; - gchar *newtext; -- size_t i, len, wwidth = 0, n; -+ int i, len, wwidth = 0, n; - - wtext = (wchar_t *)g_utf8_to_ucs4 (para->text, para->length, NULL, NULL, NULL); - if (wtext == NULL) -@@ -722,11 +722,17 @@ - } - - len = wcswidth (wtext); -+ if (len < 0) -+ { -+ /* assuming that width of all characters in wtext may be 1 */ -+ len = wcslen (wtext); -+ } - /* the amount of characters to be able to put on the line against CPI */ - n = page_layout->column_width / 72.0 * cpi; - if (len > n) - { -- wnewtext = g_new (wchar_t, wcslen (wtext) + 1); -+ len = wcslen (wtext); -+ wnewtext = g_new (wchar_t, len + 1); - if (wnewtext == NULL) - { - fprintf (stderr, "Failed to allocate a memory.\n"); -@@ -735,7 +741,14 @@ - } - for (i = 0; i < len; i++) - { -- wwidth += wcwidth (wtext[i]); -+ int w = wcwidth (wtext[i]); -+ -+ if (w < 0) -+ { -+ /* assuming that a width of this character may be 1 */ -+ w = 1; -+ } -+ wwidth += w; - if (wwidth > n) - break; - wnewtext[i] = wtext[i]; 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-854897-manpage.patch b/paps-854897-manpage.patch new file mode 100644 index 0000000..c841f44 --- /dev/null +++ b/paps-854897-manpage.patch @@ -0,0 +1,13 @@ +diff -pruN paps-0.6.8.orig/src/paps.1 paps-0.6.8/src/paps.1 +--- paps-0.6.8.orig/src/paps.1 2007-01-19 20:05:27.000000000 +0900 ++++ paps-0.6.8/src/paps.1 2012-09-06 18:04:01.000000000 +0900 +@@ -64,6 +64,9 @@ Draw page header for each page. + .B \-\-markup + Interpret the text as pango markup. + .TP ++.B \-\-encoding=ENCODING ++Assume the documentation encoding is ENCODING. ++.TP + .B \-\-lpi + Set the lines per inch. This determines the line spacing. + .TP diff --git a/paps-a3.patch b/paps-a3.patch new file mode 100644 index 0000000..3628b3a --- /dev/null +++ b/paps-a3.patch @@ -0,0 +1,40 @@ +--- paps-0.6.8/src/paps.c.orig 2015-02-26 14:17:29.351338514 +0530 ++++ paps-0.6.8/src/paps.c 2015-02-26 14:17:29.351338514 +0530 +@@ -45,7 +45,8 @@ + typedef enum { + PAPER_TYPE_A4 = 0, + PAPER_TYPE_US_LETTER = 1, +- PAPER_TYPE_US_LEGAL = 2 ++ PAPER_TYPE_US_LEGAL = 2, ++ PAPER_TYPE_A3 = 3 + } paper_type_t ; + + typedef struct { +@@ -56,7 +57,8 @@ + const paper_size_t paper_sizes[] = { + { 595.28, 841.89}, /* A4 */ + { 612, 792}, /* US letter */ +- { 612, 1008} /* US legal */ ++ { 612, 1008}, /* US legal */ ++ { 842, 1190} /* A3 */ + }; + + typedef struct { +@@ -190,6 +192,8 @@ + paper_type = PAPER_TYPE_US_LETTER; + else if (g_ascii_strcasecmp(value, "a4") == 0) + paper_type = PAPER_TYPE_A4; ++ else if (g_ascii_strcasecmp(value, "a3") == 0) ++ paper_type = PAPER_TYPE_A3; + else { + retval = FALSE; + fprintf(stderr, "Unknown page size name: %s.\n", value); +@@ -300,7 +304,7 @@ + {"rtl", 0, 0, G_OPTION_ARG_NONE, &do_rtl, "Do rtl layout.", NULL}, + {"paper", 0, 0, G_OPTION_ARG_CALLBACK, _paps_arg_paper_cb, + "Choose paper size. Known paper sizes are legal,\n" +- " letter, a4. (Default: a4)", "PAPER"}, ++ " letter, a3, a4. (Default: a4)", "PAPER"}, + {"bottom-margin", 0, 0, G_OPTION_ARG_INT, &bottom_margin, "Set bottom margin in postscript point units (1/72inch). (Default: 36)", "NUM"}, + {"top-margin", 0, 0, G_OPTION_ARG_INT, &top_margin, "Set top margin. (Default: 36)", "NUM"}, + {"right-margin", 0, 0, G_OPTION_ARG_INT, &right_margin, "Set right margin. (Default: 36)", "NUM"}, diff --git a/paps-autoconf262.patch b/paps-autoconf262.patch new file mode 100644 index 0000000..1a1c16b --- /dev/null +++ b/paps-autoconf262.patch @@ -0,0 +1,24 @@ +diff -pruN paps-0.6.8.orig/acinclude.m4 paps-0.6.8/acinclude.m4 +--- paps-0.6.8.orig/acinclude.m4 2006-11-29 05:11:50.000000000 +0900 ++++ paps-0.6.8/acinclude.m4 2008-05-16 20:36:03.000000000 +0900 +@@ -76,9 +76,9 @@ AC_DEFUN([DX_IF_FEATURE], [ifelse(DX_FEA + # Require the specified program to be found for the DX_CURRENT_FEATURE to work. + AC_DEFUN([DX_REQUIRE_PROG], [ + AC_PATH_TOOL([$1], [$2]) +-if test "$DX_FLAG_[]DX_CURRENT_FEATURE$$1" = 1; then ++if test "$DX_FLAG_DX_CURRENT_FEATURE$$1" = 1; then + AC_MSG_WARN([$2 not found - will not DX_CURRENT_DESCRIPTION]) +- AC_SUBST([DX_FLAG_[]DX_CURRENT_FEATURE], 0) ++ AC_SUBST([DX_FLAG_DX_CURRENT_FEATURE], 0) + fi + ]) + +@@ -101,7 +101,7 @@ test "$DX_FLAG_$1" = "$2" \ + # ---------------------------------------------------------- + # Turn off the DX_CURRENT_FEATURE if the required feature is off. + AC_DEFUN([DX_CLEAR_DEPEND], [ +-test "$DX_FLAG_$1" = "$2" || AC_SUBST([DX_FLAG_[]DX_CURRENT_FEATURE], 0) ++test "$DX_FLAG_$1" = "$2" || AC_SUBST([DX_FLAG_DX_CURRENT_FEATURE], 0) + ]) + + # DX_FEATURE_ARG(FEATURE, DESCRIPTION, 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-correct-fsf-address.patch b/paps-correct-fsf-address.patch new file mode 100644 index 0000000..5313f85 --- /dev/null +++ b/paps-correct-fsf-address.patch @@ -0,0 +1,77 @@ +diff -pruN paps-0.6.8.orig/COPYING.LIB paps-0.6.8/COPYING.LIB +--- paps-0.6.8.orig/COPYING.LIB 2005-12-21 04:35:27.000000000 +0900 ++++ paps-0.6.8/COPYING.LIB 2012-11-23 14:30:46.297512335 +0900 +@@ -1,16 +1,15 @@ +- GNU LIBRARY GENERAL PUBLIC LICENSE +- Version 2, June 1991 ++ GNU LIBRARY GENERAL PUBLIC LICENSE ++ Version 2, June 1991 + + Copyright (C) 1991 Free Software Foundation, Inc. +- 59 Temple Place - Suite 330 +- Boston, MA 02111-1307, USA. ++ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + [This is the first released version of the library GPL. It is + numbered 2 because it goes with version 2 of the ordinary GPL.] + +- Preamble ++ Preamble + + The licenses for most software are designed to take away your + freedom to share and change it. By contrast, the GNU General Public +@@ -100,7 +99,7 @@ works together with the library. + Note that it is possible for a library to be covered by the ordinary + General Public License rather than by this special one. + +- GNU LIBRARY GENERAL PUBLIC LICENSE ++ GNU LIBRARY GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library which +@@ -412,7 +411,7 @@ decision will be guided by the two goals + of all derivatives of our free software and of promoting the sharing + and reuse of software generally. + +- NO WARRANTY ++ NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO + WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +@@ -435,8 +434,9 @@ FAILURE OF THE LIBRARY TO OPERATE WITH A + SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + DAMAGES. + +- END OF TERMS AND CONDITIONS +- How to Apply These Terms to Your New Libraries ++ END OF TERMS AND CONDITIONS ++ ++ How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest + possible use to the public, we recommend making it free software that +@@ -453,18 +453,18 @@ convey the exclusion of warranty; and ea + Copyright (C) + + This library is free software; you can redistribute it and/or +- modify it under the terms of the GNU Lesser General Public ++ modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +- Lesser General Public License for more details. ++ Library General Public License for more details. + +- You should have received a copy of the GNU Lesser General Public ++ You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free Software +- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ++ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + Also add information on how to contact you by electronic and paper mail. + diff --git a/paps-cpilpi.patch b/paps-cpilpi.patch index f64859a..522bda6 100644 --- a/paps-cpilpi.patch +++ b/paps-cpilpi.patch @@ -1,6 +1,6 @@ -diff -pruN -x .libs -x '*o' -x '*ps' ../paps-0.6.8.orig/src/paps.c ../paps-0.6.8/src/paps.c ---- paps-0.6.8.orig/src/paps.c 2007-11-28 16:20:56.000000000 +0900 -+++ paps-0.6.8/src/paps.c 2007-11-30 17:53:06.000000000 +0900 +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 2008-11-07 08:27:54.000000000 +0900 ++++ paps-0.6.8/src/paps.c 2008-11-07 08:29:08.000000000 +0900 @@ -92,8 +92,8 @@ typedef struct { gchar *filename; gchar *header_font_desc; @@ -12,15 +12,15 @@ diff -pruN -x .libs -x '*o' -x '*ps' ../paps-0.6.8.orig/src/paps.c ../paps-0.6.8 } page_layout_t; typedef struct { -@@ -376,6 +376,7 @@ int main(int argc, char *argv[]) - bottom_margin = 36; - page_width = 612; +@@ -378,6 +378,7 @@ int main(int argc, char *argv[]) page_height = 792; + font = g_strdup(MAKE_FONT_NAME ("Courier", DEFAULT_FONT_SIZE)); + header_font_desc = g_strdup(MAKE_FONT_NAME ("Courier", HEADER_FONT_SCALE)); + do_stretch_chars = TRUE; if (argc < 6 || argc > 7) { fprintf(stderr, "ERROR: %s job-id user title copies options [file]\n", prgname); -@@ -596,7 +597,8 @@ int main(int argc, char *argv[]) +@@ -595,7 +596,8 @@ int main(int argc, char *argv[]) /* calculate x-coordinate scale */ if (page_layout.cpi > 0.0L) { @@ -30,7 +30,7 @@ diff -pruN -x .libs -x '*o' -x '*ps' ../paps-0.6.8.orig/src/paps.c ../paps-0.6.8 fontmap = pango_ft2_font_map_new (); fontset = pango_font_map_load_fontset (fontmap, pango_context, font_description, get_language ()); metrics = pango_fontset_get_metrics (fontset); -@@ -608,13 +610,10 @@ int main(int argc, char *argv[]) +@@ -607,13 +609,10 @@ int main(int argc, char *argv[]) pango_font_metrics_unref (metrics); g_object_unref (G_OBJECT (fontmap)); @@ -46,7 +46,7 @@ diff -pruN -x .libs -x '*o' -x '*ps' ../paps-0.6.8.orig/src/paps.c ../paps-0.6.8 } page_layout.scale_x = page_layout.scale_y = 1.0; -@@ -1002,6 +1001,7 @@ output_pages(FILE *OUT, +@@ -1001,6 +1000,7 @@ output_pages(FILE *OUT, int column_y_pos = 0; int page_idx = 1; int pango_column_height = page_layout->column_height * page_layout->pt_to_pixel * PANGO_SCALE; @@ -54,7 +54,7 @@ diff -pruN -x .libs -x '*o' -x '*ps' ../paps-0.6.8.orig/src/paps.c ../paps-0.6.8 LineLink *prev_line_link = NULL; start_page(OUT, page_idx); -@@ -1039,17 +1039,17 @@ output_pages(FILE *OUT, +@@ -1038,17 +1038,17 @@ output_pages(FILE *OUT, ); } } diff --git a/paps-cups.patch b/paps-cups.patch index 88fa9a4..acedf48 100644 --- a/paps-cups.patch +++ b/paps-cups.patch @@ -1,6 +1,6 @@ diff -pruN paps-0.6.8.orig/configure.in paps-0.6.8/configure.in --- paps-0.6.8.orig/configure.in 2007-01-19 20:06:10.000000000 +0900 -+++ paps-0.6.8/configure.in 2007-11-30 18:40:32.000000000 +0900 ++++ paps-0.6.8/configure.in 2008-11-07 08:21:19.000000000 +0900 @@ -7,6 +7,19 @@ AC_LANG_C AC_PROG_CC AM_PROG_LIBTOOL @@ -22,8 +22,8 @@ diff -pruN paps-0.6.8.orig/configure.in paps-0.6.8/configure.in DX_CHM_FEATURE(OFF) DX_CHI_FEATURE(OFF) diff -pruN paps-0.6.8.orig/src/Makefile.am paps-0.6.8/src/Makefile.am ---- paps-0.6.8.orig/src/Makefile.am 2007-11-30 18:40:15.000000000 +0900 -+++ paps-0.6.8/src/Makefile.am 2007-11-30 18:40:32.000000000 +0900 +--- paps-0.6.8.orig/src/Makefile.am 2008-11-07 08:21:05.000000000 +0900 ++++ paps-0.6.8/src/Makefile.am 2008-11-07 08:21:19.000000000 +0900 @@ -5,10 +5,10 @@ libpapsinc_HEADERS = libpaps.h libpapsincdir = $(includedir) @@ -38,17 +38,18 @@ diff -pruN paps-0.6.8.orig/src/Makefile.am paps-0.6.8/src/Makefile.am EXTRA_DIST = test_libpaps.c paps.1 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 2007-11-30 18:40:15.000000000 +0900 -+++ paps-0.6.8/src/paps.c 2007-11-30 18:47:28.000000000 +0900 -@@ -31,6 +31,7 @@ +--- paps-0.6.8.orig/src/paps.c 2008-11-07 08:21:05.000000000 +0900 ++++ paps-0.6.8/src/paps.c 2008-11-07 08:26:28.000000000 +0900 +@@ -31,6 +31,8 @@ #include #include #include +#include ++#include #define BUFSIZE 1024 #define DEFAULT_FONT_FAMILY "Monospace" -@@ -86,9 +87,11 @@ typedef struct { +@@ -86,9 +88,11 @@ typedef struct { gboolean do_wordwrap; gboolean do_use_markup; gboolean do_stretch_chars; @@ -60,7 +61,7 @@ diff -pruN paps-0.6.8.orig/src/paps.c paps-0.6.8/src/paps.c gint lpi; gint cpi; } page_layout_t; -@@ -320,8 +323,8 @@ int main(int argc, char *argv[]) +@@ -320,8 +324,8 @@ int main(int argc, char *argv[]) int num_pages = 1; int gutter_width = 40; int total_gutter_width; @@ -71,7 +72,7 @@ diff -pruN paps-0.6.8.orig/src/paps.c paps-0.6.8/src/paps.c int do_tumble = -1; /* -1 means not initialized */ int do_duplex = -1; gchar *paps_header = NULL; -@@ -331,6 +334,8 @@ int main(int argc, char *argv[]) +@@ -331,6 +335,8 @@ int main(int argc, char *argv[]) int max_width = 0, w; GIConv cvh = NULL; GOptionGroup *options; @@ -80,7 +81,7 @@ diff -pruN paps-0.6.8.orig/src/paps.c paps-0.6.8/src/paps.c /* Set locale from environment. */ setlocale(LC_ALL, ""); -@@ -348,6 +353,134 @@ int main(int argc, char *argv[]) +@@ -348,6 +354,130 @@ int main(int argc, char *argv[]) g_option_context_add_main_entries(ctxt, entries, NULL); #endif @@ -107,6 +108,8 @@ diff -pruN paps-0.6.8.orig/src/paps.c paps-0.6.8/src/paps.c + bottom_margin = 36; + page_width = 612; + page_height = 792; ++ font = g_strdup(MAKE_FONT_NAME ("Courier", DEFAULT_FONT_SIZE)); ++ header_font_desc = g_strdup(MAKE_FONT_NAME ("Courier", HEADER_FONT_SCALE)); + + if (argc < 6 || argc > 7) { + fprintf(stderr, "ERROR: %s job-id user title copies options [file]\n", prgname); @@ -148,14 +151,8 @@ diff -pruN paps-0.6.8.orig/src/paps.c paps-0.6.8/src/paps.c + if ((val = cupsGetOption("landscape", num_options, options)) != NULL) { + if (g_ascii_strcasecmp(val, "no") && + g_ascii_strcasecmp(val, "off") && -+ g_ascii_strcasecmp(val, "false")) { -+ /* We really need to deal with the landscape orientation because -+ * pstops doesn't deal with the position where it should appears. -+ * However this causes the unnecessary rotation by pstops. so paps -+ * will puts the fake Orientation tag and stop rotating in PS. -+ */ ++ g_ascii_strcasecmp(val, "false")) + do_landscape = TRUE; -+ } + } + /* XXX: need to support orientation-requested? */ + if ((val = cupsGetOption("page-left", num_options, options)) != NULL) { @@ -215,7 +212,7 @@ diff -pruN paps-0.6.8.orig/src/paps.c paps-0.6.8/src/paps.c /* Parse command line */ if (!g_option_context_parse(ctxt, &argc, &argv, &error)) { -@@ -374,6 +507,8 @@ int main(int argc, char *argv[]) +@@ -374,6 +504,8 @@ int main(int argc, char *argv[]) IN = stdin; } title = filename_in; @@ -224,7 +221,7 @@ diff -pruN paps-0.6.8.orig/src/paps.c paps-0.6.8/src/paps.c paps = paps_new(); pango_context = paps_get_pango_context (paps); -@@ -392,8 +527,10 @@ int main(int argc, char *argv[]) +@@ -392,8 +524,10 @@ int main(int argc, char *argv[]) pango_context_set_font_description (pango_context, font_description); /* Page layout */ @@ -237,7 +234,7 @@ diff -pruN paps-0.6.8.orig/src/paps.c paps-0.6.8/src/paps.c if (num_columns == 1) total_gutter_width = 0; -@@ -456,6 +593,8 @@ int main(int argc, char *argv[]) +@@ -456,6 +590,8 @@ int main(int argc, char *argv[]) page_layout.pango_dir = pango_dir; page_layout.filename = filename_in; page_layout.header_font_desc = header_font_desc; @@ -246,7 +243,7 @@ diff -pruN paps-0.6.8.orig/src/paps.c paps-0.6.8/src/paps.c /* calculate x-coordinate scale */ if (page_layout.cpi > 0.0L) -@@ -756,6 +895,12 @@ split_text_into_paragraphs (PangoContext +@@ -756,6 +892,12 @@ split_text_into_paragraphs (PangoContext if (wc == (gunichar)-1) { fprintf (stderr, "%s: Invalid character in input\n", g_get_prgname ()); @@ -259,15 +256,19 @@ diff -pruN paps-0.6.8.orig/src/paps.c paps-0.6.8/src/paps.c wc = 0; } if (!*p || !wc || wc == '\n' || wc == '\f') -@@ -925,6 +1070,7 @@ void print_postscript_header(FILE *OUT, +@@ -925,21 +1067,32 @@ void print_postscript_header(FILE *OUT, int orientation = page_layout->page_width > page_layout->page_height; int bb_page_width = page_layout->page_width; int bb_page_height = page_layout->page_height; + char *owner = NULL; /* Keep bounding box non-rotated to make ggv happy */ - if (orientation) -@@ -934,12 +1080,20 @@ void print_postscript_header(FILE *OUT, +- if (orientation) ++ /* ensure the correct bounding box for CUPS */ ++ if (orientation && !page_layout->cups_mode) + { + int tmp = bb_page_width; + bb_page_width = bb_page_height; bb_page_height = tmp; } @@ -281,6 +282,7 @@ diff -pruN paps-0.6.8.orig/src/paps.c paps-0.6.8/src/paps.c + } fprintf(OUT, "%%!PS-Adobe-3.0\n" ++ "%s" "%%%%Title: %s\n" "%%%%Creator: paps version 0.6.7 by Dov Grobgeld\n" "%%%%Pages: (atend)\n" @@ -289,31 +291,35 @@ diff -pruN paps-0.6.8.orig/src/paps.c paps-0.6.8/src/paps.c "%%%%BeginProlog\n" "%%%%Orientation: %s\n" "/papsdict 1 dict def\n" -@@ -989,8 +1143,13 @@ void print_postscript_header(FILE *OUT, +@@ -961,7 +1114,7 @@ void print_postscript_header(FILE *OUT, + " pagewidth\n" + " /pagewidth pageheight def\n" + " /pageheight exch def\n" +- " /orientation 3 def\n" ++ " /orientation %d def\n" + " } if\n" + " 2 dict\n" + " dup /PageSize [pagewidth pageheight] put\n" +@@ -986,11 +1139,21 @@ void print_postscript_header(FILE *OUT, + " 90 rotate\n" + " 0 pageheight neg translate\n" + "} def\n", ++ /* ++ * Put %%cupsRotation tag to prevent the rotation in pstops. ++ * This breaks paps's behavior to make it in landscape say. ++ * (RH#222137) ++ */ ++ (page_layout->cups_mode ? "%cupsRotation: 0\n" : ""), title, bb_page_width, bb_page_height, - orientation_names[orientation] + owner, -+ /* Put the fake orientation tag if paps is currently running under -+ * the CUPS filter mode. (#222137) -+ */ -+ orientation_names[orientation && !page_layout->cups_mode] ++ orientation_names[orientation], ++ /* For landscape, rotate page to portrait orientation for CUPS (RH#222137) */ ++ page_layout->cups_mode ? 2 : 3 ); + g_free(owner); fprintf(OUT, "%% User settings\n" -@@ -1015,7 +1174,11 @@ void print_postscript_header(FILE *OUT, - page_layout->left_margin, - page_layout->page_height - bodytop, - bool_name[page_layout->do_separation_line>0], -- bool_name[page_layout->do_landscape>0], -+ /* just ignore the landscape flag when paps is currently running -+ * under the CUPS filter mode. this will stop rotating in PS that -+ * paps generates. (#222137) -+ */ -+ bool_name[page_layout->do_landscape>0 && !page_layout->cups_mode], - bool_name[page_layout->do_tumble>0], - bool_name[page_layout->do_duplex>0] - ); diff --git a/paps-0.6.8-dsc-compliant.patch b/paps-dsc-compliant.patch similarity index 81% rename from paps-0.6.8-dsc-compliant.patch rename to paps-dsc-compliant.patch index 702d52b..3da5f00 100644 --- a/paps-0.6.8-dsc-compliant.patch +++ b/paps-dsc-compliant.patch @@ -1,6 +1,6 @@ diff -pruN paps-0.6.8.orig/src/libpaps.c paps-0.6.8/src/libpaps.c ---- paps-0.6.8.orig/src/libpaps.c 2008-01-15 11:09:30.000000000 +0900 -+++ paps-0.6.8/src/libpaps.c 2008-01-15 11:10:10.000000000 +0900 +--- paps-0.6.8.orig/src/libpaps.c 2008-05-14 23:07:14.000000000 +0900 ++++ paps-0.6.8/src/libpaps.c 2008-05-14 23:11:12.000000000 +0900 @@ -118,7 +118,6 @@ gchar *paps_get_postscript_header_strdup gchar *ret_str; g_string_append_printf(paps->header, @@ -42,9 +42,9 @@ diff -pruN paps-0.6.8.orig/src/libpaps.c paps-0.6.8/src/libpaps.c } 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 2008-01-15 11:09:30.000000000 +0900 -+++ paps-0.6.8/src/paps.c 2008-01-15 11:10:46.000000000 +0900 -@@ -665,7 +665,7 @@ int main(int argc, char *argv[]) +--- paps-0.6.8.orig/src/paps.c 2008-05-14 23:07:14.000000000 +0900 ++++ paps-0.6.8/src/paps.c 2008-05-14 23:12:53.000000000 +0900 +@@ -659,7 +659,7 @@ int main(int argc, char *argv[]) fprintf(OUT, "%s", paps_header); g_free(paps_header); @@ -53,7 +53,7 @@ diff -pruN paps-0.6.8.orig/src/paps.c paps-0.6.8/src/paps.c fprintf(OUT, "%s", ps_pages_string->str); print_postscript_trailer(OUT, num_pages); -@@ -1094,8 +1094,9 @@ void print_postscript_header(FILE *OUT, +@@ -1089,8 +1089,9 @@ void print_postscript_header(FILE *OUT, "%%%%Creator: paps version 0.6.7 by Dov Grobgeld\n" "%%%%Pages: (atend)\n" "%%%%BoundingBox: 0 0 %d %d\n%s" @@ -64,17 +64,17 @@ diff -pruN paps-0.6.8.orig/src/paps.c paps-0.6.8/src/paps.c "/papsdict 1 dict def\n" "papsdict begin\n" "\n" -@@ -1139,7 +1140,8 @@ void print_postscript_header(FILE *OUT, +@@ -1134,7 +1135,8 @@ void print_postscript_header(FILE *OUT, "/turnpage {\n" " 90 rotate\n" " 0 pageheight neg translate\n" - "} def\n", + "} def\n" + "%%%%EndProlog\n", - title, - bb_page_width, - bb_page_height, -@@ -1152,6 +1154,7 @@ void print_postscript_header(FILE *OUT, + /* + * Put %%cupsRotation tag to prevent the rotation in pstops. + * This breaks paps's behavior to make it in landscape say. +@@ -1150,6 +1152,7 @@ void print_postscript_header(FILE *OUT, g_free(owner); fprintf(OUT, @@ -82,7 +82,7 @@ diff -pruN paps-0.6.8.orig/src/paps.c paps-0.6.8/src/paps.c "%% User settings\n" "/pagewidth %d def\n" "/pageheight %d def\n" -@@ -1238,8 +1241,8 @@ void print_postscript_trailer(FILE *OUT, +@@ -1232,8 +1235,8 @@ void print_postscript_trailer(FILE *OUT, int num_pages) { fprintf(OUT, diff --git a/paps-0.6.6-exitcode.patch b/paps-exitcode.patch similarity index 69% rename from paps-0.6.6-exitcode.patch rename to paps-exitcode.patch index 6108798..032b889 100644 --- a/paps-0.6.6-exitcode.patch +++ b/paps-exitcode.patch @@ -1,7 +1,7 @@ -diff -ruN paps-0.6.6.orig/src/paps.c paps-0.6.6/src/paps.c ---- paps-0.6.6.orig/src/paps.c 2006-09-30 02:51:39.000000000 +0900 -+++ paps-0.6.6/src/paps.c 2006-09-30 03:00:26.000000000 +0900 -@@ -346,7 +346,7 @@ +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 2008-09-01 15:54:11.000000000 +0900 ++++ paps-0.6.8/src/paps.c 2008-09-01 15:54:47.000000000 +0900 +@@ -365,7 +365,7 @@ int main(int argc, char *argv[]) if (!IN) { fprintf(stderr, "Failed to open %s!\n", filename_in); @@ -10,7 +10,7 @@ diff -ruN paps-0.6.6.orig/src/paps.c paps-0.6.6/src/paps.c } } else -@@ -457,7 +457,7 @@ +@@ -499,7 +499,7 @@ int main(int argc, char *argv[]) if (cvh == NULL) { fprintf(stderr, "%s: Invalid encoding: %s\n", g_get_prgname (), encoding); @@ -19,7 +19,7 @@ diff -ruN paps-0.6.6.orig/src/paps.c paps-0.6.6/src/paps.c } } -@@ -517,7 +517,7 @@ +@@ -559,7 +559,7 @@ read_file (FILE *file, { fprintf(stderr, "%s: Error reading file.\n", g_get_prgname ()); g_string_free (inbuf, TRUE); @@ -28,7 +28,7 @@ diff -ruN paps-0.6.6.orig/src/paps.c paps-0.6.6/src/paps.c } else if (bp == NULL) break; -@@ -531,7 +531,7 @@ +@@ -573,7 +573,7 @@ read_file (FILE *file, if (g_iconv (handle, &ib, &iblen, &ob, &oblen) == -1) { fprintf (stderr, "%s: Error while converting strings.\n", g_get_prgname ()); @@ -37,7 +37,7 @@ diff -ruN paps-0.6.6.orig/src/paps.c paps-0.6.6/src/paps.c } obuffer[BUFSIZE * 6 - 1 - oblen] = 0; } -@@ -591,7 +591,7 @@ +@@ -637,7 +637,7 @@ split_text_into_paragraphs (PangoContext if (wtext == NULL) { fprintf (stderr, "Failed to convert UTF-8 to UCS-4.\n"); @@ -45,8 +45,8 @@ diff -ruN paps-0.6.6.orig/src/paps.c paps-0.6.6/src/paps.c + exit(1); } - len = wcswidth (wtext); -@@ -604,7 +604,7 @@ + len = g_utf8_strlen (para->text, para->length); +@@ -650,7 +650,7 @@ split_text_into_paragraphs (PangoContext { fprintf (stderr, "Failed to allocate a memory.\n"); g_free (wtext); @@ -55,7 +55,7 @@ diff -ruN paps-0.6.6.orig/src/paps.c paps-0.6.6/src/paps.c } for (i = 0; i < len; i++) { -@@ -619,7 +619,7 @@ +@@ -665,7 +665,7 @@ split_text_into_paragraphs (PangoContext if (newtext == NULL) { fprintf (stderr, "Failed to convert UCS-4 to UTF-8.\n"); 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 new file mode 100644 index 0000000..7bc3f61 --- /dev/null +++ b/paps-fix-cpi.patch @@ -0,0 +1,342 @@ +diff --git a/src/libpaps.c b/src/libpaps.c +index b6363a7..1b80257 100644 +--- a/src/libpaps.c ++++ b/src/libpaps.c +@@ -55,6 +55,9 @@ typedef struct { + double last_pos_x; + double scale_x; + double scale_y; ++ double width; ++ double height; ++ double cpi; + } paps_private_t; + + +@@ -88,6 +91,26 @@ paps_t *paps_new() + } + + void ++paps_set_paper_size(paps_t *paps_, ++ gdouble width, ++ gdouble height) ++{ ++ paps_private_t *paps = (paps_private_t *)paps_; ++ ++ paps->width = width; ++ paps->height = height; ++} ++ ++void ++paps_set_cpi(paps_t *paps_, ++ gdouble cpi) ++{ ++ paps_private_t *paps = (paps_private_t *)paps_; ++ ++ paps->cpi = cpi; ++} ++ ++void + paps_set_scale(paps_t *paps_, + gdouble scale_x, + gdouble scale_y) +@@ -401,7 +424,7 @@ static void draw_contour(paps_private_t *paps, + FT_Face ft_face = pango_ft2_font_get_face(font); + int num_glyphs = glyphs->num_glyphs; + int glyph_idx; +- ++ + for (glyph_idx=0; glyph_idxglyphs[glyph_idx].geometry; +@@ -410,7 +433,11 @@ static void draw_contour(paps_private_t *paps, + glyph_pos_x = x_pos + 1.0*geometry.x_offset * scale; + glyph_pos_y = line_start_pos_y - 1.0*geometry.y_offset * scale; + +- x_pos += geometry.width * scale * paps->scale_x; ++ if (paps->cpi > 0.0L) { ++ x_pos += (1 / paps->cpi * 72.0); ++ } else { ++ x_pos += geometry.width * scale * paps->scale_x; ++ } + + if (glyphs->glyphs[glyph_idx].glyph == PANGO_GLYPH_EMPTY) + continue; +diff --git a/src/libpaps.h b/src/libpaps.h +index 0b74321..cbb4042 100644 +--- a/src/libpaps.h ++++ b/src/libpaps.h +@@ -53,10 +53,16 @@ void paps_free(paps_t *paps); + * @param scale_y y-coordinate scale + * + */ +-void +-paps_set_scale(paps_t *paps, +- gdouble scale_x, +- gdouble scale_y); ++void paps_set_scale(paps_t *paps, ++ gdouble scale_x, ++ gdouble scale_y); ++ ++void paps_set_paper_size(paps_t *paps_, ++ gdouble width, ++ gdouble height); ++ ++void paps_set_cpi(paps_t *paps_, ++ gdouble cpi); + + /** + * libpaps may currently be used only with a PangoContext that it +diff --git a/src/paps.c b/src/paps.c +index 334d547..72dbaad 100644 +--- a/src/paps.c ++++ b/src/paps.c +@@ -33,6 +33,8 @@ + #include + #include + #include ++#include ++#include + + #define BUFSIZE 1024 + #define DEFAULT_FONT_FAMILY "Monospace" +@@ -594,6 +596,8 @@ int main(int argc, char *argv[]) + page_layout.owner = page_owner; + page_layout.cups_mode = cups_mode; + ++ paps_set_paper_size(paps, page_width, page_height); ++ + /* calculate x-coordinate scale */ + if (page_layout.cpi > 0.0L) + { +@@ -606,7 +610,7 @@ int main(int argc, char *argv[]) + w = pango_font_metrics_get_approximate_digit_width (metrics); + if (w > max_width) + max_width = w; +- page_layout.scale_x = 1 / page_layout.cpi * 72.0 * PANGO_SCALE / max_width; ++ page_layout.scale_x = 1 / page_layout.cpi * 72.0 * (gdouble)PANGO_SCALE / (gdouble)max_width; + pango_font_metrics_unref (metrics); + g_object_unref (G_OBJECT (fontmap)); + +@@ -614,6 +618,8 @@ int main(int argc, char *argv[]) + // update the font size to that width + pango_font_description_set_size (font_description, font_size * page_layout.scale_x); + pango_context_set_font_description (pango_context, font_description); ++ ++ paps_set_cpi(paps, page_layout.cpi); + } + + page_layout.scale_x = page_layout.scale_y = 1.0; +@@ -727,119 +733,6 @@ read_file (FILE *file, + return text; + } + +-#if 0 +-/* Take a UTF8 string and break it into paragraphs on \n characters. +- * +- * Sorry. I couldn't figure out what this version was supposed to do +- * +- */ +-static GList * +-split_text_into_paragraphs (PangoContext *pango_context, +- page_layout_t *page_layout, +- int paint_width, /* In pixels */ +- char *text) +-{ +- char *p = text; +- char *next; +- gunichar wc; +- GList *result = NULL; +- char *last_para = text; +- +- while (p != NULL && *p) +- { +- wc = g_utf8_get_char (p); +- next = g_utf8_next_char (p); +- if (wc == (gunichar)-1) +- { +- fprintf (stderr, "%s: Invalid character in input\n", g_get_prgname ()); +- wc = 0; +- } +- if (!*p || !wc || wc == '\n' || wc == '\f') +- { +- Paragraph *para = g_new (Paragraph, 1); +- para->text = last_para; +- para->length = p - last_para; +- para->layout = pango_layout_new (pango_context); +- +- if (cpi > 0.0L && page_layout->do_wordwrap) +- { +- PangoRectangle ink_rect, logical_rect; +- wchar_t *wtext, *wnewtext; +- gchar *newtext; +- size_t i, len, wwidth = 0, n; +- +- wtext = g_utf8_to_ucs4 (para->text, para->length, NULL, NULL, NULL); +- if (wtext == NULL) +- { +- fprintf (stderr, "Failed to convert UTF-8 to UCS-4.\n"); +- exit(1); +- } +- +- len = g_utf8_strlen (para->text, para->length); +- /* the amount of characters to be able to put on the line against CPI */ +- n = page_layout->column_width / 72.0 * cpi; +- if (len > n) +- { +- wnewtext = g_new (wchar_t, wcslen (wtext) + 1); +- if (wnewtext == NULL) +- { +- fprintf (stderr, "Failed to allocate a memory.\n"); +- g_free (wtext); +- exit(1); +- } +- for (i = 0; i < len; i++) +- { +- wwidth += wcwidth (wtext[i]); +- if (wwidth > n) +- break; +- wnewtext[i] = wtext[i]; +- } +- wnewtext[i] = 0L; +- +- newtext = g_ucs4_to_utf8 ((const gunichar *)wnewtext, i, NULL, NULL, NULL); +- if (newtext == NULL) +- { +- fprintf (stderr, "Failed to convert UCS-4 to UTF-8.\n"); +- exit(1); +- } +- +- pango_layout_set_text (para->layout, newtext, -1); +- pango_layout_get_extents (para->layout, &ink_rect, &logical_rect); +- /* update paint_width to wrap_against CPI */ +- paint_width = logical_rect.width / PANGO_SCALE; +- g_free (newtext); +- g_free (wnewtext); +- } +- g_free (wtext); +- } +- pango_layout_set_text (para->layout, para->text, para->length); +- pango_layout_set_justify (para->layout, page_layout->do_justify); +- pango_layout_set_alignment (para->layout, +- page_layout->pango_dir == PANGO_DIRECTION_LTR +- ? PANGO_ALIGN_LEFT : PANGO_ALIGN_RIGHT); +- pango_layout_set_width (para->layout, paint_width * PANGO_SCALE); +- if (page_layout->do_wordwrap) +- pango_layout_set_wrap (para->layout, PANGO_WRAP_WORD_CHAR); +- para->height = 0; +- +- if (wc == '\f') +- para->formfeed = 1; +- else +- para->formfeed = 0; +- +- last_para = next; +- +- result = g_list_prepend (result, para); +- } +- if (!wc) /* incomplete character at end */ +- break; +- p = next; +- } +- +- return g_list_reverse (result); +-} +-#endif +- + /* Take a UTF8 string and break it into paragraphs on \n characters + */ + static GList * +@@ -905,18 +798,85 @@ split_text_into_paragraphs (PangoContext *pango_context, + para->text = last_para; + para->length = p - last_para; + para->layout = pango_layout_new (pango_context); +- // pango_layout_set_font_description (para->layout, font_description); +- pango_layout_set_text (para->layout, para->text, para->length); ++ ++ if (page_layout->cpi > 0.0L && page_layout->do_wordwrap) { ++ /* figuring out the correct width from the pango_font_metrics_get_approximate_width() ++ * is really hard and pango_layout_set_wrap() doesn't work properly then. ++ * Those are not reliable to render the characters exactly according to the given CPI. ++ * So Re-calculate the width to wrap up to be comfortable with CPI. ++ */ ++ wchar_t *wtext = NULL, *wnewtext = NULL; ++ gchar *newtext = NULL; ++ gsize len, col, i, wwidth = 0; ++ PangoRectangle ink_rect, logical_rect; ++ ++ wtext = (wchar_t *)g_utf8_to_ucs4(para->text, para->length, NULL, NULL, NULL); ++ if (wtext == NULL) { ++ fprintf(stderr, "%s: Unable to convert UTF-8 to UCS-4.\n", g_get_prgname()); ++ fail: ++ g_free(wtext); ++ g_free(wnewtext); ++ g_free(newtext); ++ if (page_layout->cups_mode) { ++ /* try to continue parsing text */ ++ p = next; ++ continue; ++ } else { ++ exit(1); ++ } ++ } ++ len = g_utf8_strlen(para->text, para->length); ++ /* the amount of characters that can be put on the line against CPI */ ++ col = page_layout->column_width / 72.0 * page_layout->cpi; ++ if (len > col) { ++ /* need to wrap up them */ ++ wnewtext = g_new(wchar_t, wcslen(wtext) + 1); ++ if (wnewtext == NULL) { ++ fprintf(stderr, "%s: Unable to allocate the memory.\n", g_get_prgname()); ++ goto fail; ++ } ++ for (i = 0; i < len; i++) { ++ wwidth += wcwidth(wtext[i]); ++ if (wwidth > col) ++ break; ++ wnewtext[i] = wtext[i]; ++ } ++ wnewtext[i] = 0L; ++ ++ newtext = g_ucs4_to_utf8((const gunichar *)wnewtext, i, NULL, NULL, NULL); ++ if (newtext == NULL) { ++ fprintf(stderr, "%s: Unable to convert UCS-4 to UTF-8.\n", g_get_prgname()); ++ goto fail; ++ } ++ pango_layout_set_text(para->layout, newtext, -1); ++ pango_layout_get_extents(para->layout, &ink_rect, &logical_rect); ++ paint_width = logical_rect.width / PANGO_SCALE; ++ g_free(wnewtext); ++ g_free(newtext); ++ ++ para->length = i; ++ next = g_utf8_offset_to_pointer(para->text, para->length); ++ wc = g_utf8_get_char(g_utf8_prev_char(next)); ++ } else { ++ pango_layout_set_text(para->layout, para->text, para->length); ++ } ++ g_free(wtext); ++ ++ pango_layout_set_width(para->layout, -1); ++ } else { ++ pango_layout_set_text (para->layout, para->text, para->length); ++ if (page_layout->do_wordwrap) { ++ pango_layout_set_wrap (para->layout, PANGO_WRAP_WORD_CHAR); ++ pango_layout_set_width (para->layout, paint_width * PANGO_SCALE); ++ } else { ++ pango_layout_set_width (para->layout, -1); ++ } ++ } ++ + pango_layout_set_justify (para->layout, page_layout->do_justify); + pango_layout_set_alignment (para->layout, + page_layout->pango_dir == PANGO_DIRECTION_LTR + ? PANGO_ALIGN_LEFT : PANGO_ALIGN_RIGHT); +- if (page_layout->do_wordwrap) { +- pango_layout_set_wrap (para->layout, PANGO_WRAP_WORD_CHAR); +- pango_layout_set_width (para->layout, paint_width * PANGO_SCALE); +- } else { +- pango_layout_set_width (para->layout, -1); +- } + + para->height = 0; + diff --git a/paps-fix-loop-in-split.patch b/paps-fix-loop-in-split.patch new file mode 100644 index 0000000..89bc1fc --- /dev/null +++ b/paps-fix-loop-in-split.patch @@ -0,0 +1,31 @@ +From 6c3fa9959dd454938378ade2fec8e84cee7d6916 Mon Sep 17 00:00:00 2001 +From: Akira TAGOH +Date: Tue, 27 Jul 2010 12:19:30 +0900 +Subject: [PATCH 1/2] Fix rhbz#618483: texttopaps becoms runaway memory hog + + * src/paps.c (split_text_into_paragraphs): fix a infinite loop + when non-printable characters are in the text. +--- + src/paps.c | 5 ++++- + 1 files changed, 4 insertions(+), 1 deletions(-) + + * paps.c: Erased --justify option since it is not implemented in +diff --git a/src/paps.c b/src/paps.c +index 72dbaad..dcef349 100644 +--- a/src/paps.c ++++ b/src/paps.c +@@ -835,7 +835,10 @@ split_text_into_paragraphs (PangoContext *pango_context, + goto fail; + } + for (i = 0; i < len; i++) { +- wwidth += wcwidth(wtext[i]); ++ gssize w = wcwidth(wtext[i]); ++ ++ if (w >= 0) ++ wwidth += w; + if (wwidth > col) + break; + wnewtext[i] = wtext[i]; +-- +1.7.1.1 + diff --git a/paps-fix-non-weak-symbol.patch b/paps-fix-non-weak-symbol.patch new file mode 100644 index 0000000..8edf596 --- /dev/null +++ b/paps-fix-non-weak-symbol.patch @@ -0,0 +1,26 @@ +diff -pruN paps-0.6.8.orig/src/Makefile.am paps-0.6.8/src/Makefile.am +--- paps-0.6.8.orig/src/Makefile.am 2012-11-23 14:22:51.506176037 +0900 ++++ paps-0.6.8/src/Makefile.am 2012-11-23 14:25:41.828410416 +0900 +@@ -8,13 +8,14 @@ bin_PROGRAMS = paps + paps_CFLAGS = -Wall $(CUPS_CFLAGS) + paps_SOURCES = paps.c + paps_LDADD = $(lib_LTLIBRARIES) $(all_libraries) +-paps_LDFLAGS = `pkg-config --libs pangoft2` $(CUPS_LIBS) ++paps_LDFLAGS = $(CUPS_LIBS) + paps_DEPENDENCIES = $(lib_LTLIBRARIES) + + EXTRA_DIST = test_libpaps.c paps.1 + + # set the include path found by configure + INCLUDES= $(all_includes) `pkg-config --cflags pangoft2` ++LIBS = `pkg-config --libs pangoft2` + + # Test program + noinst_PROGRAMS = test_libpaps +@@ -22,6 +23,5 @@ noinst_PROGRAMS = test_libpaps + + test_libpaps_SOURCES = test_libpaps.c + test_libpaps_LDADD = $(lib_LTLIBRARIES) $(all_libraries) +-test_libpaps_LDFLAGS = `pkg-config --libs pangoft2` + test_libpaps_DEPENDENCIES = $(lib_LTLIBRARIES) + diff --git a/paps-fix-paper-size-truncate.patch b/paps-fix-paper-size-truncate.patch new file mode 100644 index 0000000..90e9fcb --- /dev/null +++ b/paps-fix-paper-size-truncate.patch @@ -0,0 +1,15 @@ +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 2015-04-24 11:49:53.220718394 +0900 ++++ paps-0.6.8/src/paps.c 2015-04-24 11:51:30.847718394 +0900 +@@ -532,9 +532,9 @@ int main(int argc, char *argv[]) + + /* Page layout */ + if (page_width < 0) +- page_width = paper_sizes[(int)paper_type].width; ++ page_width = (paper_sizes[(int)paper_type].width + 0.5); + if (page_height < 0) +- page_height = paper_sizes[(int)paper_type].height; ++ page_height = (paper_sizes[(int)paper_type].height + 0.5); + + if (num_columns == 1) + total_gutter_width = 0; 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-fix-tab-width.patch b/paps-fix-tab-width.patch new file mode 100644 index 0000000..a1011ee --- /dev/null +++ b/paps-fix-tab-width.patch @@ -0,0 +1,77 @@ +@@ -, +, @@ +--- + src/libpaps.c | 40 +++++++++++++++++++++++++++++----------- + 1 file changed, 29 insertions(+), 11 deletions(-) +--- a/src/libpaps.c ++++ a/src/libpaps.c +@@ -251,7 +251,6 @@ gchar *paps_layout_line_to_postscript_strdup(paps_t *paps_, + { + paps_private_t *paps = (paps_private_t*)paps_; + GString *layout_str = g_string_new(""); +- gchar *ret_str; + + add_line_to_postscript(paps, + layout_str, +@@ -259,10 +258,7 @@ gchar *paps_layout_line_to_postscript_strdup(paps_t *paps_, + pos_y, + layout_line); + +- ret_str = layout_str->str; +- g_string_free(layout_str, FALSE); +- +- return ret_str; ++ return g_string_free(layout_str, FALSE); + } + + static void +@@ -408,9 +404,26 @@ static void draw_contour(paps_private_t *paps, + { + GSList *runs_list; + double scale = 72.0 / PANGO_SCALE / PAPS_DPI; ++ PangoGlyphUnit avg_width = 1; + + g_string_append(layout_str, "("); +- ++ ++ if (paps->cpi > 0.0L) ++ { ++ /* calculate approximate width per a character */ ++ for (runs_list = pango_line->runs; runs_list != NULL; runs_list = g_slist_next(runs_list)) ++ { ++ PangoLayoutRun *run = runs_list->data; ++ PangoGlyphString *glyphs = run->glyphs; ++ int i; ++ ++ for (i = 0; i < glyphs->num_glyphs; i++) ++ { ++ if (glyphs->glyphs[i].glyph != PANGO_GLYPH_EMPTY) ++ avg_width = MAX (avg_width, glyphs->glyphs[i].geometry.width); ++ } ++ } ++ } + /* Loop over the runs and output font info */ + runs_list = pango_line->runs; + double x_pos = line_start_pos_x; +@@ -433,11 +446,16 @@ static void draw_contour(paps_private_t *paps, + glyph_pos_x = x_pos + 1.0*geometry.x_offset * scale; + glyph_pos_y = line_start_pos_y - 1.0*geometry.y_offset * scale; + +- if (paps->cpi > 0.0L) { +- x_pos += (1 / paps->cpi * 72.0); +- } else { +- x_pos += geometry.width * scale * paps->scale_x; +- } ++ if (paps->cpi > 0.0L) ++ { ++ double n = ((double)geometry.width) / avg_width; ++ ++ x_pos += n * (1 / paps->cpi * 72.0); ++ } ++ else ++ { ++ x_pos += geometry.width * scale * paps->scale_x; ++ } + + if (glyphs->glyphs[glyph_idx].glyph == PANGO_GLYPH_EMPTY) + continue; +-- diff --git a/paps-ft-header.patch b/paps-ft-header.patch new file mode 100644 index 0000000..f2d8a2e --- /dev/null +++ b/paps-ft-header.patch @@ -0,0 +1,15 @@ +diff -pruN paps-0.6.8.orig/src/libpaps.c paps-0.6.8/src/libpaps.c +--- paps-0.6.8.orig/src/libpaps.c 2014-03-20 12:10:50.000000000 +0900 ++++ paps-0.6.8/src/libpaps.c 2014-03-20 12:11:54.000000000 +0900 +@@ -25,8 +25,9 @@ + + #include + #include +-#include +-#include ++#include ++#include FT_GLYPH_H ++#include FT_OUTLINE_H + #include + #include + #include 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-0.6.6-langinfo.patch b/paps-langinfo.patch similarity index 61% rename from paps-0.6.6-langinfo.patch rename to paps-langinfo.patch index 70f172d..2e5b59f 100644 --- a/paps-0.6.6-langinfo.patch +++ b/paps-langinfo.patch @@ -1,6 +1,6 @@ -diff -pruN paps-0.6.6.orig/src/paps.c paps-0.6.6/src/paps.c ---- paps-0.6.6.orig/src/paps.c 2007-01-23 18:56:04.000000000 +0900 -+++ paps-0.6.6/src/paps.c 2007-01-23 18:59:15.000000000 +0900 +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 2008-09-01 15:07:03.000000000 +0900 ++++ paps-0.6.8/src/paps.c 2008-09-01 15:49:10.000000000 +0900 @@ -25,6 +25,7 @@ #include #include "libpaps.h" @@ -9,19 +9,19 @@ diff -pruN paps-0.6.6.orig/src/paps.c paps-0.6.6/src/paps.c #include #include #include -@@ -324,6 +325,9 @@ int main(int argc, char *argv[]) - int max_width = 0, w; +@@ -331,6 +332,9 @@ int main(int argc, char *argv[]) GIConv cvh = NULL; + GOptionGroup *options; + /* Set locale from environment. */ + setlocale(LC_ALL, ""); + /* Prerequisite when using glib. */ g_type_init(); - -@@ -451,6 +455,15 @@ int main(int argc, char *argv[]) - g_object_unref (G_OBJECT (fontmap)); - } + +@@ -480,6 +484,15 @@ int main(int argc, char *argv[]) + page_layout.scale_x = page_layout.scale_y = 1.0; + + if (encoding == NULL) + { diff --git a/paps.convs b/paps.convs new file mode 100644 index 0000000..03d406a --- /dev/null +++ b/paps.convs @@ -0,0 +1,8 @@ +# Use the texttopaps filter (from the paps package) in preference to +# the texttops filter shipped as part of CUPS. This is so that we +# have full UTF-8 support. +# +# To use the default CUPS texttops filter instead, remove this file +# (or the package it belongs to). + +text/plain application/postscript 30 texttopaps diff --git a/paps.spec b/paps.spec index 7dadef4..2177152 100644 --- a/paps.spec +++ b/paps.spec @@ -1,103 +1,365 @@ -Name: paps -Version: 0.6.8 -Release: 5%{?dist} +Name: paps +Version: 0.8.0 +Release: 14%{?dist} -License: LGPLv2+ -URL: http://paps.sourceforge.net/ -Source0: http://prdownloads.sourceforge.net/paps/paps-%{version}.tar.gz -BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) -BuildRequires: pango-devel automake autoconf libtool doxygen cups-devel +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 +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 +Patch0: paps-0.6.8-shared.patch ## https://sourceforge.net/tracker/index.php?func=detail&aid=1832924&group_id=153049&atid=786241 -Patch1: paps-0.6.8-wordwrap.patch +Patch1: paps-0.6.8-wordwrap.patch ## https://sourceforge.net/tracker/index.php?func=detail&aid=1832926&group_id=153049&atid=786241 -Patch2: paps-0.6.6-langinfo.patch +Patch2: paps-langinfo.patch ## https://sourceforge.net/tracker/index.php?func=detail&aid=1832929&group_id=153049&atid=786241 -Patch3: paps-0.6.6-lcnumeric.patch +Patch3: paps-0.6.6-lcnumeric.patch ## https://sourceforge.net/tracker/index.php?func=detail&aid=1832935&group_id=153049&atid=786241 -Patch4: paps-0.6.6-exitcode.patch -Patch50: paps-cups.patch -Patch51: paps-cpilpi.patch -Patch52: paps-0.6.8-dsc-compliant.patch -Patch61: paps-0.6.6-fix-wcswidth.patch +Patch4: paps-exitcode.patch +## rhbz#854897 +Patch5: paps-854897-manpage.patch +## Fedora specific patch to integrate with CUPS +Patch50: paps-cups.patch +Patch51: paps-cpilpi.patch +## rhbz#424951 +Patch52: paps-dsc-compliant.patch +Patch53: paps-autoconf262.patch +## rhbz#524883 +Patch54: paps-fix-cpi.patch +## rhbz#618483 +Patch55: paps-fix-loop-in-split.patch +## rhbz#857592 +Patch56: paps-fix-tab-width.patch +Patch57: paps-fix-non-weak-symbol.patch +Patch58: paps-correct-fsf-address.patch +## rhbz#1078519 +Patch59: %{name}-ft-header.patch +## rhbz#1196997 +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 -Group: Applications/Publishing +Summary: Plain Text to PostScript converter %description paps is a PostScript converter from plain text file using Pango. -%package libs -Summary: Libraries for paps -Group: Development/Libraries -%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 -Group: Development/Libraries -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 -%patch50 -p1 -b .cups -%patch51 -p1 -b .cpilpi -%patch52 -p1 -b .dsc -#%patch11 -p1 -b .wcswidth -autoreconf +%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 -rm -rf $RPM_BUILD_ROOT - -make install DESTDIR=$RPM_BUILD_ROOT +pushd %{name}-0.6.8 +make install DESTDIR=$RPM_BUILD_ROOT INSTALL="/usr/bin/install -p" # remove unnecessary files rm $RPM_BUILD_ROOT%{_libdir}/libpaps.la # make a symlink for CUPS filter -%{__mkdir_p} $RPM_BUILD_ROOT/usr/lib/cups/filter # Not libdir -ln -s %{_bindir}/paps $RPM_BUILD_ROOT/usr/lib/cups/filter/texttopaps +install -d $RPM_BUILD_ROOT%{_cups_serverbin}/filter # Not libdir +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 -%clean -rm -rf $RPM_BUILD_ROOT +install -d $RPM_BUILD_ROOT%{_datadir}/cups/mime +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 -%defattr(-, root, root, -) -%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* -/usr/lib/cups/filter/texttopaps -%files libs -%defattr(-, root, root, -) -%doc COPYING.LIB +%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 devel -%defattr(-, root, root, -) -%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 + +* Wed Jan 29 2020 Fedora Release Engineering - 0.6.8-45 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Fri Jul 26 2019 Fedora Release Engineering - 0.6.8-44 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Fri Feb 01 2019 Fedora Release Engineering - 0.6.8-43 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Fri Jul 13 2018 Fedora Release Engineering - 0.6.8-42 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Thu Feb 08 2018 Fedora Release Engineering - 0.6.8-41 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Sat Jan 20 2018 Björn Esser - 0.6.8-40 +- Rebuilt for switch to libxcrypt + +* Thu Aug 03 2017 Fedora Release Engineering - 0.6.8-39 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Thu Jul 27 2017 Fedora Release Engineering - 0.6.8-38 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Sat Feb 11 2017 Fedora Release Engineering - 0.6.8-37 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Thu Feb 04 2016 Fedora Release Engineering - 0.6.8-36 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Thu Jun 18 2015 Fedora Release Engineering - 0.6.8-35 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Fri Apr 24 2015 Akira TAGOH - 0.6.8-34 +- Fix wrong paper size due to the integer cast. + +* Mon Mar 2 2015 Akira TAGOH - 0.6.8-33 +- Support A3 paper size. + +* Sat Feb 21 2015 Till Maas - 0.6.8-32 +- Rebuilt for Fedora 23 Change + https://fedoraproject.org/wiki/Changes/Harden_all_packages_with_position-independent_code + +* Fri Oct 31 2014 Akira TAGOH - 0.6.8-31 +- Add a fontconfig config to force the scalable font. + +* Sun Aug 17 2014 Fedora Release Engineering - 0.6.8-30 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Fri Jun 06 2014 Fedora Release Engineering - 0.6.8-29 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Thu Mar 20 2014 Akira TAGOH - 0.6.8-28 +- Fix FTBFS against freetype's header files location change. (#1078519) + +* Mon Dec 16 2013 Akira TAGOH - 0.6.8-27 +- Move the place of paps.convs to %%{_datadir}/cups/mime. (#1042984) + +* Wed Jul 31 2013 Akira TAGOH - 0.6.8-26 +- Fix the width calculation with CPI enabled. (#990228) + +* Thu Apr 18 2013 Akira TAGOH - 0.6.8-25 +- Rebuilt for aarch64 support. (#926309) + +* Thu Feb 14 2013 Fedora Release Engineering - 0.6.8-24 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild + +* Fri Nov 23 2012 Akira TAGOH - 0.6.8-23 +- the spec file cleanup +- Fix the undefined symbol issue in libpaps.so.0 +- Correct FSF address in the COPYING.LIB + +* Mon Sep 24 2012 Akira TAGOH - 0.6.8-22 +- Ensure the latest version of paps-libs are installed. + +* Fri Sep 21 2012 Akira TAGOH - 0.6.8-21 +- Fix wrong width for whitespaces when enabling CPI feature. (#857592) + +* Thu Sep 6 2012 Akira TAGOH - 0.6.8-20 +- Add a missing description of --encoding in manpage. (#854897) + +* Fri Jul 20 2012 Fedora Release Engineering - 0.6.8-19 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Wed Jan 11 2012 Akira TAGOH - 0.6.8-18 +- Use %%{_cups_serverbin} instead of the hardcoded path. (#772240) + +* Mon Dec 5 2011 Akira TAGOH - 0.6.8-17 +- Add ldconfig in %%post/%%postun for paps-libs (#759880) + +* Fri Jun 24 2011 Akira TAGOH - 0.6.8-16 +- Fix FTBFS issue. (#716211) + +* Tue Feb 08 2011 Fedora Release Engineering - 0.6.8-15 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Tue Jul 27 2010 Akira TAGOH - 0.6.8-14 +- Fix the infinite loop in splitting paragraphs (#618483) + +* Fri Mar 12 2010 Akira TAGOH - 0.6.8-13 +- Fix the directory's group ownership. (#572733) + +* Tue Dec 8 2009 Akira TAGOH - 0.6.8-12 +- Add paps.convs to behaves the cups filter without the hardcoded thing + in cups. (#545031) + +* Wed Oct 14 2009 Akira TAGOH - 0.6.8-11 +- Fix code that deal with CPI parameter to be accurate. (#524883) + +* Sat Jul 25 2009 Fedora Release Engineering - 0.6.8-10 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Thu Feb 26 2009 Fedora Release Engineering - 0.6.8-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Mon Nov 17 2008 Akira TAGOH - 0.6.8-8 +- Courier font to be a default font for texttopaps. (#469325) + +* Mon Sep 1 2008 Akira TAGOH - 0.6.8-7 +- paps-langinfo.patch: Updated. +- paps-exitcode.patch: Updated. + +* Fri May 16 2008 Akira TAGOH - 0.6.8-6 +- paps-cups.patch: Fix printing with -o landscape in CUPS. (#222137) +- paps-autoconf262.patch: Fix an error on autoreconf. + * Tue Feb 12 2008 Akira TAGOH - 0.6.8-5 - Rebuild for gcc-4.3. @@ -143,7 +405,7 @@ rm -rf $RPM_BUILD_ROOT - Fix PostScript breakage following the non-monetary numeric format from current locale. (#231916) -* Thu Mar 7 2007 Akira TAGOH - 0.6.6-18 +* Wed Mar 7 2007 Akira TAGOH - 0.6.6-18 - default to lpi=6 and cpi=10 if paps is bringing up as cups filter. (#223862) * Tue Jan 23 2007 Akira TAGOH 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