ソースを参照

- 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
aramis_acg 13 年 前
コミット
aaf0be0bbf

+ 6 - 6
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()

+ 51 - 41
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)

+ 9 - 8
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@")

+ 100 - 0
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)

+ 142 - 0
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)

+ 48 - 0
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)
+

+ 26 - 13
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 ()

+ 2 - 2
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
 ) 

+ 18 - 16
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
 ) 

+ 4 - 30
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 ) 

+ 2 - 2
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
 ) 

+ 7 - 34
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
+)