From aaf0be0bbf7c877f71b1f3a6413b557fa409d5fc Mon Sep 17 00:00:00 2001 From: aramis_acg Date: Tue, 17 Jul 2012 22:56:15 +0000 Subject: [PATCH] - CMake overhaul. Add proper FindXXX scripts for PkgMacros, ZLIB, DirectX. Isolate MSVC-specific defines. Add newer boost versions to boost whitelist. Many thanks to Mr. S. for the patch! (see http://zfx.info/viewtopic.php?f=9&t=334&p=32190#p32190) git-svn-id: https://assimp.svn.sourceforge.net/svnroot/assimp/trunk@1293 67173fc5-114c-0410-ac8e-9d2fd5bffc1f --- AssimpConfigVersion.cmake.in | 12 +- CMakeLists.txt | 92 +++++++------ assimp-config-version.cmake.in | 17 +-- cmake-modules/FindDirectX.cmake | 100 ++++++++++++++ cmake-modules/FindPkgMacros.cmake | 142 ++++++++++++++++++++ cmake-modules/FindZLIB.cmake | 48 +++++++ code/CMakeLists.txt | 39 ++++-- samples/SimpleOpenGL/CMakeLists.txt | 4 +- samples/SimpleTexturedOpenGL/CMakeLists.txt | 34 ++--- test/CMakeLists.txt | 34 +---- tools/assimp_cmd/CMakeLists.txt | 4 +- tools/assimp_view/CMakeLists.txt | 41 +----- 12 files changed, 415 insertions(+), 152 deletions(-) create mode 100644 cmake-modules/FindDirectX.cmake create mode 100644 cmake-modules/FindPkgMacros.cmake create mode 100644 cmake-modules/FindZLIB.cmake diff --git a/AssimpConfigVersion.cmake.in b/AssimpConfigVersion.cmake.in index 7ffe759d56..701fa6158c 100644 --- a/AssimpConfigVersion.cmake.in +++ b/AssimpConfigVersion.cmake.in @@ -1,11 +1,11 @@ -set(PACKAGE_VERSION "@ASSIMP_SOVERSION@") +set(ASSIMP_PACKAGE_VERSION "@ASSIMP_SOVERSION@") # Check whether the requested PACKAGE_FIND_VERSION is compatible -if("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}") - set(PACKAGE_VERSION_COMPATIBLE FALSE) +if("${ASSIMP_PACKAGE_VERSION}" VERSION_LESS "${ASSIMP_PACKAGE_FIND_VERSION}") + set(ASSIMP_PACKAGE_VERSION_COMPATIBLE FALSE) else() - set(PACKAGE_VERSION_COMPATIBLE TRUE) - if ("${PACKAGE_VERSION}" VERSION_EQUAL "${PACKAGE_FIND_VERSION}") - set(PACKAGE_VERSION_EXACT TRUE) + set(ASSIMP_PACKAGE_VERSION_COMPATIBLE TRUE) + if ("${ASSIMP_PACKAGE_VERSION}" VERSION_EQUAL "${ASSIMP_PACKAGE_FIND_VERSION}") + set(ASSIMP_PACKAGE_VERSION_EXACT TRUE) endif() endif() diff --git a/CMakeLists.txt b/CMakeLists.txt index 3d5833ea89..1bc39f27d8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,9 +10,9 @@ set (ASSIMP_VERSION ${ASSIMP_VERSION_MAJOR}.${ASSIMP_VERSION_MINOR}.${ASSIMP_VER set (ASSIMP_SOVERSION 3) SET ( PROJECT_VERSION "${ASSIMP_VERSION}" ) -set(PACKAGE_VERSION "0" CACHE STRING "the package-specific version used for uploading the sources") +set(ASSIMP_PACKAGE_VERSION "0" CACHE STRING "the package-specific version used for uploading the sources") -option(OPT_BUILD_PACKAGES "Set to ON to generate CPack configuration files and packaging targets" OFF) +option(ASSIMP_OPT_BUILD_PACKAGES "Set to ON to generate CPack configuration files and packaging targets" OFF) set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake-modules") set(LIBASSIMP_COMPONENT libassimp${ASSIMP_VERSION_MAJOR}.${ASSIMP_VERSION_MINOR}-r${ASSIMP_SV_REVISION}) set(LIBASSIMP-DEV_COMPONENT libassimp${ASSIMP_VERSION_MAJOR}.${ASSIMP_VERSION_MINOR}-r${ASSIMP_SV_REVISION}-dev) @@ -38,45 +38,45 @@ IF ( CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR ) ENDIF ( CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR ) # Cache these to allow the user to override them manually. -SET( LIB_INSTALL_DIR "lib" CACHE PATH +SET( ASSIMP_LIB_INSTALL_DIR "lib" CACHE PATH "Path the built library files are installed to." ) -SET( INCLUDE_INSTALL_DIR "include" CACHE PATH +SET( ASSIMP_INCLUDE_INSTALL_DIR "include" CACHE PATH "Path the header files are installed to." ) -SET( BIN_INSTALL_DIR "bin" CACHE PATH +SET( ASSIMP_BIN_INSTALL_DIR "bin" CACHE PATH "Path the tool executables are installed to." ) -SET(DEBUG_POSTFIX "D" CACHE STRING "Debug Postfitx for lib, samples and tools") +SET(ASSIMP_DEBUG_POSTFIX "D" CACHE STRING "Debug Postfitx for lib, samples and tools") + +# Allow the user to build a static library +SET ( ASSIMP_BUILD_STATIC_LIB OFF CACHE BOOL + "Build a static (.a) version of the library" +) # Generate a pkg-config .pc for the Assimp library. CONFIGURE_FILE( "${PROJECT_SOURCE_DIR}/assimp.pc.in" "${PROJECT_BINARY_DIR}/assimp.pc" @ONLY ) -INSTALL( FILES "${PROJECT_BINARY_DIR}/assimp.pc" DESTINATION ${LIB_INSTALL_DIR}/pkgconfig/ COMPONENT ${LIBASSIMP-DEV_COMPONENT}) +INSTALL( FILES "${PROJECT_BINARY_DIR}/assimp.pc" DESTINATION ${ASSIMP_LIB_INSTALL_DIR}/pkgconfig/ COMPONENT ${LIBASSIMP-DEV_COMPONENT}) # cmake configuration files configure_file("${CMAKE_CURRENT_SOURCE_DIR}/assimp-config.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/assimp-config.cmake" @ONLY IMMEDIATE) configure_file("${CMAKE_CURRENT_SOURCE_DIR}/assimp-config-version.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/assimp-config-version.cmake" @ONLY IMMEDIATE) -install(FILES "${CMAKE_CURRENT_BINARY_DIR}/assimp-config.cmake" "${CMAKE_CURRENT_BINARY_DIR}/assimp-config-version.cmake" DESTINATION "${LIB_INSTALL_DIR}/cmake/assimp-${ASSIMP_VERSION_MAJOR}.${ASSIMP_VERSION_MINOR}" COMPONENT ${LIBASSIMP-DEV_COMPONENT}) +install(FILES "${CMAKE_CURRENT_BINARY_DIR}/assimp-config.cmake" "${CMAKE_CURRENT_BINARY_DIR}/assimp-config-version.cmake" DESTINATION "${ASSIMP_LIB_INSTALL_DIR}/cmake/assimp-${ASSIMP_VERSION_MAJOR}.${ASSIMP_VERSION_MINOR}" COMPONENT ${LIBASSIMP-DEV_COMPONENT}) # add make uninstall capability configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake-modules/cmake_uninstall.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" IMMEDIATE @ONLY) add_custom_target(uninstall "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake") -# Allow the user to build a static library -SET ( BUILD_STATIC_LIB OFF CACHE BOOL - "Build a static (.a) version of the library" -) - # Globally enbale Boost resp. the Boost workaround – it is also needed by the # tools which include the Assimp headers. -SET ( ENABLE_BOOST_WORKAROUND OFF CACHE BOOL +SET ( ASSIMP_ENABLE_BOOST_WORKAROUND OFF CACHE BOOL "If a simple implementation of the used Boost functions is used. Slightly reduces functionality, but enables builds without Boost available." ) -IF ( ENABLE_BOOST_WORKAROUND ) +IF ( ASSIMP_ENABLE_BOOST_WORKAROUND ) INCLUDE_DIRECTORIES( code/BoostWorkaround ) ADD_DEFINITIONS( -DASSIMP_BUILD_BOOST_WORKAROUND ) MESSAGE( STATUS "Building a non-boost version of Assimp." ) -ELSE ( ENABLE_BOOST_WORKAROUND ) +ELSE ( ASSIMP_ENABLE_BOOST_WORKAROUND ) SET( Boost_DETAILED_FAILURE_MSG ON ) - SET( Boost_ADDITIONAL_VERSIONS "1.47" "1.47.0" "1.48.0" "1.48" "1.49" "1.49.0" "1.50") + SET( Boost_ADDITIONAL_VERSIONS "1.47" "1.47.0" "1.48.0" "1.48" "1.49" "1.49.0" "1.50" "1.50.0" "1.51" "1.51.0") FIND_PACKAGE( Boost ) IF ( NOT Boost_FOUND ) MESSAGE( FATAL_ERROR @@ -87,10 +87,10 @@ ELSE ( ENABLE_BOOST_WORKAROUND ) ENDIF ( NOT Boost_FOUND ) INCLUDE_DIRECTORIES( ${Boost_INCLUDE_DIRS} ) -ENDIF ( ENABLE_BOOST_WORKAROUND ) +ENDIF ( ASSIMP_ENABLE_BOOST_WORKAROUND ) -SET ( NO_EXPORT OFF CACHE BOOL +SET ( ASSIMP_NO_EXPORT OFF CACHE BOOL "Disable Assimp's export functionality." ) @@ -117,12 +117,16 @@ if (PKG_CONFIG_FOUND) PKG_CHECK_MODULES(UNZIP minizip) endif (PKG_CONFIG_FOUND) -IF ( NO_EXPORT ) +IF ( ASSIMP_NO_EXPORT ) ADD_DEFINITIONS( -DASSIMP_BUILD_NO_EXPORT) MESSAGE( STATUS "Build an import-only version of Assimp." ) -ENDIF( NO_EXPORT ) - +ENDIF( ASSIMP_NO_EXPORT ) +# if(CMAKE_CL_64) +# set(ASSIMP_BUILD_ARCHITECTURE "amd64") +# else(CMAKE_CL_64) +# set(ASSIMP_BUILD_ARCHITECTURE "x86") +# endif(CMAKE_CL_64) SET ( ASSIMP_BUILD_ARCHITECTURE "" CACHE STRING "describe the current architecture." ) @@ -131,6 +135,7 @@ ELSE ( ASSIMP_BUILD_ARCHITECTURE STREQUAL "") ADD_DEFINITIONS ( -D'ASSIMP_BUILD_ARCHITECTURE="${ASSIMP_BUILD_ARCHITECTURE}"' ) ENDIF ( ASSIMP_BUILD_ARCHITECTURE STREQUAL "") +# ${CMAKE_GENERATOR} SET ( ASSIMP_BUILD_COMPILER "" CACHE STRING "describe the current compiler." ) @@ -143,46 +148,51 @@ MARK_AS_ADVANCED ( ASSIMP_BUILD_ARCHITECTURE ASSIMP_BUILD_COMPILER ) ADD_SUBDIRECTORY( code/ ) -SET ( BUILD_ASSIMP_TOOLS ON CACHE BOOL +SET ( ASSIMP_BUILD_ASSIMP_TOOLS ON CACHE BOOL "If the supplementary tools for Assimp are built in addition to the library." ) -IF ( BUILD_ASSIMP_TOOLS ) +IF ( ASSIMP_BUILD_ASSIMP_TOOLS ) IF ( WIN32 ) ADD_SUBDIRECTORY( tools/assimp_view/ ) ENDIF ( WIN32 ) ADD_SUBDIRECTORY( tools/assimp_cmd/ ) -ENDIF ( BUILD_ASSIMP_TOOLS ) +ENDIF ( ASSIMP_BUILD_ASSIMP_TOOLS ) -SET ( BUILD_ASSIMP_SAMPLES OFF CACHE BOOL +SET ( ASSIMP_BUILD_SAMPLES OFF CACHE BOOL "If the official samples are built as well (needs Glut)." ) -IF ( BUILD_ASSIMP_SAMPLES) +IF ( ASSIMP_BUILD_SAMPLES) IF ( WIN32 ) ADD_SUBDIRECTORY( samples/SimpleTexturedOpenGL/ ) ENDIF ( WIN32 ) ADD_SUBDIRECTORY( samples/SimpleOpenGL/ ) -ENDIF ( BUILD_ASSIMP_SAMPLES ) - -SET ( BUILD_TESTS OFF CACHE BOOL - "If the test suite for Assimp is built in addition to the library." -) -IF ( BUILD_TESTS ) - IF ( WIN32 ) +ENDIF ( ASSIMP_BUILD_SAMPLES ) + +IF ( WIN32 ) + SET ( ASSIMP_BUILD_TESTS OFF CACHE BOOL + "If the test suite for Assimp is built in addition to the library." + ) + + IF ( ASSIMP_BUILD_TESTS ) ADD_SUBDIRECTORY( test/ ) - ELSE ( WIN32 ) - MESSAGE( WARNING "The Assimp test suite is currently Windows-only." ) - ENDIF ( WIN32 ) -ENDIF ( BUILD_TESTS ) + ENDIF ( ASSIMP_BUILD_TESTS ) +ENDIF ( WIN32 ) + +IF(MSVC) + SET ( ASSIMP_INSTALL_PDB ON CACHE BOOL + "Install MSVC debug files." + ) +ENDIF(MSVC) -if(CMAKE_CPACK_COMMAND AND UNIX AND OPT_BUILD_PACKAGES) +if(CMAKE_CPACK_COMMAND AND UNIX AND ASSIMP_OPT_BUILD_PACKAGES) # Packing information set(CPACK_PACKAGE_NAME assimp{ASSIMP_VERSION_MAJOR}) set(CPACK_PACKAGE_CONTACT "" CACHE STRING "Package maintainer and PGP signer.") set(CPACK_PACKAGE_VENDOR "http://assimp.sourceforge.net/") set(CPACK_PACKAGE_DISPLAY_NAME "Assimp ${ASSIMP_VERSION}") set(CPACK_PACKAGE_DESCRIPTION_SUMMARY " - Open Asset Import Library ${ASSIMP_VERSION}") - set(CPACK_PACKAGE_VERSION ${ASSIMP_VERSION}.${PACKAGE_VERSION}) + set(CPACK_PACKAGE_VERSION ${ASSIMP_VERSION}.${ASSIMP_PACKAGE_VERSION}) set(CPACK_PACKAGE_VERSION_MAJOR ${ASSIMP_VERSION_MAJOR}) set(CPACK_PACKAGE_VERSION_MINOR ${ASSIMP_VERSION_MINOR}) set(CPACK_PACKAGE_VERSION_PATCH ${ASSIMP_VERSION_PATCH}) @@ -204,7 +214,7 @@ if(CMAKE_CPACK_COMMAND AND UNIX AND OPT_BUILD_PACKAGES) # debian set(CPACK_DEBIAN_PACKAGE_PRIORITY optional) - set(CPACK_DEBIAN_CMAKE_OPTIONS "-DBUILD_ASSIMP_SAMPLES:BOOL=${BUILD_ASSIMP_SAMPLES}") + set(CPACK_DEBIAN_CMAKE_OPTIONS "-DBUILD_ASSIMP_SAMPLES:BOOL=${ASSIMP_BUILD_SAMPLES}") set(CPACK_DEBIAN_PACKAGE_SECTION libs) set(CPACK_DEBIAN_PACKAGE_DEPENDS ${CPACK_COMPONENTS_ALL}) set(CPACK_DEBIAN_PACKAGE_SUGGESTS) diff --git a/assimp-config-version.cmake.in b/assimp-config-version.cmake.in index 9a8789f34d..2698a53acf 100644 --- a/assimp-config-version.cmake.in +++ b/assimp-config-version.cmake.in @@ -1,12 +1,13 @@ -set( PACKAGE_VERSION "@ASSIMP_VERSION@" ) -if( "${PACKAGE_FIND_VERSION}" VERSION_EQUAL "@ASSIMP_VERSION@") - set(PACKAGE_VERSION_EXACT 1) +set( ASSIMP_PACKAGE_VERSION "@ASSIMP_VERSION@" ) +if( "${ASSIMP_PACKAGE_FIND_VERSION}" VERSION_EQUAL "@ASSIMP_VERSION@") + set(ASSIMP_PACKAGE_VERSION_EXACT 1) endif() -if( "${PACKAGE_FIND_VERSION_MAJOR}.${PACKAGE_FIND_VERSION_MINOR}" EQUAL "@ASSIMP_SOVERSION@" ) - set(PACKAGE_VERSION_COMPATIBLE 1) -elseif( "${PACKAGE_FIND_VERSION_MAJOR}" EQUAL "@ASSIMP_VERSION_MAJOR@" ) +if( "${ASSIMP_PACKAGE_FIND_VERSION_MAJOR}.${ASSIMP_PACKAGE_FIND_VERSION_MINOR}" EQUAL "@ASSIMP_SOVERSION@" ) + set(ASSIMP_PACKAGE_VERSION_COMPATIBLE 1) +elseif( "${ASSIMP_PACKAGE_FIND_VERSION_MAJOR}" EQUAL "@ASSIMP_VERSION_MAJOR@" ) # for now backward compatible if minor version is less - if( ${PACKAGE_FIND_VERSION_MINOR} LESS @ASSIMP_VERSION_MINOR@ ) - set(PACKAGE_VERSION_COMPATIBLE 1) + if( ${ASSIMP_PACKAGE_FIND_VERSION_MINOR} LESS @ASSIMP_VERSION_MINOR@ ) + set(ASSIMP_PACKAGE_VERSION_COMPATIBLE 1) endif() endif() +set( ASSIMP_STATIC_LIB "@ASSIMP_BUILD_STATIC_LIB@") diff --git a/cmake-modules/FindDirectX.cmake b/cmake-modules/FindDirectX.cmake new file mode 100644 index 0000000000..c8eac1a7d7 --- /dev/null +++ b/cmake-modules/FindDirectX.cmake @@ -0,0 +1,100 @@ +#------------------------------------------------------------------- +# This file is part of the CMake build system for OGRE +# (Object-oriented Graphics Rendering Engine) +# For the latest info, see http://www.ogre3d.org/ +# +# The contents of this file are placed in the public domain. Feel +# free to make use of it in any way you like. +#------------------------------------------------------------------- + +# ----------------------------------------------------------------------------- +# Find DirectX SDK +# Define: +# DirectX_FOUND +# DirectX_INCLUDE_DIR +# DirectX_LIBRARY +# DirectX_ROOT_DIR + +if(WIN32) # The only platform it makes sense to check for DirectX SDK + include(FindPkgMacros) + findpkg_begin(DirectX) + + # Get path, convert backslashes as ${ENV_DXSDK_DIR} + getenv_path(DXSDK_DIR) + getenv_path(DIRECTX_HOME) + getenv_path(DIRECTX_ROOT) + getenv_path(DIRECTX_BASE) + + # construct search paths + set(DirectX_PREFIX_PATH + "${DXSDK_DIR}" "${ENV_DXSDK_DIR}" + "${DIRECTX_HOME}" "${ENV_DIRECTX_HOME}" + "${DIRECTX_ROOT}" "${ENV_DIRECTX_ROOT}" + "${DIRECTX_BASE}" "${ENV_DIRECTX_BASE}" + "C:/apps_x86/Microsoft DirectX SDK*" + "C:/Program Files (x86)/Microsoft DirectX SDK*" + "C:/apps/Microsoft DirectX SDK*" + "C:/Program Files/Microsoft DirectX SDK*" + "$ENV{ProgramFiles}/Microsoft DirectX SDK*" + ) + create_search_paths(DirectX) + # redo search if prefix path changed + clear_if_changed(DirectX_PREFIX_PATH + DirectX_LIBRARY + DirectX_INCLUDE_DIR + ) + + find_path(DirectX_INCLUDE_DIR NAMES d3d9.h HINTS ${DirectX_INC_SEARCH_PATH}) + # dlls are in DirectX_ROOT_DIR/Developer Runtime/x64|x86 + # lib files are in DirectX_ROOT_DIR/Lib/x64|x86 + if(CMAKE_CL_64) + set(DirectX_LIBPATH_SUFFIX "x64") + else(CMAKE_CL_64) + set(DirectX_LIBPATH_SUFFIX "x86") + endif(CMAKE_CL_64) + find_library(DirectX_LIBRARY NAMES d3d9 HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX}) + find_library(DirectX_D3DX9_LIBRARY NAMES d3dx9 HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX}) + find_library(DirectX_DXERR_LIBRARY NAMES DxErr HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX}) + find_library(DirectX_DXGUID_LIBRARY NAMES dxguid HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX}) + + + # look for dxgi (needed by both 10 and 11) + find_library(DirectX_DXGI_LIBRARY NAMES dxgi HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX}) + + # look for d3dcompiler (needed by 11) + find_library(DirectX_D3DCOMPILER_LIBRARY NAMES d3dcompiler HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX}) + + findpkg_finish(DirectX) + set(DirectX_LIBRARIES ${DirectX_LIBRARIES} + ${DirectX_D3DX9_LIBRARY} + ${DirectX_DXERR_LIBRARY} + ${DirectX_DXGUID_LIBRARY} + ) + + mark_as_advanced(DirectX_D3DX9_LIBRARY DirectX_DXERR_LIBRARY DirectX_DXGUID_LIBRARY + DirectX_DXGI_LIBRARY DirectX_D3DCOMPILER_LIBRARY) + + + # look for D3D11 components + if (DirectX_FOUND) + find_path(DirectX_D3D11_INCLUDE_DIR NAMES D3D11Shader.h HINTS ${DirectX_INC_SEARCH_PATH}) + get_filename_component(DirectX_LIBRARY_DIR "${DirectX_LIBRARY}" PATH) + message(STATUS "DX lib dir: ${DirectX_LIBRARY_DIR}") + find_library(DirectX_D3D11_LIBRARY NAMES d3d11 HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX}) + find_library(DirectX_D3DX11_LIBRARY NAMES d3dx11 HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX}) + if (DirectX_D3D11_INCLUDE_DIR AND DirectX_D3D11_LIBRARY) + set(DirectX_D3D11_FOUND TRUE) + set(DirectX_D3D11_INCLUDE_DIR ${DirectX_D3D11_INCLUDE_DIR}) + set(DirectX_D3D11_LIBRARIES ${DirectX_D3D11_LIBRARIES} + ${DirectX_D3D11_LIBRARY} + ${DirectX_D3DX11_LIBRARY} + ${DirectX_DXGI_LIBRARY} + ${DirectX_DXERR_LIBRARY} + ${DirectX_DXGUID_LIBRARY} + ${DirectX_D3DCOMPILER_LIBRARY} + ) + endif () + mark_as_advanced(DirectX_D3D11_INCLUDE_DIR DirectX_D3D11_LIBRARY DirectX_D3DX11_LIBRARY) + endif () + +endif(WIN32) diff --git a/cmake-modules/FindPkgMacros.cmake b/cmake-modules/FindPkgMacros.cmake new file mode 100644 index 0000000000..bc3b145ba8 --- /dev/null +++ b/cmake-modules/FindPkgMacros.cmake @@ -0,0 +1,142 @@ +#------------------------------------------------------------------- +# This file is part of the CMake build system for OGRE +# (Object-oriented Graphics Rendering Engine) +# For the latest info, see http://www.ogre3d.org/ +# +# The contents of this file are placed in the public domain. Feel +# free to make use of it in any way you like. +#------------------------------------------------------------------- + +################################################################## +# Provides some common functionality for the FindPackage modules +################################################################## + +# Begin processing of package +macro(findpkg_begin PREFIX) + if (NOT ${PREFIX}_FIND_QUIETLY) + message(STATUS "Looking for ${PREFIX}...") + endif () +endmacro(findpkg_begin) + +# Display a status message unless FIND_QUIETLY is set +macro(pkg_message PREFIX) + if (NOT ${PREFIX}_FIND_QUIETLY) + message(STATUS ${ARGN}) + endif () +endmacro(pkg_message) + +# Get environment variable, define it as ENV_$var and make sure backslashes are converted to forward slashes +macro(getenv_path VAR) + set(ENV_${VAR} $ENV{${VAR}}) + # replace won't work if var is blank + if (ENV_${VAR}) + string( REGEX REPLACE "\\\\" "/" ENV_${VAR} ${ENV_${VAR}} ) + endif () +endmacro(getenv_path) + +# Construct search paths for includes and libraries from a PREFIX_PATH +macro(create_search_paths PREFIX) + foreach(dir ${${PREFIX}_PREFIX_PATH}) + set(${PREFIX}_INC_SEARCH_PATH ${${PREFIX}_INC_SEARCH_PATH} + ${dir}/include ${dir}/include/${PREFIX} ${dir}/Headers) + set(${PREFIX}_LIB_SEARCH_PATH ${${PREFIX}_LIB_SEARCH_PATH} + ${dir}/lib ${dir}/lib/${PREFIX} ${dir}/Libs) + endforeach(dir) + set(${PREFIX}_FRAMEWORK_SEARCH_PATH ${${PREFIX}_PREFIX_PATH}) +endmacro(create_search_paths) + +# clear cache variables if a certain variable changed +macro(clear_if_changed TESTVAR) + # test against internal check variable + if (NOT "${${TESTVAR}}" STREQUAL "${${TESTVAR}_INT_CHECK}") + message(STATUS "${TESTVAR} changed.") + foreach(var ${ARGN}) + set(${var} "NOTFOUND" CACHE STRING "x" FORCE) + endforeach(var) + endif () + set(${TESTVAR}_INT_CHECK ${${TESTVAR}} CACHE INTERNAL "x" FORCE) +endmacro(clear_if_changed) + +# Try to get some hints from pkg-config, if available +macro(use_pkgconfig PREFIX PKGNAME) + find_package(PkgConfig) + if (PKG_CONFIG_FOUND) + pkg_check_modules(${PREFIX} ${PKGNAME}) + endif () +endmacro (use_pkgconfig) + +# Couple a set of release AND debug libraries (or frameworks) +macro(make_library_set PREFIX) + if (${PREFIX}_FWK) + set(${PREFIX} ${${PREFIX}_FWK}) + elseif (${PREFIX}_REL AND ${PREFIX}_DBG) + set(${PREFIX} optimized ${${PREFIX}_REL} debug ${${PREFIX}_DBG}) + elseif (${PREFIX}_REL) + set(${PREFIX} ${${PREFIX}_REL}) + elseif (${PREFIX}_DBG) + set(${PREFIX} ${${PREFIX}_DBG}) + endif () +endmacro(make_library_set) + +# Generate debug names from given release names +macro(get_debug_names PREFIX) + foreach(i ${${PREFIX}}) + set(${PREFIX}_DBG ${${PREFIX}_DBG} ${i}d ${i}D ${i}_d ${i}_D ${i}_debug ${i}) + endforeach(i) +endmacro(get_debug_names) + +# Add the parent dir from DIR to VAR +macro(add_parent_dir VAR DIR) + get_filename_component(${DIR}_TEMP "${${DIR}}/.." ABSOLUTE) + set(${VAR} ${${VAR}} ${${DIR}_TEMP}) +endmacro(add_parent_dir) + +# Do the final processing for the package find. +macro(findpkg_finish PREFIX) + # skip if already processed during this run + if (NOT ${PREFIX}_FOUND) + if (${PREFIX}_INCLUDE_DIR AND ${PREFIX}_LIBRARY) + set(${PREFIX}_FOUND TRUE) + set(${PREFIX}_INCLUDE_DIRS ${${PREFIX}_INCLUDE_DIR}) + set(${PREFIX}_LIBRARIES ${${PREFIX}_LIBRARY}) + if (NOT ${PREFIX}_FIND_QUIETLY) + message(STATUS "Found ${PREFIX}: ${${PREFIX}_LIBRARIES}") + endif () + else () + if (NOT ${PREFIX}_FIND_QUIETLY) + message(STATUS "Could not locate ${PREFIX}") + endif () + if (${PREFIX}_FIND_REQUIRED) + message(FATAL_ERROR "Required library ${PREFIX} not found! Install the library (including dev packages) and try again. If the library is already installed, set the missing variables manually in cmake.") + endif () + endif () + + mark_as_advanced(${PREFIX}_INCLUDE_DIR ${PREFIX}_LIBRARY ${PREFIX}_LIBRARY_REL ${PREFIX}_LIBRARY_DBG ${PREFIX}_LIBRARY_FWK) + endif () +endmacro(findpkg_finish) + + +# Slightly customised framework finder +MACRO(findpkg_framework fwk) + IF(APPLE) + SET(${fwk}_FRAMEWORK_PATH + ${${fwk}_FRAMEWORK_SEARCH_PATH} + ${CMAKE_FRAMEWORK_PATH} + ~/Library/Frameworks + /Library/Frameworks + /System/Library/Frameworks + /Network/Library/Frameworks + /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/System/Library/Frameworks/ + ) + FOREACH(dir ${${fwk}_FRAMEWORK_PATH}) + SET(fwkpath ${dir}/${fwk}.framework) + IF(EXISTS ${fwkpath}) + SET(${fwk}_FRAMEWORK_INCLUDES ${${fwk}_FRAMEWORK_INCLUDES} + ${fwkpath}/Headers ${fwkpath}/PrivateHeaders) + if (NOT ${fwk}_LIBRARY_FWK) + SET(${fwk}_LIBRARY_FWK "-framework ${fwk}") + endif () + ENDIF(EXISTS ${fwkpath}) + ENDFOREACH(dir) + ENDIF(APPLE) +ENDMACRO(findpkg_framework) diff --git a/cmake-modules/FindZLIB.cmake b/cmake-modules/FindZLIB.cmake new file mode 100644 index 0000000000..c1e20016ba --- /dev/null +++ b/cmake-modules/FindZLIB.cmake @@ -0,0 +1,48 @@ +#------------------------------------------------------------------- +# This file is part of the CMake build system for OGRE +# (Object-oriented Graphics Rendering Engine) +# For the latest info, see http://www.ogre3d.org/ +# +# The contents of this file are placed in the public domain. Feel +# free to make use of it in any way you like. +#------------------------------------------------------------------- + +# - Try to find ZLIB +# Once done, this will define +# +# ZLIB_FOUND - system has ZLIB +# ZLIB_INCLUDE_DIRS - the ZLIB include directories +# ZLIB_LIBRARIES - link these to use ZLIB + +include(FindPkgMacros) +findpkg_begin(ZLIB) + +# Get path, convert backslashes as ${ENV_${var}} +getenv_path(ZLIB_HOME) + +# construct search paths +set(ZLIB_PREFIX_PATH ${ZLIB_HOME} ${ENV_ZLIB_HOME}) +create_search_paths(ZLIB) +# redo search if prefix path changed +clear_if_changed(ZLIB_PREFIX_PATH + ZLIB_LIBRARY_FWK + ZLIB_LIBRARY_REL + ZLIB_LIBRARY_DBG + ZLIB_INCLUDE_DIR +) + +set(ZLIB_LIBRARY_NAMES z zlib zdll) +get_debug_names(ZLIB_LIBRARY_NAMES) + +use_pkgconfig(ZLIB_PKGC zzip-zlib-config) + +findpkg_framework(ZLIB) + +find_path(ZLIB_INCLUDE_DIR NAMES zlib.h HINTS ${ZLIB_INC_SEARCH_PATH} ${ZLIB_PKGC_INCLUDE_DIRS}) +find_library(ZLIB_LIBRARY_REL NAMES ${ZLIB_LIBRARY_NAMES} HINTS ${ZLIB_LIB_SEARCH_PATH} ${ZLIB_PKGC_LIBRARY_DIRS} PATH_SUFFIXES "" release relwithdebinfo minsizerel) +find_library(ZLIB_LIBRARY_DBG NAMES ${ZLIB_LIBRARY_NAMES_DBG} HINTS ${ZLIB_LIB_SEARCH_PATH} ${ZLIB_PKGC_LIBRARY_DIRS} PATH_SUFFIXES "" debug) + +make_library_set(ZLIB_LIBRARY) + +findpkg_finish(ZLIB) + diff --git a/code/CMakeLists.txt b/code/CMakeLists.txt index d21f2995b3..f0e2198333 100644 --- a/code/CMakeLists.txt +++ b/code/CMakeLists.txt @@ -566,17 +566,19 @@ SOURCE_GROUP( unzip FILES ${unzip_SRCS}) # VC2010 fixes -OPTION( VC10_STDINT_FIX "Fix for VC10 Compiler regarding pstdint.h redefinition errors" OFF ) -if( VC10_STDINT_FIX ) - ADD_DEFINITIONS( -D_STDINT ) -endif( VC10_STDINT_FIX ) +if(MSVC10) + OPTION( VC10_STDINT_FIX "Fix for VC10 Compiler regarding pstdint.h redefinition errors" OFF ) + if( VC10_STDINT_FIX ) + ADD_DEFINITIONS( -D_STDINT ) + endif( VC10_STDINT_FIX ) +endif(MSVC10) ADD_DEFINITIONS( -DASSIMP_BUILD_DLL_EXPORT ) -if ( MSVC80 OR MSVC90 OR MSVC10 ) +if ( MSVC ) ADD_DEFINITIONS( -D_SCL_SECURE_NO_WARNINGS ) ADD_DEFINITIONS( -D_CRT_SECURE_NO_WARNINGS ) -endif ( MSVC80 OR MSVC90 OR MSVC10 ) +endif ( MSVC ) if (UNZIP_FOUND) SET (unzip_compile_SRCS "") @@ -644,17 +646,17 @@ SET( assim_src ${PUBLIC_HEADERS} ${COMPILER_HEADERS} ) -IF ( BUILD_STATIC_LIB ) +IF ( ASSIMP_BUILD_STATIC_LIB ) ADD_LIBRARY( assimp STATIC ${assim_src} ) -ELSE ( BUILD_STATIC_LIB ) +ELSE ( ASSIMP_BUILD_STATIC_LIB ) ADD_LIBRARY( assimp SHARED ${assim_src} ) -ENDIF ( BUILD_STATIC_LIB ) +ENDIF ( ASSIMP_BUILD_STATIC_LIB ) -SET_PROPERTY(TARGET assimp PROPERTY DEBUG_POSTFIX ${DEBUG_POSTFIX}) +SET_PROPERTY(TARGET assimp PROPERTY DEBUG_POSTFIX ${ASSIMP_DEBUG_POSTFIX}) TARGET_LINK_LIBRARIES(assimp ${ZLIB_LIBRARIES}) SET_TARGET_PROPERTIES( assimp PROPERTIES @@ -670,6 +672,17 @@ else (UNZIP_FOUND) INCLUDE_DIRECTORIES("../contrib/unzip") endif (UNZIP_FOUND) -INSTALL( TARGETS assimp DESTINATION ${LIB_INSTALL_DIR} COMPONENT ${LIBASSIMP_COMPONENT}) -INSTALL( FILES ${PUBLIC_HEADERS} DESTINATION ${INCLUDE_INSTALL_DIR}/assimp COMPONENT assimp-dev) -INSTALL( FILES ${COMPILER_HEADERS} DESTINATION ${INCLUDE_INSTALL_DIR}/assimp/Compiler COMPONENT assimp-dev) +INSTALL( TARGETS assimp DESTINATION ${ASSIMP_LIB_INSTALL_DIR} COMPONENT ${LIBASSIMP_COMPONENT}) +INSTALL( FILES ${PUBLIC_HEADERS} DESTINATION ${ASSIMP_INCLUDE_INSTALL_DIR}/assimp COMPONENT assimp-dev) +INSTALL( FILES ${COMPILER_HEADERS} DESTINATION ${ASSIMP_INCLUDE_INSTALL_DIR}/assimp/Compiler COMPONENT assimp-dev) + +if(MSVC AND ASSIMP_INSTALL_PDB) + install(FILES ${Assimp_BINARY_DIR}/code/Debug/assimp${ASSIMP_DEBUG_POSTFIX}.pdb + DESTINATION ${ASSIMP_LIB_INSTALL_DIR} + CONFIGURATIONS Debug + ) + install(FILES ${Assimp_BINARY_DIR}/code/RelWithDebInfo/assimp.pdb + DESTINATION ${ASSIMP_LIB_INSTALL_DIR} + CONFIGURATIONS RelWithDebInfo + ) +endif () diff --git a/samples/SimpleOpenGL/CMakeLists.txt b/samples/SimpleOpenGL/CMakeLists.txt index ae27bfd7ff..49e5fc212c 100644 --- a/samples/SimpleOpenGL/CMakeLists.txt +++ b/samples/SimpleOpenGL/CMakeLists.txt @@ -27,7 +27,7 @@ ADD_EXECUTABLE( assimp_simpleogl Sample_SimpleOpenGL.c ) -SET_PROPERTY(TARGET assimp_simpleogl PROPERTY DEBUG_POSTFIX ${DEBUG_POSTFIX}) +SET_PROPERTY(TARGET assimp_simpleogl PROPERTY DEBUG_POSTFIX ${ASSIMP_DEBUG_POSTFIX}) TARGET_LINK_LIBRARIES( assimp_simpleogl assimp ${OPENGL_LIBRARIES} ${GLUT_LIBRARIES} ) SET_TARGET_PROPERTIES( assimp_simpleogl PROPERTIES @@ -35,5 +35,5 @@ SET_TARGET_PROPERTIES( assimp_simpleogl PROPERTIES ) INSTALL( TARGETS assimp_simpleogl - DESTINATION "${BIN_INSTALL_DIR}" COMPONENT assimp-dev + DESTINATION "${ASSIMP_BIN_INSTALL_DIR}" COMPONENT assimp-dev ) diff --git a/samples/SimpleTexturedOpenGL/CMakeLists.txt b/samples/SimpleTexturedOpenGL/CMakeLists.txt index 736e45e2c1..33edd38ce9 100644 --- a/samples/SimpleTexturedOpenGL/CMakeLists.txt +++ b/samples/SimpleTexturedOpenGL/CMakeLists.txt @@ -1,7 +1,21 @@ +FIND_PACKAGE(OpenGL) +FIND_PACKAGE(GLUT) + +IF ( NOT GLUT_FOUND ) + IF ( MSVC ) + SET ( GLUT_FOUND 1 ) + SET ( GLUT_INCLUDE_DIR ${Assimp_SOURCE_DIR}/samples/glut/ ) + SET ( GLUT_LIBRARIES ${Assimp_SOURCE_DIR}/samples/glut/glut32.lib ) + ELSE ( MSVC ) + MESSAGE( WARNING "Please install glut." ) + ENDIF ( MSVC ) +ENDIF ( NOT GLUT_FOUND ) + INCLUDE_DIRECTORIES( ${Assimp_SOURCE_DIR}/include ${Assimp_SOURCE_DIR}/code - ${Assimp_SOURCE_DIR}/samples/glut/ + ${OPENGL_INCLUDE_DIR} + ${GLUT_INCLUDE_DIR} ${Assimp_SOURCE_DIR}/samples/DevIL/include/ ) @@ -17,26 +31,14 @@ ADD_EXECUTABLE( assimp_simpletexturedogl WIN32 SimpleTexturedOpenGL/src/model_loading.cpp ) -SET_PROPERTY(TARGET assimp_simpletexturedogl PROPERTY DEBUG_POSTFIX ${DEBUG_POSTFIX}) - -IF( WIN32 ) - SET( PSDK_PATH "C:/Program Files/Microsoft Platform SDK/Bin" ) - SET( PSDK_INC "C:/Program Files/Microsoft Platform SDK/Include" ) - - FIND_LIBRARY( WIN32_COMCTRL comctl32.lib - PATHS - "C:/Programme/Microsoft Platform SDK for Windows Server 2003 R2/Lib" - DOC "Path to psdk" - ) -ENDIF( WIN32 ) - +SET_PROPERTY(TARGET assimp_simpletexturedogl PROPERTY DEBUG_POSTFIX ${ASSIMP_DEBUG_POSTFIX}) -TARGET_LINK_LIBRARIES( assimp_simpletexturedogl assimp opengl32.lib glu32.lib comctl32.lib devil.lib ) +TARGET_LINK_LIBRARIES( assimp_simpletexturedogl assimp ${OPENGL_LIBRARIES} ${GLUT_LIBRARIES} DevIL.lib ) SET_TARGET_PROPERTIES( assimp_simpletexturedogl PROPERTIES OUTPUT_NAME assimp_simpletexturedogl ) INSTALL( TARGETS assimp_simpletexturedogl - DESTINATION "${BIN_INSTALL_DIR}" COMPONENT assimp-dev + DESTINATION "${ASSIMP_BIN_INSTALL_DIR}" COMPONENT assimp-dev ) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 64fefc7c1b..8dc94faf5d 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -219,35 +219,9 @@ add_executable( unit ) IF( WIN32 ) - SET( PSDK_PATH "C:/Program Files/Microsoft Platform SDK/Bin" ) - SET( PSDK_INC "C:/Program Files/Microsoft Platform SDK/Include" ) - - FIND_PATH(DX9_INCLUDE_PATH d3d9.h - PATHS - "$ENV{DXSDK_DIR}/Include" - "$ENV{PROGRAMFILES}/Microsoft DirectX SDK/Include" - DOC "The directory where D3D9.h resides") - - FIND_LIBRARY(D3D9_LIBRARY d3d9.lib - PATHS - "$ENV{DXSDK_DIR}/Lib/x86" - "$ENV{PROGRAMFILES}/Microsoft DirectX SDK/Lib/x86" - DOC "The directory where d3d9.lib resides") - - FIND_LIBRARY(D3DX9_LIBRARY d3dx9.lib - PATHS - "$ENV{DXSDK_DIR}/Lib/x86" - "$ENV{PROGRAMFILES}/Microsoft DirectX SDK/Lib/x86" - DOC "The directory where d3dx9.lib resides") - - SET( DX9_LIBRARIES ${D3D9_LIBRARY} ${D3DX9_LIBRARY} ) - - FIND_LIBRARY( WIN32_COMCTRL comctl32.lib - PATHS - "C:/Programme/Microsoft Platform SDK for Windows Server 2003 R2/Lib" - DOC "Path to psdk" - ) -ENDIF( WIN32 ) + FIND_PACKAGE(DirectX REQUIRED) ++ENDIF( WIN32 ) +SET_PROPERTY(TARGET assimp PROPERTY DEBUG_POSTFIX ${ASSIMP_DEBUG_POSTFIX}) # TODO: Port to non-Windows platforms. -target_link_libraries ( unit assimp ${DX9_LIBRARIES} comctl32.lib Winmm.lib ) +target_link_libraries ( unit assimp ${DirectX_LIBRARY} ${DirectX_D3DX9_LIBRARY} comctl32.lib Winmm.lib ) diff --git a/tools/assimp_cmd/CMakeLists.txt b/tools/assimp_cmd/CMakeLists.txt index f5758ece4e..9d1a291d2d 100644 --- a/tools/assimp_cmd/CMakeLists.txt +++ b/tools/assimp_cmd/CMakeLists.txt @@ -17,7 +17,7 @@ ADD_EXECUTABLE( assimp_cmd Export.cpp ) -SET_PROPERTY(TARGET assimp_cmd PROPERTY DEBUG_POSTFIX ${DEBUG_POSTFIX}) +SET_PROPERTY(TARGET assimp_cmd PROPERTY DEBUG_POSTFIX ${ASSIMP_DEBUG_POSTFIX}) TARGET_LINK_LIBRARIES( assimp_cmd assimp ${ZLIB_LIBRARIES}) SET_TARGET_PROPERTIES( assimp_cmd PROPERTIES @@ -25,5 +25,5 @@ SET_TARGET_PROPERTIES( assimp_cmd PROPERTIES ) INSTALL( TARGETS assimp_cmd - DESTINATION "${BIN_INSTALL_DIR}" COMPONENT assimp-bin + DESTINATION "${ASSIMP_BIN_INSTALL_DIR}" COMPONENT assimp-bin ) diff --git a/tools/assimp_view/CMakeLists.txt b/tools/assimp_view/CMakeLists.txt index d207c3e7ff..e3f15e9d83 100644 --- a/tools/assimp_view/CMakeLists.txt +++ b/tools/assimp_view/CMakeLists.txt @@ -1,8 +1,10 @@ +FIND_PACKAGE(DirectX REQUIRED) + # Make sure the compiler can find include files from our Hello library. include_directories ( ${Assimp_SOURCE_DIR}/include ${Assimp_SOURCE_DIR}/code - ${DX9_INCLUDE_PATH} + ${DirectX_INCLUDE_DIR} ) # Make sure the linker can find the Hello library once it is built. @@ -41,45 +43,16 @@ add_executable( assimp_viewer WIN32 txi.bmp ) -SET_PROPERTY(TARGET assimp_viewer PROPERTY DEBUG_POSTFIX ${DEBUG_POSTFIX}) +SET_PROPERTY(TARGET assimp_viewer PROPERTY DEBUG_POSTFIX ${ASSIMP_DEBUG_POSTFIX}) IF( WIN32 ) - SET( PSDK_PATH "C:/Program Files/Microsoft Platform SDK/Bin" ) - SET( PSDK_INC "C:/Program Files/Microsoft Platform SDK/Include" ) - - FIND_PATH(DX9_INCLUDE_PATH d3d9.h - PATHS - "$ENV{DXSDK_DIR}/Include" - "$ENV{PROGRAMFILES}/Microsoft DirectX SDK/Include" - DOC "The directory where D3D9.h resides") - - - FIND_LIBRARY(D3D9_LIBRARY d3d9.lib - PATHS - "$ENV{DXSDK_DIR}/Lib/x86" - "$ENV{PROGRAMFILES}/Microsoft DirectX SDK/Lib/x86" - DOC "The directory where d3d9.lib resides") - - FIND_LIBRARY(D3DX9_LIBRARY d3dx9.lib - PATHS - "$ENV{DXSDK_DIR}/Lib/x86" - "$ENV{PROGRAMFILES}/Microsoft DirectX SDK/Lib/x86" - DOC "The directory where d3dx9.lib resides") - - SET( DX9_LIBRARIES ${D3D9_LIBRARY} ${D3DX9_LIBRARY} ) - - FIND_LIBRARY( WIN32_COMCTRL comctl32.lib - PATHS - "C:/Programme/Microsoft Platform SDK for Windows Server 2003 R2/Lib" - DOC "Path to psdk" - ) ADD_DEFINITIONS( -D_SCL_SECURE_NO_WARNINGS ) ADD_DEFINITIONS( -D_CRT_SECURE_NO_WARNINGS ) ENDIF( WIN32 ) # Link the executable to the Hello library. -target_link_libraries ( assimp_viewer assimp ${DX9_LIBRARIES} comctl32.lib Winmm.lib ) +target_link_libraries ( assimp_viewer assimp ${DirectX_LIBRARY} ${DirectX_D3DX9_LIBRARY} comctl32.lib Winmm.lib ) INSTALL( TARGETS assimp_viewer - DESTINATION "${BIN_INSTALL_DIR}" COMPONENT assimp-dev -) + DESTINATION "${ASSIMP_BIN_INSTALL_DIR}" COMPONENT assimp-dev +)