Hi David, Great set of changes - adds build feature while at the same time simplifying source code :-)
I've just tested the full range of build options and all the appropriate apps and plugins all build and run correctly on my Linux box. Job well done! Changes now merged and submitted to svn/trunk. Cheers, Robert. On Mon, Mar 1, 2010 at 9:54 PM, David Fries <[email protected]> wrote: > We are needing to compile Debug, Release, and MinSizeWithDebInfo, but > currently only Debug appends "d" so the Release and MinSizeWithDebInfo > (and MinSizeRel) all produce the same filenames. This set of changes > lets each build type have a cmake defined string appended, defaulting > to Release none, Debug d, RelWithDebInfo rd, MinSizeRel s. But a user > still can have Release, RelWithDebInfo, and MinSizeRel to produce the > same filenames. It does so by setting the preprocessor define > OSG_LIBRARY_POSTFIX in src/osgDB/CMakeLists.txt to one of the > previously defined cmake variables CMAKE_DEBUG_POSTFIX > CMAKE_RELEASE_POSTFIX CMAKE_RELWITHDEBINFO_POSTFIX > CMAKE_MINSIZEREL_POSTFIX. This method cuts down on the #ifdef _DEBUG > #else preprocessor directives in Registry.cpp as the extension is > always passed in OSG_LIBRARY_POSTFIX. That and __MINGW32__ didn't > have the _DEBUG check which looks like a bug. > > -- > David Fries <[email protected]> > http://fries.net/~david/ <http://fries.net/%7Edavid/> (PGP encryption key > available) > > > diff --git a/CMakeLists.txt b/CMakeLists.txt > index e88e451..5039900 100644 > --- a/CMakeLists.txt > +++ b/CMakeLists.txt > @@ -508,7 +508,9 @@ ENDIF() > # Installation stuff > > SET(CMAKE_DEBUG_POSTFIX "d" CACHE STRING "add a postfix, usually d on > windows") > -ADD_DEFINITIONS(-DOSG_DEBUG_POSTFIX=${CMAKE_DEBUG_POSTFIX}) > +SET(CMAKE_RELEASE_POSTFIX "" CACHE STRING "add a postfix, usually empty on > windows") > +SET(CMAKE_RELWITHDEBINFO_POSTFIX "rd" CACHE STRING "add a postfix, usually > empty on windows") > +SET(CMAKE_MINSIZEREL_POSTFIX "s" CACHE STRING "add a postfix, usually > empty on windows") > > IF(UNIX AND NOT WIN32) > SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_DEBUG") > diff --git a/CMakeModules/FindOSG.cmake b/CMakeModules/FindOSG.cmake > index 0560645..c82b51b 100644 > --- a/CMakeModules/FindOSG.cmake > +++ b/CMakeModules/FindOSG.cmake > @@ -61,7 +61,7 @@ MACRO(FIND_OSG_LIBRARY MYLIBRARY MYLIBRARYNAME) > ) > > FIND_LIBRARY(${MYLIBRARY} > - NAMES ${MYLIBRARYNAME} > + NAMES "${MYLIBRARYNAME}${CMAKE_RELEASE_POSTFIX}" > PATHS > ${OSG_DIR}/lib/Release > ${OSG_DIR}/lib64/Release > @@ -81,7 +81,7 @@ MACRO(FIND_OSG_LIBRARY MYLIBRARY MYLIBRARYNAME) > ) > > FIND_LIBRARY(${MYLIBRARY} > - NAMES ${MYLIBRARYNAME} > + NAMES "${MYLIBRARYNAME}${CMAKE_RELEASE_POSTFIX}" > PATHS > ~/Library/Frameworks > /Library/Frameworks > diff --git a/CMakeModules/OsgMacroUtils.cmake > b/CMakeModules/OsgMacroUtils.cmake > index 77e3795..6cb4603 100644 > --- a/CMakeModules/OsgMacroUtils.cmake > +++ b/CMakeModules/OsgMacroUtils.cmake > @@ -4,7 +4,7 @@ > # full path of the library name. in order to differentiate release and > debug, this macro get the > # NAME of the variables, so the macro gets as arguments the target name > and the following list of parameters > # is intended as a list of variable names each one containing the path > of the libraries to link to > -# The existance of a varibale name with _DEBUG appended is tested and, in > case it' s value is used > +# The existance of a variable name with _DEBUG appended is tested and, in > case it' s value is used > # for linking to when in debug mode > # the content of this library for linking when in debugging > > > ####################################################################################################### > @@ -30,10 +30,10 @@ MACRO(LINK_INTERNAL TRGTNAME) > #CMake 2.4.7, at least seem to use PREFIX instead of > IMPORT_PREFIX for computing linkage info to use into projects, > # so we full path name to specify linkage, this prevent > automatic inferencing of dependencies, so we add explicit depemdencies > #to library targets used > - TARGET_LINK_LIBRARIES(${TRGTNAME} optimized > "${OUTPUT_LIBDIR}/${LINKLIB}.lib" debug > "${OUTPUT_LIBDIR}/${LINKLIB}${CMAKE_DEBUG_POSTFIX}.lib") > + TARGET_LINK_LIBRARIES(${TRGTNAME} optimized > "${OUTPUT_LIBDIR}/${LINKLIB}${CMAKE_RELEASE_POSTFIX}.lib" debug > "${OUTPUT_LIBDIR}/${LINKLIB}${CMAKE_DEBUG_POSTFIX}.lib") > ADD_DEPENDENCIES(${TRGTNAME} ${LINKLIB}) > ELSE(MSVC AND OSG_MSVC_VERSIONED_DLL) > - TARGET_LINK_LIBRARIES(${TRGTNAME} optimized "${LINKLIB}" > debug "${LINKLIB}${CMAKE_DEBUG_POSTFIX}") > + TARGET_LINK_LIBRARIES(${TRGTNAME} optimized > "${LINKLIB}${CMAKE_RELEASE_POSTFIX}" debug > "${LINKLIB}${CMAKE_DEBUG_POSTFIX}") > ENDIF(MSVC AND OSG_MSVC_VERSIONED_DLL) > ENDFOREACH(LINKLIB) > ENDIF(${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} GREATER > 4) > @@ -266,8 +266,11 @@ MACRO(SETUP_EXE IS_COMMANDLINE_APP) > ENDIF(${IS_COMMANDLINE_APP}) > > SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES PROJECT_LABEL > "${TARGET_LABEL}") > - SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES DEBUG_POSTFIX > "${CMAKE_DEBUG_POSTFIX}") > SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES OUTPUT_NAME > ${TARGET_NAME}) > + SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES > DEBUG_OUTPUT_NAME "${TARGET_NAME}${CMAKE_DEBUG_POSTFIX}") > + SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES > RELEASE_OUTPUT_NAME "${TARGET_NAME}${CMAKE_RELEASE_POSTFIX}") > + SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES > RELWITHDEBINFO_OUTPUT_NAME "${TARGET_NAME}${CMAKE_RELWITHDEBINFO_POSTFIX}") > + SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES > MINSIZEREL_OUTPUT_NAME "${TARGET_NAME}${CMAKE_MINSIZEREL_POSTFIX}") > > IF(MSVC_IDE AND OSG_MSVC_VERSIONED_DLL) > SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES PREFIX > "../") > diff --git a/src/osgDB/CMakeLists.txt b/src/osgDB/CMakeLists.txt > index d363a0c..8f304dd 100644 > --- a/src/osgDB/CMakeLists.txt > +++ b/src/osgDB/CMakeLists.txt > @@ -10,6 +10,24 @@ IF (DYNAMIC_OPENSCENEGRAPH) > > ADD_DEFINITIONS(-DOSG_DEFAULT_LIBRARY_PATH=${CMAKE_INSTALL_PREFIX}/lib${LIB_POSTFIX}/${OSG_PLUGINS}) > ENDIF() > > + # Set the library extension according to what configuration is being > built. > + # If the string is empty, don't set the define. > + IF(CMAKE_DEBUG_POSTFIX) > + SET(CMAKE_CXX_FLAGS_DEBUG > + "${CMAKE_CXX_FLAGS_DEBUG} > -DOSG_LIBRARY_POSTFIX=${CMAKE_DEBUG_POSTFIX}") > + ENDIF() > + IF(CMAKE_RELEASE_POSTFIX) > + SET(CMAKE_CXX_FLAGS_RELEASE > + "${CMAKE_CXX_FLAGS_RELEASE} > -DOSG_LIBRARY_POSTFIX=${CMAKE_RELEASE_POSTFIX}") > + ENDIF() > + IF(CMAKE_RELWITHDEBINFO_POSTFIX) > + SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO > + "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} > -DOSG_LIBRARY_POSTFIX=${CMAKE_RELWITHDEBINFO_POSTFIX}") > + ENDIF() > + IF(CMAKE_MINSIZEREL_POSTFIX) > + SET(CMAKE_CXX_FLAGS_MINSIZEREL > + "${CMAKE_CXX_FLAGS_MINSIZEREL} > -DOSG_LIBRARY_POSTFIX=${CMAKE_MINSIZEREL_POSTFIX}") > + ENDIF() > ELSE () > ADD_DEFINITIONS(-DOSG_LIBRARY_STATIC) > ENDIF() > diff --git a/src/osgDB/Registry.cpp b/src/osgDB/Registry.cpp > index c034704..5f0dcad 100644 > --- a/src/osgDB/Registry.cpp > +++ b/src/osgDB/Registry.cpp > @@ -43,10 +43,10 @@ > using std::tolower; > #endif > > -#ifdef OSG_DEBUG_POSTFIX > - #define OSG_DEBUG_POSTFIX_WITH_QUOTES ADDQUOTES(OSG_DEBUG_POSTFIX) > +#ifdef OSG_LIBRARY_POSTFIX > + #define OSG_LIBRARY_POSTFIX_WITH_QUOTES ADDQUOTES(OSG_LIBRARY_POSTFIX) > #else > - #define OSG_DEBUG_POSTFIX_WITH_QUOTES "d" > + #define OSG_LIBRARY_POSTFIX_WITH_QUOTES "" > #endif > > using namespace osg; > @@ -608,31 +608,15 @@ std::string > Registry::createLibraryNameForExtension(const std::string& ext) > #endif > > #if defined(__CYGWIN__) > - #ifdef _DEBUG > - return > prepend+"cygwin_"+"osgdb_"+lowercase_ext+OSG_DEBUG_POSTFIX_WITH_QUOTES+".dll"; > - #else > - return prepend+"cygwin_"+"osgdb_"+lowercase_ext+".dll"; > - #endif > + return > prepend+"cygwin_"+"osgdb_"+lowercase_ext+OSG_LIBRARY_POSTFIX_WITH_QUOTES+".dll"; > #elif defined(__MINGW32__) > - return prepend+"mingw_"+"osgdb_"+lowercase_ext+".dll"; > + return > prepend+"mingw_"+"osgdb_"+lowercase_ext+OSG_LIBRARY_POSTFIX_WITH_QUOTES+".dll"; > #elif defined(WIN32) > - #ifdef _DEBUG > - return prepend+"osgdb_"+lowercase_ext+ > OSG_DEBUG_POSTFIX_WITH_QUOTES +".dll"; > - #else > - return prepend+"osgdb_"+lowercase_ext+".dll"; > - #endif > + return > prepend+"osgdb_"+lowercase_ext+OSG_LIBRARY_POSTFIX_WITH_QUOTES+".dll"; > #elif macintosh > - #ifdef _DEBUG > - return prepend+"osgdb_"+lowercase_ext+ > OSG_DEBUG_POSTFIX_WITH_QUOTES; > - #else > - return prepend+"osgdb_"+lowercase_ext; > - #endif > + return prepend+"osgdb_"+lowercase_ext+OSG_LIBRARY_POSTFIX_WITH_QUOTES; > #else > - #ifdef _DEBUG > - return prepend+"osgdb_"+lowercase_ext+ > OSG_DEBUG_POSTFIX_WITH_QUOTES + ADDQUOTES(OSG_PLUGIN_EXTENSION); > - #else > - return > prepend+"osgdb_"+lowercase_ext+ADDQUOTES(OSG_PLUGIN_EXTENSION); > - #endif > + return > prepend+"osgdb_"+lowercase_ext+OSG_LIBRARY_POSTFIX_WITH_QUOTES+ADDQUOTES(OSG_PLUGIN_EXTENSION); > #endif > > } > @@ -640,27 +624,15 @@ std::string > Registry::createLibraryNameForExtension(const std::string& ext) > std::string Registry::createLibraryNameForNodeKit(const std::string& name) > { > #if defined(__CYGWIN__) > - return "cyg"+name+".dll"; > + return "cyg"+name+OSG_LIBRARY_POSTFIX_WITH_QUOTES+".dll"; > #elif defined(__MINGW32__) > - return "lib"+name+".dll"; > + return "lib"+name+OSG_LIBRARY_POSTFIX_WITH_QUOTES+".dll"; > #elif defined(WIN32) > - #ifdef _DEBUG > - return name+OSG_DEBUG_POSTFIX_WITH_QUOTES +".dll"; > - #else > - return name+".dll"; > - #endif > + return name+OSG_LIBRARY_POSTFIX_WITH_QUOTES+".dll"; > #elif macintosh > - #ifdef _DEBUG > - return name+OSGDEBUG_POSTFIX_WITH_QUOTES; > - #else > - return name; > - #endif > + return name+OSG_LIBRARY_POSTFIX_WITH_QUOTES; > #else > - #ifdef _DEBUG > - return "lib"+name+OSG_DEBUG_POSTFIX_WITH_QUOTES + > ADDQUOTES(OSG_PLUGIN_EXTENSION); > - #else > - return "lib"+name+ADDQUOTES(OSG_PLUGIN_EXTENSION); > - #endif > + return "lib"+name+OSG_LIBRARY_POSTFIX_WITH_QUOTES + > ADDQUOTES(OSG_PLUGIN_EXTENSION); > #endif > } > > > _______________________________________________ > 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
