Skip to content

Commit

Permalink
graphics/camlimages: Fix tiff-4.0 regression
Browse files Browse the repository at this point in the history
When tiff was upgraded to 4.0, camlimages stopped building.  Both
caml and tiff redefine several common typedefs such as uint32.  Unlike
the 3-series of tiff, tiff-4.0 also redefined int64 and uint64.  The
existing hack didn't foresee int64 and uint64 getting used, and so
camlimages broke.

One patch was created and another revised to override the caml typedef
definitions with macros before tiff.h is included.  The original
tiffread.c patch was reworked to override uint16 and uint32 *again*
after the tiff.h include and not before as it was originally.  Very ugly
all around, but I just extended what camlimages was already doing.
  • Loading branch information
marino committed Jul 29, 2012
1 parent 743fe1e commit 6934ead
Show file tree
Hide file tree
Showing 4 changed files with 59 additions and 10 deletions.
4 changes: 2 additions & 2 deletions graphics/camlimages/Makefile
@@ -1,8 +1,8 @@
# $NetBSD: Makefile,v 1.43 2012/07/15 08:22:49 wiz Exp $
# $NetBSD: Makefile,v 1.44 2012/07/29 12:52:55 marino Exp $

VERSION= 4.0.1
PKGNAME= camlimages-${VERSION}
PKGREVISION= 10
PKGREVISION= 11
CATEGORIES= graphics
MASTER_SITES= https://bitbucket.org/camlspotter/camlimages/get/
DISTNAME= v${VERSION}
Expand Down
5 changes: 3 additions & 2 deletions graphics/camlimages/distinfo
@@ -1,9 +1,10 @@
$NetBSD: distinfo,v 1.8 2011/08/07 20:36:20 wiz Exp $
$NetBSD: distinfo,v 1.9 2012/07/29 12:52:55 marino Exp $

SHA1 (camlimages-4.0.1/v4.0.1.tar.gz) = 4c1eee28f02749f53ed8345b448ce11375ce6dce
RMD160 (camlimages-4.0.1/v4.0.1.tar.gz) = 6ae0f4c2ad3f0a8d7f4d84109d413e0b4bc1a86b
Size (camlimages-4.0.1/v4.0.1.tar.gz) = 2190252 bytes
SHA1 (patch-OMakefile) = de4f35f576b4a5a6de477b0f50cc6e5d4cfbe24c
SHA1 (patch-src_pngread.c) = 00d753b8570b5ff9ffa71e6e62328496b03f9654
SHA1 (patch-src_pngwrite.c) = 4df4f69851769e0eefc2249a30ac8dd53aa8d755
SHA1 (patch-src_tiffread.c) = 319411cb6454ce276f540e260e4054054a60c700
SHA1 (patch-src_tiffread.c) = 4dab0fe8da42fe7d0720d5edddf45743c7fa41fd
SHA1 (patch-src_tiffwrite.c) = e1acae308004b22a7d46c694cd0a387bd8bf6546
32 changes: 26 additions & 6 deletions graphics/camlimages/patches/patch-src_tiffread.c
@@ -1,13 +1,33 @@
$NetBSD: patch-src_tiffread.c,v 1.1 2011/08/07 20:36:20 wiz Exp $
$NetBSD: patch-src_tiffread.c,v 1.2 2012/07/29 12:52:55 marino Exp $

--- src/tiffread.c.orig 2011-01-25 14:10:44.000000000 +0000
+++ src/tiffread.c 2011-04-17 13:37:39.000000000 +0000
@@ -28,6 +28,8 @@
Both ocaml/caml/config.h and tiff.h define int32, uint32, etc.
The workaround of this name polution is to intentionally overwrite the
first caml definition with a garbage macro before tiff.h is included and
then unset it after the include. After tiff version 4.0.1, the same hack
has to be applied to 64-bit types. Unlike tiffwrite.c, tiffread.c forgot
to unset the bogus definitions. The uint16 and uint32 then has to be
redefined correctly. (ugly hack)

--- src/tiffread.c.orig 2011-06-22 18:04:32.000000000 +0000
+++ src/tiffread.c
@@ -28,9 +28,20 @@
#define uint16 uint16tiff
#define int32 int32tiff
#define uint32 uint32tiff
+#define uint16 uint16_t
+#define uint32 uint32_t
+#define int64 int64tiff
+#define uint64 uint64tiff

#include <tiffio.h>

+#undef int16
+#undef uint16
+#undef int32
+#undef uint32
+#undef int64
+#undef uint64
+#define uint16 uint16_t
+#define uint32 uint32_t
+
extern value *imglib_error;

value open_tiff_file_for_read( name )
28 changes: 28 additions & 0 deletions graphics/camlimages/patches/patch-src_tiffwrite.c
@@ -0,0 +1,28 @@
$NetBSD: patch-src_tiffwrite.c,v 1.1 2012/07/29 12:52:55 marino Exp $

Both ocaml/caml/config.h and tiff.h define int32, uint32, etc.
The workaround of this name polution is to intentionally overwrite the
first caml definition with a garbage macro before tiff.h is included and
then unset it after the include. After tiff version 4.0.1, the same hack
has to be applied to 64-bit types

--- src/tiffwrite.c.orig 2011-06-22 18:04:32.000000000 +0000
+++ src/tiffwrite.c
@@ -25,6 +25,8 @@
#define uint16 uint16tiff
#define int32 int32tiff
#define uint32 uint32tiff
+#define int64 int64tiff
+#define uint64 uint64tiff

#include <tiffio.h>

@@ -32,6 +34,8 @@
#undef uint16
#undef int32
#undef uint32
+#undef int64
+#undef uint64

extern value *imglib_error;

0 comments on commit 6934ead

Please sign in to comment.