Bug#689642: nvidia-texture-tools: fails to build against libtiff5 due to clash of wills over int64/uint64
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
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