Thanks Colin, fixes now merged and submitted to SVN.
On Jan 8, 2008 3:15 PM, Colin McDonald <[EMAIL PROTECTED]> wrote: > Hi Robert, > > Here are fixes for some SVN build problems on Solaris: > > include/osgDB/DatabasePager wouldn't compile with the default Solaris > C++ library, because unfortunately that library doesn't contain the > standard form of std::count_if. It includes a non-standard form, > apparently for binary backwards-compatability. So I have modified > DatabasePager to avoid use of count_if. This is a bit clearer anyway, > and is possibly slightly more efficient as the iterations can be > short-circuited as soon as an uncompiled graphics context is found. > > src/osg/Geometry.cpp and src/osgUtil/Tessellator.cpp both contained > functions with the name _computeNumberOfPrimitives, resulting in a > duplicate symbol error on link. I have made them static. > > src/osgPlugins/Inventor/ConvertToInventor.cpp included template > declarations for static functions, which the Solaris compiler doesn't > accept. The compiler documentation claims that "When looking up > template names, the C++ standard says that only names with external > linkage are found", and that "compilers which allow names with internal > static linkage to be found, do so as an extension to the standard, or as > a bug". There doesn't appear to be any other usage of static template > functions in osg, so I have removed the static declarations, prefixing > some of the names to reduce the chance of a name clash. > > Doing a static build of the osg libraries and osgviewer, the windowing > system registration wasn't working at all, even with the > USE_GRAPHICSWINDOW() declaration from osgstaticviewer. After much > investigation this turned out to be a problem with use of the static > ref_ptr to hold the WindowingSystemInterface in > src/osg/GraphicsContext.cpp. The order of invocation of the static > ref_ptr constructor is undefined, and on Solaris it was happening around > about when the program main() was invoked, after the > USE_GRAPHICSWINDOW() registration. So the reference created to a valid > WindowingSystemInterface was lost. Perhaps this could be a potential > problem with static builds on other platforms as well. Wrapping the > static ref_ptr in a function controls the order in which the constructor > is executed. This is similar to the Registry::instance() ref_ptr, which > has always worked OK. > > Using environment variable FREETYPE_DIR to locate Freetype was not > working, due to a missing directive in CMakeModules/FindFreeType.cmake. > > Regards > > Colin McDonald > > > _______________________________________________ > osg-submissions mailing list > [email protected] > http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org > > _______________________________________________ osg-submissions mailing list [email protected] http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org
