Bug#689642: nvidia-texture-tools: fails to build against libtiff5 due to clash of wills over int64/uint64

2012-10-04 Thread Lennart Weller
I already updated the package[1] a while back to fix this issue as
br...@canonical.com alerted me to this issue with their build-servers.
I haven't pressured my sponsor enough yet to get it uploaded. Will do
that today. Sorry for that.


[1]
http://anonscm.debian.org/gitweb/?p=collab-maint/nvidia-texture-tools.git;a=commit;h=18176bf0d166edcc0fb22bcb6dc0219e28383f10

Am 04.10.2012 19:11, schrieb Colin Watson:
> Package: nvidia-texture-tools
> Version: 2.0.8-1+dfsg-2
> Severity: important
> Tags: patch
> User: ubuntu-de...@lists.ubuntu.com
> Usertags: origin-ubuntu ubuntu-patch quantal
> 
> When built against libtiff5 (as will be the default for libtiff-dev in
> Ubuntu 12.10, and I believe in Debian jessie), nvidia-texture-tools
> fails to build on amd64 as follows:
> 
>   [ 36%] Building CXX object src/nvimage/CMakeFiles/nvimage.dir/ImageIO.cpp.o
>   In file included from /usr/include/tiffio.h:33:0,
>from 
> /build/buildd/nvidia-texture-tools-2.0.8-1+dfsg/src/nvimage/ImageIO.cpp:31:
>   /usr/include/tiff.h:77:23: error: conflicting declaration 'typedef long int 
> int64'
>   In file included from 
> /build/buildd/nvidia-texture-tools-2.0.8-1+dfsg/src/nvcore/nvcore.h:163:0,
>from 
> /build/buildd/nvidia-texture-tools-2.0.8-1+dfsg/src/nvcore/Ptr.h:6,
>from 
> /build/buildd/nvidia-texture-tools-2.0.8-1+dfsg/src/nvimage/ImageIO.cpp:3:
>   
> /build/buildd/nvidia-texture-tools-2.0.8-1+dfsg/src/nvcore/DefsGnucLinux.h:62:29:
>  error: 'int64' has a previous declaration as 'typedef long long int int64'
>   In file included from /usr/include/tiffio.h:33:0,
>from 
> /build/buildd/nvidia-texture-tools-2.0.8-1+dfsg/src/nvimage/ImageIO.cpp:31:
>   /usr/include/tiff.h:78:23: error: conflicting declaration 'typedef long 
> unsigned int uint64'
>   In file included from 
> /build/buildd/nvidia-texture-tools-2.0.8-1+dfsg/src/nvcore/nvcore.h:163:0,
>from 
> /build/buildd/nvidia-texture-tools-2.0.8-1+dfsg/src/nvcore/Ptr.h:6,
>from 
> /build/buildd/nvidia-texture-tools-2.0.8-1+dfsg/src/nvimage/ImageIO.cpp:3:
>   
> /build/buildd/nvidia-texture-tools-2.0.8-1+dfsg/src/nvcore/DefsGnucLinux.h:61:29:
>  error: 'uint64' has a previous declaration as 'typedef long long unsigned 
> int uint64'
>   /build/buildd/nvidia-texture-tools-2.0.8-1+dfsg/src/nvimage/ImageIO.cpp: In 
> function 'nv::FloatImage* nv::ImageIO::loadFloat(const char*)':
>   
> /build/buildd/nvidia-texture-tools-2.0.8-1+dfsg/src/nvimage/ImageIO.cpp:138:10:
>  warning: converting 'false' to pointer type 'nv::FloatImage*' 
> [-Wconversion-null]
>   /build/buildd/nvidia-texture-tools-2.0.8-1+dfsg/src/nvimage/ImageIO.cpp: In 
> function 'nv::Image* nv::ImageIO::loadTGA(nv::Stream&)':
>   
> /build/buildd/nvidia-texture-tools-2.0.8-1+dfsg/src/nvimage/ImageIO.cpp:236:12:
>  warning: converting 'false' to pointer type 'nv::Image*' [-Wconversion-null]
>   
> /build/buildd/nvidia-texture-tools-2.0.8-1+dfsg/src/nvimage/ImageIO.cpp:257:11:
>  warning: converting 'false' to pointer type 'nv::Image*' [-Wconversion-null]
>   /build/buildd/nvidia-texture-tools-2.0.8-1+dfsg/src/nvimage/ImageIO.cpp: In 
> function 'nv::Image* nv::ImageIO::loadPNG(nv::Stream&)':
>   
> /build/buildd/nvidia-texture-tools-2.0.8-1+dfsg/src/nvimage/ImageIO.cpp:624:10:
>  warning: converting 'false' to pointer type 'nv::Image*' [-Wconversion-null]
>   
> /build/buildd/nvidia-texture-tools-2.0.8-1+dfsg/src/nvimage/ImageIO.cpp:632:10:
>  warning: converting 'false' to pointer type 'nv::Image*' [-Wconversion-null]
>   
> /build/buildd/nvidia-texture-tools-2.0.8-1+dfsg/src/nvimage/ImageIO.cpp:639:10:
>  warning: converting 'false' to pointer type 'nv::Image*' [-Wconversion-null]
>   make[3]: *** [src/nvimage/CMakeFiles/nvimage.dir/ImageIO.cpp.o] Error 1
> 
> This is because tiff 4.x exposes its own idea of int64 and uint64
> typedefs in , and this means that the ones in
> nvidia-texture-tools have to match.
> 
> I trust my complaint in the following patch about typedeffing common
> non-namespaced identifiers speaks for itself, although I realise it
> should also go to the tiff maintainers!
> 
>   * Avoid int64/uint64 typedef clash with .
> 
> diff -Nru 
> nvidia-texture-tools-2.0.8-1+dfsg/debian/patches/int64-typedef-madness.patch 
> nvidia-texture-tools-2.0.8-1+dfsg/debian/patches/int64-typedef-madness.patch
> --- 
> nvidia-texture-tools-2.0.8-1+dfsg/debian/patches/int64-typedef-madness.patch  
> 1970-01-01 01:00:00.0 +0100
> +++ 
> nvidia-texture-tools-2.0.8-1+dfsg/debian/patches/int64-typedef-madness.patch  
> 2012-10-04 17:53:36.0 +0100
> @@ -0,0 +1,30 @@
> +Description: Avoid int64/uint64 typedef clash with 
> + Both nvidia-texture-toolkit and tiff attempt to define their own int64 and
> + uint64 types.  As of libtiff 4.x, these are exported in , and so we
> + have to make some attempt to get them to match.
> + .
> + Need I point out how terrible an idea it is to t

Bug#689642: nvidia-texture-tools: fails to build against libtiff5 due to clash of wills over int64/uint64

2012-10-04 Thread Colin Watson
Package: nvidia-texture-tools
Version: 2.0.8-1+dfsg-2
Severity: important
Tags: patch
User: ubuntu-de...@lists.ubuntu.com
Usertags: origin-ubuntu ubuntu-patch quantal

When built against libtiff5 (as will be the default for libtiff-dev in
Ubuntu 12.10, and I believe in Debian jessie), nvidia-texture-tools
fails to build on amd64 as follows:

  [ 36%] Building CXX object src/nvimage/CMakeFiles/nvimage.dir/ImageIO.cpp.o
  In file included from /usr/include/tiffio.h:33:0,
   from 
/build/buildd/nvidia-texture-tools-2.0.8-1+dfsg/src/nvimage/ImageIO.cpp:31:
  /usr/include/tiff.h:77:23: error: conflicting declaration 'typedef long int 
int64'
  In file included from 
/build/buildd/nvidia-texture-tools-2.0.8-1+dfsg/src/nvcore/nvcore.h:163:0,
   from 
/build/buildd/nvidia-texture-tools-2.0.8-1+dfsg/src/nvcore/Ptr.h:6,
   from 
/build/buildd/nvidia-texture-tools-2.0.8-1+dfsg/src/nvimage/ImageIO.cpp:3:
  
/build/buildd/nvidia-texture-tools-2.0.8-1+dfsg/src/nvcore/DefsGnucLinux.h:62:29:
 error: 'int64' has a previous declaration as 'typedef long long int int64'
  In file included from /usr/include/tiffio.h:33:0,
   from 
/build/buildd/nvidia-texture-tools-2.0.8-1+dfsg/src/nvimage/ImageIO.cpp:31:
  /usr/include/tiff.h:78:23: error: conflicting declaration 'typedef long 
unsigned int uint64'
  In file included from 
/build/buildd/nvidia-texture-tools-2.0.8-1+dfsg/src/nvcore/nvcore.h:163:0,
   from 
/build/buildd/nvidia-texture-tools-2.0.8-1+dfsg/src/nvcore/Ptr.h:6,
   from 
/build/buildd/nvidia-texture-tools-2.0.8-1+dfsg/src/nvimage/ImageIO.cpp:3:
  
/build/buildd/nvidia-texture-tools-2.0.8-1+dfsg/src/nvcore/DefsGnucLinux.h:61:29:
 error: 'uint64' has a previous declaration as 'typedef long long unsigned int 
uint64'
  /build/buildd/nvidia-texture-tools-2.0.8-1+dfsg/src/nvimage/ImageIO.cpp: In 
function 'nv::FloatImage* nv::ImageIO::loadFloat(const char*)':
  
/build/buildd/nvidia-texture-tools-2.0.8-1+dfsg/src/nvimage/ImageIO.cpp:138:10: 
warning: converting 'false' to pointer type 'nv::FloatImage*' 
[-Wconversion-null]
  /build/buildd/nvidia-texture-tools-2.0.8-1+dfsg/src/nvimage/ImageIO.cpp: In 
function 'nv::Image* nv::ImageIO::loadTGA(nv::Stream&)':
  
/build/buildd/nvidia-texture-tools-2.0.8-1+dfsg/src/nvimage/ImageIO.cpp:236:12: 
warning: converting 'false' to pointer type 'nv::Image*' [-Wconversion-null]
  
/build/buildd/nvidia-texture-tools-2.0.8-1+dfsg/src/nvimage/ImageIO.cpp:257:11: 
warning: converting 'false' to pointer type 'nv::Image*' [-Wconversion-null]
  /build/buildd/nvidia-texture-tools-2.0.8-1+dfsg/src/nvimage/ImageIO.cpp: In 
function 'nv::Image* nv::ImageIO::loadPNG(nv::Stream&)':
  
/build/buildd/nvidia-texture-tools-2.0.8-1+dfsg/src/nvimage/ImageIO.cpp:624:10: 
warning: converting 'false' to pointer type 'nv::Image*' [-Wconversion-null]
  
/build/buildd/nvidia-texture-tools-2.0.8-1+dfsg/src/nvimage/ImageIO.cpp:632:10: 
warning: converting 'false' to pointer type 'nv::Image*' [-Wconversion-null]
  
/build/buildd/nvidia-texture-tools-2.0.8-1+dfsg/src/nvimage/ImageIO.cpp:639:10: 
warning: converting 'false' to pointer type 'nv::Image*' [-Wconversion-null]
  make[3]: *** [src/nvimage/CMakeFiles/nvimage.dir/ImageIO.cpp.o] Error 1

This is because tiff 4.x exposes its own idea of int64 and uint64
typedefs in , and this means that the ones in
nvidia-texture-tools have to match.

I trust my complaint in the following patch about typedeffing common
non-namespaced identifiers speaks for itself, although I realise it
should also go to the tiff maintainers!

  * Avoid int64/uint64 typedef clash with .

diff -Nru 
nvidia-texture-tools-2.0.8-1+dfsg/debian/patches/int64-typedef-madness.patch 
nvidia-texture-tools-2.0.8-1+dfsg/debian/patches/int64-typedef-madness.patch
--- 
nvidia-texture-tools-2.0.8-1+dfsg/debian/patches/int64-typedef-madness.patch
1970-01-01 01:00:00.0 +0100
+++ 
nvidia-texture-tools-2.0.8-1+dfsg/debian/patches/int64-typedef-madness.patch
2012-10-04 17:53:36.0 +0100
@@ -0,0 +1,30 @@
+Description: Avoid int64/uint64 typedef clash with 
+ Both nvidia-texture-toolkit and tiff attempt to define their own int64 and
+ uint64 types.  As of libtiff 4.x, these are exported in , and so we
+ have to make some attempt to get them to match.
+ .
+ Need I point out how terrible an idea it is to typedef standard-looking
+ names, rather than using your own namespace?
+Author: Colin Watson 
+Forwarded: no
+Last-Update: 2012-10-04
+
+Index: b/src/nvcore/DefsGnucLinux.h
+===
+--- a/src/nvcore/DefsGnucLinux.h
 b/src/nvcore/DefsGnucLinux.h
+@@ -58,8 +58,14 @@
+ typedef unsigned intuint32;
+ typedef signed int  int32;
+ 
++#ifdef __LP64__
++// Avoid clash with libtiff
++typedef unsigned long   uint64;
++typedef signed long int64;
++#else
+ typedef unsigned long long  uint64;
+ typedef signed lo