diff --git a/ChangeLog b/ChangeLog index f5665739..780486f0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +20/7/12 started 7.30.0 +- 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 - nearest-neighbor interpolation rounds coordinates to nearest instead of @@ -26,6 +32,10 @@ - png save compression range was wrong - more/moreeq was wrong - vips7 ppm save with options was broken +<<<<<<< HEAD +======= +- don't cache write operations +>>>>>>> origin/master 18/6/12 started 7.28.9 - slightly more memory debugging output 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/configure.in b/configure.in index 5f75bc95..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 @@ -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/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/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_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 82fe29d5..e90b6ee8 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,14 +104,21 @@ 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 ); } +#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 ad38fa8b..a389361d 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,19 +74,26 @@ 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 ); } +#ifdef HAVE_PNG if( header_only ) { - if( vips__png_read( filename, out ) ) - return( -1 ); - } - else { if( vips__png_header( filename, out ) ) return( -1 ); } + else { + 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 f385c8fe..f67f8a3a 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,12 +84,14 @@ 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 ) ) return( -1 ); } +#ifdef HAVE_TIFF if( header_only ) { if( vips__tiff_read_header( filename, out, page ) ) return( -1 ); @@ -96,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 ); } 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/foreign/foreign.c b/libvips/foreign/foreign.c index 70a00150..36e0bba7 100644 --- a/libvips/foreign/foreign.c +++ b/libvips/foreign/foreign.c @@ -890,7 +890,7 @@ vips_foreign_load_build( VipsObject *object ) } static VipsOperationFlags -vips_foreign_load_real_get_flags( VipsOperation *operation ) +vips_foreign_load_operation_get_flags( VipsOperation *operation ) { VipsForeignLoad *load = VIPS_FOREIGN_LOAD( operation ); VipsOperationFlags flags; @@ -920,7 +920,7 @@ vips_foreign_load_class_init( VipsForeignLoadClass *class ) object_class->nickname = "fileload"; object_class->description = _( "file loaders" ); - operation_class->get_flags = vips_foreign_load_real_get_flags; + operation_class->get_flags = vips_foreign_load_operation_get_flags; VIPS_ARG_IMAGE( class, "out", 2, _( "Output" ), @@ -1428,6 +1428,10 @@ vips_foreign_save_class_init( VipsForeignSaveClass *class ) */ operation_class->flags |= VIPS_OPERATION_SEQUENTIAL; + /* Must not cache savers. + */ + operation_class->flags |= VIPS_OPERATION_NOCACHE; + /* Default to no coding allowed. */ for( i = 0; i < VIPS_CODING_LAST; i++ ) diff --git a/libvips/include/vips/internal.h b/libvips/include/vips/internal.h index 937a60fa..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; @@ -297,7 +301,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 diff --git a/libvips/include/vips/operation.h b/libvips/include/vips/operation.h index 8689dcc2..eafa2b4c 100644 --- a/libvips/include/vips/operation.h +++ b/libvips/include/vips/operation.h @@ -96,8 +96,7 @@ typedef struct _VipsOperationClass { */ void (*usage)( struct _VipsOperationClass *, VipsBuf * ); - /* Return a set of operation flags. If @get_flags is NULL, just use - * flags. + /* Return a set of operation flags. */ VipsOperationFlags (*get_flags)( VipsOperation * ); VipsOperationFlags flags; 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 e4961237..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. */ @@ -365,20 +369,50 @@ 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 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" }, - { "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 +442,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/po/en_GB.gmo b/po/en_GB.gmo index e69de29b..9906858d 100644 Binary files a/po/en_GB.gmo and b/po/en_GB.gmo differ 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 "" 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 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 } }; 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