This is a well-known debian patch used by many Linux distribution, but not accepted by upstream yet. Upstream-Status: Pending --- libjpeg7-7.orig/config.sub +++ libjpeg7-7/config.sub @@ -1,4 +1,10 @@ #! /bin/sh +# autotools-dev hack (, Wed, 14 Nov 2001 10:13:10 +0100) +if [ -x /usr/share/misc/config.sub ]; then + /usr/share/misc/config.sub $* + exit $? +fi + # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 --- libjpeg7-7.orig/config.guess +++ libjpeg7-7/config.guess @@ -1,4 +1,10 @@ #! /bin/sh +# autotools-dev hack (, Wed, 14 Nov 2001 10:13:10 +0100) +if [ -x /usr/share/misc/config.guess ]; then + /usr/share/misc/config.guess $* + exit $? +fi + # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 --- libjpeg7-7.orig/debian/libjpeg7-dev.files +++ libjpeg7-7/debian/libjpeg7-dev.files @@ -0,0 +1,4 @@ +usr/include +usr/lib/libjpeg.a +usr/lib/libjpeg.la +usr/lib/libjpeg.so --- libjpeg7-7.orig/debian/libjpeg-progs.README.Debian +++ libjpeg7-7/debian/libjpeg-progs.README.Debian @@ -0,0 +1,13 @@ +libjpeg-progs for Debian +======================== + +This package contains programs for manipulating JPEG files: + cjpeg/djpeg: convert to/from the JPEG file format + rdjpgcom/wrjpgcom: read/write comments in JPEG files + jpegtran: lossless transformations of JPEG files + jpegexiforient/exifautotran: manipulate EXIF orientation tag + +Thanks for using Debian! + +-- +Bill Allombert Sun, 05 Jul 2009 15:18:59 +0200 --- libjpeg7-7.orig/debian/shlibs.local +++ libjpeg7-7/debian/shlibs.local @@ -0,0 +1 @@ +libjpeg 7 libjpeg7 --- libjpeg7-7.orig/debian/rules +++ libjpeg7-7/debian/rules @@ -0,0 +1,71 @@ +#!/usr/bin/make -f +# Made with the aid of debmake, by Christoph Lameter, +# based on the sample debian/rules file for GNU hello by Ian Jackson. + +package=libjpeg + +export DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) +export DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) + +export CFLAGS=-D_REENTRANT -g -Wall +ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) +CFLAGS += -O0 +else +CFLAGS += -O2 +endif + +#export DH_VERBOSE=1 + +build: build-stamp +build-stamp: + dh_testdir + ./configure --prefix=/usr --mandir=/usr/share/man \ + --enable-static --enable-shared \ + --build=$(DEB_BUILD_GNU_TYPE) --host=$(DEB_HOST_GNU_TYPE) + $(MAKE) +ifeq (,$(findstring nocheck,$(DEB_BUILD_OPTIONS))) + $(MAKE) check +endif + $(MAKE) -C debian/extra + + touch build-stamp + +clean: + dh_testdir + dh_testroot + -rm -f build-stamp + if [ -f Makefile ]; then $(MAKE) distclean; fi + $(MAKE) clean -C debian/extra + dh_clean + +binary-indep: + +binary-arch: build + dh_testdir + dh_testroot + dh_clean -k + dh_installdirs + $(MAKE) install DESTDIR=`pwd`/debian/tmp + $(MAKE) install -C debian/extra prefix=/usr DESTDIR=`pwd`/debian/tmp + # fix jconfig.h + rm debian/tmp/usr/include/jconfig.h + sed -e "s/#\(undef\|define\) HAVE_\(LOCALE\|\(STD\(DEF\|LIB\)\)\)_H 1//g" \ + jconfig.h > debian/tmp/usr/include/jconfig.h + # separate out lib package + dh_movefiles + # Finish it off with debhelper + dh_installdocs README + dh_installexamples + dh_installchangelogs change.log + dh_strip --dbg-package=libjpeg7-dbg + dh_compress + dh_fixperms + dh_installdeb + dh_shlibdeps -l`pwd`/debian/libjpeg7/usr/lib + dh_gencontrol + dh_md5sums + dh_builddeb + +binary: binary-indep binary-arch + +.PHONY: clean binary-indep binary-arch binary build --- libjpeg7-7.orig/debian/libjpeg7-dev.README.Debian +++ libjpeg7-7/debian/libjpeg7-dev.README.Debian @@ -0,0 +1,18 @@ +IJG JPEG for Debian +=================== + +The following patch has been applied to the headers files: + +--- jconfig.h: Remove unused symbol HAVE_STDDEF_H, HAVE_STDLIB_H and +HAVE_LOCALE_H since they are not used by the installed headers files and cause +problem with autoconf. + +This can theoretically cause problems if your software relies on theses symbols +being defined by this header. If it ever happens, please define them manually. + +Note: this is not Debian-specific, others distributions apply similar patches. + +Thanks for using Debian! + +--- +Bill Allombert Sun, 05 Jul 2009 15:17:56 +0200 --- libjpeg7-7.orig/debian/shlibs +++ libjpeg7-7/debian/shlibs @@ -0,0 +1 @@ +libjpeg 7 libjpeg7 --- libjpeg7-7.orig/debian/control +++ libjpeg7-7/debian/control @@ -0,0 +1,52 @@ +Source: libjpeg7 +Maintainer: Bill Allombert +Section: graphics +Priority: optional +Build-Depends: debhelper (>= 5), autotools-dev +Standards-Version: 3.8.2 + +Package: libjpeg7 +Architecture: any +Section: libs +Description: The Independent JPEG Group's JPEG runtime library + The Independent JPEG Group's JPEG library is a library for handling + JPEG files. + . + This package contains the shared library. +Depends: ${shlibs:Depends} + +Package: libjpeg7-dev +Architecture: any +Section: libdevel +Description: Development files for the IJG JPEG library + The Independent JPEG Group's JPEG library is a library for handling + JPEG files. + . + This package contains the static library, headers and documentation. +Depends: libjpeg7 (=${binary:Version}), libc-dev +Conflicts: libjpeg62-dev +Replaces: libjpeg62-dev + +Package: libjpeg7-dbg +Architecture: any +Section: debug +Priority: extra +Description: Development files for the IJG JPEG library + The Independent JPEG Group's JPEG library is a library for handling + JPEG files. + . + This package contains the debugging symbols for libjpeg. +Provides: libjpeg-dbg +Depends: libjpeg7 (=${binary:Version}) +Conflicts: libjpeg62-dbg +Replaces: libjpeg62-dbg + +Package: libjpeg-progs +Architecture: any +Description: Programs for manipulating JPEG files + This package contains programs for manipulating JPEG files: + cjpeg/djpeg: convert to/from the JPEG file format + rdjpgcom/wrjpgcom: read/write comments in JPEG files + jpegtran: lossless transformations of JPEG files + jpegexiforient/exifautotran: manipulate EXIF orientation tag +Depends: ${shlibs:Depends} --- libjpeg7-7.orig/debian/libjpeg7.files +++ libjpeg7-7/debian/libjpeg7.files @@ -0,0 +1,2 @@ +/usr/lib/libjpeg.so.7.0.0 +/usr/lib/libjpeg.so.7 --- libjpeg7-7.orig/debian/postinst +++ libjpeg7-7/debian/postinst @@ -0,0 +1,8 @@ +#!/bin/sh -e + +#DEBHELPER# + +if [ "$1" = "configure" ]; then + ldconfig +fi + --- libjpeg7-7.orig/debian/compat +++ libjpeg7-7/debian/compat @@ -0,0 +1 @@ +5 --- libjpeg7-7.orig/debian/libjpeg7-dev.examples +++ libjpeg7-7/debian/libjpeg7-dev.examples @@ -0,0 +1 @@ +example.c --- libjpeg7-7.orig/debian/changelog +++ libjpeg7-7/debian/changelog @@ -0,0 +1,245 @@ +libjpeg7 (7-1) unstable; urgency=low + + * The "Yoan" release. + * New upstream release. closes: #535350 + - This release includes configure.ac and Makefile.am. closes: #346126 + - All patches merged upstream. + - Remove dpatch support. + * debian/control: + - Remove Build-Dependency on libtool and sharutils. + - Move libjpeg7-dbg to debug section. + - Bump standard version to 3.8.2. + * Skip test-suite if nocheck is set. closes: #451222 + + -- Bill Allombert Sun, 05 Jul 2009 15:29:27 +0200 + +libjpeg6b (6b-14) unstable; urgency=low + + * The "Lino" release. + * exifautotran: + - fix typo in manpage. closes: #376371, thanks Reuben Thomas. + - preserve file mode. closes: #383379, thanks Vincent Arkesteijn. + * debian/control, debian/rules, debian/compat: + + switch to debhelper v5 + + add libjpeg-dbg debugging package. + * debian/rules: remove - before "make clean" rules. + * Add patch 204_jpegtran_man to improve readability of manpage. + closes: #437453. Thanks Jorgen Grahn. + * jpegexiforient.1: Apply patch from Jorgen Grahn to improve formatting. + closes: #437446. + + -- Bill Allombert Thu, 16 Aug 2007 22:59:21 +0200 + +libjpeg6b (6b-13) unstable; urgency=low + + * The "If at first you don't succeed..." release. + * Change --enable-maxmem to 1024, following Guido advice. + This should fix the slowdowns with large files (for large < 1Gb): + closes: #356556, #365025, Thanks Nicolas. + If you hit performance problems, please set the JPEGMEM variable to + about half your available RAM, see jpegtran(1). + * Update libjpeg-progs README.Debian to reflect the new patch set and + the JPEGMEM feature. + * Bump standard version to 3.7.2. + + -- Bill Allombert Fri, 5 May 2006 19:14:25 +0200 + +libjpeg6b (6b-12) unstable; urgency=low + + * The "vote for me" release + * Bump standard version to 3.6.2. + * Run 'make test' instead of home-made test-suite. + * Switch to debhelper v4. + * libjpeg is now configured with --enable-maxmem=32. This limits the memory + usage to 32Mb and it can be overrided by JPEGMEM. Without this flag + JPEGMEM is ignored and there were no limits. + closes: #346023. Thanks C. Scott Ananian. + + -- Bill Allombert Thu, 2 Mar 2006 18:52:44 +0100 + +libjpeg6b (6b-11) unstable; urgency=high + + * The "Silencio" release + * exifautotran: Apply patch by Uwe Zeisberger to fix bad temporary file + handling. closes: #340079 + + -- Bill Allombert Sun, 20 Nov 2005 20:57:07 +0100 + +libjpeg6b (6b-10) unstable; urgency=low + + * The "timeout" release. + * Rebuild with current toolchain. + * Depends on libc-dev instead of libc6-dev. closes: #294696 + Thanks Joel Aelwyn for discussing thoroughly the matter. + * Instead of copying /usr/bin/libtool, we replace it by a script that + call libtool (using standard path search). Remarked by Jesus Climent. + * debian/control: remove pre-hamm cruft. + * Add jpegexiforient and jpegautotran by Guido Vollbeding + as proposed by Philip + Armstrong. closes: #257061. + * Run the test-suite at build time instead of shipping it in the package: + - /usr/share/doc/libjpeg-progs/tests: removed. + - debian/control: Add Build-Depends on sharutils for uuencode. + - debian/libjpeg-progs.dirs: removed. + - debian/libjpeg-progs.test: removed. + + -- Bill Allombert Tue, 1 Mar 2005 19:43:26 +0100 + +libjpeg6b (6b-9) unstable; urgency=low + + * The "I'm all for aggressive goals" release. + * Rebuild with new libtool. closes: #201943. + * patch 100_crop: Updated from Guido Vollbeding + to include patches 203_jpegtran_errmsg,204_perfect. + * patch 200_crop_man: Include 205_perfect_man. + * patches 203_jpegtran_errmsg, 204_perfect, 205_perfect_man: removed + * Add patch 203_rdppm: fix cjpeg issue with 16-bit PPM files. closes: #208937 + * Bump standard version to 3.6.1. + * Update debian/edit-patch. + + -- Bill Allombert Mon, 8 Sep 2003 16:22:08 +0200 + +libjpeg6b (6b-8) unstable; urgency=low + + * The "I *hate* when that happens" release. + * Move libjpeg62-dev to libdevel section. + * See debian/README.sources for detail about the (d)patch system. + * debian/rules: avoid to run configure twice. + * Add patches 204_perfect and 205_perfect_man. They implement the + -perfect jpegtran option as proposed by Mark W. Eichin. closes: #189027 + * Bump standard version to 3.5.10. + * Use /usr/bin/libtool instead of ldconfig-generated libtool, and remove + various libtool related kludges, including patch 301_configure. + closes: #195281. Thanks Robert Millan for the suggestion. + * Remove patch 302_makefile. Fix debian/rules instead. + + -- Bill Allombert Sat, 31 May 2003 16:16:59 +0200 + +libjpeg6b (6b-7) unstable; urgency=low + + * Rebuild with new gcc/new glibc/new debhelper. + * Add -g to build options according to new policy. + * Add support for DEB_BUILD_OPTIONS noopt. nostrip is handled by dh_strip. + * Bump standard version to 3.5.9. + * Extend description a bit (If you have a better one please email me!). + * Use dpatch to handle the patches. + + -- Bill Allombert Sun, 16 Mar 2003 12:19:36 +0100 + +libjpeg6b (6b-6) unstable; urgency=low + + * The "Try to break sarge before it even got a name" release + * jpegtran: better error messages when opening files. + closes: #147516 Thanks Mark W. Eichin. + * Add debian/patch dir with my patches. + * Add extern "C" if we are under C++. + closes: #113167 Thanks, Fredrik Jagenheim. + * Remove HAVE_STD{LIB,DEF}_H from jconfig.h since they are not used and + conflict with autoconf. closes: #109516 Thanks + * Add README.Debian in /usr/share/libjpeg62-dev + + -- Bill Allombert Mon, 3 Jun 2002 19:34:08 +0200 + +libjpeg6b (6b-5) unstable; urgency=low + + * jpeg-->JPEG in libjpeg-progs description. + * Add lib path to dh_shlibdeps to avoid warning. + * Apply patch from by + closes: #129412 Thanks, Colin Marquardt. + + -- Bill Allombert Mon, 20 May 2002 11:55:22 +0200 + +libjpeg6b (6b-4) unstable; urgency=low + + * Avoid bashism in debian/rules. + * Update libtool to 1.3.5. (1.4 will break). + closes: #52095 Thanks, + * Patch config.guess to use version in the autotools-dev package. + * Correct Section: field of libjpeg62 and libjpeg62-dev. + + -- Bill Allombert Tue, 20 Nov 2001 10:23:47 +0100 + +libjpeg6b (6b-3) unstable; urgency=low + + * The "Where is ltconfig ?" release. + * Remove jconfig.h in debian/rules clean and do some clean up. + * Install libjpeg.la per Policy 11.2. + * Remove duplicate wizard.doc file in libjpeg62-dev. + * Use dpkg-architecture instead of config.guess. + * Patch config.sub to use version in the autotools-dev package. + closes: #85558, #120039 + * Patch rdjpgcom.c to use locales for isprint check on comment chars. + closes: #116589 Thanks, Neal H Walfield + * Apply patch from by + closes: #114415 Thanks, + + -- Bill Allombert Tue, 13 Nov 2001 21:41:49 +0000 + +libjpeg6b (6b-2) unstable; urgency=low + + * New Maintainer. Mark, If you want back the package, just ask! + * Acknowledge previous NMU: + Jordi: closes: #74087, #24330, #24291 + Colin: closes: #80752 + Joel: closes: #25324, #27033, #28341 + * Write source location as a valid URL in debian/copyright. + closes: #118628 Thanks, Doug Porter . + * Fix formating of description of libjpeg-progs. + closes: #114378 Thanks, Colin Watson . + * Install jpegint.h header needed by some apps. closes: #100171 + * Remove unused/empty debian/postrm. + closes: #24849 Thanks, Adrian Bridgett . + * Install wizard.doc file. closes: #64807 Thanks . + * Fix libjpeg-progs test.sh. + * Fix lintian bugs: typo in copyright, emacs user info in changelog. + * Fix false lintian bug: unsafe ldconfig in postinst, by reformatting. + * Remove "-g" from CFLAGS per Policy 11.1, hoping m68k is fixed now. + * Remove libtool and Makefile in debian/rules clean. + * Fix the test system. As a side effect, + closes: #109195 Thanks Daniel Schepler + * Standards-Version is now 3.5.6. + + -- Bill Allombert Fri, 9 Nov 2001 22:40:16 +0100 + +libjpeg6b (6b-1.3) frozen unstable; urgency=low + + * Non-Maintainer Upload. + * Added Build-Depends. + * Gil Bahat did the rest of the changes. + * Close bug regarding non-standard jpegs not being processed + (closes: #74087). + * The output gifs are uncompressed, so have no UNISYS patent issues. + (closes: #24330, #24291). + * Standards-Version is now 3.0.0. + + -- Jordi Mallach Sat, 24 Feb 2001 22:17:38 +0100 + +libjpeg6b (6b-1.2) frozen unstable; urgency=low (HIGH for m68k) + + * Non-maintainer release. + * Recompile for m68k since existing djpeg binary claims all jpegs I have + are invalid (yet hamm djpeg has no problem with them). + Specifically, added "-O2 -g -Wall" to CFLAGS -- possible gcc bug? + + -- Chris Lawrence Tue, 10 Nov 1998 20:57:38 -0600 + +libjpeg6b (6b-1.1) frozen unstable; urgency=high + + * Non-maintainer release. + * Use upstream library soname (62). + * Removed libjpeg-gif package, as the source notes + that the GIF reading has been removed, and the GIFs written + do not infringe on the LZW patent. + + -- Joel Klecker Thu, 22 Oct 1998 05:49:48 -0700 + +libjpeg6b (6b-1) unstable; urgency=low + + * New binary packages for 6b + * New upstream release + + -- Mark Mickan Tue, 7 Jul 1998 22:27:10 +0930 + +Local variables: +mode: debian-changelog +End: --- libjpeg7-7.orig/debian/libjpeg-progs.files +++ libjpeg7-7/debian/libjpeg-progs.files @@ -0,0 +1,2 @@ +usr/bin +usr/share/man/man1 --- libjpeg7-7.orig/debian/libjpeg7-dev.docs +++ libjpeg7-7/debian/libjpeg7-dev.docs @@ -0,0 +1,3 @@ +libjpeg.txt +structure.txt +coderules.txt --- libjpeg7-7.orig/debian/libjpeg-progs.docs +++ libjpeg7-7/debian/libjpeg-progs.docs @@ -0,0 +1,2 @@ +usage.txt +wizard.txt --- libjpeg7-7.orig/debian/copyright +++ libjpeg7-7/debian/copyright @@ -0,0 +1,96 @@ +This is Debian's prepackaged version of the `jpeg library' by the Independent +JPEG Group. + +This package was created by Mark Mickan from sources +which can be found at ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz + +It is partly based on the libjpeg6a package originally put together by +Andy Guy and later maintained by Mark Mickan. + +Current Debian maintainer is Bill Allombert . + +LEGAL ISSUES [ from README supplied with source - MM ] +============ + +In plain English: + +1. We don't promise that this software works. (But if you find any bugs, + please let us know!) +2. You can use this software for whatever you want. You don't have to pay us. +3. You may not pretend that you wrote this software. If you use it in a + program, you must acknowledge somewhere in your documentation that + you've used the IJG code. + +In legalese: + +The authors make NO WARRANTY or representation, either express or implied, +with respect to this software, its quality, accuracy, merchantability, or +fitness for a particular purpose. This software is provided "AS IS", and you, +its user, assume the entire risk as to its quality and accuracy. + +This software is copyright (C) 1991-2009, Thomas G. Lane, Guido Vollbeding. +All Rights Reserved except as specified below. + +Permission is hereby granted to use, copy, modify, and distribute this +software (or portions thereof) for any purpose, without fee, subject to these +conditions: +(1) If any part of the source code for this software is distributed, then this +README file must be included, with this copyright and no-warranty notice +unaltered; and any additions, deletions, or changes to the original files +must be clearly indicated in accompanying documentation. +(2) If only executable code is distributed, then the accompanying +documentation must state that "this software is based in part on the work of +the Independent JPEG Group". +(3) Permission for use of this software is granted only if the user accepts +full responsibility for any undesirable consequences; the authors accept +NO LIABILITY for damages of any kind. + +These conditions apply to any software derived from or based on the IJG code, +not just to the unmodified library. If you use our work, you ought to +acknowledge us. + +Permission is NOT granted for the use of any IJG author's name or company name +in advertising or publicity relating to this software or products derived from +it. This software may be referred to only as "the Independent JPEG Group's +software". + +We specifically permit and encourage the use of this software as the basis of +commercial products, provided that all warranty or liability claims are +assumed by the product vendor. + + +ansi2knr.c is included in this distribution by permission of L. Peter Deutsch, +sole proprietor of its copyright holder, Aladdin Enterprises of Menlo Park, CA. +ansi2knr.c is NOT covered by the above copyright and conditions, but instead +by the usual distribution terms of the Free Software Foundation; principally, +that you must include source code if you redistribute it. (See the file +ansi2knr.c for full details.) However, since ansi2knr.c is not needed as part +of any program generated from the IJG code, this does not limit you more than +the foregoing paragraphs do. + +The Unix configuration script "configure" was produced with GNU Autoconf. +It is copyright by the Free Software Foundation but is freely distributable. +The same holds for its supporting scripts (config.guess, config.sub, +ltconfig, ltmain.sh). Another support script, install-sh, is copyright +by M.I.T. but is also freely distributable. + +It appears that the arithmetic coding option of the JPEG spec is covered by +patents owned by IBM, AT&T, and Mitsubishi. Hence arithmetic coding cannot +legally be used without obtaining one or more licenses. For this reason, +support for arithmetic coding has been removed from the free JPEG software. +(Since arithmetic coding provides only a marginal gain over the unpatented +Huffman mode, it is unlikely that very many implementations will support it.) +So far as we are aware, there are no patent restrictions on the remaining +code. + +The IJG distribution formerly included code to read and write GIF files. +To avoid entanglement with the Unisys LZW patent, GIF reading support has +been removed altogether, and the GIF writer has been simplified to produce +"uncompressed GIFs". This technique does not use the LZW algorithm; the +resulting GIF files are larger than usual, but are readable by all standard +GIF decoders. + +We are required to state that + "The Graphics Interchange Format(c) is the Copyright property of + CompuServe Incorporated. GIF(sm) is a Service Mark property of + CompuServe Incorporated." --- libjpeg7-7.orig/debian/extra/jpegexiforient.c +++ libjpeg7-7/debian/extra/jpegexiforient.c @@ -0,0 +1,299 @@ +/* + * jpegexiforient.c + * + * This is a utility program to get and set the Exif Orientation Tag. + * It can be used together with jpegtran in scripts for automatic + * orientation correction of digital camera pictures. + * + * The Exif orientation value gives the orientation of the camera + * relative to the scene when the image was captured. The relation + * of the '0th row' and '0th column' to visual position is shown as + * below. + * + * Value | 0th Row | 0th Column + * ------+-------------+----------- + * 1 | top | left side + * 2 | top | rigth side + * 3 | bottom | rigth side + * 4 | bottom | left side + * 5 | left side | top + * 6 | right side | top + * 7 | right side | bottom + * 8 | left side | bottom + * + * For convenience, here is what the letter F would look like if it were + * tagged correctly and displayed by a program that ignores the orientation + * tag: + * + * 1 2 3 4 5 6 7 8 + * + * 888888 888888 88 88 8888888888 88 88 8888888888 + * 88 88 88 88 88 88 88 88 88 88 88 88 + * 8888 8888 8888 8888 88 8888888888 8888888888 88 + * 88 88 88 88 + * 88 88 888888 888888 + * + */ + +#include +#include + +static FILE * myfile; /* My JPEG file */ + +static unsigned char exif_data[65536L]; + +/* Return next input byte, or EOF if no more */ +#define NEXTBYTE() getc(myfile) + +/* Error exit handler */ +#define ERREXIT(msg) (exit(0)) + +/* Read one byte, testing for EOF */ +static int +read_1_byte (void) +{ + int c; + + c = NEXTBYTE(); + if (c == EOF) + ERREXIT("Premature EOF in JPEG file"); + return c; +} + +/* Read 2 bytes, convert to unsigned int */ +/* All 2-byte quantities in JPEG markers are MSB first */ +static unsigned int +read_2_bytes (void) +{ + int c1, c2; + + c1 = NEXTBYTE(); + if (c1 == EOF) + ERREXIT("Premature EOF in JPEG file"); + c2 = NEXTBYTE(); + if (c2 == EOF) + ERREXIT("Premature EOF in JPEG file"); + return (((unsigned int) c1) << 8) + ((unsigned int) c2); +} + +static const char * progname; /* program name for error messages */ + +static void +usage (FILE *out) +/* complain about bad command line */ +{ + fprintf(out, "jpegexiforient reads or writes the Exif Orientation Tag "); + fprintf(out, "in a JPEG Exif file.\n"); + + fprintf(out, "Usage: %s [switches] jpegfile\n", progname); + + fprintf(out, "Switches:\n"); + fprintf(out, " --help display this help and exit\n"); + fprintf(out, " --version output version information and exit\n"); + fprintf(out, " -n Do not output the trailing newline\n"); + fprintf(out, " -1 .. -8 Set orientation value 1 .. 8\n"); +} + +/* + * The main program. + */ + +int +main (int argc, char **argv) +{ + int n_flag, set_flag; + unsigned int length, i; + int is_motorola; /* Flag for byte order */ + unsigned int offset, number_of_tags, tagnum; + + progname = argv[0]; + if (progname == NULL || progname[0] == 0) + progname = "jpegexiforient"; /* in case C library doesn't provide it */ + + if (argc < 2) { usage(stderr); return 1; } + + n_flag = 0; set_flag = 0; + + i = 1; + while (argv[i][0] == '-') { + switch (argv[i][1]) { + case '-': + switch (argv[i][2]) { + case 'h': usage(stdout); return 0; + case 'v': fprintf(stdout,"jpegexiforient\n"); return 0; + } + case 'n': + n_flag = 1; + break; + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + set_flag = argv[i][1] - '0'; + break; + default: + usage(stderr); return 1; + } + if (++i >= argc) { usage(stderr); return 1; } + } + + if (set_flag) { + if ((myfile = fopen(argv[i], "rb+")) == NULL) { + fprintf(stderr, "%s: can't open %s\n", progname, argv[i]); + return 0; + } + } else { + if ((myfile = fopen(argv[i], "rb")) == NULL) { + fprintf(stderr, "%s: can't open %s\n", progname, argv[i]); + return 0; + } + } + + /* Read File head, check for JPEG SOI + Exif APP1 */ + for (i = 0; i < 4; i++) + exif_data[i] = (unsigned char) read_1_byte(); + if (exif_data[0] != 0xFF || + exif_data[1] != 0xD8 || + exif_data[2] != 0xFF || + exif_data[3] != 0xE1) + return 0; + + /* Get the marker parameter length count */ + length = read_2_bytes(); + /* Length includes itself, so must be at least 2 */ + /* Following Exif data length must be at least 6 */ + if (length < 8) + return 0; + length -= 8; + /* Read Exif head, check for "Exif" */ + for (i = 0; i < 6; i++) + exif_data[i] = (unsigned char) read_1_byte(); + if (exif_data[0] != 0x45 || + exif_data[1] != 0x78 || + exif_data[2] != 0x69 || + exif_data[3] != 0x66 || + exif_data[4] != 0 || + exif_data[5] != 0) + return 0; + /* Read Exif body */ + for (i = 0; i < length; i++) + exif_data[i] = (unsigned char) read_1_byte(); + + if (length < 12) return 0; /* Length of an IFD entry */ + + /* Discover byte order */ + if (exif_data[0] == 0x49 && exif_data[1] == 0x49) + is_motorola = 0; + else if (exif_data[0] == 0x4D && exif_data[1] == 0x4D) + is_motorola = 1; + else + return 0; + + /* Check Tag Mark */ + if (is_motorola) { + if (exif_data[2] != 0) return 0; + if (exif_data[3] != 0x2A) return 0; + } else { + if (exif_data[3] != 0) return 0; + if (exif_data[2] != 0x2A) return 0; + } + + /* Get first IFD offset (offset to IFD0) */ + if (is_motorola) { + if (exif_data[4] != 0) return 0; + if (exif_data[5] != 0) return 0; + offset = exif_data[6]; + offset <<= 8; + offset += exif_data[7]; + } else { + if (exif_data[7] != 0) return 0; + if (exif_data[6] != 0) return 0; + offset = exif_data[5]; + offset <<= 8; + offset += exif_data[4]; + } + if (offset > length - 2) return 0; /* check end of data segment */ + + /* Get the number of directory entries contained in this IFD */ + if (is_motorola) { + number_of_tags = exif_data[offset]; + number_of_tags <<= 8; + number_of_tags += exif_data[offset+1]; + } else { + number_of_tags = exif_data[offset+1]; + number_of_tags <<= 8; + number_of_tags += exif_data[offset]; + } + if (number_of_tags == 0) return 0; + offset += 2; + + /* Search for Orientation Tag in IFD0 */ + for (;;) { + if (offset > length - 12) return 0; /* check end of data segment */ + /* Get Tag number */ + if (is_motorola) { + tagnum = exif_data[offset]; + tagnum <<= 8; + tagnum += exif_data[offset+1]; + } else { + tagnum = exif_data[offset+1]; + tagnum <<= 8; + tagnum += exif_data[offset]; + } + if (tagnum == 0x0112) break; /* found Orientation Tag */ + if (--number_of_tags == 0) return 0; + offset += 12; + } + + if (set_flag) { + /* Set the Orientation value */ + if (is_motorola) { + exif_data[offset+2] = 0; /* Format = unsigned short (2 octets) */ + exif_data[offset+3] = 3; + exif_data[offset+4] = 0; /* Number Of Components = 1 */ + exif_data[offset+5] = 0; + exif_data[offset+6] = 0; + exif_data[offset+7] = 1; + exif_data[offset+8] = 0; + exif_data[offset+9] = (unsigned char)set_flag; + exif_data[offset+10] = 0; + exif_data[offset+11] = 0; + } else { + exif_data[offset+2] = 3; /* Format = unsigned short (2 octets) */ + exif_data[offset+3] = 0; + exif_data[offset+4] = 1; /* Number Of Components = 1 */ + exif_data[offset+5] = 0; + exif_data[offset+6] = 0; + exif_data[offset+7] = 0; + exif_data[offset+8] = (unsigned char)set_flag; + exif_data[offset+9] = 0; + exif_data[offset+10] = 0; + exif_data[offset+11] = 0; + } + fseek(myfile, (4 + 2 + 6 + 2) + offset, SEEK_SET); + fwrite(exif_data + 2 + offset, 1, 10, myfile); + } else { + /* Get the Orientation value */ + if (is_motorola) { + if (exif_data[offset+8] != 0) return 0; + set_flag = exif_data[offset+9]; + } else { + if (exif_data[offset+9] != 0) return 0; + set_flag = exif_data[offset+8]; + } + if (set_flag > 8) return 0; + } + + /* Write out Orientation value */ + if (n_flag) + printf("%c", '0' + set_flag); + else + printf("%c\n", '0' + set_flag); + + /* All done. */ + return 0; +} --- libjpeg7-7.orig/debian/extra/exifautotran.1 +++ libjpeg7-7/debian/extra/exifautotran.1 @@ -0,0 +1,13 @@ +.TH EXIFAUTOTRAN "1" "February 2005" "exifautotran" "User Commands" +.SH NAME +exifautotran \- Transforms Exif files so that Orientation becomes 1 +.SH DESCRIPTION +exifautotran [list of files] +.PP +Take a list of files as input and transform them in place so that the +Orientation becomes 1. +.SH "AUTHOR" + Guido Vollbeding +.SH "SEE ALSO" +.BR jpegtran(1) +.BR jpegexiforient(1) --- libjpeg7-7.orig/debian/extra/jpegexiforient.1 +++ libjpeg7-7/debian/extra/jpegexiforient.1 @@ -0,0 +1,73 @@ +.TH JPEGEXIFORIENT "1" "February 2005" "jpegexiforient" "User Commands" +.SH NAME +jpegexiforient \- reads or writes the Exif Orientation Tag +.SH SYNOPSIS +.B jpegexiforient +[\fIswitches\fR] \fIjpegfile\fR +.SH DESCRIPTION +. +This is a utility program to get and set the Exif Orientation Tag. +It can be used together with jpegtran in scripts for automatic +orientation correction of digital camera pictures. +.PP +The Exif orientation value gives the orientation of the camera +relative to the scene when the image was captured. The relation +of the '0th row' and '0th column' to visual position is shown as +below. +.IP +.nf +.ft CR +Value | 0th Row | 0th Column +------+-------------+----------- + 1 | top | left side + 2 | top | rigth side + 3 | bottom | rigth side + 4 | bottom | left side + 5 | left side | top + 6 | right side | top + 7 | right side | bottom + 8 | left side | bottom +.fi +.PP +For convenience, here is what the letter F would look like if it were +tagged correctly and displayed by a program that ignores the orientation +tag: +.IP +.nf +.ft CB + 1 2 3 4 + +888888 888888 88 88 +88 88 88 88 +8888 8888 8888 8888 +88 88 88 88 +88 88 888888 888888 + + 5 6 7 8 + +8888888888 88 88 8888888888 +88 88 88 88 88 88 88 88 +88 8888888888 8888888888 88 +.fi +.PP +jpegexiforient output the Exif Orientation Tag in a JPEG Exif file. +With the options -1 .. -8, it can also be used to set the tag. +. +.SS "OPTIONS" +.TP +\fB\-\-help\fR +display this help and exit +.TP +\fB\-\-version\fR +output version information and exit +.TP +\fB\-n\fR +Do not output the trailing newline +.TP +\fB\-1\fR .. \fB\-8\fR +Set orientation value 1 .. 8 +.SH "AUTHOR" + Guido Vollbeding +.SH "SEE ALSO" +.BR jpegtran(1) +.BR exifautotran(1) --- libjpeg7-7.orig/debian/extra/exifautotran +++ libjpeg7-7/debian/extra/exifautotran @@ -0,0 +1,50 @@ +#!/bin/sh +# exifautotran [list of files] +# +# Transforms Exif files so that Orientation becomes 1 +# + +trap "if test -n \"\$tempfile\"; then rm -f \"\$tempfile\"; fi" INT QUIT TERM + +for i +do + case $i in + -v|--version) echo "exifautotran"; exit 0;; + -h|--help) + cat <&2 + exit 1; + fi + echo Executing: jpegtran -copy all $transform $i >&2 + jpegtran -copy all $transform "$i" > $tempfile + if test $? -ne 0; then + echo Error while transforming $i - skipped. >&2 + rm "$tempfile" + else + cp "$tempfile" "$i" + rm "$tempfile" + jpegexiforient -1 "$i" > /dev/null + fi + fi +done --- libjpeg7-7.orig/debian/extra/Makefile +++ libjpeg7-7/debian/extra/Makefile @@ -0,0 +1,22 @@ +CFLAGS = -O2 -Wall -g +CC = cc +INSTALL = install -m755 -o root -g root +INSTALLDIR = install -m755 -o root -g root -d +DESTDIR = +prefix = /usr/local +bindir = $(prefix)/bin +mandir = $(prefix)/share/man/man1 + +all: jpegexiforient + +jpegexiforient: jpegexiforient.c + $(CC) $(CFLAGS) -o jpegexiforient jpegexiforient.c +clean: + -rm -f jpegexiforient +install: + $(INSTALLDIR) $(DESTDIR)$(bindir) + $(INSTALLDIR) $(DESTDIR)$(mandir) + $(INSTALL) jpegexiforient $(DESTDIR)$(bindir) + $(INSTALL) jpegexiforient.1 $(DESTDIR)$(mandir) + $(INSTALL) exifautotran $(DESTDIR)$(bindir) + $(INSTALL) exifautotran.1 $(DESTDIR)$(mandir)