From de685b62fea7b84b68775abf01867c33aa49d557 Mon Sep 17 00:00:00 2001 From: Peter Lemenkov Date: Aug 17 2020 19:54:14 +0000 Subject: PSPP ver. 1.4.0 Signed-off-by: Peter Lemenkov --- diff --git a/.gitignore b/.gitignore index c5c1910..560fa11 100644 --- a/.gitignore +++ b/.gitignore @@ -1,19 +1,2 @@ -pspp.svg -pspp-0.6.2.tar.gz -/pspp-0.6.2.tar.gz -/pspp-0.7.8.tar.gz -/pspp-0.7.9.tar.gz -/pspp-0.8.0.tar.gz -/pspp-0.8.1.tar.gz -/pspp-0.8.2.tar.gz -/pspp-0.8.3.tar.gz -/pspp-0.8.4.tar.gz -/pspp-0.8.5.tar.gz -/pspp-0.10.1.tar.gz -/pspp-0.10.2.tar.gz -/pspp-0.11.0.tar.gz -/pspp-0.11.0.tar.gz.sig -/pspp-1.0.0.tar.gz -/pspp-1.0.0.tar.gz.sig -/pspp-1.0.1.tar.gz -/pspp-1.2.0.tar.gz +/pspp-[0-9]*.[0-9]*.[0-9]*.tar.gz +/pspp-[0-9]*.[0-9]*.[0-9]*.tar.gz.sig diff --git a/pspp-0001-Check-for-python-interpreter-at-configure-time-and-d.patch b/pspp-0001-Check-for-python-interpreter-at-configure-time-and-d.patch deleted file mode 100644 index 3d09e84..0000000 --- a/pspp-0001-Check-for-python-interpreter-at-configure-time-and-d.patch +++ /dev/null @@ -1,195 +0,0 @@ -From: Ben Pfaff -Date: Mon, 19 Nov 2018 08:44:27 -0800 -Subject: [PATCH] Check for python interpreter at configure time and document - the requirement. - - -diff --git a/INSTALL b/INSTALL -index d4f982e19..25e9a6623 100644 ---- a/INSTALL -+++ b/INSTALL -@@ -60,6 +60,10 @@ The following packages are required to install PSPP: - * Perl (http://www.perl.org/), version 5.005_03 or later. Perl is - required during build but not after installation. - -+ * Python (https://python.org/), version 2.7. Some tests require -+ Python; if it is missing, those tests will be skipped. PSPP -+ does not otherwise require Python. -+ - * iconv, which should be installed as part of a Unix-like system. - If you don't have a version already, you can install GNU - libiconv (http://www.gnu.org/software/libiconv/). -diff --git a/acinclude.m4 b/acinclude.m4 -index 292404723..e6c1adbf3 100644 ---- a/acinclude.m4 -+++ b/acinclude.m4 -@@ -43,6 +43,11 @@ AC_DEFUN([PSPP_PERL], - AC_SUBST([VERSION_FOR_PERL]) - ]) - -+dnl Check that Python 2 or 3 is available. -+AC_DEFUN([PSPP_PYTHON], -+ [AC_ARG_VAR([PYTHON], [Python 2 or 3 interpreter]) -+ AC_CHECK_PROGS([PYTHON], [python python2 python3], [none])]) -+ - dnl PSPP_CHECK_CC_OPTION([OPTION], [ACTION-IF-ACCEPTED], [ACTION-IF-REJECTED]) - dnl Check whether the given C compiler OPTION is accepted. - dnl If so, execute ACTION-IF-ACCEPTED, otherwise ACTION-IF-REJECTED. -diff --git a/configure.ac b/configure.ac -index 7f2f4d167..cc0cfff67 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -44,6 +44,7 @@ AM_CONDITIONAL(cc_is_gcc, test x"$GCC" = x"yes" ) - - PSPP_CC_FOR_BUILD - PSPP_PERL -+PSPP_PYTHON - - dnl Disable automatic po/ support, because PSPP provides its own po/ support. - AC_PROVIDE([AM_PO_SUBDIRS]) -diff --git a/tests/atlocal.in b/tests/atlocal.in -index 041cf289a..2a8a0eafb 100644 ---- a/tests/atlocal.in -+++ b/tests/atlocal.in -@@ -21,6 +21,7 @@ - # Variables used internally by the testsuite. - EXEEXT='@EXEEXT@' - PERL='@PERL@' -+PYTHON='@PYTHON@' - WITH_PERL_MODULE='@WITH_PERL_MODULE@' - host='@host@' - PACKAGE_STRING='@PACKAGE_STRING@' -diff --git a/tests/data/data-in.at b/tests/data/data-in.at -index f5d6d4763..d27b7fe86 100644 ---- a/tests/data/data-in.at -+++ b/tests/data/data-in.at -@@ -255,7 +255,8 @@ AT_CLEANUP - - AT_SETUP([DATE input format]) - AT_KEYWORDS([data-in]) --AT_CHECK([python $top_srcdir/tests/data/test-date-input.py date d-m-y]) -+AT_SKIP_IF([test "$PYTHON" = none]) -+AT_CHECK([$PYTHON $top_srcdir/tests/data/test-date-input.py date d-m-y]) - AT_FAIL_IF([test ! -s date.sps || test ! -s date.input || test ! -s expout]) - AT_CHECK([pspp -O format=csv date.sps]) - AT_CHECK([cat date.output], [0], [expout]) -@@ -263,7 +264,8 @@ AT_CLEANUP - - AT_SETUP([ADATE input format]) - AT_KEYWORDS([data-in]) --AT_CHECK([python $top_srcdir/tests/data/test-date-input.py adate m-d-y]) -+AT_SKIP_IF([test "$PYTHON" = none]) -+AT_CHECK([$PYTHON $top_srcdir/tests/data/test-date-input.py adate m-d-y]) - AT_FAIL_IF([test ! -s adate.sps || test ! -s adate.input || test ! -s expout]) - AT_CHECK([pspp -O format=csv adate.sps]) - AT_CHECK([cat adate.output], [0], [expout]) -@@ -271,7 +273,8 @@ AT_CLEANUP - - AT_SETUP([EDATE input format]) - AT_KEYWORDS([data-in]) --AT_CHECK([python $top_srcdir/tests/data/test-date-input.py edate d-m-y]) -+AT_SKIP_IF([test "$PYTHON" = none]) -+AT_CHECK([$PYTHON $top_srcdir/tests/data/test-date-input.py edate d-m-y]) - AT_FAIL_IF([test ! -s edate.sps || test ! -s edate.input || test ! -s expout]) - AT_CHECK([pspp -O format=csv edate.sps]) - AT_CHECK([cat edate.output], [0], [expout]) -@@ -279,7 +282,8 @@ AT_CLEANUP - - AT_SETUP([JDATE input format]) - AT_KEYWORDS([data-in]) --AT_CHECK([python $top_srcdir/tests/data/test-date-input.py jdate j]) -+AT_SKIP_IF([test "$PYTHON" = none]) -+AT_CHECK([$PYTHON $top_srcdir/tests/data/test-date-input.py jdate j]) - AT_FAIL_IF([test ! -s jdate.sps || test ! -s jdate.input || test ! -s expout]) - AT_CHECK([pspp -O format=csv jdate.sps]) - AT_CHECK([cat jdate.output], [0], [expout]) -@@ -287,7 +291,8 @@ AT_CLEANUP - - AT_SETUP([SDATE input format]) - AT_KEYWORDS([data-in]) --AT_CHECK([python $top_srcdir/tests/data/test-date-input.py sdate y-m-d]) -+AT_SKIP_IF([test "$PYTHON" = none]) -+AT_CHECK([$PYTHON $top_srcdir/tests/data/test-date-input.py sdate y-m-d]) - AT_FAIL_IF([test ! -s sdate.sps || test ! -s sdate.input || test ! -s expout]) - AT_CHECK([pspp -O format=csv sdate.sps]) - AT_CHECK([cat sdate.output], [0], [expout]) -@@ -295,7 +300,8 @@ AT_CLEANUP - - AT_SETUP([QYR input format]) - AT_KEYWORDS([data-in]) --AT_CHECK([python $top_srcdir/tests/data/test-date-input.py qyr qQy]) -+AT_SKIP_IF([test "$PYTHON" = none]) -+AT_CHECK([$PYTHON $top_srcdir/tests/data/test-date-input.py qyr qQy]) - AT_FAIL_IF([test ! -s qyr.sps || test ! -s qyr.input || test ! -s expout]) - AT_CHECK([pspp -O format=csv qyr.sps]) - AT_CHECK([cat qyr.output], [0], [expout]) -@@ -303,7 +309,8 @@ AT_CLEANUP - - AT_SETUP([MOYR input format]) - AT_KEYWORDS([data-in]) --AT_CHECK([python $top_srcdir/tests/data/test-date-input.py moyr m-y]) -+AT_SKIP_IF([test "$PYTHON" = none]) -+AT_CHECK([$PYTHON $top_srcdir/tests/data/test-date-input.py moyr m-y]) - AT_FAIL_IF([test ! -s moyr.sps || test ! -s moyr.input || test ! -s expout]) - AT_CHECK([pspp -O format=csv moyr.sps]) - AT_CHECK([cat moyr.output], [0], [expout]) -@@ -311,7 +318,8 @@ AT_CLEANUP - - AT_SETUP([WKYR input format]) - AT_KEYWORDS([data-in]) --AT_CHECK([python $top_srcdir/tests/data/test-date-input.py wkyr wWy]) -+AT_SKIP_IF([test "$PYTHON" = none]) -+AT_CHECK([$PYTHON $top_srcdir/tests/data/test-date-input.py wkyr wWy]) - AT_FAIL_IF([test ! -s wkyr.sps || test ! -s wkyr.input || test ! -s expout]) - AT_CHECK([pspp -O format=csv wkyr.sps]) - AT_CHECK([cat wkyr.output], [0], [expout]) -@@ -319,7 +327,8 @@ AT_CLEANUP - - AT_SETUP([DATETIME input format]) - AT_KEYWORDS([data-in]) --AT_CHECK([python $top_srcdir/tests/data/test-date-input.py datetime "d-m-y +H:M" "d-m-y +H:M:S"]) -+AT_SKIP_IF([test "$PYTHON" = none]) -+AT_CHECK([$PYTHON $top_srcdir/tests/data/test-date-input.py datetime "d-m-y +H:M" "d-m-y +H:M:S"]) - AT_FAIL_IF([test ! -s datetime.sps || test ! -s datetime.input || \ - test ! -s expout]) - AT_CHECK([pspp -O format=csv datetime.sps]) -@@ -328,7 +337,8 @@ AT_CLEANUP - - AT_SETUP([YMDHMS input format]) - AT_KEYWORDS([data-in]) --AT_CHECK([python $top_srcdir/tests/data/test-date-input.py ymdhms "y-m-d +H:M" "y-m-d +H:M:S"]) -+AT_SKIP_IF([test "$PYTHON" = none]) -+AT_CHECK([$PYTHON $top_srcdir/tests/data/test-date-input.py ymdhms "y-m-d +H:M" "y-m-d +H:M:S"]) - AT_FAIL_IF([test ! -s ymdhms.sps || test ! -s ymdhms.input || \ - test ! -s expout]) - AT_CHECK([pspp -O format=csv ymdhms.sps]) -@@ -337,7 +347,8 @@ AT_CLEANUP - - AT_SETUP([MTIME input format]) - AT_KEYWORDS([data-in]) --AT_CHECK([python $top_srcdir/tests/data/test-time-input.py mtime +M:S]) -+AT_SKIP_IF([test "$PYTHON" = none]) -+AT_CHECK([$PYTHON $top_srcdir/tests/data/test-time-input.py mtime +M:S]) - AT_FAIL_IF([test ! -s mtime.sps || test ! -s mtime.input || test ! -s expout]) - AT_CHECK([pspp -O format=csv mtime.sps]) - AT_CHECK([cat mtime.output], [0], [expout]) -@@ -345,7 +356,8 @@ AT_CLEANUP - - AT_SETUP([TIME input format]) - AT_KEYWORDS([data-in]) --AT_CHECK([python $top_srcdir/tests/data/test-time-input.py time +H:M +H:M:S]) -+AT_SKIP_IF([test "$PYTHON" = none]) -+AT_CHECK([$PYTHON $top_srcdir/tests/data/test-time-input.py time +H:M +H:M:S]) - AT_FAIL_IF([test ! -s time.sps || test ! -s time.input || test ! -s expout]) - AT_CHECK([pspp -O format=csv time.sps]) - AT_CHECK([cat time.output], [0], [expout]) -@@ -353,7 +365,8 @@ AT_CLEANUP - - AT_SETUP([DTIME input format]) - AT_KEYWORDS([data-in]) --AT_CHECK([python $top_srcdir/tests/data/test-time-input.py dtime '+D H:M' '+D H:M:S']) -+AT_SKIP_IF([test "$PYTHON" = none]) -+AT_CHECK([$PYTHON $top_srcdir/tests/data/test-time-input.py dtime '+D H:M' '+D H:M:S']) - AT_FAIL_IF([test ! -s dtime.sps || test ! -s dtime.input || test ! -s expout]) - AT_CHECK([pspp -O format=csv dtime.sps]) - AT_CHECK([cat dtime.output], [0], [expout]) diff --git a/pspp-0002-segment-Fix-behavior-when-line-is-not-new-line-termi.patch b/pspp-0002-segment-Fix-behavior-when-line-is-not-new-line-termi.patch deleted file mode 100644 index 9d868e8..0000000 --- a/pspp-0002-segment-Fix-behavior-when-line-is-not-new-line-termi.patch +++ /dev/null @@ -1,58 +0,0 @@ -From: Ben Pfaff -Date: Mon, 26 Nov 2018 06:54:52 -0800 -Subject: [PATCH] segment: Fix behavior when #! line is not new-line - terminated. - -The code here is supposed to maintain a invariant that, when it returns a -nonnegative value, it initializes *type, but it failed to do that when a -#! line did not end in a new-line. This fixes the problem. - -Bug #55101. -Thanks for Friedrich Beckmann for narrowing down the problem. -Found by the Debian buildd: https://buildd.debian.org/status/fetch.php?pkg=pspp&arch=arm64&ver=1.2.0-1&stamp=1543183214&raw=0 - -diff --git a/src/language/lexer/segment.c b/src/language/lexer/segment.c -index c0a09973c..c607c4bd1 100644 ---- a/src/language/lexer/segment.c -+++ b/src/language/lexer/segment.c -@@ -92,21 +92,26 @@ segmenter_parse_shbang__ (struct segmenter *s, const char *input, size_t n, - { - if (input[1] == '!') - { -- int ofs; -- -- for (ofs = 2; ofs < n; ofs++) -- if (input[ofs] == '\n') -- { -- if (input[ofs] == '\n' && input[ofs - 1] == '\r') -- ofs--; -- -- s->state = S_GENERAL; -- s->substate = SS_START_OF_COMMAND; -- *type = SEG_SHBANG; -- return ofs; -- } -+ for (int ofs = 2; ; ofs++) -+ { -+ if (ofs >= n) -+ { -+ if (!eof) -+ return -1; -+ } -+ else if (input[ofs] == '\n') -+ { -+ if (input[ofs - 1] == '\r') -+ ofs--; -+ } -+ else -+ continue; - -- return eof ? ofs : -1; -+ s->state = S_GENERAL; -+ s->substate = SS_START_OF_COMMAND; -+ *type = SEG_SHBANG; -+ return ofs; -+ } - } - } - else if (!eof) diff --git a/pspp-0003-sys-file-writer-Remove-assertions-based-on-file-posi.patch b/pspp-0003-sys-file-writer-Remove-assertions-based-on-file-posi.patch deleted file mode 100644 index f1d4f7c..0000000 --- a/pspp-0003-sys-file-writer-Remove-assertions-based-on-file-posi.patch +++ /dev/null @@ -1,64 +0,0 @@ -From: Ben Pfaff -Date: Wed, 27 Feb 2019 20:11:06 -0800 -Subject: [PATCH] sys-file-writer: Remove assertions based on file position. - -These assertions can fail if the underlying file is not a regular file, -e.g. if it is a device such as /dev/null. - -CVE-2019-9211. -See also https://bugzilla.redhat.com/show_bug.cgi?id=1683499. -See also https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-9211. -See also https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=923417. - -diff --git a/src/data/sys-file-writer.c b/src/data/sys-file-writer.c -index df5108e2a..bbe58aecd 100644 ---- a/src/data/sys-file-writer.c -+++ b/src/data/sys-file-writer.c -@@ -953,7 +953,6 @@ write_long_string_value_labels (struct sfm_writer *w, - const char *encoding = dict_get_encoding (dict); - size_t n_vars = dict_get_var_cnt (dict); - size_t size, i; -- off_t start UNUSED; - - /* Figure out the size in advance. */ - size = 0; -@@ -985,7 +984,6 @@ write_long_string_value_labels (struct sfm_writer *w, - write_int (w, 1); /* Data item (byte) size. */ - write_int (w, size); /* Number of data items. */ - -- start = ftello (w->file); - for (i = 0; i < n_vars; i++) - { - struct variable *var = dict_get_var (dict, i); -@@ -1022,7 +1020,6 @@ write_long_string_value_labels (struct sfm_writer *w, - free (label); - } - } -- assert (ftello (w->file) == start + size); - } - - static void -@@ -1032,7 +1029,6 @@ write_long_string_missing_values (struct sfm_writer *w, - const char *encoding = dict_get_encoding (dict); - size_t n_vars = dict_get_var_cnt (dict); - size_t size, i; -- off_t start UNUSED; - - /* Figure out the size in advance. */ - size = 0; -@@ -1058,7 +1054,6 @@ write_long_string_missing_values (struct sfm_writer *w, - write_int (w, 1); /* Data item (byte) size. */ - write_int (w, size); /* Number of data items. */ - -- start = ftello (w->file); - for (i = 0; i < n_vars; i++) - { - struct variable *var = dict_get_var (dict, i); -@@ -1087,7 +1082,6 @@ write_long_string_missing_values (struct sfm_writer *w, - write_bytes (w, value_str (value, width), 8); - } - } -- assert (ftello (w->file) == start + size); - } - - static void diff --git a/pspp-0004-pspp-dump-sav-Issue-error-message-for-too-large-exte.patch b/pspp-0004-pspp-dump-sav-Issue-error-message-for-too-large-exte.patch deleted file mode 100644 index ea7b020..0000000 --- a/pspp-0004-pspp-dump-sav-Issue-error-message-for-too-large-exte.patch +++ /dev/null @@ -1,111 +0,0 @@ -From: Ben Pfaff -Date: Tue, 1 Jan 2019 08:36:05 -0800 -Subject: [PATCH] pspp-dump-sav: Issue error message for too-large extension - records. - -CVE-2018-20230. - -diff --git a/utilities/pspp-dump-sav.c b/utilities/pspp-dump-sav.c -index aeb648665..b0001ac61 100644 ---- a/utilities/pspp-dump-sav.c -+++ b/utilities/pspp-dump-sav.c -@@ -37,6 +37,7 @@ - #include "gl/progname.h" - #include "gl/version-etc.h" - #include "gl/xalloc.h" -+#include "gl/xsize.h" - - #define ID_MAX_LEN 64 - -@@ -99,7 +100,7 @@ static void read_simple_compressed_data (struct sfm_reader *, int max_cases); - static void read_zlib_compressed_data (struct sfm_reader *); - - static struct text_record *open_text_record ( -- struct sfm_reader *, size_t size); -+ struct sfm_reader *, size_t size, size_t count); - static void close_text_record (struct text_record *); - static bool read_variable_to_value_pair (struct text_record *, - char **key, char **value); -@@ -735,7 +736,7 @@ read_extra_product_info (struct sfm_reader *r, - const char *s; - - printf ("%08llx: extra product info\n", (long long int) ftello (r->file)); -- text = open_text_record (r, size * count); -+ text = open_text_record (r, size, count); - s = text_get_all (text); - print_string (s, strlen (s)); - close_text_record (text); -@@ -749,7 +750,7 @@ read_mrsets (struct sfm_reader *r, size_t size, size_t count) - - printf ("%08llx: multiple response sets\n", - (long long int) ftello (r->file)); -- text = open_text_record (r, size * count); -+ text = open_text_record (r, size, count); - for (;;) - { - const char *name; -@@ -909,7 +910,7 @@ read_long_var_name_map (struct sfm_reader *r, size_t size, size_t count) - - printf ("%08llx: long variable names (short => long)\n", - (long long int) ftello (r->file)); -- text = open_text_record (r, size * count); -+ text = open_text_record (r, size, count); - while (read_variable_to_value_pair (text, &var, &long_name)) - printf ("\t%s => %s\n", var, long_name); - close_text_record (text); -@@ -926,7 +927,7 @@ read_long_string_map (struct sfm_reader *r, size_t size, size_t count) - - printf ("%08llx: very long strings (variable => length)\n", - (long long int) ftello (r->file)); -- text = open_text_record (r, size * count); -+ text = open_text_record (r, size, count); - while (read_variable_to_value_pair (text, &var, &length_s)) - printf ("\t%s => %d\n", var, atoi (length_s)); - close_text_record (text); -@@ -1004,7 +1005,7 @@ read_datafile_attributes (struct sfm_reader *r, size_t size, size_t count) - struct text_record *text; - - printf ("%08llx: datafile attributes\n", (long long int) ftello (r->file)); -- text = open_text_record (r, size * count); -+ text = open_text_record (r, size, count); - read_attributes (r, text, "datafile"); - close_text_record (text); - } -@@ -1196,7 +1197,7 @@ read_variable_attributes (struct sfm_reader *r, size_t size, size_t count) - struct text_record *text; - - printf ("%08llx: variable attributes\n", (long long int) ftello (r->file)); -- text = open_text_record (r, size * count); -+ text = open_text_record (r, size, count); - for (;;) - { - const char *variable = text_tokenize (text, ':'); -@@ -1389,18 +1390,23 @@ struct text_record - size_t pos; /* Current position in buffer. */ - }; - --/* Reads SIZE bytes into a text record for R, -+/* Reads SIZE * COUNT bytes into a text record for R, - and returns the new text record. */ - static struct text_record * --open_text_record (struct sfm_reader *r, size_t size) -+open_text_record (struct sfm_reader *r, size_t size, size_t count) - { - struct text_record *text = xmalloc (sizeof *text); -- char *buffer = xmalloc (size + 1); -- read_bytes (r, buffer, size); -+ -+ if (size_overflow_p (xsum (1, xtimes (size, count)))) -+ sys_error (r, "Extension record too large."); -+ -+ size_t n_bytes = size * count; -+ char *buffer = xmalloc (n_bytes + 1); -+ read_bytes (r, buffer, n_bytes); - buffer[size] = '\0'; - text->reader = r; - text->buffer = buffer; -- text->size = size; -+ text->size = n_bytes; - text->pos = 0; - return text; - } diff --git a/pspp-0005-pspp-dump-sav-Fix-write-past-end-of-buffer-in-corner.patch b/pspp-0005-pspp-dump-sav-Fix-write-past-end-of-buffer-in-corner.patch deleted file mode 100644 index 4dfdf7e..0000000 --- a/pspp-0005-pspp-dump-sav-Fix-write-past-end-of-buffer-in-corner.patch +++ /dev/null @@ -1,23 +0,0 @@ -From: Ben Pfaff -Date: Fri, 22 Feb 2019 17:16:40 -0800 -Subject: [PATCH] pspp-dump-sav; Fix write past end of buffer in corner case. - -If count == 0 and size > 0, then n_bytes is 0, buffer is a 1-byte -allocation, and the assignment to buffer[size] would write to buffer[1] -(or past it), which is past the end of the allocation. - -Found by Address Sanitizer. - -diff --git a/utilities/pspp-dump-sav.c b/utilities/pspp-dump-sav.c -index b0001ac61..027b65808 100644 ---- a/utilities/pspp-dump-sav.c -+++ b/utilities/pspp-dump-sav.c -@@ -1403,7 +1403,7 @@ open_text_record (struct sfm_reader *r, size_t size, size_t count) - size_t n_bytes = size * count; - char *buffer = xmalloc (n_bytes + 1); - read_bytes (r, buffer, n_bytes); -- buffer[size] = '\0'; -+ buffer[n_bytes] = '\0'; - text->reader = r; - text->buffer = buffer; - text->size = n_bytes; diff --git a/pspp-0006-PSPPIRE-Avoid-some-segmentation-faults-when-corrupt-.patch b/pspp-0006-PSPPIRE-Avoid-some-segmentation-faults-when-corrupt-.patch deleted file mode 100644 index 675f206..0000000 --- a/pspp-0006-PSPPIRE-Avoid-some-segmentation-faults-when-corrupt-.patch +++ /dev/null @@ -1,36 +0,0 @@ -From: John Darrington -Date: Sat, 2 Mar 2019 15:29:39 +0100 -Subject: [PATCH] PSPPIRE: Avoid some segmentation faults when corrupt data is - encountered. - - -diff --git a/src/ui/gui/psppire-data-store.c b/src/ui/gui/psppire-data-store.c -index f97b8eaf1..3c2765f5d 100644 ---- a/src/ui/gui/psppire-data-store.c -+++ b/src/ui/gui/psppire-data-store.c -@@ -183,6 +183,8 @@ psppire_data_store_value_to_string (gpointer unused, PsppireDataStore *store, gi - g_return_val_if_fail (variable, g_strdup ("???")); - - GVariant *vrnt = g_value_get_variant (v); -+ g_return_val_if_fail (vrnt, g_strdup ("???")); -+ - union value val; - value_variant_get (&val, vrnt); - -@@ -231,12 +233,14 @@ __get_value (GtkTreeModel *tree_model, - if (NULL == variable) - return; - -- g_value_init (value, G_TYPE_VARIANT); -- - gint row = GPOINTER_TO_INT (iter->user_data); - - struct ccase *cc = datasheet_get_row (store->datasheet, row); - -+ g_return_if_fail (cc); -+ -+ g_value_init (value, G_TYPE_VARIANT); -+ - const union value *val = case_data_idx (cc, var_get_case_index (variable)); - - GVariant *vv = value_variant_new (val, var_get_width (variable)); diff --git a/pspp-0007-psppire-Fix-multiple-definitions-of-align_enum_type-.patch b/pspp-0007-psppire-Fix-multiple-definitions-of-align_enum_type-.patch deleted file mode 100644 index 5d8e42d..0000000 --- a/pspp-0007-psppire-Fix-multiple-definitions-of-align_enum_type-.patch +++ /dev/null @@ -1,26 +0,0 @@ -From: Ben Pfaff -Date: Fri, 16 Nov 2018 20:27:30 -0800 -Subject: [PATCH] psppire: Fix multiple definitions of align_enum_type and two - others. - -These were defined in both psppire-dict.c and widgets.c, which causes a -problem building with -fno-common (which is desirable because it allows -Address Sanitizer to work better). - -diff --git a/src/ui/gui/widgets.c b/src/ui/gui/widgets.c -index 26a5dac4f..6ce129249 100644 ---- a/src/ui/gui/widgets.c -+++ b/src/ui/gui/widgets.c -@@ -171,9 +171,9 @@ enum_to_string (const GValue *src, GValue *dest) - - - --GType align_enum_type; --GType measure_enum_type; --GType role_enum_type; -+extern GType align_enum_type; -+extern GType measure_enum_type; -+extern GType role_enum_type; - - - extern const GEnumValue align[]; diff --git a/pspp-0008-test-date-input.py-Make-compatible-with-Python-3.patch b/pspp-0008-test-date-input.py-Make-compatible-with-Python-3.patch deleted file mode 100644 index a011ed0..0000000 --- a/pspp-0008-test-date-input.py-Make-compatible-with-Python-3.patch +++ /dev/null @@ -1,35 +0,0 @@ -From: Ben Pfaff -Date: Mon, 19 Nov 2018 08:35:23 -0800 -Subject: [PATCH] test-date-input.py: Make compatible with Python 3. - - -diff --git a/tests/data/test-date-input.py b/tests/data/test-date-input.py -index 6ccc2f8f4..cdab260d6 100644 ---- a/tests/data/test-date-input.py -+++ b/tests/data/test-date-input.py -@@ -50,8 +50,8 @@ def print_all_formats(date, template, formatted, exp_y, exp_m, exp_d, - global n - n += 1 - year, month, day, julian, hour, minute, second = date -- quarter = (month - 1) / 3 + 1 -- week = (julian - 1) / 7 + 1 -+ quarter = (month - 1) // 3 + 1 -+ week = (julian - 1) // 7 + 1 - if year >= 1930 and year < 2030: - years = ('%d' % year, '%d' % (year % 100)) - else: -@@ -163,10 +163,10 @@ def print_all_formats(date, template, formatted, exp_y, exp_m, exp_d, - EPOCH = -577734 # 14 Oct 1582 - expected = (EPOCH - 1 - + 365 * (exp_y - 1) -- + (exp_y - 1) / 4 -- - (exp_y - 1) / 100 -- + (exp_y - 1) / 400 -- + (367 * exp_m - 362) / 12 -+ + (exp_y - 1) // 4 -+ - (exp_y - 1) // 100 -+ + (exp_y - 1) // 400 -+ + (367 * exp_m - 362) // 12 - + (0 if exp_m <= 2 - else -1 if exp_m >= 2 and is_leap_year(exp_y) - else -2) diff --git a/pspp-1.2.0.tar.gz.sig b/pspp-1.2.0.tar.gz.sig deleted file mode 100644 index df179e0..0000000 --- a/pspp-1.2.0.tar.gz.sig +++ /dev/null @@ -1,16 +0,0 @@ ------BEGIN PGP SIGNATURE----- - -iQIzBAABCAAdFiEEwtGrBhZWqsVLXpdUhRmd6MZkjpAFAlvhpnoACgkQhRmd6MZk -jpCdlBAAj+Wzc4EOqCpAoLhK2DgbVyMbFOfNEW3MQ0AQr3gSS3pjb6Sndb0ycaf5 -xjiEgIb795ccqdjSTuLbYUBD3zKD3+ULGsmEwcJXNdA4kx/eg4vvodQWnIHDjjR4 -Kc2fMtfkMGqs4JIot8Nai3szRTLrJOkxYhoTtaPlNF7pG5J/2gASSCejIc0wP3wf -nap14twHLV9Rql0l1+eQrW+PSLgyX+LFBOzDjhVKG5aVQkpCoZUHMTVFKI6dP9oo -DdCKxatArJG61+P9t3ncUmaZ2dKsg158LeAq7W4RA5LxF19YS3cgwZVHkl5hGm/8 -9YXslQN4ZV1XfHLujJvUbDWHHHnWH4U5oSw6RGIa4UXIIdhFyf3C78ZcMzuokHBO -1+AlXXKh4ml2W7gWduj9reqZzxcI/kNaB08+7WJAl27+5NuvpsaIhfatRgIGKT07 -DqjYjo4lXpKnnRvegg//+E0b06VB1Hf42M+GUnENpmJn3/7PvtiIKyAGc89gFqT0 -XoR+pJmrElXNefIfQCad+4cDyBe1UXqabhSKho+t1bIkUXeZCJoJwOzrErv94Uwd -aej9vaJ8YKxWY1dAxJXSrv+2CLeFAlKLf4kw4AxCWKgCqjVBIrP3FeEiaz7DTxz+ -LPAoriQUyiw58WxNabIC0m8itSkt/ALge7iyw/nT73Uv9wdhHC4= -=OrVk ------END PGP SIGNATURE----- diff --git a/pspp-Smake b/pspp-Smake index 91b4230..b6a37ae 100644 --- a/pspp-Smake +++ b/pspp-Smake @@ -2,20 +2,20 @@ # PSPP - a program for statistical analysis. # Copyright (C) 2017 Free Software Foundation, Inc. -# +# # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. -# +# # This program 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 General Public License for more details. -# +# # You should have received a copy of the GNU General Public License # along with this program. If not, see . -# +# all: everything @@ -37,6 +37,7 @@ GNULIB_MODULES = \ close \ configmake \ count-one-bits \ + count-leading-zeros \ crc \ crypto/md4 \ crypto/rijndael \ @@ -70,6 +71,7 @@ GNULIB_MODULES = \ memcasecmp \ memchr \ memchr2 \ + memmem \ mempcpy \ memrchr \ minmax \ @@ -107,6 +109,7 @@ GNULIB_MODULES = \ unicase/u8-casefold \ unicase/u8-tolower \ unicase/u8-toupper \ + unicase/u8-totitle \ unictype/ctype-print \ unictype/category-of \ unigbrk/uc-is-grapheme-break \ @@ -135,6 +138,7 @@ GNULIB_MODULES = \ vsprintf-posix \ xalloc \ xalloc-die \ + xbinary-io \ xmalloca \ xmemdup0 \ xsize \ @@ -142,44 +146,66 @@ GNULIB_MODULES = \ xvasprintf APP_ICONS = \ -src/ui/gui/icons/32x32/apps/pspp.png \ -src/ui/gui/icons/22x22/apps/pspp.png \ -src/ui/gui/icons/24x24/apps/pspp.png \ src/ui/gui/icons/16x16/apps/pspp.png \ +src/ui/gui/icons/32x32/apps/pspp.png \ src/ui/gui/icons/48x48/apps/pspp.png \ src/ui/gui/icons/256x256/apps/pspp.png \ src/ui/gui/icons/scalable/apps/pspp.svg CATEGORY_ICONS = \ -src/ui/gui/icons/16x16/categories/align-left.png \ -src/ui/gui/icons/16x16/categories/align-center.png \ -src/ui/gui/icons/16x16/categories/align-right.png \ -src/ui/gui/icons/16x16/categories/measure-scale.png \ -src/ui/gui/icons/16x16/categories/measure-ordinal.png \ -src/ui/gui/icons/16x16/categories/measure-nominal.png \ -src/ui/gui/icons/16x16/categories/measure-date-scale.png \ -src/ui/gui/icons/16x16/categories/measure-date-nominal.png \ -src/ui/gui/icons/16x16/categories/measure-date-ordinal.png \ -src/ui/gui/icons/16x16/categories/measure-time-scale.png \ -src/ui/gui/icons/16x16/categories/measure-time-nominal.png \ -src/ui/gui/icons/16x16/categories/measure-time-ordinal.png \ -src/ui/gui/icons/16x16/categories/measure-string-nominal.png \ -src/ui/gui/icons/16x16/categories/measure-string-ordinal.png \ -src/ui/gui/icons/16x16/categories/measure-currency-scale.png \ -src/ui/gui/icons/16x16/categories/measure-currency-nominal.png \ -src/ui/gui/icons/16x16/categories/measure-currency-ordinal.png \ -src/ui/gui/icons/16x16/categories/role-input.png \ -src/ui/gui/icons/16x16/categories/role-target.png \ -src/ui/gui/icons/16x16/categories/role-both.png \ -src/ui/gui/icons/16x16/categories/role-none.png \ -src/ui/gui/icons/16x16/categories/role-partition.png \ -src/ui/gui/icons/16x16/categories/role-split.png - +src/ui/gui/icons/48x48/categories/align-left.png \ +src/ui/gui/icons/48x48/categories/align-center.png \ +src/ui/gui/icons/48x48/categories/align-right.png \ +src/ui/gui/icons/48x48/categories/measure-scale.png \ +src/ui/gui/icons/48x48/categories/measure-ordinal.png \ +src/ui/gui/icons/48x48/categories/measure-nominal.png \ +src/ui/gui/icons/48x48/categories/measure-date-scale.png \ +src/ui/gui/icons/48x48/categories/measure-date-nominal.png \ +src/ui/gui/icons/48x48/categories/measure-date-ordinal.png \ +src/ui/gui/icons/48x48/categories/measure-time-scale.png \ +src/ui/gui/icons/48x48/categories/measure-time-nominal.png \ +src/ui/gui/icons/48x48/categories/measure-time-ordinal.png \ +src/ui/gui/icons/48x48/categories/measure-string-nominal.png \ +src/ui/gui/icons/48x48/categories/measure-string-ordinal.png \ +src/ui/gui/icons/48x48/categories/measure-currency-scale.png \ +src/ui/gui/icons/48x48/categories/measure-currency-nominal.png \ +src/ui/gui/icons/48x48/categories/measure-currency-ordinal.png \ +src/ui/gui/icons/48x48/categories/role-input.png \ +src/ui/gui/icons/48x48/categories/role-target.png \ +src/ui/gui/icons/48x48/categories/role-both.png \ +src/ui/gui/icons/48x48/categories/role-none.png \ +src/ui/gui/icons/48x48/categories/role-partition.png \ +src/ui/gui/icons/48x48/categories/role-split.png \ +src/ui/gui/icons/scalable/categories/align-left.svg \ +src/ui/gui/icons/scalable/categories/align-center.svg \ +src/ui/gui/icons/scalable/categories/align-right.svg \ +src/ui/gui/icons/scalable/categories/measure-scale.svg \ +src/ui/gui/icons/scalable/categories/measure-ordinal.svg \ +src/ui/gui/icons/scalable/categories/measure-nominal.svg \ +src/ui/gui/icons/scalable/categories/measure-date-scale.svg \ +src/ui/gui/icons/scalable/categories/measure-date-nominal.svg \ +src/ui/gui/icons/scalable/categories/measure-date-ordinal.svg \ +src/ui/gui/icons/scalable/categories/measure-time-scale.svg \ +src/ui/gui/icons/scalable/categories/measure-time-nominal.svg \ +src/ui/gui/icons/scalable/categories/measure-time-ordinal.svg \ +src/ui/gui/icons/scalable/categories/measure-string-nominal.svg \ +src/ui/gui/icons/scalable/categories/measure-string-ordinal.svg \ +src/ui/gui/icons/scalable/categories/measure-currency-scale.svg \ +src/ui/gui/icons/scalable/categories/measure-currency-nominal.svg \ +src/ui/gui/icons/scalable/categories/measure-currency-ordinal.svg \ +src/ui/gui/icons/scalable/categories/role-input.svg \ +src/ui/gui/icons/scalable/categories/role-target.svg \ +src/ui/gui/icons/scalable/categories/role-both.svg \ +src/ui/gui/icons/scalable/categories/role-none.svg \ +src/ui/gui/icons/scalable/categories/role-partition.svg \ +src/ui/gui/icons/scalable/categories/role-split.svg + +# Mimetype icons have size dependent layouts MIMETYPE_ICONS = \ -src/ui/gui/icons/32x32/mimetypes/application-x-spss-por.png \ -src/ui/gui/icons/32x32/mimetypes/application-x-spss-sav.png \ -src/ui/gui/icons/32x32/mimetypes/application-x-spss-sps.png \ -src/ui/gui/icons/32x32/mimetypes/application-x-spss-zsav.png \ +src/ui/gui/icons/16x16/mimetypes/application-x-spss-por.png \ +src/ui/gui/icons/16x16/mimetypes/application-x-spss-sav.png \ +src/ui/gui/icons/16x16/mimetypes/application-x-spss-sps.png \ +src/ui/gui/icons/16x16/mimetypes/application-x-spss-zsav.png \ src/ui/gui/icons/22x22/mimetypes/application-x-spss-por.png \ src/ui/gui/icons/22x22/mimetypes/application-x-spss-sav.png \ src/ui/gui/icons/22x22/mimetypes/application-x-spss-sps.png \ @@ -188,19 +214,18 @@ src/ui/gui/icons/24x24/mimetypes/application-x-spss-por.png \ src/ui/gui/icons/24x24/mimetypes/application-x-spss-sav.png \ src/ui/gui/icons/24x24/mimetypes/application-x-spss-sps.png \ src/ui/gui/icons/24x24/mimetypes/application-x-spss-zsav.png \ -src/ui/gui/icons/256x256/mimetypes/application-x-spss-por.png \ -src/ui/gui/icons/256x256/mimetypes/application-x-spss-sav.png \ -src/ui/gui/icons/256x256/mimetypes/application-x-spss-sps.png \ -src/ui/gui/icons/256x256/mimetypes/application-x-spss-zsav.png \ -src/ui/gui/icons/16x16/mimetypes/application-x-spss-por.png \ -src/ui/gui/icons/16x16/mimetypes/application-x-spss-sav.png \ -src/ui/gui/icons/16x16/mimetypes/application-x-spss-sps.png \ -src/ui/gui/icons/16x16/mimetypes/application-x-spss-zsav.png \ +src/ui/gui/icons/32x32/mimetypes/application-x-spss-por.png \ +src/ui/gui/icons/32x32/mimetypes/application-x-spss-sav.png \ +src/ui/gui/icons/32x32/mimetypes/application-x-spss-sps.png \ +src/ui/gui/icons/32x32/mimetypes/application-x-spss-zsav.png \ src/ui/gui/icons/48x48/mimetypes/application-x-spss-por.png \ src/ui/gui/icons/48x48/mimetypes/application-x-spss-sav.png \ src/ui/gui/icons/48x48/mimetypes/application-x-spss-sps.png \ -src/ui/gui/icons/48x48/mimetypes/application-x-spss-zsav.png - +src/ui/gui/icons/48x48/mimetypes/application-x-spss-zsav.png \ +src/ui/gui/icons/256x256/mimetypes/application-x-spss-por.png \ +src/ui/gui/icons/256x256/mimetypes/application-x-spss-sav.png \ +src/ui/gui/icons/256x256/mimetypes/application-x-spss-sps.png \ +src/ui/gui/icons/256x256/mimetypes/application-x-spss-zsav.png src/ui/gui/artwork/splash-t.svg: src/ui/gui/artwork/splash.svg cp $< $@ @@ -208,124 +233,56 @@ src/ui/gui/artwork/splash-t.svg: src/ui/gui/artwork/splash.svg src/ui/gui/artwork/splash-r.svg: src/ui/gui/artwork/splash.svg sed -e '/inkscape:label="Overlay"/s/inline/none/' $< > $@ - MISC_ICONS = src/ui/gui/icons/splash-t.png \ src/ui/gui/icons/splash-r.png - ACTION_ICONS = \ -src/ui/gui/icons/32x32/actions/data-split-file.png \ -src/ui/gui/icons/32x32/actions/data-select-cases.png \ -src/ui/gui/icons/32x32/actions/data-weight-cases.png \ -src/ui/gui/icons/32x32/actions/transform-compute.png \ -src/ui/gui/icons/32x32/actions/edit-find.png \ -src/ui/gui/icons/32x32/actions/edit-go-to-case.png \ -src/ui/gui/icons/32x32/actions/edit-go-to-variable.png \ -src/ui/gui/icons/32x32/actions/edit-insert-case.png \ -src/ui/gui/icons/32x32/actions/edit-insert-variable.png \ -src/ui/gui/icons/32x32/actions/edit-cut.png \ -src/ui/gui/icons/32x32/actions/edit-copy.png \ -src/ui/gui/icons/32x32/actions/edit-paste.png \ -src/ui/gui/icons/32x32/actions/edit-undo.png \ -src/ui/gui/icons/32x32/actions/edit-redo.png \ -src/ui/gui/icons/32x32/actions/edit-select-all.png \ -src/ui/gui/icons/32x32/actions/file-open-data.png \ -src/ui/gui/icons/32x32/actions/file-save-data.png \ -src/ui/gui/icons/32x32/actions/file-export-data.png \ -src/ui/gui/icons/32x32/actions/file-print.png \ -src/ui/gui/icons/32x32/actions/view-value-labels.png \ -src/ui/gui/icons/32x32/actions/utilities-variables.png \ -src/ui/gui/icons/32x32/actions/run-all.png \ -src/ui/gui/icons/24x24/actions/data-split-file.png \ -src/ui/gui/icons/24x24/actions/data-select-cases.png \ -src/ui/gui/icons/24x24/actions/data-weight-cases.png \ -src/ui/gui/icons/24x24/actions/transform-compute.png \ -src/ui/gui/icons/24x24/actions/edit-find.png \ -src/ui/gui/icons/24x24/actions/edit-go-to-case.png \ -src/ui/gui/icons/24x24/actions/edit-go-to-variable.png \ -src/ui/gui/icons/24x24/actions/edit-insert-case.png \ -src/ui/gui/icons/24x24/actions/edit-insert-variable.png \ -src/ui/gui/icons/24x24/actions/edit-cut.png \ -src/ui/gui/icons/24x24/actions/edit-copy.png \ -src/ui/gui/icons/24x24/actions/edit-paste.png \ -src/ui/gui/icons/24x24/actions/edit-undo.png \ -src/ui/gui/icons/24x24/actions/edit-redo.png \ -src/ui/gui/icons/24x24/actions/edit-select-all.png \ -src/ui/gui/icons/24x24/actions/file-open-data.png \ -src/ui/gui/icons/24x24/actions/file-save-data.png \ -src/ui/gui/icons/24x24/actions/file-export-data.png \ -src/ui/gui/icons/24x24/actions/file-print.png \ -src/ui/gui/icons/24x24/actions/view-value-labels.png \ -src/ui/gui/icons/24x24/actions/utilities-variables.png \ -src/ui/gui/icons/24x24/actions/run-all.png \ -src/ui/gui/icons/16x16/actions/file-new-data.png \ -src/ui/gui/icons/16x16/actions/file-syntax-data.png \ -src/ui/gui/icons/16x16/actions/file-system-data.png \ -src/ui/gui/icons/16x16/actions/file-open-data.png \ -src/ui/gui/icons/16x16/actions/file-import-data.png \ -src/ui/gui/icons/16x16/actions/file-export-data.png \ -src/ui/gui/icons/16x16/actions/file-save-data.png \ -src/ui/gui/icons/16x16/actions/file-save-as.png \ -src/ui/gui/icons/16x16/actions/file-print.png \ -src/ui/gui/icons/16x16/actions/file-rename-data-set.png \ -src/ui/gui/icons/16x16/actions/file-display-information.png \ -src/ui/gui/icons/16x16/actions/display-information-working-file.png \ -src/ui/gui/icons/16x16/actions/display-information-external-file.png \ -src/ui/gui/icons/16x16/actions/file-recently-used.png \ -src/ui/gui/icons/16x16/actions/file-quit.png \ -src/ui/gui/icons/16x16/actions/file-display-information.png \ -src/ui/gui/icons/16x16/actions/edit-insert-variable.png \ -src/ui/gui/icons/16x16/actions/edit-insert-case.png \ -src/ui/gui/icons/16x16/actions/edit-go-to-variable.png \ -src/ui/gui/icons/16x16/actions/edit-go-to-case.png \ -src/ui/gui/icons/16x16/actions/edit-cut.png \ -src/ui/gui/icons/16x16/actions/edit-copy.png \ -src/ui/gui/icons/16x16/actions/edit-paste.png \ -src/ui/gui/icons/16x16/actions/edit-delete.png \ -src/ui/gui/icons/16x16/actions/edit-undo.png \ -src/ui/gui/icons/16x16/actions/edit-redo.png \ -src/ui/gui/icons/16x16/actions/edit-select-all.png \ -src/ui/gui/icons/16x16/actions/edit-clear.png \ -src/ui/gui/icons/16x16/actions/edit-find.png \ -src/ui/gui/icons/16x16/actions/view-font.png \ -src/ui/gui/icons/16x16/actions/view-value-labels.png \ -src/ui/gui/icons/16x16/actions/data-sort-cases.png \ -src/ui/gui/icons/16x16/actions/data-transpose.png \ -src/ui/gui/icons/16x16/actions/data-aggregate.png \ -src/ui/gui/icons/16x16/actions/data-split-file.png \ -src/ui/gui/icons/16x16/actions/data-select-cases.png \ -src/ui/gui/icons/16x16/actions/data-weight-cases.png \ -src/ui/gui/icons/16x16/actions/run-all.png \ -src/ui/gui/icons/16x16/actions/run-selection.png \ -src/ui/gui/icons/16x16/actions/run-current-line.png \ -src/ui/gui/icons/16x16/actions/run-to-end.png \ -src/ui/gui/icons/16x16/actions/transform-compute.png \ -src/ui/gui/icons/16x16/actions/transform-count.png \ -src/ui/gui/icons/16x16/actions/transform-rank-cases.png \ -src/ui/gui/icons/16x16/actions/transform-automatic-recode.png \ -src/ui/gui/icons/16x16/actions/transform-in-to-same-variables.png \ -src/ui/gui/icons/16x16/actions/transform-in-to-different-variables.png \ -src/ui/gui/icons/16x16/actions/transform-run-pending.png \ -src/ui/gui/icons/16x16/actions/analyze-descriptive-statistics.png \ -src/ui/gui/icons/16x16/actions/analyze-compare-means.png \ -src/ui/gui/icons/16x16/actions/analyze-univariate-analysis.png \ -src/ui/gui/icons/16x16/actions/analyze-bivariate-correlation.png \ -src/ui/gui/icons/16x16/actions/analyze-kmeans-cluster.png \ -src/ui/gui/icons/16x16/actions/analyze-factor-analysis.png \ -src/ui/gui/icons/16x16/actions/analyze-reliability.png \ -src/ui/gui/icons/16x16/actions/analyze-regression.png \ -src/ui/gui/icons/16x16/actions/analyze-non-parametric-statistics.png \ -src/ui/gui/icons/16x16/actions/analyze-roc-curve.png \ -src/ui/gui/icons/16x16/actions/utilities-variables.png \ -src/ui/gui/icons/16x16/actions/utilities-data-file-comments.png \ -src/ui/gui/icons/16x16/actions/windows-minimize-all.png \ -src/ui/gui/icons/16x16/actions/windows-split.png \ -src/ui/gui/icons/16x16/actions/help-reference-manual.png \ -src/ui/gui/icons/16x16/actions/help-about.png - +src/ui/gui/icons/24x24/actions/pspp-file-open-data.png \ +src/ui/gui/icons/24x24/actions/pspp-file-save-data.png \ +src/ui/gui/icons/24x24/actions/pspp-edit-go-to-variable.png \ +src/ui/gui/icons/24x24/actions/pspp-edit-go-to-case.png \ +src/ui/gui/icons/24x24/actions/pspp-edit-find.png \ +src/ui/gui/icons/24x24/actions/pspp-edit-insert-case.png \ +src/ui/gui/icons/24x24/actions/pspp-edit-insert-variable.png \ +src/ui/gui/icons/24x24/actions/pspp-data-split-file.png \ +src/ui/gui/icons/24x24/actions/pspp-data-weight-cases.png \ +src/ui/gui/icons/24x24/actions/pspp-view-value-labels.png \ +src/ui/gui/icons/48x48/actions/pspp-file-open-data.png \ +src/ui/gui/icons/48x48/actions/pspp-file-save-data.png \ +src/ui/gui/icons/48x48/actions/pspp-edit-go-to-variable.png \ +src/ui/gui/icons/48x48/actions/pspp-edit-go-to-case.png \ +src/ui/gui/icons/48x48/actions/pspp-edit-find.png \ +src/ui/gui/icons/48x48/actions/pspp-edit-insert-case.png \ +src/ui/gui/icons/48x48/actions/pspp-edit-insert-variable.png \ +src/ui/gui/icons/48x48/actions/pspp-data-split-file.png \ +src/ui/gui/icons/48x48/actions/pspp-data-weight-cases.png \ +src/ui/gui/icons/48x48/actions/pspp-view-value-labels.png \ +src/ui/gui/icons/96x96/actions/pspp-file-open-data.png \ +src/ui/gui/icons/96x96/actions/pspp-file-save-data.png \ +src/ui/gui/icons/96x96/actions/pspp-edit-go-to-variable.png \ +src/ui/gui/icons/96x96/actions/pspp-edit-go-to-case.png \ +src/ui/gui/icons/96x96/actions/pspp-edit-find.png \ +src/ui/gui/icons/96x96/actions/pspp-edit-insert-case.png \ +src/ui/gui/icons/96x96/actions/pspp-edit-insert-variable.png \ +src/ui/gui/icons/96x96/actions/pspp-data-split-file.png \ +src/ui/gui/icons/96x96/actions/pspp-data-weight-cases.png \ +src/ui/gui/icons/96x96/actions/pspp-view-value-labels.png \ +src/ui/gui/icons/scalable/actions/pspp-file-open-data.svg \ +src/ui/gui/icons/scalable/actions/pspp-file-save-data.svg \ +src/ui/gui/icons/scalable/actions/pspp-edit-go-to-variable.svg \ +src/ui/gui/icons/scalable/actions/pspp-edit-go-to-case.svg \ +src/ui/gui/icons/scalable/actions/pspp-edit-find.svg \ +src/ui/gui/icons/scalable/actions/pspp-edit-insert-case.svg \ +src/ui/gui/icons/scalable/actions/pspp-edit-insert-variable.svg \ +src/ui/gui/icons/scalable/actions/pspp-data-split-file.svg \ +src/ui/gui/icons/scalable/actions/pspp-data-weight-cases.svg \ +src/ui/gui/icons/scalable/actions/pspp-view-value-labels.svg ICONS=$(CATEGORY_ICONS) $(ACTION_ICONS) $(MIMETYPE_ICONS) $(APP_ICONS) $(MISC_ICONS) +ICON_SOURCES = $(wildcard src/ui/gui/artwork/*/*/*.svg) +ICON_SOURCES += $(wildcard src/ui/gui/artwork/splash*.svg) + everything: prep_ph icons $(MAKE) -f Smake Makefile.in configure @@ -341,9 +298,8 @@ src/ui/gui/icons/manifest: $(MAKEFILE_LIST) echo >> $@ echo >> $@ printf 'icon_srcs = ' >> $@ - for i in $(ICONS); do \ - printf ' \\\n\t ' >> $@ ;\ - printf $$i | awk '{ gsub(".png",".svg")gsub("icons","artwork");printf $$0}' >> $@ ; \ + for i in $(ICON_SOURCES); do \ + printf ' \\\n\t '$$i >> $@ ;\ done echo ' ' >> $@ echo >> $@ @@ -362,7 +318,7 @@ src/ui/gui/resources.xml: $(ICONS) .PHONY: prep_ph -prep_ph: +prep_ph: test -e ChangeLog || touch ChangeLog test -d m4 || mkdir m4 touch m4/Makefile.am @@ -426,20 +382,25 @@ clean: rm -f aclocal.m4 rm -f missing mkinstalldirs rm -f install-sh - rm -f configure Makefile + rm -f configure Makefile rm -f depcomp rm -rf intl gl rm -f m4/*.m4 - rm -f $(PO_FILES) po/*.gmo + rm -f $(PO_FILES) po/*.gmo rm -f mdate-sh texinfo.tex rm -f doc/stamp-vti rm -f config.h.in~ rm -f config.h.in rm -f gl/Makefile.in rm -f Makefile.in - rm -f compile - rm -f ltmain.sh - rm -f reloc-ldflags install-reloc + rm -f build-aux/compile + rm -f build-aux/ltmain.sh + rm -f build-aux/reloc-ldflags + rm -f build-aux/install-reloc + rm -f build-aux/config.rpath + rm -f build-aux/config.libpath + rm -f build-aux/libtool-reloc + rm -f build-aux/gitlog-to-changelog .PHONY: all gettextize clean @@ -450,11 +411,66 @@ clean: #svg2png=convert -background transparent $1 $3 +# Graphical layout of icons and our portfolio +# =========================================== +# +# We have two different kinds of icons in our artwork collection +# +# a) The mimetype icons have a different graphical layout depending on resolution +# This assumes that a higher resolution means a bigger size. On the bigger +# size you can identify more details and this is used in the design. +# b) Icons which are designed based on 16x16 pixels which are just scaled +# This are all other icons. +# +# Icon resolutions +# +# The different icon resolutions are historically derived for bitmaps when an icon +# is displayed in different sizes. Then a scaled version of the icon requires a new +# bitmap image. All our icons are now svg type and can be scaled from one svg file as +# the names suggests - scalable vector format. +# +# The strategy for pspp gui +# +# All icons which are simply scaled provide a default 48x48 bitmap png image plus +# an svg version in the scalable directory. +# The mimetype icons with different layouts provide png bitmaps in their original resolutions +# +# The artwork directory contains only the pure source svg files. No copies and no +# version has another size indication although it is an svg. +# +# => mimetype icons are located in 16x16, 32x32, ... , 256x256 (different designs) +# => all others are in scaled (just one design svg) +# + +# Rule for icons with size dependent graphical design src/ui/gui/icons/%.png: src/ui/gui/artwork/%.svg build-aux/svg2png src/ui/gui/icons/COPYING_CCBYSA3 mkdir -p $(dir $@) build-aux/svg2png "$<" "$(lastword $^)" "$@" +# Rules for icons which are simply scaled - Attention multitarget would trigger only once... +src/ui/gui/icons/16x16/%.png : src/ui/gui/artwork/scalable/%.svg build-aux/svg2png src/ui/gui/icons/COPYING_CCBYSA3 + mkdir -p $(dir $@) + build-aux/svg2png "$<" "$(lastword $^)" "$@" +src/ui/gui/icons/22x22/%.png : src/ui/gui/artwork/scalable/%.svg build-aux/svg2png src/ui/gui/icons/COPYING_CCBYSA3 + mkdir -p $(dir $@) + build-aux/svg2png "$<" "$(lastword $^)" "$@" +src/ui/gui/icons/24x24/%.png : src/ui/gui/artwork/scalable/%.svg build-aux/svg2png src/ui/gui/icons/COPYING_CCBYSA3 + mkdir -p $(dir $@) + build-aux/svg2png "$<" "$(lastword $^)" "$@" +src/ui/gui/icons/32x32/%.png : src/ui/gui/artwork/scalable/%.svg build-aux/svg2png src/ui/gui/icons/COPYING_CCBYSA3 + mkdir -p $(dir $@) + build-aux/svg2png "$<" "$(lastword $^)" "$@" +src/ui/gui/icons/48x48/%.png : src/ui/gui/artwork/scalable/%.svg build-aux/svg2png src/ui/gui/icons/COPYING_CCBYSA3 + mkdir -p $(dir $@) + build-aux/svg2png "$<" "$(lastword $^)" "$@" +src/ui/gui/icons/96x96/%.png : src/ui/gui/artwork/scalable/%.svg build-aux/svg2png src/ui/gui/icons/COPYING_CCBYSA3 + mkdir -p $(dir $@) + build-aux/svg2png "$<" "$(lastword $^)" "$@" +src/ui/gui/icons/256x256/%.png : src/ui/gui/artwork/scalable/%.svg build-aux/svg2png src/ui/gui/icons/COPYING_CCBYSA3 + mkdir -p $(dir $@) + build-aux/svg2png "$<" "$(lastword $^)" "$@" +# Copy svg src/ui/gui/icons/%.svg: src/ui/gui/artwork/%.svg mkdir -p $(dir $@) cp $< $@ diff --git a/pspp.spec b/pspp.spec index b3a3d31..6d08a3c 100644 --- a/pspp.spec +++ b/pspp.spec @@ -1,6 +1,6 @@ Name: pspp -Version: 1.2.0 -Release: 9%{?dist} +Version: 1.4.0 +Release: 1%{?dist} Summary: A program for statistical analysis of sampled data License: GPLv3+ URL: https://www.gnu.org/software/pspp/ @@ -8,14 +8,6 @@ VCS: scm:git:git://git.savannah.gnu.org/pspp.git Source0: https://ftp.gnu.org/gnu/%{name}/%{name}-%{version}.tar.gz Source1: https://ftp.gnu.org/gnu/%{name}/%{name}-%{version}.tar.gz.sig Source2: pspp-Smake -Patch1: pspp-0001-Check-for-python-interpreter-at-configure-time-and-d.patch -Patch2: pspp-0002-segment-Fix-behavior-when-line-is-not-new-line-termi.patch -Patch3: pspp-0003-sys-file-writer-Remove-assertions-based-on-file-posi.patch -Patch4: pspp-0004-pspp-dump-sav-Issue-error-message-for-too-large-exte.patch -Patch5: pspp-0005-pspp-dump-sav-Fix-write-past-end-of-buffer-in-corner.patch -Patch6: pspp-0006-PSPPIRE-Avoid-some-segmentation-faults-when-corrupt-.patch -Patch7: pspp-0007-psppire-Fix-multiple-definitions-of-align_enum_type-.patch -Patch8: pspp-0008-test-date-input.py-Make-compatible-with-Python-3.patch BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils @@ -119,6 +111,9 @@ PYTHON=python2 make check || true %changelog +* Mon Aug 17 2020 Peter Lemenkov - 1.4.0-1 +- Ver. 1.4.0 + * Tue Jul 28 2020 Fedora Release Engineering - 1.2.0-9 - Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild diff --git a/sources b/sources index 6b80899..bdd9e22 100644 --- a/sources +++ b/sources @@ -1 +1,2 @@ -SHA512 (pspp-1.2.0.tar.gz) = 49eed2b55f10584abba18ff7d2020fd08691bbc1a3c2f332e6d283e32aa84e0abdae6092d17db9c1a539c63d85ecdfcc2dad40c94a06904b8893a1976e5e48d3 +SHA512 (pspp-1.4.0.tar.gz) = 0a1fd93e5655cf6b9c67312455fd00a989327c1e00c345aa7b0baf764bfab9168e48f2cb5770a3e01bbf26408e4f7d42b53b8704e61d3ac82e0f1f0a0c411367 +SHA512 (pspp-1.4.0.tar.gz.sig) = 0cdd5a3d9a62adb92df2f618cf8e4c6820d902d7913289e5a0abfe0142304c2decdfc653c772b498d8aba58628b818235a40ce916d87422e33fcfe7e01b6f0ce