I would never extensively re-implement a feature to cater to i386, but if it's a matter of changing a line or two in order to avoid compiler warnings or build break on some platforms, I don't see why not (assuming that an obvious solution is apparent just by perusing the code at the point of the error, as was true in this case).
> On Jan 28, 2016, at 9:15 AM, Thiago Ize <[email protected]> wrote: > > Why would someone be running OIIO on an i386 system? Are there enough users > that honestly need this that it's worth the increased developer time and code > complexity to support? > > On Thu, Jan 28, 2016 at 1:35 AM, Shane Ambler <[email protected] > <mailto:[email protected]>> wrote: > 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] <mailto:[email protected]> > http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org > <http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org> > > _______________________________________________ > Oiio-dev mailing list > [email protected] > http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org -- Larry Gritz [email protected]
_______________________________________________ Oiio-dev mailing list [email protected] http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org
