I seem to have an odd build issue that has me stumped.
Building on FreeBSD 9.3 both amd64 and i386 using both clang and gcc works.
Building on 10.2 amd64 using clang works.
Building on 10.2 i386 using clang fails.
clang 3.4.1 is the base compiler on 10.2
What I have found is that SHA1.h contains -
#ifndef UINT_32
#ifdef _MSC_VER // Compiling with Microsoft compiler
#define UINT_32 unsigned __int32
#else // !_MSC_VER
#if (ULONG_MAX == 0xFFFFFFFF)
#define UINT_32 unsigned long
#else
#define UINT_32 unsigned int
#endif
#endif // _MSC_VER
#endif // UINT_32
When building on 10.2 i386 - different files get different definitions
of UINT_32 which leads to an issue. Both systems use identical
_limits.h which defines ULONG_MAX as __ULONG_MAX which comes from -
#ifdef __LP64__
#define __ULONG_MAX 0xffffffffffffffff /* max for an unsigned
long */
#define __LONG_MAX 0x7fffffffffffffff /* max for a long */
#define __LONG_MIN (-0x7fffffffffffffff - 1) /* min for a long */
#else
#define __ULONG_MAX 0xffffffffUL
#define __LONG_MAX 0x7fffffffL
#define __LONG_MIN (-0x7fffffffL - 1)
#endif
This all leads to libOpenImageIO getting two versions of SHA1::Update
strings build/src/libOpenImageIO/libOpenImageIO.so | grep CSHA | grep Update
_ZN11OpenImageIO4v1_65CSHA16UpdateEPKhm
_ZN11OpenImageIO4v1_65CSHA16UpdateEPKhj
One appears to come from libutil/strutil.cpp the other from
libOpenImageIO/imagebufalgo_compare.cpp as the make commands are the
same up to the source and output values I don't get how they come out
different.
While libOpenImageIO builds, binaries linking to it fail with -
/usr/bin/make -f
src/libOpenImageIO/CMakeFiles/imagebufalgo_test.dir/build.make
src/libOpenImageIO/CMakeFiles/imagebufalgo_test.dir/build
--- src/libOpenImageIO/CMakeFiles/imagespec_test.dir/all ---
libOpenImageIO.so.1.6.9: undefined reference to
`OpenImageIO::v1_6::CSHA1::Update(unsigned char const*, unsigned long)'
c++: error: linker command failed with exit code 1 (use -v to see
invocation)
--- src/libOpenImageIO/CMakeFiles/imagebuf_test.dir/all ---
libOpenImageIO.so.1.6.9: undefined reference to
`OpenImageIO::v1_6::CSHA1::Update(unsigned char const*, unsigned long)'
c++: error: linker command failed with exit code 1 (use -v to see
invocation)
--- src/libOpenImageIO/CMakeFiles/imagecache_test.dir/all ---
libOpenImageIO.so.1.6.9: undefined reference to
`OpenImageIO::v1_6::CSHA1::Update(unsigned char const*, unsigned long)'
--- src/libOpenImageIO/CMakeFiles/imagebuf_test.dir/all ---
While I can force SHA1.h to set UINT_32 to always use the same
definition and it builds, it seems odd that it can't agree, and I
expect that if I choose one then other apps linking to it will choose
the other.
By adding a couple of #warnings in SHA1.h I get the following during
libOpenImageIO build -
grep -C5 "####" oiio.build
cd /wrkdirs/usr/ports/graphics/openimageio/work/.build/src/libutil &&
/usr/local/libexec/ccache/c++ -DOpenImageIO_Util_EXPORTS
-DUSE_FREETYPE -DUSE_OCIO=1 -DUSE_OPENCV -DUSE_OPENEXR_VERSION2=1
-D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS -isystem
/usr/local/include -I/usr/local/include/OpenEXR
-I/usr/local/include/libraw
-I/wrkdirs/usr/ports/graphics/openimageio/work/oiio-Release-1.6.9/src/include
-I/wrkdirs/usr/ports/graphics/openimageio/work/.build/include/OpenImageIO -O2
-pipe -fstack-protector -fno-strict-aliasing -march=i586 -O2 -pipe
-fstack-protector -fno-strict-aliasing -fPIC -Wall -fno-math-errno
-Wno-unused-function -Wno-overloaded-virtual
-Wno-unneeded-internal-declaration -Wno-unused-private-field
-Wno-tautological-compare -Qunused-arguments -Wunknown-warning-option
-UUSE_FIELD3D -o CMakeFiles/OpenImageIO_Util.dir/SHA1.cpp.o -c
/wrkdirs/usr/ports/graphics/openimageio/work/oiio-Release-1.6.9/src/libutil/SHA1.cpp
--- src/libutil/CMakeFiles/OpenImageIO_Util.dir/strutil.cpp.o ---
cd /wrkdirs/usr/ports/graphics/openimageio/work/.build/src/libutil &&
/usr/local/libexec/ccache/c++ -DOpenImageIO_Util_EXPORTS
-DUSE_FREETYPE -DUSE_OCIO=1 -DUSE_OPENCV -DUSE_OPENEXR_VERSION2=1
-D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS -isystem
/usr/local/include -I/usr/local/include/OpenEXR
-I/usr/local/include/libraw
-I/wrkdirs/usr/ports/graphics/openimageio/work/oiio-Release-1.6.9/src/include
-I/wrkdirs/usr/ports/graphics/openimageio/work/.build/include/OpenImageIO -O2
-pipe -fstack-protector -fno-strict-aliasing -march=i586 -O2 -pipe
-fstack-protector -fno-strict-aliasing -fPIC -Wall -fno-math-errno
-Wno-unused-function -Wno-overloaded-virtual
-Wno-unneeded-internal-declaration -Wno-unused-private-field
-Wno-tautological-compare -Qunused-arguments -Wunknown-warning-option
-UUSE_FIELD3D -o CMakeFiles/OpenImageIO_Util.dir/strutil.cpp.o -c
/wrkdirs/usr/ports/graphics/openimageio/work/oiio-Release-1.6.9/src/libutil/strutil.cpp
--- src/libutil/CMakeFiles/OpenImageIO_Util.dir/SHA1.cpp.o ---
In file included from
/wrkdirs/usr/ports/graphics/openimageio/work/oiio-Release-1.6.9/src/libutil/SHA1.cpp:11:
/wrkdirs/usr/ports/graphics/openimageio/work/oiio-Release-1.6.9/src/include/OpenImageIO/SHA1.h:171:2:
warning: ######## using UINT_32 as int [-W#warnings]
#warning ######## using UINT_32 as int
^
1 warning generated.
--- src/libutil/CMakeFiles/OpenImageIO_Util.dir/sysutil.cpp.o ---
[ 5%] Building CXX object
src/libutil/CMakeFiles/OpenImageIO_Util.dir/sysutil.cpp.o
cd /wrkdirs/usr/ports/graphics/openimageio/work/.build/src/libutil &&
/usr/local/libexec/ccache/c++ -DOpenImageIO_Util_EXPORTS
-DUSE_FREETYPE -DUSE_OCIO=1 -DUSE_OPENCV -DUSE_OPENEXR_VERSION2=1
-D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS -isystem
/usr/local/include -I/usr/local/include/OpenEXR
-I/usr/local/include/libraw
-I/wrkdirs/usr/ports/graphics/openimageio/work/oiio-Release-1.6.9/src/include
-I/wrkdirs/usr/ports/graphics/openimageio/work/.build/include/OpenImageIO -O2
-pipe -fstack-protector -fno-strict-aliasing -march=i586 -O2 -pipe
-fstack-protector -fno-strict-aliasing -fPIC -Wall -fno-math-errno
-Wno-unused-function -Wno-overloaded-virtual
-Wno-unneeded-internal-declaration -Wno-unused-private-field
-Wno-tautological-compare -Qunused-arguments -Wunknown-warning-option
-UUSE_FIELD3D -o CMakeFiles/OpenImageIO_Util.dir/sysutil.cpp.o -c
/wrkdirs/usr/ports/graphics/openimageio/work/oiio-Release-1.6.9/src/libutil/sysutil.cpp
--
[ 25%] Building CXX object
src/libOpenImageIO/CMakeFiles/OpenImageIO.dir/imagebufalgo_deep.cpp.o
cd
/wrkdirs/usr/ports/graphics/openimageio/work/.build/src/libOpenImageIO
&& /usr/local/libexec/ccache/c++ -DBOOST_TEST_DYN_LINK
-DEMBED_PLUGINS=1 -DOpenImageIO_EXPORTS -DPTEX_EXPORTS
-DUSE_BOOST_ASIO=1 -DUSE_FFMPEG -DUSE_FREETYPE -DUSE_GIF -DUSE_LIBRAW=1
-DUSE_OCIO=1 -DUSE_OPENCV -DUSE_OPENEXR_VERSION2=1 -DUSE_OPENJPEG
-DUSE_PTEX -DUSE_WEBP=1 -D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS
-isystem /usr/local/include -I/usr/local/include/OpenEXR
-I/usr/local/include/libraw
-I/wrkdirs/usr/ports/graphics/openimageio/work/oiio-Release-1.6.9/src/include
-I/wrkdirs/usr/ports/graphics/openimageio/work/.build/include/OpenImageIO -I/wrkdirs/usr/ports/graphics/openimageio/work/.build/src/libOpenImageIO
-I/usr/local/include/freetype2 -I/usr/local/include/freetype2/freetype2
-I/usr/local/include/freetype2/freetype2/freetype -O2 -pipe
-fstack-protector -fno-strict-aliasing -march=i586 -O2 -pipe
-fstack-protector -fno-strict-aliasing -fPIC -Wall -fno-math-errno
-Wno-unused-function -Wno-overloaded-virtual
-Wno-unneeded-internal-declaration -Wno-unused-private-field
-Wno-tautological-compare -Qunused-arguments -Wunknown-warning-option
-UUSE_FIELD3D -o CMakeFiles/OpenImageIO.dir/imagebufalgo_deep.cpp.o -c
/wrkdirs/usr/ports/graphics/openimageio/work/oiio-Release-1.6.9/src/libOpenImageIO/imagebufalgo_deep.cpp
---
src/libOpenImageIO/CMakeFiles/OpenImageIO.dir/imagebufalgo_draw.cpp.o ---
---
src/libOpenImageIO/CMakeFiles/OpenImageIO.dir/imagebufalgo_compare.cpp.o ---
In file included from
/wrkdirs/usr/ports/graphics/openimageio/work/oiio-Release-1.6.9/src/libOpenImageIO/imagebufalgo_compare.cpp:45:
/wrkdirs/usr/ports/graphics/openimageio/work/oiio-Release-1.6.9/src/include/OpenImageIO/SHA1.h:168:2:
warning: ######## using UINT_32 as long [-W#warnings]
#warning ######## using UINT_32 as long
^
1 warning generated.
---
src/libOpenImageIO/CMakeFiles/OpenImageIO.dir/imagebufalgo_draw.cpp.o ---
[ 26%] Building CXX object
src/libOpenImageIO/CMakeFiles/OpenImageIO.dir/imagebufalgo_draw.cpp.o
---
src/libOpenImageIO/CMakeFiles/OpenImageIO.dir/imagebufalgo_pixelmath.cpp.o
---
--
---
src/libOpenImageIO/CMakeFiles/OpenImageIO.dir/__/libutil/strutil.cpp.o ---
[ 33%] Building CXX object
src/libOpenImageIO/CMakeFiles/OpenImageIO.dir/__/libutil/strutil.cpp.o
cd
/wrkdirs/usr/ports/graphics/openimageio/work/.build/src/libOpenImageIO
&& /usr/local/libexec/ccache/c++ -DBOOST_TEST_DYN_LINK
-DEMBED_PLUGINS=1 -DOpenImageIO_EXPORTS -DPTEX_EXPORTS
-DUSE_BOOST_ASIO=1 -DUSE_FFMPEG -DUSE_FREETYPE -DUSE_GIF -DUSE_LIBRAW=1
-DUSE_OCIO=1 -DUSE_OPENCV -DUSE_OPENEXR_VERSION2=1 -DUSE_OPENJPEG
-DUSE_PTEX -DUSE_WEBP=1 -D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS
-isystem /usr/local/include -I/usr/local/include/OpenEXR
-I/usr/local/include/libraw
-I/wrkdirs/usr/ports/graphics/openimageio/work/oiio-Release-1.6.9/src/include
-I/wrkdirs/usr/ports/graphics/openimageio/work/.build/include/OpenImageIO -I/wrkdirs/usr/ports/graphics/openimageio/work/.build/src/libOpenImageIO
-I/usr/local/include/freetype2 -I/usr/local/include/freetype2/freetype2
-I/usr/local/include/freetype2/freetype2/freetype -O2 -pipe
-fstack-protector -fno-strict-aliasing -march=i586 -O2 -pipe
-fstack-protector -fno-strict-aliasing -fPIC -Wall -fno-math-errno
-Wno-unused-function -Wno-overloaded-virtual
-Wno-unneeded-internal-declaration -Wno-unused-private-field
-Wno-tautological-compare -Qunused-arguments -Wunknown-warning-option
-UUSE_FIELD3D -o CMakeFiles/OpenImageIO.dir/__/libutil/strutil.cpp.o -c
/wrkdirs/usr/ports/graphics/openimageio/work/oiio-Release-1.6.9/src/libutil/strutil.cpp
--- src/libOpenImageIO/CMakeFiles/OpenImageIO.dir/__/libutil/SHA1.cpp.o ---
In file included from
/wrkdirs/usr/ports/graphics/openimageio/work/oiio-Release-1.6.9/src/libutil/SHA1.cpp:11:
/wrkdirs/usr/ports/graphics/openimageio/work/oiio-Release-1.6.9/src/include/OpenImageIO/SHA1.h:171:2:
warning: ######## using UINT_32 as int [-W#warnings]
#warning ######## using UINT_32 as int
^
1 warning generated.
--
FreeBSD - the place to B...Software Developing
Shane Ambler
_______________________________________________
Oiio-dev mailing list
[email protected]
http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org