Warning: file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php on line 88

Warning: Cannot modify header information - headers already sent by (output started at /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php:88) in /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php on line 215

Warning: Cannot modify header information - headers already sent by (output started at /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php:88) in /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php on line 216

Warning: Cannot modify header information - headers already sent by (output started at /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php:88) in /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php on line 217

Warning: Cannot modify header information - headers already sent by (output started at /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php:88) in /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php on line 218

Warning: Cannot modify header information - headers already sent by (output started at /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php:88) in /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php on line 219

Warning: Cannot modify header information - headers already sent by (output started at /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php:88) in /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php on line 220
PK!U*'*'alt-vips/README.mdnu[# libvips: an image processing library [![CI](https://github.com/libvips/libvips/workflows/CI/badge.svg)](https://github.com/libvips/libvips/actions) [![Fuzzing Status](https://oss-fuzz-build-logs.storage.googleapis.com/badges/libvips.svg)](https://issues.oss-fuzz.com/issues?q=is:open%20project:libvips) [![Coverity Status](https://scan.coverity.com/projects/6503/badge.svg)](https://scan.coverity.com/projects/jcupitt-libvips) [![Gitter](https://badges.gitter.im/libvips/devchat.svg)](https://gitter.im/libvips/devchat?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) # Introduction libvips is a [demand-driven, horizontally threaded](https://github.com/libvips/libvips/wiki/Why-is-libvips-quick) image processing library. Compared to similar libraries, [libvips runs quickly and uses little memory](https://github.com/libvips/libvips/wiki/Speed-and-memory-use). libvips is licensed under the [LGPL-2.1-or-later]( https://spdx.org/licenses/LGPL-2.1-or-later). It has around [300 operations](https://libvips.github.io/libvips/API/current/func-list.html) covering arithmetic, histograms, convolution, morphological operations, frequency filtering, colour, resampling, statistics and others. It supports a large range of [numeric types](https://libvips.github.io/libvips/API/current/VipsImage.html#VipsBandFormat), from 8-bit int to 128-bit complex. Images can have any number of bands. It supports a good range of image formats, including JPEG, JPEG 2000, JPEG XL, TIFF, PNG, WebP, HEIC, AVIF, FITS, Matlab, OpenEXR, PDF, SVG, HDR, PPM / PGM / PFM, CSV, GIF, Analyze, NIfTI, DeepZoom, and OpenSlide. It can also load images via ImageMagick or GraphicsMagick, letting it work with formats like DICOM. It comes with bindings for [C](https://libvips.github.io/libvips/API/current/using-from-c.html), [C++](https://libvips.github.io/libvips/API/current/libvips-from-C++.html), and the [command-line](https://libvips.github.io/libvips/API/current/using-cli.html). Full bindings are available for : | Language | Binding | |---|---| | Ruby | [ruby-vips](https://rubygems.org/gems/ruby-vips) | | Python | [pyvips](https://pypi.python.org/pypi/pyvips) | | PHP | [php-vips](https://github.com/libvips/php-vips) | | C# / .NET | [NetVips](https://www.nuget.org/packages/NetVips) | | Go | [govips](https://github.com/davidbyttow/govips) | | Lua | [lua-vips](https://github.com/libvips/lua-vips) | | Crystal | [crystal-vips](https://github.com/naqvis/crystal-vips) | | Elixir | [vix](https://github.com/akash-akya/vix) | | JVM | [vips-ffm](https://github.com/lopcode/vips-ffm) | libvips is used as an image processing engine by: | | |---| | [sharp (on node.js)](https://www.npmjs.org/package/sharp) | | [imgproxy](https://github.com/imgproxy/imgproxy) | | [bimg](https://github.com/h2non/bimg) | | [sharp for Go](https://github.com/DAddYE/vips) | | [Ruby on Rails](https://edgeguides.rubyonrails.org/active_storage_overview.html) | | [carrierwave-vips](https://github.com/eltiare/carrierwave-vips) | | [mediawiki](https://www.mediawiki.org/wiki/Extension:VipsScaler) | | [PhotoFlow](https://github.com/aferrero2707/PhotoFlow) | | [JVips](https://github.com/criteo/JVips) | and others. The official libvips GUI is [nip2](https://github.com/libvips/nip2), a strange combination of a spreadsheet and a photo editor. # Install There are packages for most Unix-like operating systems, including macOS. Check your package manager. There are binaries for Windows in [releases](https://github.com/libvips/libvips/releases). The [libvips website](https://libvips.github.io/libvips) has [detailed install notes](https://libvips.github.io/libvips/install.html). # Building from source libvips uses the [Meson build system](https://mesonbuild.com), version 0.56 or later. Meson can use [`ninja`](https://ninja-build.org), Visual Studio or XCode as a backend, so you'll also need one of them. libvips must have `build-essential`, `pkg-config`, `libglib2.0-dev`, `libexpat1-dev`. See the **Dependencies** section below for a full list of the libvips optional dependencies. There are basic bash completions in `completions/`, see the README in there. ## Cheatsheet ``` cd libvips-x.y.x meson setup build --prefix /my/install/prefix cd build meson compile meson test meson install ``` Check the output of `meson setup` carefully and make sure it found everything you wanted it to find. Add arguments to `meson setup` to change the build configuration. - Add flags like `-Dnsgif=false` to turn libvips options on and off, see `meson_options.txt` for a list of all the build options libvips supports. - Add flags like `-Dmagick=disabled` to turn libvips dependencies on and off, see `meson_options.txt` and the list below for a summary of all the libvips dependencies. - You might need to add `--libdir lib` on Debian if you don't want the arch name in the library path. - Add `--default-library static` for a static build. - Use e.g. `CC=clang CXX=clang++ meson setup ...` to change compiler. - You can have an alternative build directory, pick whatever names you like, for example one for release and one for debug. There's a more comprehensive test suite you can run once libvips has been installed. Use `pytest` in the libvips base directory. ## Optional dependencies If suitable versions are found, libvips will add support for the following libraries automatically. Packages are generally found with `pkg-config`, so make sure that is working. ### libjpeg Anything that is compatible with the IJG JPEG library. Use `mozjpeg` if you can. Another option is `libjpeg-turbo`. ### libexif If available, libvips adds support for EXIF metadata in JPEG files. ### librsvg The usual SVG loader. If this is not present, vips will try to load SVGs via imagemagick instead. ### PDFium If present, libvips will attempt to load PDFs with PDFium. Download the prebuilt pdfium binary from: https://github.com/bblanchon/pdfium-binaries Untar to the libvips install prefix, for example: cd ~/vips tar xf ~/pdfium-linux.tgz Create a `pdfium.pc` like this (update the version number): VIPSHOME=/home/john/vips cat > $VIPSHOME/lib/pkgconfig/pdfium.pc << EOF prefix=$VIPSHOME exec_prefix=\${prefix} libdir=\${exec_prefix}/lib includedir=\${prefix}/include Name: pdfium Description: pdfium Version: 4290 Requires: Libs: -L\${libdir} -lpdfium Cflags: -I\${includedir} EOF If PDFium is not detected, libvips will look for `poppler-glib` instead. ### poppler-glib The Poppler PDF renderer, with a glib API. If this is not present, vips will try to load PDFs via imagemagick. ### cgif If available, libvips will save GIFs with [cgif](https://github.com/dloebl/cgif). If this is not present, vips will try to save gifs via imagemagick instead. ### libarchive If available, libvips adds support for creating image pyramids with `dzsave`. ### libtiff The TIFF library. It needs to be built with support for JPEG and ZIP compression. 3.4b037 and later are known to be OK. ### fftw3 If libvips finds this library, it uses it for fourier transforms. ### lcms2 If present, `vips_icc_import()`, `vips_icc_export()` and `vips_icc_transform()` can be used to manipulate images with ICC profiles. ### libspng If present, libvips will load and save PNG files using libspng. If not, it will look for the standard libpng package. ### libimagequant, quantizr If one of these quantisation packages is present, libvips can write 8-bit palette-ised PNGs and GIFs. ### ImageMagick, or optionally GraphicsMagick If available, libvips adds support for loading and saving all libMagick-supported image file types. You can enable and disable load and save separately. Imagemagick 6.9+ needs to have been built with `--with-modules`. Most packaged IMs are, I think. If you are going to be using libvips with untrusted images, perhaps in a web server, for example, you should consider the security implications of enabling a package with such a large attack surface. ### pangocairo If available, libvips adds support for text rendering. You need the package pangocairo in `pkg-config --list-all`. ### highway If present, libvips will accelerate some operations with SIMD. If not, it will look for the orc-0.4 package. ### matio If available, vips can load images from Matlab save files. ### cfitsio If available, vips can load FITS images. ### libwebp If available, vips can load and save WebP images. ### libniftiio If available, vips can load and save NIfTI images. ### OpenEXR If available, libvips will directly read (but not write, sadly) OpenEXR images. ### OpenJPEG If available, libvips will read and write JPEG2000 images. ### libjxl If available, libvips will read and write JPEG-XL images. ### OpenSlide If available, libvips can load OpenSlide-supported virtual slide files: Aperio, Hamamatsu, Leica, MIRAX, Sakura, Trestle, and Ventana. ### libheif If available, libvips can load and save HEIC and AVIF images. Your libheif (in turn) needs to be built with the correct decoders and encoders. You can check with eg.: ```console $ heif-convert --list-decoders HEIC decoders: - libde265 = libde265 HEVC decoder, version 1.0.9 AVIF decoders: - dav1d = dav1d v6.6.0 - aom = AOMedia Project AV1 Decoder v3.5.0 $ heif-enc --list-encoders HEIC encoders: - x265 = x265 HEVC encoder (3.5+1-f0c1022b6) [default] AVIF encoders: - aom = AOMedia Project AV1 Encoder v3.5.0 [default] - svt = SVT-AV1 encoder v1.1.0 - rav1e = Rav1e encoder ``` # Contributors ### Code Contributors This project exists thanks to all the people who contribute. ### Organizations We've had generous financial support from our sponsors. Thank you very much! PK!2hhalt-vips/ChangeLognu[8.16.1 - support multipage JXL - fix PFM byte order on big-endian machines [agoode] - morph: fix erode Highway path [kleisauke] - morph: fix C-paths with masks containing zero [kleisauke] - fix `--vips-info` CLI flag with GLib >= 2.80 [kleisauke] - make `subsample-mode=on` and `lossless=true` mutually exclusive [kleisauke] - fix SZI write with openslide4 [goran-hc] - heifsave: prevent use of AV1 intra block copy feature [lovell] - threadpool: improve cooperative downsizing [kleisauke] - fix alpha shift during colourspace conversions [frederikrosenberg] - heifsave: set image orientation using irot and imir transformations [lovell] - XYZ2Yxy: guard against divide by zero - fix MSVC compile error [na-trium-144] - exif: ensure enumerated entries can be converted to string values [lovell] - gifsave: add support for eval callback, ensure correct return code [lovell] - tiffsave: honor disc threshold during pyramid save [kleisauke] - fill_nearest: fix a leak - colour: use suggested rendering intent as fallback [kleisauke] - morph: fix Orc path with large masks [kleisauke] - invertlut: fix final value in some cases - matrixload: fix file format detect for some matrix types - radload: improve sanity check of colour-related headers [lovell] - heifsave: reject multiband images [lovell] - heifload: prevent possible int overflow for large images [kleisauke] - tiffload: add missing read loop [kleisauke] - prevent possible use-after-free when debugging via `--vips-leak` flag [lovell] - avoid possible overflow when multiplication result is cast up [lovell] 10/10/24 8.16.0 - allow small offsets for the PDF magic string [project0] - add support for OJPEG tiffs [DarthSim] - add "palette" metadata item to flag palette images [DarthSim] - jxl load and save now support exif, xmp, animation [DarthSim] - improved configure output - add a filetype blocker for imagemagick - add basic g_auto support - support for long EXIF values [MarcosAndre] - better system error messages on windows [kleisauke] - add configurable max coordinate and vips_max_coord_get() - improve kill handling - PFM save and load now uses scRGB (ie. linear 0-1) [NiHoel] - turn vips_addalpha() into a VipsOperation [RiskoZoSlovenska] - add vips_rawsave_target(), vips_rawsave_buffer() [akash-akya] - vipsheader supports multiple "-f field" arguments [sergeevabc] - add "target_size" to webpsave [john-parton] - add "passes" to webpsave [john-parton] - revise sRGB -> B_W coefficients [daniellovera] - add vips_sdf(), vips_clamp(), vips_maxpair(), vips_minpair() - more const for the C++ API [Julianiolo] - deprecate "cache" (use tilecache instead) - add tests for tokenisation - add "unpack_complex" option to vips_getpoint() - add deflate compression level setting to tiffsave [ruven] - add "smart_deblock" to webpsave [goodusername123] 4/10/24 8.15.5 - version bump, revise C++ soname 3/10/24 8.15.4 - fix an off-by-one error in vips__token_get() - heifsave: fix crash when passing an invalid bitdepth [kleisauke] - webpsave: fix memory leak on error [dloebl] - heifsave: ensure NCLX profile is freed in lossless mode [kleisauke] - threadpool: fix a race condition in error handling [kleisauke] - disable GLib cast checks and asserts for plain builds [kleisauke] - fix jpeg in tiff for high Q [nahilsobh] - threadset: fix a race condition during thread exit [kleisauke] - fix compatibility with MSVC [Julianiolo] 11/8/24 8.15.3 - fix dzsave of >8-bit images to JPEG - jpegsave: fix chrominance subsampling mode with jpegli [kleisauke] - pngload: disable ADLER32/CRC checking in non-fail mode [kleisauke] - improve target_clones support check [kleisauke] - fix pipe read limit - fix a rare crash on Windows in highly threaded applications [Julianiolo] - vipssave: fix infinite loop on Windows with large images [pdbourke] - conva: fix a crash with {u,}{short,int} images [erdmann] - fix vips_image_get_string - heifsave: fix lossless mode [kleisauke] - composite: fix dest-atop blend mode [kleisauke] - fix vips_source_map for zero-length sources [kleisauke] 12/3/24 8.15.2 - fix deflate compression of tiff pyramids [manthey] - thumbnail always writes 8-bit thumbnails [turtletowerz] - lower min scale factor to 0.0 in svgload and pdfload [lovell] - heifload: don't warn on images with nclx profiles [kleisauke] - ppmload: ensure multi-line comments are skipped [lovell] - fix arrayjoin with some pipelines [TheEssem] - fix high Q mono JPEG TIFF write with mozjpeg [cavenel] - tiffsave: ensure large file support (>2GB) on MSVC [kleisauke] - check linker for target_clones support [lovell] 18/12/23 8.15.1 - reduceh: fix Highway path on SSE2 [DarthSim] - fix JPEG in TIFF colourspace for Q >= 90 [heman1-test] - fix build with upcoming libjxl 0.9 [kleisauke] - jxlsave: lower min effort value to 1 [DarthSim] - fix build without libjpeg [ionenwks] - fix vips7 plugin load [jcupitt] - allow ".jfif" as a suffix for jpegsave [casperbrike] - don't let the magick sniffer hijack TIFF [kleisauke] - ignore BLOCKED classes in foreign map [jcupitt] - add locks to fftw3 calls [akash-akya] 11/11/23 8.15.0 - add support for target_clones attribute [lovell] * use with (un)premultiply for ~10% perf gain on AVX CPUs * use with XYZ to LAB colourspace conversion for ~10% perf gain on AVX CPUs - add fast path to extract_band and bandjoin for uchar images [lovell] - reduce `vips_sharpen` max `sigma` to 10 [lovell] - inline scRGB to XYZ colourspace conversion, ~2x faster [lovell] - set "interlaced=1" for interlaced GIF images [kleisauke] - add @line_art to find_trim [miltoncandelero] - improve C++ binding [MathemanFlo] * add `inplace()` / `VImage::new_from_memory_copy()` * add overloads for `draw_*()` / `VImage::thumbnail_buffer()` - allow negative line spacing in text [donghuikugou] - add VIPS_META_BITS_PER_SAMPLE metadata, deprecate the "palette-bit-depth" and "heif-bitdepth" meta fields [MathemanFlo] - add "revalidate" to foreign loaders [jcupitt] - add `premultiplied` option to smartcrop [lovell] - add "prewitt" and "scharr" edge detectors, "sobel" is more accurate for non-uchar formats [jcupitt] - add support for forms in pdfium loader [kleisauke] - swap built-in profiles with ICC v4 variants [kleisauke] - remove libgsf dependency in favor of libarchive [kleisauke] - better chunking for small shrinks [jcupitt] - use alpha range of 0.0 - 1.0 for scRGB images [DarthSim] - add support for 16-bit float TIFFs [DarthSim] - add direct mode to dzsave [jcupitt] - require C++11 as a minimum standard [kleisauke] - add support for SIMD via Highway [kleisauke] - threaded write in tiffsave for tiled JPEG and JPEG2000 [jcupitt] - add vips_thread_execute() to the public API [jcupitt] - add "keep" flag to foreign savers, deprecate "strip" [a3mar] - improve scRGB handling [jcupitt] 18/9/23 8.14.5 - fix a crash with alpha plus icc_import and icc_export [jcupitt] - fix a crash in jxlsave [jcupitt] 15/8/23 8.14.4 - fix null-pointer dereference during svgload [kleisauke] - heif{load,save}: guard against NULL strings [kleisauke] - pdfiumload: fix rendering of pages with different sizes [DarthSim] 20/7/23 8.14.3 - fix ICC handling of greyscale images with a incompatible profile [kleisauke] - fix use-after-free during tiff pyramid save [kleisauke] - fix vips7 PNG load and save when using libspng [jcupitt] - tiffload: slightly relax tile size sanity check [lovell] - heifsave: limit dimensions to a maximum edge of 16384 [lovell] - colourspace: ensure CMYK conversion uses the embedded ICC profile [kleisauke] - ensure chromatic adaptation during icc_{im,ex}port() [kleisauke] - improve ICC compatibility check for CMYK images [kleisauke] 21/3/23 8.14.2 - use a private fontmap in vips_text() [jcupitt] - increase sanity checks on TIFF tile dimensions [lovell] - ensure compatibility with libheif > 1.14.2 [kleisauke] - minor doc fixes [jcupitt] - sanitise dimensions in JPEG-compressed TIFF images [lovell] - fix target pnm write [ewelot] - dedupe FITS header write [ewelot] - fix `strip` parameter in webpsave [jcupitt] - earlier abort of webpsave on kill [dloebl] - fix thumbnail of CMYK images with an embedded ICC profile [kleisauke] - fix ICC handling of RGB images with a monochrome profile [kleisauke] - ensure ICC transforms keep all precision [kleisauke] - fix openslideload associated=XXX load [jcupitt] - fix compatibility with MSVC [SpaceIm] 9/1/23 8.14.1 - add vips_thread_isworker() compatibility function [remicollet] - add vips_semaphore_down_timeout() [kleisauke] - idle threads are removed after 15s [kleisauke] - fix version number in gtk-doc index [kleisauke] - save mono fits images as NAXIS=2 [ewelot] - fix jpeg `autorotate` for orientation 3 [zhifengzhuang] 22/12/22 8.14.0 - remove autotools - remove various obsolete scripts - remove benchmark - `jp2ksave` defaults to chroma subsample off, and jp2 write - don't minimise `vips_sink_screen()` input after expose ... improves caching during interactive use - require libjxl 0.6+ - add `interlace` option to GIF save [dloebl] - magick load sets `magick-format` metadata [aksdb] - add `.pnm` save [ewelot] - threaded tiff jp2k and jpeg decompress - improve speed and efficiency of animated WebP write [dloebl] - add `rgb` mode to openslideload - new thread recycler - threadpools size dynamically with load - operations can hint threadpool size - faster `dzsave` - support for N-colour ICC profiles - add bash completions for `vips` - fits load and allows many more bands - fits write doesn't duplicate header fields - add `wrap` to `vips_text()` - GIF load supports truncated frames [tlsa] - EXIF support for PNG load and save - expose location of interest when using attention based cropping [ejoebstl] - deprecate gifsave `reoptimise`, add `reuse` - add `encoder` to heifsave [dloebl] - add `cplusplus` meson build option [jcupitt] - make arrayjoin much faster with large arrays 9/11/22 started 8.13.4 - missing include in mosaic_fuzzer [ServOKio] - emit "finish" at the end of targetcustom write [lucaskanashiro] 11/10/22 started 8.13.3 - improve rules for 16-bit heifsave [johntrunc] - improve libspng palette write [kleisauke] - improve libspng palette sort [DarthSim] - ensure EXIF has prefix before parsing [lovell] - fix low bit depth palette spng save [DarthSim] - fix thumbnail of non-sRGB images with an export profile [kleisauke] 5/9/22 started 8.13.2 - in dzsave, add add missing include directive for errno/EEXIST [kleisauke] - fix 8 bit palette PNG save [lovell] - fix null string in buffer print [pclewis] - revise caching of seq mode loaders [jcupitt] - reduce latency on dzsave kill [kleisauke] - improve text too large check [kleisauke] - fix subifd writing for small images [ruven] - name ICC profiles in spngsave [lovell] 24/7/22 started 8.13.1 - fix im7 feature detection in meson - add a summary table at the end of configure in meson - fix libpng fallback when spng is disabled in meson - add "unlimited" to jpegload - better 0 detection in unpremultiply - fix low bitdepth spng save [jeffska] - fix PNG low bitdepth save of high bitdepth images - add support for libjxl 0.7 [kleisauke] - improve compatibility with older libgsf versions [kleisauke] 21/11/21 started 8.13 - configure fails for requested but unmet dependencies [remicollet] - add support for another quantiser [DarthSim] - add "extend", "background" and "premultiplied" to vips_mapim() to fix edge antialiasing [GavinJoyce] - add support for HDR HEIC and AVIF images - add vips_spngsave() - jpeg2000 load left-justifies bitdepth - add "password" option to pdfload, fix byte ordering of "background" - add vips_operation_block_set(), vips_block_untrusted_set() - improve the pixel rng - new meson build system [tintou] - improve introspection annotations [tintou] - add "unlimited" to heifload [lovell] - add support for regions in C++ API [shado23] - add "maxerror" to gifsave [dloebl] - update libnsgif API [tlsa] - deprecate "properties" option to dzsave (now always on) - add vips_dzsave_buffer() - always set the min stack size for pthreads, if we can - add "fail-on" to thumbnail - add "gap" option to vips_reduce[hv]() and vips_resize() [kleisauke] - add "ceil" option to vips_shrink() [kleisauke] - quality improvements for image resizing [kleisauke] - add vips_source_new_from_target() - add vips_target_seek(), vips_target_read(), vips_target_new_temp() - add vips_tiffsave_target() - add vips_target_end(), deprecate vips_target_finish() - add "mixed" to webpsave [dloebl] - add support for ICC profiles and linear encoding to JXL load and save [f1ac] - add "reoptimise" to gifsave [dloebl] - add "bitdepth" to magicksave [dloebl] - change default PNG filter to "none" [lovell] 26/11/21 started 8.12.3 - better arg checking for vips_hist_find_ndim() [travisbell] - fix thumbnail with CMYK output [AdamGaskins] - fix size_t / ssize_t confusion [flga] - fix jxl compatibility break [lovell] 26/11/21 started 8.12.2 - make exif resuint optional and default to inch - win: don't set create time on inappropriate file descriptors [lovell] - fall back to magicksave for gif if cgif is not present [erik-frontify] - fix a crash with 0 length vectors - change default frame delay for GIFs from 1s to 0.1s - remove stray trailing comma from iiif3 dirnames [whalehub] - fix TTF load [chregu] - revise GIF save alpha threshold [jfcalvo] - raise libpng pixel size limit from 1m to 10m pixels [jskrzypek] - fix gif save change detector [TheEssem] - fix load from pipe with variable size reads 21/11/21 started 8.12.1 - fix insert [chregu] 14/6/21 started 8.12 - all tools support `--version` - add vips_svgload_string() convenience function - fix thumbnail with small image plus crop plus no upsize [Andrewsville] - rename speed / reduction-effort / etc. params as "effort" - add gifsave [lovell] - arrayjoin minimises inputs during sequential processing, saving a lot of memory and file descriptors - add vips_image_get_format_max() - flatten handles out of range alpha and max_alpha correctly - don't use atexit for cleanup, it's too unreliable - tiff writer loops for the whole image rather than per page [LionelArn2] - fix VipsSource with named pipes [vibbix] - added restart_interval option to jpegsave [manthey] - add IIIF3 support to dzsave [martimpassos] - add atan2 to math2 [indus] - improve buffer and target save file format selection - added VipsForeignPpmFormat, format arg to ppm savers - add fail-on to give better control over loader error sensitivity - add hyperbolic functions sinh, cosh, tanh, asinh, acosh, atanh [hroskes] - add untiled jp2k load - "insert" will minimise in seq mode - better EXIF string handling [lovell] 16/8/21 started 8.11.4 - fix off-by-one error in new rank fast path - add "unlimited" flag to png load [joshuamsager] - improve filtering of .v enums [lovell] - better logic to prevent shrink to nothing in thumbnail [kleisauke] 14/7/21 started 8.11.3 - build threadpool later [kleisauke] - add jxlsave prototypes [adil-benameur] - limit text chunks in PNGs [randy408] 15/6/20 started 8.11.2 - better libdir guessing [remi] - fix tiff pyramid creation with jp2k compression (was broken by 8.11.1) - don't load modules if we're built without modules 18/6/21 started 8.11.1 - add more example code to C docs - update libtool support in configure.ac - more startup info if VIPS_INFO is set - command-line programs set glib prgname (no longer set for you by VIPS_INIT) - enable strip chopping for TIFF read [DavidStorm] - disable modules by default for static builds [kleisauke] - fix jpeg tiff pyramid save 14/8/20 started 8.11 - add vips_jpegload_source() and vips_svgload_source() to public C API - integrate doxygen in build system to generate C++ API docs - improve C++ API doc comments - add VipsInterpolate and guint64 support to C++ API - add VImage::new_from_memory_steal [Zeranoe] - vipsthumbnail supports stdin / stdout thumbnailing - have a lock just for pdfium [DarthSim] - get pdfium load building again [Projkt-James] - add _source load support for pdfium - add "seed" param to perlin, worley and gaussnoise - add vips_source_g_input_stream_new() to load images from a GInputStream - add openslideload_source(), vipsload_source(), vipssave_target() - add hist path to rank for large windows on uchar images - better 8/16-bit choice for pngsave - avoid NaN in mapim [afontenot] - hist_find outputs a double histogram for large images [erdmann] - fix ref leaks in mosaicing package - run libvips leak test in CI - add vips_fitsload_source(), vips_niftiload_source() - png and gif load note background colour as metadata [781545872] - add vips_image_[set|get]_array_double() - add GIF load with libnsgif - add jp2kload, jp2ksave - add jp2k compression to tiff load and save - add JPEG-XL load and save - add black_point_compensation flag for icc transforms - add "rgba" flag to vips_text() to enable full colour text rendering - move openslide, libheif, poppler and magick to loadable modules [kleisauke] - better detection of invalid ICC profiles, better fallback paths - add "premultiply" flag to tiffsave - new threading model has a single threadpool shared by all pipelines [kleisauke] 30/4/21 start 8.10.7 - better vips7 PNG load compatibility [SkyDiverCool] - fix load of large PPM images from a pipe [ewelot] 22/12/20 start 8.10.6 - don't seek on bad file descriptors [kleisauke] - check for null memory sources [kleisauke] - improve ppmload, fixing a couple of small bugs - improve EOF detection in jpegload [bozaro] - improve error detection in spngload [randy408] - fix includes of glib headers in C++ [lovell] - fix build with more modern librsvg [lovell] - fix a possible segv with very wide images [f1ac] - fix issue thumbnailing RGBA images in linear mode [jjonesrs] - improve vipsthumbnail profile handling - fix tiff deflate predictor setting [Adios] - fix vector path for composite on i386 [kleisauke] 18/12/20 started 8.10.5 - fix potential /0 in animated webp load [lovell] 14/12/20 started 8.10.4 - fix spng detection 18/10/20 started 8.10.3 - relax heic is_a rules [hisham] - fix vips7 webp load [barryspearce] - fix out of bounds exif read in heifload - fix out of bounds read in tiffload - fix tiffsave region shrink mode [imgifty] - add missing flushes on write to target [harukizaemon] - hide info messages you could get with some older glibs [kleisauke] - fix --no-strip on dzsave with icc-profiles [altert] - better GraphicsMagick image write [bfriesen] - add missing read loops to spng, heif, giflib and ppm load [kleisauke] - block zero width or height images from imagemagick load [Koen1999] - check for overflow in gifload height [lovell] - fix msb_first default in ppm load and save [ewelot] - force binary mode on win for connection read / write [Alreiber] - better testing for output to target [barryspearce] - ppmload_source was missing is_a [ewelot] - improve webpload rounding and blending behaviour [lovell] - fix range clip in int32 -> unsigned casts [ewelot] - fix precision error in clip of float -> int casts [ewelot] - fix load of HEIC images with 0 length metadata [ddennedy-gpsw] - revise rounding in reduce [kleisauke] 6/9/20 started 8.10.2 - update magicksave/load profile handling [kelilevi] - better demand hint rules [kaas3000] - fix tiff thumbnail from buffer and source [vansante] - in jpegsave, don't set JFIF resolution if we set EXIF resolution - bump minimum libheif version to 1.3 [lovell] - dzsave in iiif mode could set info.json dimensions off by one [Linden6] - pdfload allows dpi and scale to both be set [le0daniel] - allow gaussblur sigma zero, meaning no blur - better heif signature detection [lovell] - fix vips_fractsurf() typo [kleisauke] - better heif EOF detection [lovell] - fix gir build with g-o-i 1.66+ [László] - improve seek behaviour on pipes - add "speed" param to heifsave [lovell] - fix regression in C path for dilate / erode [kleisauke] - fix build with libheif save but no load [estepnv] 9/8/20 started 8.10.1 - fix markdown -> xml conversion in doc generation - remove typedef redefinitions to please old gccs - fix regression in tiff pyramid thumbnailing [tand826] - stop 0-length buffer being passed to imagemagick [lovell] - convert no-profile CMYK to RGB on save [augustocdias] - ensure SVG loader skips input with chars outside x09-x7F range [lovell] - better mask sizing in gaussmat [johntrunc] - fix tiffsave "squash" handling [barryspearce] - fix jpegload autorotate [chregu] - only start the background render thread on first use 24/1/20 started 8.10.0 - more conformat IIIF output from dzsave [regisrob] - add @id to dzsave to set IIIF id property [regisrob] - add max and min to region shrink [rgluskin] - allow \ as an escape character in vips_break_token() [akemrir] - tiffsave has a "depth" param to set max pyr depth - libtiff LOGLUV images load and save as libvips XYZ - add gifload_source, csvload_source, csvsave_target, matrixload_source, matrixsave_source, pdfload_source, heifload_source, heifsave_target, ppmload_source, ppmsave_target - revise vipsthumbnail flags - add VIPS_LEAK env var - add vips_pipe_read_limit_set(), --vips-pipe-read-limit, VIPS_PIPE_READ_LIMIT - revise gifload to fix BACKGROUND and PREVIOUS dispose [alon-ne] - add subsample_mode, deprecate no_subsample in jpegsave [Elad-Laufer] - add vips_isdirf() - add PAGENUMBER support to tiff write [jclavoie-jive] - add "all" mode to smartcrop - flood fill could stop half-way for some very complex shapes - better handling of unaligned reads in multipage tiffs [petoor] - mark old --delete option to vipsthumbnail as deprecated [UweOhse] - png save with a bad ICC profile just gives a warning - add "premultipled" option to vips_affine(), clarified vips_resize() behaviour with alpha channels - improve bioformats support with read and write of tiff subifd pyramids - thumbnail exploits subifd pyramids - handle all EXIF orientation cases, deprecate vips_autorot_get_angle() [Elad-Laufer] - load PNGs with libspng, if possible - deprecate heifload autorotate -- it's now always on - revised resize improves accuracy [kleisauke] - add --vips-config flag to show configuration info - add "bitdepth" param to tiff save, deprecate "squash" [MathemanFlo] - tiff load and save now supports 2 and 4 bit data [MathemanFlo] - pngsave @bitdepth parameter lets you write 1, 2 and 4 bit PNGs - ppmsave also uses "bitdepth" now, for consistency - reduce operation cache max to 100 - rework the final bits of vips7 for vips8 [kleisauke] - --disable-deprecated now works [kleisauke] - vipsheader allows "stdin" as a filename - gifload allows gifs with images outside the canvas - wasm compatibility patches [kleisauke] - webpsave has a @profile param 24/4/20 started 8.9.3 - better iiif tile naming [IllyaMoskvin] 31/1/19 started 8.9.2 - fix a deadlock with --vips-leak [DarthSim] - better gifload behaviour for DISPOSAL_UNSPECIFIED [DarthSim] - ban ppm max_value < 0 - add fuzz corpus to dist - detect read errors correctly in source_sniff - fix regression in autorot [malomalo] - thumbnail on HEIC images could select the thumbnail incorrectly under some size modes [ZorinArsenij] 20/6/19 started 8.9.1 - don't use the new source loaders for new_from_file or new_from_buffer, it will break the loader priority system - fix thumbnail autorot [janko] - fix a warning with magicksave with no delay array [chregu] - fix a race in tiled tiff load [kleisauke] - better imagemagick init [LebronCurry] - lock for metadata changes [jcupitt] 20/6/19 started 8.9.0 - add vips_image_get/set_array_int() - disable webp alpha output if all frame fill the canvas and are solid - support arrays of delays for animated images [deftomat] - add "unlimited" flag to svgload - disable webp alpha output if all frames fill the canvas and are solid - add "compression" option to heifsave [lovell] - support webp and zstd compression in tiff - loaders use "minimise" to close input files earlier - integrate support for oss-fuzz [omira-sch] - add vips_switch() / vips_case() ... fast many-way ifthenelse - better const handling for arithmetic operators fixes comparisons against out of range values - sharpen restores input colourspace - handle alpha in heifload / heifsave [meyermarcel] - add @interpretation and @format to rawload - nifti load/save uses double for all floating point metadata - add vips_error_buffer_copy() - add VipsSource and VipsTarget: a universal IO class for loaders and savers - jpeg, png, tiff (though not tiffsave), rad, svg, ppm and webp use the new IO class - rewritten ppm load/save is faster and uses less memory - add @no_strip option to dzsave [kalozka1] - add iiif layout to dzsave - fix use of resolution-unit metadata on tiff save [kayarre] - support TIFF CIELAB images with alpha [angelmixu] - support TIFF with premultiplied alpha in any band - block metadata changes on shared images [pvdz] - RGB and sRGB are synonmous 17/9/19 started 8.8.4 - improve compatibility with older imagemagick versions - remove realpath, since it can fail on systems with grsec 31/8/19 started 8.8.3 - revert sharpen restoring the input colourspace - xres/yres tiffsave params were in pixels/cm [f--f] 9/7/19 started 8.8.2 - better early shutdown in readers - don't attempt to save large XMP to jpeg [tnextday] - always fetch HEIC metadata from the main image [zhoux2016] - fix loop in malformed ppm [Kyle-Kyle] - better support for PNGs with long comment names - fix build with GM - add locks for pdfium load - fix build with MSVC - fix a problem with shinkv tail processing [angelmixu] - fix a read one byte beyond buffer bug in jpegload - make GIF parsing less strict - better feof() handling in GIF load - clip coding and interpretation on vips image read - check image bounds for GIF load - prevent over-pre-shrink in thumbnail [kleisauke] - fix sharpen with sigma 0.5 [2h4dl] - sharpen restores input colourspace - verify bands/format for coded images - improve data_length handling for jpeg metadata 24/5/19 started 8.8.1 - improve realpath() use on older libc - better magickload error messages - more consistent behaviour for page-height metadata - fix for composite with many small images and some combinations of blend modes - fix memleak in tiff pyr save to memory [scossu] - istiff attempts to read the first directory rather than just testing the magic number [przemyslawpluta] - much faster ismagick() [jcupitt] - better behaviour for vips_region_fetch() if request lies partly outside image - remove 256 band limit in arithmetic.c [erdmann] - disable Orc if building with CET [lovell] - fix vipsthumbnail with pyr tiff [kleisauke] - text autofit could occasionally terminate early [levmorozov] - fewer warnings on tiffload [chregu] - vips_resize() breaks aspect ratio and limits shrink to prevent <1px dimensions [lovell] 21/9/18 started 8.8.0 - much faster smartcrop [lovell] - add low/high to smartcrop [jcupitt] - add XMP support to png read/write [jcupitt] - deprecate thumbnail auto_rotate, add no_rotate [jcupitt] - implement thumbnail shrink-on-load for openslide images [jcupitt] - add animated webp support [jcupitt] - revise vips_cast() to improve behaviour with uint images [erdmann] - add bandand()/or()/eor() to cplusplus binding [clcaalu] - implement shrink-on-load for tiff pyramids [jcupitt] - added vips_image_set_blob_copy() [jcupitt] - don't stop composite on first non-transparent image [felixbuenemann, GDmac] - add vips_rect_overlapsrect() - composite is much faster at positioning subimages - stop tiff pyr layers if width or height drop to 1 [gvincke] - dzsave has a new skip_blanks option - add vips_CMYK2XYZ() and vips_XYZ2CMYK(), plus associated routes - include cmyk and srgb fallback profiles - add vips_profile_load() and use it everywhere - fix race in temp filename creation [lhecker] - add @reduction_effort param to webpsave [lovell] - add @option_string param to thumbnail_buffer [kleisauke] - add XMP, IPCT, ICC, EXIF etc. support to magickload/magicksave - much lower memuse for gifload - tilecache speedups - add vips_heifload(), vips_heifsave() - add heif thumbnail support to vips_thumbnail() - free threadpool earlier, reducing mem growth for some long-running processes [jtorresfabra] - add vips_region_fetch() / _width() / _height() for language bindings - vips_text() supports justification - move vips_image_set_kill() and iskilled() to the public API - dzsave to szi sets suffix correctly [martinweihrauch] - dzsave szi writes "scan-properties.xml" - add vips_image_(get|set)_image() - add openslideload option to attach all associated images as metadata - dzsave to szi will write all associated images - remove old c++ and python interfaces - vipsthumbnail can thumbnail animated and multipage images - deprecate webpload @shrink, use @scale instead 31/3/19 started 8.7.5 - better buffer sizing in tiff reader [omira-sch] 4/1/19 started 8.7.4 - magickload with magick6 API did not chain exceptions correctly causing a memory leak under some conditions [kleisauke] - zero memory on allocate to prevent write of uninitialized memory under some error conditions [Balint Varga-Perke] 21/11/18 started 8.7.3 - fix infinite loop for autofit with non-scaleable font - mapim was not offsetting by window offset [erdmann] - better rounding for scale [kleisauke] - fix a memleak in magick6load [kleisauke] 21/11/18 started 8.7.2 - more info output for temp files to help diagnose problems - vips_text() could set the wrong DPI - vips_text() leaked in autofit mode 23/9/18 started 8.7.1 - update function list in docs [janko-m] - test for g_str_to_ascii() [jcupitt] - fix temp file open on Windows and fallback on linux [lovell] 23/12/17 started 8.7.0 - add magicksave, save image with libMagick [dlemstra] - remove jpeg thumbnail from EXIF if "jpeg-thumbnail-data" has been removed by user - hough_line scales width to 0 - 180, not 0 - 360 - hough_line is 4x faster - hough_circle is 2x faster - add vips_sobel() and vips_canny() edge detectors - add vips_rotate() ... a convenience method for vips_similarity() - svgload was missing is_a [lovell] - better header sniffing for small files - drop incompatible ICC profiles before save - better hasalpha rules - create funcs always make MULTIBAND (ie. no alpha) - use O_TMPFILE, if available [Alexander--] - set "interlaced=1" for interlaced JPG and PNG images - add PDFium PDF loader - jpegload adds a jpeg-chroma-subsample field with eg. 4:4:4 for no chrominance subsampling. - tiffload, pdfload, magickload set VIPS_META_N_PAGES "n-pages" metadata item - add fontfile option to vips_text() [fangqiao] - add vips_transpose3d() -- swap major dimensions in a volumetric image - remove vips7 stuff from default API ... you must now #include it explicitly - added vips_argument_get_id() to fix derived classes on win32 [angelmixu] - fix compile with MSVC 2017 [angelmixu] - pdfload has a option for background - vips7 C++ interface defaults off - make members, getters and operators "const" in cpp API - composite has params for x/y position of sub-images [medakk] - add Mitchell kernel - pyramid builders have a choice of 2x2 shrinkers [harukizaemon] - add `palette` option to pngsave [felixbuenemann] - add basic nifti load/save support - support writing string-valued fields via libexif - paste in the test suite from pyvips - get EXIF tag names from tag plus ifd [@Nan619] - escape ASCII control characters in XML - magickload now sniffs some file types itself - update radiance load from upstream - add region_shrink to tiffsave - mapim could fail for float index images with coordinates out of int range - scale openexr alpha to 0 - 255 - close input earlier, when we can [kleisauke] - add vips_object_get_args() for language bindings [kleisauke] 12/3/18 started 8.6.4 - better fitting of fonts with overhanging edges [Adrià] - revise C++ example [fangqiao] - strict round down on jpeg shrink on load [davidwood] - configure test for g++ 7.2 and composite.cpp - don't Ping in magickload, too unreliable - ensure WebP can add metadata when compiled with libwebpmux [lovell] - improve accuracy of vector path convolution [felixbuenemann] 12/2/18 started 8.6.3 - use pkg-config to find libjpeg, if we can - better clean of output image in vips_image_write() fixes a crash writing twice to memory - better rounding behaviour in convolution means we hit the vector path more often - fix a crash if a delayed load failed [gsharpsh00ter] - icc_import attaches the fallback profile if it used it 5/1/18 started 8.6.2 - vips_sink_screen() keeps a ref to the input image ... stops a rare race - fix a minor accidental ABI break in 8.6.0 -> 8.6.1 [remicollet] - fix read of plane-separate TIFFs with large strips [remicollet] - fix a C++ warning in composite.cpp [lovell] - remove number of images limit in composite - composite allows 1 mode ... reused for all joins - fix race in vips_sink() for seq read 10/12/17 started 8.6.1 - fix mmap window new/free cycling - fix some compiler warnings - remove the 64-image limit on bandary operations - better version date [bmwiedemann] - bump wrapper script version [bgilbert] - fix a memleak on error during jpeg buffer write [lovell] - fix misspelling of IPTC as IPCT [lovell] - seq could be set on small images opened in random-access mode [aferrero2707] - fix small memleak in dzsave [lovell] - small speedup for rgb->g [lovell] 15/4/17 started 8.6.0 - supports fits images with leading non-image HDUs, thanks benepo - add vips_image_new_from_image() and vips_image_new_from_image1() ... make a constant image - add new_from_image() to Python as well - slight change to cpp new_from_image() to match py/C behaviour - vips_conv(), vips_compass(), vips_convsep() default to FLOAT precision - add FORCE resize mode to break aspect ratio - add vips_thumbnail_image() - better prefix guessing on Windows, thanks tumagonx - savers support a "page_height" option for multipage save - rename 'disc' as 'memory' and default off - add vips_find_trim(), search for non-background areas - remove lcms1 support, it had bitrotted - `join` tagged as seq - support tiffsave_buffer for pyramids, thanks bubba - thumbnail and vipsthumbnail have an option for rendering intent, thanks kleisauke - set file create time on Windows, thanks dlong500 - remove python tests ... moved to pyvips test suite - vips7 and vips8 python bindings default to off ... use the new pyvips binding instead - better svgload: larger output, handle missing width/height, thanks lovell - add vips_gravity() ... embed, but with direction rather than position - vips_text() can autofit text to a box, thanks gargsms - add vips_composite() / vips_composite2(): merge a set of images with a set of blend modes - better gobject-introspection annotations, thanks astavale - vips_image_write() severs all links between images, when it can ... thanks Warren and Nakilon - vector path for convolution is more accurate and can handle larger masks - linear and cubic kernels for reduce are higher quality - added vips_value_set_blob_free() - "--size Nx" to vipsthumbnail was broken, thanks jrochkind - fix build with gcc 7 - add vips_fill_nearest() ... fill pixels with nearest colour - add VIPS_COMBINE_MIN, a new combining mode for vips_compass() - vips_hist_find_indexed() now has a @combine parameter - vips_affine() and vips_similarity() have a "background" parameter - fix nasty jaggies on the edges of affine output, thanks chregu - add gif-delay, gif-comment and gif-loop metadata - add dispose handling to gifload - dzsave outputs extra right and bottom overlap-only tiles, for closer spec adherence - deprecate the "centre" option for vips_resize(): it's now always on - setting the EXIF data block automatically sets other image tags - add "extend" option to affine; resize uses it to stop black edges 29/8/17 started 8.5.9 - make --fail stop jpeg read on any libjpeg warning, thanks @mceachen - don't build enumtypes so often, removing perl as a compile dependency - fix a crash with heavy use of draw operations from language bindings, thanks @Nakilon 2/8/17 started 8.5.8 - fix transparency detection in merge, thanks Haida - define env var VIPS_WARNING to hide warning messages - shut down dzsave output earlier to help mark-sweep bindings - fix webp thumbnail upscale, thanks Kleis 9/6/17 started 8.5.7 - better smartcrop - transform cmyk->rgb automatically on write if there's an embedded profile and the saver does not support cmyk - fix DPI mixup in svgload ... we were writing images about 20% too large, thanks Fosk 19/5/17 started 8.5.6 - tiff read with start page > 0 could break edge tiles or strips - raise b64 limit to allow for huge profiles (thanks jaume) - fix error return in blob save (thanks jaume) - tag vipsprofile as py2 (thanks ioquatix) - don't cache thumbnail (thanks tomasc) 23/4/17 started 8.5.5 - doc polishing - more improvements for truncated PNG files, thanks juyunsang - improve corrupted jpg handling, thanks juyunsang - fix small test suite issues on os x 23/4/17 started 8.5.4 - don't depend on image width when setting n_lines, thanks kleisauke 7/4/17 started 8.5.3 - more link fixing in docs - revise cache sizing again to help out of order errors under heavy load, thanks kleisauke 25/3/17 started 8.5.2 - better behaviour for truncated PNG files, thanks Yury - missing proto for vips_tiffsave_buffer(), thanks greut - move some docs from the wiki and blog into core libvips docs - add support for markdown in docs 25/3/17 started 8.5.1 - init more classes earlier, thanks David 13/10/16 started 8.5.0 - rewritten buffer system is safer and frees memory earlier - added tiff save to buffer - added dzsave save to buffer (zip only) - revise header get/set functions - better vipsheader behaviour with complex field types - added vips_image_hasalpha() - added vips_thumbnail() / vips_thumbnail_buffer() - webpload/webpsave read and write icc, xmp, exif metadata - better >4gb detect for zip dzsave output [Felix Bünemann] - all loaders have a @fail option, meaning fail on first warning, though it only does anything for jpg and csv - add vips_image_get_fields() to help bindings - add tiff multi-page read/write - add VIPS_META_PAGE_HEIGHT metadata - IM6/IM7 magickload supports page/n/page-height, all_frames deprecated - gifload supports n/page-height - added #defines for VIPS_SONAME, VIPS_LIBRARY_CURRENT, VIPS_LIBRARY_REVISION, VIPS_LIBRARY_AGE - better support for bscale / bzero in fits images - deprecate vips_warn() / vips_info(); use g_warning() / g_info() instead - vipsthumbnail supports much fancier geometry strings, thanks tomasc - vips_thumbnail() has new @size option - fix --vips-cache-max etc. - add compute reordering, plus some new API to support it: vips_reorder_margin_hint() and vips_reorder_prepare_many(), thanks aferrero2707 - kick load operations from cache on read error, thanks gaillard - fix return from C++ assignment operator overloads (+=, -= etc) - add @max_slope to vips_hist_local() to implement CLAHE, thanks hunter-87 - vips_gaussnoise() pixels are reproducible on recalc, thanks MvGulik - max/min sort values by y and x coordinate - tiff read uses libtiff scanline API if rows-per-strip is large - vips_region_shrink() knows about alpha, helps dzsave and tiffsave - use expat, not libxml, for XML load ... removes a required dependency, since we get expat as part of glib - new sequential mode infrastructure is faster and more flexible - add vips_smartcrop(), based on sharp's smartcropper - vipsthumbnail has a --smartcrop option - added vips_rot90() etc. convenience functions - fix vips_resize() bug when hscale and vscale were very different 8/12/16 started 8.4.5 - allow libgsf-1.14.26 to help centos, thanks tdiprima 11/11/16 started 8.4.4 - fix crash in vips.exe arg parsing on Windows, thanks Yury 18/10/16 started 8.4.3 - fix error detection in gif_close, thanks aaron42net - fix tiny threading memleak - improve compatibility with very old glib, see #548 27/9/16 started 8.4.2 - small doc improvements - fix error message for metadata fetch type mismatch - resolve a race condition in thread shutdown, thanks Lovell 1/5/16 started 8.4 - many more wepsave options [Felix Bünemann] - added quant_table option to wepsave [Felix Bünemann] - added @n option to pdfload, thanks andris - dzsave won't write empty tiles in google mode, thanks bverem, perog, felixbuenemann - allow nested [] in CLI args - restore BandFmt on unpremultiply in vipsthumbnail - better python detection and build [Felix Bünemann] - max-alpha defaults to 65535 for RGB16/GREY16 - added radsave_buffer [Henri Chain] - support tiff orientation tag - autorotate option for tiff load - tiffsave converts for jpg if jpg compression is turned on - tiffsave supports --strip - conversions to GREY16 could lock - free pixel buffers on image close as well as thread exit ... stops main thread buffers clogging up the system - dzsave can write compressed zips [Felix Bünemann] - vips_image_write() only refs the input when it has to ... makes it easier to combine many images in bounded memory - VImage::write() implementation was missing - VImage::write() return value changed from void to VImage to help chaining - added C++ arithmetic assignment overloads, += etc. - VImage::ifthenelse() with double args was missing =0 on options - better accuracy for reducev with smarter multiplication - better quality for vips_resize() with linear/cubic kernels - pyvips8 can create new metadata - better upsizing with vips_resize() - add imagemagick v7 support, thanks sachinwalia2k8 - added vips_worley(), vips_perlin() noise generators - added vips_convf(), vips_convi(), vips_convasep(), vips_conva() ... im_conv*() functions rewritten as classes - vips_convsep() calls vips_convasep() for the approximate case - new fixed-point vector path for convi is up to about 2x faster - gif loader can make 1, 2, 3, or 4 bands depending on file contents - support --strip for pngsave - add svgz support [Felix Bünemann] - rename bootstrap.sh -> autogen.sh to help snapcraft - support unicode filenames on Windows - added VIPS_ROUND as well as VIPS_RINT - resize/reduce*/shrink*/affine now round output size to nearest rather than rounding down, thanks ioquatix - better support for tile overlaps in google maps mode in dzsave - dzsave puts vips-properties.xml in the main dir for gm and zoomify layouts - resize and reduce have @centre option for centre convention downsampling - vipsthumbnail uses centre convention to better match imagemagick _ add vips_foreign_get_suffixes() 19/8/16 started 8.3.4 - better transparency handling in gifload, thanks diegocsandrim 30/7/16 started 8.3.3 - fix performance regression in 8.3.2, thanks Lovell - yet more robust vips file reading 18/5/16 started 8.3.2 - more robust vips image reading - more robust tiff read [Matt Richards] 15/4/16 started 8.3.1 - rename vips wrapper script, it was still vips-8.2, thanks Benjamin - export C++ operator overloads for MSVC linking [Lovell] - fix magickload @page with GraphicsMagick - add giflib5 support - allow resize >1 on one axis, <1 on the other - vips_resize has an optional @kernel argument - fix giflib4 detection [felixbuenemann] 29/1/16 started 8.3 - add vips_reduce*() ... a fast path for affine downsize - vips_resize() uses vips_reduce() with lanczos3 - bicubic is better on 32-bit int images - add pdfload, svgload, gifload for PDF, SVG and GIF rendering - vipsthumbnail knows about pdfload and svgload - added @page param to magickload - matload is more specific (thanks bithive) - lower mem use for progressive jpg decode - sharpen has a new @sigma param, @radius is deprecated - sharpen allows a much greater range of parameters - sharpen defaults now suitable for screen output - better handling of deprecated args in python - much better handling of arrayimage command-line args - faster hist_find (Lovell Fuller) - webpload has a @shrink parameter for shrink-on-load - vipsthumbnail knows about webp shrink-on-load - better behaviour for vips_cast() shift of non-int types (thanks apacheark) - python .bandrank() now works like .bandjoin() - vipsthumbnail --interpolator and --sharpen switches are deprecated - switches to disable PPM, Rad and Analyze support - added VIPS_COUNT_PIXELS(), overcomputation tracking - @out_format in vips_system() can contain [options] - webpsave_buffer no longer ignores @lossless, thanks aaron42net - float tiff tagged as scRGB to match photoshop convention, thanks Murat - better jpeg autorot, thanks otto 24/3/16 started 8.2.4 - fix nohalo and vsqbs interpolators, thanks Rafael 27/1/16 started 8.2.3 - fix a crash with SPARC byte-order labq vips images - fix parsing of filenames containing brackets, thanks shilpi230 - fix hist_entropy (lovell) - small fixes to radiance load 12/1/16 started 8.2.2 - changes to ease compiling C++ binding with MSVC [Lovell Fuller] - reorder file tests to put slow loaders last - ifthenelse needs less C stack during eval - better rounding in bilinear interpolator - fix to "make check" in non-C locales [felixbuenemann] - use compiler builtins isnan, isinf, fabs, fmin, fmax, ceil, floor when possible [Lovell Fuller] - tune vips_shrinkh(), 30% faster [Lovell Fuller] - remove SEQ hint from vips_subsample(), fixes cli performance [erdmann] - fix double free on attach ICC profile from file in tiff write [erdmann] - use g_assert_not_reached() - better vips-from-C docs - remove Duff from im_conv() / im_conv_f() for a 25% speedup [Lovell Fuller] 1/1/16 started 8.2.1 - add a compat stub [Benjamin Gilbert] - python bandjoin is now just an instance function - small doc improvements - small vips7 C++ improvement - remove exception specifications from vips8 C++ interface [Lovell Fuller] - VImage::get_typeof() now returns GType 7/10/15 started 8.2.0 - added im_bufmagick2vips(), a vips7 wrapper for magick load from buffer - fetch unset property now returns default value rather than warning - many more const declarations to help gobject-introspection - rewritten vips_shrink() is 2x faster, much lower memuse, now handles complex - only allow [] for filename options - add memory.h to Python API .. makes tracked highwater visible - added bandjoin_const to add constant bands to an image - better alpha handling for tiff write, thanks sadaqatullahn - better cache sizing for vips_resize() - sizealike / formatalike / bandsalike elide completely if they can for a x2 saving in C stack use in many cases - added vips_mapim() ... resample with an index image, plus test - try to improve vips_resize() quality a little more - vips_resize() can do non-square resizes - dzsave removes tile metadata by default, thanks Benjamin - jpeg strip option removes a little more, thanks Benjamin - added vips_image_new_from_memory_copy() - improve vips_sink_screen() stability under heavy load - added vips_arrayjoin() - Python x.bandjoin(y) is now x.ibandjoin(y), sorry - faster and lower-mem TIFF read - faster bilinear interpolator - TIFF loads and saves IMAGEDESCRIPTION - add --properties flag to tiffsave - dzsave defaults changed: now writes 256x256 jpegs for non-edge tiles, thanks Daniel 7/5/15 started 8.1.1 - oop, vips-8.0 wrapper script should be vips-8.1, thanks Danilo - fix vips7 pathname parsing on windows, thanks Lovell 7/5/15 starteld 8.1.0 - add vips_premultiply(), vips_unpremultiply() - change the alpha range rules for vips_flatten() to match vips_premultiply() - vipsthumbnail uses vips_resize() rather than its own code - vipsthumbnail uses vips_premultiply() for better alpha quality - added bandand() bandor() bandeor() convenience funcs to Python - oops, base64 encode could pad by up to two zero bytes - added VipsRefString as a thing that gi bindings can unpack - support "with Vips.Image as i:" in Python - try to support DOS CSV and PPM files on linux - add vips_byteswap(), remove byteswap option from vips_copy() - add vips_bandfold()/vips_bandunfold() - dzsave supports zip output > 4gb, thanks benjamin - add support for HSV colourspace [Jonas Øgaard] - skip oversized markers in jpeg write - jpeg exif tags saved as name rather than title - can now set any jpeg exif tag, not just modify existing tags - add vips_hist_entropy() - vips_log(), vips_log10() are zero-avoiding - better overlap handling for dzsave, thanks robclouth - add @spacing option to vips_text() - tiff loads and saves IPCT and Photoshop data 7/5/15 started 8.0.3 - dzsave and tif pyr write could fail for some image dimensions, thanks Jonas 4/5/15 started 8.0.2 - fix a refcount error in C++ wrapper, thanks huskier - better C++ api test - test suite improvements - remove a couple of stray header decls, thanks benjamin 25/4/15 started 8.0.1 - fix some compiler warnings - work around a glib bug that can cause segv under load - add some notes on threading to the docs - better leak reporting 11/2/15 started 8.0 - remove old doc stuff, lots of doc improvements - add fliphor(), flipver(), rot90(), rot180(), rot270(), median(), dilate(), erode() convenience methods to Python and C++ - python: use [] to index and slice image bands, use () to get a point - c++: use [] to band index, () returns a vector - add shift option to cast - sRGB2scRGB and scRGB2sRGB scale 16-bit alpha to and from 8-bit - add magickload_buffer() [mcuelenaere] - add vips_foreign_is_a_buffer() [mcuelenaere] - added test_foreign.py, plus more test images - added vips_region_shrink(), fast x2 shrinker - rewritten tiff writer is about 3 - 4x faster at making pyramids - jpg, magick, png, tiff readers now use only 1 fd per input image - added vips_info_set(), vips_progress_set(), vips_profile_set() ... bindings can now support all the vips command-line options if they wish - better conversion to greyscale, thanks bkw - add vips_image_copy_memory(), improves stability with heavy threading - jpegsave supports new mozjpeg features [lovell] - add vips_vipsload(), vips_vipssave() ... why not 26/3/15 started 7.42.4 - im_maxpos_avg() avoids NaN - small tiffsave doc improvements - better thresholding for tiffsave "squash" mode - add @miniswhite mode to tiffsave 6/2/15 started 7.42.3 - bump version for back-compat ABI change - added vips_image_memory(), an alias for vips_image_new_memory() - improvements to configure for python - remove --disable-cxx configure flag - python imageize preserves interpretation - fix dzsave as a target format 30/12/14 started 7.42.2 - C++ required output params were broken, thanks Lovell - remove VImage::scale() to get scale from header, it clashed with the VipsScale operator, thanks Lovell - allow c++ set enum from string - display param default and range in usage - better docs - more tests - renamed VIPS_FOREIGN_DZ_DEPTH_1 as VIPS_FOREIGN_DZ_DEPTH_ONE etc. to help bindings - vipsthumbnail will return an error code if one or more conversions failed - disable chroma subsample in jpeg-tiff if Q >= 90 - try to handle tiffs with old-style 8-bit colormaps - rename vipsthumbnail -o as -f, -o stays as a hidden flag - fix some small leaks - faster openslide load, thanks Benjamin - add VInterpolate class to cplusplus binding, thanks Lovell - add lower-level operation cache access - turn on leak testing in test suite - don't use isnormal() to test for crazy FP numbers, thanks Murat - much faster RGB16 -> sRGB path 24/12/14 started 7.42.1 - add gobject-2.0 to Requires: in vips and vips-cpp .pc files - bump soname - fix VipsBlob read - remove "future" dependency, thanks bgilbert 4/11/14 started 7.42.0 - better default resolution for png load - better pbm (one bit) load, better pfm (float) load/save - added pbm (one bit) save - changed vips_gaussblur() parameters, sorry - add .szi as a dzsave zip synonym - support tiff XMP metadata - support @density arg to magickload [Lovell] - support python3.4 and python2.7 in new python binding - vips_gaussmat() and vips_logmat() are now int by default, to match vips_conv(), and use @precision, not @integer - added --disable-pyvips8 switch to turn off new py binding - "vips thing" exit status can now be used to test for optional components 25/7/14 started 7.41.0 - start working on --disable-deprecated - fix pngload with libpng >1.6.1 - add vips_resize() - return of vips_init(), but just for bindings - revised type.c to make it more binding-friendly - add @background arg to save: the colour to flatten against - add VIPS_ARGUMENT_MODIFY flag ... used for draw_circle etc, meaning an op which modifies its argument - rename VIPS_OPERATION_RELATIONAL_NOTEQUAL as VIPS_OPERATION_RELATIONAL_NOTEQ for consistency - python vips8 binding - python vips8 test suite: test_arithmetic.py, test_colour.py, test_conversion.py - move zoomify ImageProperties file, now a better match to the official tool - rename VIPS_ANGLE_180 as VIPS_ANGLE_D180 etc. to help python - remove cimg support, we have a gmic plugin now instead - add support for vips8 plugins - added "autorotate" option to jpeg load - added autorot operator - added @filter option to pngsave (Lovell) - C++ vips8 binding 27/10/14 started 7.40.12 - better tiff detection (Lovell) - fix memleak in sharpen (Lovell) - fix profile handling in XYZ2scRGB, thanks Lovell 8/10/14 started 7.40.11 - rework extra band handling for colour functions - set interpretation of matlut output more carefully 8/9/14 started 7.40.10 - icc_import and icc_transform checks the input profile for compatibility with the image, thanks James - try to make vips_thread_shutdown() optional 8/9/14 started 7.40.9 - support jfif resunit "none" - support GRAY as an input and output ICC space - fix a read loop with setjmp() in png read, if the png file is broken - fix vipsthumbnail with both input cmyk and output rgb profiles specified - vipsthumbnail retries with specified input profile if embedded profile is broken - add @profile option to pngsave, matching tiff and jpeg - fix a race in the operation cache [Lovell] 8/9/14 started 7.40.8 - fix configure on rhel6 [Lovell] - mono <-> rgb converters were not handling extra bands, thanks James - support jpeg resunit "none" 21/8/14 started 7.40.7 - width and height were swapped in matlab load - set interpretation more carefully on matlab load - fix memleak in tilecache [Lovell] - fix memleak in VipsArray [Lovell] - fix memleak in webp load from buffer [Lovell] - fix memleak in png save to buffer [Lovell] - make out of order read in png and jpg a fatal error - add thread_shutdown() to C++ (and thereby to python) 12/8/14 started 7.40.6 - more doc fixes - fix similarity rotate+scale, thanks Topochicho - fix 16-bit PNG save, thanks John - fix dzsave date on Windows, thanks John - fix vipsthumbnail on many-core systems, thanks James 25/7/14 started 7.40.5 - fix a race in im_maxpos_avg() - limit n_thr on tiny images - don't exit() on memleak detected, just warn - add "autocrop" option to openslide load - argh fix affine, again, there were sometimes black bars with nohalo and the vips8 interface - pngsave in interlaced mode makes a copy of the image, so it's always seq - vipsthumbnail shrinks to 1/2 window_size - vipsthumbnail has an anti-alias filter between shrink and affine - vipsthumbnail defaults to bicubic - better rounding behaviour for fixed-point bicubic reduces noise - fix pngload with libpng >=1.6.11 - fix colour for openslide read associated 4/7/14 started 7.40.4 - fix vips_rawsave_fd(), thanks aferrero2707 - fix im_point() - vips_scale() now does round to nearest to avoid rounding errors - improve im_openout() compat macro - more vips7 compatibility fixes, thanks steve - more robust vips_system() - add webp support to vips7 30/6/14 started 7.40.3 - fix interlaced thumbnails in vipsthumbnail, thanks lovell - fix use of "header" in benchmark/, thanks David - fits save now caches the image before write, so it's top-to-bottom - add --properties argument to dzsave, thanks bgilbert, jhenriksen 25/6/14 started 7.40.2 - dzsave write to zip stops at 4gb, thanks bgilbert - improve short option name handling, thanks bgilbert - added --enable-docs configure option to help freebsd - removed a bash-ism from configure to help freebsd - don't assume GType fits in an int to help freebsd 24/6/14 started 7.40.1 - revise man.1 pages - fix vips_guess_prefix() 23/6/14 started 7.40.0 - version bump - renamed "header" as "vipsheader" and "edvips" as "vipsedit" 21/1/14 started 7.39.0 - auto-decode for (almost) all operations, see vips_image_decode() - background render thread cleans up and quits neatly - colourspace has a source_space option - operations can be tagged as "deprecated" - redo im_draw_circle(), im_draw_flood(), im_draw_line(), im_draw_mask(), im_draw_image(), im_draw_rect(), im_draw_point(), im_read_point(), im_draw_smudge(), im_label_regions() as classes - better rounding in vips_flatten() - VipsStatistic operations are sequential - vipsthumbnail has --rotate auto-rotate option - removed embedded thumbnail reader from vipsthumbnail: embedded thumbnails are too unlike the main image - fix to vipsthumbnail --crop, thanks Alessandro - add vips_sum() - add vips_hough base class and vips_hough_line() - add "mode" param to vips_draw_image() - add vips_hough_circle() - reduce default cache size to 1,000 operations - added "postbuild" signal - vips_system() now supports many input images and you can change image argument order - support 16-bit palette TIFFs, plus palette TIFFs can have an alpha - libgsf-1 is now an optional dependency - dzsave can directly write a ZIP file - add ".vips" as an alternative suffix for vips files - added vips_tiffload_buffer() - added vips_image_new_from_buffer(), vips_image_write_to_buffer() - added vips_object_set_from_string() - added @container option to dzsave - support 1/2/4 bit palette tiff images with alpha - vips_system() now uses g_spawn_command_line_sync() - added im_tile_cache_random() to help nip2 - added hough_circle() to vips7 C++ API - added Travis CI config, thanks Lovell - im_*merge(), im_*mosaic(), im_match*(), im_global_balance*(), im_remosaic(), im_*mosaic1(), im_*merge1() redone as classes - better filename tracking for globalbalance - revised vips8 image load/save API, now simpler and more logical - operations emit "invalidate" if any of their input images invalidate - operation cache drops ops on invalidate - skipahead is back, thanks to a new threadpool tweak 6/3/14 started 7.38.6 - grey ramp minimum was wrong - vipsthumbnail --crop could fail for very non-square images, thanks Alessandro - fix a crash in vips_rawsave(), thanks Andrea - updated German translation, thanks Chris - fix coordinate error in affine, thanks ferryfax 24/2/14 started 7.38.5 - jpeg load from buffer could write to input, thanks Lovell - fix webpload from buffer, thanks Lovell - vips_sequential() could fail under heavy load - remove support for seq mode read for operations like extract 13/2/14 started 7.38.4 - --sharpen=none option to vipsthumbnail was broken, thanks ferryfax - more locking on property create and lookup to help very-threaded systems, thanks Nick 22/1/14 started 7.38.3 - undeprecate VIPS_MASK_IDEAL_HIGHPASS and friends, ruby-vips was using them, thanks ahacking 22/1/14 started 7.38.2 - auto RAD decode for affine - falsecolour was not working for some image types - foreign memory buffer images did not have the right dhint, broke command-line falsecolour on sequential images - support many Radiance readers active at once - add secret "rgbjpeg" flag to vips_tiffsave() to help IIP 19/1/14 started 7.38.1 - bump soname, thanks benjamin - better conversion to and from scrgb/xyz for rad (hdr) - fix --interpolate flag to vipsthumbnail, thanks Lovell 18/1/14 started 7.38.0 - version bump 19/10/13 started 7.37.0 - redone im_rotate_*mask45(), im_gauss_*mask*(), im_log_*mask(), im_dilate(), im_erode(), im_rank_image(), im_compass(), im_linedet(), im_gradient(), im_convsep(), im_convsep_f(), im_fastcor(), im_spcor(), im_sharpen() as classes - im_gradcor() deprecated - vips_init() now does some ABI compat checking, though this change requires an ABI break - add "interlace" option to vips_jpegsave() - remove vips_image_copy_fields() and vips_demand_hint() and add vips_image_pipeline() to do both jobs - vipsthumbnail allows non-square bounding boxes, thanks seth - add vips_matrixprint() - add @point subsample mode to vips_subsample() - im_contrast_surface() deprecated: it was slower than calling conv a few times - radiance load supports sequential read - rewritten radiance decode is much faster - add vips_crop(), a synonym for vips_extract_area() - rename vips_gammacorrect() as vips_gamma(), now takes 1 / exp - vips_gamma() works for any format - add --linear mode to vipsthumbnail - support XYZ as a PCS for vips_icc_import() and vips_icc_export() - add --strip option to jpegsave - added vips_gaussblur() convenience function - added --vips-profile, records and dumps thread timing and memory use info - added vipsprofile, visualises --vips-profile output - auto-vectorization-friendly inner loops - added vips::init() and vips::shutdown() to C++ API - reuse pixel buffers on sharing to reduce mem cycling - conv is SMALLTILE, huge mem use saving on wide images - vipsthumbnail has a --crop option - remove video4linux1 code, it was useless on all modern linuxes - redone freq filter builders as classes - redone im_fwfft(), im_invfft(), im_freqflt(), im_disp_ps(), im_fractsurf(), im_phasecor() as classes - vips_colourspace() allows B_W, GREY16, RGB16 as source / target - added vips_thread_shutdown(), thanks Lovell - vips_linear() has a uchar output mode - redone im_cntlines(), im_rank() as classes - move im_zerox() to deprecated, it wasm't very useful 9/1/14 started 7.36.6 - fix some clang compiler warnings 20/11/13 started 7.36.5 - better cache sizing in unbuffered sequential mode - allow larger tile_size in dzsave - remove use of PATH_MAX to help gnu hurd - fix vips_hist_match() 15/11/13 started 7.36.4 - improve compat with im_init_world() 18/10/13 started 7.36.3 - fix compiler warnings in ubuntu 13.10 - reverse similarity rotation direction to match the convention used elsewhere in vips - fix blocked caching of sequential load operations - fix cache flags - fix --delete option to vipsthumbnail 10/10/13 started 7.36.2 - better jpeg startup - rename jpeg bool type to reduce confusion between libraries 3/10/13 started 7.36.1 - fix to help OS X build 3/10/13 started 7.36.0 - version bump 1/7/13 started 7.35.0 - added vips_matrixload() and vips_matrixsave(), load and save vips mat format - rename image arrays as image matrices ... INTERPRETATION_ARRAY -> INTERPRETATION_MATRIX etc. - rewrite im_buildlut(), im_identity*(), im_maplut(), im_falsecolour(), im_gammacorrect(), im_histgr(), im_histcum(), im_histnorm(), im_heq(), im_histnD(), im_histindexed(), im_histspec(), im_invertlut(), im_lhisteq(), im_stdif(), im_project(), im_profile(), im_tone_build*(), im_mpercent*(), im_ismonotonic() as classes - vips_hist_local(), vips_stdif() do any number of bands - thin vips8 wrapper for im_histplot() - added vips_error_freeze() / vips_error_thaw() - used freeze() / thaw() to stop file format sniffers logging spurious errors - vipsthumbnail uses embedded jpg thumbnails if it can - rename vips_diag() as vips_info(), add --vips-info flag - deprecate im_hsp() - added vips_webpload(), vips_webpload_buffer(), vips_webpsave(), vips_webpsave_buffer(), vips_webpsave_mime() - tiff reader allows separate planes for strip read - tiff reader and writer allow many more formats, eg. 32-bit int, complex, etc. - tiff reader and writer allow any number of bands - added vips_image_new_matrixv() - dzsave basename param now called filename, so you can use .dz as a destination (basename is still there but deprecated) - new _UNBUFFERED sequential mode saves memory in some important cases - vips_conv() is a simple wrapper over the old convolution functions - new optimize_coding param for jpeg write produces optimal Huffman tables, thanks Lovell - im_tone_map() and im_tone_analyse() deprecated - new --band arg to vips_maplut() replaces im_tone_map() functionality - added vips_similarity(), simple wrapper for vips_affine() that lets you give a scale and rotate 3/7/13 started 7.34.2 - lower priority for Matlab load to reduce segvs from Mat_Open(), thanks Michael - null-terminate libexif strings, thanks Mike - openslide always outputs solid pixels 28/6/13 started 7.34.1 - fix morphological operators on non-uchar images - remove any ICC profile when we use vips to go to srgb 7/6/13 started 7.34.0 - version bump - oops, VImage.PIL_mode_from_vips() failed for CMYK, thanks Alessandro - fix no-pango build - add im_vips2dz(): run the deepzoom writer from vips7 - vips_magickload() has an option to read all images in a sequence - redo im_make_xy(), im_*eye(), im_zone*(), im_sines() as classes - added vips_pngload_buffer() - faster --centre option to dzsave, thanks Kacey 12/3/13 started 7.33.0 - vipsthumbnail lets you specify the sharpening mask - turn off caching for im_copy()/vips_copy(), we use copy to stop sharing, and it's cheap so caching doesn't help anyway - auto rshift down to 8 bits on save, if necessary - im_gaussnoise(), im_copy_file(), im_grid(), im_scale(), im_scaleps(), im_wrap(), im_rotquad(), im_zoom(), im_subsample(), im_msb(), im_text(), im_system(), im_system_image() redone as classes - add --angle option to dzsave - another vips_shrink() fix argh 14/5/13 started 7.32.4 - icc import and export could segv on very wide images - fix centos 5 build, thanks re-boot 16/4/13 started 7.32.3 - rename GETTEXT_PACKAGE as vips7.32 to help Debian (thanks Jay) - added "persistent" option to tilecache 12/3/13 started 7.32.2 - removed some left-over debugging code from configure.ac - better handling of args without values, thanks Ruven - better error messages from vips.c - fix demand hints so "vips shrink" works again, thanks Jan - im_jpeg2vips.c builds without jpeglib.h, thanks Alessandro 6/2/13 started 7.32.1 - fix --without-lcms, thanks speckins - updates to licence, thanks Benjamin - remove "fred" from dist - better bootstrap on OS X 22/1/13 started 7.32.0 - tilecache in threaded mode could deadlock if the downstream pixel source raised an error (thanks Todd) - fix another dzsave corner-case (thanks Martin) - neater output for "header" - added VIPS_META_LOADER: record the loader name = header displays this loader hint - vipsthumbnail is better at cache sizing 31/8/12 started 7.31.0 - redone im_Lab2XYZ(), im_XYZ2Lab(), im_Lab2LCh(), im_LCh2Lab(), im_UCS2LCh, im_LCh2UCS(), im_XYZ2Yxy(), im_Yxy2XYZ(), im_float2rad(), im_rad2float(), im_Lab2LabQ(), im_LabQ2Lab(), im_Lab2LabS(), im_LabS2Lab(), im_LabQ2LabS(), im_LabS2LabQ(), im_LabQ2disp(), im_XYZ2disp(), im_disp2XYZ(), im_icc_import*(), im_icc_export*(), im_icc_transform*(), im_dE_fromLab(), im_dECMC_fromLab(), im_dE00_from_Lab(), im_icc_ac2rc() as classes - added vips_colourspace(), vips_colourspace_issupported(), replaces all derived conversions - faster and more accurate sRGB <-> XYZ conversion - support 16-bit sRGB import and export - rename UCS colourspace as CMC - dzsave can write zoomify and google maps layout as well - tilecache supports threaded access, so openslide read now threads - openslide2vips gets underlying tile size from openslide - embed has 'background' option - dzsave --layout google has a @background option - dzsave has a --depth option - update for new glib threading API - remove no threads option, glib no longer support it - better --help output for vips driver prog - vipsthumbnail -o allows absolute file names - much better exif handling for jpg images (thanks Gary) - preserve jpeg app13 (photoshop ipct) - vips_max() / _min() track the top n maxima / minima - deprecate im_maxpos_avg(): too specialised to be worth maintaining - deprecate im_linreg(): easily done by combining other operators - deprecate im_point(): easily done by combining other operators - add binary complex operations, with cross_phase as the only one so far - added vips_bandbool(), with vips_bandand(), _bandor(), _bandeor() as convenience functions - added scRGB colourspace, linear light float space with sRGB primaries - all interpolators use corner convention ... we had round-to-nearest in several of them before, causing a range of annoying problems - redone im_affine*() as a class - added input space displacement to affine - VipsArea is threadsafe - dzsave has a --centre option 31/12/12 started 7.30.8 - png icc profile write was broken 31/12/12 started 7.30.7 - better option parsing for "vips", thanks Haida - small fixes to help OS X - backported threaded tile cache from next version, im_tile_cache() now uses it to prevent a deadlock, see comment there 14/11/12 started 7.30.6 - capture tiff warnings earlier 14/11/12 started 7.30.5 - fix libtool version mess up (thanks Benjamin) 2/10/12 started 7.30.4 - remove options from format string in .dzi (thanks Martin) - vipsCC.pc required the wrong version of vips (thanks Alessandro) - larger max tile size for dzsave - linecache is 50% larger to leave some slop room 13/9/12 started 7.30.3 - linecache sized itself too large - fix a compile failure if libtiff was not found (thanks Martin) - dzsave did not work for images with an odd number of scanlines (thanks Martin) 4/9/12 started 7.30.2 - sequential stops all threads on error - sequential delays ahead threads rather than blocking them completely 6/8/12 started 7.30.1 - fixes to dzsave: shrink down to a 1x1 pixel tile, round image size up on shrink, write a .dzi file with the pyramid params, default tile size and overlap now matches the openslide writer - wrap VipsInterpolate for C++ - so affinei and affinei_all appear in Python - be more cautious enabling YCbCr mode in tiff write - add "DEPRECATED" flag to arguments - jpeg load/save note and use the preferred resolution unit - better error msgs for enum args - fix compiler warnings in production build (thanks Dmitry) - fix spurious warnings about exif updates - VipsSequential has an integrated cache and stalls out of order threads - add a line cache ... sizes up dynamically with request size - tilecache / linecache use a hash table not a linear list 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 rounding down (thanks Nicolas) - add dzsave, save in deep zoom format - rework im_shrink() as a class - remove im_rightshift_size(), just a convenience function now - vipsthumbnail no longer removes profiles by default - much more gentle sharpening in thumbnails - added "minimise" signal, used by tilecache to drop - add :seq support to im_tiff2vips(), im_jpeg2vips() ... helps ruby-vips - better thread safety for vips8 operation dispatch - better thread safety for upstream / downstream image linking - added "rs" open mode, removed "rd" - added vips_operation_get_flags() ... system for attaching sets of flags to operations - added VIPS_OPERATION_SEQUENTIAL flag - vips8 command-line interface uses this to turn sequential mode on automatically when possible - better handling of input files in vips7 command-line interface - sequential can skip ahead, so extract / insert are now seq 16/7/12 started 7.28.10 - wopconst was broken - vips_sign() was broken - 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 - remove references to the static bicubic interpolator from the docs - fix temp file handling on Windows --- was breaking for non-vips files over 100mb - better support for using images from multiple threads 18/6/12 started 7.28.8 - fixes for centos5 portability 18/6/12 started 7.28.7 - add vips_flatten() -- flatten RGBA to RGB - better alpha handling in PNG load - don't save RGBA PNG as CMYK JPG (thanks Tobsn) - fix a crash with malformed jpg files (thanks Grigoriy) - vipsthumbnail enables sequential mode more and caches lines better 19/4/12 started 7.28.6 - better resolution unit handling in deprecated im_vips2tiff() - use TIFF_CFLAGS output from pkg-config (thanks Jay) - much faster vips_argument_map() - make jpeg pyramids work with tiff4 - tiff loader always offers THINSTRIP (thanks Diuming) - add "nocache" operation flag, set for sequential load (thanks Diuming) - fix a crash in the tiff reader for huge values of RowsPerStrip (thanks Nicolas) - remove use of G_DEFINE_BOXED_TYPE() to help compat (thanks Jake) 19/4/12 started 7.28.5 - ifthenelse blend mode was broken - small blend speedup - default to libtiff-4 17/4/12 started 7.28.4 - up max buffer size for vipsbuf 6/4/12 started 7.28.3 - vips_divide() failed for int arguments - fix warning for unused vips7 gvalue argument - fix openslide read: always return png-style rgba, im_argb2rgba() becomes a NOP - cast to unsigned int now removes <0 values - vips7 interface to openslide now supports :,level,associated options (thanks Benjamin) - make vips8 cache smaller - more accurate progress reporting 13/3/12 started 7.28.2 - xres/yres tiffsave args were broken 13/3/12 started 7.28.1 - add ICC profile read/write for png files 30/1/12 started 7.28.0 - version bump - added vips_foreign_find_save_options()/vips_foreign_find_load_options() - delayed write to foreign via a "w" image was not working - support operations with many returns in Python - sequential read mode - better im_shrink() - added vips_sequential() - new vips_sink_memory() keeps read ordering - tiff, jpeg, png readers support sequential read - max/min avoid NaN - oop, histnorm was broken by the new vipsstats - never use IM ping to get a header, fixes BMP load - set @filename for non-vips formats in vips7 compat layer - make Xres/Yres double - completely disable debug by default in production builds 20/8/11 started 7.27.0 - version bump for new dev cycle - im_subtract(), im_avg(), im_min(), im_minpos(), im_copy(), im_embed(), im_flophor(), im_flipver(), im_insert(), im_insert_noexpand(), im_lrjoin(), im_tbjoin(), im_extract_area(), im_extract_bands(), im_extract_areabands(), im_replicate(), im_clip2fmt(), im_gbandjoin(), im_bandjoin(), im_invert(), im_lintra(), im_lintra_vec(), im_black(), im_rot90, im_rot180(), im_rot270() im_sintra(), im_costra(), im_tantra(), im_asintra(), im_acostra(), im_atantra(), im_exptra(), im_exp10tra(), im_logtra(), im_log10tra(), im_abs(), im_sign(), im_max(), im_maxpos(), im_deviate(), im_divide(), im_multiply(), im_stats(), im_measure(), im_recomb(), im_floor(), im_ceil(), im_rint(), im_equal*(), im_notequal*(), im_less*(), im_lesseq*(), im_more*(), im_moreeq*(), im_remainder*(), im_and*(), im_or*(), im_eor*(), im_shift*(), im_pow*(), im_exp*(), im_ifthenelse(), im_blend(), im_c2amph(), im_c2rect(), im_bandmean(), im_c2real(), im_c2imag(), im_ri2c(), im_jpeg*2vips(), im_vips2jpeg*(), im_tiff2vips(), im_vips2tiff(), im_exr2vips(), im_fits2vips(), im_vips2fits(), im_analyze2vips(), im_raw2vips(), im_vips2raw(), im_magick2vips(), im_png2vips(), im_png2*(), im_ppm2vips(), im_vips2ppm(), im_mat2vips(), im_rad2vips(), im_vips2rad() redone as classes - added argument priorities to help control arg ordering - generate has a 'stop' param to signal successful early termination - added optional output args, eg. x/y for min - CLI supports optional output args - in im_vips2tiff, enable YCbCr compression for jpeg write - VipsMin stops search early if it can - C API supports optional output args - switch back to int-valued operations - add the operation cache, various --vips-cache-* flags - fallback vips_init() - vips_tracked_malloc() tracks allocation size and can report total mem usage - cache limits, drop, init, flush plus command-line controls - remove dmalloc support, was never used and valgrind is better - im_csv2vips() allows quoted strings, including escaped quotes - added vips_shutdown() - added --vips-leak flag - more VipsImage props - added vips_image_write(), old one becomes vips_image_write_to_file() - added vips_region_paint_pel() - added VipsArea as a public struct - added array members and arguments - added nary - remove VipsPool, vips_object_local_array() is much better - cache.c now drops if you have too many open files - CLI args to change max files - new format for handling exif tags - switch SMALLTILE to 128, 512 was just too big - oop mode "rd" was not always being used for images - added ARRAY interpretation for images - VipsStats tracks minpos/maxpos as well - moved mask/ to deprecated - use atexit() to call vips_shutdown() - set _O_TEMPORARY on delete-on-close temp images if possible - unlink temps on rewind on *nix, less likely to leave temps on a crash - added complex conj as a basic operation - rect/polar/conj work on any format, not just complex - new VipsFile system for load/save in image formats - options now introspectable, try "vips jpegsave" - copy swap uses glib byteswap macros, about 2x faster - edvips can change vips header byte ordering - "header" is terse by default - "header" outputs filenames if working on many files - added openslide support (Benjamin Gilbert) - allow new-style load/save options in filenames to vips_image_new_from_file() etc. - VipsFormat is deprecated - remove outchecks from documented API - support gobject-introspection - new Python binding based on gobject-introspection - only spot options at the end of arg strings - add vips_cache() as a vips8 operator - remove the old fft fallback - remove fftw2 support - much faster im_draw_smudge() 14/1/12 started 7.26.8 - interpolate CLI args were broken (thanks speckins) 5/12/11 started 7.26.7 - lazy read from tiled tiff from layers other than 0 was broken - optional args to vips_call*() do not work, disabled (fixed correctly in master) - address calculations in files over 4gb were broken on 32-bit platforms (broken since March 2011, oops) 12/10/11 started 7.26.6 - NOCACHE was not being set correctly on OS X causing performance problems with large files - update Orientation exif tag on jpeg write 12/10/11 started 7.26.5 - jpeg read/write copies over XMP data - handle offset correctly in separable convolutions (thanks Nicolas) - macros for class arg boilerplate - class arg order set by new 'priority' param - VipsExtend, VipsDirection enums added 12/9/11 started 7.26.4 - fallback vips_init() - im_openout() compat stub was wrong, breaking ruby-vips - vips_class_map_concrete_all() needed a compat macro too - vips_class_map_all() was broken 10/8/11 started 7.26.3 - don't use G_VALUE_COLLECT_INIT(), many platforms do not have a glib this recent - don't leave image->kill set when we detect termination - test for a working C++ compiler, disable C++ parts of none found 10/8/11 started 7.26.2 - oops, im_benchmark.c had some stuff turned off - configure option --without-cfitsio was broken (thanks Mike) 26/7/11 started 7.26.1 - doc fixups - oops, ==0 missing from a strcmp() in vips7compat - fixed a race in im_XYZ2Lab() table build - added im_concurrency_get() to operation db - better benchmarkn.sh runs for the correct number of CPUs automatically, runs three times for each one, and just reports the fastest 26/7/11 started 7.26.0 - version bunp for 7.26 - various fixes to get win32 and OS X building 6/12/10 started 7.25.0 - attach the jpeg thumbnail and multiscan fields (thanks Mike) - faster tiff read for some common cases - faster im_tile_cache() - if we use C++ in libvips, add -lstdc++ to vips-7.xx.pc - im_vips2png() / im_png2vips() set / get png resolution (thanks Zhiyu Wu) - updated README - don't use tables for bilinear on float data for a small speedup (thanks Nicolas Robidoux) - no tables for uchar either, about a 15% speedup (thanks Nicolas) - dmask write was broken - lr/tbmerge() cast images to match, like im_insert() - lr/tbmosaic() work for any mix of image formats / bands - removed ancient balance stuff from im_lr/tbmosaic() - gtk-doc for mosaicing - add im_fits2vips() to the operation database - im_fits2vips() is lazy and much faster - im__file_open_write() / _read() has a flag for text_mode, get rid of all the remaining fopen()s - move cooc_* and glds_* to deprecated - move im_dif_std() to almostdeprecated - move im_simcontr() to almostdeprecated - add im_sines() to operation db - move im_spatres() to almostdeprecated - done gtk-doc for other - --vips-progress tells you about nthreads, tile size, nlines - gtk-doc for interpolate - move im_stretch3() to deprecated - move im_clamp() to deprecated - gtk-doc for video ... all operators done! amazing argh - set MAP_NOCACHE on OS X, otherwise performance dives off a cliff with files larger than memory - removed man pages, we are all gtk-doc now - im_jpeg2vips() ignores weird APP1 chunks - im_add() for int/uint was broken - im_ri2c() was broken - added VIPS_FORMAT_BIGENDIAN format flag - moved IMAGE and REGION to VipsImage and VipsRegion, classes over VipsObject - Rect -> VipsRect - libpng-1.5 supported - better png read for 1-bit and palette images - fits write - better fits metadata support - renamed all header fields, old names still supported, hopefully - all of iofuncs moved to vips_ namespace - lots of old iofuncs API moved to deprecated - added VipsOperation, an abstract base class for all vips operations - added VipsAdd, the first operation object - im_tiff2vips() int/uint mixup for rows_per_strip, thanks Bubba - removed the links feature, won't work with vips8 - got rid of the tools/ subdirs - added im_bufjpeg2vips() - tiff reader can do 1, 2, 4, 8 bit palette images - tiff palette read can do mono images - im_bufjpeg2vips() has a "header_only" parameter - added vips_image_get_data() - updated German translation (thanks Chris) - fixed typo in im_conv() overflow estimation which could cause errors - vips.c has new action syntax, knows about vips8 operations - add now has sizealike - vips7 binops all do sizealike too, also gbandjoin and ifthenelse - new API is now functional - vips.c generates GOption flags for vips8 operations - added im_gauss_dmask_sep() - laplacian generator lost -ve lobes for large sigma - added im_aconv(), approximate convolution - bumped smalltile to 512x512 for testing - added VipsPool, got rid of floating refs again, argh - VIPS_EXEEXT is now part of the exported API - im_blend() also does sizealike, oops - jpeg write was not inverting CMYK, thanks Ole - im_falsecolour() converts to mono 8-bit for you - im_icc_import*/export*() cast inputs for you - im_vips2tiff() uses im__temp_name() for intermediates - added vips_wrap7 ... wrap up vips7 operations as vips8 classes - man pages are back for commands 30/11/10 started 7.24.0 - bump for new stable - added im_dmask2imask(), im_imask2dmask() - im_rotate_*mask90() can do masks of any size (thanks Adam Turcotte) 18/7/10 started 7.23.0 - im_vips2bufjpeg() writes to a linked list, so it will work for any size image and header - added im_vips2bufpng() - use GetTempPath() to pick a temp dir on Windows - added "rd" mode to im_open() - vipsthumbnail and vips use "rd" - im_divide spots /0 - remove liboil dependency, we will use Orc instead - various small cleanups (thanks Tim) - add lcms2 support - VImage(filename) defaults to "rd" mode - revise window_offset / window_size, again - fix a mixup with ANY hints that caused performance problems on the main benchmark - rewritten im_circle as im_draw_circle, im_circle moved to almostdeprecated - added IM_TYPE_RW args for inplace ops --- nip2 uses this to wrap inplace ops automatically - special-case 3x3 masks in im_conv() for a 20% speedup - add IM_TYPE_RW flag for im__rw_image, helps nip2 auto-wrap inplace ops - im_insertplace() casts and bandalikes - copy iconv.m4 and friends in bootstrap, thanks Mike - moved the stupid _copy() versions of the inplace ops to deprecated, since nip2 can call inplace ops directly now - added im_draw_rect(), moved im_paintrect() to deprecated - added im_draw_image(), moved im_insertplace() to deprecated - added im_draw_line(), now clips, moved im_fastline() to deprecated - added im_draw_line_user(), now clips, moved im_fastlineuser() to deprecated - added im_draw_mask(), now wrappable, moved im_plotmask() to deprecated - added im_draw_point(), moved im_plotpoint() to deprecated - added im_read_point(), now partial, moved im_readpoint() to deprecated - added im_draw_smudge(), moved im_smudge() / im_smear() to deprecated - convolution functions support complex images - im_blend() can have any format condition image and it's converted to uchar - security fix for vips-7.23 wrapper script (thanks Jay) - im_affine() has a larger safety margin - fix gtk-doc warnings - small mask load/save improvements - mask gtk-doc done - add cfitsio dependency - add FITS reader - land the vector branch and the orc dependency ... we have SSE erode/dilate/add/conv - add IM_SWAP - dilate/erode do (!=0) on non-uchar images - add multipass Orc to im_conv(), 3.5x faster for 5x5 mask - im_profile() works for any image format, any number of bands - im_rank_image() works for mix of formats, bands - morph gtk-doc done - oops, missing braces in debug.h and util.h, thanks Laurence - update C++/Python binding - oop, bool constants are always (int) now, so (^-1) works for unsigned types, thanks Nicolas Robidoux - much lower memuse for im_cache() in complex pipelines - im_scale_dmask() normalises to 20, not 100 ... we hit the fast conv path more often 12/5/10 started 7.22.2 - the conditional image of ifthenelse can be any format, a (!=0) is added if necessary - oops vipsthumbnail sharpening was turning off for integer shrinks, thanks Nicolas Robidoux - im_vips2jpeg() could fail for very small images (thanks Tim) - threadpool wasn't stopping on allocate errors (thanks Tim) - vips_sink_disc() could block if allocate failed (thanks Tim) 12/5/10 started 7.22.1 - fix a problem with tiff pyramid write and >1cpu, thanks Ruven - constant ops clip to target range - oops, moreconst and moreeqconst were the same - better buffer handling in sinkdisc for single-line images - less chatty errors from "vips" - oops, don't rename "copy_set" as "copy_", thanks Ole 12/5/10 started 7.22.0 - bump and rename - vipsthumbnail has a manualpage and sharpens correctly - more interpolator work - fixes to --disable-cxx mode (thanks Mike) - added German translation, thanks Chris Leick - fixed typos in some messages, thanks Chris Leick - fix gettext startup - all "colour" in messages changed to "color", have a proper en_GB translation file - vipsthumbnail delete profile failed if there was a profile - interpolate cli unref was broken - more accurate, slightly faster bilinear and bicubic (thanks Nicolas Robidoux) 21/3/10 started 7.21.3 - added progress feedback to threadpool - --vips-wbuffer2 switch does all wbuffer use now - im_wbuffer2() renamed as vips_discsink(), some cleanups - im_gammacorrect() can do 16-bit images too - im_histplot() could fail for signed int histograms - im_fwfft() and im_invfft() could free their output image too early - added im_local_imask(), im_local_dmask() - added im_mpercent_hist() - im_maplut() casts the index image to one of the uint types - fixed a couple of /0 problems with scale == 0 masks - set G_LOG_DOMAIN to VIPS so we can use g_warning etc. - added VIPS_DEBUG_MSG() macro - --vips-wbuffer2 turns on threadpool for im_iterate as well - im_vips2tiff() uses vips_sink() instead of threadgroup - strip out threadgroup - add --enable-debug=xxx flag - im_iterate() -> vips_sink() - better number-of-bands detection for im_magick2vips() - added im_get_argv0() - added PFM read / write 16/1/10 started 7.21.2 - "invalidate" is careful to keep images alive, so invalidate callbacks can do im_close() - flood_blob could loop if start point == ink - added im_meta_remove() - added remove profile option to vipsthumbnail - added vips_bandfmt_iscomplex() and friends, im_iscomplex() and friends deprecated - im_bandjoin()/im_gbandjoin() work with images of varying formats - added im_copy_native(), deprecated im_copy_from() and friends - im_check*() name rationalisation - finally removed old flood stuff - im_insert*() bandalike and formatalike - im_*join() bandalike and formatalike - im_ri2c() bandalike - im_vips2png() saves 16-bit PNGs, if necessary - vipsthumbnail has selectable interpolators, optional sharpen - moved a lot of stuff (eg. im_iscomplex()) from deprecated to almostdeprecated to avoid breakage - im_csv2vips(): allow lines that end with EOF rather than \n - im_vips2tiff has a bigtiff option - oops, im_lineset() needs to ask for WIO of mask and ink - move cache invalidation to REGION, fixes a race - don't im_invalidate() after paint, it can cause horrible performance problems ... for example, im_plotmask() used as the action operator for im_fastlineuser() is terrible - instead, users of the inplace operations need to call im_invalidate() at the end of a set of paint actions to trigger an update - parent/child renamed as upstream/downstream in DAG - set VIPS_ICC_DIR in configure - ICC profiles are looked for in VIPS_ICC_DIR as a fallback - im_render() mask image generation no longer triggers image calc - threadgroups scale output buffers with number of threads for smalltile ... improves SMP scaling for narrow images on many-way machines - default to max number of processors (--vips-concurrency and IM_CONCURRENCY set >0 can override) on linux and win32 - better nprocs guesser - im_render() fixes to help the paintbox, some speedups too - added im_wbuffer2(), a new distributed threading system, and --vips-wbuffer2 to enable it, thank you Christian 15/1/10 started 7.21.1 - added "written" callbacks, used to implement write to non-vips formats 26/11/09 started 7.21.0 - branch for new dev cycle - argh, missing init from colour.c (thanks Peter) - argh, im_measure() was not looping over bands correctly (thanks Peter) - removed mmap_limit, we now always use windows ... reduces VM use hugely, because mmap windows are freed when their regions are freed, while images are only unmapped when they are closed - have a min bytes for mmap windows as well, so we don't make too many tiny windows - im_disp2Lab() was broken - deprecated.h is now defined in terms of current functionality, rather than repeating stuff - im_flood() and friends rewritten, typically 4x faster - removed --with-cimg option, added --disable-cxx - added im_system_image() (thanks Roland) - added postclose callbacks - added vipsthumbnail - oops, generate C++/Python wrappers for deprecated operations by default - read TIFF images strip-wise, not scanline-wise - better TIFF YCbCr reading (thanks Ole) - isanalyze generates fewer silly error messages 26/11/09 started 7.20.3 - updated en_GB.po translation - file_length is gint64 to avoid win32 breakage 23/11/09 started 7.20.2 - GETTEXT_PACKAGE now includes lib version number (thanks Jay) 11/11/09 started 7.20.1 - oop, im_clip2fmt() was missing PTOP flag, should get a small speedup - im_conv() / im_convf() didn't like all-zero masks - small updates to im_convf() from im_conv() - im_read_imask() produced an incorrect error message if passed a doublemask - rename im_convf(), im_convsepf() as _f() - vips.c drops _f suffix when overloading - regenerate C++ binding, don't make deprecated package 9/11/09 started 7.20.0 - removed vips-7.x.spec.in, shouldn't really have this in SVN - bumped version to 7.20 - fixes to get "make dist" working again 3/4/09 started 7.19.0 - version bump - tiny conv speedup - catch lcms error messages - fix includes for gtk+-3.0 - report virtual memory too in im__print_all() - cosmetic changes to nohalo - im_magick2vips() needs to invert alpha - now (more or less) passes -Wextra - added "fail" option to im_jpeg2vips: fail with an error on any warning (thank you Ole) - started gtk-doc changes - renamed im_meta_get_type() and im_header_get_type() as im_meta_get_typeof() and im_header_get_typeof() to prevent confusion with GObject type definers (was breaking gtkdoc object scan) - revised more names, limited documented API - im_buildlut() could segv for non-zero based tables (thanks Jack) - VIPS_BUF_STATIC() does not take length arg - check for SetImageOption() so we work with GraphicsMagick too - "header" sets a non-zero exit code if anything failed - add and use im_check_uncoded() and friends - matlab load handles column-major and plane-separated images (thanks Mikhail) - JPEG save allows "none" for profile, meaning don't attach a profile - saner, simpler, faster typecasting for im_add(), im_subtract(), im_multiply(), im_divide(), im_remainder() - im_remainder() has a float result for float types - im_measure() allows sel == NULL, meaning all patches - added "deprecated" package - faster, simpler, better im_max(), im_min, im_avg(), im_deviate() - im_max() returns true modulus, not square of modulus, for complex images - im_avg() works for complex, returning average modulus - im_system() fix (thanks Roland) - im_system() rewrite - im_maxpos()/im_minpos() are partial and work for complex - im_max()/im_min() are now convenience functions - im_maxpos_avg() handles complex and multi-band images - added im_point(), rewrite im_point_bilinear() in terms of this - close callbacks now happen *after* images have closed resources (such as open files) ... this lets them delete temps and stuff. Expect breakage :( - added vips_interpolate_get_window_offset() - boolean revised: smaller, more general, faster - im_remainderconst_vec() renamed to im_remainder_vec() for consistency - added im_shift*_vec() - renamed im_eor_vec() as im_eorimage_vec() for consistency, also and, or - renamed im_eorconst() as im_eorimage_const() for consistency, also and, or - relational revised: smaller, more general, faster - im_blend()/im_ifthenelse() allows many-band conditional, 1-band then/else - im_blend()/im_ifthenelse() allows band and format to differ between then and else parts - better im_check() functions - added im_flood_other() as start of simple segmentation operator - added im_label_regions() - im_printlines(), im_debugim() deprecated (use im_vips2csv() instead) - meta, header, callback, error, region, check, generate, memory gtkdocs - removed printlines tool, vips2csv is much better - removed other useless tools as well: debugim, binfile - fix up addr calcs on 64-bit machines with >2gb images and inplace ops (thanks Christoph) - im_generate() checks that im_demand_hint() has been called for this image - im_jpeg2vips.c, set scale_num on shrink (thanks Guido) - heh argh reading history always stopped after the first line (thanks Haida) - added im_histindexed - new im_iterate() calls start and stop functions from workers so resources they make are owned by the worker thread ... this makes it possible to have start functions which create multiple regions and therefore allows im_iterate() to scan more than one image at once - threadgroup no longer has any default action, you must attach a work function - added im_copy_file() - added im_insertset() - im_insertplace() allows small to be outside big - added im__colour_difference(), colour ops now work on any image format - added im_col_display_get_table(), so display tables are now shared by name - added im__colour_unary() - drop "set" postfix from names, so "insert" can now take a vector of positions - deprecate all the "_raw" variants, not really necessary now - removed "contrib", not very useful anymore - added im_header_as_string() - im_malloc()/im_free() now call g_try_malloc()/g_free() ... removes confusion over whether to use im_free() or g_free() for things like im_header_string() - added im_history_get(), im_getexp(), im_printdesc() as wrapped functions ... so you no longer need the "header" program - image vectors from Python work, woo 25/3/09 started 7.18.0 - revised version numbers - updated vipsmanual - revised manpages - removed name and "changed" from vipsobject since we don't use them yet - explicitly link with stdc++ for nohalo etc. stuff - wrap im_gauss_imask_sep in C++/Python 6/3/09 started 7.17.3 - revised nohalo - remove fading stuff from im_render() -- cleaner and simpler - configure spots support for "restrict" - reset dcm:display-range on magick read to help DICOM - saner im_buildlut() behaviour - added im_gauss_imask_sep() - allow open and view of truncated images (thanks Joe & Rachel) - revising rounding on im_affine*() coordinate transforms to make them more stable - added Radiance write - added im_float2rad() - added IM_CODING_RAD, support where it makes sense (extract, flip, rotate, etc.) - IM_PROGRESS env var - docs for rad2float and IM_CODING_RAD 3/3/09 started 7.17.2 - im_magick2vips.c: allow funky bit depths, like 14 (thanks Mikkel) - isradiance was returning TRUE too often - radiance loader now loads packed RGBE/XYZE instead of unpacking to float - added im_rad2float() 11/10/08 started 7.17.0 - merge vips-7.16 branch back into trunk - bumped version number to 7.17.0 - re-added type.[hc] - added vipsinterpolate and im_affinei - added yafrsmooth interpolation - added yafrtest - added yafrnohalo - ubuntu 8.10 changes - interpolators get an output pointer, not region - tuning for bicubic - revised transform / clip code, we now do corner not centre - yafr-smooth reworked along the lines of bicubic - cleanups after yafr hacking - added affinei_all - don't set im_error() on failed callback - moved im_format_t to VipsFormat, now sits over VipsObject - IM_FORMAT_FLAG_PARTIAL -> VIPS_FORMAT_PARTIAL - updated docs - interpolators use type introspection - added vips --list classes, does formats too - include sys/param.h to get PATH_MAX in more places - added vips_format_get_flags() - oop, forgot to check for cancel during tiled tiff write - don't use mmap for tiff read: no performance advantage, chews up VM - VIPS_INTERPOLATE_SHIFT bumped to 12, we need the extra precision for u16 gel data - added string->double transform for cmdline args - merged class-params branch back into trunk - IM_FREE() can do "const char*" variables - im_buf_t renamed as VipsBuf - added vips_object_to_string() - added "nickname" and "description" properties to VipsObject - shift/and/or/eor ops were broken for non-int types - added nohalo interpolator - updated format docs - IM_INPUT_INTERPOLATE() now used by affinei and affinei_all - added vips_object_new - resamplers/interpolators now in a resample package - removed yafrnohalo.c - added matio as a dependency - added Matlab save file read - added Radiance file read - better file-not-found messages 11/9/08 started 7.16.3 - oop typo in manpage for im_project() - doc fixes - returning non-zero from eval callbacks was not always stopping computation 11/9/08 started 7.16.2 - added --without-v4l option - added -no-undefined to libsrcCC build, so we get a libvipsCC.dll - removed the swig dependency: we include the generated bindings in the distribution tarball 6/9/08 started 7.16.1 - trigger eval callbacks on tiled tiff write - added vips as an im_format_t - added im_format_write()/_read() convenience functions - more cleanups for the format API, argh - removed win32/ directory now mingw finally makes DLLs correctly - removed the windowed spcor for now, it has some edge effects 24/8/08 branch for 7.16 - renames and version numbers - load plgs from libdir as well as libdir/vips-x.x for compat - complex -> complex conversion was broken - refstring <-> gstring transforms - better behaviour with Magick non-presence - added --enable-links switch to configure ... we no longer make the bin/im_* links by default - started a 'format' section in the docs - configure fails if no gettext found - revised po/ - released as 7.16.0! 25/5/08 fork for loadable image format branch - image load/save in non-vips format code moved to own dir - simple format searching added - some cleanups for vips load - im_open() simplified - add im_format_flags - only consider formats with a save method in im_format_for_name() - oops, format sort order was reversed - im_filename_suffix() includes "." in suffix - merge back into trunk for 7.15.1 - remove im_ispng(), im_png2vips_header() etc. & friends - add "vips --list formats" - rename VBuf as im_buf_t for consistency - add type.[hc], start of new type system - removed man pages for IM_MIN, MAX and RINT to avoid case confusion on OS X / win 7/3/08 started 7.15.0 - MAGIC constants should be tagged as unsigned - write MAGIC correctly on sparc/powerpc machines (thanks Joe) - oop, we were still making fade threads even when not fading - tiny cond jump fixes for valgrind in colour.c - remove -lstdc++ from libs, except on windows - push Magick cflags earlier in the include order to make it easier to pick GraphicsMagick over ImageMagick (thanks Mikhail) - fix the en_GB translation - use meta to preserve resunit between tiff load and save - small doc improvements - read and write CMYKA tiff (thanks Doron) - performance improvements for morphology ops, esp. when zooming out - oop, im_render() was broken for mask == NULL - better support for multiple Python installs (thanks Jay) - better IM_SETSTR() stops some warnings - im_histcum() works for signed histograms - better rounding for im_conv(), im_convsep() - tiny speedup for im_conv() - better /0 test for remainderconst - revise i18n configure, get rid of intltool - command-line IMAGVEC input could segv with non-vips image output - added .tobuffer()/.frombuffer(), .tostring()/.fromstring() to Python binding - add PIL_mode_from_vips () and vips_from_PIL_mode () utility functions - update docs for new Python stuff - FIND_ macros no longer search for stuff, you have to specify prefixes if the packages are not on the default path (or in $prefix). This avoids some accidents on some platforms - configure prints a summary of optional packages found at the end - im_lhisteq() checks for window too small - added invalidate callbacks - now tests for MagickWand before ImageMagick (thanks Adam Turcotte) - added "-rotate" option to vips2dj - added man page for im_resize_linear - better jpeg-in-tiff YCbCr read (thanks Ole) - oops, invalidatefns were not being freed on im__close() - VMask() can init from std::vector, so Python can init from [] - added IM_LIBDIR, im_guess_libdir() - load plugins from libdir/vips-x.x on startup - added meta get/set int/double/string/area/blob/GValue to C++ API - include time_t in vips.h, thanks Nicolas Robidoux - lock global image list (thanks lee) 25/1/08 started 7.14.0 - bump all version numbers for new stable - better CMYK JPEG read (thanks Ole) - add __str__ to VError in Python (thanks Ole) - revert the dynamic wrapping for Python :-( next version! - added VImage::convert2disc (thanks Ole) - you can now set the jpeg quality factor for tiff pyramids (thanks Joe) - you can now shrink jpegs during read, see "man im_jpeg2vips" - added CMYK JPEG write - optionally use GraphicsMagick (thanks Bob Friesenhahn) - look for MAGICKCORE_HDRI_SUPPORT (thanks Marcel) - set icc profiles in tiff pyramids explicitly (thanks Joe) - add --without-cimg configure option - add im_maxpos_subpel - make im_abs compile without liboil - add im_align_bands - fix type overflow in complex division - fix im_cross_phase and im_addgnoise (Tom) - updated docs, C++ and python - header no longer stops on error - C++ dummy2.cpp helps OS X linking 12/12/07 started 7.13.3 - added "include " to VImage.cc to help gcc 4.3 - started moving the python binding to dynamic wrapping - added im_wrap(), im_wraptwo(), im_phasecor_fft(), im_cross_phase() (Tom) - memleak plugged in im_save_string_setf() - bugfix in and docs for im_gradcor() (Tom) - use Glib macros to make im_msb work on big-endian platforms (Tom) - use Glib macros to get rid of needless compile warnings (Tom) - fix type overflow in im_c2ps/im_abs (Tom) 31/10/07 started 7.13.2 - build cimg on windows fixes - various include cleanups, updated man pages - break im_wbuffer() out to a separate API - use im_wbuffer() to make im_vips2jpeg() compress in the background - also im_vips2png(), im_vips2tiff(), im_vips2ppm() - revised evaluation progress system - new evalstart/evalend/preclose callbacks fix over/underflow reporting - but the meaning of evalend has changed in a non-backwards-compatible way :( use preclose instead ito get the old behaviour - added "--vips-progress" flag to turn on a simple eval progress tracker - make im_spcor[12] static, im_spcor is wrapper (Tom) 28/9/07 started 7.13.1 - vips2dj can print RGB images - oop, include missing - add protos for generate/iterate function args, fix warnings - add cimg package, we now have C++ source inside VIPS, sigh - added OUTPUT_DOUBLEVEC and OUTPUT_INTVEC, use for im_maxpos_vec() and friends 29/8/07 started 7.13.0 - we now have a trunk and the version is 7.13.x, woo! - move manpages into a separate man/ dir ... speeds up builds a lot on windows - don't install malkovich - don't fail on unknown args for python (thanks Simon) 1/8/07 started 7.12.5 - im_embed() is more general ... x and y can be negative - predicate.c is smaller and cleaner - libsrcCC link improvement from Pablo - support 32/64-bit ImageMagick as well (thanks Marcel) - better im_magick2vips() for Q8 ImageMagick - split repository to trunk/branches ready for a stable 7.12.x branch 27/7/07 started 7.12.4 - proto.h had vars called small, breaking on win32 - more python fixing, we now have working matrices too 17/7/07 started 7.12.3 - fix to VImage.i for gcc 4.2 (thanks Damir) - eek, off by 1 for more than 1 band hists - needed a slightly larger worst-case buffer in im__b64_encode() - tiny cleanup for make_hI() prevents cond jump on ui in valgrind - --disable-threads was broken again - remove .svn dirs from dist - now passes distcheck again 17/7/07 started 7.12.2 - added im_bandmean() - added support for TIFFTAG_PREDICTOR (Andrey Kiselev) - fix TIFFOpen() mode snafu (Andrey Kiselev) 11/5/07 started 7.12.1 - memory.c abort()s with DEBUG - oops, im_bits_of_fmt() manpage was not being installed - im_histcum() can do all image types - updated NEWS - added im_csv2vips_header() - command-line csv read was broken (thanks Tom) - removed length limit on argument vectors (Tom) - added IM_PREFIX, configure-time install prefix - oop, turned off memory.c DEBUG - fix some bogus gcc 4.1 warnings with im_open_local_array() - better vips usage message - oops, IM_ANY missing from im_demand_hint() manpage (thanks Shahid) - just warn if plugins fail to load in im_init_world() - expose Vargv and make refblock public rather than private so that subclasses of VImage can add vips-style member operations (thanks Pablo) - oops, im_initdesc() needed to have bbits set correctly (thanks Shahid) - make VError derive from std::exception more officially - woo, got exceptions working in SWIG - soname version bumped to 12.x.x - oops, added vector ops to Python - check for overflow of int in return of strtol in dispatch system (Tom) - add im_[di]mask_[xy]size to dispatch system (Tom) - add im_gradcor(), im_grad_[xy] (Tom) 26/3/07 started 7.11.21 - ooo, added %include "std_except.i" & friends to VError.i, VImage.i - im_init_world() is more lenient about recursive invocation - im_gbandjoin() falls back to im_copy() for 1 input image - race condition fixed in im_render.c (thanks Simon) - bump for 7.12!!! 26/1/07 started 7.11.20 - another fix to im_region_image() (thanks Mikkel) - tiny speed up to im_rect_includesrect() - avoid recursive invocation in im_init_world() (thanks Christian) - fix to extract_prefix (thanks Christian) - buffer cache is now per thread - combine buffer unref and ref in a single operation to reduce malloc/free cycles - new internal API for passing regions between threads means we can remove buffer locks - more buffer/region sanity checks, plus a memory barrier - lock around error buffer changes - im_vips2mask() was wrong for nx1 m-band images - liboil back to "test" - add buffer_cache_list to avoid GHashTable _insert()s - oop, --vips-concurrency was broken - renamed (in dispatch layer) im_and/or/eor_const -> im_and/or/eorimageconst for consistency - C++ API wraps IMAGEVEC, DOUBLEVEC, INTVEC arguments - oop, IMAGE % vector was broken 21/12/06 started 7.11.19 - added im_linreg() (Tom) - various C++ API polishes, plus a bugfix (Dennis Lubert) - vips.spec split to devel and python too (Dennis Lubert) - be more explicit about sizeof(magic) - init magic to native order by default (thanks Dennis) - Hist becomes im_history_get() - new history mechanism is faster, uses much less memory, and removes duplicate lines - added im_get_option_group() - added official im_concurrency_set()/_get()() - don't read bbits from vips files ... set ourselves from bandfmt - oops add RGB16 and GREY16 to C++ header - --list packages option to vips.c - updated docs to 7.12 - oops, im_region_image() snafu was causing a lot of recomputation - make im_mpercent() suck a little less - EXIF save was a bit bOrked ... cause of mac crashes? - im_histgr(), im_heq(), im_hist() all number bands from zero now - fix stride in liboil calls - set RGB16 on 16-bit RGB ICC export 29/11/06 started 7.11.18 - added im_buffer_t so regions can share calculated pixels: 2-3x speedup on the benchmark - im_region_local() -> im_region_buffer() - im_sharpen() order change to help sharing - im_invalidate() clears buffer caches - add sentinel attributes - add some missing im_demand_hint()s - paint ops invalidate the output image - fix nothread eval - raise threads limit to 1024 (thanks Christian) - manual redone - vipsCC python init() hooks - add liboil dependency - use liboil for im_abs(), im_add(), im_divide(), im_floor(), im_multiply(), im_subtract(), im_lintra(), im_avg(),im_deviate() - quiet libtoolize test (thanks Tom) - im_benchmarkn now regrows image each time - strip meta from sample2.v ... saves a lot of mem (esp. Hist) - added im_isscalar() (Tom) - added IM_REGION_ADDR_TOPLEFT() (Tom) - reduce size of im_rightshift_size.c to help compile (Tom) - make im_stop_many(NULL) safe (Tom) 24/11/06 started 7.11.17 1;5Q - better benchmark script makes graphing easier - double-buffer image file writes - reuse write threads - clean up threadgroup / iterate / generate - added im_benchmarkn to make it easier to make a CPU-bound op on large machines - im_cache() failed for cpus > 1 1/11/06 started 7.11.16 - moved im__convert_saveable() into im_copy() (thanks Christian) - missing gobject dependency (thanks Christian) - --enable-threads was broken (thanks Christian) - eval without theads was broken (thanks Christian) - LIBADD libvips.la to libvipsCC.la (thanks Simon) - benchmark.sh is now plain sh, not bash - set ORIENTATION_TOPLEFT in im_vips2tiff (thanks Josef) - oops, im_vips2csv() output separator was broken - added im_benchmark2 - move XYZ2Lab LUT build outside the eval thread 30/10/06 started 7.11.15 - print leaked windows - oops, race condition in im_window_unref() - integrated im_region_window() into im_region_image(), tiny speed up 6/10/06 started 7.11.14 - ifthenelse and affine dhints revised - buildlut no longer outputs x cods - configure asks for glib >= 2.6 (we need GOption) - configure uses AC_TOOL_CHECK to find tool names to help cross-compiling. - better configure test for libexif - add C++ include ... include in a namespace - added im_benchmark / SMP benchmark script - add im_maxpos_avg() and im_point_bilinear() (Tom) - make im_region_free(NULL) safe (Tom) - link in manpages for im_contrast_surface (Tom) 8/9/06 started 7.11.11 - add im_norm_dmask() - removed old code for gradient and lindetect - internal decls split from proto.h to help SWIG - test for python and SWIG during configure - added python dir for the binding - python binding done! - oops, --without-python was broken (thanks Tom) - added python/test - add im_lu_decomp() im_lu_solve(), rewrite NR type functions in terms of these (Tom) 23/6/06 started 7.11.10 - still more im_affine() rounding/clipping tweaks - ignore "--" arguments to vips.c - im_init_world() also sets g_*_prgname() and loads plugins - add manpage for im_init_world() (oops) - error_exit() prints prgname - various cygwin fixes - fix cache thread assert failure (thanks Joe) - "header" now uses GOption, slightly different args, will loop over args - fixed assert() overenthusiasm in im_prepare() - im_csv2vips() now has separate whitespace / separator tables - add im_rightshift_size() (Tom) - add im_maxpos_vec(), im_minpos_vec() (Tom) - add im_norm_dmask() (Tom) - make im_free_[di]mask(NULL) safe (Tom) 23/6/06 started 7.11.9 - back on sourceforge CVS again - require openexr 1.2.2 or greater - range check xy on im_insert*() for sanity - VMask::invertlut decl removed (thanks Jean) - added \"all\" option to vips.c 17/5/06 started 7.11.8 - debrokened openexr read - added im_tile_cache() - added tiled read to im_exr2vips() - im_tiff2vips() now uses im_tile_cache() rather than its own cache ... faster in some cases, less RAM use in some cases, saves 200+ lines - removed 'broken' read option from im_tiff2vips() - read/write doubles with g_ascii_strtod() and friends where appropriate - add a "thread" member to region to help sanity check region ownership - saner threadgroup fixes a race problem on gcc 4.0.3 / amd64 - added im_vips2csv() - im_open() now does CSV read/write too - oops, broke vips main prog for function name in argv1 case 22/4/06 started 7.11.7 - split vips_png.c to im_vips2png.c and im_png2vips.c - added OpenEXR dependency - added im_exr2vips(), im_exr2vips_header() - added im_isexr(), im_open() knows about OpenEXR - added im_contrast_surface(), im_contrast_surface_raw() (Tom) - added im_msb(), im_msb_band() (Tom) - im_scale() sets Type on output - added RGB16, GREY16 types - im_*2vips() set these types if appropriate - configure fixes for mac - vips main prog uses GOption - im_icc_* locks around calls to cmsDoTransform() to avoid corruption on SMP machines - add im_prepare_many() (Tom) 10/3/06 started 7.11.6 - typo in manpage and header for im_rect_dup() (Tom) - don't abort image load if XML read fails - added im_video_test() ... test video source - oops, lcms .pc finder was not working - clipping problem in im_affine() fixed (thanks Clare) - test for attr support in libmagick - im_text() returns an error for empty string - im_falsecolour() scale reversed - im_remosaic() could crash on bad mosaics - configure changes to fix --without-magick, lcms and fftw (but sadly we now require .pc files for these libs) - im_vips2jpeg() automatically converts to 1 or 3 band sRGB uchar for write - also im_vips2png() - added im_project() 20/2/06 started 7.11.5 - added im_csv2vips() - commas in filename options can be escaped with a '\' - raise tile buffer limit (thanks Ruven) - im_spcor() and im_fastcor() have prettier borders - im_fastcor() returns sum of squares of differences, not sum of abs of differences 18/11/05 started 7.11.4 - small win32 fixes, thanks Juan - added im_flood_blob_copy() ... a temporary hack - much faster im_histplot() - read RGBA palette-ized PNG images more robustly (thanks Tom) - turn on -ms-bitfields automatically for mingw 26/9/05 started 7.11.3 - better error recovery for im_binfile() file too large - all raw files now use mmap windows, so (eg.) ppm and analyze reads can go >2GB - remove DISABLE_COMPAT ... you now have to define IM_ENABLE_DEPRECATED to get broken #defines - fix to build without exif, thanks Chas - use native win32 API for seek()/truncate() to work with large files - use attribute to check printf-style args with gcc - fix gcc4 warnings - removed ebuild, since it's in gentoo now - im_magick2vips() sets meta from attributes (good for dicom) - im_magick2vips() writes many-frame images as tall thin VIPS images - im_histcum() was broken for vertical histograms - im_histnorm() is neater - simpler and faster inner loop for im_conv() and im_convf() avoids gcc4 bug - appendc() was reading past the end of the buffer on MSB machines 13/6/05 started 7.11.2 - im_copy_set() was messed up in 7.11.1 - put into CVS, phew - fixed a rounding bug in im_affine() ... should no longer get black edges on image resize - if TIFF open fails in im_open(), try going through libmagick - merge requires all bands == 0 for transparency (used to just check 1st band) - 16 bit LAB TIFF read/write was wrong - new GType for refstring makes it visible from im_header_map() - jpeg loader attaches exif data (and human-readable meta fields) - jpeg saver writes any exif data - meta not wiped by im_*incheck() in a "w" image - meta keeps traverse order - now require glib >= 2.4 - require libxml-2.0 for meta save and new history mechanism - no more .desc files, history saved in XML after pixel data - i/s/d meta fields saved there too - added base64 encode/decode - added blob header write - added a save string type: types which define transforms to and from the save format get serialized - GValue meta API now exposed, since we can serialise anything - jpeg loader loads ICC profiles - jpeg saver saves ICC profiles from the VIPS header - src/header.c knows about meta system - added im_analyze2vips(), im_grid(), im_raw2vips() - extract/grid/replicate/zoom were not setting TRANSFORM flag - better falsecolour LUT - less stupid + more portable read/write of VIPS header - better im_updatehist() - jpeg load sets vips xres/yres from exif, if possible - jpeg save sets exif xres/yres from vips, if possible - icc_export and icc_transform attach profiles and intents to output images - added im_icc_import_embedded() to import with an embedded profile - split vips_jpeg.c into two, it was getting too big - added im_cp_descv(), im_cp_desc_array(), funcs use them - removed im_append_Hist() from API - fixed meta copy bug - better history copy, removed nonsense about 1st line of Hist being special - tiff read/write now reads/writes ICC profile from meta - edvips rewritten to remove stupidness, and can now set xml - header can now print xml extension block - IM_ prefix for colour temp names 1/6/05 started 7.11 - added im_copy_morph() - im_region_region() allows Bands and BandFmt to differ, provided sizeof( pel ) is the same ... makes im_copy_morph() work - added im_meta*() functions (MW) - im_header_*() rewritten for meta - added im_header_exists(), im_header_map() - use pkg-config to find libpng and ImageMagick - added im_lineset() - added im_extract_areabands() (JF) - added im_copy_from() (JF) 15/4/05 started 7.10.12 - im_ifthenelse just evals left/right for region all zero/all one - also im_blend - swap g_setenv() back to plain setenv() so we work with glib 2.2 9/4/05 JC started 7.10.11 - docs no longer have broken links - fixed memleak in im_text() 8/4/05 - one bit tiff read was sometimes reading a byte too far in each scanline 14/1/05 started 7.10.9 - im_filename_split() will now usually work for filenames containing ':' characters - added im_render_fade() for fancier nip2 image repaint - added "ccittfax4" as a TIFF compression option - fix all 64-bit compiler warnings - "," allowed as column separator in mask read - better at spotting singular matrices - small im_render() tidies - glib dependency reduced to just 2.0, but untested ... helps people building on older systems who aren't interested in nip2 - removing leading spaces from IMAGEVEC arguments - load non-interlaced PNGs more efficiently - 1 point mosaic functions work on more image types - better memory allocation debugging info - local memory on regions can shrink as well as grow - shut down threadgroups on render if no dirty tiles - limit number of simultaneous renders - higher mmap window threshold - allow max == -1 for unlimited render cache - 'priority' marks non-suspendable renders - im_embed() mode == 4 paints white pels - im_tiff2vips() was broken with --disable-threads - oops, im_errormsg() compat macros were GCC only - larger default tile size and strip height - tiff write sets PHOTOMETRIC_CIELAB for vips TYPE_LAB images ... so we can write float LAB as well as float RGB (thanks Ruven) - also 16 bit LAB TIFF write - im_render() rewritten 20/11/04 started 7.10.8 - im_sharpen() is ~15% faster - more quoting for MAGICK finder - im_XYZ2Lab() uses a LUT rather than cbrt(), 5x faster - --disable-threads removes gthread dependency completely (thanks Simon) - intercept TIFF warnings as well as errors ... stops occasional libMagick exceptions - add im_init_world() to im_init() as well to help backwards compat (thanks Simon) - im_icc_present() function description was broken, thanks Jay - oops, libtool library versioning was wrong, thanks Jay - can now make TIFF pyramids of any non-complex image type (was uchar and LAB only), thanks Ruven - 1st order mosaic code now works for LABQ too - build system changes to make "make distcheck" work - RPM .spec files fixed up and updated by configure (thanks Simon) - tiny cleanups for vdump - use g_setenv()/g_getenv() - tiny improvements to IM_FREE*() - tiny VImage debug print fixes (thanks Jay) - swap off_t for gint64 to fix LARGEFILE support on win32 - computation feedback now uses gint64 for number of pels, so we give feedback correctly on images with >2**31 pels - other small fixes for >2**31 pels in an image 10/11/04 started 7.10.7 - im_histnD() was not checking BandFmt (thanks Kirk) - improvements to threading system speed up non-vips output in some cases - use cbrt(x) where we can ... 10x faster than pow(x,1.0/3) on win32 - typeo in im_text() when built without PANGOFT2 (thanks Stefan) 1/11/04 styarted 7.10.6 - tiny doc fixes - scripts now only depend on 'vips' program - im_open( "r" ) is now lazier ... for non-VIPS formats, we delay read until the first ->generate() - so im_open_header() now deprecated since im_open("r") is identical - now looks for fftw3 as well as fftw2 ... slightly faster ffts 19/10/04 started 7.10.5 - fix to light_correct (thanks Jay) - edvips knows about xoffset/yoffset - better vips enum<->char conversions 4/10/04 started 7.10.4 - man page fixes (thanks Jay) - removed last csh scripts (thanks Jay) - scripts default VIPSHOME to $prefix (thanks Jay) - doc build system tidies - im_rank() edge padding was wrong - im_vips2tiff() can now embed ICC profiles 22/9/04 started 7.10.3 - mildly better im_vips2tiff() - *, -, +, /, % between two images now work for mixed number of bands - im_free() was missing a man page - revised documentation 1/9/04 started 7.10.2 - C++ .pc files were still set for 7.9, grr - im_insertplace() didn't check compatibility of images (thanks Matt) 27/7/04 started 7.10.1 - set default stack size explicitly to help platforms with a very low default - 16 bit RGB tiff read was broken (bug introduced in 7.9.5, thanks Haida) - !pangoft2 was broken, thanks Kenneth - win32 build fixes 12/7/04 renamed as 7.10.0 - added NOCACHE function flag ... stops nip memoising video & paint ops - added im_extract_bands() ... takes out many bands from an image - im_vips2tiff() scanline write speed up for area pipelines 10/6/04 started 7.9.6 - tiny polishing of im_ppm2vips() - im_blend() can now work on labq - boolean ops all work on float/complex images (by casting to int) - im_maplut() was broken for 1 band image + many band lut + >8 bit output - im_lintra_vec() now handles 1 band image and many band vector to make many band image - oops, im_lintra_vec() was missing a man page - im_measure() can work on labq - im_lhisteq() uses new embed mode, _raw() version is one pixel smaller, sets Xoffset/Yoffset for new origin scheme - generalised im_tone_build() to any image type to make im_tone_build_range() 20/5/04 started 7.9.5 - tiff output res can be a single number too - added im_text() to make a bitmap from a string with pango - im_tiff2vips() does 16 bit RGBA - im_binfile() was broken since 7.9.2 due to im_mapfile() change - im_ppm2vips() now works for 16 bit images - added im_copy_swap() ... copies, reversing byte order - im_resize_linear() was broken for some images, thanks Javi 8/3/04 started 7.9.4 - oops, config.h include missing in a few places - im_vips2tiff() can now write 1 bit images - im__find_lr/tboverlap() now exported to nip - better edge tile handling for tiff read/write (thanks Ruven) - added extend-pixels-from-edge mode to im_embed() - im_conv*(), im_rank(), im_stdif(), im_dilate(), im_erode() all use it to expand their input, so their output now has guess borders, not black borders - im_fastcor() now does an im_embed( 1 ) on the output ... the zero borders were very annoying before, since you would usually be searching for the minimum point - no change to im_spcor(), since you will usually be searching for the maximum - better im_render() cache behaviour under heavy loads - im_affine() revised * clip, resample and transform is now pixel-perfect for all inputs (I hope) * uses the new embed to make sure there are no black borders from edge interpolation * about 20 - 30% faster - policy change: Xoffset and Yoffset are now set by all operations to record the position of the input origin in the output - im_replicate() is much faster for some cases - added tile and mirror flags to im_embed() - added im_cache() convenience function - better ETA for image calculation - im_tiff2vips() now has a "broken" option so it can read tiled tiffs made with earlier versions of vips - on convert float to int format, now does floor() not rint() ... more 'mathematical' - added im_rint() - im_sharpen() now uses a gaussian mask - im_convsep() more resistant to int overflow problems - added im_make_xy(), avoids rounding problems with the old float-based thing - im_profile() now makes vertical images for a vertical profile - added im_vips2tiff() option to set the resolution in inches not cm (thanks Andrey) - im_binfile() is now exported 6/2/04 started 7.9.3 - added an im_init_world() to im_open(), to help old progs - renamed VSemaphore as im_semaphore_t - started using libtool library versioning - now uses g_module_*() in place of dlopen() - now uses pkg-config instead of vips-config (thanks Simon) - fixes to vips.h for _ADDR() with DEBUG on (thanks Konrad) 10/12/03 started 7.9.2 - patches for freebsd, thanks Lev Serebryakov - vips2dj knows about my colour laser printer - added i18n support, glib/gmodule/gthread dependency - im_error*() API revised to be more i18n friendly - List type removed, now uses g_slist - VBuf added, some more utility funcs pushed down from nip - im_thread stuff removed, now uses g_thread - im_lock stuff removed, now uses g_mutex - im_semaphore_t renamed to VSemaphore, not sure this is a good idea - build with --disable-threads to turn off threaded render - #include now pulls in most of the public API, you shouldn't need other vips includes very often - im_close() is better at cleaning up if there's an error - inverse FFTs could fail for wider-than-high images with fftw - better im_icc_transform error messages - bug fix in im_render with large caches - im_binfile() now has an offset parameter - im_mapfile()/im_unmapfile() now work on IMAGE and record the length of the file they mapped ... this lets VIPS successfully unmap a file if it changes size while it's open 20/10/03 started 7.9.1 - threadgroups now have their own kill flag - im_plotmask() now does anti-aliasing - im_iterate() fix for operations on mmap window images (thanks Clare) - im_writeline() stops on kill - fix for im_fwfft() segv for wider-than-high real images (thanks Andrey) - fix for im_fwfft() to work for non-square real images (thanks Andrey) - can now read and write 32-bit IEEE float TIFF (Andrey Kiselev) - clean-ups for colour.c (Andrey Kiselev) - no longer lets you make an image with width|height|bands == 0 (thanks Joe) - im_vips2tiff(), im_vips2*jpeg*(), im_vips2png(), im_vips2ppm() could sometimes fail for mmap window input images (thanks David) - added IM_RECT_HCENTRE(), IM_RECT_VCENTRE() macros 20/8/03 JC - started 7.9.0 - added im_rank_image() ... im_maxvalue() a special case of this - im_subtract() goes up to int earlier for better value preserving, thanks Haida - im_rank() much faster for large windows, correct result on all platforms (dratted memcpy() was causing problems before) - fixed problem with libMagick config if installed somewhere strange - fixed problem with include order in library compile - added --without-magick configure option - added im_render(), threaded background image paint - added im_replicate(), replicate an image horizontally and vertically 31/5/03 JC - started 7.8.11 - fixed a problem with relational operators and some combinations of input types (bug introduced in 7.8.9), thanks Haida - vips-7.8 script overrides VIPSHOME environment variable - better im_guess_prefix - stupid light_correct script no longer uses /pics/tmp - added batch_crop script 22/5/03 - started 7.8.10 - the JPEG writer can embed ICC profiles in output images ... although I've yet to see it make any difference :-( test this carefully at some point - fixed a possible coredumper in jpeg write - jpeg read now spots truncated files - im_invertlut() now makes an image, not a mask ... sorry :-( - im_histnD() makes an n-dimensional histogram from an n-band image - im_col_pythagoras() patch - IM_NUMBER() now returns int not size_t - new win32 build system from Juan and friends, based on tmake - sample project files for MSVC added, thanks Juan - win32/ subdir now has the win32 build systems - spec/ subdir now has the spec files for building RPMs - dist now includes formatted documentation - license change: VIPS is now LGPL, nip stays GPL ... this means proprietary programs can link against the vips library - had a report of a working VIPS build on a 64 bit system (!) - im_log_dmask() now includes all of the negative lobe, thanks matt - vips-7.8 start script now auto-relocates - im_spcor_raw(), im_fastcor_raw() now exported 29/4/03 - started 7.8.9 - changes to build to help MSVC - oops, makedef.pl missed out function names with an initial cap, and error_exit() - im_min() and im_max() gave random wrong results for >1 thread on >1 CPU machines (bug introduced in 7.7.20), thanks Joe - vips.c no longer generates C++ wrappers for functions with no image argument (thanks Haida) - im_invertlut() now wrapped by hand in VMask.cc - C++ docs updated - added im_open_header(), returns an IMAGE with just width/height/etc and no data - ... so now "header" will print useful stuff even on truncated files - tiff writer knows about alpha (thanks Jenny) 7/2/03 - started 7.8.8 - build failed with lcms turned off - im_spcor() could segv for 16bit images (thanks Joe) - im_tiff2vips() read resolution expressed as pixels/cm incorrectly - im_vips2tiff() tries not to write mad resolutions - header and im_open file type tests reordered for slight speedup - im_copy_set() had a broken dispatch function for xres/yres - im_fwfft() exploits libfftw real -> complex transform if possible for a 2x speed-up (thanks Matt) - im_invfftr() added for complex -> real inverse transform for 2x speed-up (thanks Matt) - im_freqflt() now uses im_invfftr() for real result and speedup - im_flipver() could segv on some inputs, thanks Clare - relational operators now work on complex - relational rewritten ... now fractionally slower, but 1/3 the size - vips2dj -1:1 produced incorrect height - better overlap-too-small detection in mosaicing code - im_system() can have NULL output - global balance ignores overlaps with only transparent pixels 3/1/03 - started 7.8.7 - worked in patch from Hans Breuer (thanks!) - png read/write with im_png2vips(), im_png2vips_header(), im_vips2png(), im_ispng() - im_errorstring() and im_col_displays() are now functions not externs (helps DLLs) - many include fixes to help native win32 build - added libMagick support, 78 file formats now loadable with im_magick2vips(), im_magick2vips_header() and im_ismagick(), w00t - now installs vips.m4 to $prefix/share/aclocal - added im_icc_export_depth() ... export to device space with a specified bit depth (8 or 16) - vips.def now rebuilt with custom rule in libsrc/Makefile.am - removed externs im_Type, im_BandFmt, im_Coding, im_Compression to simplify DLL build - im_mmap() -> im__mmap(), since it's supposed to be an internal function - new vips-7.8.x/proj directory holds unsupported sample makefiles and config.h for building with the MSC toolchain - new scripts batch_image_convert and batch_rubber_sheet (thanks Joe) - added the RPM .spec files to the main distribution - InitializeMagic() now passed "" rather than NULL to avoid assert() problems on some libMagic versions 2/12/02 - started 7.8.6 - now reads 8-bit RGBA tiff - C++ build guide fixes (thanks fsicre) - im_Type2char array text slightly messed up - global_balance is safer for complex mixed mosaics - removed im_lintra() fallback to im_copy() for scale == 1, offset == 0 ... too confusing - im_tiff2vips() now reads 16-bit LAB - added im_Lab2LabS() and im_LabS2Lab() 5/11/02 - started 7.8.5 - fix for mmap window of local region ... caused im_iterate() to break sometimes for large images, in turn occasionally breaking im_max()/im_min()/etc. (thanks Joe) - tiny speed up for im_rot90()/270() - on install on win32, add .exe suffix for links - vips.c knows to remove .exe suffix for linked commands - added im_errormsg_system() ... decode win32 error codes too - pagesize calcs for roving mmap windows were messed up on win32 (thanks Kirk) - some TODO cleanups - global balance broke horribly if you had filenames with spaces in (thanks Clare) 31/10/02 - started 7.8.4 - im_unmapfile() includes mixed up on mac os x - libtool patched for mac os x - vips.c sets numeric locale to "C" 27/10/02 - started 7.8.3 - configure fixes help mac os x - im_guess_prefix() adds ".exe" suffix on w32 if not there - changed im_measure() error messages to number bands from 1 - added func descriptor for im_read_dmask() to help nip, updated C++ API, docs 21/10/02 JC - started 7.8.2 - tries rand() if random() is not available - tries mktemp() if mkstemp() is not available - turns off realpath() if not available - added IM_DIR_SEP/IM_DIR_SEP_STR directory separator character/string - added IM_PATH_SEP/IM_PATH_SEP_STR path separator character/string - added im_path_is_absolute() - vips.c knows to link to vips.exe on win32 - spot mingw* and set BINARY_OPEN - open images in binary too (since we now read() the header) 10/10/02 JC - im_lintra() and im_lintra_vec() were broken for complex images :-( thanks matt - renamed im_and() as im_andimage(), im_eor() as im_eorimage() and im_or() as im_orimage() ... avoids breakage in the C++ layer - added im_dE00_fromLab() - limited release as vips-7.8.0 2/10/02 - renamed as vips-7.8, woohoo - revised documentation 19/9/02 JC - started sorting out VIPS #defines ... there are now a sensible set of new names (eg. NOCODING becomes IM_CODING_NONE, LAB becomes IM_TYPE_LAB) - define IM_NO_VIPS7_COMPAT to turn off the old names - added im_mmap()/im_munmap() layer for windows portability - removed the contents of history.h .. obsolete - added IM_IMAGE_ADDR() macro 10/9/02 JC - handle errors from TIFF lib correctly - configure fixes for cygwin - CMYK TIFF write fixed - configure fixes for mingw 5/9/02 JC - im_cp_desc() now copies Xoffset/Yoffset 21/8/02 JC - started 7.7.24 - reads CMYK TIFF - reads dpi from TIFFs - better float Xres/Yres 14/8/02 JC - new header fields Xoffset and Yoffset ... used by functions to hint the position of the origin in output images - support added to c++ api and to header - im__lrmerge(), im__tbmerge(), im__affine(), im_insert(), set Xoffset/Yoffset - now uses , not for better suse w0rkage - better configure for fftw (uses libdfftw name if libfftw not found) 8/8/02 JC - large file support with mmap() windows ... had to change im_prepare_inplace() to im_prepare_to() benchmark: - system hardware: 2 x 2.5GHz P4, 1GB RAM, 15k SCSI, ReiserFS os: suse 8 (kernel 2.4.18) compiler: gcc 2.95.3, -O2, threads turned on images: fred.v, fred2.v; both 4k by 4k LABPACK (64MB) images: jim.v, jim2.v; both 15k by 15k LABPACK (900MB) time: smallest real of 5 runs, system idle vips: 7.7.23, debug on in im_openin.c, window limit set with an environment variable - benchmarks cpu-bound: im_sharpen fred.v fred3.v 11 1.5 20 50 1 2 io-bound: im_insert fred.v fred2.v fred3.v 4000 0 worst-case: im_rot90 fred.v fred3.v - results desktop: no mmap windows mmap windows cpu-bound real 0m3.712s real 0m3.970s user 0m6.010s user 0m6.390s sys 0m0.900s sys 0m1.110s io-bound real 0m1.813s real 0m1.865s user 0m0.900s user 0m0.990s sys 0m1.720s sys 0m1.520s worst-case real 0m1.344s real 0m3.039s user 0m1.270s user 0m2.230s sys 0m0.850s sys 0m3.050s not quite sure why sharpen is a little slower (4%?) ... IO speed is about the same though ... worst-case is having to constantly move windows about (500,000 page faults, vs 10,000 for no windows) again, with an image larger than RAM no mmap windows mmap windows io-bound real 2m52.759s real 2m11.172s user 0m14.940s user 0m14.890s sys 0m29.940s sys 0m26.560s worst-case real 3m35.391s real 3m50.760s user 0m19.850s user 0m26.600s sys 0m12.650s sys 0m43.130s mmap windows actually slightly faster in this case ... plus they stress the OS less 31/7/02 JC - added -lm for better lcms detect - README notes for fftw on suse8 - im_profile() sets HISTOGRAM for output image - im_copy()/im_copy_set() function descriptor no longer sets PTOP ... helps avoid LUT problems - im_subsample()/im_zoom() fall back to im_copy() for shrink/grow == 1 - im_lintra() falls back to im_copy() for scale == 1, offset == 0 - no longer use Type == LUT ... all just Type == HISTOGRAM now - im_blend() was messed up for > 1 band images :( 16/7/02 JC - started 7.7.23 - im_XYZ2sRGB() wasn't setting Type = sRGB - im_icc_import() was broken for rgb - im_header_string() had wrong return type in function database 13/7/02 JC - added im_flood_blob() - added im_open_local_array() ... C API convenience function - oop, im_flood() was missing a man page - Type == FOURIER added to help visualisation - released as 7.7.22 30/6/02 JC - JPEG, TIFF and PPM import all now set sRGB Type for RGB import - im_header_int(), im_header_double() and im_header_string() added to aid UIs - now uses gettimeofday(), not time() - for consistency with other trig functions, im_c2amph() now returns degrees not radians (ouch) - added im_c2rect() ... turn (amp, phase) to rectangular - added im_sign() ... unit vector in direction of value - better im_scaleps() ... old code was terrible - rewritten im_rotquad() ... now partial - im_icc_export()/_import() now do ABSOLUTE correctly - added im_icc_ac2rc() ... converts absolute to relative colorimetry 25/6/02 JC - added im_copy_set(3) ... like im_copy(), but set informational header fields 20/6/02 JC - added im_ceil(), im_floor() - im_Lab2LabQ was not clipping a/b range correctly - im_icc_export(), own ABSOLUTE mode - released as 7.7.21 28/5/02 JC - im_remainderconst_vec broken for float/double - added Yxy colourspace 16/05/02 JC - auug, libtool was all messed up ... redone all the autotools stuff - uses libtool convenience libraries to build vips in sections - uses config subdir for temp files and .m4 things - patched stupid suse config.guess - vips2dj patched for better raw cmyk - released as 7.7.20 12/5/02 JC - im_vips2jpeg*() and im_vips2ppm() now both partial - started updating the C++ guide - had to change the location of the C++ headers :-( all C++ progs should now have: #include this is so things can work on systems which do not have case sensitive file systems - changes for Mac OS X * im_system() TRUE/FALSE removed * searches /*/[lib|include] to get fink libs for tiff and jpeg 30/4/02 JC - several functions were missing IM_FN_PIO in their descriptor ... this was harmless for nip/ip/C, but broke the ref counting in the C++ layer - im_system() now defaults "/tmp" for temp files - STRING input and output args were broken for C++ :-( - threads exit more quickly on error - im_min()/im_max() now partial (at last) - im_remainderconst()/im_remainderconst_vec() added - --with-dmalloc configure switch - vips2dj does CMYK and mono too - im_vips2tiff() allows any number of bands (but not the right way to write CMYK, see TODO) 26/4/02 JC - old ICC profile reader removed - little cms wrapped ... configure spots it, im_icc_transform() uses it to map between two images - also im_icc_import() and im_icc_export() so you can see PCS images - im_icc_present() to test for existence of lib - README fixes 4/4/02 JC - TODO changes - oops, DEBUG left on in im_invertlut() 2/4/02 JC - im_fwfft.c/im_invfft.c now use libfftw if available ... about 5x speed up and double precision - added FIND_FFTW autoconf macro - include/vips/proto.h changes 26/3/02 JC - started 7.7.19 25/3/02 JC - im_log_dmask() was broken (thanks matt) - casts between VDMask and VIMask were broken (thanks matt) - various error msgs improvements and tiny man page fixes 13/3/02 JC - tb/lr merge first/last cache moved to per-call state for better sharing - im_remosaic() bails out faster on error and makes better error messages 13/3/02 ruven - im_vips2tiff() pyramids stop at tilesize, not 64x64 25/02/02 JC - im_remosaic() is smarter, and works better with im_global_balance() - im_affine() 2x faster 14/2/02 JC - started 7.7.18 - vips.m4 and libsrc/Makefile.am fixes for IRIX 11/02/02 JC - vips/thread.h and vips/threadgroup.h were missing extern "C" for C++ - VImage::write() now tracks dependencies, so you can write() to a partial safely ... although it's not a very useful thing to do (thanks Mike) - new VImage::print() function for debugging - added im_print() 22/01/02 JC - started 7.7.17 15/01/02 JC - im_rect_unionrect() and im_rect_intersectrect() safer for repeated args - im_video_v4l() no longer perror()s on ioctl fail for less spam 03/01/02 JC - started 7.7.16 - im_version_string() really does return the date as well now 12/12/01 JC - im_guess_prefix() extra smartness for relative path names - VImage() no longer uses tmpnam() (thanks Paul) 11/12/01 JC - renamed im_fexists() as im_existsf() 7/12/01 JC - ppm man pages added (doh) 28/11/01 JC - warnings on g++ 2.96 fixed 22/11/01 JC - started 7.7.15 - im_video_v4l() failed to compile on non-linux platforms 7/11/01 JC - im_remosaic() added - im_*merge() are more intelligent about transparency in bizarre overlaps - grr! putenv() semantics change on more recent clibs ... should be safer now 19/10/01 JC - VDisplay( "display name" ) segved on unknown display :-( thanks mike 26/9/01 JC - contrib tools get data files from share/vips/xxx area now - im_vipshome() renamed as im_guess_prefix(), reworked for new package layout - doc/ build sorted out - ... but of course, docs still need updating for 7.8 20/9/01 JC - fix to im_vipshome() - ip2 renamed as nip - split to library only ... separate ip and nip packages - new VIPS_VERSION_* macros set from configure.in in vips/version.h.in - vips.m4 VIPS finder - reworked README, doc/README and TODO - now installs to /usr/local/ by default - fmask4th.c was including varargs.h ... d'oh - include area reorganised: everything inside now ... hopefully the only user-visible change is that all plain C progs need to change: #include to: #include the C++ API should be unaltered 21/8/01 ruven - im_setupout() was missing some #includes 20/8/01 JC - started 7.7.14 15/8/01 JC - added libxml dependency for ip2 27/7/01 JC - im_conv(), im_convf(), im_convsep(), im_convsepf() now reject masks with scale == 0 26/7/01 JC - started 7.7.12 25/7/01 JC - started 7.7.11 - oop, im_histeq() and im_tonemap() also missed - better error messages from im_run_command() 23/7/01 JC - started 7.7.10 - im_sharpen() failed due to change in im_band_extract() offset 20/7/01 JC - started 7.7.9 4/7/01 JC - im_open(,"w") open() delayed until im_setupout(), very slightly safer - updated im_open() man page - im_tiff2vips() now embeds index in filename ... and it's page number (from 0), not subsample factor - finally bit the bullet ... im_extract()/im_extract_band() now number from zero (sorry!) - and im_lrmosaic()/im_tbmosaic() bandno param too 29/6/01 JC - im_region_free() now frees immediately 27/6/01 JC - im_vips2tiff() man page updated for deflate, 2 years late 22/6/01 JC - oops, limit wrong on im_rank() 21/6/01 JC - better post_install for --prefix outside VIPS's tree - -ltiff needs -lm in acinclude.m4 ... fixes configure on redhat 7.x 13/6/01 JC - started 7.7.8 6/6/01 JC - im_invertlut() added 31/5/01 JC - im_colour_temperature, im_XYZ2Lab_temp, im_Lab2XYZ_temp added - ... colour temp stuff needs sorting out properly 25/5/01 JC - added vips-config script, cf. gtk-config - --without-threads option added - did a bit of work on the C++ API docs 24/5/01 JC - added im_tiff2vips_header(), im_jpeg2vips_header() and im_ppm2vips_header() - header uses these to print fields quickly - switched to config.h - configure.in rewritten ... much nicer, fewer options, more automatic 17/5/01 JC - im_matinv() didn't free stuff correctly on singular matrix 16/5/01 JC - vips2dj now knows about 5000ps printers - allow RW mode for non-native VIPS image files, for 8 bit images 2/5/01 JC - started 7.7.7 1/5/01 JC - im_addgnoise() did not work for >1 band images 23/4/01 JC - configure options to remove support for JPEG and TIFF ... helpful for a no- dependencies build 20/4/01 JC - im_(v)snprintf() added - all sprintf()s removed 15/4/01 JC - im_affine() had a rounding problem 11/4/01 JC - tiny mosaicing bug fixed in im__lrcalcon - started 7.7.6 21/3/01 JC - new iblend code in im_tbmerge() was typo-d - mosaic1 was broken by affine too 20/3/01 JC - im_image() failed for FMTUCHAR 12/3/01 JC - started 7.7.5 - im_sharpen() uses separable convolution for big speed up - new "Print" menu 11/3/01 JC - REALVEC renamed as DOUBLEVEC - added IMAGEVEC - added IM_INPUT_IMAGEVEC - gbandjoin now has function description - new function im_maxvalue() - im_compass()/im_lindetect() reimplemented with im_conv()/im_maxvalue(), about 15% faster, works for any type, partial - im_gradient() reimplemented with im_conv()/im_abs()/im_add(), about 30% slower, works for any type, partial 10/3/01 JC - new function, im_clip2fmt() converts between any image formats ... slightly faster than the old im_clip() - legacy im_clip2us() etc. functions now just call this 9/3/01 JC - im_conv() rewritten, simpler, about 10% faster - im_convsep() rewritten, now does any non-complex type, partial, 20% faster - new functions: im_convf(), im_convsepf() for DOUBLEMASK - raw versions of each - legacy convolvers (eg. im_convbi()) removed 8/3/01 JC - new function im_blend() - new function im_lab_morph() - speed up to im_ifthenelse() - speed up to im_*merge() (uses integer arithmetic for integer blends) 4/3/01 JC - tiny speed ups to im_histgr() - speed ups to im_maplut() 3/3/01 JC - new functions: im_histnorm(), im_histcum() - im_histeq() more general - im_vipshome() --- better behaviour for relative paths 2/3/01 JC - new video package - im_video_v4l1() (video for linux) added - configure.in switches to turn v4l1 on and off 1/3/01 JC - new im_histspec() implementation ... more general, bugs removed 14/2/01 JC - better vips2dj usage message 13/2/01 JC - im_image_sanity() added, called in various places in iofuncs 9/2/01 JC - added 'check' and 'name' class member stuff to ip from ip_gtk2 - new "Plot" menu - new "Overlay" menu - more stuff in _stdenv/_list ... curried forms of head/tail etc. 7/2/01 JC - started 7.7.4 - vips2dj and vdump now use im_vipshome() 5/2/01 JC - new im_vipshome() function - min()/max() macros renamed as MIN()/MAX() - new im_load_plugins() function - vips.exe and ip now load $VIPSHOME/lib plugins at startup 2/2/01 JC - mosaicing functions now have an extra max blend width parameter 30/1/01 JC - fixed tbmerge no overlap detect 13/12/00 JC - started 7.7.3 30/12/00 JC - vips.h fixes for cygwin/wingdi conflict 27/11/00 JC - added im_vips2ppm(), im_open() imports and exports it - fixed nasty implicit output conversion problem for PIO dispatch() calls 21/11/00 JC - added im_ppm2vips() 16/11/00 JC - configure.in fixes ... jpeg found correctly now - searches for libz as well 16/11/00 JC - started 7.7.2 5/11/00 JC - speed up to lab2labq 19/10/00 JC - started 7.7.1 13/1/00 JC - oops, im_open() was missing an 'else' in jpeg/tiff load 5/8/00 JC - im_vips2tiff() now has mode string embedded in output filename - im_vips2jpeg() now has qfac in output filename - im_open() understands this 11/7/00 JC - new im_image() function ... wraps a VIPS image around a memory buffer - C++ layer changes: * now use #include * error renamed as VError * new VMask() constructors * new VImage() constructor * new VImage::data() access member * more operator equivalences: <, >, <=, >=, ==, !=, &, |, ^, % 17/6/00 JC - more consts added to vips protos 10/5/00 JC - minor configure.in changes to help solaris - removed _TIFFmalloc() and _TIFFfree() calls 9/3/00 JC - fixed rounding problem in generate grid 8/3/00 JC - fixup to im_system() temp dir 7/3/00 JC - added im_system() - small tidies 1/3/00 JC - better plugin test in configure.in 26/2/00 JC - fixes to Makefile.am in ip/src* and configure.in, to help ip find the right gtk includes on systems with more than one gtk-xxx installed 21/2/00 JC - now builds ip and ip_gtk2 16/2/00 JC - configure.in fixes for xil and some TIFF/JPEG strangeness 15/2/00 JC - im_global_balancef() was broken! d'oh - note in README about enabling video cards 10/2/00 JC - configure now searches for xil ... FIND_XIL macro - im_zoom() spots integer overflow - better shape set on region drag end in ip - better zoom-too-far handling in ip 13/1/00 JC - fixes to configure etc. to help cygwin - jpeg is now searched for too ... FIND_JPEG macro 10/1/00 JC - global_balance() now uses new affine() atuff 27/12/99 JC - mosaic1 stuff now uses new affine() funcs 21/12/99 JC - added Joe's docs - im_LabS2LabQ() rounding on a/b slightly broken for a/b == 0 20/12/99 JC - new function: im_affine() - similarity*() now in terms of affine() - tests for error return in reduce.c from maplut - small clean-ups 15/12/99 - im_version() added, new iofuncs package for it - ip did not call zero-input-arg vips functions - vips.c did not like zero-input-arg functions 6/12/99 JC - Sobel filter was a bit broken 3/12/99 JC - menu reorganisation - generate gauss mask dialog 2/12/99 JC - reworked text file IO, better error messages 1/12/99 JC - reworked .iprc filename stuff, cleaner 30/11/99 JC - better menu set switcher in calc preferences - ip now thinks it's 7.7 - did a spellcheck on the ip guide 29/11/99 JC - 7.7 started! - srgb D65->D50 converter - Negate added to arith - find similar pixel value dialog - find similar colour dialog - paste into background dialog 19/11/99 JC - adjust labq was missing - shrink image defaulted to /2 not /1 - sharpdropshadow broken - Rotate.* broken - vips-7.6.3 release 18/11/99 JC - ip didn't report space free on >2GB filesystems correctly - ip did not link statically against libXpm on solaris7 17/11/99 JC - im_histplot() failed for all 0's histogram - new profile_image dialog - man pages for im_sRGB2XYZ/im_XYZ2sRGB were broken - new colourize image dialog - new shrink image image dialog - new expand image image dialog - better doc Makefiles 16/11/99 JC - more menu reorganising - new image_to_mask/mask_to_image buttons - new match_two_images dialog - new measure_colour_chart dialog 15/11/99 JC - new custom LABQ sharpen in Image menu - configure support for SGI video (thanks Ruven) - menu fiddling in ip - new "resize canvas" menu item - im_insert_noexpand() added, no docs tho' 11/11/99 JC - new ip menu item: Image=>Adjust white/black/saturation of LabQ - fixed bug in decompose complex number - browse-icons now ignores errors - better error msg for "12 12" etc cases 10/11/99 JC - open hi-res gives proper error msg if no file found - made file-select boxes a bit more compact and clearer - updated configure.in for vips-examples-7.6 9/11/99 JC - new column start point moved - vdump now defaults to subsample 1, portrait - navigation boxes were broken - no longer shrink-to-fit if loading as high res - better positioning of zoom windows - removed some old cruft 8/11/99 JC - ooops, im_remainder() got lost somehow - refguide converted to latex and updated - cppguide updated 5/11/99 JC - libguide converted to latex and updated 4/11/99 JC - ip guide now latex2htmls cleanly ... still needs updating tho' - cpp/app guide latex2html redone 2/11/99 JC - configure no longer adds -32 to IRIX builds for you - some more stuff in README - simple DEBUGM malloc tracking, made libsrc/iofuncs/memory.c - changed im_malloc() to return void * - removed duplicate im_malloc() proto from util.h - changed all malloc/free to go through im_malloc()/im_free() 23/10/99 JC - double-click on error image now pops a load browser and an error dialog - add-new-column no longer scrolls to right edge of workspace - better scroll-to-bottom on item add - load ws twice does not cause 'already open' errors - memorise directory button in fsb 18/10/99 JC - new FIND_TIFF/FIND_MOTIF macros for acinclude.m4 - new ./configure switches, see ./configure --help - enabled static libs 8/10/99 - broke action_proc_bop() into smaller functions, stops bad code gen on gcc2.95.1 (and others, prolly) - restored old Makefiles in doc/src/ipguide - vips7.6 script renamed as vips-7.6 5/10/99 - replace image was broken - some menu reorganisation - 'reload all menus' button 4/10/99 - computed regions in ip were broken - updated system.iprc defaults - new menu item: adjust white/black points 2/10/99 - browse icons was broken - greyscale 16-bit tiled tiff was broken - extra mutex locks for TIFF*() in im_tiff2vips() 1/10/99 - some automake probs fixed - squished two ip bugs 30/9/99 - fixed problem with pthreads, now works on suse6.2 as well - new API stuff for threaded evaluation with im_threadgroup_t - new public interface provide platform independent threads/locks/semaphores - no error box if you zoom out too far now 26/9/99 - lr/tb merge blend was not quite right ... should be smoother now - histplot broken for float images 24/9/99 - better mono->labq converter - more portable ispoweroftwo detect for freq filter stuff 23/9/99 - better graphics expose handling 17/9/99 - >/< stuff in ip was a bit mixed up - ink preview fixed for mono images - help popup fixed 15/9/99 - linedetect and sobel filters for ip, thnx Kirk 14/9/99 - Find_histogram was broken - im_profile() man pages was broken - ooops, ip had old set of macros 10/9/99 - im_and/im_or/im_eor now work for any integer type Summer hols: (2nd half August '99) - initial heap block larger to avoid start gcs - def slicer fixed - larger max heap - toolkits with initial '_' hidden by default - custom recomb - dialog.def removed - ... other menu fixes - generate grid menu - im_remainder() added - new cursor change code, hglass rotates during comp! - dialog.c handles cursor changes better - rubber band in paintbox displays - mag widget stays on right! - undo/redo single pixel paint ops - heap size control from prefs - cancel for reductions as well as for image calc - browse stuff reworked, no more .icon.v files - save stops you overwriting open .v files - better animate_countdown() handling - better resize behaviour for bars added to images - better code generation, bug fixed in state tracking - auto recover from crash PK!>X"Vggalt-vips/LICENSEnu[ GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! PK!ܩ;@alt-ruby33-libs/README.mdnu[[![Actions Status: MinGW](https://github.com/ruby/ruby/workflows/MinGW/badge.svg)](https://github.com/ruby/ruby/actions?query=workflow%3A"MinGW") [![Actions Status: RJIT](https://github.com/ruby/ruby/workflows/RJIT/badge.svg)](https://github.com/ruby/ruby/actions?query=workflow%3A"RJIT") [![Actions Status: Ubuntu](https://github.com/ruby/ruby/workflows/Ubuntu/badge.svg)](https://github.com/ruby/ruby/actions?query=workflow%3A"Ubuntu") [![Actions Status: Windows](https://github.com/ruby/ruby/workflows/Windows/badge.svg)](https://github.com/ruby/ruby/actions?query=workflow%3A"Windows") [![AppVeyor status](https://ci.appveyor.com/api/projects/status/0sy8rrxut4o0k960/branch/master?svg=true)](https://ci.appveyor.com/project/ruby/ruby/branch/master) [![Travis Status](https://app.travis-ci.com/ruby/ruby.svg?branch=master)](https://app.travis-ci.com/ruby/ruby) # What is Ruby? Ruby is an interpreted object-oriented programming language often used for web development. It also offers many scripting features to process plain text and serialized files, or manage system tasks. It is simple, straightforward, and extensible. ## Features of Ruby * Simple Syntax * **Normal** Object-oriented Features (e.g. class, method calls) * **Advanced** Object-oriented Features (e.g. mix-in, singleton-method) * Operator Overloading * Exception Handling * Iterators and Closures * Garbage Collection * Dynamic Loading of Object Files (on some architectures) * Highly Portable (works on many Unix-like/POSIX compatible platforms as well as Windows, macOS, etc.) cf. https://docs.ruby-lang.org/en/master/maintainers_md.html#label-Platform+Maintainers ## How to get Ruby For a complete list of ways to install Ruby, including using third-party tools like rvm, see: https://www.ruby-lang.org/en/downloads/ You can download release packages and the snapshot of the repository. If you want to download whole versions of Ruby, please visit https://www.ruby-lang.org/en/downloads/releases/. ### Download with Git The mirror of the Ruby source tree can be checked out with the following command: $ git clone https://github.com/ruby/ruby.git There are some other branches under development. Try the following command to see the list of branches: $ git ls-remote https://github.com/ruby/ruby.git You may also want to use https://git.ruby-lang.org/ruby.git (actual master of Ruby source) if you are a committer. ## How to build See [Building Ruby](https://docs.ruby-lang.org/en/master/contributing/building_ruby_md.html) ## Ruby home page https://www.ruby-lang.org/ ## Documentation - [English](https://docs.ruby-lang.org/en/master/index.html) - [Japanese](https://docs.ruby-lang.org/ja/master/index.html) ## Mailing list There is a mailing list to discuss Ruby. To subscribe to this list, please send the following phrase: join in the mail subject (not body) to the address [ruby-talk-request@ml.ruby-lang.org]. [ruby-talk-request@ml.ruby-lang.org]: mailto:ruby-talk-request@ml.ruby-lang.org?subject=join ## Copying See the file [COPYING](rdoc-ref:COPYING). ## Feedback Questions about the Ruby language can be asked on the [Ruby-Talk](https://www.ruby-lang.org/en/community/mailing-lists) mailing list or on websites like https://stackoverflow.com. Bugs should be reported at https://bugs.ruby-lang.org. Read ["Reporting Issues"](https://docs.ruby-lang.org/en/master/contributing/reporting_issues_md.html) for more information. ## Contributing See ["Contributing to Ruby"](https://docs.ruby-lang.org/en/master/contributing_md.html), which includes setup and build instructions. ## The Author Ruby was originally designed and developed by Yukihiro Matsumoto (Matz) in 1995. PK!X RRalt-ruby33-libs/NEWS.mdnu[# NEWS for Ruby 3.3.0 This document is a list of user-visible feature changes since the **3.2.0** release, except for bug fixes. Note that each entry is kept to a minimum, see links for details. ## Command line options * A new `performance` warning category was introduced. They are not displayed by default even in verbose mode. Turn them on with `-W:performance` or `Warning[:performance] = true`. [[Feature #19538]] * A new `RUBY_CRASH_REPORT` environment variable was introduced to allow redirecting Ruby crash reports to a file or sub command. See the `BUG REPORT ENVIRONMENT` section of the ruby manpage for further details. [[Feature #19790]] ## Core classes updates Note: We're only listing outstanding class updates. * Array * Array#pack now raises ArgumentError for unknown directives. [[Bug #19150]] * Dir * Dir.for_fd added for returning a Dir object for the directory specified by the provided directory file descriptor. [[Feature #19347]] * Dir.fchdir added for changing the directory to the directory specified by the provided directory file descriptor. [[Feature #19347]] * Dir#chdir added for changing the directory to the directory specified by the provided `Dir` object. [[Feature #19347]] * Encoding * `Encoding#replicate` has been removed, it was already deprecated. [[Feature #18949]] * Fiber * Introduce Fiber#kill. [[Bug #595]] ```ruby fiber = Fiber.new do while true puts "Yielding..." Fiber.yield end ensure puts "Exiting..." end fiber.resume # Yielding... fiber.kill # Exiting... ``` * MatchData * MatchData#named_captures now accepts optional `symbolize_names` keyword. [[Feature #19591]] * Module * Module#set_temporary_name added for setting a temporary name for a module. [[Feature #19521]] * ObjectSpace::WeakKeyMap * New core class to build collections with weak references. The class use equality semantic to lookup keys like a regular hash, but it doesn't hold strong references on the keys. [[Feature #18498]] * ObjectSpace::WeakMap * ObjectSpace::WeakMap#delete was added to eagerly clear weak map entries. [[Feature #19561]] * Proc * Now Proc#dup and Proc#clone call `#initialize_dup` and `#initialize_clone` hooks respectively. [[Feature #19362]] * Process * New Process.warmup method that notify the Ruby virtual machine that the boot sequence is finished, and that now is a good time to optimize the application. This is useful for long-running applications. The actual optimizations performed are entirely implementation-specific and may change in the future without notice. [[Feature #18885]] * Process::Status * Process::Status#& and Process::Status#>> are deprecated. [[Bug #19868]] * Range * Range#reverse_each can now process beginless ranges with an Integer endpoint. [[Feature #18515]] * Range#reverse_each now raises TypeError for endless ranges. [[Feature #18551]] * Range#overlap? added for checking if two ranges overlap. [[Feature #19839]] * Refinement * Add Refinement#target as an alternative of Refinement#refined_class. Refinement#refined_class is deprecated and will be removed in Ruby 3.4. [[Feature #19714]] * Regexp * The cache-based optimization now supports lookarounds and atomic groupings. That is, match for Regexp containing these extensions can now also be performed in linear time to the length of the input string. However, these cannot contain captures and cannot be nested. [[Feature #19725]] * String * String#unpack now raises ArgumentError for unknown directives. [[Bug #19150]] * String#bytesplice now accepts new arguments index/length or range of the source string to be copied. [[Feature #19314]] * Thread::Queue * Thread::Queue#freeze now raises TypeError. [[Bug #17146]] * Thread::SizedQueue * Thread::SizedQueue#freeze now raises TypeError. [[Bug #17146]] * Time * Time.new with a string argument became stricter. [[Bug #19293]] ```ruby Time.new('2023-12-20') # no time information (ArgumentError) ``` * TracePoint * TracePoint supports `rescue` event. When the raised exception was rescued, the TracePoint will fire the hook. `rescue` event only supports Ruby-level `rescue`. [[Feature #19572]] ## Stdlib updates * RubyGems and Bundler warn if users do `require` the following gems without adding them to Gemfile or gemspec. This is because they will become the bundled gems in the future version of Ruby. This warning is suppressed if you use bootsnap gem. We recommend to run your application with `DISABLE_BOOTSNAP=1` environmental variable at least once. This is limitation of this version. [[Feature #19351]] [[Feature #19776]] [[Feature #19843]] * abbrev * base64 * bigdecimal * csv * drb * getoptlong * mutex_m * nkf * observer * racc * resolv-replace * rinda * syslog * Socket#recv and Socket#recv_nonblock returns `nil` instead of an empty string on closed connections. Socket#recvmsg and Socket#recvmsg_nonblock returns `nil` instead of an empty packet on closed connections. [[Bug #19012]] * Name resolution such as Socket.getaddrinfo, Socket.getnameinfo, Addrinfo.getaddrinfo, etc. can now be interrupted. [[Feature #19965]] * Random::Formatter#alphanumeric is extended to accept optional `chars` keyword argument. [[Feature #18183]] The following default gem is added. * prism 0.19.0 The following default gems are updated. * RubyGems 3.5.3 * abbrev 0.1.2 * base64 0.2.0 * benchmark 0.3.0 * bigdecimal 3.1.5 * bundler 2.5.3 * cgi 0.4.1 * csv 3.2.8 * date 3.3.4 * delegate 0.3.1 * drb 2.2.0 * english 0.8.0 * erb 4.0.3 * error_highlight 0.6.0 * etc 1.4.3 * fcntl 1.1.0 * fiddle 1.1.2 * fileutils 1.7.2 * find 0.2.0 * getoptlong 0.2.1 * io-console 0.7.1 * io-nonblock 0.3.0 * io-wait 0.3.1 * ipaddr 1.2.6 * irb 1.11.0 * json 2.7.1 * logger 1.6.0 * mutex_m 0.2.0 * net-http 0.4.0 * net-protocol 0.2.2 * nkf 0.1.3 * observer 0.1.2 * open-uri 0.4.1 * open3 0.2.1 * openssl 3.2.0 * optparse 0.4.0 * ostruct 0.6.0 * pathname 0.3.0 * pp 0.5.0 * prettyprint 0.2.0 * pstore 0.1.3 * psych 5.1.2 * rdoc 6.6.2 * readline 0.0.4 * reline 0.4.1 * resolv 0.3.0 * rinda 0.2.0 * securerandom 0.3.1 * set 1.1.0 * shellwords 0.2.0 * singleton 0.2.0 * stringio 3.1.0 * strscan 3.0.7 * syntax_suggest 2.0.0 * syslog 0.1.2 * tempfile 0.2.1 * time 0.3.0 * timeout 0.4.1 * tmpdir 0.2.0 * tsort 0.2.0 * un 0.3.0 * uri 0.13.0 * weakref 0.1.3 * win32ole 1.8.10 * yaml 0.3.0 * zlib 3.1.0 The following bundled gem is promoted from default gems. * racc 1.7.3 The following bundled gems are updated. * minitest 5.20.0 * rake 13.1.0 * test-unit 3.6.1 * rexml 3.2.6 * rss 0.3.0 * net-ftp 0.3.3 * net-imap 0.4.9 * net-smtp 0.4.0 * rbs 3.4.0 * typeprof 0.21.9 * debug 1.9.1 See GitHub releases like [Logger](https://github.com/ruby/logger/releases) or changelog for details of the default gems or bundled gems. ### Prism * Introduced [the Prism parser](https://github.com/ruby/prism) as a default gem * Prism is a portable, error tolerant, and maintainable recursive descent parser for the Ruby language * Prism is production ready and actively maintained, you can use it in place of Ripper * There is [extensive documentation](https://ruby.github.io/prism/) on how to use Prism * Prism is both a C library that will be used internally by CRuby and a Ruby gem that can be used by any tooling which needs to parse Ruby code * Notable methods in the Prism API are: * `Prism.parse(source)` which returns the AST as part of a parse result object * `Prism.parse_comments(source)` which returns the comments * `Prism.parse_success?(source)` which returns true if there are no errors * You can make pull requests or issues directly on [the Prism repository](https://github.com/ruby/prism) if you are interested in contributing * You can now use `ruby --parser=prism` or `RUBYOPT="--parser=prism"` to experiment with the Prism compiler. Please note that this flag is for debugging only. ## Compatibility issues * Subprocess creation/forking via the following file open methods is deprecated. [[Feature #19630]] * Kernel#open * URI.open * IO.binread * IO.foreach * IO.readlines * IO.read * IO.write * When given a non-lambda, non-literal block, Kernel#lambda with now raises ArgumentError instead of returning it unmodified. These usages have been issuing warnings under the `Warning[:deprecated]` category since Ruby 3.0.0. [[Feature #19777]] * The `RUBY_GC_HEAP_INIT_SLOTS` environment variable has been deprecated and removed. Environment variables `RUBY_GC_HEAP_%d_INIT_SLOTS` should be used instead. [[Feature #19785]] * `it` calls without arguments in a block with no ordinary parameters are deprecated. `it` will be a reference to the first block parameter in Ruby 3.4. [[Feature #18980]] * Error message for NoMethodError have changed to not use the target object's `#inspect` for efficiency, and says "instance of ClassName" instead. [[Feature #18285]] ```ruby ([1] * 100).nonexisting # undefined method `nonexisting' for an instance of Array (NoMethodError) ``` * Now anonymous parameters forwarding is disallowed inside a block that uses anonymous parameters. [[Feature #19370]] ## Stdlib compatibility issues * `racc` is promoted to bundled gems. * You need to add `racc` to your `Gemfile` if you use `racc` under bundler environment. * `ext/readline` is retired * We have `reline` that is pure Ruby implementation compatible with `ext/readline` API. We rely on `reline` in the future. If you need to use `ext/readline`, you can install `ext/readline` via rubygems.org with `gem install readline-ext`. * We no longer need to install libraries like `libreadline` or `libedit`. ## C API updates * `rb_postponed_job` updates * New APIs and deprecated APIs (see comments for details) * added: `rb_postponed_job_preregister()` * added: `rb_postponed_job_trigger()` * deprecated: `rb_postponed_job_register()` (and semantic change. see below) * deprecated: `rb_postponed_job_register_one()` * The postponed job APIs have been changed to address some rare crashes. To solve the issue, we introduced new two APIs and deprecated current APIs. The semantics of these functions have also changed slightly; `rb_postponed_job_register` now behaves like the `once` variant in that multiple calls with the same `func` might be coalesced into a single execution of the `func` [[Feature #20057]] * Some updates for internal thread event hook APIs * `rb_internal_thread_event_data_t` with a target Ruby thread (VALUE) and callback functions (`rb_internal_thread_event_callback`) receive it. https://github.com/ruby/ruby/pull/8885 * The following functions are introduced to manipulate Ruby thread local data from internal thread event hook APIs (they are introduced since Ruby 3.2). https://github.com/ruby/ruby/pull/8936 * `rb_internal_thread_specific_key_create()` * `rb_internal_thread_specific_get()` * `rb_internal_thread_specific_set()` * `rb_profile_thread_frames()` is introduced to get a frames from a specific thread. [[Feature #10602]] * `rb_data_define()` is introduced to define `Data`. [[Feature #19757]] * `rb_ext_resolve_symbol()` is introduced to search a function from extension libraries. [[Feature #20005]] * IO related updates: * The details of `rb_io_t` will be hidden and deprecated attributes are added for each members. [[Feature #19057]] * `rb_io_path(VALUE io)` is introduced to get a path of `io`. * `rb_io_closed_p(VALUE io)` to get opening or closing of `io`. * `rb_io_mode(VALUE io)` to get the mode of `io`. * `rb_io_open_descriptor()` is introduced to make an IO object from a file descriptor. ## Implementation improvements ### Parser * Replace Bison with [Lrama LALR parser generator](https://github.com/ruby/lrama). No need to install Bison to build Ruby from source code anymore. We will no longer suffer bison compatibility issues and we can use new features by just implementing it to Lrama. [[Feature #19637]] * See [The future vision of Ruby Parser](https://rubykaigi.org/2023/presentations/spikeolaf.html) for detail. * Lrama internal parser is a LR parser generated by Racc for maintainability. * Parameterizing Rules `(?, *, +)` are supported, it will be used in Ruby parse.y. ### GC / Memory management * Major performance improvements over Ruby 3.2 * Young objects referenced by old objects are no longer immediately promoted to the old generation. This significantly reduces the frequency of major GC collections. [[Feature #19678]] * A new `REMEMBERED_WB_UNPROTECTED_OBJECTS_LIMIT_RATIO` tuning variable was introduced to control the number of unprotected objects cause a major GC collection to trigger. The default is set to `0.01` (1%). This significantly reduces the frequency of major GC collection. [[Feature #19571]] * Write Barriers were implemented for many core types that were missing them, notably `Time`, `Enumerator`, `MatchData`, `Method`, `File::Stat`, `BigDecimal` and several others. This significantly reduces minor GC collection time and major GC collection frequency. * Most core classes are now using Variable Width Allocation, notably `Hash`, `Time`, `Thread::Backtrace`, `Thread::Backtrace::Location`, `File::Stat`, `Method`. This makes these classes faster to allocate and free, use less memory and reduce heap fragmentation. * `defined?(@ivar)` is optimized with Object Shapes. ### YJIT * Major performance improvements over Ruby 3.2 * Support for splat and rest arguments has been improved. * Registers are allocated for stack operations of the virtual machine. * More calls with optional arguments are compiled. Exception handlers are also compiled. * Unsupported call types and megamorphic call sites no longer exit to the interpreter. * Basic methods like Rails `#blank?` and [specialized `#present?`](https://github.com/rails/rails/pull/49909) are inlined. * `Integer#*`, `Integer#!=`, `String#!=`, `String#getbyte`, `Kernel#block_given?`, `Kernel#is_a?`, `Kernel#instance_of?`, and `Module#===` are specially optimized. * Compilation speed is now slightly faster than Ruby 3.2. * Now more than 3x faster than the interpreter on Optcarrot! * Significantly improved memory usage over Ruby 3.2 * Metadata for compiled code uses a lot less memory. * `--yjit-call-threshold` is automatically raised from 30 to 120 when the application has more than 40,000 ISEQs. * `--yjit-cold-threshold` is added to skip compiling cold ISEQs. * More compact code is generated on Arm64. * Code GC is now disabled by default * `--yjit-exec-mem-size` is treated as a hard limit where compilation of new code stops. * No sudden drops in performance due to code GC. Better copy-on-write behavior on servers reforking with [Pitchfork](https://github.com/shopify/pitchfork). * You can still enable code GC if desired with `--yjit-code-gc` * Add `RubyVM::YJIT.enable` that can enable YJIT at run-time * You can start YJIT without modifying command-line arguments or environment variables. Rails 7.2 will [enable YJIT by default](https://github.com/rails/rails/pull/49947) using this method. * This can also be used to enable YJIT only once your application is done booting. `--yjit-disable` can be used if you want to use other YJIT options while disabling YJIT at boot. * More YJIT stats are available by default * `yjit_alloc_size` and several more metadata-related stats are now available by default. * `ratio_in_yjit` stat produced by `--yjit-stats` is now available in release builds, a special stats or dev build is no longer required to access most stats. * Add more profiling capabilities * `--yjit-perf` is added to facilitate profiling with Linux perf. * `--yjit-trace-exits` now supports sampling with `--yjit-trace-exits-sample-rate=N` * More thorough testing and multiple bug fixes * `--yjit-stats=quiet` is added to avoid printing stats on exit. ### MJIT * MJIT is removed. * `--disable-jit-support` is removed. Consider using `--disable-yjit --disable-rjit` instead. ### RJIT * Introduced a pure-Ruby JIT compiler RJIT. * RJIT supports only x86\_64 architecture on Unix platforms. * Unlike MJIT, it doesn't require a C compiler at runtime. * RJIT exists only for experimental purposes. * You should keep using YJIT in production. ### M:N Thread scheduler * M:N Thread scheduler is introduced. [[Feature #19842]] * Background: Ruby 1.8 and before, M:1 thread scheduler (M Ruby threads with 1 native thread. Called as User level threads or Green threads) is used. Ruby 1.9 and later, 1:1 thread scheduler (1 Ruby thread with 1 native thread). M:1 threads takes lower resources compare with 1:1 threads because it needs only 1 native threads. However it is difficult to support context switching for all of blocking operation so 1:1 threads are employed from Ruby 1.9. M:N thread scheduler uses N native threads for M Ruby threads (N is small number in general). It doesn't need same number of native threads as Ruby threads (similar to the M:1 thread scheduler). Also our M:N threads supports blocking operations well same as 1:1 threads. See the ticket for more details. Our M:N thread scheduler refers on the goroutine scheduler in the Go language. * In a ractor, only 1 thread can run in a same time because of implementation. Therefore, applications that use only one Ractor (most applications) M:N thread scheduler works as M:1 thread scheduler with further extension from Ruby 1.8. * M:N thread scheduler can introduce incompatibility for C-extensions, so it is disabled by default on the main Ractors. `RUBY_MN_THREADS=1` environment variable will enable it. On non-main Ractors, M:N thread scheduler is enabled (and can not disable it now). * `N` (the number of native threads) can be specified with `RUBY_MAX_CPU` environment variable. The default is 8. Note that more than `N` native threads are used to support many kind of blocking operations. [Bug #595]: https://bugs.ruby-lang.org/issues/595 [Feature #10602]: https://bugs.ruby-lang.org/issues/10602 [Bug #17146]: https://bugs.ruby-lang.org/issues/17146 [Feature #18183]: https://bugs.ruby-lang.org/issues/18183 [Feature #18285]: https://bugs.ruby-lang.org/issues/18285 [Feature #18498]: https://bugs.ruby-lang.org/issues/18498 [Feature #18515]: https://bugs.ruby-lang.org/issues/18515 [Feature #18551]: https://bugs.ruby-lang.org/issues/18551 [Feature #18885]: https://bugs.ruby-lang.org/issues/18885 [Feature #18949]: https://bugs.ruby-lang.org/issues/18949 [Feature #18980]: https://bugs.ruby-lang.org/issues/18980 [Bug #19012]: https://bugs.ruby-lang.org/issues/19012 [Feature #19057]: https://bugs.ruby-lang.org/issues/19057 [Bug #19150]: https://bugs.ruby-lang.org/issues/19150 [Bug #19293]: https://bugs.ruby-lang.org/issues/19293 [Feature #19314]: https://bugs.ruby-lang.org/issues/19314 [Feature #19347]: https://bugs.ruby-lang.org/issues/19347 [Feature #19351]: https://bugs.ruby-lang.org/issues/19351 [Feature #19362]: https://bugs.ruby-lang.org/issues/19362 [Feature #19370]: https://bugs.ruby-lang.org/issues/19370 [Feature #19521]: https://bugs.ruby-lang.org/issues/19521 [Feature #19538]: https://bugs.ruby-lang.org/issues/19538 [Feature #19561]: https://bugs.ruby-lang.org/issues/19561 [Feature #19571]: https://bugs.ruby-lang.org/issues/19571 [Feature #19572]: https://bugs.ruby-lang.org/issues/19572 [Feature #19591]: https://bugs.ruby-lang.org/issues/19591 [Feature #19630]: https://bugs.ruby-lang.org/issues/19630 [Feature #19637]: https://bugs.ruby-lang.org/issues/19637 [Feature #19678]: https://bugs.ruby-lang.org/issues/19678 [Feature #19714]: https://bugs.ruby-lang.org/issues/19714 [Feature #19725]: https://bugs.ruby-lang.org/issues/19725 [Feature #19757]: https://bugs.ruby-lang.org/issues/19757 [Feature #19776]: https://bugs.ruby-lang.org/issues/19776 [Feature #19777]: https://bugs.ruby-lang.org/issues/19777 [Feature #19785]: https://bugs.ruby-lang.org/issues/19785 [Feature #19790]: https://bugs.ruby-lang.org/issues/19790 [Feature #19839]: https://bugs.ruby-lang.org/issues/19839 [Feature #19842]: https://bugs.ruby-lang.org/issues/19842 [Feature #19843]: https://bugs.ruby-lang.org/issues/19843 [Bug #19868]: https://bugs.ruby-lang.org/issues/19868 [Feature #19965]: https://bugs.ruby-lang.org/issues/19965 [Feature #20005]: https://bugs.ruby-lang.org/issues/20005 [Feature #20057]: https://bugs.ruby-lang.org/issues/20057 PK!C,@ @ alt-ruby22/COPYING.janu[本プログラムはフリーソフトウェアです.2-clause BSDL または以下に示す条件で本プログラムを再配布できます 2-clause BSDLについてはBSDLファイルを参照して下さい. 1. 複製は制限なく自由です. 2. 以下の条件のいずれかを満たす時に本プログラムのソースを 自由に変更できます. (a) ネットニューズにポストしたり,作者に変更を送付する などの方法で,変更を公開する. (b) 変更した本プログラムを自分の所属する組織内部だけで 使う. (c) 変更点を明示したうえ,ソフトウェアの名前を変更する. そのソフトウェアを配布する時には変更前の本プログラ ムも同時に配布する.または変更前の本プログラムのソー スの入手法を明示する. (d) その他の変更条件を作者と合意する. 3. 以下の条件のいずれかを満たす時に本プログラムをコンパイ ルしたオブジェクトコードや実行形式でも配布できます. (a) バイナリを受け取った人がソースを入手できるように, ソースの入手法を明示する. (b) 機械可読なソースコードを添付する. (c) 変更を行ったバイナリは名前を変更したうえ,オリジナ ルのソースコードの入手法を明示する. (d) その他の配布条件を作者と合意する. 4. 他のプログラムへの引用はいかなる目的であれ自由です.た だし,本プログラムに含まれる他の作者によるコードは,そ れぞれの作者の意向による制限が加えられる場合があります. それらファイルの一覧とそれぞれの配布条件などに付いては LEGALファイルを参照してください. 5. 本プログラムへの入力となるスクリプトおよび,本プログラ ムからの出力の権利は本プログラムの作者ではなく,それぞ れの入出力を生成した人に属します.また,本プログラムに 組み込まれるための拡張ライブラリについても同様です. 6. 本プログラムは無保証です.作者は本プログラムをサポート する意志はありますが,プログラム自身のバグあるいは本プ ログラムの実行などから発生するいかなる損害に対しても責 任を持ちません. PK!dddalt-ruby22/LEGALnu[LEGAL NOTICE INFORMATION ------------------------ All the files in this distribution are covered under either the Ruby's license (see the file COPYING) or public-domain except some files mentioned below. ccan/build_assert/build_assert.h ccan/check_type/check_type.h ccan/container_of/container_of.h ccan/str/str.h These files are licensed under the CC0. http://creativecommons.org/choose/zero/ ccan/list/list.h This file is licensed under the MIT License. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. include/ruby/oniguruma.h: regcomp.c: regenc.[ch]: regerror.c: regexec.c: regint.h: regparse.[ch]: enc/ascii.c enc/big5.c enc/cp949.c enc/emacs_mule.c enc/encdb.c enc/euc_jp.c enc/euc_kr.c enc/euc_tw.c enc/gb18030.c enc/gb2312.c enc/gbk.c enc/iso_8859_1.c enc/iso_8859_10.c enc/iso_8859_11.c enc/iso_8859_13.c enc/iso_8859_14.c enc/iso_8859_15.c enc/iso_8859_16.c enc/iso_8859_2.c enc/iso_8859_3.c enc/iso_8859_4.c enc/iso_8859_5.c enc/iso_8859_6.c enc/iso_8859_7.c enc/iso_8859_8.c enc/iso_8859_9.c enc/koi8_r.c enc/koi8_u.c enc/shift_jis.c enc/unicode.c enc/us_ascii.c enc/utf_16be.c enc/utf_16le.c enc/utf_32be.c enc/utf_32le.c enc/utf_8.c enc/windows_1251.c Oniguruma ---- (C) K.Kosako http://www.geocities.jp/kosako3/oniguruma/ http://www.ruby-lang.org/cgi-bin/cvsweb.cgi/oniguruma/ http://www.freebsd.org/cgi/cvsweb.cgi/ports/devel/oniguruma/ When this software is partly used or it is distributed with Ruby, this of Ruby follows the license of Ruby. configure: This file is free software. Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. tool/config.guess: tool/config.sub: As long as you distribute these files with the file configure, they are covered under the Ruby's license. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999 Free Software Foundation, Inc. This file 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 2 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, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception to the GNU General Public License, if you distribute this file as part of a program that contains a configuration script generated by Autoconf, you may include it under the same distribution terms that you use for the rest of that program. parse.c: This file is licensed under the GPL, but is incorporated into Ruby and redistributed under the terms of the Ruby license, as permitted by the exception to the GPL below. Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 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 2, 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ util.c (partly): Copyright (c) 1991, 2000, 2001 by Lucent Technologies. Permission to use, copy, modify, and distribute this software for any purpose without fee is hereby granted, provided that this entire notice is included in all copies of any software which is or includes a copy or modification of this software and in all copies of the supporting documentation for such software. THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED WARRANTY. IN PARTICULAR, NEITHER THE AUTHOR NOR LUCENT MAKES ANY REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. win32/win32.[ch]: You can apply the Artistic License to these files. (or GPL, alternatively) Copyright (c) 1993, Intergraph Corporation You may distribute under the terms of either the GNU General Public License or the Artistic License, as specified in the perl README file. util.c (partly): Copyright (c) 2004-2008 David Schultz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. random.c This file is under the new-style BSD license. A C-program for MT19937, with initialization improved 2002/2/10. Coded by Takuji Nishimura and Makoto Matsumoto. This is a faster version by taking Shawn Cokus's optimization, Matthe Bellew's simplification, Isaku Wada's real version. Before using, initialize the state by using init_genrand(seed) or init_by_array(init_key, key_length). Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura, All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The names of its contributors may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Any feedback is very welcome. http://www.math.keio.ac.jp/matumoto/emt.html email: matumoto@math.keio.ac.jp vm_dump.c:procstat_vm * Copyright (c) 2007 Robert N. M. Watson * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * $FreeBSD: head/usr.bin/procstat/procstat_vm.c 261780 2014-02-11 21:57:37Z jhb $ vsnprintf.c: This file is under the old-style BSD license. Note that the paragraph 3 below is now null and void. Copyright (c) 1990, 1993 The Regents of the University of California. All rights reserved. This code is derived from software contributed to Berkeley by Chris Torek. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the University nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. IMPORTANT NOTE: -------------- From ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change paragraph 3 above is now null and void. st.[ch]: missing/alloca.c: missing/dup2.c: missing/erf.c: missing/finite.c: missing/hypot.c: missing/isinf.c: missing/isnan.c: missing/lgamma_r.c: missing/memcmp.c: missing/memmove.c: missing/strchr.c: missing/strstr.c: missing/strtol.c: missing/tgamma.c: ext/digest/sha1/sha1.[ch]: These files are all under public domain. missing/crypt.c: This file is under the old-style BSD license. Note that the paragraph 3 below is now null and void. Copyright (c) 1989, 1993 The Regents of the University of California. All rights reserved. This code is derived from software contributed to Berkeley by Tom Truscott. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the University nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. missing/setproctitle.c This file is under the old-style BSD license. Note that the paragraph 3 below is now null and void. Copyright 2003 Damien Miller Copyright (c) 1983, 1995-1997 Eric P. Allman Copyright (c) 1988, 1993 The Regents of the University of California. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the University nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. missing/strlcat.c missing/strlcpy.c These files are under the new-style BSD license. Copyright (c) 1998 Todd C. Miller All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. missing/langinfo.c This file is from http://www.cl.cam.ac.uk/~mgk25/ucs/langinfo.c. Ruby uses a modified version. The file contains the following author/copyright notice: Markus.Kuhn@cl.cam.ac.uk -- 2002-03-11 Permission to use, copy, modify, and distribute this software for any purpose and without fee is hereby granted. The author disclaims all warranties with regard to this software. ext/digest/md5/md5.[ch]: These files are under the following license. Ruby uses modified versions of them. Copyright (C) 1999, 2000 Aladdin Enterprises. All rights reserved. This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. L. Peter Deutsch ghost@aladdin.com ext/digest/rmd160/rmd160.[ch]: These files have the following copyright information, and by the author we are allowed to use it under the new-style BSD license. AUTHOR: Antoon Bosselaers, ESAT-COSIC (Arranged for libc by Todd C. Miller) DATE: 1 March 1996 Copyright (c) Katholieke Universiteit Leuven 1996, All Rights Reserved ext/digest/sha2/sha2.[ch]: These files are under the new-style BSD license. Copyright 2000 Aaron D. Gifford. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the copyright holder nor the names of contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) AND CONTRIBUTOR(S) ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR(S) OR CONTRIBUTOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ext/nkf/nkf-utf8/config.h: ext/nkf/nkf-utf8/nkf.c: ext/nkf/nkf-utf8/utf8tbl.c: These files are under the following license. So to speak, it is copyrighted semi-public-domain software. Copyright (C) 1987, Fujitsu LTD. (Itaru ICHIKAWA) Everyone is permitted to do anything on this program including copying, modifying, improving, as long as you don't try to pretend that you wrote it. i.e., the above copyright notice has to appear in all copies. Binary distribution requires original version messages. You don't have to ask before copying, redistribution or publishing. THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE. ext/socket/addrinfo.h: ext/socket/getaddrinfo.c: ext/socket/getnameinfo.c: These files are under the new-style BSD license. Copyright (C) 1995, 1996, 1997, 1998, and 1999 WIDE Project. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the project nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ext/win32ole/win32ole.c: You can apply the Artistic License to this file. (or GPL, alternatively) (c) 1995 Microsoft Corporation. All rights reserved. Developed by ActiveWare Internet Corp., http://www.ActiveWare.com Other modifications Copyright (c) 1997, 1998 by Gurusamy Sarathy and Jan Dubois You may distribute under the terms of either the GNU General Public License or the Artistic License, as specified in the README file of the Perl distribution. PK!qoalt-ruby22/BSDLnu[Copyright (C) 1993-2013 Yukihiro Matsumoto. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. PK! alt-ruby22/COPYINGnu[Ruby is copyrighted free software by Yukihiro Matsumoto . You can redistribute it and/or modify it under either the terms of the 2-clause BSDL (see the file BSDL), or the conditions below: 1. You may make and give away verbatim copies of the source form of the software without restriction, provided that you duplicate all of the original copyright notices and associated disclaimers. 2. You may modify your copy of the software in any way, provided that you do at least ONE of the following: a) place your modifications in the Public Domain or otherwise make them Freely Available, such as by posting said modifications to Usenet or an equivalent medium, or by allowing the author to include your modifications in the software. b) use the modified software only within your corporation or organization. c) give non-standard binaries non-standard names, with instructions on where to get the original software distribution. d) make other distribution arrangements with the author. 3. You may distribute the software in object code or binary form, provided that you do at least ONE of the following: a) distribute the binaries and library files of the software, together with instructions (in the manual page or equivalent) on where to get the original distribution. b) accompany the distribution with the machine-readable source of the software. c) give non-standard binaries non-standard names, with instructions on where to get the original software distribution. d) make other distribution arrangements with the author. 4. You may modify and include the part of the software into any other software (possibly commercial). But some files in the distribution are not written by the author, so that they are not under these terms. For the list of those files and their copying conditions, see the file LEGAL. 5. The scripts and library files supplied as input to or produced as output from the software do not automatically fall under the copyright of the software, but belong to whomever generated them, and may be sold commercially, and may be aggregated with this software. 6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. PK!FNFFalt-ruby22/GPLnu[ GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 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 2 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. PK!zalt-ruby22-rubygems/LICENSE.txtnu[RubyGems is copyrighted free software by Chad Fowler, Rich Kilmer, Jim Weirich and others. You can redistribute it and/or modify it under either the terms of the MIT license (see the file MIT.txt), or the conditions below: 1. You may make and give away verbatim copies of the source form of the software without restriction, provided that you duplicate all of the original copyright notices and associated disclaimers. 2. You may modify your copy of the software in any way, provided that you do at least ONE of the following: a. place your modifications in the Public Domain or otherwise make them Freely Available, such as by posting said modifications to Usenet or an equivalent medium, or by allowing the author to include your modifications in the software. b. use the modified software only within your corporation or organization. c. give non-standard executables non-standard names, with instructions on where to get the original software distribution. d. make other distribution arrangements with the author. 3. You may distribute the software in object code or executable form, provided that you do at least ONE of the following: a. distribute the executables and library files of the software, together with instructions (in the manual page or equivalent) on where to get the original distribution. b. accompany the distribution with the machine-readable source of the software. c. give non-standard executables non-standard names, with instructions on where to get the original software distribution. d. make other distribution arrangements with the author. 4. You may modify and include the part of the software into any other software (possibly commercial). 5. The scripts and library files supplied as input to or produced as output from the software do not automatically fall under the copyright of the software, but belong to whomever generated them, and may be sold commercially, and may be aggregated with this software. 6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. PK! e alt-ruby40-libs/README.mdnu[[![Actions Status: MinGW](https://github.com/ruby/ruby/workflows/MinGW/badge.svg)](https://github.com/ruby/ruby/actions?query=workflow%3A"MinGW") [![Actions Status: Ubuntu](https://github.com/ruby/ruby/workflows/Ubuntu/badge.svg)](https://github.com/ruby/ruby/actions?query=workflow%3A"Ubuntu") [![Actions Status: Windows](https://github.com/ruby/ruby/workflows/Windows/badge.svg)](https://github.com/ruby/ruby/actions?query=workflow%3A"Windows") [![Travis Status](https://app.travis-ci.com/ruby/ruby.svg?branch=master)](https://app.travis-ci.com/ruby/ruby) [日本語](rdoc-ref:README.ja.md) # What is Ruby? Ruby is an interpreted object-oriented programming language often used for web development. It also offers many scripting features to process plain text and serialized files, or manage system tasks. It is simple, straightforward, and extensible. ## Features of Ruby * Simple Syntax * **Normal** Object-oriented Features (e.g. class, method calls) * **Advanced** Object-oriented Features (e.g. mix-in, singleton-method) * Operator Overloading * Exception Handling * Iterators and Closures * Garbage Collection * Dynamic Loading of Object Files (on some architectures) * Highly Portable (works on many Unix-like/POSIX compatible platforms as well as Windows, macOS, etc.) cf. https://docs.ruby-lang.org/en/master/maintainers_md.html#label-Platform+Maintainers ## How to get Ruby For a complete list of ways to install Ruby, including using third-party tools like rvm, see: https://www.ruby-lang.org/en/downloads/ You can download release packages and the snapshot of the repository. If you want to download whole versions of Ruby, please visit https://www.ruby-lang.org/en/downloads/releases/. ### Download with Git The mirror of the Ruby source tree can be checked out with the following command: $ git clone https://github.com/ruby/ruby.git There are some other branches under development. Try the following command to see the list of branches: $ git ls-remote https://github.com/ruby/ruby.git You may also want to use https://git.ruby-lang.org/ruby.git (actual master of Ruby source) if you are a committer. ## How to build See [Building Ruby](https://docs.ruby-lang.org/en/master/contributing/building_ruby_md.html) ## Ruby home page https://www.ruby-lang.org/ ## Documentation - [English](https://docs.ruby-lang.org/en/master/index.html) - [Japanese](https://docs.ruby-lang.org/ja/master/index.html) ## Mailing list There is a mailing list to discuss Ruby. To subscribe to this list, please send the following phrase: join in the mail subject (not body) to the address [ruby-talk-request@ml.ruby-lang.org]. [ruby-talk-request@ml.ruby-lang.org]: mailto:ruby-talk-request@ml.ruby-lang.org?subject=join ## Copying See the file [COPYING](rdoc-ref:COPYING). ## Feedback Questions about the Ruby language can be asked on the [Ruby-Talk](https://www.ruby-lang.org/en/community/mailing-lists) mailing list or on websites like https://stackoverflow.com. Bugs should be reported at https://bugs.ruby-lang.org. Read ["Reporting Issues"](https://docs.ruby-lang.org/en/master/contributing/reporting_issues_md.html) for more information. ## Contributing See ["Contributing to Ruby"](https://docs.ruby-lang.org/en/master/contributing/contributing_md.html), which includes setup and build instructions. ## The Author Ruby was originally designed and developed by Yukihiro Matsumoto (Matz) in 1995. PK!i26""alt-ruby40-libs/NEWS.mdnu[# NEWS for Ruby 4.0.0 This document is a list of user-visible feature changes since the **3.4.0** release, except for bug fixes. Note that each entry is kept to a minimum, see links for details. ## Language changes * `*nil` no longer calls `nil.to_a`, similar to how `**nil` does not call `nil.to_hash`. [[Feature #21047]] * Logical binary operators (`||`, `&&`, `and` and `or`) at the beginning of a line continue the previous line, like fluent dot. The following code examples are equal: ```ruby if condition1 && condition2 ... end ``` Previously: ```ruby if condition1 && condition2 ... end ``` ```ruby if condition1 && condition2 ... end ``` [[Feature #20925]] ## Core classes updates Note: We're only listing outstanding class updates. * Array * `Array#rfind` has been added as a more efficient alternative to `array.reverse_each.find` [[Feature #21678]] * `Array#find` has been added as a more efficient override of `Enumerable#find` [[Feature #21678]] * Binding * `Binding#local_variables` does no longer include numbered parameters. Also, `Binding#local_variable_get`, `Binding#local_variable_set`, and `Binding#local_variable_defined?` reject to handle numbered parameters. [[Bug #21049]] * `Binding#implicit_parameters`, `Binding#implicit_parameter_get`, and `Binding#implicit_parameter_defined?` have been added to access numbered parameters and "it" parameter. [[Bug #21049]] * Enumerator * `Enumerator.produce` now accepts an optional `size` keyword argument to specify the size of the enumerator. It can be an integer, `Float::INFINITY`, a callable object (such as a lambda), or `nil` to indicate unknown size. When not specified, the size defaults to `Float::INFINITY`. ```ruby # Infinite enumerator enum = Enumerator.produce(1, size: Float::INFINITY, &:succ) enum.size # => Float::INFINITY # Finite enumerator with known/computable size abs_dir = File.expand_path("./baz") # => "/foo/bar/baz" traverser = Enumerator.produce(abs_dir, size: -> { abs_dir.count("/") + 1 }) { raise StopIteration if it == "/" File.dirname(it) } traverser.size # => 4 ``` [[Feature #21701]] * ErrorHighlight * When an ArgumentError is raised, it now displays code snippets for both the method call (caller) and the method definition (callee). [[Feature #21543]] ``` test.rb:1:in 'Object#add': wrong number of arguments (given 1, expected 2) (ArgumentError) caller: test.rb:3 | add(1) ^^^ callee: test.rb:1 | def add(x, y) = x + y ^^^ from test.rb:3:in '
' ``` * Fiber * Introduce support for `Fiber#raise(cause:)` argument similar to `Kernel#raise`. [[Feature #21360]] * Fiber::Scheduler * Introduce `Fiber::Scheduler#fiber_interrupt` to interrupt a fiber with a given exception. The initial use case is to interrupt a fiber that is waiting on a blocking IO operation when the IO operation is closed. [[Feature #21166]] * Introduce `Fiber::Scheduler#yield` to allow the fiber scheduler to continue processing when signal exceptions are disabled. [[Bug #21633]] * Reintroduce the `Fiber::Scheduler#io_close` hook for asynchronous `IO#close`. * Invoke `Fiber::Scheduler#io_write` when flushing the IO write buffer. [[Bug #21789]] * File * `File::Stat#birthtime` is now available on Linux via the statx system call when supported by the kernel and filesystem. [[Feature #21205]] * IO * `IO.select` accepts `Float::INFINITY` as a timeout argument. [[Feature #20610]] * A deprecated behavior, process creation by `IO` class methods with a leading `|`, was removed. [[Feature #19630]] * Kernel * `Kernel#inspect` now checks for the existence of a `#instance_variables_to_inspect` method, allowing control over which instance variables are displayed in the `#inspect` string: ```ruby class DatabaseConfig def initialize(host, user, password) @host = host @user = user @password = password end private def instance_variables_to_inspect = [:@host, :@user] end conf = DatabaseConfig.new("localhost", "root", "hunter2") conf.inspect #=> # ``` [[Feature #21219]] * A deprecated behavior, process creation by `Kernel#open` with a leading `|`, was removed. [[Feature #19630]] * Math * `Math.log1p` and `Math.expm1` are added. [[Feature #21527]] * Pathname * Pathname has been promoted from a default gem to a core class of Ruby. [[Feature #17473]] * Proc * `Proc#parameters` now shows anonymous optional parameters as `[:opt]` instead of `[:opt, nil]`, making the output consistent with when the anonymous parameter is required. [[Bug #20974]] * Ractor * `Ractor::Port` class was added for a new synchronization mechanism to communicate between Ractors. [[Feature #21262]] ```ruby port1 = Ractor::Port.new port2 = Ractor::Port.new Ractor.new port1, port2 do |port1, port2| port1 << 1 port2 << 11 port1 << 2 port2 << 12 end 2.times{ p port1.receive } #=> 1, 2 2.times{ p port2.receive } #=> 11, 12 ``` `Ractor::Port` provides the following methods: * `Ractor::Port#receive` * `Ractor::Port#send` (or `Ractor::Port#<<`) * `Ractor::Port#close` * `Ractor::Port#closed?` As a result, `Ractor.yield` and `Ractor#take` were removed. * `Ractor#join` and `Ractor#value` were added to wait for the termination of a Ractor. These are similar to `Thread#join` and `Thread#value`. * `Ractor#monitor` and `Ractor#unmonitor` were added as low-level interfaces used internally to implement `Ractor#join`. * `Ractor.select` now only accepts Ractors and Ports. If Ractors are given, it returns when a Ractor terminates. * `Ractor#default_port` was added. Each `Ractor` has a default port, which is used by `Ractor.send`, `Ractor.receive`. * `Ractor#close_incoming` and `Ractor#close_outgoing` were removed. * `Ractor.shareable_proc` and `Ractor.shareable_lambda` are introduced to make shareable Proc or lambda. [[Feature #21550]], [[Feature #21557]] * Range * `Range#to_set` now performs size checks to prevent issues with endless ranges. [[Bug #21654]] * `Range#overlap?` now correctly handles infinite (unbounded) ranges. [[Bug #21185]] * `Range#max` behavior on beginless integer ranges has been fixed. [[Bug #21174]] [[Bug #21175]] * Ruby * A new toplevel module `Ruby` has been defined, which contains Ruby-related constants. This module was reserved in Ruby 3.4 and is now officially defined. [[Feature #20884]] * Ruby::Box * A new (experimental) feature to provide separation about definitions. For the detail of "Ruby Box", see [doc/language/box.md](doc/language/box.md). [[Feature #21311]] [[Misc #21385]] * Set * `Set` is now a core class, instead of an autoloaded stdlib class. [[Feature #21216]] * `Set#inspect` now uses a simpler display, similar to literal arrays. (e.g., `Set[1, 2, 3]` instead of `#`). [[Feature #21389]] * Passing arguments to `Set#to_set` and `Enumerable#to_set` is now deprecated. [[Feature #21390]] * Socket * `Socket.tcp` & `TCPSocket.new` accepts an `open_timeout` keyword argument to specify the timeout for the initial connection. [[Feature #21347]] * When a user-specified timeout occurred in `TCPSocket.new`, either `Errno::ETIMEDOUT` or `IO::TimeoutError` could previously be raised depending on the situation. This behavior has been unified so that `IO::TimeoutError` is now consistently raised. (Please note that, in `Socket.tcp`, there are still cases where `Errno::ETIMEDOUT` may be raised in similar situations, and that in both cases `Errno::ETIMEDOUT` may be raised when the timeout occurs at the OS level.) * String * Update Unicode to Version 17.0.0 and Emoji Version 17.0. [[Feature #19908]][[Feature #20724]][[Feature #21275]] (also applies to Regexp) * `String#strip`, `strip!`, `lstrip`, `lstrip!`, `rstrip`, and `rstrip!` are extended to accept `*selectors` arguments. [[Feature #21552]] * Thread * Introduce support for `Thread#raise(cause:)` argument similar to `Kernel#raise`. [[Feature #21360]] ## Stdlib updates We only list stdlib changes that are notable feature changes. Other changes are listed in the following sections. We also listed release history from the previous bundled version that is Ruby 3.4.0 if it has GitHub releases. The following bundled gems are promoted from default gems. * ostruct 0.6.3 * 0.6.1 to [v0.6.2][ostruct-v0.6.2], [v0.6.3][ostruct-v0.6.3] * pstore 0.2.0 * 0.1.4 to [v0.2.0][pstore-v0.2.0] * benchmark 0.5.0 * 0.4.0 to [v0.4.1][benchmark-v0.4.1], [v0.5.0][benchmark-v0.5.0] * logger 1.7.0 * 1.6.4 to [v1.6.5][logger-v1.6.5], [v1.6.6][logger-v1.6.6], [v1.7.0][logger-v1.7.0] * rdoc 7.0.3 * 6.14.0 to [v6.14.1][rdoc-v6.14.1], [v6.14.2][rdoc-v6.14.2], [v6.15.0][rdoc-v6.15.0], [v6.15.1][rdoc-v6.15.1], [v6.16.0][rdoc-v6.16.0], [v6.16.1][rdoc-v6.16.1], [v6.17.0][rdoc-v6.17.0], [v7.0.0][rdoc-v7.0.0], [v7.0.1][rdoc-v7.0.1], [v7.0.2][rdoc-v7.0.2], [v7.0.3][rdoc-v7.0.3] * win32ole 1.9.2 * 1.9.1 to [v1.9.2][win32ole-v1.9.2] * irb 1.16.0 * 1.14.3 to [v1.15.0][irb-v1.15.0], [v1.15.1][irb-v1.15.1], [v1.15.2][irb-v1.15.2], [v1.15.3][irb-v1.15.3], [v1.16.0][irb-v1.16.0] * reline 0.6.3 * 0.6.0 to [v0.6.1][reline-v0.6.1], [v0.6.2][reline-v0.6.2], [v0.6.3][reline-v0.6.3] * readline 0.0.4 * fiddle 1.1.8 * 1.1.6 to [v1.1.7][fiddle-v1.1.7], [v1.1.8][fiddle-v1.1.8] The following default gem is added. * win32-registry 0.1.2 The following default gems are updated. * RubyGems 4.0.3 * bundler 4.0.3 * date 3.5.1 * 3.4.1 to [v3.5.0][date-v3.5.0], [v3.5.1][date-v3.5.1] * delegate 0.6.1 * 0.4.0 to [v0.5.0][delegate-v0.5.0], [v0.6.0][delegate-v0.6.0], [v0.6.1][delegate-v0.6.1] * digest 3.2.1 * 3.2.0 to [v3.2.1][digest-v3.2.1] * english 0.8.1 * 0.8.0 to [v0.8.1][english-v0.8.1] * erb 6.0.1 * 4.0.4 to [v5.1.2][erb-v5.1.2], [v5.1.3][erb-v5.1.3], [v6.0.0][erb-v6.0.0], [v6.0.1][erb-v6.0.1] * error_highlight 0.7.1 * etc 1.4.6 * fcntl 1.3.0 * 1.2.0 to [v1.3.0][fcntl-v1.3.0] * fileutils 1.8.0 * 1.7.3 to [v1.8.0][fileutils-v1.8.0] * forwardable 1.4.0 * 1.3.3 to [v1.4.0][forwardable-v1.4.0] * io-console 0.8.2 * 0.8.1 to [v0.8.2][io-console-v0.8.2] * io-nonblock 0.3.2 * io-wait 0.4.0 * 0.3.2 to [v0.3.3][io-wait-v0.3.3], [v0.3.5.test1][io-wait-v0.3.5.test1], [v0.3.5][io-wait-v0.3.5], [v0.3.6][io-wait-v0.3.6], [v0.4.0][io-wait-v0.4.0] * ipaddr 1.2.8 * json 2.18.0 * 2.9.1 to [v2.10.0][json-v2.10.0], [v2.10.1][json-v2.10.1], [v2.10.2][json-v2.10.2], [v2.11.0][json-v2.11.0], [v2.11.1][json-v2.11.1], [v2.11.2][json-v2.11.2], [v2.11.3][json-v2.11.3], [v2.12.0][json-v2.12.0], [v2.12.1][json-v2.12.1], [v2.12.2][json-v2.12.2], [v2.13.0][json-v2.13.0], [v2.13.1][json-v2.13.1], [v2.13.2][json-v2.13.2], [v2.14.0][json-v2.14.0], [v2.14.1][json-v2.14.1], [v2.15.0][json-v2.15.0], [v2.15.1][json-v2.15.1], [v2.15.2][json-v2.15.2], [v2.16.0][json-v2.16.0], [v2.17.0][json-v2.17.0], [v2.17.1][json-v2.17.1], [v2.18.0][json-v2.18.0] * net-http 0.9.1 * 0.6.0 to [v0.7.0][net-http-v0.7.0], [v0.8.0][net-http-v0.8.0], [v0.9.0][net-http-v0.9.0], [v0.9.1][net-http-v0.9.1] * openssl 4.0.0 * 3.3.1 to [v3.3.2][openssl-v3.3.2], [v4.0.0][openssl-v4.0.0] * optparse 0.8.1 * 0.6.0 to [v0.7.0][optparse-v0.7.0], [v0.8.0][optparse-v0.8.0], [v0.8.1][optparse-v0.8.1] * pp 0.6.3 * 0.6.2 to [v0.6.3][pp-v0.6.3] * prism 1.7.0 * 1.5.2 to [v1.6.0][prism-v1.6.0], [v1.7.0][prism-v1.7.0] * psych 5.3.1 * 5.2.2 to [v5.2.3][psych-v5.2.3], [v5.2.4][psych-v5.2.4], [v5.2.5][psych-v5.2.5], [v5.2.6][psych-v5.2.6], [v5.3.0][psych-v5.3.0], [v5.3.1][psych-v5.3.1] * resolv 0.7.0 * 0.6.2 to [v0.6.3][resolv-v0.6.3], [v0.7.0][resolv-v0.7.0] * stringio 3.2.0 * 3.1.2 to [v3.1.3][stringio-v3.1.3], [v3.1.4][stringio-v3.1.4], [v3.1.5][stringio-v3.1.5], [v3.1.6][stringio-v3.1.6], [v3.1.7][stringio-v3.1.7], [v3.1.8][stringio-v3.1.8], [v3.1.9][stringio-v3.1.9], [v3.2.0][stringio-v3.2.0] * strscan 3.1.6 * 3.1.2 to [v3.1.3][strscan-v3.1.3], [v3.1.4][strscan-v3.1.4], [v3.1.5][strscan-v3.1.5], [v3.1.6][strscan-v3.1.6] * time 0.4.2 * 0.4.1 to [v0.4.2][time-v0.4.2] * timeout 0.6.0 * 0.4.3 to [v0.4.4][timeout-v0.4.4], [v0.5.0][timeout-v0.5.0], [v0.6.0][timeout-v0.6.0] * uri 1.1.1 * 1.0.4 to [v1.1.0][uri-v1.1.0], [v1.1.1][uri-v1.1.1] * weakref 0.1.4 * 0.1.3 to [v0.1.4][weakref-v0.1.4] * zlib 3.2.2 * 3.2.1 to [v3.2.2][zlib-v3.2.2] The following bundled gems are updated. * minitest 6.0.0 * power_assert 3.0.1 * 2.0.5 to [v3.0.0][power_assert-v3.0.0], [v3.0.1][power_assert-v3.0.1] * rake 13.3.1 * 13.2.1 to [v13.3.0][rake-v13.3.0], [v13.3.1][rake-v13.3.1] * test-unit 3.7.5 * 3.6.7 to [3.6.8][test-unit-3.6.8], [3.6.9][test-unit-3.6.9], [3.7.0][test-unit-3.7.0], [3.7.1][test-unit-3.7.1], [3.7.2][test-unit-3.7.2], [3.7.3][test-unit-3.7.3], [3.7.4][test-unit-3.7.4], [3.7.5][test-unit-3.7.5] * rexml 3.4.4 * rss 0.3.2 * 0.3.1 to [0.3.2][rss-0.3.2] * net-ftp 0.3.9 * 0.3.8 to [v0.3.9][net-ftp-v0.3.9] * net-imap 0.6.2 * 0.5.8 to [v0.5.9][net-imap-v0.5.9], [v0.5.10][net-imap-v0.5.10], [v0.5.11][net-imap-v0.5.11], [v0.5.12][net-imap-v0.5.12], [v0.5.13][net-imap-v0.5.13], [v0.6.0][net-imap-v0.6.0], [v0.6.1][net-imap-v0.6.1], [v0.6.2][net-imap-v0.6.2] * net-smtp 0.5.1 * 0.5.0 to [v0.5.1][net-smtp-v0.5.1] * matrix 0.4.3 * 0.4.2 to [v0.4.3][matrix-v0.4.3] * prime 0.1.4 * 0.1.3 to [v0.1.4][prime-v0.1.4] * rbs 3.10.0 * 3.8.0 to [v3.8.1][rbs-v3.8.1], [v3.9.0.dev.1][rbs-v3.9.0.dev.1], [v3.9.0.pre.1][rbs-v3.9.0.pre.1], [v3.9.0.pre.2][rbs-v3.9.0.pre.2], [v3.9.0][rbs-v3.9.0], [v3.9.1][rbs-v3.9.1], [v3.9.2][rbs-v3.9.2], [v3.9.3][rbs-v3.9.3], [v3.9.4][rbs-v3.9.4], [v3.9.5][rbs-v3.9.5], [v3.10.0.pre.1][rbs-v3.10.0.pre.1], [v3.10.0.pre.2][rbs-v3.10.0.pre.2], [v3.10.0][rbs-v3.10.0] * typeprof 0.31.1 * debug 1.11.1 * 1.11.0 to [v1.11.1][debug-v1.11.1] * base64 0.3.0 * 0.2.0 to [v0.3.0][base64-v0.3.0] * bigdecimal 4.0.1 * 3.1.8 to [v3.2.0][bigdecimal-v3.2.0], [v3.2.1][bigdecimal-v3.2.1], [v3.2.2][bigdecimal-v3.2.2], [v3.2.3][bigdecimal-v3.2.3], [v3.3.0][bigdecimal-v3.3.0], [v3.3.1][bigdecimal-v3.3.1], [v4.0.0][bigdecimal-v4.0.0], [v4.0.1][bigdecimal-v4.0.1] * drb 2.2.3 * 2.2.1 to [v2.2.3][drb-v2.2.3] * syslog 0.3.0 * 0.2.0 to [v0.3.0][syslog-v0.3.0] * csv 3.3.5 * 3.3.2 to [v3.3.3][csv-v3.3.3], [v3.3.4][csv-v3.3.4], [v3.3.5][csv-v3.3.5] * repl_type_completor 0.1.12 ### RubyGems and Bundler Ruby 4.0 bundled RubyGems and Bundler version 4. see the following links for details. * [Upgrading to RubyGems/Bundler 4 - RubyGems Blog](https://blog.rubygems.org/2025/12/03/upgrade-to-rubygems-bundler-4.html) * [4.0.0 Released - RubyGems Blog](https://blog.rubygems.org/2025/12/03/4.0.0-released.html) * [4.0.1 Released - RubyGems Blog](https://blog.rubygems.org/2025/12/09/4.0.1-released.html) * [4.0.2 Released - RubyGems Blog](https://blog.rubygems.org/2025/12/17/4.0.2-released.html) * [4.0.3 Released - RubyGems Blog](https://blog.rubygems.org/2025/12/23/4.0.3-released.html) ## Supported platforms * Windows * Dropped support for MSVC versions older than 14.0 (_MSC_VER 1900). This means Visual Studio 2015 or later is now required. ## Compatibility issues * The following methods were removed from Ractor due to the addition of `Ractor::Port`: * `Ractor.yield` * `Ractor#take` * `Ractor#close_incoming` * `Ractor#close_outgoing` [[Feature #21262]] * `ObjectSpace._id2ref` is deprecated. [[Feature #15408]] * `Process::Status#&` and `Process::Status#>>` have been removed. They were deprecated in Ruby 3.3. [[Bug #19868]] * `rb_path_check` has been removed. This function was used for `$SAFE` path checking which was removed in Ruby 2.7, and was already deprecated. [[Feature #20971]] * A backtrace for `ArgumentError` of "wrong number of arguments" now include the receiver's class or module name (e.g., in `Foo#bar` instead of in `bar`). [[Bug #21698]] * Backtraces no longer display `internal` frames. These methods now appear as if it is in the Ruby source file, consistent with other C-implemented methods. [[Bug #20968]] Before: ``` ruby -e '[1].fetch_values(42)' :211:in 'Array#fetch': index 42 outside of array bounds: -1...1 (IndexError) from :211:in 'block in Array#fetch_values' from :211:in 'Array#map!' from :211:in 'Array#fetch_values' from -e:1:in '
' ``` After: ``` $ ruby -e '[1].fetch_values(42)' -e:1:in 'Array#fetch_values': index 42 outside of array bounds: -1...1 (IndexError) from -e:1:in '
' ``` ## Stdlib compatibility issues * CGI library is removed from the default gems. Now we only provide `cgi/escape` for the following methods: * `CGI.escape` and `CGI.unescape` * `CGI.escapeHTML` and `CGI.unescapeHTML` * `CGI.escapeURIComponent` and `CGI.unescapeURIComponent` * `CGI.escapeElement` and `CGI.unescapeElement` [[Feature #21258]] * With the move of `Set` from stdlib to core class, `set/sorted_set.rb` has been removed, and `SortedSet` is no longer an autoloaded constant. Please install the `sorted_set` gem and `require 'sorted_set'` to use `SortedSet`. [[Feature #21287]] * Net::HTTP * The default behavior of automatically setting the `Content-Type` header to `application/x-www-form-urlencoded` for requests with a body (e.g., `POST`, `PUT`) when the header was not explicitly set has been removed. If your application relied on this automatic default, your requests will now be sent without a Content-Type header, potentially breaking compatibility with certain servers. [[GH-net-http #205]] ## C API updates * IO * `rb_thread_fd_close` is deprecated and now a no-op. If you need to expose file descriptors from C extensions to Ruby code, create an `IO` instance using `RUBY_IO_MODE_EXTERNAL` and use `rb_io_close(io)` to close it (this also interrupts and waits for all pending operations on the `IO` instance). Directly closing file descriptors does not interrupt pending operations, and may lead to undefined behaviour. In other words, if two `IO` objects share the same file descriptor, closing one does not affect the other. [[Feature #18455]] * GVL * `rb_thread_call_with_gvl` now works with or without the GVL. This allows gems to avoid checking `ruby_thread_has_gvl_p`. Please still be diligent about the GVL. [[Feature #20750]] * Set * A C API for `Set` has been added. The following methods are supported: [[Feature #21459]] * `rb_set_foreach` * `rb_set_new` * `rb_set_new_capa` * `rb_set_lookup` * `rb_set_add` * `rb_set_clear` * `rb_set_delete` * `rb_set_size` ## Implementation improvements * `Class#new` (ex. `Object.new`) is faster in all cases, but especially when passing keyword arguments. This has also been integrated into YJIT and ZJIT. [[Feature #21254]] * GC heaps of different size pools now grow independently, reducing memory usage when only some pools contain long-lived objects * GC sweeping is faster on pages of large objects * "Generic ivar" objects (String, Array, `TypedData`, etc.) now use a new internal "fields" object for faster instance variable access * The GC avoids maintaining an internal `id2ref` table until it is first used, making `object_id` allocation and GC sweeping faster * `object_id` and `hash` are faster on Class and Module objects * Larger bignum Integers can remain embedded using variable width allocation * `Random`, `Enumerator::Product`, `Enumerator::Chain`, `Addrinfo`, `StringScanner`, and some internal objects are now write-barrier protected, which reduces GC overhead. ### Ractor A lot of work has gone into making Ractors more stable, performant, and usable. These improvements bring Ractor implementation closer to leaving experimental status. * Performance improvements * Frozen strings and the symbol table internally use a lock-free hash set [[Feature #21268]] * Method cache lookups avoid locking in most cases * Class (and generic ivar) instance variable access is faster and avoids locking * CPU cache contention is avoided in object allocation by using a per-ractor counter * CPU cache contention is avoided in xmalloc/xfree by using a thread-local counter * `object_id` avoids locking in most cases * Bug fixes and stability * Fixed possible deadlocks when combining Ractors and Threads * Fixed issues with require and autoload in a Ractor * Fixed encoding/transcoding issues across Ractors * Fixed race conditions in GC operations and method invalidation * Fixed issues with processes forking after starting a Ractor * GC allocation counts are now accurate under Ractors * Fixed TracePoints not working after GC [[Bug #19112]] ## JIT * ZJIT * Introduce an [experimental method-based JIT compiler](https://docs.ruby-lang.org/en/master/jit/zjit_md.html). Where available, ZJIT can be enabled at runtime with the `--zjit` option or by calling `RubyVM::ZJIT.enable`. When building Ruby, Rust 1.85.0 or later is required to include ZJIT support. * As of Ruby 4.0.0, ZJIT is faster than the interpreter, but not yet as fast as YJIT. We encourage experimentation with ZJIT, but advise against deploying it in production for now. * Our goal is to make ZJIT faster than YJIT and production-ready in Ruby 4.1. * YJIT * `RubyVM::YJIT.runtime_stats` * `ratio_in_yjit` no longer works in the default build. Use `--enable-yjit=stats` on `configure` to enable it on `--yjit-stats`. * Add `invalidate_everything` to default stats, which is incremented when every code is invalidated by TracePoint. * Add `mem_size:` and `call_threshold:` options to `RubyVM::YJIT.enable`. * RJIT * `--rjit` is removed. We will move the implementation of the third-party JIT API to the [ruby/rjit](https://github.com/ruby/rjit) repository. [Feature #15408]: https://bugs.ruby-lang.org/issues/15408 [Feature #17473]: https://bugs.ruby-lang.org/issues/17473 [Feature #18455]: https://bugs.ruby-lang.org/issues/18455 [Bug #19112]: https://bugs.ruby-lang.org/issues/19112 [Feature #19630]: https://bugs.ruby-lang.org/issues/19630 [Bug #19868]: https://bugs.ruby-lang.org/issues/19868 [Feature #19908]: https://bugs.ruby-lang.org/issues/19908 [Feature #20610]: https://bugs.ruby-lang.org/issues/20610 [Feature #20724]: https://bugs.ruby-lang.org/issues/20724 [Feature #20750]: https://bugs.ruby-lang.org/issues/20750 [Feature #20884]: https://bugs.ruby-lang.org/issues/20884 [Feature #20925]: https://bugs.ruby-lang.org/issues/20925 [Bug #20968]: https://bugs.ruby-lang.org/issues/20968 [Feature #20971]: https://bugs.ruby-lang.org/issues/20971 [Bug #20974]: https://bugs.ruby-lang.org/issues/20974 [Feature #21047]: https://bugs.ruby-lang.org/issues/21047 [Bug #21049]: https://bugs.ruby-lang.org/issues/21049 [Feature #21166]: https://bugs.ruby-lang.org/issues/21166 [Bug #21174]: https://bugs.ruby-lang.org/issues/21174 [Bug #21175]: https://bugs.ruby-lang.org/issues/21175 [Bug #21185]: https://bugs.ruby-lang.org/issues/21185 [Feature #21205]: https://bugs.ruby-lang.org/issues/21205 [Feature #21216]: https://bugs.ruby-lang.org/issues/21216 [Feature #21219]: https://bugs.ruby-lang.org/issues/21219 [Feature #21254]: https://bugs.ruby-lang.org/issues/21254 [Feature #21258]: https://bugs.ruby-lang.org/issues/21258 [Feature #21268]: https://bugs.ruby-lang.org/issues/21268 [Feature #21262]: https://bugs.ruby-lang.org/issues/21262 [Feature #21275]: https://bugs.ruby-lang.org/issues/21275 [Feature #21287]: https://bugs.ruby-lang.org/issues/21287 [Feature #21311]: https://bugs.ruby-lang.org/issues/21311 [Feature #21347]: https://bugs.ruby-lang.org/issues/21347 [Feature #21360]: https://bugs.ruby-lang.org/issues/21360 [Misc #21385]: https://bugs.ruby-lang.org/issues/21385 [Feature #21389]: https://bugs.ruby-lang.org/issues/21389 [Feature #21390]: https://bugs.ruby-lang.org/issues/21390 [Feature #21459]: https://bugs.ruby-lang.org/issues/21459 [Feature #21527]: https://bugs.ruby-lang.org/issues/21527 [Feature #21543]: https://bugs.ruby-lang.org/issues/21543 [Feature #21550]: https://bugs.ruby-lang.org/issues/21550 [Feature #21552]: https://bugs.ruby-lang.org/issues/21552 [Feature #21557]: https://bugs.ruby-lang.org/issues/21557 [Bug #21633]: https://bugs.ruby-lang.org/issues/21633 [Bug #21654]: https://bugs.ruby-lang.org/issues/21654 [Feature #21678]: https://bugs.ruby-lang.org/issues/21678 [Bug #21698]: https://bugs.ruby-lang.org/issues/21698 [Feature #21701]: https://bugs.ruby-lang.org/issues/21701 [Bug #21789]: https://bugs.ruby-lang.org/issues/21789 [GH-net-http #205]: https://github.com/ruby/net-http/issues/205 [ostruct-v0.6.2]: https://github.com/ruby/ostruct/releases/tag/v0.6.2 [ostruct-v0.6.3]: https://github.com/ruby/ostruct/releases/tag/v0.6.3 [pstore-v0.2.0]: https://github.com/ruby/pstore/releases/tag/v0.2.0 [benchmark-v0.4.1]: https://github.com/ruby/benchmark/releases/tag/v0.4.1 [benchmark-v0.5.0]: https://github.com/ruby/benchmark/releases/tag/v0.5.0 [logger-v1.6.5]: https://github.com/ruby/logger/releases/tag/v1.6.5 [logger-v1.6.6]: https://github.com/ruby/logger/releases/tag/v1.6.6 [logger-v1.7.0]: https://github.com/ruby/logger/releases/tag/v1.7.0 [rdoc-v6.14.1]: https://github.com/ruby/rdoc/releases/tag/v6.14.1 [rdoc-v6.14.2]: https://github.com/ruby/rdoc/releases/tag/v6.14.2 [rdoc-v6.15.0]: https://github.com/ruby/rdoc/releases/tag/v6.15.0 [rdoc-v6.15.1]: https://github.com/ruby/rdoc/releases/tag/v6.15.1 [rdoc-v6.16.0]: https://github.com/ruby/rdoc/releases/tag/v6.16.0 [rdoc-v6.16.1]: https://github.com/ruby/rdoc/releases/tag/v6.16.1 [rdoc-v6.17.0]: https://github.com/ruby/rdoc/releases/tag/v6.17.0 [rdoc-v7.0.0]: https://github.com/ruby/rdoc/releases/tag/v7.0.0 [rdoc-v7.0.1]: https://github.com/ruby/rdoc/releases/tag/v7.0.1 [rdoc-v7.0.2]: https://github.com/ruby/rdoc/releases/tag/v7.0.2 [rdoc-v7.0.3]: https://github.com/ruby/rdoc/releases/tag/v7.0.3 [win32ole-v1.9.2]: https://github.com/ruby/win32ole/releases/tag/v1.9.2 [irb-v1.15.0]: https://github.com/ruby/irb/releases/tag/v1.15.0 [irb-v1.15.1]: https://github.com/ruby/irb/releases/tag/v1.15.1 [irb-v1.15.2]: https://github.com/ruby/irb/releases/tag/v1.15.2 [irb-v1.15.3]: https://github.com/ruby/irb/releases/tag/v1.15.3 [irb-v1.16.0]: https://github.com/ruby/irb/releases/tag/v1.16.0 [reline-v0.6.1]: https://github.com/ruby/reline/releases/tag/v0.6.1 [reline-v0.6.2]: https://github.com/ruby/reline/releases/tag/v0.6.2 [reline-v0.6.3]: https://github.com/ruby/reline/releases/tag/v0.6.3 [fiddle-v1.1.7]: https://github.com/ruby/fiddle/releases/tag/v1.1.7 [fiddle-v1.1.8]: https://github.com/ruby/fiddle/releases/tag/v1.1.8 [date-v3.5.0]: https://github.com/ruby/date/releases/tag/v3.5.0 [date-v3.5.1]: https://github.com/ruby/date/releases/tag/v3.5.1 [delegate-v0.5.0]: https://github.com/ruby/delegate/releases/tag/v0.5.0 [delegate-v0.6.0]: https://github.com/ruby/delegate/releases/tag/v0.6.0 [delegate-v0.6.1]: https://github.com/ruby/delegate/releases/tag/v0.6.1 [digest-v3.2.1]: https://github.com/ruby/digest/releases/tag/v3.2.1 [english-v0.8.1]: https://github.com/ruby/english/releases/tag/v0.8.1 [erb-v5.1.2]: https://github.com/ruby/erb/releases/tag/v5.1.2 [erb-v5.1.3]: https://github.com/ruby/erb/releases/tag/v5.1.3 [erb-v6.0.0]: https://github.com/ruby/erb/releases/tag/v6.0.0 [erb-v6.0.1]: https://github.com/ruby/erb/releases/tag/v6.0.1 [fcntl-v1.3.0]: https://github.com/ruby/fcntl/releases/tag/v1.3.0 [fileutils-v1.8.0]: https://github.com/ruby/fileutils/releases/tag/v1.8.0 [forwardable-v1.4.0]: https://github.com/ruby/forwardable/releases/tag/v1.4.0 [io-console-v0.8.2]: https://github.com/ruby/io-console/releases/tag/v0.8.2 [io-wait-v0.3.3]: https://github.com/ruby/io-wait/releases/tag/v0.3.3 [io-wait-v0.3.5.test1]: https://github.com/ruby/io-wait/releases/tag/v0.3.5.test1 [io-wait-v0.3.5]: https://github.com/ruby/io-wait/releases/tag/v0.3.5 [io-wait-v0.3.6]: https://github.com/ruby/io-wait/releases/tag/v0.3.6 [io-wait-v0.4.0]: https://github.com/ruby/io-wait/releases/tag/v0.4.0 [json-v2.10.0]: https://github.com/ruby/json/releases/tag/v2.10.0 [json-v2.10.1]: https://github.com/ruby/json/releases/tag/v2.10.1 [json-v2.10.2]: https://github.com/ruby/json/releases/tag/v2.10.2 [json-v2.11.0]: https://github.com/ruby/json/releases/tag/v2.11.0 [json-v2.11.1]: https://github.com/ruby/json/releases/tag/v2.11.1 [json-v2.11.2]: https://github.com/ruby/json/releases/tag/v2.11.2 [json-v2.11.3]: https://github.com/ruby/json/releases/tag/v2.11.3 [json-v2.12.0]: https://github.com/ruby/json/releases/tag/v2.12.0 [json-v2.12.1]: https://github.com/ruby/json/releases/tag/v2.12.1 [json-v2.12.2]: https://github.com/ruby/json/releases/tag/v2.12.2 [json-v2.13.0]: https://github.com/ruby/json/releases/tag/v2.13.0 [json-v2.13.1]: https://github.com/ruby/json/releases/tag/v2.13.1 [json-v2.13.2]: https://github.com/ruby/json/releases/tag/v2.13.2 [json-v2.14.0]: https://github.com/ruby/json/releases/tag/v2.14.0 [json-v2.14.1]: https://github.com/ruby/json/releases/tag/v2.14.1 [json-v2.15.0]: https://github.com/ruby/json/releases/tag/v2.15.0 [json-v2.15.1]: https://github.com/ruby/json/releases/tag/v2.15.1 [json-v2.15.2]: https://github.com/ruby/json/releases/tag/v2.15.2 [json-v2.16.0]: https://github.com/ruby/json/releases/tag/v2.16.0 [json-v2.17.0]: https://github.com/ruby/json/releases/tag/v2.17.0 [json-v2.17.1]: https://github.com/ruby/json/releases/tag/v2.17.1 [json-v2.18.0]: https://github.com/ruby/json/releases/tag/v2.18.0 [net-http-v0.7.0]: https://github.com/ruby/net-http/releases/tag/v0.7.0 [net-http-v0.8.0]: https://github.com/ruby/net-http/releases/tag/v0.8.0 [net-http-v0.9.0]: https://github.com/ruby/net-http/releases/tag/v0.9.0 [net-http-v0.9.1]: https://github.com/ruby/net-http/releases/tag/v0.9.1 [openssl-v3.3.2]: https://github.com/ruby/openssl/releases/tag/v3.3.2 [openssl-v4.0.0]: https://github.com/ruby/openssl/releases/tag/v4.0.0 [optparse-v0.7.0]: https://github.com/ruby/optparse/releases/tag/v0.7.0 [optparse-v0.8.0]: https://github.com/ruby/optparse/releases/tag/v0.8.0 [optparse-v0.8.1]: https://github.com/ruby/optparse/releases/tag/v0.8.1 [pp-v0.6.3]: https://github.com/ruby/pp/releases/tag/v0.6.3 [prism-v1.6.0]: https://github.com/ruby/prism/releases/tag/v1.6.0 [prism-v1.7.0]: https://github.com/ruby/prism/releases/tag/v1.7.0 [psych-v5.2.3]: https://github.com/ruby/psych/releases/tag/v5.2.3 [psych-v5.2.4]: https://github.com/ruby/psych/releases/tag/v5.2.4 [psych-v5.2.5]: https://github.com/ruby/psych/releases/tag/v5.2.5 [psych-v5.2.6]: https://github.com/ruby/psych/releases/tag/v5.2.6 [psych-v5.3.0]: https://github.com/ruby/psych/releases/tag/v5.3.0 [psych-v5.3.1]: https://github.com/ruby/psych/releases/tag/v5.3.1 [resolv-v0.6.3]: https://github.com/ruby/resolv/releases/tag/v0.6.3 [resolv-v0.7.0]: https://github.com/ruby/resolv/releases/tag/v0.7.0 [stringio-v3.1.3]: https://github.com/ruby/stringio/releases/tag/v3.1.3 [stringio-v3.1.4]: https://github.com/ruby/stringio/releases/tag/v3.1.4 [stringio-v3.1.5]: https://github.com/ruby/stringio/releases/tag/v3.1.5 [stringio-v3.1.6]: https://github.com/ruby/stringio/releases/tag/v3.1.6 [stringio-v3.1.7]: https://github.com/ruby/stringio/releases/tag/v3.1.7 [stringio-v3.1.8]: https://github.com/ruby/stringio/releases/tag/v3.1.8 [stringio-v3.1.9]: https://github.com/ruby/stringio/releases/tag/v3.1.9 [stringio-v3.2.0]: https://github.com/ruby/stringio/releases/tag/v3.2.0 [strscan-v3.1.3]: https://github.com/ruby/strscan/releases/tag/v3.1.3 [strscan-v3.1.4]: https://github.com/ruby/strscan/releases/tag/v3.1.4 [strscan-v3.1.5]: https://github.com/ruby/strscan/releases/tag/v3.1.5 [strscan-v3.1.6]: https://github.com/ruby/strscan/releases/tag/v3.1.6 [time-v0.4.2]: https://github.com/ruby/time/releases/tag/v0.4.2 [timeout-v0.4.4]: https://github.com/ruby/timeout/releases/tag/v0.4.4 [timeout-v0.5.0]: https://github.com/ruby/timeout/releases/tag/v0.5.0 [timeout-v0.6.0]: https://github.com/ruby/timeout/releases/tag/v0.6.0 [uri-v1.1.0]: https://github.com/ruby/uri/releases/tag/v1.1.0 [uri-v1.1.1]: https://github.com/ruby/uri/releases/tag/v1.1.1 [weakref-v0.1.4]: https://github.com/ruby/weakref/releases/tag/v0.1.4 [zlib-v3.2.2]: https://github.com/ruby/zlib/releases/tag/v3.2.2 [power_assert-v3.0.0]: https://github.com/ruby/power_assert/releases/tag/v3.0.0 [power_assert-v3.0.1]: https://github.com/ruby/power_assert/releases/tag/v3.0.1 [rake-v13.3.0]: https://github.com/ruby/rake/releases/tag/v13.3.0 [rake-v13.3.1]: https://github.com/ruby/rake/releases/tag/v13.3.1 [test-unit-3.6.8]: https://github.com/test-unit/test-unit/releases/tag/3.6.8 [test-unit-3.6.9]: https://github.com/test-unit/test-unit/releases/tag/3.6.9 [test-unit-3.7.0]: https://github.com/test-unit/test-unit/releases/tag/3.7.0 [test-unit-3.7.1]: https://github.com/test-unit/test-unit/releases/tag/3.7.1 [test-unit-3.7.2]: https://github.com/test-unit/test-unit/releases/tag/3.7.2 [test-unit-3.7.3]: https://github.com/test-unit/test-unit/releases/tag/3.7.3 [test-unit-3.7.4]: https://github.com/test-unit/test-unit/releases/tag/3.7.4 [test-unit-3.7.5]: https://github.com/test-unit/test-unit/releases/tag/3.7.5 [rss-0.3.2]: https://github.com/ruby/rss/releases/tag/0.3.2 [net-ftp-v0.3.9]: https://github.com/ruby/net-ftp/releases/tag/v0.3.9 [net-imap-v0.5.9]: https://github.com/ruby/net-imap/releases/tag/v0.5.9 [net-imap-v0.5.10]: https://github.com/ruby/net-imap/releases/tag/v0.5.10 [net-imap-v0.5.11]: https://github.com/ruby/net-imap/releases/tag/v0.5.11 [net-imap-v0.5.12]: https://github.com/ruby/net-imap/releases/tag/v0.5.12 [net-imap-v0.5.13]: https://github.com/ruby/net-imap/releases/tag/v0.5.13 [net-imap-v0.6.0]: https://github.com/ruby/net-imap/releases/tag/v0.6.0 [net-imap-v0.6.1]: https://github.com/ruby/net-imap/releases/tag/v0.6.1 [net-imap-v0.6.2]: https://github.com/ruby/net-imap/releases/tag/v0.6.2 [net-smtp-v0.5.1]: https://github.com/ruby/net-smtp/releases/tag/v0.5.1 [matrix-v0.4.3]: https://github.com/ruby/matrix/releases/tag/v0.4.3 [prime-v0.1.4]: https://github.com/ruby/prime/releases/tag/v0.1.4 [rbs-v3.8.1]: https://github.com/ruby/rbs/releases/tag/v3.8.1 [rbs-v3.9.0.dev.1]: https://github.com/ruby/rbs/releases/tag/v3.9.0.dev.1 [rbs-v3.9.0.pre.1]: https://github.com/ruby/rbs/releases/tag/v3.9.0.pre.1 [rbs-v3.9.0.pre.2]: https://github.com/ruby/rbs/releases/tag/v3.9.0.pre.2 [rbs-v3.9.0]: https://github.com/ruby/rbs/releases/tag/v3.9.0 [rbs-v3.9.1]: https://github.com/ruby/rbs/releases/tag/v3.9.1 [rbs-v3.9.2]: https://github.com/ruby/rbs/releases/tag/v3.9.2 [rbs-v3.9.3]: https://github.com/ruby/rbs/releases/tag/v3.9.3 [rbs-v3.9.4]: https://github.com/ruby/rbs/releases/tag/v3.9.4 [rbs-v3.9.5]: https://github.com/ruby/rbs/releases/tag/v3.9.5 [rbs-v3.10.0.pre.1]: https://github.com/ruby/rbs/releases/tag/v3.10.0.pre.1 [rbs-v3.10.0.pre.2]: https://github.com/ruby/rbs/releases/tag/v3.10.0.pre.2 [rbs-v3.10.0]: https://github.com/ruby/rbs/releases/tag/v3.10.0 [debug-v1.11.1]: https://github.com/ruby/debug/releases/tag/v1.11.1 [base64-v0.3.0]: https://github.com/ruby/base64/releases/tag/v0.3.0 [bigdecimal-v3.2.0]: https://github.com/ruby/bigdecimal/releases/tag/v3.2.0 [bigdecimal-v3.2.1]: https://github.com/ruby/bigdecimal/releases/tag/v3.2.1 [bigdecimal-v3.2.2]: https://github.com/ruby/bigdecimal/releases/tag/v3.2.2 [bigdecimal-v3.2.3]: https://github.com/ruby/bigdecimal/releases/tag/v3.2.3 [bigdecimal-v3.3.0]: https://github.com/ruby/bigdecimal/releases/tag/v3.3.0 [bigdecimal-v3.3.1]: https://github.com/ruby/bigdecimal/releases/tag/v3.3.1 [bigdecimal-v4.0.0]: https://github.com/ruby/bigdecimal/releases/tag/v4.0.0 [bigdecimal-v4.0.1]: https://github.com/ruby/bigdecimal/releases/tag/v4.0.1 [drb-v2.2.3]: https://github.com/ruby/drb/releases/tag/v2.2.3 [syslog-v0.3.0]: https://github.com/ruby/syslog/releases/tag/v0.3.0 [csv-v3.3.3]: https://github.com/ruby/csv/releases/tag/v3.3.3 [csv-v3.3.4]: https://github.com/ruby/csv/releases/tag/v3.3.4 [csv-v3.3.5]: https://github.com/ruby/csv/releases/tag/v3.3.5 PK!<)  alt-libxml2/Copyrightnu[Except where otherwise noted in the source code (e.g. the files hash.c, list.c and the trio files, which are covered by a similar licence but with different Copyright notices) all the files are: Copyright (C) 1998-2012 Daniel Veillard. All Rights Reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is fur- nished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FIT- NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. PK!BՈalt-libxml2/NEWSnu[NEWS file for libxml2 v2.10.2: Aug 29 2022 ### Improvements - Remove set-but-unused variable in xmlXPathScanName - Silence -Warray-bounds warning ### Build system - build: require automake-1.16.3 or later (Xi Ruoyao) - Remove generated files from distribution ### Test suite - Don't create missing.xml when running testapi v2.10.1: Aug 25 2022 ### Regressions - Fix xmlCtxtReadDoc with encoding ### Bug fixes - Fix HTML parser with threads and --without-legacy ### Build system - Fix build with Python 3.10 - cmake: Disable version script on macOS - Remove Makefile rule to build testapi.c ### Documentation - Switch back to HTML output for API documentation - Port doc/examples/index.py to Python 3 - Fix order of exports in libxml2-api.xml - Remove libxml2-refs.xml v2.10.0: Aug 17 2022 ### Security - [CVE-2022-2309] Reset nsNr in xmlCtxtReset - Reserve byte for NUL terminator and report errors consistently in xmlBuf and xmlBuffer (David Kilzer) - Fix missing NUL terminators in xmlBuf and xmlBuffer functions (David Kilzer) - Fix integer overflow in xmlBufferDump() (David Kilzer) - xmlBufAvail() should return length without including a byte for NUL terminator (David Kilzer) - Fix ownership of xmlNodePtr & xmlAttrPtr fields in xmlSetTreeDoc() (David Kilzer) - Use xmlNewDocText in xmlXIncludeCopyRange - Fix use-after-free bugs when calling xmlTextReaderClose() before xmlFreeTextReader() on post-validating parser (David Kilzer) - Use UPDATE_COMPAT() consistently in buf.c (David Kilzer) - fix: xmlXPathParserContext could be double-delete in OOM case. (jinsub ahn) ### Removals and deprecations - Disable XPointer location support by default - Remove outdated xml2Conf.sh - Deprecate module init and cleanup functions - Remove obsolete XML Software Autoupdate (XSA) file - Remove DOCBparser - Remove obsolete Python test framework - Remove broken VxWorks support - Remove broken Mac OS 9 support - Remove broken bakefile support - Remove broken Visual Studio 2010 support - Remove broken Windows CE support - Deprecate IDREF-related functions in valid.h - Deprecate legacy functions - Disable legacy support by default - Deprecate all functions in nanoftp.h - Disable FTP support by default - Add XML_DEPRECATED macro - Remove elfgcchack.h ### Regressions - Skip incorrectly opened HTML comments - Restore behavior of htmlDocContentDumpFormatOutput() (David Kilzer) ### Bug fixes - Fix memory leak with invalid XSD - Make XPath depth check work with recursive invocations - Fix memory leak in xmlLoadEntityContent error path - Avoid double-free if malloc fails in inputPush - Properly fold whitespace around the QName value when validating an XSD schema. (Damjan Jovanovic) - Add whitespace folding for some atomic data types that it's missing on. (Damjan Jovanovic) - Don't add IDs containing unexpanded entity references ### Improvements - Avoid calling xmlSetTreeDoc - Simplify xmlFreeNode - Don't reset nsDef when changing node content - Fix unintended fall-through in xmlNodeAddContentLen - Remove unused xmlBuf functions (David Kilzer) - Implement xpath1() XPointer scheme - Add configuration flag for XPointer locations support - Fix compiler warnings in Python code - Mark more static data as `const` (David Kilzer) - Make xmlStaticCopyNode non-recursive - Clean up encoding switching code - Simplify recursive pthread mutex - Use non-recursive mutex in dict.c - Fix parser progress checks - Avoid arithmetic on freed pointers - Improve buffer allocation scheme - Remove unneeded #includes - Add support for some non-standard escapes in regular expressions. (Damjan Jovanovic) - htmlParseComment: handle abruptly-closed comments (Mike Dalessio) - Add let variable tag support (Oliver Diehl) - Add value-of tag support (Oliver Diehl) - Remove useless call to xmlRelaxNGCleanupTypes - Don't include ICU headers in public headers - Update `xmlStrlen()` to use POSIX / ISO C `strlen()` (Mike Dalessio) - Fix unused variable warnings with disabled features - Only warn on invalid redeclarations of predefined entities - Remove unneeded code in xmlreader.c - Rework validation context flags ### Portability - Use NAN/INFINITY if available to init XPath NaN/Inf (Sergey Kosukhin) - Fix Python tests on macOS - Fix xmlCleanupThreads on Windows - Fix reinitialization of library on Windows - Don't mix declarations and code in runtest.c - Use portable python shebangs (David Seifert) - Use critical sections as mutex on Windows - Don't set HAVE_WIN32_THREADS in win32config.h - Use stdint.h with newer MSVC - Remove cruft from win32config.h - Remove isinf/isnan emulation in win32config.h - Always fopen files with "rb" - Remove __DJGPP__ checks - Remove useless __CYGWIN__ checks ### Build system - Don't autogenerate doc/examples/Makefile.am - cmake: Install libxml.m4 on UNIX-like platforms (Daniel E) - cmake: Use symbol versioning on UNIX-like platforms (Daniel E) - Port genUnicode.py to Python 3 - Port gentest.py to Python 3 - cmake: Fix build without thread support - cmake: Install documentation in CMAKE_INSTALL_DOCDIR - cmake: Remove non needed files in docs dir (Daniel E) - configure: move XML_PRIVATE_LIBS after WIN32_EXTRA_LIBADD is set (Christopher Degawa) - Move local Autoconf macros into m4 directory - Use XML_PRIVATE_LIBS in libxml2_la_LIBADD - Update libxml-2.0-uninstalled.pc.in - Remove LIBS from XML_PRIVATE_LIBS - Add WIN32_EXTRA_LIBADD to XML_PRIVATE_LIBS - Don't overlink executables - cmake: Adjust paths for UNIX or UNIX-like target systems (Daniel Engberg) - build: Make use of variables in libxml's pkg-config file (Daniel Engberg) - Avoid obsolescent `test -a` constructs (David Seifert) - Move AM_MAINTAINER_MODE to AM section - configure.ac: make AM_SILENT_RULES([yes]) unconditional (David Seifert) - Streamline documentation installation - Don't try to recreate COPYING symlink - Detect libm using libtool's macros (David Seifert) - configure.ac: disable static libraries by default (David Seifert) - python/Makefile.am: nest python docs in $(docdir) (David Seifert) - python/Makefile.am: rely on global AM_INIT_AUTOMAKE (David Seifert) - Makefile.am: install examples more idiomatically (David Seifert) - configure.ac: remove useless AC_SUBST (David Seifert) - Respect `--sysconfdir` in source files (David Seifert) - Ignore configure backup file created by recent autoreconf too (Vadim Zeitlin) - Only install *.html and *.c example files - Remove --with-html-dir option - Rework documentation build system - Remove old website - Use AM_PATH_PYTHON/PKG_CHECK_MODULES for python bindings (David Seifert) - Update genChRanges.py - Update build_glob.py - Remove ICONV_CONST test - Remove obsolete AC_HEADER checks - Don't check for standard C89 library functions - Don't check for standard C89 headers - Remove special configuration for certain maintainers ### Test suite, CI - Disable network in API tests - testapi: remove leading slash from "/missing.xml" (Mike Gilbert) - Build Autotools CI tests out of source tree (VPATH) - Add --with-minimum build to CI tests - Fix warnings when testing --with-minimum build - cmake: Run all tests when threads are disabled - Also build CI tests with -Werror - Move doc/examples tests to new test suite - Simplify 'make check' targets - Fix schemas and relaxng tests - Remove unused result files - Allow missing result files in runtest - Move regexp tests to runtest - Move SVG tests to runtest.c - Move testModule to new test suite - Move testThreads to new test suite - Remove major parts of old test suite - Make testchar return an error on failure (Tony Tascioglu) - Add CI job for static build - python/tests: open() relative to test scripts (David Seifert) - Port some test scripts to Python 3 ### Documentation - Improve documentation of tree manipulation API - Update xml2-config man page - Consolidate man pages - Rename xmlcatalog_man.xml - Make examples a standalone HTML page - Fix documentation in entities.c - Add note about optimization flags v2.9.14: May 02 2022: - Security: [CVE-2022-29824] Integer overflow in xmlBuf and xmlBuffer Fix potential double-free in xmlXPtrStringRangeFunction Fix memory leak in xmlFindCharEncodingHandler Normalize XPath strings in-place Prevent integer-overflow in htmlSkipBlankChars() and xmlSkipBlankChars() (David Kilzer) Fix leak of xmlElementContent (David Kilzer) - Bug fixes: Fix parsing of subtracted regex character classes Fix recursion check in xinclude.c Reset last error in xmlCleanupGlobals Fix certain combinations of regex range quantifiers Fix range quantifier on subregex - Improvements: Fix recovery from invalid HTML start tags - Build system, portability: Define LFS macros before including system headers Initialize XPath floating-point globals configure: check for icu DEFS (James Hilliard) configure.ac: produce tar.xz only (GNOME policy) (David Seifert) CMakeLists.txt: Fix LIBXML_VERSION_NUMBER Fix build with older Python versions Fix --without-valid build v2.9.13: Feb 19 2022: - Security: [CVE-2022-23308] Use-after-free of ID and IDREF attributes (Thanks to Shinji Sato for the report) Use-after-free in xmlXIncludeCopyRange (David Kilzer) Fix Null-deref-in-xmlSchemaGetComponentTargetNs (huangduirong) Fix memory leak in xmlXPathCompNodeTest Fix null pointer deref in xmlStringGetNodeList Fix several memory leaks found by Coverity (David King) - Fixed regressions: Fix regression in RelaxNG pattern matching Properly handle nested documents in xmlFreeNode Fix regression with PEs in external DTD Fix random dropping of characters on dumping ASCII encoded XML (Mohammad Razavi) Revert "Make schema validation fail with multiple top-level elements" Fix regression when parsing invalid HTML tags in push mode Fix regression parsing public IDs literals in HTML Fix buffering in xmlOutputBufferWrite Fix whitespace when serializing empty HTML documents Fix XPath recursion limit Fix regression in xmlNodeDumpOutputInternal Work around lxml API abuse - Bug fixes: Fix xmlSetTreeDoc with entity references Fix double counting of CRLF in comments Make sure to grow input buffer in xmlParseMisc Don't ignore xmllint options after "-" Don't normalize namespace URIs in XPointer xmlns() scheme Fix handling of XSD with empty namespace Also register HTML document nodes Make xmllint return an error if arguments are missing Fix handling of ctxt->base in xmlXPtrEvalXPtrPart Fix xmllint --maxmem Fix htmlReadFd, which was using a mix of xml and html context functions (Finn Barber) Move current position before possible calling of ctxt->sax->characters (Yulin Li) Fix parse failure when 4-byte character in UTF-16 BE is split across a chunk (David Kilzer) Patch to forbid epsilon-reduction of final states (Arne Becker) Avoid segfault at exit when using custom memory functions (Mike Dalessio) - Tests, code quality, fuzzing: Remove .travis.yml Make xmlFuzzReadString return a zero size in error case Fix unused function warning in testapi.c Update NewsML DTD in test suite Add more checks for malloc failures in xmllint.c Avoid potential integer overflow in xmlstring.c Run CI tests with UBSan implicit-conversion checks Fix casting of line numbers in SAX2.c Fix integer conversion warnings in hash.c Add explicit casts in runtest.c Fix integer conversion warning in xmlIconvWrapper Add suffix to unsigned constant in xmlmemory.c Add explicit casts in testchar.c Fix integer conversion warnings in xmlstring.c Add explicit cast in xmlURIUnescapeString Remove unused variable in xmlCharEncOutFunc (David King) - Build system, portability: Remove xmlwin32version.h Fix fuzzer test with VPATH build Support custom prefix when installing Python module Remove Makefile.win Remove CVS and SVN-related code Port python 3.x module to Windows and improve distutils (Chun-wei Fan) Correctly install the HTML examples into their subdirectory (Mattia Rizzolo) Refactor the settings of $docdir (Mattia Rizzolo) Remove unused configure checks (Ben Boeckel) python/Makefile.am: use *_LIBADD, not *_LDFLAGS for LIBS (Sam James) Fix check for libtool in autogen.sh Use version in configure.ac for CMake (Timothy Lyanguzov) Add CMake alias targets for embedded projects (Markus Rickert) - Documentation: Remove SVN keyword anchors Rework README Remove README.cvs-commits Remove old ChangeLog Update hyperlinks Remove README.docs Remove MAINTAINERS Remove xmltutorial.pdf Upload documentation to GitLab pages Document how to escape XML_CATALOG_FILES Fix libxml2.doap Update URL for libxml++ C++ binding (Kjell Ahlstedt) Generate devhelp2 index file (Emmanuele Bassi) Mention XML_CATALOG_FILES is space-separated (Jan Tojnar) Add documentaiton for xmllint exit code 10 (Rainer Canavan) Fix some validation errors in the FAQ (David King) Add instructions on how to use CMake to compile libxml (Markus Rickert) v2.9.12: May 13 2021: - Build system: Add fuzz.h and seed/regexp to EXTRA_DIST v2.9.11: May 13 2021: - Security: Patch for security issue CVE-2021-3541 (Daniel Veillard) - Documentation: Clarify xmlNewDocProp documentation (Nick Wellnhofer) - Portability: CMake: Only add postfixes if MSVC (Christopher Degawa), Fix XPath NaN/Inf for older GCC versions (Nick Wellnhofer), Use CMake PROJECT_VERSION (Markus Rickert), Fix warnings in libxml.m4 with autoconf 2.70+. (Simon Josefsson), Add CI for CMake on MSVC (Markus Rickert), Update minimum required CMake version (Markus Rickert), Add variables for configured options to CMake config files (Markus Rickert), Check if variables exist when defining targets (Markus Rickert), Check if target exists when reading target properties (Markus Rickert), Add xmlcatalog target and definition to config files (Markus Rickert), Remove include directories for link-only dependencies (Markus Rickert), Fix ICU build in CMake (Markus Rickert), Configure pkgconfig, xml2-config, and xml2Conf.sh file (Markus Rickert), Update CMake config files (Markus Rickert), Add xmlcatalog and xmllint to CMake export (Markus Rickert), Simplify xmlexports.h (Nick Wellnhofer), Require dependencies based on enabled CMake options (Markus Rickert), Use NAMELINK_COMPONENT in CMake install (Markus Rickert), Add CMake files to EXTRA_DIST (Markus Rickert), Add missing compile definition for static builds to CMake (Markus Rickert), Add CI for CMake on Linux and MinGW (Markus Rickert), Fix variable name in win32/configure.js (Nick Wellnhofer), Fix version parsing in win32/configure.js (Nick Wellnhofer), Fix autotools warnings (Nick Wellnhofer), Update config.h.cmake.in (Markus Rickert), win32: allow passing *FLAGS on command line (Michael Stahl), Configure file xmlwin32version.h.in on MSVC (Markus Rickert), List headers individually (Markus Rickert), Add CMake build files (Markus Rickert), Parenthesize Py_Check() in ifs (Miro Hrončok), Minor fixes to configure.js (Nick Wellnhofer) - Bug Fixes: Fix null deref in legacy SAX1 parser (Nick Wellnhofer), Fix handling of unexpected EOF in xmlParseContent (Nick Wellnhofer), Fix line numbers in error messages for mismatched tags (Nick Wellnhofer), Fix htmlTagLookup (Nick Wellnhofer), Propagate error in xmlParseElementChildrenContentDeclPriv (Nick Wellnhofer), Fix user-after-free with `xmllint --xinclude --dropdtd` (Nick Wellnhofer), Fix dangling pointer with `xmllint --dropdtd` (Nick Wellnhofer), Validate UTF8 in xmlEncodeEntities (Joel Hockey), Fix use-after-free with `xmllint --html --push` (Nick Wellnhofer), Allow FP division by zero in xmlXPathInit (Nick Wellnhofer), Fix xmlGetNodePath with invalid node types (Nick Wellnhofer), Fix exponential behavior with recursive entities (Nick Wellnhofer), Fix quadratic behavior when looking up xml:* attributes (Nick Wellnhofer), Fix slow parsing of HTML with encoding errors (Nick Wellnhofer), Fix null deref introduced with previous commit (Nick Wellnhofer), Check for invalid redeclarations of predefined entities (Nick Wellnhofer), Add the copy of type from original xmlDoc in xmlCopyDoc() (SVGAnimate), parser.c: shrink the input buffer when appropriate (Mike Dalessio), Fix infinite loop in HTML parser introduced with recent commits (Nick Wellnhofer), Fix quadratic runtime when parsing CDATA sections (Nick Wellnhofer), Fix timeout when handling recursive entities (Nick Wellnhofer), Fix memory leak in xmlParseElementMixedContentDecl (Nick Wellnhofer), Fix null deref in xmlStringGetNodeList (Nick Wellnhofer), use new htmlParseLookupCommentEnd to find comment ends (Mike Dalessio), htmlParseComment: treat `--!>` as if it closed the comment (Mike Dalessio), Fix integer overflow in xmlSchemaGetParticleTotalRangeMin (Nick Wellnhofer), encoding: fix memleak in xmlRegisterCharEncodingHandler() (Xiaoming Ni), xmlschemastypes.c: xmlSchemaGetFacetValueAsULong add, check "facet->val" (Xiaoming Ni), Fix null pointer deref in xmlXPtrRangeInsideFunction (Nick Wellnhofer), Fix quadratic runtime in HTML push parser with null bytes (Nick Wellnhofer), Avoid quadratic checking of identity-constraints (Michael Matz), Fix building with ICU 68. (Frederik Seiffert), Convert python/libxml.c to PY_SSIZE_T_CLEAN (Victor Stinner), Fix xmlURIEscape memory leaks. (Elliott Hughes), Avoid call stack overflow with XML reader and recursive XIncludes (Nick Wellnhofer), Fix caret in regexp character group (Nick Wellnhofer), parser.c: xmlParseCharData peek behavior fixed wrt newlines (Mike Dalessio), Fix memory leaks in XPointer string-range function (Nick Wellnhofer), Fix use-after-free when XIncluding text from Reader (Nick Wellnhofer), Fix SEGV in xmlSAXParseFileWithData (yanjinjq), Fix null deref in XPointer expression error path (Nick Wellnhofer), Don't call xmlXPathInit directly (Nick Wellnhofer), Fix cleanup of attributes in XML reader (Nick Wellnhofer), Fix double free in XML reader with XIncludes (Nick Wellnhofer), Fix memory leak in xmlXIncludeAddNode error paths (Nick Wellnhofer), Revert "Fix quadratic runtime in xi:fallback processing" (Nick Wellnhofer), Fix error reporting with xi:fallback (Nick Wellnhofer), Fix quadratic runtime in xi:fallback processing (Nick Wellnhofer), Fix corner case with empty xi:fallback (Nick Wellnhofer), Fix XInclude regression introduced with recent commit (Nick Wellnhofer), Fix memory leak in runtest.c (Nick Wellnhofer), Make "xmllint --push --recovery" work (Nick Wellnhofer), Revert "Do not URI escape in server side includes" (Nick Wellnhofer), Fix column number accounting in xmlParse*NameAndCompare (Nick Wellnhofer), Stop counting nbChars in parser context (Nick Wellnhofer), Fix out-of-bounds read with 'xmllint --htmlout' (Nick Wellnhofer), Fix exponential runtime and memory in xi:fallback processing (Nick Wellnhofer), Don't process siblings of root in xmlXIncludeProcess (Nick Wellnhofer), Don't recurse into xi:include children in xmlXIncludeDoProcess (Nick Wellnhofer), Fix memory leak in xmlXIncludeIncludeNode error paths (Nick Wellnhofer), Check for custom free function in global destructor (Nick Wellnhofer), Fix integer overflow when comparing schema dates (Nick Wellnhofer), Fix exponential runtime in xmlFARecurseDeterminism (Nick Wellnhofer), Don't try to handle namespaces when building HTML documents (Nick Wellnhofer), Fix several quadratic runtime issues in HTML push parser (Nick Wellnhofer), Fix quadratic runtime when push parsing HTML start tags (Nick Wellnhofer), Reset XML parser input before reporting errors (David Kilzer), Fix quadratic runtime when push parsing HTML entity refs (Nick Wellnhofer), Fix HTML push parser lookahead (Nick Wellnhofer), Make htmlCurrentChar always translate U+0000 (Nick Wellnhofer), Fix UTF-8 decoder in HTML parser (Nick Wellnhofer), Fix quadratic runtime when parsing HTML script content (Nick Wellnhofer), Reset HTML parser input before reporting error (Nick Wellnhofer), Fix more quadratic runtime issues in HTML push parser (Nick Wellnhofer), Fix regression introduced with 477c7f6a (Nick Wellnhofer), Fix quadratic runtime in HTML parser (Nick Wellnhofer), Reset HTML parser input before reporting encoding error (Nick Wellnhofer), Fix integer overflow in xmlFAParseQuantExact (Nick Wellnhofer), Fix return value of xmlC14NDocDumpMemory (Nick Wellnhofer), Don't follow next pointer on documents in xmlXPathRunStreamEval (Nick Wellnhofer), Fix integer overflow in _xmlSchemaParseGYear (Nick Wellnhofer), Fix integer overflow when parsing {min,max}Occurs (Nick Wellnhofer), Fix another memory leak in xmlSchemaValAtomicType (Nick Wellnhofer), Fix unsigned integer overflow in htmlParseTryOrFinish (Nick Wellnhofer), Fix integer overflow in htmlParseCharRef (Nick Wellnhofer), Fix undefined behavior in UTF16LEToUTF8 (Nick Wellnhofer), Fix return value of xmlCharEncOutput (Nick Wellnhofer), Never expand parameter entities in text declaration (Nick Wellnhofer), Fix undefined behavior in xmlXPathTryStreamCompile (Nick Wellnhofer), Fix use-after-free with validating reader (Nick Wellnhofer), xmlParseBalancedChunkMemory must not be called with NULL doc (Nick Wellnhofer), Revert "Fix memory leak in xmlParseBalancedChunkMemoryRecover" (Nick Wellnhofer), Fix memory leak in xmlXIncludeLoadDoc error path (Nick Wellnhofer), Make schema validation fail with multiple top-level elements (Nick Wellnhofer), Call xmlCleanupParser on ELF destruction (Samuel Thibault), Fix copying of entities in xmlParseReference (Nick Wellnhofer), Fix memory leak in xmlSchemaValidateStream (Zhipeng Xie), Fix xmlSchemaGetCanonValue formatting for date and dateTime (Kevin Puetz), Fix memory leak when shared libxml.dll is unloaded (Kevin Puetz), Fix potentially-uninitialized critical section in Win32 DLL builds (Kevin Puetz), Fix integer overflow in xmlBufferResize (Nick Wellnhofer), Check for overflow when allocating two-dimensional arrays (Nick Wellnhofer), Remove useless comparisons (Nick Wellnhofer), Fix overflow check in xmlNodeDump (Nick Wellnhofer), Fix infinite loop in xmlStringLenDecodeEntities (Zhipeng Xie), Fix freeing of nested documents (Nick Wellnhofer), Fix more memory leaks in error paths of XPath parser (Nick Wellnhofer), Fix memory leaks of encoding handlers in xmlsave.c (Nick Wellnhofer), Fix xml2-config error code (Nick Wellnhofer), Fix memory leak in error path of XPath expr parser (Nick Wellnhofer), Fix overflow handling in xmlBufBackToBuffer (Nick Wellnhofer), Null pointer handling in catalog.c (raniervf), xml2-config.in: fix regressions introduced by commit 2f2bf4b2c (Dmitry V. Levin) - Improvements: Store per-element parser state in a struct (Nick Wellnhofer), update for xsd:language type check (PaulHiggs), Update INSTALL.libxml2 (Nick Wellnhofer), Fix include order in c14n.h (Nick Wellnhofer), Fix duplicate xmlStrEqual calls in htmlParseEndTag (Nick Wellnhofer), Speed up htmlCheckAutoClose (Nick Wellnhofer), Speed up htmlTagLookup (Nick Wellnhofer), Stop checking attributes for UTF-8 validity (Nick Wellnhofer), Reduce some fuzzer timeouts (Nick Wellnhofer), Only run a few CI tests unless scheduled (Nick Wellnhofer), Improve fuzzer stability (Nick Wellnhofer), Check for feature flags in fuzzer tests (Nick Wellnhofer), Another attempt at improving fuzzer stability (Nick Wellnhofer), Revert "Improve HTML fuzzer stability" (Nick Wellnhofer), Add charset names to fuzzing dictionaries (Nick Wellnhofer), Improve HTML fuzzer stability (Nick Wellnhofer), Add CI for MSVC x86 (Markus Rickert), Add a flag to not output anything when xmllint succeeded (hhb), Speed up HTML fuzzer (Nick Wellnhofer), Remove unused encoding parameter of HTML output functions (Nick Wellnhofer), Handle malloc failures in fuzzing code (Nick Wellnhofer), add test coverage for incorrectly-closed comments (Mike Dalessio), Enforce maximum length of fuzz input (Nick Wellnhofer), Remove temporary members from struct _xmlXPathContext (Nick Wellnhofer), Build the Python extension with PY_SSIZE_T_CLEAN (Victor Stinner), Add CI test for Python 3 (Nick Wellnhofer), Add fuzzing dictionaries to EXTRA_DIST (Nick Wellnhofer), Add 'fuzz' subdirectory to DIST_SUBDIRS (Nick Wellnhofer), Allow port numbers up to INT_MAX (Nick Wellnhofer), Handle dumps of corrupted documents more gracefully (Nick Wellnhofer), Limit size of free lists in XML reader when fuzzing (Nick Wellnhofer), Hardcode maximum XPath recursion depth (Nick Wellnhofer), Pass URL of main entity in XML fuzzer (Nick Wellnhofer), Consolidate seed corpus generation (Nick Wellnhofer), Test fuzz targets with dummy driver (Nick Wellnhofer), Fix regression introduced with commit d88df4b (Nick Wellnhofer), Fix regression introduced with commit 74dcc10b (Nick Wellnhofer), Add TODO comment in xinclude.c (Nick Wellnhofer), Stop using maxParserDepth in xpath.c (Nick Wellnhofer), Remove dead code in xinclude.c (Nick Wellnhofer), Don't add formatting newlines to XInclude nodes (Nick Wellnhofer), Don't use SAX1 if all element handlers are NULL (Nick Wellnhofer), Remove unneeded progress checks in HTML parser (Nick Wellnhofer), Use strcmp when fuzzing (Nick Wellnhofer), Fix XPath fuzzer (Nick Wellnhofer), Fuzz XInclude engine (Nick Wellnhofer), Add XPath and XPointer fuzzer (Nick Wellnhofer), Update fuzzing code (Nick Wellnhofer), More *NodeDumpOutput fixes (Nick Wellnhofer), Fix *NodeDumpOutput functions (Nick Wellnhofer), Make xmlNodeDumpOutputInternal non-recursive (Nick Wellnhofer), Make xhtmlNodeDumpOutput non-recursive (Nick Wellnhofer), Make htmlNodeDumpFormatOutput non-recursive (Nick Wellnhofer), Fix .gitattributes (Nick Wellnhofer), Rework control flow in htmlCurrentChar (Nick Wellnhofer), Make 'xmllint --html --push -' read from stdin (Nick Wellnhofer), Remove misleading comments in xpath.c (Nick Wellnhofer), Update to Devhelp index file format version 2 (Andre Klapper), Set project language to C (Markus Rickert), Add variable for working directory of XML Conformance Test Suite (Markus Rickert), Add additional tests and XML Conformance Test Suite (Markus Rickert), Add command line option for temp directory in runtest (Markus Rickert), Ensure LF line endings for test files (Markus Rickert), Enable runtests and testThreads (Markus Rickert), Limit regexp nesting depth (Nick Wellnhofer), Fix return values and documentation in encoding.c (Nick Wellnhofer), Add regexp regression tests (David Kilzer), Report error for invalid regexp quantifiers (Nick Wellnhofer), Fix rebuilding docs, by hiding __attribute__((...)) behind a macro. (Martin Vidner), Copy xs:duration parser from libexslt (Nick Wellnhofer), Fuzz target for XML Schemas (Nick Wellnhofer), Move entity recorder to fuzz.c (Nick Wellnhofer), Fuzz target for HTML parser (Nick Wellnhofer), Update GitLab CI container (Nick Wellnhofer), Add options file for xml fuzzer (Nick Wellnhofer), Add a couple of libFuzzer targets (Nick Wellnhofer), Guard new calls to xmlValidatePopElement in xml_reader.c (Daniel Cheng), Add LIBXML_VALID_ENABLED to xmlreader (Łukasz Wojniłowicz), Fix typos (Nick Wellnhofer), Disable LeakSanitizer (Nick Wellnhofer), Stop calling SAX getEntity handler from XMLReader (Nick Wellnhofer), Add test case for recursive external parsed entities (Nick Wellnhofer), Enable error tests with entity substitution (Nick Wellnhofer), Don't load external entity from xmlSAX2GetEntity (Nick Wellnhofer), Merge code paths loading external entities (Nick Wellnhofer), Copy some XMLReader option flags to parser context (Nick Wellnhofer), Add xmlPopOutputCallbacks (Nick Wellnhofer), Updated Python test reader2.py (Pieter van Oostrum), Updated python/tests/tstLastError.py (Pieter van Oostrum), Use random seed in xmlDictComputeFastKey (Ranier Vilela), Enable more undefined behavior sanitizers (Nick Wellnhofer) v2.9.10: Oct 30 2019: - Documentation: Fix a few more typos ("fonction") (Nick Wellnhofer), Large batch of typo fixes (Jared Yanovich), Fix typos: tree: move{ -> s}, reconcil{i -> }ed, h{o -> e}ld by... (Jan Pokorný), Fix typo: xpath: simpli{ -> fi}ed (Jan Pokorný), Doc: do not mislead towards "infeasible" scenario wrt. xmlBufNodeDump (Jan Pokorný), Fix comments in test code (zhouzhongyuan), fix comment in testReader.c (zhouzhongyuan) - Portability: Fix some release issues on Fedora 30 (Daniel Veillard), Fix exponent digits when running tests under old MSVC (Daniel Richard G), Work around buggy ceil() function on AIX (Daniel Richard G), Don't call printf with NULL string in runtest.c (Daniel Richard G), Switched from unsigned long to ptrdiff_t in parser.c (Stephen Chenney), timsort.h: support older GCCs (Jérôme Duval), Make configure.ac work with older pkg-config (Nick Wellnhofer), Stop defining _REENTRANT on some Win32 platforms (Nick Wellnhofer), Fix nanohttp.c on MinGW (Nick Wellnhofer), Fix Windows compiler warning in testC14N.c (Nick Wellnhofer), Merge testThreadsWin32.c into testThreads.c (Nick Wellnhofer), Fix Python bindings under Windows (Nick Wellnhofer) - Bug Fixes: Another fix for conditional sections at end of document (Nick Wellnhofer), Fix for conditional sections at end of document (Nick Wellnhofer), Make sure that Python tests exit with error code (Nick Wellnhofer), Audit memory error handling in xpath.c (Nick Wellnhofer), Fix error code in xmlTextWriterStartDocument (Nick Wellnhofer), Fix integer overflow when counting written bytes (Nick Wellnhofer), Fix uninitialized memory access in HTML parser (Nick Wellnhofer), Fix memory leak in xmlSchemaValAtomicType (Nick Wellnhofer), Disallow conditional sections in internal subset (Nick Wellnhofer), Fix use-after-free in xmlTextReaderFreeNodeList (Nick Wellnhofer), Fix Regextests (Nick Wellnhofer), Fix empty branch in regex (Nick Wellnhofer), Fix integer overflow in entity recursion check (Nick Wellnhofer), Don't read external entities or XIncludes from stdin (Nick Wellnhofer), Fix Schema determinism check of ##other namespaces (Nick Wellnhofer), Fix potential null deref in xmlSchemaIDCFillNodeTables (zhouzhongyuan), Fix potential memory leak in xmlBufBackToBuffer (Nick Wellnhofer), Fix error message when processing XIncludes with fallbacks (Nick Wellnhofer), Fix memory leak in xmlRegEpxFromParse (zhouzhongyuan), 14:00 is a valid timezone for xs:dateTime (Nick Wellnhofer), Fix memory leak in xmlParseBalancedChunkMemoryRecover (Zhipeng Xie), Fix potential null deref in xmlRelaxNGParsePatterns (Nick Wellnhofer), Misleading error message with xs:{min|max}Inclusive (bettermanzzy), Fix memory leak in xmlXIncludeLoadTxt (Wang Kirin), Partial fix for comparison of xs:durations (Nick Wellnhofer), Fix null deref in xmlreader buffer (zhouzhongyuan), Fix unability to RelaxNG-validate grammar with choice-based name class (Jan Pokorný), Fix unability to validate ambiguously constructed interleave for RelaxNG (Jan Pokorný), Fix possible null dereference in xmlXPathIdFunction (zhouzhongyuan), fix memory leak in xmlAllocOutputBuffer (zhouzhongyuan), Fix unsigned int overflow (Jens Eggerstedt), dict.h: gcc 2.95 doesn't allow multiple storage classes (Nick Wellnhofer), Fix another code path in xmlParseQName (Nick Wellnhofer), Make sure that xmlParseQName returns NULL in error case (Nick Wellnhofer), Fix build without reader but with pattern (Nick Wellnhofer), Fix memory leak in xmlAllocOutputBufferInternal error path (Nick Wellnhofer), Fix unsigned integer overflow (Nick Wellnhofer), Fix return value of xmlOutputBufferWrite (Nick Wellnhofer), Fix parser termination from "Double hyphen within comment" error (David Warring), Fix call stack overflow in xmlFreePattern (Nick Wellnhofer), Fix null deref in previous commit (Nick Wellnhofer), Fix memory leaks in xmlXPathParseNameComplex error paths (Nick Wellnhofer), Check for integer overflow in xmlXPtrEvalChildSeq (Nick Wellnhofer), Fix xmllint dump of XPath namespace nodes (Nick Wellnhofer), Fix float casts in xmlXPathSubstringFunction (Nick Wellnhofer), Fix null deref in xmlregexp error path (Nick Wellnhofer), Fix null pointer dereference in xmlTextReaderReadOuterXml (Nick Wellnhofer), Fix memory leaks in xmlParseStartTag2 error paths (Nick Wellnhofer), Fix memory leak in xmlSAX2StartElement (Nick Wellnhofer), Fix commit "Memory leak in xmlFreeID (xmlreader.c)" (Nick Wellnhofer), Fix NULL pointer deref in xmlTextReaderValidateEntity (Nick Wellnhofer), Memory leak in xmlFreeTextReader (Nick Wellnhofer), Memory leak in xmlFreeID (xmlreader.c) (Nick Wellnhofer) - Improvements: Run XML conformance tests under CI (Nick Wellnhofer), Update GitLab CI config (Nick Wellnhofer), Propagate memory errors in valuePush (Nick Wellnhofer), Propagate memory errors in xmlXPathCompExprAdd (Nick Wellnhofer), Make xmlFreeDocElementContent non-recursive (Nick Wellnhofer), Enable continuous integration via GitLab CI (Nick Wellnhofer), Avoid ignored attribute warnings under GCC (Nick Wellnhofer), Make xmlDumpElementContent non-recursive (Nick Wellnhofer), Make apibuild.py ignore ATTRIBUTE_NO_SANITIZE (Nick Wellnhofer), Mark xmlExp* symbols as removed (Nick Wellnhofer), Make xmlParseConditionalSections non-recursive (Nick Wellnhofer), Adjust expected error in Python tests (Nick Wellnhofer), Make xmlTextReaderFreeNodeList non-recursive (Nick Wellnhofer), Make xmlFreeNodeList non-recursive (Nick Wellnhofer), Make xmlParseContent and xmlParseElement non-recursive (Nick Wellnhofer), Remove executable bit from non-executable files (Nick Wellnhofer), Fix expected output of test/schemas/any4 (Nick Wellnhofer), Optimize build instructions in README (zhouzhongyuan), xml2-config.in: Output CFLAGS and LIBS on the same line (Hugh McMaster), xml2-config: Add a --dynamic switch to print only shared libraries (Hugh McMaster), Annotate functions with __attribute__((no_sanitize)) (Nick Wellnhofer), Fix warnings when compiling without reader or push parser (Nick Wellnhofer), Remove unused member `doc` in xmlSaveCtxt (Nick Wellnhofer), Limit recursion depth in xmlXPathCompOpEvalPredicate (Nick Wellnhofer), Remove -Wno-array-bounds (Nick Wellnhofer), Remove unreachable code in xmlXPathCountFunction (Nick Wellnhofer), Improve XPath predicate and filter evaluation (Nick Wellnhofer), Limit recursion depth in xmlXPathOptimizeExpression (Nick Wellnhofer), Disable hash randomization when fuzzing (Nick Wellnhofer), Optional recursion limit when parsing XPath expressions (Nick Wellnhofer), Optional recursion limit when evaluating XPath expressions (Nick Wellnhofer), Use break statements in xmlXPathCompOpEval (Nick Wellnhofer), Optional XPath operation limit (Nick Wellnhofer), Fix compilation with --with-minimum (Nick Wellnhofer), Check XPath stack after calling functions (Nick Wellnhofer), Remove debug printf in xmlreader.c (Nick Wellnhofer), Always define LIBXML_THREAD_ENABLED when enabled (Michael Haubenwallner), Regenerate NEWS (Nick Wellnhofer), Change git repo URL (Nick Wellnhofer), Change bug tracker URL (Nick Wellnhofer), Remove outdated HTML file (Nick Wellnhofer), Fix unused function warning in testapi.c (Nick Wellnhofer), Add some generated test files to .gitignore (Nick Wellnhofer), Remove unneeded function pointer casts (Nick Wellnhofer), Fix -Wcast-function-type warnings (GCC 8) (Nick Wellnhofer), Fix -Wformat-truncation warnings (GCC 8) (Nick Wellnhofer) - Cleanups: Rebuild docs (Nick Wellnhofer), Disable xmlExp regex code (Nick Wellnhofer), Remove redundant code in xmlRelaxNGValidateState (Nick Wellnhofer), Remove redundant code in xmlXPathCompRelationalExpr (Nick Wellnhofer) v2.9.9: Jan 03 2019: - Security: CVE-2018-9251 CVE-2018-14567 Fix infinite loop in LZMA decompression (Nick Wellnhofer), CVE-2018-14404 Fix nullptr deref with XPath logic ops (Nick Wellnhofer), - Documentation: reader: Fix documentation comment (Mohammed Sadiq) - Portability: Fix MSVC build with lzma (Nick Wellnhofer), Variables need 'extern' in static lib on Cygwin (Michael Haubenwallner), Really declare dllexport/dllimport for Cygwin (Michael Haubenwallner), Merge branch 'patch-2' into 'master' (Nick Wellnhofer), Change dir to $THEDIR after ACLOCAL_PATH check autoreconf creates aclocal.m4 in $srcdir (Vitaly Buka), Improve error message if pkg.m4 couldn't be found (Nick Wellnhofer), NaN and Inf fixes for pre-C99 compilers (Nick Wellnhofer) - Bug Fixes: Revert "Support xmlTextReaderNextSibling w/o preparsed doc" (Nick Wellnhofer), Fix building relative URIs (Thomas Holder), Problem with data in interleave in RelaxNG validation (Nikolai Weibull), Fix memory leak in xmlSwitchInputEncodingInt error path (Nick Wellnhofer), Set doc on element obtained from freeElems (Nick Wellnhofer), Fix HTML serialization with UTF-8 encoding (Nick Wellnhofer), Use actual doc in xmlTextReaderRead*Xml (Nick Wellnhofer), Unlink node before freeing it in xmlSAX2StartElement (Nick Wellnhofer), Check return value of nodePush in xmlSAX2StartElement (Nick Wellnhofer), Free input buffer in xmlHaltParser (Nick Wellnhofer), Reset HTML parser input pointers on encoding failure (Nick Wellnhofer), Don't run icu_parse_test if EUC-JP is unsupported (Nick Wellnhofer), Fix xmlSchemaValidCtxtPtr reuse memory leak (Greg Hildstrom), Fix xmlTextReaderNext with preparsed document (Felix Bünemann), Remove stray character from comment (Nick Wellnhofer), Remove a misleading line from xmlCharEncOutput (Andrey Bienkowski), HTML noscript should not close p (Daniel Veillard), Don't change context node in xmlXPathRoot (Nick Wellnhofer), Stop using XPATH_OP_RESET (Nick Wellnhofer), Revert "Change calls to xmlCharEncInput to set flush false" (Nick Wellnhofer) - Improvements: Fix "Problem with data in interleave in RelaxNG validation" (Nikolai Weibull), cleanup: remove some unreachable code (Thomas Holder), add --relative to testURI (Thomas Holder), Remove redefined starts and defines inside include elements (Nikolai Weibull), Allow choice within choice in nameClass in RELAX NG (Nikolai Weibull), Look inside divs for starts and defines inside include (Nikolai Weibull), Add compile and libxml2-config.cmake to .gitignore (Nikolai Weibull), Stop using doc->charset outside parser code (Nick Wellnhofer), Add newlines to 'xmllint --xpath' output (Nick Wellnhofer), Don't include SAX.h from globals.h (Nick Wellnhofer), Support xmlTextReaderNextSibling w/o preparsed doc (Felix Bünemann), Don't instruct user to run make when autogen.sh failed (林博仁(Buo-ren Lin)), Run Travis ASan tests with "sudo: required" (Nick Wellnhofer), Improve restoring of context size and position (Nick Wellnhofer), Simplify and harden nodeset filtering (Nick Wellnhofer), Avoid unnecessary backups of the context node (Nick Wellnhofer), Fix inconsistency in xmlXPathIsInf (Nick Wellnhofer) - Cleanups: v2.9.8: Mar 05 2018: - Portability: python: remove single use of _PyVerify_fd (Patrick Welche), Build more test executables on Windows/MSVC (Nick Wellnhofer), Stop including ansidecl.h (Nick Wellnhofer), Fix libz and liblzma detection (Nick Wellnhofer), Revert "Compile testapi with -Wno-unused-function" (Nick Wellnhofer) - Bug Fixes: Fix xmlParserEntityCheck (Nick Wellnhofer), Halt parser in case of encoding error (Nick Wellnhofer), Clear entity content in case of errors (Nick Wellnhofer), Change calls to xmlCharEncInput to set flush false when not final call. Having flush incorrectly set to true causes errors for ICU. (Joel Hockey), Fix buffer over-read in xmlParseNCNameComplex (Nick Wellnhofer), Fix ICU library filenames on Windows/MSVC (Nick Wellnhofer), Fix xmlXPathIsNaN broken by recent commit (Nick Wellnhofer), Fix -Wenum-compare warnings (Nick Wellnhofer), Fix callback signature in testapi.c (Nick Wellnhofer), Fix unused parameter warning without ICU (Nick Wellnhofer), Fix IO callback signatures (Nick Wellnhofer), Fix misc callback signatures (Nick Wellnhofer), Fix list callback signatures (Nick Wellnhofer), Fix hash callback signatures (Nick Wellnhofer), Refactor name and type signature for xmlNop (Vlad Tsyrklevich), Fixed ICU to set flush correctly and provide pivot buffer. (Joel Hockey), Skip EBCDIC tests if EBCDIC isn't supported (Nick Wellnhofer) - Improvements: Disable pointer-overflow UBSan checks under Travis (Nick Wellnhofer), Improve handling of context input_id (Daniel Veillard), Add resource file to Windows DLL (ccpaging), Run Travis tests with -Werror (Nick Wellnhofer), Build with "-Wall -Wextra" (Nick Wellnhofer), Fix -Wtautological-pointer-compare warnings (Nick Wellnhofer), Remove unused AC_CHECKs (Nick Wellnhofer), Update information about contributing (Nick Wellnhofer), Fix -Wmisleading-indentation warnings (Nick Wellnhofer), Don't touch CFLAGS in configure.ac (Nick Wellnhofer), Ignore function pointer cast warnings (Nick Wellnhofer), Simplify XPath NaN, inf and -0 handling (Nick Wellnhofer), Introduce xmlPosixStrdup and update xmlMemStrdup (Nick Wellnhofer), Add test for ICU flush and pivot buffer (Nick Wellnhofer), Compile testapi with -Wno-unused-function (Nick Wellnhofer) 2.9.7: Nov 02 2017: - Documentation: xmlcatalog: refresh man page wrt. querying system catalog easily (Jan Pokorný) - Portability: Fix deprecated Travis compiler flag (Nick Wellnhofer), Add declaration for DllMain (J. Peter Mugaas), Fix preprocessor conditional in threads.h (J. Peter Mugaas), Fix pointer comparison warnings on 64-bit Windows (J. Peter Mugaas), Fix macro redefinition warning (J. Peter Mugaas), Default to native threads on MinGW-w64 (Nick Wellnhofer), Simplify Windows IO functions (Nick Wellnhofer), Fix runtest on Windows (Nick Wellnhofer), socklen_t is always int on Windows (Nick Wellnhofer), Don't redefine socket error codes on Windows (Nick Wellnhofer), Fix pointer/int cast warnings on 64-bit Windows (Nick Wellnhofer), Fix Windows compiler warnings in xmlCanonicPath (Nick Wellnhofer) - Bug Fixes: xmlcatalog: restore ability to query system catalog easily (Jan Pokorný), Fix comparison of nodesets to strings (Nick Wellnhofer) - Improvements: Add Makefile rules to rebuild HTML man pages (Nick Wellnhofer), Fix mixed decls and code in timsort.h (Nick Wellnhofer), Rework handling of return values in thread tests (Nick Wellnhofer), Fix unused variable warnings in testrecurse (Nick Wellnhofer), Fix -Wimplicit-fallthrough warnings (J. Peter Mugaas), Upgrade timsort.h to latest revision (Nick Wellnhofer), Increase warning level to /W3 under MSVC (Nick Wellnhofer), Fix a couple of warnings in dict.c and threads.c (Nick Wellnhofer), Update .gitignore for Windows (Nick Wellnhofer), Fix unused variable warnings in nanohttp.c (Nick Wellnhofer), Fix the Windows header mess (Nick Wellnhofer), Don't include winsock2.h in xmllint.c (Nick Wellnhofer), Remove generated file python/setup.py from version control (Nick Wellnhofer), Use __linux__ macro in generated code (Nick Wellnhofer) v2.9.6: Oct 06 2017: - Portability: Change preprocessor OS tests to __linux__ (Nick Wellnhofer) - Bug Fixes: Fix XPath stack frame logic (Nick Wellnhofer), Report undefined XPath variable error message (Nick Wellnhofer), Fix regression with librsvg (Nick Wellnhofer), Handle more invalid entity values in recovery mode (Nick Wellnhofer), Fix structured validation errors (Nick Wellnhofer), Fix memory leak in LZMA decompressor (Nick Wellnhofer), Set memory limit for LZMA decompression (Nick Wellnhofer), Handle illegal entity values in recovery mode (Nick Wellnhofer), Fix debug dump of streaming XPath expressions (Nick Wellnhofer), Fix memory leak in nanoftp (Nick Wellnhofer), Fix memory leaks in SAX1 parser (Nick Wellnhofer) v2.9.5: Sep 04 2017: - Security: Detect infinite recursion in parameter entities (Nick Wellnhofer), Fix handling of parameter-entity references (Nick Wellnhofer), Disallow namespace nodes in XPointer ranges (Nick Wellnhofer), Fix XPointer paths beginning with range-to (Nick Wellnhofer) - Documentation: Documentation fixes (Nick Wellnhofer), Spelling and grammar fixes (Nick Wellnhofer) - Portability: Adding README.zOS to list of extra files for the release (Daniel Veillard), Description of work needed to compile on zOS (Stéphane Michaut), Porting libxml2 on zOS encoding of code (Stéphane Michaut), small changes for OS/400 (Patrick Monnerat), relaxng.c, xmlschemas.c: Fix build on pre-C99 compilers (Chun-wei Fan) - Bug Fixes: Problem resolving relative URIs (Daniel Veillard), Fix unwanted warnings when switching encodings (Nick Wellnhofer), Fix signature of xmlSchemaAugmentImportedIDC (Daniel Veillard), Heap-buffer-overflow read of size 1 in xmlFAParsePosCharGroup (David Kilzer), Fix NULL pointer deref in xmlFAParseCharClassEsc (Nick Wellnhofer), Fix infinite loops with push parser in recovery mode (Nick Wellnhofer), Send xmllint usage error to stderr (Nick Wellnhofer), Fix NULL deref in xmlParseExternalEntityPrivate (Nick Wellnhofer), Make sure not to call IS_BLANK_CH when parsing the DTD (Nick Wellnhofer), Fix xmlHaltParser (Nick Wellnhofer), Fix pathological performance when outputting charrefs (Nick Wellnhofer), Fix invalid-source-encoding warnings in testWriter.c (Nick Wellnhofer), Fix duplicate SAX callbacks for entity content (David Kilzer), Treat URIs with scheme as absolute in C14N (Nick Wellnhofer), Fix copy-paste errors in error messages (Nick Wellnhofer), Fix sanity check in htmlParseNameComplex (Nick Wellnhofer), Fix potential infinite loop in xmlStringLenDecodeEntities (Nick Wellnhofer), Reset parser input pointers on encoding failure (Nick Wellnhofer), Fix memory leak in xmlParseEntityDecl error path (Nick Wellnhofer), Fix xmlBuildRelativeURI for URIs starting with './' (Nick Wellnhofer), Fix type confusion in xmlValidateOneNamespace (Nick Wellnhofer), Fix memory leak in xmlStringLenGetNodeList (Nick Wellnhofer), Fix NULL pointer deref in xmlDumpElementContent (Daniel Veillard), Fix memory leak in xmlBufAttrSerializeTxtContent (Nick Wellnhofer), Stop parser on unsupported encodings (Nick Wellnhofer), Check for integer overflow in memory debug code (Nick Wellnhofer), Fix buffer size checks in xmlSnprintfElementContent (Nick Wellnhofer), Avoid reparsing in xmlParseStartTag2 (Nick Wellnhofer), Fix undefined behavior in xmlRegExecPushStringInternal (Nick Wellnhofer), Check XPath exponents for overflow (Nick Wellnhofer), Check for overflow in xmlXPathIsPositionalPredicate (Nick Wellnhofer), Fix spurious error message (Nick Wellnhofer), Fix memory leak in xmlCanonicPath (Nick Wellnhofer), Fix memory leak in xmlXPathCompareNodeSetValue (Nick Wellnhofer), Fix memory leak in pattern error path (Nick Wellnhofer), Fix memory leak in parser error path (Nick Wellnhofer), Fix memory leaks in XPointer error paths (Nick Wellnhofer), Fix memory leak in xmlXPathNodeSetMergeAndClear (Nick Wellnhofer), Fix memory leak in XPath filter optimizations (Nick Wellnhofer), Fix memory leaks in XPath error paths (Nick Wellnhofer), Do not leak the new CData node if adding fails (David Tardon), Prevent unwanted external entity reference (Neel Mehta), Increase buffer space for port in HTTP redirect support (Daniel Veillard), Fix more NULL pointer derefs in xpointer.c (Nick Wellnhofer), Avoid function/data pointer conversion in xpath.c (Nick Wellnhofer), Fix format string warnings (Nick Wellnhofer), Disallow namespace nodes in XPointer points (Nick Wellnhofer), Fix comparison with root node in xmlXPathCmpNodes (Nick Wellnhofer), Fix attribute decoding during XML schema validation (Alex Henrie), Fix NULL pointer deref in XPointer range-to (Nick Wellnhofer) - Improvements: Updating the spec file to reflect Fedora 24 (Daniel Veillard), Add const in five places to move 1 KiB to .rdata (Bruce Dawson), Fix missing part of comment for function xmlXPathEvalExpression() (Daniel Veillard), Get rid of "blanks wrapper" for parameter entities (Nick Wellnhofer), Simplify handling of parameter entity references (Nick Wellnhofer), Deduplicate code in encoding.c (Nick Wellnhofer), Make HTML parser functions take const pointers (Nick Wellnhofer), Build test programs only when needed (Nick Wellnhofer), Fix doc/examples/index.py (Nick Wellnhofer), Fix compiler warnings in threads.c (Nick Wellnhofer), Fix empty-body warning in nanohttp.c (Nick Wellnhofer), Fix cast-align warnings (Nick Wellnhofer), Fix unused-parameter warnings (Nick Wellnhofer), Rework entity boundary checks (Nick Wellnhofer), Don't switch encoding for internal parameter entities (Nick Wellnhofer), Merge duplicate code paths handling PE references (Nick Wellnhofer), Test SAX2 callbacks with entity substitution (Nick Wellnhofer), Support catalog and threads tests under --without-sax1 (Nick Wellnhofer), Misc fixes for 'make tests' (Nick Wellnhofer), Initialize keepBlanks in HTML parser (Nick Wellnhofer), Add test cases for bug 758518 (David Kilzer), Fix compiler warning in htmlParseElementInternal (Nick Wellnhofer), Remove useless check in xmlParseAttributeListDecl (Nick Wellnhofer), Allow zero sized memory input buffers (Nick Wellnhofer), Add TODO comment in xmlSwitchEncoding (Nick Wellnhofer), Check for integer overflow in xmlXPathFormatNumber (Nick Wellnhofer), Make Travis print UBSan stacktraces (Nick Wellnhofer), Add .travis.yml (Nick Wellnhofer), Fix expected error output in Python tests (Nick Wellnhofer), Simplify control flow in xmlParseStartTag2 (Nick Wellnhofer), Disable LeakSanitizer when running API tests (Nick Wellnhofer), Avoid out-of-bound array access in API tests (Nick Wellnhofer), Avoid spurious UBSan errors in parser.c (Nick Wellnhofer), Parse small XPath numbers more accurately (Nick Wellnhofer), Rework XPath rounding functions (Nick Wellnhofer), Fix white space in test output (Nick Wellnhofer), Fix axis traversal from attribute and namespace nodes (Nick Wellnhofer), Check for trailing characters in XPath expressions earlier (Nick Wellnhofer), Rework final handling of XPath results (Nick Wellnhofer), Make xmlXPathEvalExpression call xmlXPathEval (Nick Wellnhofer), Remove unused variables (Nick Wellnhofer), Don't print generic error messages in XPath tests (Nick Wellnhofer) - Cleanups: Fix a couple of misleading indentation errors (Daniel Veillard), Remove unnecessary calls to xmlPopInput (Nick Wellnhofer) 2.9.4: May 23 2016: - Security: More format string warnings with possible format string vulnerability (David Kilzer), Avoid building recursive entities (Daniel Veillard), Heap-based buffer overread in htmlCurrentChar (Pranjal Jumde), Heap-based buffer-underreads due to xmlParseName (David Kilzer), Heap use-after-free in xmlSAX2AttributeNs (Pranjal Jumde), Heap use-after-free in htmlParsePubidLiteral and htmlParseSystemiteral (Pranjal Jumde), Fix some format string warnings with possible format string vulnerability (David Kilzer), Detect change of encoding when parsing HTML names (Hugh Davenport), Fix inappropriate fetch of entities content (Daniel Veillard), Bug 759398: Heap use-after-free in xmlDictComputeFastKey (Pranjal Jumde), Bug 758605: Heap-based buffer overread in xmlDictAddString (Pranjal Jumde), Bug 758588: Heap-based buffer overread in xmlParserPrintFileContextInternal (David Kilzer), Bug 757711: heap-buffer-overflow in xmlFAParsePosCharGroup (Pranjal Jumde), Add missing increments of recursion depth counter to XML parser. (Peter Simons) - Documentation: Fix typo: s{ ec -> cr }cipt (Jan Pokorný), Fix typos: dictio{ nn -> n }ar{y,ies} (Jan Pokorný), Fix typos: PATH_{ SEAPARATOR -> SEPARATOR } (Jan Pokorný), Correct a typo. (Shlomi Fish) - Portability: Correct the usage of LDFLAGS (Mattias Hansson), Revert the use of SAVE_LDFLAGS in configure.ac (Mattias Hansson), libxml2 hardcodes -L/lib in zlib/lzma tests which breaks cross-compiles (Mike Frysinger), Fix apibuild for a recently added construct (Daniel Veillard), Use pkg-config to locate zlib when possible (Stewart Brodie), Use pkg-config to locate ICU when possible (Stewart Brodie), Portability to non C99 compliant compilers (Patrick Monnerat), dict.h: Move xmlDictPtr definition before includes to allow direct inclusion. (Patrick Monnerat), os400: tell about xmllint and xmlcatalog in README400. (Patrick Monnerat), os400: properly process SGML add in XMLCATALOG command. (Patrick Monnerat), os400: implement CL command XMLCATALOG. (Patrick Monnerat), os400: compile and install program xmlcatalog (qshell-only). (Patrick Monnerat), os400: expand tabs in sources, strip trailing blanks. (Patrick Monnerat), os400: implement CL command XMLLINT. (Patrick Monnerat), os400: compile and install program xmllint (qshell-only). (Patrick Monnerat), os400: initscript make_module(): Use options instead of positional parameters. (Patrick Monnerat), os400: c14n.rpgle: allow *omit for nullable reference parameters. (Patrick Monnerat), os400: use like() for double type. (Patrick Monnerat), os400: use like() for int type. (Patrick Monnerat), os400: use like() for unsigned int type. (Patrick Monnerat), os400: use like() for enum types. (Patrick Monnerat), Add xz to xml2-config --libs output (Baruch Siach), Bug 760190: configure.ac should be able to build --with-icu without icu-config tool (David Kilzer), win32\VC10\config.h and VS 2015 (Bruce Dawson), Add configure maintainer mode (orzen) - Bug Fixes: Avoid an out of bound access when serializing malformed strings (Daniel Veillard), Unsigned addition may overflow in xmlMallocAtomicLoc() (David Kilzer), Integer signed/unsigned type mismatch in xmlParserInputGrow() (David Kilzer), Bug 763071: heap-buffer-overflow in xmlStrncat (Pranjal Jumde), Integer overflow parsing port number in URI (Michael Paddon), Fix an error with regexp on nullable counted char transition (Daniel Veillard), Fix memory leak with XPath namespace nodes (Nick Wellnhofer), Fix namespace axis traversal (Nick Wellnhofer), Fix null pointer deref in docs with no root element (Hugh Davenport), Fix XSD validation of URIs with ampersands (Alex Henrie), xmlschemastypes.c: accept endOfDayFrag Times set to "24:00:00" mean "end of day" and should not cause an error. (Patrick Monnerat), xmlcatalog: flush stdout before interactive shell input. (Patrick Monnerat), xmllint: flush stdout before interactive shell input. (Patrick Monnerat), Don't recurse into OP_VALUEs in xmlXPathOptimizeExpression (Nick Wellnhofer), Fix namespace::node() XPath expression (Nick Wellnhofer), Fix OOB write in xmlXPathEmptyNodeSet (Nick Wellnhofer), Fix parsing of NCNames in XPath (Nick Wellnhofer), Fix OOB read with invalid UTF-8 in xmlUTF8Strsize (Nick Wellnhofer), Do normalize string-based datatype value in RelaxNG facet checking (Audric Schiltknecht), Bug 760921: REGRESSION (8eb55d78): doc/examples/io1 test fails after fix for "xmlSaveUri() incorrectly recomposes URIs with rootless paths" (David Kilzer), Bug 760861: REGRESSION (bf9c1dad): Missing results for test/schemas/regexp-char-ref_[01].xsd (David Kilzer), error.c: *input->cur == 0 does not mean no error (Pavel Raiskup), Add missing RNG test files (David Kilzer), Bug 760183: REGRESSION (v2.9.3): XML push parser fails with bogus UTF-8 encoding error when multi-byte character in large CDATA section is split across buffer (David Kilzer), Bug 758572: ASAN crash in make check (David Kilzer), Bug 721158: Missing ICU string when doing --version on xmllint (David Kilzer), python 3: libxml2.c wrappers create Unicode str already (Michael Stahl), Add autogen.sh to distrib (orzen), Heap-based buffer overread in xmlNextChar (Daniel Veillard) - Improvements: Add more debugging info to runtest (Daniel Veillard), Implement "runtest -u" mode (David Kilzer), Add a make rule to rebuild for ASAN (Daniel Veillard) v2.9.3: Nov 20 2015: - Security: CVE-2015-8242 Buffer overead with HTML parser in push mode (Hugh Davenport), CVE-2015-7500 Fix memory access error due to incorrect entities boundaries (Daniel Veillard), CVE-2015-7499-2 Detect incoherency on GROW (Daniel Veillard), CVE-2015-7499-1 Add xmlHaltParser() to stop the parser (Daniel Veillard), CVE-2015-5312 Another entity expansion issue (David Drysdale), CVE-2015-7497 Avoid an heap buffer overflow in xmlDictComputeFastQKey (David Drysdale), CVE-2015-7498 Avoid processing entities after encoding conversion failures (Daniel Veillard), CVE-2015-8035 Fix XZ compression support loop (Daniel Veillard), CVE-2015-7942-2 Fix an error in previous Conditional section patch (Daniel Veillard), CVE-2015-7942 Another variation of overflow in Conditional sections (Daniel Veillard), CVE-2015-1819 Enforce the reader to run in constant memory (Daniel Veillard) CVE-2015-7941_2 Cleanup conditional section error handling (Daniel Veillard), CVE-2015-7941_1 Stop parsing on entities boundaries errors (Daniel Veillard), - Documentation: Correct spelling of "calling" (Alex Henrie), Fix a small error in xmllint --format description (Fabien Degomme), Avoid XSS on the search of xmlsoft.org (Daniel Veillard) - Portability: threads: use forward declarations only for glibc (Michael Heimpold), Update Win32 configure.js to search for configure.ac (Daniel Veillard) - Bug Fixes: Bug on creating new stream from entity (Daniel Veillard), Fix some loop issues embedding NEXT (Daniel Veillard), Do not print error context when there is none (Daniel Veillard), Avoid extra processing of MarkupDecl when EOF (Hugh Davenport), Fix parsing short unclosed comment uninitialized access (Daniel Veillard), Add missing Null check in xmlParseExternalEntityPrivate (Gaurav Gupta), Fix a bug in CData error handling in the push parser (Daniel Veillard), Fix a bug on name parsing at the end of current input buffer (Daniel Veillard), Fix the spurious ID already defined error (Daniel Veillard), Fix previous change to node sort order (Nick Wellnhofer), Fix a self assignment issue raised by clang (Scott Graham), Fail parsing early on if encoding conversion failed (Daniel Veillard), Do not process encoding values if the declaration if broken (Daniel Veillard), Silence clang's -Wunknown-attribute (Michael Catanzaro), xmlMemUsed is not thread-safe (Martin von Gagern), Fix support for except in nameclasses (Daniel Veillard), Fix order of root nodes (Nick Wellnhofer), Allow attributes on descendant-or-self axis (Nick Wellnhofer), Fix the fix to Windows locking (Steve Nairn), Fix timsort invariant loop re: Envisage article (Christopher Swenson), Don't add IDs in xmlSetTreeDoc (Nick Wellnhofer), Account for ID attributes in xmlSetTreeDoc (Nick Wellnhofer), Remove various unused value assignments (Philip Withnall), Fix missing entities after CVE-2014-3660 fix (Daniel Veillard), Revert "Missing initialization for the catalog module" (Daniel Veillard) - Improvements: Reuse xmlHaltParser() where it makes sense (Daniel Veillard), xmlStopParser reset errNo (Daniel Veillard), Re-enable xz support by default (Daniel Veillard), Recover unescaped less-than character in HTML recovery parsing (Daniel Veillard), Allow HTML serializer to output HTML5 DOCTYPE (Shaun McCance), Regression test for bug #695699 (Nick Wellnhofer), Add a couple of XPath tests (Nick Wellnhofer), Add Python 3 rpm subpackage (Tomas Radej), libxml2-config.cmake.in: update include directories (Samuel Martin), Adding example from bugs 738805 to regression tests (Daniel Veillard) - Cleanups: 2.9.2: Oct 16 2014: - Security: Fix for CVE-2014-3660 billion laugh variant (Daniel Veillard), CVE-2014-0191 Do not fetch external parameter entities (Daniel Veillard) - Bug Fixes: fix memory leak xml header encoding field with XML_PARSE_IGNORE_ENC (Bart De Schuymer), xmlmemory: handle realloc properly (Yegor Yefremov), Python generator bug raised by the const change (Daniel Veillard), Windows Critical sections not released correctly (Daniel Veillard), Parser error on repeated recursive entity expansion containing < (Daniel Veillard), xpointer : fixing Null Pointers (Gaurav Gupta), Remove Unnecessary Null check in xpointer.c (Gaurav Gupta), parser bug on misformed namespace attributes (Dennis Filder), Pointer dereferenced before null check (Daniel Veillard), Leak of struct addrinfo in xmlNanoFTPConnect() (Gaurav Gupta), Possible overflow in HTMLParser.c (Daniel Veillard), python/tests/sync.py assumes Python dictionaries are ordered (John Beck), Fix Enum check and missing break (Gaurav Gupta), xmlIO: Handle error returns from dup() (Philip Withnall), Fix a problem properly saving URIs (Daniel Veillard), wrong error column in structured error when parsing attribute values (Juergen Keil), wrong error column in structured error when skipping whitespace in xml decl (Juergen Keil), no error column in structured error handler for xml schema validation errors (Juergen Keil), Couple of Missing Null checks (Gaurav Gupta), Add couple of missing Null checks (Daniel Veillard), xmlschemastypes: Fix potential array overflow (Philip Withnall), runtest: Fix a memory leak on parse failure (Philip Withnall), xmlIO: Fix an FD leak on gzdopen() failure (Philip Withnall), xmlcatalog: Fix a memory leak on quit (Philip Withnall), HTMLparser: Correctly initialise a stack allocated structure (Philip Withnall), Check for tmon in _xmlSchemaDateAdd() is incorrect (David Kilzer), Avoid Possible Null Pointer in trio.c (Gaurav Gupta), Fix processing in SAX2 in case of an allocation failure (Daniel Veillard), XML Shell command "cd" does not handle "/" at end of path (Daniel Veillard), Fix various Missing Null checks (Gaurav Gupta), Fix a potential NULL dereference (Daniel Veillard), Add a couple of misisng check in xmlRelaxNGCleanupTree (Gaurav Gupta), Add a missing argument check (Gaurav Gupta), Adding a check in case of allocation error (Gaurav Gupta), xmlSaveUri() incorrectly recomposes URIs with rootless paths (Dennis Filder), Adding some missing NULL checks (Gaurav), Fixes for xmlInitParserCtxt (Daniel Veillard), Fix regressions introduced by CVE-2014-0191 patch (Daniel Veillard), erroneously ignores a validation error if no error callback set (Daniel Veillard), xmllint was not parsing the --c14n11 flag (Sérgio Batista), Avoid Possible null pointer dereference in memory debug mode (Gaurav), Avoid Double Null Check (Gaurav), Restore context size and position after XPATH_OP_ARG (Nick Wellnhofer), Fix xmlParseInNodeContext() if node is not element (Daniel Veillard), Avoid a possible NULL pointer dereference (Gaurav), Fix xmlTextWriterWriteElement when a null content is given (Daniel Veillard), Fix an typo 'onrest' in htmlScriptAttributes (Daniel Veillard), fixing a ptotential uninitialized access (Daniel Veillard), Fix an fd leak in an error case (Daniel Veillard), Missing initialization for the catalog module (Daniel Veillard), Handling of XPath function arguments in error case (Nick Wellnhofer), Fix a couple of missing NULL checks (Gaurav), Avoid a possibility of dangling encoding handler (Gaurav), Fix HTML push parser to accept HTML_PARSE_NODEFDTD (Arnold Hendriks), Fix a bug loading some compressed files (Mike Alexander), Fix XPath node comparison bug (Gaurav), Type mismatch in xmlschemas.c (Gaurav), Type mismatch in xmlschemastypes.c (Gaurav), Avoid a deadcode in catalog.c (Daniel Veillard), run close socket on Solaris, same as we do on other platforms (Denis Pauk), Fix pointer dereferenced before null check (Gaurav), Fix a potential NULL dereference in tree code (Daniel Veillard), Fix potential NULL pointer dereferences in regexp code (Gaurav), xmllint --pretty crashed without following numeric argument (Tim Galeckas), Fix XPath expressions of the form '@ns:*' (Nick Wellnhofer), Fix XPath '//' optimization with predicates (Nick Wellnhofer), Clear up a potential NULL dereference (Daniel Veillard), Fix a possible NULL dereference (Gaurav), Avoid crash if allocation fails (Daniel Veillard), Remove occasional leading space in XPath number formatting (Daniel Veillard), Fix handling of mmap errors (Daniel Veillard), Catch malloc error and exit accordingly (Daniel Veillard), missing else in xlink.c (Ami Fischman), Fix a parsing bug on non-ascii element and CR/LF usage (Daniel Veillard), Fix a regression in xmlGetDocCompressMode() (Daniel Veillard), properly quote the namespace uris written out during c14n (Aleksey Sanin), Remove premature XInclude check on URI being relative (Alexey Neyman), Fix missing break on last() function for attributes (dcb), Do not URI escape in server side includes (Romain Bondue), Fix an error in xmlCleanupParser (Alexander Pastukhov) - Documentation: typo in error messages "colon are forbidden from..." (Daniel Veillard), Fix a link to James SAX documentation old page (Daniel Veillard), Fix typos in relaxng.c (Jan Pokorný), Fix a doc typo (Daniel Veillard), Fix typos in {tree,xpath}.c (errror) (Jan Pokorný), Add limitations about encoding conversion (Daniel Veillard), Fix typos in xmlschemas{,types}.c (Jan Pokorný), Fix incorrect spelling entites->entities (Jan Pokorný), Forgot to document 2.9.1 release, regenerate docs (Daniel Veillard) - Portability: AC_CONFIG_FILES and executable bit (Roumen Petrov), remove HAVE_CONFIG_H dependency in testlimits.c (Roumen Petrov), fix some tabs mixing incompatible with python3 (Roumen Petrov), Visual Studio 14 CTP defines snprintf() (Francis Dupont), OS400: do not try to copy unexisting doc files (Patrick Monnerat), OS400: use either configure.ac or configure.in. (Patrick Monnerat), os400: make-src.sh: create physical file with target CCSID (Patrick Monnerat), OS400: Add some more C macros equivalent procedures. (Patrick Monnerat), OS400: use C macros to implement equivalent RPG support procedures. (Patrick Monnerat), OS400: implement XPath macros as procedures for ILE/RPG support. (Patrick Monnerat), OS400: include in distribution tarball. (Patrick Monnerat), OS400: Add README: compilation directives and OS/400 specific stuff. (Patrick Monnerat), OS400: Add compilation scripts. (Patrick Monnerat), OS400: ILE RPG language header files. (Patrick Monnerat), OS400: implement some macros as functions for ILE/RPG language support (that as no macros). (Patrick Monnerat), OS400: UTF8<-->EBCDIC wrappers for system and external library calls (Patrick Monnerat), OS400: Easy character transcoding support (Patrick Monnerat), OS400: iconv functions compatibility wrappers and table builder. (Patrick Monnerat), OS400: create architecture directory. Implement dlfcn emulation. (Patrick Monnerat), Fix building when configuring without xpath and xptr (Daniel Veillard), configure: Add --with-python-install-dir (Jonas Eriksson), Fix compilation with minimum and xinclude. (Nicolas Le Cam), Compile out use of xmlValidateNCName() when not available. (Nicolas Le Cam), Fix compilation with minimum and schematron. (Nicolas Le Cam), Legacy needs xmlSAX2StartElement() and xmlSAX2EndElement(). (Nicolas Le Cam), Don't use xmlValidateName() when not available. (Nicolas Le Cam), Fix a portability issue on Windows (Longstreth Jon), Various portability patches for OpenVMS (Jacob (Jouk) Jansen), Use specific macros for portability to OS/400 (Patrick Monnerat), Add macros needed for OS/400 portability (Patrick Monnerat), Portability patch for fopen on OS/400 (Patrick Monnerat), Portability fixes for OS/400 (Patrick Monnerat), Improve va_list portability (Patrick Monnerat), Portability fix (Patrick Monnerat), Portability fix (Patrick Monnerat), Generic portability fix (Patrick Monnerat), Shortening lines in headers (Patrick Monnerat), build: Use pkg-config to find liblzma in preference to AC_CHECK_LIB (Philip Withnall), build: Add @LZMA_LIBS@ to libxml’s pkg-config files (Philip Withnall), fix some tabs mixing incompatible with python3 (Daniel Veillard), add additional defines checks for support "./configure --with-minimum" (Denis Pauk), Another round of fixes for older versions of Python (Arfrever Frehtes Taifersar Arahesis), python: fix drv_libxml2.py for python3 compatibility (Alexandre Rostovtsev), python: Fix compiler warnings when building python3 bindings (Armin K), Fix for compilation with python 2.6.8 (Petr Sumbera) - Improvements: win32/libxml2.def.src after rebuild in doc (Roumen Petrov), elfgcchack.h: more legacy needs xmlSAX2StartElement() and xmlSAX2EndElement() (Roumen Petrov), elfgcchack.h: add xmlXPathNodeEval and xmlXPathSetContextNode (Roumen Petrov), Provide cmake module (Samuel Martin), Fix a couple of issues raised by make dist (Daniel Veillard), Fix and add const qualifiers (Kurt Roeckx), Preparing for upcoming release of 2.9.2 (Daniel Veillard), Fix zlib and lzma libraries check via command line (Dmitriy), wrong error column in structured error when parsing end tag (Juergen Keil), doc/news.html: small update to avoid line join while generating NEWS. (Patrick Monnerat), Add methods for python3 iterator (Ron Angeles), Support element node traversal in document fragments. (Kyle VanderBeek), xmlNodeSetName: Allow setting the name to a substring of the currently set name (Tristan Van Berkom), Added macros for argument casts (Eric Zurcher), adding init calls to xml and html Read parsing entry points (Daniel Veillard), Get rid of 'REPLACEMENT CHARACTER' Unicode chars in xmlschemas.c (Jan Pokorný), Implement choice for name classes on attributes (Shaun McCance), Two small namespace tweaks (Daniel Veillard), xmllint --memory should fail on empty files (Daniel Veillard), Cast encoding name to char pointer to match arg type (Nikolay Sivov) - Cleanups: Removal of old configure.in (Daniel Veillard), Unreachable code in tree.c (Gaurav Gupta), Remove a couple of dead conditions (Gaurav Gupta), Avoid some dead code and cleanup in relaxng.c (Gaurav), Drop not needed checks (Denis Pauk), Fix a wrong test (Daniel Veillard) 2.9.1: Apr 19 2013: - Features: Support for Python3 (Daniel Veillard), Add xmlXPathSetContextNode and xmlXPathNodeEval (Alex Bligh) - Documentation: Add documentation for xmllint --xpath (Daniel Veillard), Fix the URL of the SAX documentation from James (Daniel Veillard), Fix spelling of "length". (Michael Wood) - Portability: Fix python bindings with versions older than 2.7 (Daniel Veillard), rebuild docs:Makefile.am (Roumen Petrov), elfgcchack.h after rebuild in doc (Roumen Petrov), elfgcchack for buf module (Roumen Petrov), Fix a uneeded and wrong extra link parameter (Daniel Veillard), Few cleanup patches for Windows (Denis Pauk), Fix rpmbuild --nocheck (Mark Salter), Fix for win32/configure.js and WITH_THREAD_ALLOC (Daniel Richard), Fix Broken multi-arch support in xml2-config (Daniel Veillard), Fix a portability issue for GCC < 3.4.0 (Daniel Veillard), Windows build fixes (Daniel Richard), Fix a thread portability problem (Friedrich Haubensak), Downgrade autoconf requirement to 2.63 (Daniel Veillard) - Bug Fixes: Fix a linking error for python bindings (Daniel Veillard), Fix a couple of return without value (Jüri Aedla), Improve the hashing functions (Daniel Franke), Improve handling of xmlStopParser() (Daniel Veillard), Remove risk of lockup in dictionary initialization (Daniel Veillard), Activate detection of encoding in external subset (Daniel Veillard), Fix an output buffer flushing conversion bug (Mikhail Titov), Fix an old bug in xmlSchemaValidateOneElement (Csaba László), Fix configure cannot remove messages (Gilles Espinasse), fix schema validation in combination with xsi:nil (Daniel Veillard), xmlCtxtReadFile doesn't work with literal IPv6 URLs (Steve Wolf), Fix a few problems with setEntityLoader (Alexey Neyman), Detect excessive entities expansion upon replacement (Daniel Veillard), Fix the flushing out of raw buffers on encoding conversions (Daniel, Veillard), Fix some buffer conversion issues (Daniel Veillard), When calling xmlNodeDump make sure we grow the buffer quickly (Daniel, Veillard), Fix an error in the progressive DTD parsing code (Dan Winship), xmllint should not load DTD by default when using the reader (Daniel, Veillard), Try IBM-037 when looking for EBCDIC handlers (Petr Sumbera), Fix potential out of bound access (Daniel Veillard), Fix large parse of file from memory (Daniel Veillard), Fix a bug in the nsclean option of the parser (Daniel Veillard), Fix a regression in 2.9.0 breaking validation while streaming (Daniel, Veillard), Remove potential calls to exit() (Daniel Veillard) - Improvements: Regenerated API, and testapi, rebuild documentation (Daniel Veillard), Fix tree iterators broken by 2to3 script (Daniel Veillard), update all tests for Python3 and Python2 (Daniel Veillard), A few more fixes for python 3 affecting libxml2.py (Daniel Veillard), Fix compilation on Python3 (Daniel Veillard), Converting apibuild.py to python3 (Daniel Veillard), First pass at starting porting to python3 (Daniel Veillard), updated configure.in for python3 (Daniel Veillard), Add support for xpathRegisterVariable in Python (Shaun McCance), Added a regression tests from bug 694228 data (Daniel Veillard), Cache presence of '<' in entities content (Daniel Veillard), Avoid extra processing on entities (Daniel Veillard), Python binding for xmlRegisterInputCallback (Alexey Neyman), Python bindings: DOM casts everything to xmlNode (Alexey Neyman), Define LIBXML_THREAD_ALLOC_ENABLED via xmlversion.h (Tim Starling), Adding streaming validation to runtest checks (Daniel Veillard), Add a --pushsmall option to xmllint (Daniel Veillard) - Cleanups: Switched comment in file to UTF-8 encoding (Daniel Veillard), Extend gitignore (Daniel Veillard), Silent the new python test on input (Alexey Neyman), Cleanup of a duplicate test (Daniel Veillard), Cleanup on duplicate test expressions (Daniel Veillard), Fix compiler warning after 153cf15905cf4ec080612ada6703757d10caba1e (Patrick, Gansterer), Spec cleanups and a fix for multiarch support (Daniel Veillard), Silence a clang warning (Daniel Veillard), Cleanup the Copyright to be pure MIT Licence wording (Daniel Veillard), rand_seed should be static in dict.c (Wouter Van Rooy), Fix typos in parser comments (Jan Pokorný) 2.9.0: Sep 11 2012: - Features: A few new API entry points, More resilient push parser mode, A lot of portability improvement, Faster XPath evaluation - Documentation: xml2-config.1 markup error (Christian Weisgerber), libxml(3) manpage typo fix (John Bradshaw), More cleanups to the documentation part of libxml2 (Daniel Richard G) - Portability: Bug 676544 - fails to build with --without-sax1 (Akira TAGOH), fix builds not having stdint.h (Rob Richards), GetProcAddressA is available only on WinCE (Daniel Veillard), More updates and cleanups on autotools and Makefiles (Daniel Richard G), More changes for Win32 compilation (Eric Zurcher), Basic changes for Win32 builds of release 2.9.0: compile buf.c (Eric Zurcher), Bundles all generated files for python into the distribution (Daniel Richard G), Fix compiler warnings of wincecompat.c (Patrick Gansterer), Fix non __GNUC__ build (Patrick Gansterer), Fix windows unicode build (Patrick Gansterer), clean redefinition of {v}snprintf in C-source (Roumen Petrov), use xmlBuf... if DEBUG_INPUT is defined (Roumen Petrov), fix runtests to use pthreads support for various Unix platforms (Daniel Richard G), Various "make distcheck" and portability fixups 2nd part (Daniel Richard G), Various "make distcheck" and portability fixups (Daniel Richard G), Fix compilation on older Visual Studio (Daniel Veillard) - Bug Fixes: Change the XPath code to percolate allocation errors (Daniel Veillard), Fix reuse of xmlInitParser (Daniel Veillard), Fix potential crash on entities errors (Daniel Veillard), initialize var (Rob Richards), Fix the XPath arity check to also check the XPath stack limits (Daniel Veillard), Fix problem with specific and generic error handlers (Pietro Cerutti), Avoid a potential infinite recursion (Daniel Veillard), Fix an XSD error when generating internal automata (Daniel Veillard), Patch for xinclude of text using multibyte characters (Vitaly Ostanin), Fix a segfault on XSD validation on pattern error (Daniel Veillard), Fix missing xmlsave.h module which was ignored in recent builds (Daniel Veillard), Add a missing element check (Daniel Veillard), Adding various checks on node type though the API (Daniel Veillard), Namespace nodes can't be unlinked with xmlUnlinkNode (Daniel Veillard), Fix make dist to include new private header files (Daniel Veillard), More fixups on the push parser behaviour (Daniel Veillard), Strengthen behaviour of the push parser in problematic situations (Daniel Veillard), Enforce XML_PARSER_EOF state handling through the parser (Daniel Veillard), Fixup limits parser (Daniel Veillard), Do not fetch external parsed entities (Daniel Veillard), Fix an error in previous commit (Aron Xu), Fix entities local buffers size problems (Daniel Veillard), Fix parser local buffers size problems (Daniel Veillard), Fix a failure to report xmlreader parsing failures (Daniel Veillard) - Improvements: Keep libxml2.syms when running "make distclean" (Daniel Veillard), Allow to set the quoting character of an xmlWriter (Csaba Raduly), Keep non-significant blanks node in HTML parser (Daniel Veillard), Add a forbidden variable error number and message to XPath (Daniel Veillard), Support long path names on WNT (Michael Stahl), Improve HTML escaping of attribute on output (Daniel Veillard), Handle ICU_LIBS as LIBADD, not LDFLAGS to prevent linking errors (Arfrever Frehtes Taifersar Arahesis), Switching XPath node sorting to Timsort (Vojtech Fried), Optimizing '//' in XPath expressions (Nick Wellnhofer), Expose xmlBufShrink in the public tree API (Daniel Veillard), Visible HTML elements close the head tag (Conrad Irwin), Fix file and line report for XSD SAX and reader streaming validation (Daniel Veillard), Fix const qualifyer to definition of xmlBufferDetach (Daniel Veillard), minimize use of HAVE_CONFIG_H (Roumen Petrov), fixup regression in Various "make distcheck" and portability fixups (Roumen Petrov), Add support for big line numbers in error reporting (Daniel Veillard), Avoid using xmlBuffer for serialization (Daniel Veillard), Improve compatibility between xmlBuf and xmlBuffer (Daniel Veillard), Provide new accessors for xmlOutputBuffer (Daniel Veillard), Improvements for old buffer compatibility (Daniel Veillard), Expand the limit test program (Daniel Veillard), Improve error reporting on parser errors (Daniel Veillard), Implement some default limits in the XPath module (Daniel Veillard), Introduce some default parser limits (Daniel Veillard), Cleanups and new limit APIs for dictionaries (Daniel Veillard), Fixup for buf.c (Daniel Veillard), Cleanup URI module memory allocation code (Daniel Veillard), Extend testlimits (Daniel Veillard), More avoid quadratic behaviour (Daniel Veillard), Impose a reasonable limit on PI size (Daniel Veillard), first version of testlimits new test (Daniel Veillard), Avoid quadratic behaviour in some push parsing cases (Daniel Veillard), Impose a reasonable limit on comment size (Daniel Veillard), Impose a reasonable limit on attribute size (Daniel Veillard), Harden the buffer code and make it more compatible (Daniel Veillard), More cleanups for input/buffers code (Daniel Veillard), Cleanup function xmlBufResetInput(), to set input from Buffer (Daniel Veillard) Switch the test program for characters to new input buffers (Daniel Veillard), Convert the HTML tree module to the new buffers (Daniel Veillard), Convert of the HTML parser to new input buffers (Daniel Veillard), Convert the writer to new output buffer and save APIs (Daniel Veillard), Convert XMLReader to the new input buffers (Daniel Veillard), New saving functions using xmlBuf and conversion (Daniel Veillard), Provide new xmlBuf based saving functions (Daniel Veillard), Convert XInclude to the new input buffers (Daniel Veillard), Convert catalog code to the new input buffers (Daniel Veillard), Convert C14N to the new Input buffer (Daniel Veillard), Convert xmlIO.c to the new input and output buffers (Daniel Veillard), Convert XML parser to the new input buffers (Daniel Veillard), Incompatible change to the Input and Output buffers (Daniel Veillard), Adding new encoding function to deal with the new structures (Daniel Veillard), Convert XPath to xmlBuf (Daniel Veillard), Adding a new buf module for buffers (Daniel Veillard), Memory error within SAX2 reuse common framework (Daniel Veillard), Fix xmllint --xpath node initialization (Daniel Veillard) - Cleanups: Various cleanups to avoid compiler warnings (Daniel Veillard), Big space and tab cleanup (Daniel Veillard), Followup to LibXML2 docs/examples cleanup patch (Daniel Veillard), Second round of cleanups for LibXML2 docs/examples (Daniel Richard), Remove all .cvsignore as they are not used anymore (Daniel Veillard), Fix a Timsort function helper comment (Daniel Veillard), Small cleanup for valgrind target (Daniel Veillard), Patch for portability of latin characters in C files (Daniel Veillard), Cleanup some of the parser code (Daniel Veillard), Fix a variable name in comment (Daniel Veillard), Regenerated testapi.c (Daniel Veillard), Regenerating docs and API files (Daniel Veillard), Small cleanup of unused variables in test (Daniel Veillard), Expand .gitignore with more files (Daniel Veillard) 2.8.0: May 23 2012: - Features: add lzma compression support (Anders F Bjorklund) - Documentation: xmlcatalog: Add uri and delegateURI to possible add types in man page. (Ville Skyttä), Update README.tests (Daniel Veillard), URI handling code is not OOM resilient (Daniel Veillard), Fix an error in comment (Daniel Veillard), Fixed bug #617016 (Daniel Mustieles), Fixed two typos in the README document (Daniel Neel), add generated html files (Anders F Bjorklund), Clarify the need to use xmlFreeNode after xmlUnlinkNode (Daniel Veillard), Improve documentation a bit (Daniel Veillard), Updated URL for lxml python bindings (Daniel Veillard) - Portability: Restore code for Windows compilation (Daniel Veillard), Remove git error message during configure (Christian Dywan), xmllint: Build fix for endTimer if !defined(HAVE_GETTIMEOFDAY) (Patrick R. Gansterer), remove a bashism in confgure.in (John Hein), undef ERROR if already defined (Patrick R. Gansterer), Fix library problems with mingw-w64 (Michael Cronenworth), fix windows build. ifdef addition from bug 666491 makes no sense (Rob Richards), prefer native threads on win32 (Sam Thursfield), Allow to compile with Visual Studio 2010 (Thomas Lemm), Fix mingw's snprintf configure check (Andoni Morales), fixed a 64bit big endian issue (Marcus Meissner), Fix portability failure if netdb.h lacks NO_ADDRESS (Daniel Veillard), Fix windows build from lzma addition (Rob Richards), autogen: Only check for libtoolize (Colin Walters), Fix the Windows build files (Patrick von Reth), 634846 Remove a linking option breaking Windows VC10 (Daniel Veillard), 599241 fix an initialization problem on Win64 (Andrew W. Nosenko), fix win build (Rob Richards) - Bug fixes: Part for rand_r checking missing (Daniel Veillard), Cleanup on randomization (Daniel Veillard), Fix undefined reference in python module (Pacho Ramos), Fix a race in xmlNewInputStream (Daniel Veillard), Fix weird streaming RelaxNG errors (Noam), Fix various bugs in new code raised by the API checking (Daniel Veillard), Fix various problems with "make dist" (Daniel Veillard), Fix a memory leak in the xzlib code (Daniel Veillard), HTML parser error with