From 28619821bc90ed4c15844b2e6b6a5a2971ef5f2e Mon Sep 17 00:00:00 2001 From: Matthias Vogelgesang Date: Mon, 21 Feb 2011 15:06:42 +0100 Subject: Initial commit --- cmake/SisoLibDir.cmake | 108 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 cmake/SisoLibDir.cmake (limited to 'cmake/SisoLibDir.cmake') diff --git a/cmake/SisoLibDir.cmake b/cmake/SisoLibDir.cmake new file mode 100644 index 0000000..371735e --- /dev/null +++ b/cmake/SisoLibDir.cmake @@ -0,0 +1,108 @@ +# This makro sets up additional library directories depending on the compiler. +# The reason behind this are the binary incompatible libraries generated by +# different compilers on Windows (e.g. Microsoft Visual Studio vs. Borland). +# +# Although newer versions of MSVC can operate with older libraries there may +# be libs compiled for a more recent version as MSVC6. Scan through all the +# possible directories for the matching lib. +# +# This makro expects the /lib directory (usually $ENV{SISODIRsomething}) as +# argument BASEDIR and will append a list of all valid library paths to +# variable LIB_DIRS. This may or may not include BASE_DIR depending on the +# platform. If BASEDIR is empty or is just "/lib" nothing will happen to +# LIB_DIRS. +# +# An optional variable name may be passed as third argument. If that argument +# is given the best matching suffix will be stored in that variable (e.g. +# "visualc2008" if you are using MSVC9). This will even work if LIB_DIRS would +# not be touched. + +MACRO (SISO_LIB_DIR BASE_DIR LIB_DIRS) + IF (WIN32) + IF (CMAKE_GENERATOR STREQUAL "Borland Makefiles") + IF ("${BASE_DIR}" AND NOT "${BASE_DIR}" STREQUAL "/lib") + LIST(APPEND ${LIB_DIRS} "borland") + ENDIF ("${BASE_DIR}" AND NOT "${BASE_DIR}" STREQUAL "/lib") + IF (${ARGC} EQUAL 3) + set(${ARGV2} "borland") + ENDIF (${ARGC} EQUAL 3) + ELSE (CMAKE_GENERATOR STREQUAL "Borland Makefiles") + # assume MSVC + SET(TMP_MSVC 0) + SET(TMP_MSVC_64 0) + + IF (CMAKE_GENERATOR STREQUAL "Visual Studio 6") + SET(TMP_MSVC 6) + SET(TMP_MSVC_64 0) + ELSEIF (CMAKE_GENERATOR STREQUAL "Visual Studio 8 2005") + SET(TMP_MSVC 8) + SET(TMP_MSVC_64 0) + ELSEIF (CMAKE_GENERATOR STREQUAL "Visual Studio 8 2005 Win64") + SET(TMP_MSVC 8) + SET(TMP_MSVC_64 1) + ELSEIF (CMAKE_GENERATOR STREQUAL "Visual Studio 9 2008") + SET(TMP_MSVC 9) + SET(TMP_MSVC_64 0) + ELSEIF (CMAKE_GENERATOR STREQUAL "Visual Studio 9 2008 Win64") + SET(TMP_MSVC 9) + SET(TMP_MSVC_64 1) + ELSEIF (CMAKE_GENERATOR STREQUAL "NMake Makefiles" OR CMAKE_GENERATOR STREQUAL "MinGW Makefiles") + SET(TMP_MSVC_64 ${CMAKE_CL_64}) + IF (MSVC_VERSION EQUAL 1400) + SET(TMP_MSVC 8) + ELSEIF (MSVC_VERSION GREATER 1599) + SET(TMP_MSVC 10) + ELSEIF (MSVC_VERSION GREATER 1499) + SET(TMP_MSVC 9) + ELSEIF (CMAKE_COMPILER_2005) + SET(TMP_MSVC 8) + ELSE (MSVC_VERSION EQUAL 1400) + SET(TMP_MSVC 6) + ENDIF (MSVC_VERSION EQUAL 1400) + ENDIF (CMAKE_GENERATOR STREQUAL "Visual Studio 6") + + SET(TMP_DIRS "") + + IF (TMP_MSVC GREATER 9) + LIST(APPEND TMP_DIRS "visualc2010") + ENDIF (TMP_MSVC GREATER 9) + IF (TMP_MSVC GREATER 8) + LIST(APPEND TMP_DIRS "visualc2008") + ENDIF (TMP_MSVC GREATER 8) + IF (TMP_MSVC GREATER 7) + LIST(APPEND TMP_DIRS "visualc2005") + ENDIF (TMP_MSVC GREATER 7) + IF (TMP_MSVC GREATER 5 AND NOT TMP_MSVC_64) + LIST(APPEND TMP_DIRS "visualc") + ENDIF (TMP_MSVC GREATER 5 AND NOT TMP_MSVC_64) + + IF (${ARGC} EQUAL 3) + LIST(GET TMP_DIRS 0 TMPSTR) + IF (TMP_MSVC_64) + SET(TMPSTR "${TMPSTR}_amd64") + ENDIF (TMP_MSVC_64) + set(${ARGV2} ${TMPSTR}) + ENDIF (${ARGC} EQUAL 3) + + IF (NOT BASE_DIR STREQUAL "" AND NOT BASE_DIR STREQUAL "/lib") + FOREACH (TMP_ITEM ${TMP_DIRS}) + IF (TMP_MSVC_64) + LIST(APPEND ${LIB_DIRS} "${BASE_DIR}/${TMP_ITEM}_amd64") + ELSE (TMP_MSVC_64) + LIST(APPEND ${LIB_DIRS} "${BASE_DIR}/${TMP_ITEM}") + ENDIF (TMP_MSVC_64) + ENDFOREACH (TMP_ITEM ${TMP_DIRS}) + ENDIF (NOT BASE_DIR STREQUAL "" AND NOT BASE_DIR STREQUAL "/lib") + ENDIF (CMAKE_GENERATOR STREQUAL "Borland Makefiles") + ELSE (WIN32) + IF (NOT BASE_DIR STREQUAL "" AND NOT BASE_DIR STREQUAL "/lib") + LIST(APPEND ${LIB_DIRS} ${BASE_DIR}) + ENDIF (NOT BASE_DIR STREQUAL "" AND NOT BASE_DIR STREQUAL "/lib") + IF (${ARGC} EQUAL 3) + set(${ARGV2} "") + ENDIF (${ARGC} EQUAL 3) + ENDIF (WIN32) + IF (${LIB_DIRS}) + LIST(REMOVE_ITEM ${LIB_DIRS} "/lib") + ENDIF (${LIB_DIRS}) +ENDMACRO (SISO_LIB_DIR BASE_DIR LIB_DIRS) -- cgit v1.2.3