From 93b3c24f9c9eef7e4a9ff2fca02731e94c3809de Mon Sep 17 00:00:00 2001 From: "pspp.freepost@ordinaryamerican.net" Date: Mon, 7 Nov 2016 12:18:35 +0100 Subject: [PATCH] compile without gnumeric and odf read support This patch fixes the problem described in bug #49550. When libxml2 is not installed, the gnumeric and odf read support is disabled. This was not handled correctly. I changed the compilation requirements and the error message handling if somebody tries to open a file. Closes bug #49550. --- src/data/gnumeric-reader.c | 19 ++++++++++++++++--- src/data/ods-reader.c | 20 ++++++++++++++++---- src/language/data-io/get-data.c | 27 ++++++++------------------- 3 files changed, 40 insertions(+), 26 deletions(-) diff --git a/src/data/gnumeric-reader.c b/src/data/gnumeric-reader.c index ba4218ff77..abbbceb727 100644 --- a/src/data/gnumeric-reader.c +++ b/src/data/gnumeric-reader.c @@ -30,11 +30,24 @@ #if !GNM_READ_SUPPORT -struct casereader * -gnumeric_open_reader (const struct spreadsheet_read_options *opts, struct dictionary **dict) +struct spreadsheet * +gnumeric_probe (const char *filename, bool report_errors) { - msg (ME, _("Support for %s files was not compiled into this installation of PSPP"), "Gnumeric"); + if (report_errors) + msg (ME, _("Support for %s files was not compiled into this installation of PSPP"), "Gnumeric"); + + return NULL; +} +const char * +gnumeric_get_sheet_name (struct spreadsheet *s, int n) +{ + return NULL; +} + +char * +gnumeric_get_sheet_range (struct spreadsheet *s, int n) +{ return NULL; } diff --git a/src/data/ods-reader.c b/src/data/ods-reader.c index c2e7a0e354..eabdc8f551 100644 --- a/src/data/ods-reader.c +++ b/src/data/ods-reader.c @@ -34,12 +34,24 @@ #if !ODF_READ_SUPPORT -struct casereader * -ods_open_reader (const struct spreadsheet_read_options *opts, - struct dictionary **dict) +struct spreadsheet * +ods_probe (const char *filename, bool report_errors) { - msg (ME, _("Support for %s files was not compiled into this installation of PSPP"), "OpenDocument"); + if (report_errors) + msg (ME, _("Support for %s files was not compiled into this installation of PSPP"), "OpenDocument"); + + return NULL; +} +const char * +ods_get_sheet_name (struct spreadsheet *s, int n) +{ + return NULL; +} + +char * +ods_get_sheet_range (struct spreadsheet *s, int n) +{ return NULL; } diff --git a/src/language/data-io/get-data.c b/src/language/data-io/get-data.c index 13eebe6c3a..061fde1c03 100644 --- a/src/language/data-io/get-data.c +++ b/src/language/data-io/get-data.c @@ -46,21 +46,6 @@ #define _(msgid) gettext (msgid) #define N_(msgid) (msgid) - -#ifdef ODF_READ_SUPPORT -static const bool odf_read_support = true; -#else -static const bool odf_read_support = false; -struct spreadsheet *ods_probe (const char *filename, bool report_errors){} -#endif - -#ifdef GNM_READ_SUPPORT -static const bool gnm_read_support = true; -#else -static const bool gnm_read_support = false; -struct spreadsheet *gnumeric_probe (const char *filename, bool report_errors){} -#endif - static bool parse_spreadsheet (struct lexer *lexer, char **filename, struct spreadsheet_read_options *opts); @@ -113,14 +98,18 @@ cmd_get_data (struct lexer *lexer, struct dataset *ds) goto error; struct spreadsheet *spreadsheet = NULL; - if ( gnm_read_support && 0 == strncasecmp (tok, "GNM", 3)) + if ( 0 == strncasecmp (tok, "GNM", 3)) spreadsheet = gnumeric_probe (filename, true); - else if ( odf_read_support && 0 == strncasecmp (tok, "ODS", 3)) + else if ( 0 == strncasecmp (tok, "ODS", 3)) spreadsheet = ods_probe (filename, true); - free (filename); if (spreadsheet == NULL) - goto error; + { + msg (SE, _("error reading file `%s'"), filename); + free (filename); + goto error; + } + free (filename); struct casereader *reader = spreadsheet_make_reader (spreadsheet, &opts); if (reader) -- 2.30.2