From 4af1dabb5a3f7104a4678ff963c8cba1251c838c Mon Sep 17 00:00:00 2001 From: John Cupitt Date: Wed, 18 Jul 2012 10:13:03 +0100 Subject: [PATCH 01/11] don't cache write operations we want writes to happen every time, in case the file has been deleted by someone --- ChangeLog | 1 + libvips/foreign/foreign.c | 4 ++++ libvips/foreign/vips2tiff.c | 4 ++-- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 68bf11bd..26228eae 100644 --- a/ChangeLog +++ b/ChangeLog @@ -4,6 +4,7 @@ - png save compression range was wrong - more/moreeq was wrong - vips7 ppm save with options was broken +- don't cache write operations 18/6/12 started 7.28.9 - slightly more memory debugging output diff --git a/libvips/foreign/foreign.c b/libvips/foreign/foreign.c index 3c2efeef..edef480c 100644 --- a/libvips/foreign/foreign.c +++ b/libvips/foreign/foreign.c @@ -1375,6 +1375,10 @@ vips_foreign_save_build( VipsObject *object ) vips_foreign_convert_saveable( save ) ) return( -1 ); + /* You mustn't cache write operations. + */ + vips_operation_set_nocache( VIPS_OPERATION( save ), TRUE ); + if( VIPS_OBJECT_CLASS( vips_foreign_save_parent_class )-> build( object ) ) return( -1 ); diff --git a/libvips/foreign/vips2tiff.c b/libvips/foreign/vips2tiff.c index ddec2f5f..8e681f8f 100644 --- a/libvips/foreign/vips2tiff.c +++ b/libvips/foreign/vips2tiff.c @@ -464,7 +464,7 @@ write_tiff_header( TiffWrite *tw, TIFF *tif, int width, int height ) TIFFSetField( tif, TIFFTAG_JPEGCOLORMODE, JPEGCOLORMODE_RGB ); } - if( tw->predictor != -1 ) + if( tw->predictor != VIPS_FOREIGN_TIFF_PREDICTOR_NONE ) TIFFSetField( tif, TIFFTAG_PREDICTOR, tw->predictor ); /* Don't write mad resolutions (eg. zero), it confuses some programs. @@ -1338,7 +1338,7 @@ tiff_copy( TiffWrite *tw, TIFF *out, TIFF *in ) CopyField( TIFFTAG_ROWSPERSTRIP, i32 ); CopyField( TIFFTAG_SUBFILETYPE, i32 ); - if( tw->predictor != -1 ) + if( tw->predictor != VIPS_FOREIGN_TIFF_PREDICTOR_NONE ) TIFFSetField( out, TIFFTAG_PREDICTOR, tw->predictor ); /* TIFFTAG_JPEGQUALITY is a pesudo-tag, so we can't copy it. From c6a714794fa0fc30ab4edc6104aa30f0852b7ee4 Mon Sep 17 00:00:00 2001 From: John Cupitt Date: Wed, 18 Jul 2012 17:11:10 +0100 Subject: [PATCH 02/11] csv load with options was broken --- libvips/deprecated/im_csv2vips.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libvips/deprecated/im_csv2vips.c b/libvips/deprecated/im_csv2vips.c index 834a8792..38ff5765 100644 --- a/libvips/deprecated/im_csv2vips.c +++ b/libvips/deprecated/im_csv2vips.c @@ -74,7 +74,7 @@ im_csv2vips( const char *filename, IMAGE *out ) lines = atoi( r ); } - if( vips__csv_read( filename, out, + if( vips__csv_read( name, out, start_skip, lines, whitespace, separator ) ) return( -1 ); From bb95b546790e240a0e8bee9acaa17d72a097ebb6 Mon Sep 17 00:00:00 2001 From: John Cupitt Date: Thu, 19 Jul 2012 13:59:37 +0100 Subject: [PATCH 03/11] oops vips7 png read was broken --- TODO | 4 ++++ libvips/deprecated/im_png2vips.c | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/TODO b/TODO index e4e24aca..7d0b1feb 100644 --- a/TODO +++ b/TODO @@ -1,3 +1,7 @@ +- try the nip2 test suite again + + + blocking bugs ============= diff --git a/libvips/deprecated/im_png2vips.c b/libvips/deprecated/im_png2vips.c index ad38fa8b..b169c154 100644 --- a/libvips/deprecated/im_png2vips.c +++ b/libvips/deprecated/im_png2vips.c @@ -78,11 +78,11 @@ png2vips( const char *name, IMAGE *out, gboolean header_only ) } if( header_only ) { - if( vips__png_read( filename, out ) ) + if( vips__png_header( filename, out ) ) return( -1 ); } else { - if( vips__png_header( filename, out ) ) + if( vips__png_read( filename, out ) ) return( -1 ); } From 5778dfac1afa3a0331c744411791424049478597 Mon Sep 17 00:00:00 2001 From: John Cupitt Date: Fri, 20 Jul 2012 10:22:43 +0100 Subject: [PATCH 04/11] remove the version numbers from the .pc files we used to have minor version numbers in the pkg-confiog files, eg: pkg-config vips-7.28 --cflags The idea was to make working with multiple installed versions (something I do a lot at least) easier. But it was also annoying and made upgrading harder for downstream packages. And the benefits were very marginal. --- Makefile.am | 8 ++++---- TODO | 4 ---- configure.in | 9 +++------ vips-7.29.pc.in => vips.pc.in | 0 vipsCC-7.29.pc.in => vipsCC.pc.in | 0 5 files changed, 7 insertions(+), 14 deletions(-) rename vips-7.29.pc.in => vips.pc.in (100%) rename vipsCC-7.29.pc.in => vipsCC.pc.in (100%) diff --git a/Makefile.am b/Makefile.am index 2c92948b..621e7bea 100644 --- a/Makefile.am +++ b/Makefile.am @@ -3,7 +3,7 @@ if ENABLE_CXX C_COMPILE_DIR = libvipsCC C_DIST_DIR = -C_PKGCONFIG = vipsCC-7.${VIPS_MINOR_VERSION}.pc +C_PKGCONFIG = vipsCC.pc # turn on Python if we can (requires C++) if HAVE_PYTHON @@ -32,15 +32,15 @@ EXTRA_DIST = \ m4 \ benchmark \ bootstrap.sh \ - vips-7.${VIPS_MINOR_VERSION}.pc.in \ - vipsCC-7.${VIPS_MINOR_VERSION}.pc.in \ + vips.pc.in \ + vipsCC.pc.in \ acinclude.m4 \ depcomp \ $(C_DIST_DIR) \ $(P_DIST_DIR) pkgconfigdir = $(libdir)/pkgconfig -pkgconfig_DATA = vips-7.${VIPS_MINOR_VERSION}.pc $(C_PKGCONFIG) +pkgconfig_DATA = vips.pc $(C_PKGCONFIG) install-exec-hook: -rm -rf ${DESTDIR}$(datadir)/doc/vips diff --git a/TODO b/TODO index 7d0b1feb..e4e24aca 100644 --- a/TODO +++ b/TODO @@ -1,7 +1,3 @@ -- try the nip2 test suite again - - - blocking bugs ============= diff --git a/configure.in b/configure.in index 5f75bc95..0a889bd9 100644 --- a/configure.in +++ b/configure.in @@ -218,7 +218,7 @@ if test x"$enable_cxx" != x"no"; then AC_DEFINE(ENABLE_CXX,1,[build C++ components]) AM_CONDITIONAL(ENABLE_CXX, true) # need -lstdc++ for (eg.) the C++ format loaders - # this gets added to vips-7.xx.pc to help mingw and friends link programs + # this gets added to vips.pc to help mingw and friends link programs # using libvips VIPS_CXX_LIBS="-lstdc++" enable_cxx=yes @@ -685,12 +685,9 @@ AC_SUBST(VIPS_LIBS) AC_SUBST(VIPS_CXX_LIBS) AC_SUBST(PACKAGES_USED) -# you'd think we could have -# vips-$VIPS_MAJOR_VERSION.$VIPS_MINOR_VERSION.pc -# in AC_OUTPUT, but that seems to break for some combinations of sh/m4 AC_OUTPUT([ - vips-7.29.pc - vipsCC-7.29.pc + vips.pc + vipsCC.pc Makefile libvips/include/vips/version.h libvips/include/Makefile diff --git a/vips-7.29.pc.in b/vips.pc.in similarity index 100% rename from vips-7.29.pc.in rename to vips.pc.in diff --git a/vipsCC-7.29.pc.in b/vipsCC.pc.in similarity index 100% rename from vipsCC-7.29.pc.in rename to vipsCC.pc.in From 41be00d5dd5546f2efc795ccf9843d64f87ab9e1 Mon Sep 17 00:00:00 2001 From: John Cupitt Date: Fri, 20 Jul 2012 10:32:20 +0100 Subject: [PATCH 05/11] version bump for new stable --- ChangeLog | 3 +++ configure.in | 6 +++--- tools/Makefile.am | 4 ++-- tools/{vips-7.29 => vips-7.30} | 0 4 files changed, 8 insertions(+), 5 deletions(-) rename tools/{vips-7.29 => vips-7.30} (100%) diff --git a/ChangeLog b/ChangeLog index b0b97bfa..117b9e91 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,6 @@ +20/7/12 started 7.30.0 +- version bump + 19/3/12 started 7.29.0 - sanity-check PNG read geometry - nearest-neighbor interpolation rounds coordinates to nearest instead of diff --git a/configure.in b/configure.in index 0a889bd9..7b8495d5 100644 --- a/configure.in +++ b/configure.in @@ -2,7 +2,7 @@ # also update the version number in the m4 macros below -AC_INIT([vips], [7.29.0], [vipsip@jiscmail.ac.uk]) +AC_INIT([vips], [7.30.0], [vipsip@jiscmail.ac.uk]) # required for gobject-introspection AC_PREREQ(2.62) @@ -16,7 +16,7 @@ AC_CONFIG_MACRO_DIR([m4]) # user-visible library versioning m4_define([vips_major_version], [7]) -m4_define([vips_minor_version], [29]) +m4_define([vips_minor_version], [30]) m4_define([vips_micro_version], [0]) m4_define([vips_version], [vips_major_version.vips_minor_version.vips_micro_version]) @@ -37,7 +37,7 @@ VIPS_VERSION_STRING=$VIPS_VERSION-`date` # binary interface changes not backwards compatible?: reset age to 0 LIBRARY_CURRENT=33 -LIBRARY_REVISION=2 +LIBRARY_REVISION=3 LIBRARY_AGE=1 # patched into include/vips/version.h diff --git a/tools/Makefile.am b/tools/Makefile.am index 59f63b45..ea6c2690 100644 --- a/tools/Makefile.am +++ b/tools/Makefile.am @@ -26,10 +26,10 @@ bin_SCRIPTS = \ batch_image_convert \ batch_rubber_sheet \ batch_crop \ - vips-7.29 + vips-7.30 EXTRA_DIST = \ - vips-7.29 \ + vips-7.30 \ light_correct.in \ shrink_width.in \ batch_image_convert.in \ diff --git a/tools/vips-7.29 b/tools/vips-7.30 similarity index 100% rename from tools/vips-7.29 rename to tools/vips-7.30 From a71fe51d2d206d3a795bb01be79ac80dca7746c2 Mon Sep 17 00:00:00 2001 From: John Cupitt Date: Fri, 20 Jul 2012 13:07:49 +0100 Subject: [PATCH 06/11] support "rs" mode in im_open() vips7 compat mode now supports "rs" mode --- sequential read ruby-vips uses this to get :sequetial=>true working --- ChangeLog | 2 +- TODO | 10 ++++++++++ libvips/deprecated/dispatch_types.c | 2 +- libvips/deprecated/im_jpeg2vips.c | 9 ++++----- libvips/deprecated/im_png2vips.c | 5 ++++- libvips/deprecated/im_tiff2vips.c | 5 ++++- libvips/deprecated/lazy.c | 19 ++++++++++--------- libvips/deprecated/vips7compat.c | 8 +++++++- libvips/include/vips/internal.h | 2 +- 9 files changed, 42 insertions(+), 20 deletions(-) diff --git a/ChangeLog b/ChangeLog index 117b9e91..ceedaa23 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,5 @@ 20/7/12 started 7.30.0 -- version bump +- support "rs" mode in vips7 19/3/12 started 7.29.0 - sanity-check PNG read geometry diff --git a/TODO b/TODO index e4e24aca..467bb106 100644 --- a/TODO +++ b/TODO @@ -1,3 +1,13 @@ +- try: + + vipsthumbnail wtc.tif --verbose --vips-progress --vips-leak + + get no progress info + + does not report static interpolators on exit, shouldn't leak check do + this? + + blocking bugs ============= diff --git a/libvips/deprecated/dispatch_types.c b/libvips/deprecated/dispatch_types.c index 72147afe..de103d7a 100644 --- a/libvips/deprecated/dispatch_types.c +++ b/libvips/deprecated/dispatch_types.c @@ -110,7 +110,7 @@ input_image_init( im_object *obj, char *str ) { IMAGE **im = (IMAGE **) obj; - return( !(*im = vips__deprecated_open_read( str )) ); + return( !(*im = vips__deprecated_open_read( str, FALSE )) ); } /* Input image type. diff --git a/libvips/deprecated/im_jpeg2vips.c b/libvips/deprecated/im_jpeg2vips.c index 82fe29d5..d4c677eb 100644 --- a/libvips/deprecated/im_jpeg2vips.c +++ b/libvips/deprecated/im_jpeg2vips.c @@ -58,6 +58,7 @@ jpeg2vips( const char *name, IMAGE *out, gboolean header_only ) char mode[FILENAME_MAX]; char *p, *q; int shrink; + int seq; gboolean fail_on_warn; /* By default, we ignore any warnings. We want to get as much of @@ -70,6 +71,7 @@ jpeg2vips( const char *name, IMAGE *out, gboolean header_only ) im_filename_split( name, filename, mode ); p = &mode[0]; shrink = 1; + seq = 0; if( (q = im_getnextoption( &p )) ) { shrink = atoi( q ); @@ -84,13 +86,9 @@ jpeg2vips( const char *name, IMAGE *out, gboolean header_only ) if( im_isprefix( "fail", q ) ) fail_on_warn = TRUE; } - - /* vips__jpeg_read_file() is always sequential. Parse the option, but - * don't use it. - */ if( (q = im_getnextoption( &p )) ) { if( im_isprefix( "seq", q ) ) - ; + seq = 1; } /* Don't use vips_jpegload() ... we call the jpeg func directly in @@ -106,6 +104,7 @@ jpeg2vips( const char *name, IMAGE *out, gboolean header_only ) */ if( !header_only && + !seq && out->dtype == VIPS_IMAGE_PARTIAL ) { if( vips__image_wio_output( out ) ) return( -1 ); diff --git a/libvips/deprecated/im_png2vips.c b/libvips/deprecated/im_png2vips.c index b169c154..0475b982 100644 --- a/libvips/deprecated/im_png2vips.c +++ b/libvips/deprecated/im_png2vips.c @@ -52,13 +52,15 @@ png2vips( const char *name, IMAGE *out, gboolean header_only ) char filename[FILENAME_MAX]; char mode[FILENAME_MAX]; char *p, *q; + int seq; im_filename_split( name, filename, mode ); + seq = 0; p = &mode[0]; if( (q = im_getnextoption( &p )) ) { if( im_isprefix( "seq", q ) ) - ; + seq = 1; } /* We need to be compatible with the pre-sequential mode @@ -72,6 +74,7 @@ png2vips( const char *name, IMAGE *out, gboolean header_only ) */ if( !header_only && + !seq && out->dtype == VIPS_IMAGE_PARTIAL ) { if( vips__image_wio_output( out ) ) return( -1 ); diff --git a/libvips/deprecated/im_tiff2vips.c b/libvips/deprecated/im_tiff2vips.c index f385c8fe..acb899cd 100644 --- a/libvips/deprecated/im_tiff2vips.c +++ b/libvips/deprecated/im_tiff2vips.c @@ -57,17 +57,19 @@ tiff2vips( const char *name, IMAGE *out, gboolean header_only ) char mode[FILENAME_MAX]; char *p, *q; int page; + int seq; im_filename_split( name, filename, mode ); page = 0; + seq = 0; p = &mode[0]; if( (q = im_getnextoption( &p )) ) { page = atoi( q ); } if( (q = im_getnextoption( &p )) ) { if( im_isprefix( "seq", q ) ) - ; + seq = 1; } /* We need to be compatible with the pre-sequential mode @@ -82,6 +84,7 @@ tiff2vips( const char *name, IMAGE *out, gboolean header_only ) */ if( !header_only && + !seq && !vips__istifftiled( filename ) && out->dtype == VIPS_IMAGE_PARTIAL ) { if( vips__image_wio_output( out ) ) diff --git a/libvips/deprecated/lazy.c b/libvips/deprecated/lazy.c index af2595a1..dcc86c2e 100644 --- a/libvips/deprecated/lazy.c +++ b/libvips/deprecated/lazy.c @@ -63,7 +63,7 @@ typedef struct { VipsImage *image; VipsFormatClass *format;/* Read in pixels with this */ char *filename; /* Get pixels from here */ - gboolean disc; /* Read via disc requested */ + gboolean sequential; /* Sequential read requested */ VipsImage *real; /* The real decompressed image */ } Lazy; @@ -80,7 +80,7 @@ lazy_free_cb( VipsImage *image, Lazy *lazy ) static Lazy * lazy_new( VipsImage *image, - VipsFormatClass *format, const char *filename, gboolean disc ) + VipsFormatClass *format, const char *filename, gboolean sequential ) { Lazy *lazy; @@ -89,7 +89,7 @@ lazy_new( VipsImage *image, lazy->image = image; lazy->format = format; lazy->filename = g_strdup( filename ); - lazy->disc = disc; + lazy->sequential = sequential; lazy->real = NULL; g_signal_connect( image, "close", G_CALLBACK( lazy_free_cb ), lazy ); @@ -132,13 +132,13 @@ lazy_real_image( Lazy *lazy ) VipsImage *real; /* We open via disc if: - * - 'disc' is set + * - 'sequential' is not set * - disc_threshold() has not been set to zero * - the format does not support lazy read * - the uncompressed image will be larger than disc_threshold() */ real = NULL; - if( lazy->disc && + if( !lazy->sequential && disc_threshold() && !(vips_format_get_flags( lazy->format, lazy->filename ) & VIPS_FORMAT_PARTIAL) && @@ -203,11 +203,11 @@ open_lazy_generate( VipsRegion *or, */ static int vips_image_open_lazy( VipsImage *image, - VipsFormatClass *format, const char *filename, gboolean disc ) + VipsFormatClass *format, const char *filename, gboolean sequential ) { Lazy *lazy; - lazy = lazy_new( image, format, filename, disc ); + lazy = lazy_new( image, format, filename, sequential ); /* Is there a ->header() function? We need to do a lazy load. */ @@ -273,7 +273,7 @@ vips_attach_save( VipsImage *image, int (*save_fn)(), const char *filename ) } IMAGE * -vips__deprecated_open_read( const char *filename ) +vips__deprecated_open_read( const char *filename, gboolean sequential ) { VipsFormatClass *format; @@ -293,7 +293,8 @@ vips__deprecated_open_read( const char *filename ) IMAGE *image; image = vips_image_new(); - if( vips_image_open_lazy( image, format, filename, TRUE ) ) { + if( vips_image_open_lazy( image, format, + filename, sequential ) ) { g_object_unref( image ); return( NULL ); } diff --git a/libvips/deprecated/vips7compat.c b/libvips/deprecated/vips7compat.c index 375f5fb6..274bc4b9 100644 --- a/libvips/deprecated/vips7compat.c +++ b/libvips/deprecated/vips7compat.c @@ -62,10 +62,16 @@ im_open( const char *filename, const char *mode ) /* We have to go via the old VipsFormat system so we can support the * "filename:option" syntax. + * + * Use "rs" to turn on seq mode. */ if( strcmp( mode, "r" ) == 0 || strcmp( mode, "rd" ) == 0 ) { - if( !(image = vips__deprecated_open_read( filename )) ) + if( !(image = vips__deprecated_open_read( filename, FALSE )) ) + return( NULL ); + } + else if( strcmp( mode, "rs" ) == 0 ) { + if( !(image = vips__deprecated_open_read( filename, TRUE )) ) return( NULL ); } else if( strcmp( mode, "w" ) == 0 ) { diff --git a/libvips/include/vips/internal.h b/libvips/include/vips/internal.h index 937a60fa..130481fe 100644 --- a/libvips/include/vips/internal.h +++ b/libvips/include/vips/internal.h @@ -297,7 +297,7 @@ void vips_foreign_operation_init( void ); guint64 vips__parse_size( const char *size_string ); -IMAGE *vips__deprecated_open_read( const char *filename ); +IMAGE *vips__deprecated_open_read( const char *filename, gboolean sequential ); IMAGE *vips__deprecated_open_write( const char *filename ); #ifdef __cplusplus From 7df7bb85bb3ea35bedfedfd5e53ffda66a15957a Mon Sep 17 00:00:00 2001 From: John Cupitt Date: Fri, 20 Jul 2012 13:34:05 +0100 Subject: [PATCH 07/11] add --vips-version cmdline arg print version of libvips that a program is running against --- ChangeLog | 1 + libvips/iofuncs/init.c | 20 ++++++++++++++++---- tools/vipsthumbnail.c | 27 ++++++++++++++++++--------- 3 files changed, 35 insertions(+), 13 deletions(-) diff --git a/ChangeLog b/ChangeLog index ceedaa23..cee2872a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,6 @@ 20/7/12 started 7.30.0 - support "rs" mode in vips7 +- add --vips-version cmdline arg 19/3/12 started 7.29.0 - sanity-check PNG read geometry diff --git a/libvips/iofuncs/init.c b/libvips/iofuncs/init.c index e4961237..0a9425a2 100644 --- a/libvips/iofuncs/init.c +++ b/libvips/iofuncs/init.c @@ -365,20 +365,29 @@ vips__ngettext( const char *msgid, const char *plural, unsigned long int n ) return( dngettext( GETTEXT_PACKAGE, msgid, plural, n ) ); } +static gboolean +vips_lib_version_cb( const gchar *option_name, const gchar *value, + gpointer data, GError **error ) +{ + printf( "libvips %s\n", VIPS_VERSION_STRING ); + vips_shutdown(); + exit( 0 ); +} + static GOptionEntry option_entries[] = { { "vips-concurrency", 'c', 0, G_OPTION_ARG_INT, &vips__concurrency, N_( "evaluate with N concurrent threads" ), "N" }, - { "vips-tile-width", 'w', 0, + { "vips-tile-width", 'w', G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_INT, &vips__tile_width, N_( "set tile width to N (DEBUG)" ), "N" }, - { "vips-tile-height", 'h', 0, + { "vips-tile-height", 'h', G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_INT, &vips__tile_height, N_( "set tile height to N (DEBUG)" ), "N" }, - { "vips-thinstrip-height", 't', 0, + { "vips-thinstrip-height", 't', G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_INT, &vips__thinstrip_height, N_( "set thinstrip height to N (DEBUG)" ), "N" }, - { "vips-fatstrip-height", 'f', 0, + { "vips-fatstrip-height", 'f', G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_INT, &vips__fatstrip_height, N_( "set fatstrip height to N (DEBUG)" ), "N" }, { "vips-progress", 'p', 0, @@ -408,6 +417,9 @@ static GOptionEntry option_entries[] = { { "vips-cache-dump", 'r', 0, G_OPTION_ARG_NONE, &vips__cache_dump, N_( "dump operation cache on exit" ), NULL }, + { "vips-version", 'v', G_OPTION_FLAG_NO_ARG, + G_OPTION_ARG_CALLBACK, (gpointer) &vips_lib_version_cb, + N_( "print libvips version" ), NULL }, { NULL } }; diff --git a/tools/vipsthumbnail.c b/tools/vipsthumbnail.c index b7f04c6a..67f034c4 100644 --- a/tools/vipsthumbnail.c +++ b/tools/vipsthumbnail.c @@ -57,28 +57,37 @@ static gboolean nodelete_profile = FALSE; static gboolean verbose = FALSE; static GOptionEntry options[] = { - { "size", 's', 0, G_OPTION_ARG_INT, &thumbnail_size, + { "size", 's', 0, + G_OPTION_ARG_INT, &thumbnail_size, N_( "set thumbnail size to SIZE" ), N_( "SIZE" ) }, - { "output", 'o', 0, G_OPTION_ARG_STRING, &output_format, + { "output", 'o', 0, + G_OPTION_ARG_STRING, &output_format, N_( "set output to FORMAT" ), N_( "FORMAT" ) }, - { "interpolator", 'p', 0, G_OPTION_ARG_STRING, &interpolator, + { "interpolator", 'p', 0, + G_OPTION_ARG_STRING, &interpolator, N_( "resample with INTERPOLATOR" ), N_( "INTERPOLATOR" ) }, - { "nosharpen", 'n', 0, G_OPTION_ARG_NONE, &nosharpen, + { "nosharpen", 'n', 0, + G_OPTION_ARG_NONE, &nosharpen, N_( "don't sharpen thumbnail" ), NULL }, - { "eprofile", 'e', 0, G_OPTION_ARG_STRING, &export_profile, + { "eprofile", 'e', 0, + G_OPTION_ARG_STRING, &export_profile, N_( "export with PROFILE" ), N_( "PROFILE" ) }, - { "iprofile", 'i', 0, G_OPTION_ARG_STRING, &import_profile, + { "iprofile", 'i', 0, + G_OPTION_ARG_STRING, &import_profile, N_( "import untagged images with PROFILE" ), N_( "PROFILE" ) }, - { "delete", 'd', 0, G_OPTION_ARG_NONE, &delete_profile, + { "delete", 'd', 0, + G_OPTION_ARG_NONE, &delete_profile, N_( "delete profile from exported image" ), NULL }, - { "nodelete", 'l', 0, G_OPTION_ARG_NONE, &nodelete_profile, + { "nodelete", 'l', G_OPTION_FLAG_HIDDEN, + G_OPTION_ARG_NONE, &nodelete_profile, N_( "(deprecated, does nothing)" ), NULL }, - { "verbose", 'v', 0, G_OPTION_ARG_NONE, &verbose, + { "verbose", 'v', 0, + G_OPTION_ARG_NONE, &verbose, N_( "verbose output" ), NULL }, { NULL } }; From 7ef115161ddfed66d1aaf2f88ef8bd927d5bf6c9 Mon Sep 17 00:00:00 2001 From: John Cupitt Date: Fri, 20 Jul 2012 15:04:49 +0100 Subject: [PATCH 08/11] sync finished ruby-vips testing --- TODO | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/TODO b/TODO index 467bb106..e4e24aca 100644 --- a/TODO +++ b/TODO @@ -1,13 +1,3 @@ -- try: - - vipsthumbnail wtc.tif --verbose --vips-progress --vips-leak - - get no progress info - - does not report static interpolators on exit, shouldn't leak check do - this? - - blocking bugs ============= From bc13abe3da9e088e17ca9134b1202e228fdd4abc Mon Sep 17 00:00:00 2001 From: John Cupitt Date: Fri, 20 Jul 2012 15:52:45 +0100 Subject: [PATCH 09/11] update the manual version numbers --- doc/src/vipsmanual.tex | 6 +- po/vips7.pot | 188 +++++++++++++++++++++-------------------- 2 files changed, 99 insertions(+), 95 deletions(-) diff --git a/doc/src/vipsmanual.tex b/doc/src/vipsmanual.tex index be0e1ce0..95f8f9a2 100644 --- a/doc/src/vipsmanual.tex +++ b/doc/src/vipsmanual.tex @@ -16,7 +16,7 @@ \fancyhead[LE,RO]{\leftmark} % left-even, right-odd \fancyhead[RE,LO]{VIPS Manual} % right-even, left-odd \fancyfoot[LE,RO]{\thepage} % left-even, right-odd -\fancyfoot[RE,LO]{February 2012} +\fancyfoot[RE,LO]{July 2012} \begin{document} @@ -27,14 +27,14 @@ \begin{center} \huge VIPS Manual\\ -\large Version 7.28\\ +\large Version 7.30\\ \vspace{0.5in} \large John Cupitt, Kirk Martinez\\ \end{center} -VIPS is currently (v. 7.28, February 2012) in an API transition. The API as +VIPS is currently (v. 7.30, July 2012) in an API transition. The API as documented in 7.24 is still complete and supported and is the one you should use. The 8.0 API is not yet done and may still change before completion. diff --git a/po/vips7.pot b/po/vips7.pot index 49b98776..1af3842a 100644 --- a/po/vips7.pot +++ b/po/vips7.pot @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" "product=glib&keywords=I18N+L10N&component=general\n" -"POT-Creation-Date: 2012-07-13 14:50+0100\n" +"POT-Creation-Date: 2012-07-20 15:34+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -352,11 +352,11 @@ msgstr "" msgid "Height of extract area" msgstr "" -#: ../libvips/arithmetic/math2.c:196 +#: ../libvips/arithmetic/math2.c:198 msgid "pow( left, right)" msgstr "" -#: ../libvips/arithmetic/math2.c:204 ../libvips/arithmetic/math2.c:401 +#: ../libvips/arithmetic/math2.c:206 ../libvips/arithmetic/math2.c:403 #: ../libvips/arithmetic/complex.c:222 ../libvips/arithmetic/complex.c:476 #: ../libvips/arithmetic/math.c:205 ../libvips/arithmetic/relational.c:227 #: ../libvips/arithmetic/relational.c:560 ../libvips/arithmetic/boolean.c:217 @@ -364,12 +364,12 @@ msgstr "" msgid "Operation" msgstr "" -#: ../libvips/arithmetic/math2.c:205 ../libvips/arithmetic/math2.c:402 +#: ../libvips/arithmetic/math2.c:207 ../libvips/arithmetic/math2.c:404 #: ../libvips/arithmetic/math.c:206 msgid "math to perform" msgstr "" -#: ../libvips/arithmetic/math2.c:393 +#: ../libvips/arithmetic/math2.c:395 msgid "pow( @in, @c )" msgstr "" @@ -397,7 +397,7 @@ msgstr "" #: ../libvips/conversion/rot.c:355 ../libvips/conversion/replicate.c:196 #: ../libvips/conversion/tilecache.c:446 ../libvips/conversion/embed.c:524 #: ../libvips/conversion/cache.c:106 ../libvips/conversion/recomb.c:203 -#: ../libvips/conversion/sequential.c:153 ../libvips/foreign/foreign.c:1438 +#: ../libvips/conversion/sequential.c:168 ../libvips/foreign/foreign.c:1442 #: ../libvips/resample/resample.c:89 msgid "Input" msgstr "" @@ -466,7 +466,7 @@ msgstr "" msgid "Vertical position of minimum" msgstr "" -#: ../libvips/arithmetic/im_point_bilinear.c:74 +#: ../libvips/arithmetic/im_point_bilinear.c:75 msgid "coords outside image" msgstr "" @@ -569,7 +569,7 @@ msgstr "" #: ../libvips/conversion/copy.c:322 ../libvips/conversion/rot.c:356 #: ../libvips/conversion/replicate.c:197 ../libvips/conversion/tilecache.c:447 #: ../libvips/conversion/embed.c:525 ../libvips/conversion/cache.c:107 -#: ../libvips/conversion/sequential.c:154 +#: ../libvips/conversion/sequential.c:169 msgid "Input image" msgstr "" @@ -798,7 +798,7 @@ msgid "flatten alpha out of an image" msgstr "" #: ../libvips/conversion/flatten.c:381 ../libvips/conversion/join.c:250 -#: ../libvips/conversion/insert.c:390 +#: ../libvips/conversion/insert.c:392 msgid "Background" msgstr "" @@ -829,7 +829,7 @@ msgstr "" msgid "bad extract area" msgstr "" -#: ../libvips/conversion/extract.c:190 +#: ../libvips/conversion/extract.c:191 msgid "extract an area from an image" msgstr "" @@ -1023,11 +1023,11 @@ msgstr "" msgid "Join left-right or up-down" msgstr "" -#: ../libvips/conversion/join.c:236 ../libvips/conversion/insert.c:383 +#: ../libvips/conversion/join.c:236 ../libvips/conversion/insert.c:385 msgid "Expand" msgstr "" -#: ../libvips/conversion/join.c:237 ../libvips/conversion/insert.c:384 +#: ../libvips/conversion/join.c:237 ../libvips/conversion/insert.c:386 msgid "Expand output to hold all of both inputs" msgstr "" @@ -1039,7 +1039,7 @@ msgstr "" msgid "Pixels between images" msgstr "" -#: ../libvips/conversion/join.c:251 ../libvips/conversion/insert.c:391 +#: ../libvips/conversion/join.c:251 ../libvips/conversion/insert.c:393 msgid "Colour for new pixels" msgstr "" @@ -1068,39 +1068,39 @@ msgstr "" msgid "vectors not same length" msgstr "" -#: ../libvips/conversion/insert.c:349 +#: ../libvips/conversion/insert.c:353 msgid "insert an image" msgstr "" -#: ../libvips/conversion/insert.c:357 +#: ../libvips/conversion/insert.c:359 msgid "Main" msgstr "" -#: ../libvips/conversion/insert.c:358 +#: ../libvips/conversion/insert.c:360 msgid "Main input image" msgstr "" -#: ../libvips/conversion/insert.c:363 +#: ../libvips/conversion/insert.c:365 msgid "Sub-image" msgstr "" -#: ../libvips/conversion/insert.c:364 +#: ../libvips/conversion/insert.c:366 msgid "Sub-image to insert into main image" msgstr "" -#: ../libvips/conversion/insert.c:369 +#: ../libvips/conversion/insert.c:371 msgid "X" msgstr "" -#: ../libvips/conversion/insert.c:370 +#: ../libvips/conversion/insert.c:372 msgid "Left edge of sub in main" msgstr "" -#: ../libvips/conversion/insert.c:376 +#: ../libvips/conversion/insert.c:378 msgid "Y" msgstr "" -#: ../libvips/conversion/insert.c:377 +#: ../libvips/conversion/insert.c:379 msgid "Top edge of sub in main" msgstr "" @@ -1225,13 +1225,13 @@ msgstr "" msgid "matrix of coefficients" msgstr "" -#: ../libvips/conversion/sequential.c:86 +#: ../libvips/conversion/sequential.c:83 #, c-format msgid "" "non-sequential read --- at position %d in file, but position %d requested" msgstr "" -#: ../libvips/conversion/sequential.c:149 +#: ../libvips/conversion/sequential.c:164 msgid "check sequential access" msgstr "" @@ -1289,7 +1289,7 @@ msgstr "" #: ../libvips/foreign/jpegload.c:245 ../libvips/foreign/rawload.c:115 #: ../libvips/foreign/matload.c:128 ../libvips/foreign/fitssave.c:128 #: ../libvips/foreign/radsave.c:119 ../libvips/foreign/vipssave.c:125 -#: ../libvips/foreign/pngsave.c:166 ../libvips/iofuncs/image.c:945 +#: ../libvips/foreign/pngsave.c:168 ../libvips/iofuncs/image.c:945 msgid "Filename" msgstr "" @@ -1297,7 +1297,7 @@ msgstr "" #: ../libvips/foreign/tiffsave.c:172 ../libvips/foreign/jpegsave.c:194 #: ../libvips/foreign/csvsave.c:122 ../libvips/foreign/fitssave.c:129 #: ../libvips/foreign/radsave.c:120 ../libvips/foreign/vipssave.c:126 -#: ../libvips/foreign/pngsave.c:167 +#: ../libvips/foreign/pngsave.c:169 msgid "Filename to save to" msgstr "" @@ -1447,7 +1447,7 @@ msgstr "" msgid "save image to tiff file" msgstr "" -#: ../libvips/foreign/tiffsave.c:178 ../libvips/foreign/pngsave.c:103 +#: ../libvips/foreign/tiffsave.c:178 ../libvips/foreign/pngsave.c:105 msgid "Compression" msgstr "" @@ -1569,11 +1569,11 @@ msgid "save image to jpeg buffer" msgstr "" #: ../libvips/foreign/jpegsave.c:260 ../libvips/foreign/jpegload.c:315 -#: ../libvips/foreign/pngsave.c:228 +#: ../libvips/foreign/pngsave.c:230 msgid "Buffer" msgstr "" -#: ../libvips/foreign/jpegsave.c:261 ../libvips/foreign/pngsave.c:229 +#: ../libvips/foreign/jpegsave.c:261 ../libvips/foreign/pngsave.c:231 msgid "Buffer to save to" msgstr "" @@ -1853,8 +1853,8 @@ msgstr "" msgid "end of file while skipping start" msgstr "" -#: ../libvips/foreign/csv.c:246 ../libvips/iofuncs/util.c:1072 -#: ../libvips/iofuncs/util.c:1078 +#: ../libvips/foreign/csv.c:246 ../libvips/iofuncs/util.c:1084 +#: ../libvips/iofuncs/util.c:1090 msgid "unable to seek" msgstr "" @@ -1954,27 +1954,27 @@ msgstr "" msgid "reading associated image: %s" msgstr "" -#: ../libvips/foreign/pngsave.c:95 +#: ../libvips/foreign/pngsave.c:97 msgid "save png" msgstr "" -#: ../libvips/foreign/pngsave.c:104 +#: ../libvips/foreign/pngsave.c:106 msgid "Compression factor" msgstr "" -#: ../libvips/foreign/pngsave.c:110 +#: ../libvips/foreign/pngsave.c:112 msgid "Interlace" msgstr "" -#: ../libvips/foreign/pngsave.c:111 +#: ../libvips/foreign/pngsave.c:113 msgid "Interlace image" msgstr "" -#: ../libvips/foreign/pngsave.c:162 +#: ../libvips/foreign/pngsave.c:164 msgid "save image to png file" msgstr "" -#: ../libvips/foreign/pngsave.c:224 +#: ../libvips/foreign/pngsave.c:226 msgid "save image to png buffer" msgstr "" @@ -2074,7 +2074,7 @@ msgstr "" msgid "file savers" msgstr "" -#: ../libvips/foreign/foreign.c:1439 +#: ../libvips/foreign/foreign.c:1443 msgid "Image to save" msgstr "" @@ -2315,7 +2315,7 @@ msgstr "" msgid "unable to create thread" msgstr "" -#: ../libvips/iofuncs/sinkdisc.c:262 ../libvips/iofuncs/util.c:656 +#: ../libvips/iofuncs/sinkdisc.c:262 ../libvips/iofuncs/util.c:668 msgid "write failed" msgstr "" @@ -2387,7 +2387,7 @@ msgstr "" msgid "unknown band format %d" msgstr "" -#: ../libvips/iofuncs/header.c:611 ../libvips/iofuncs/generate.c:377 +#: ../libvips/iofuncs/header.c:611 ../libvips/iofuncs/generate.c:376 msgid "too many images" msgstr "" @@ -2500,7 +2500,7 @@ msgstr "" msgid "bad image descriptor" msgstr "" -#: ../libvips/iofuncs/image.c:1959 ../libvips/iofuncs/generate.c:716 +#: ../libvips/iofuncs/image.c:1959 ../libvips/iofuncs/generate.c:715 #, c-format msgid "unable to output to a %s image" msgstr "" @@ -2510,25 +2510,25 @@ msgstr "" msgid "auto-rewind for %s failed" msgstr "" -#: ../libvips/iofuncs/image.c:2079 ../libvips/iofuncs/image.c:2274 -#: ../libvips/iofuncs/image.c:2291 +#: ../libvips/iofuncs/image.c:2079 ../libvips/iofuncs/image.c:2275 +#: ../libvips/iofuncs/image.c:2292 msgid "no image data" msgstr "" -#: ../libvips/iofuncs/image.c:2147 ../libvips/iofuncs/image.c:2314 +#: ../libvips/iofuncs/image.c:2147 ../libvips/iofuncs/image.c:2315 msgid "image not readable" msgstr "" -#: ../libvips/iofuncs/image.c:2168 ../libvips/iofuncs/image.c:2344 -#: ../libvips/iofuncs/image.c:2353 +#: ../libvips/iofuncs/image.c:2168 ../libvips/iofuncs/image.c:2345 +#: ../libvips/iofuncs/image.c:2354 msgid "image already written" msgstr "" -#: ../libvips/iofuncs/image.c:2192 ../libvips/iofuncs/image.c:2365 +#: ../libvips/iofuncs/image.c:2192 ../libvips/iofuncs/image.c:2366 msgid "image not writeable" msgstr "" -#: ../libvips/iofuncs/image.c:2238 +#: ../libvips/iofuncs/image.c:2239 msgid "bad file type" msgstr "" @@ -2727,58 +2727,58 @@ msgstr "" msgid "mask must be 1D" msgstr "" -#: ../libvips/iofuncs/util.c:639 +#: ../libvips/iofuncs/util.c:651 msgid "unable to get file stats" msgstr "" -#: ../libvips/iofuncs/util.c:720 +#: ../libvips/iofuncs/util.c:732 #, c-format msgid "unable to open file \"%s\" for reading" msgstr "" -#: ../libvips/iofuncs/util.c:742 +#: ../libvips/iofuncs/util.c:754 #, c-format msgid "unable to open file \"%s\" for writing" msgstr "" -#: ../libvips/iofuncs/util.c:767 +#: ../libvips/iofuncs/util.c:779 #, c-format msgid "\"%s\" too long" msgstr "" -#: ../libvips/iofuncs/util.c:784 +#: ../libvips/iofuncs/util.c:796 msgid "out of memory" msgstr "" -#: ../libvips/iofuncs/util.c:810 +#: ../libvips/iofuncs/util.c:822 #, c-format msgid "error reading from file \"%s\"" msgstr "" -#: ../libvips/iofuncs/util.c:857 +#: ../libvips/iofuncs/util.c:869 #, c-format msgid "write error (%zd out of %zd blocks written) ... disc full?" msgstr "" -#: ../libvips/iofuncs/util.c:1106 ../libvips/iofuncs/util.c:1113 +#: ../libvips/iofuncs/util.c:1118 ../libvips/iofuncs/util.c:1125 msgid "unable to truncate" msgstr "" -#: ../libvips/iofuncs/util.c:1204 +#: ../libvips/iofuncs/util.c:1216 #, c-format msgid "unable to create directory \"%s\", %s" msgstr "" -#: ../libvips/iofuncs/util.c:1338 +#: ../libvips/iofuncs/util.c:1350 msgid "unexpected end of string" msgstr "" -#: ../libvips/iofuncs/util.c:1356 +#: ../libvips/iofuncs/util.c:1368 #, c-format msgid "expected %s, saw %s" msgstr "" -#: ../libvips/iofuncs/util.c:1526 +#: ../libvips/iofuncs/util.c:1538 #, c-format msgid "unable to make temporary file %s" msgstr "" @@ -2823,11 +2823,11 @@ msgstr "" msgid "too much data" msgstr "" -#: ../libvips/iofuncs/generate.c:640 +#: ../libvips/iofuncs/generate.c:639 msgid "demand hint not set" msgstr "" -#: ../libvips/iofuncs/generate.c:659 ../libvips/iofuncs/generate.c:684 +#: ../libvips/iofuncs/generate.c:658 ../libvips/iofuncs/generate.c:683 msgid "generate() called twice" msgstr "" @@ -2883,67 +2883,71 @@ msgstr "" msgid "unable to mmap \"%s\" to same address" msgstr "" -#: ../libvips/iofuncs/init.c:371 +#: ../libvips/iofuncs/init.c:380 msgid "evaluate with N concurrent threads" msgstr "" -#: ../libvips/iofuncs/init.c:374 +#: ../libvips/iofuncs/init.c:383 msgid "set tile width to N (DEBUG)" msgstr "" -#: ../libvips/iofuncs/init.c:377 +#: ../libvips/iofuncs/init.c:386 msgid "set tile height to N (DEBUG)" msgstr "" -#: ../libvips/iofuncs/init.c:380 +#: ../libvips/iofuncs/init.c:389 msgid "set thinstrip height to N (DEBUG)" msgstr "" -#: ../libvips/iofuncs/init.c:383 +#: ../libvips/iofuncs/init.c:392 msgid "set fatstrip height to N (DEBUG)" msgstr "" -#: ../libvips/iofuncs/init.c:386 +#: ../libvips/iofuncs/init.c:395 msgid "show progress feedback" msgstr "" -#: ../libvips/iofuncs/init.c:389 +#: ../libvips/iofuncs/init.c:398 msgid "leak-check on exit" msgstr "" -#: ../libvips/iofuncs/init.c:392 +#: ../libvips/iofuncs/init.c:401 msgid "images larger than N are decompressed to disc" msgstr "" -#: ../libvips/iofuncs/init.c:395 +#: ../libvips/iofuncs/init.c:404 msgid "disable vectorised versions of operations" msgstr "" -#: ../libvips/iofuncs/init.c:398 +#: ../libvips/iofuncs/init.c:407 msgid "cache at most N operations" msgstr "" -#: ../libvips/iofuncs/init.c:401 +#: ../libvips/iofuncs/init.c:410 msgid "cache at most N bytes in memory" msgstr "" -#: ../libvips/iofuncs/init.c:404 +#: ../libvips/iofuncs/init.c:413 msgid "allow at most N open files" msgstr "" -#: ../libvips/iofuncs/init.c:407 +#: ../libvips/iofuncs/init.c:416 msgid "trace operation cache" msgstr "" -#: ../libvips/iofuncs/init.c:410 +#: ../libvips/iofuncs/init.c:419 msgid "dump operation cache on exit" msgstr "" -#: ../libvips/iofuncs/init.c:433 +#: ../libvips/iofuncs/init.c:422 +msgid "print libvips version" +msgstr "" + +#: ../libvips/iofuncs/init.c:445 msgid "VIPS Options" msgstr "" -#: ../libvips/iofuncs/init.c:433 +#: ../libvips/iofuncs/init.c:445 msgid "Show VIPS options" msgstr "" @@ -3505,59 +3509,59 @@ msgstr "" msgid "unknown action \"%s\"" msgstr "" -#: ../tools/vipsthumbnail.c:61 +#: ../tools/vipsthumbnail.c:62 msgid "set thumbnail size to SIZE" msgstr "" -#: ../tools/vipsthumbnail.c:62 +#: ../tools/vipsthumbnail.c:63 msgid "SIZE" msgstr "" -#: ../tools/vipsthumbnail.c:64 +#: ../tools/vipsthumbnail.c:66 msgid "set output to FORMAT" msgstr "" -#: ../tools/vipsthumbnail.c:65 +#: ../tools/vipsthumbnail.c:67 msgid "FORMAT" msgstr "" -#: ../tools/vipsthumbnail.c:67 +#: ../tools/vipsthumbnail.c:70 msgid "resample with INTERPOLATOR" msgstr "" -#: ../tools/vipsthumbnail.c:68 +#: ../tools/vipsthumbnail.c:71 msgid "INTERPOLATOR" msgstr "" -#: ../tools/vipsthumbnail.c:70 +#: ../tools/vipsthumbnail.c:74 msgid "don't sharpen thumbnail" msgstr "" -#: ../tools/vipsthumbnail.c:72 +#: ../tools/vipsthumbnail.c:77 msgid "export with PROFILE" msgstr "" -#: ../tools/vipsthumbnail.c:73 ../tools/vipsthumbnail.c:76 +#: ../tools/vipsthumbnail.c:78 ../tools/vipsthumbnail.c:82 msgid "PROFILE" msgstr "" -#: ../tools/vipsthumbnail.c:75 +#: ../tools/vipsthumbnail.c:81 msgid "import untagged images with PROFILE" msgstr "" -#: ../tools/vipsthumbnail.c:78 +#: ../tools/vipsthumbnail.c:85 msgid "delete profile from exported image" msgstr "" -#: ../tools/vipsthumbnail.c:80 +#: ../tools/vipsthumbnail.c:88 msgid "(deprecated, does nothing)" msgstr "" -#: ../tools/vipsthumbnail.c:82 +#: ../tools/vipsthumbnail.c:91 msgid "verbose output" msgstr "" -#: ../tools/vipsthumbnail.c:423 +#: ../tools/vipsthumbnail.c:432 msgid "- thumbnail generator" msgstr "" From 133ee84794f5d72507b6eb20c87d48d30ab84d58 Mon Sep 17 00:00:00 2001 From: John Cupitt Date: Fri, 20 Jul 2012 17:18:49 +0100 Subject: [PATCH 10/11] fix --without-magick etc. the vips7 compat readers like im_exr2vips() were not guarded with ifdefs in case their read library was missing --- ChangeLog | 1 + libvips/deprecated/im_exr2vips.c | 6 ++++++ libvips/deprecated/im_jpeg2vips.c | 6 ++++++ libvips/deprecated/im_magick2vips.c | 7 +++++++ libvips/deprecated/im_png2vips.c | 6 ++++++ libvips/deprecated/im_tiff2vips.c | 6 ++++++ 6 files changed, 32 insertions(+) diff --git a/ChangeLog b/ChangeLog index cee2872a..b34caa49 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,7 @@ 20/7/12 started 7.30.0 - support "rs" mode in vips7 - add --vips-version cmdline arg +- fix --without-tiff / exr / jpeg / png / magick 19/3/12 started 7.29.0 - sanity-check PNG read geometry diff --git a/libvips/deprecated/im_exr2vips.c b/libvips/deprecated/im_exr2vips.c index 639e9c26..2498b535 100644 --- a/libvips/deprecated/im_exr2vips.c +++ b/libvips/deprecated/im_exr2vips.c @@ -53,7 +53,13 @@ int im_exr2vips( const char *filename, IMAGE *out ) { +#ifdef HAVE_OPENEXR return( vips__openexr_read( filename, out ) ); +#else + vips_error( "im_exr2vips", _( "no OpenEXR support in your libvips" ) ); + + return( -1 ); +#endif /*HAVE_OPENEXR*/ } static const char *exr_suffs[] = { ".exr", NULL }; diff --git a/libvips/deprecated/im_jpeg2vips.c b/libvips/deprecated/im_jpeg2vips.c index d4c677eb..e90b6ee8 100644 --- a/libvips/deprecated/im_jpeg2vips.c +++ b/libvips/deprecated/im_jpeg2vips.c @@ -110,9 +110,15 @@ jpeg2vips( const char *name, IMAGE *out, gboolean header_only ) return( -1 ); } +#ifdef HAVE_JPEG if( vips__jpeg_read_file( filename, out, header_only, shrink, fail_on_warn ) ) return( -1 ); +#else + vips_error( "im_jpeg2vips", _( "no JPEG support in your libvips" ) ); + + return( -1 ); +#endif /*HAVE_JPEG*/ return( 0 ); } diff --git a/libvips/deprecated/im_magick2vips.c b/libvips/deprecated/im_magick2vips.c index 2cedd961..9595a83b 100644 --- a/libvips/deprecated/im_magick2vips.c +++ b/libvips/deprecated/im_magick2vips.c @@ -46,7 +46,14 @@ int im_magick2vips( const char *filename, IMAGE *out ) { +#ifdef HAVE_MAGICK return( vips__magick_read( filename, out ) ); +#else + vips_error( "im_magick2vips", + _( "no libMagick support in your libvips" ) ); + + return( -1 ); +#endif /*HAVE_MAGICK*/ } static int diff --git a/libvips/deprecated/im_png2vips.c b/libvips/deprecated/im_png2vips.c index 0475b982..a389361d 100644 --- a/libvips/deprecated/im_png2vips.c +++ b/libvips/deprecated/im_png2vips.c @@ -80,6 +80,7 @@ png2vips( const char *name, IMAGE *out, gboolean header_only ) return( -1 ); } +#ifdef HAVE_PNG if( header_only ) { if( vips__png_header( filename, out ) ) return( -1 ); @@ -88,6 +89,11 @@ png2vips( const char *name, IMAGE *out, gboolean header_only ) if( vips__png_read( filename, out ) ) return( -1 ); } +#else + vips_error( "im_png2vips", _( "no PNG support in your libvips" ) ); + + return( -1 ); +#endif /*HAVE_PNG*/ return( 0 ); } diff --git a/libvips/deprecated/im_tiff2vips.c b/libvips/deprecated/im_tiff2vips.c index acb899cd..f67f8a3a 100644 --- a/libvips/deprecated/im_tiff2vips.c +++ b/libvips/deprecated/im_tiff2vips.c @@ -91,6 +91,7 @@ tiff2vips( const char *name, IMAGE *out, gboolean header_only ) return( -1 ); } +#ifdef HAVE_TIFF if( header_only ) { if( vips__tiff_read_header( filename, out, page ) ) return( -1 ); @@ -99,6 +100,11 @@ tiff2vips( const char *name, IMAGE *out, gboolean header_only ) if( vips__tiff_read( filename, out, page ) ) return( -1 ); } +#else + vips_error( "im_tiff2vips", _( "no TIFF support in your libvips" ) ); + + return( -1 ); +#endif /*HAVE_TIFF*/ return( 0 ); } From 3033fea933b0d81ad8509187d1de7c7eb99cfee9 Mon Sep 17 00:00:00 2001 From: John Cupitt Date: Sat, 21 Jul 2012 17:01:17 +0100 Subject: [PATCH 11/11] add --vips-fatal flag --vips-fatal causes an abort() on the first warning or error, handy for debugging --- ChangeLog | 1 + libvips/include/vips/internal.h | 4 ++++ libvips/iofuncs/error.c | 11 ++++++++++- libvips/iofuncs/init.c | 25 +++++++++++++++++++++++++ 4 files changed, 40 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index b34caa49..41498623 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,7 @@ - support "rs" mode in vips7 - add --vips-version cmdline arg - fix --without-tiff / exr / jpeg / png / magick +- add --vips-fatal flag 19/3/12 started 7.29.0 - sanity-check PNG read geometry diff --git a/libvips/include/vips/internal.h b/libvips/include/vips/internal.h index 130481fe..00971e86 100644 --- a/libvips/include/vips/internal.h +++ b/libvips/include/vips/internal.h @@ -66,6 +66,10 @@ extern int vips__thinstrip_height; */ extern int vips__concurrency; +/* abort() on any error. + */ +extern int vips__fatal; + /* Give progress feedback. */ extern int vips__progress; diff --git a/libvips/iofuncs/error.c b/libvips/iofuncs/error.c index b6ee8530..097708f4 100644 --- a/libvips/iofuncs/error.c +++ b/libvips/iofuncs/error.c @@ -155,6 +155,9 @@ vips_verror( const char *domain, const char *fmt, va_list ap ) g_mutex_unlock( vips__global_lock ); VIPS_DEBUG_MSG( "vips_verror: %s\n", fmt ); + + if( vips__fatal ) + vips_error_exit( "vips__fatal" ); } /** @@ -363,6 +366,9 @@ vips_vwarn( const char *domain, const char *fmt, va_list ap ) (void) fprintf( stderr, "\n" ); g_mutex_unlock( vips__global_lock ); } + + if( vips__fatal ) + vips_error_exit( "vips__fatal" ); } /** @@ -421,7 +427,10 @@ vips_error_exit( const char *fmt, ... ) vips_shutdown(); - exit( 1 ); + if( vips__fatal ) + abort(); + else + exit( 1 ); } /** diff --git a/libvips/iofuncs/init.c b/libvips/iofuncs/init.c index 0a9425a2..9655a35d 100644 --- a/libvips/iofuncs/init.c +++ b/libvips/iofuncs/init.c @@ -80,6 +80,10 @@ #include #include +/* abort() on the first warning or error. + */ +int vips__fatal = 0; + /* Use in various small places where we need a mutex and it's not worth * making a private one. */ @@ -374,7 +378,28 @@ vips_lib_version_cb( const gchar *option_name, const gchar *value, exit( 0 ); } +static gboolean +vips_set_fatal_cb( const gchar *option_name, const gchar *value, + gpointer data, GError **error ) +{ + vips__fatal = 1; + + /* Set masks for debugging ... stop on any problem. + */ + g_log_set_always_fatal( + G_LOG_FLAG_RECURSION | + G_LOG_FLAG_FATAL | + G_LOG_LEVEL_ERROR | + G_LOG_LEVEL_CRITICAL | + G_LOG_LEVEL_WARNING ); + + return( TRUE ); +} + static GOptionEntry option_entries[] = { + { "vips-fatal", 'f', G_OPTION_FLAG_HIDDEN | G_OPTION_FLAG_NO_ARG, + G_OPTION_ARG_CALLBACK, (gpointer) &vips_set_fatal_cb, + N_( "abort on first error or warning" ), NULL }, { "vips-concurrency", 'c', 0, G_OPTION_ARG_INT, &vips__concurrency, N_( "evaluate with N concurrent threads" ), "N" },