From 23c7fd2f61805e51757d1953c946a2b15214c82c Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Wed, 10 Mar 2010 17:19:35 +0000 Subject: [PATCH] From David Fries,"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." --- CMakeLists.txt | 4 ++- CMakeModules/FindOSG.cmake | 4 +-- CMakeModules/OsgMacroUtils.cmake | 11 ++++--- src/osgDB/CMakeLists.txt | 18 +++++++++++ src/osgDB/Registry.cpp | 54 ++++++++------------------------ 5 files changed, 43 insertions(+), 48 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 94ddaaa0e..00f6ea1e2 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 0560645be..c82b51bae 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 a8a4d6821..f22958b54 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) @@ -267,8 +267,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 d363a0cae..8f304dd10 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 c034704ec..5f0dcad98 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 }