Update of JPEG libraries

Scope

Components providing JPEG libraries were added to oi-userland in PR #1584 and PR #1585 and are now available in the Hipster 2015 repository.

The JPEG format consists of several APIs, version 6b, 7, 8 and 9, which are not backward compatible, and two implementations co-exist in the form of:

For now, the provided implementations are:

  • IJG version 6b
  • libJPEG-Turbo version 6b, 7 and 8

The default library, IJG version 6b, was historically provided by the JDS consolidation (SUNWjpg).

In order to maintain backward compatibility with older Solaris/illumos, each component delivers files to a dedicated subdirectory under /usr/lib and symlinks to version 6b are created.

Package hierarchy

  • libjpeg metapackage, provides current API (currently 6b, versioned as 6.0.2).
  • libjpeg6 provides documentation and symlinks to version 6b for backward compatibility (versioned as 6.0.2).
  • libjpeg6-ijg provides programs and libraries from IJG’s JPEG 6b.
  • libjpeg-turbo provides documentation and requires package libjpegX-turbo with X the current default API.
  • libjpeg[6,7,8]-turbo provides programs and libraries from libJPEG-Turbo.

Legacy software expects content provided by libjpeg6:

PATH
usr/bin/amd64/cjpeg
usr/bin/amd64/djpeg
usr/bin/amd64/jpegtran
usr/bin/amd64/rdjpgcom
usr/bin/amd64/wrjpgcom
usr/bin/cjpeg
usr/bin/djpeg
usr/bin/jpegtran
usr/bin/rdjpgcom
usr/bin/wrjpgcom
usr/include/jconfig.h
usr/include/jerror.h
usr/include/jmorecfg.h
usr/include/jpeglib.h
usr/lib/amd64/libjpeg.so
usr/lib/amd64/libjpeg.so.62
usr/lib/amd64/libjpeg.so.62.0.0
usr/lib/libjpeg.so
usr/lib/libjpeg.so.62
usr/lib/libjpeg.so.62.0.0
usr/share/man/man1/cjpeg.1
usr/share/man/man1/djpeg.1
usr/share/man/man1/jpegtran.1
usr/share/man/man1/rdjpgcom.1
usr/share/man/man1/wrjpgcom.1

Notes

  • Fixed CVE-2013-6629 using GhostScript patch from 2004 which attempts fixing the data instead of throwing an error.
  • Libraries from IJG providing API 7, 8 and 9 should be contributed to oi-userland, volunteers are welcome 😉
  • Existing components still rely on IJG version 6b.
  • Following the steps of major distributions, slow migration of components to API version 8 can be performed.
  • Either IJG (complete API) or libJPEG-Turbo (faster, elected by Debian, Fedora, Chrome, … in 2014) could be used: see arguments of the Debian’s technical committee for instance.