PROJECT(k3d)

# Configure CMake ...
CMAKE_MINIMUM_REQUIRED(VERSION 2.6 FATAL_ERROR)
CMAKE_POLICY(SET CMP0003 OLD)

SET(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules")

INCLUDE(K3DOutOfSourceBuild) # Disallow in-source builds
INCLUDE(K3DGenerateDEF) # Convenience macro for linking Win32 DLLs using MSVC
INCLUDE(K3DDependencies)
INCLUDE(K3DWordSize) # Detect 32/64 bit platform
INCLUDE(K3DCompiler) # Detect problematic compilers

# Set the K-3D version
SET(K3D_MAJOR_VERSION 0)
SET(K3D_MINOR_VERSION 8)
SET(K3D_RELEASE_VERSION 0)
SET(K3D_BUILD_VERSION 2)
SET(K3D_SO_VERSION 1)

SET(K3D_PACKAGE k3d)
SET(K3D_VERSION ${K3D_MAJOR_VERSION}.${K3D_MINOR_VERSION}.${K3D_RELEASE_VERSION}.${K3D_BUILD_VERSION})
SET(K3D_HOST ${CMAKE_SYSTEM} ${CMAKE_SYSTEM_PROCESSOR})
SET(K3D_COPYRIGHT "Copyright (c) 1995-2010, Timothy M. Shead.  All Rights Reserved.")
SET(K3D_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX})

# Setup high-level build options
IF(WIN32 AND MSVC)
	SET(K3D_ENABLE_SYMBOL_VISIBILITY_DEFAULT ON)
ELSE(WIN32 AND MSVC)
	SET(K3D_ENABLE_SYMBOL_VISIBILITY_DEFAULT OFF)
ENDIF(WIN32 AND MSVC)

# Run tests to find external packages ...
INCLUDE(K3DFind3ds)
INCLUDE(K3DFindCairomm)
INCLUDE(K3DFindCARVE)
INCLUDE(K3DFindCGAL)
INCLUDE(K3DFindCollada)
INCLUDE(K3DFindDBus)
INCLUDE(K3DFindFreetype2)
INCLUDE(K3DFindGlibmm)
INCLUDE(K3DFindGMM)
INCLUDE(K3DFindGnomeVFS)
INCLUDE(K3DFindGooglePerftools)
INCLUDE(K3DFindGtkGLExt)
INCLUDE(K3DFindGtkmm)
INCLUDE(K3DFindGtkSourceView)
INCLUDE(K3DFindGTS)
INCLUDE(K3DFindImageMagick)
INCLUDE(K3DFindInotify)
INCLUDE(K3DFindIntl)
INCLUDE(K3DFindJPEG)
INCLUDE(K3DFindODE)
INCLUDE(K3DFindOpenCascade)
INCLUDE(K3DFindOpenEXR)
INCLUDE(K3DFindOpenGL)
INCLUDE(K3DFindPNG)
INCLUDE(K3DFindPython)
INCLUDE(K3DFindSigC)
INCLUDE(K3DFindSuperLU)
INCLUDE(K3DFindTBB)
INCLUDE(K3DFindTIFF)
INCLUDE(K3DFindXML)
INCLUDE(K3DFindZlib)

# Setup module enabled/disabled defaults ...
IF(WIN32)
	SET(K3D_BUILD_GLX_MODULE_DEFAULT OFF)
	SET(K3D_BUILD_OSX_MODULE_DEFAULT OFF)
	SET(K3D_BUILD_VIRTUAL_OFFSCREEN_MODULE_DEFAULT OFF)
ENDIF(WIN32)

IF(UNIX AND NOT APPLE)
	SET(K3D_BUILD_GLX_MODULE_DEFAULT OFF)
	SET(K3D_BUILD_OSX_MODULE_DEFAULT OFF)
	SET(K3D_BUILD_VIRTUAL_OFFSCREEN_MODULE_DEFAULT OFF)
ENDIF(UNIX AND NOT APPLE)

IF(APPLE)
	SET(K3D_BUILD_GLX_MODULE_DEFAULT OFF)
	SET(K3D_BUILD_OSX_MODULE_DEFAULT ON)
	SET(K3D_BUILD_VIRTUAL_OFFSCREEN_MODULE_DEFAULT OFF)
ENDIF(APPLE)

OPTION(K3D_BUILD_3DS_IO_MODULE "Build the 3ds_io plugin module" ${K3D_3DS_FOUND})
OPTION(K3D_BUILD_ADVANCED_OPENGL_PAINTERS_MODULE "Build the advanced OpenGL mesh painters module" ON)
OPTION(K3D_BUILD_ANIMATION_MODULE "Build the animation plugin module" ON)
OPTION(K3D_BUILD_ANNOTATION_MODULE "Build the annotation plugin module" ${K3D_FREETYPE2_FOUND})
OPTION(K3D_BUILD_ARRAY_MODULE "Build the array plugin module" ON)
OPTION(K3D_BUILD_BICUBIC_PATCH_MODULE "Build the bicubic patch plugin module" ON)
OPTION(K3D_BUILD_BILINEAR_PATCH_MODULE "Build the bilinear patch plugin module" ON)
OPTION(K3D_BUILD_BITMAP_MODULE "Build the bitmap plugin module" ON)
OPTION(K3D_BUILD_BLOBBY_MODULE "Build the blobby plugin module" ON)
OPTION(K3D_BUILD_BUNDLED_RENDERMAN_ENGINES_MODULE "Provides integration with RenderMan-compatible render engines that are bundled with K-3D." OFF)
OPTION(K3D_BUILD_CARVE_MODULE "Build the CARVE plugin module" ${K3D_CARVE_FOUND})
OPTION(K3D_BUILD_CGAL_MODULE "Build the CGAL plugin module" ${K3D_CGAL_FOUND})
OPTION(K3D_BUILD_CLOTH_MODULE "Build the cloth plugin module" ON)
OPTION(K3D_BUILD_COLLADA_IO_MODULE "Build the COLLADA plugin module" ${K3D_COLLADA_FOUND})
OPTION(K3D_BUILD_COMPIZ_MODULE "Build the Compiz plugin module" ${K3D_DBUS_FOUND})
OPTION(K3D_BUILD_CORE_MODULE "Build the core plugin module" ON)
OPTION(K3D_BUILD_CUDA_MODULE "Build the cuda plugin module" OFF)
OPTION(K3D_BUILD_DEFORMATION_MODULE "Build the mesh deformation plugin module" ON)
OPTION(K3D_BUILD_DEVELOPMENT_MODULE "Build the development plugin module" ON)
OPTION(K3D_BUILD_DOUBLE_MODULE "Build the double plugin module" ON)
OPTION(K3D_BUILD_EULER_OPERATIONS_MODULE "Build the module that exposes the Euler mesh operations as mesh modifiers" OFF)
OPTION(K3D_BUILD_FILE_MAGIC_MODULE "Build the file-identification-magic module" ON)
OPTION(K3D_BUILD_FREETYPE2_MODULE "Build the freetype2 plugin module" ON)
OPTION(K3D_BUILD_GLX_MODULE "Build the GLX offscreen rendering module" ${K3D_BUILD_GLX_MODULE_DEFAULT})
OPTION(K3D_BUILD_GNOME_MODULE "Build the GNOME integration plugin module" ${K3D_GNOME_VFS_FOUND})
OPTION(K3D_BUILD_GOOGLE_PERFTOOLS_MODULE "Build the Google Perftools profiling module" ${K3D_GOOGLE_PERFTOOLS_FOUND})
OPTION(K3D_BUILD_GRAPHVIZ_MODULE "Build the GraphViz integration plugin module" ON)
OPTION(K3D_BUILD_GTS_IO_MODULE "Build the GNU Triangulated Surfaces file format module" ON)
OPTION(K3D_BUILD_GTS_MODULE "Build the GNU Triangulated Surfaces plugin module" ${K3D_GTS_FOUND})
OPTION(K3D_BUILD_HIGHLIGHTING_MODULE "Build the user interface 'highlighting' plugin module" ON)
OPTION(K3D_BUILD_IMAGEMAGICK_IO_MODULE "Build the ImageMagick file format module" ${K3D_IMAGEMAGICK_FOUND})
OPTION(K3D_BUILD_INDIGO_MODULE "Build the Indigo render engine integration module" ON)
OPTION(K3D_BUILD_INOTIFY_MODULE "Build the inotify file change notification module" ${K3D_INOTIFY_FOUND})
OPTION(K3D_BUILD_JPEG_IO_MODULE "Build the jpeg file format module" ${K3D_JPEG_FOUND})
OPTION(K3D_BUILD_K3D_IO_MODULE "Build the K-3D file format module" ON)
OPTION(K3D_BUILD_LINEAR_CURVE_MODULE "Build the linear curve plugin module" ON)
OPTION(K3D_BUILD_LIPSYNC_MODULE "Build the lip synchronization tools module" ON)
OPTION(K3D_BUILD_LSYSTEM_MODULE "Build the l-system parser module" ON)
OPTION(K3D_BUILD_LUXRENDER_MODULE "Build the Luxrender render enegine integration module" ON)
OPTION(K3D_BUILD_MATRIX_MODULE "Build the matrix operations module" ON)
OPTION(K3D_BUILD_MD2_IO_MODULE "Build the md2 io plugin module" ON)
OPTION(K3D_BUILD_MESH_ATTRIBUTES_MODULE "Build the mesh attributes plugin module" ON)
OPTION(K3D_BUILD_MESH_INSTANCE_MODULE "Build the mesh-instance plugin module" ON)
OPTION(K3D_BUILD_MESH_MODULE "Build the mesh plugin module" ON)
OPTION(K3D_BUILD_NGUI_ABOUT_MODULE "Build the user interface 'about' dialog plugin module" ON)
OPTION(K3D_BUILD_NGUI_ANIMATION_TIMELINE_PANEL_MODULE "Build the experimental animation timeline panel plugin module" ON)
OPTION(K3D_BUILD_NGUI_ASSIGN_HOTKEYS_MODULE "Build the user interface 'assign hotkeys' plugin module" ON)
OPTION(K3D_BUILD_NGUI_ATK_EVENT_RECORDER_MODULE "Build the user interface ATK 'event recorder' plugin module" OFF)
OPTION(K3D_BUILD_NGUI_KNOT_VECTOR_CONTROL_MODULE "Build the custom knot-vector property control plugin module" ON)
OPTION(K3D_BUILD_NGUI_LEARNING_MODULE "Build the user interface learning (tutorial) dialog plugin module" ON)
OPTION(K3D_BUILD_NGUI_LOG_MODULE "Build the user interface log window plugin module" ON)
OPTION(K3D_BUILD_NGUI_MATERIAL_MANAGER_PANEL_MODULE "Build the user interface manager manager panel plugin module" OFF)
OPTION(K3D_BUILD_NGUI_MESH_CONTROL_MODULE "Build the mesh property control plugin module" ON)
OPTION(K3D_BUILD_NGUI_MODULE "Build the standard graphical user interface plugin module" ON)
OPTION(K3D_BUILD_NGUI_MORPH_POINTS_PAGE_MODULE "Build the MorphPoints custom property page module" ON)
OPTION(K3D_BUILD_NGUI_NODE_HISTORY_PANEL_MODULE "Build the user interface node history panel plugin module" ON)
OPTION(K3D_BUILD_NGUI_NODE_LIST_PANEL_MODULE "Build the user interface node list panel plugin module" ON)
OPTION(K3D_BUILD_NGUI_NODE_PROPERTIES_PANEL_MODULE "Build the user interface node properties panel plugin module" ON)
OPTION(K3D_BUILD_NGUI_OPENGL_DIALOG_MODULE "Build the user interface OpenGL information dialog plugin module" ON)
OPTION(K3D_BUILD_NGUI_PARENT_TOOL_MODULE "Build the user interface 'parent tool' plugin module" ON)
OPTION(K3D_BUILD_NGUI_PIPELINE_PANEL_MODULE "Build the user interface pipeline display panel plugin module" ON)
OPTION(K3D_BUILD_NGUI_PIPELINE_PROFILER_PANEL_MODULE "Build the user interface pipeline profiler panel plugin module" ON)
OPTION(K3D_BUILD_NGUI_PYTHON_SHELL_MODULE "Build the interactive Python shell plugin module" ON)
OPTION(K3D_BUILD_NGUI_RECTANGLE_CONTROL_MODULE "Build the custom rectangle property control plugin module" ON)
OPTION(K3D_BUILD_NGUI_RENDER_REGION_TOOL_MODULE "Build the user interface 'render region tool' plugin module" ON)
OPTION(K3D_BUILD_NGUI_SELECTION_CONTROL_MODULE "Build the selection property control plugin module" ON)
OPTION(K3D_BUILD_NGUI_SNAP_TOOL_MODULE "Build the user interface 'snap tool' plugin module" ON)
OPTION(K3D_BUILD_NGUI_SPACE_NAVIGATOR_MODULE "Build the SpaceNavigator 3D mouse integration module" OFF)
OPTION(K3D_BUILD_NGUI_TEXT_EDITOR_MODULE "Build the user interface text editor plugin module" ON)
OPTION(K3D_BUILD_NGUI_TIMELINE_PANEL_MODULE "Build the user interface timeline panel plugin module" ON)
OPTION(K3D_BUILD_NGUI_TOOLBAR_PANEL_MODULE "Build the user interface toolbar panel plugin module" ON)
OPTION(K3D_BUILD_NGUI_TOOL_PROPERTIES_PANEL_MODULE "Build the user interface tool properties panel plugin module" ON)
OPTION(K3D_BUILD_NGUI_UNDO_TREE_PANEL_MODULE "Build the user interface undo panel plugin module" ON)
OPTION(K3D_BUILD_NGUI_UV_EDITOR_PANEL_MODULE "Build the user interface UV editor panel plugin module" OFF)
OPTION(K3D_BUILD_NUI_MODULE "Build the Null User Interface module" ON)
OPTION(K3D_BUILD_NURBS_MODULE "Build the NURBS plugin module" ON)
OPTION(K3D_BUILD_NURBS_SOURCES_MODULE "Build the NURBS sources plugin module" ON)
OPTION(K3D_BUILD_OBJ_IO_MODULE "Build the Wavefront .obj file format module" ON)
OPTION(K3D_BUILD_ODE_MODULE "Build the Open Dynamics Engine (ODE) integration module" ${K3D_ODE_FOUND})
OPTION(K3D_BUILD_OGRE_IO_MODULE "Build the Object-oriented Graphics Engine (OGRE) file I/O module" ON)
OPTION(K3D_BUILD_OPENCASCADE_MODULE "Build the OpenCascade module" ${K3D_OPENCASCADE_FOUND})
OPTION(K3D_BUILD_OPENEXR_IO_MODULE "Build the OpenEXR file format module" ${K3D_OPENEXR_FOUND})
OPTION(K3D_BUILD_OPENGL_MODULE "Build the OpenGL integration module" ON)
OPTION(K3D_BUILD_OSX_MODULE "Build the Mac OSX integration plugin module" ${K3D_BUILD_OSX_MODULE_DEFAULT})
OPTION(K3D_BUILD_PARTICLE_MODULE "Build the point group plugin module" ON)
OPTION(K3D_BUILD_PDIFF_MODULE "Build the perceptual-diff plugin module" ON)
OPTION(K3D_BUILD_PIXIE_MODULE "Build the Pixie render engine integration module" ON)
OPTION(K3D_BUILD_PLOT_MODULE "Build the function-plot module" ON)
OPTION(K3D_BUILD_PLY_IO_MODULE "Build the Stanford .ply file format module" ON)
OPTION(K3D_BUILD_PNG_IO_MODULE "Build the PNG file format module" ON)
OPTION(K3D_BUILD_POLYHEDRON_MODULE "Build the polyhedron plugin module" ON)
OPTION(K3D_BUILD_POLYHEDRON_SOURCES_MODULE "Build the polyhedron sources module" ON)
OPTION(K3D_BUILD_PYTHON_MODULE "Build the Python scripting language module" ON)
OPTION(K3D_BUILD_PYUI_MODULE "Build the Python user interface plugin" ON)
OPTION(K3D_BUILD_QSLIM_MODULE "Build the qslim module" ON)
OPTION(K3D_BUILD_QUADRICS_MODULE "Build the quadrics module" ON)
OPTION(K3D_BUILD_REFERENCE_OPENGL_PAINTERS_MODULE "Build the reference OpenGL mesh painters module" ON)
OPTION(K3D_BUILD_RENDERMAN_ENGINES_MODULE "Provides integration with many RenderMan-compatible render engines." ON)
OPTION(K3D_BUILD_RENDERMAN_MODULE "Build the RenderMan integration module" ON)
OPTION(K3D_BUILD_RENDERMAN_PAINTERS_MODULE "Build the RenderMan mesh painters module" ON)
OPTION(K3D_BUILD_RELEASE_MODULE "Build the release nag-messages module" ON)
OPTION(K3D_BUILD_SCRIPTED_PLUGINS_MODULE "Build the scripted plugins module" ON)
OPTION(K3D_BUILD_SCRIPTING_MODULE "Build the scripting plugin module" ON)
OPTION(K3D_BUILD_SELECTION_MODULE "Build the selection plugin module" ON)
OPTION(K3D_BUILD_SOLAR_MODULE "Build the solar plugin module" ON)
OPTION(K3D_BUILD_STL_IO_MODULE "Build the STL file format module" ON)
OPTION(K3D_BUILD_SUBDIVISION_SURFACE_MODULE "Build the subdivision surface module" ON)
OPTION(K3D_BUILD_SVG_IO_MODULE "Build the SVG file format module" ON)
OPTION(K3D_BUILD_TEST_MODULE "Build the regression test plugin module" ON)
OPTION(K3D_BUILD_TIFF_IO_MODULE "Build the TIFF file format module" ON)
OPTION(K3D_BUILD_TIME_MODULE "Build the time source plugin module" ON)
OPTION(K3D_BUILD_UNIFORM_POLYHEDRON_MODULE "Build the uniform polyhedron source plugin module" ON)
OPTION(K3D_BUILD_VIRTUAL_OFFSCREEN_MODULE "Build the virtual offscreen OpenGL rendering module" ${K3D_BUILD_VIRTUAL_OFFSCREEN_MODULE_DEFAULT})
OPTION(K3D_BUILD_VIRTUAL_OPENGL_PAINTERS_MODULE "Build virtual OpenGL painters modules" ON)
OPTION(K3D_BUILD_WGL_MODULE "Build the Windows offscreen rendering module" ${WIN32})
OPTION(K3D_BUILD_WINDOWS_MODULE "Build the Windows integration module" ${WIN32})
OPTION(K3D_BUILD_XTRACKCAD_MODULE "Build the XTrackCAD Model Railroad integration module" ON)
OPTION(K3D_BUILD_YAFRAY_MODULE "Build the YAFRAY render engine integration module" ON)

OPTION(K3D_ENABLE_NLS "Build K-3D with native language support" ON)

OPTION(K3D_ENABLE_PARALLEL "Enable parallel computation using the Threaded Building Blocks library." OFF)
MARK_AS_ADVANCED(K3D_ENABLE_PARALLEL)

OPTION(K3D_ENABLE_PROFILING "Enable code profiling using Google Perftools." OFF)
MARK_AS_ADVANCED(K3D_ENABLE_PROFILING)

OPTION(K3D_ENABLE_PYTHON "Build K-3D with Python support" ON)

OPTION(K3D_ENABLE_SYMBOL_VISIBILITY "Minimize the number of symbols exported from shared libraries." ${K3D_ENABLE_SYMBOL_VISIBILITY_DEFAULT})
MARK_AS_ADVANCED(K3D_ENABLE_SYMBOL_VISIBILITY)

OPTION(K3D_ENABLE_TESTING "Build the K-3D regression test suite." OFF)
SET(BUILD_TESTING ${K3D_ENABLE_TESTING} CACHE INTERNAL "" FORCE)
INCLUDE(CTest)
MARK_AS_ADVANCED(DART_TESTING_TIMEOUT)
IF(K3D_ENABLE_TESTING)
	CMAKE_MINIMUM_REQUIRED(VERSION 2.6.1 FATAL_ERROR)
	CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/CTestCustom.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/CTestCustom.cmake @ONLY)
ENDIF(K3D_ENABLE_TESTING)

# Find required external packages
K3D_CHECK_REQUIRED_DEPENDENCY(K3D_GLIBMM_FOUND "glibmm" "http://gtkmm.org" "")
K3D_CHECK_REQUIRED_DEPENDENCY(K3D_OPENGL_FOUND "OpenGL" "http://opengl.org" "")
K3D_CHECK_REQUIRED_DEPENDENCY(K3D_OPENGL_GLU_FOUND "OpenGL GLU" "http://opengl.org" "")
K3D_CHECK_REQUIRED_DEPENDENCY(K3D_SIGC_FOUND "libsigc++" "http://libsigc.sourceforge.net" "")
K3D_CHECK_REQUIRED_DEPENDENCY(K3D_XML_FOUND "XML parser" "http://xmlsoft.org" "")
K3D_CHECK_REQUIRED_DEPENDENCY(K3D_ZLIB_FOUND "zlib" "http://www.zlib.net" "")

IF(NOT WIN32)
	INCLUDE(K3DFindUUID)
	K3D_CHECK_REQUIRED_DEPENDENCY(K3D_UUID_FOUND "uuid" "http://www.ossp.org/pkg/lib/uuid" "")
ENDIF(NOT WIN32)

K3D_CHECK_OPTIONAL_DEPENDENCY(K3D_BUILD_3DS_IO_MODULE K3D_3DS_FOUND "lib3ds")
K3D_CHECK_OPTIONAL_DEPENDENCY(K3D_BUILD_ANNOTATION_MODULE K3D_FREETYPE2_FOUND "freetype2")
K3D_CHECK_OPTIONAL_DEPENDENCY(K3D_BUILD_CARVE_MODULE K3D_CARVE_FOUND "CARVE")
K3D_CHECK_OPTIONAL_DEPENDENCY(K3D_BUILD_CGAL_MODULE K3D_CGAL_FOUND "CGAL")
K3D_CHECK_OPTIONAL_DEPENDENCY(K3D_BUILD_COLLADA_MODULE K3D_COLLADA_FOUND "Collada DOM")
K3D_CHECK_OPTIONAL_DEPENDENCY(K3D_BUILD_COMPIZ_MODULE K3D_DBUS_FOUND "libdbus")
K3D_CHECK_OPTIONAL_DEPENDENCY(K3D_BUILD_FREETYPE2_MODULE K3D_FREETYPE2_FOUND "freetype2")
K3D_CHECK_OPTIONAL_DEPENDENCY(K3D_BUILD_GNOME_MODULE K3D_GNOME_VFS_FOUND "Gnome VFS")
K3D_CHECK_OPTIONAL_DEPENDENCY(K3D_BUILD_GOOGLE_PERFTOOLS_MODULE K3D_GOOGLE_PERFTOOLS_FOUND "Gnome VFS")
K3D_CHECK_OPTIONAL_DEPENDENCY(K3D_BUILD_GTS_MODULE K3D_GTS_FOUND "GNU Triangulated Surface")
K3D_CHECK_OPTIONAL_DEPENDENCY(K3D_BUILD_IMAGEMAGICK_IO_MODULE K3D_IMAGEMAGICK_FOUND "ImageMagick")
K3D_CHECK_OPTIONAL_DEPENDENCY(K3D_BUILD_JPEG_IO_MODULE K3D_JPEG_FOUND "JPEG")
K3D_CHECK_OPTIONAL_DEPENDENCY(K3D_BUILD_NGUI_MODULE K3D_GTKGLEXT_FOUND "gtkglext")
K3D_CHECK_OPTIONAL_DEPENDENCY(K3D_BUILD_NGUI_MODULE K3D_GTKMM_FOUND "gtkmm")
K3D_CHECK_OPTIONAL_DEPENDENCY(K3D_BUILD_NGUI_PIPELINE_PANEL_MODULE K3D_CAIROMM_FOUND "cairomm")
K3D_CHECK_OPTIONAL_DEPENDENCY(K3D_ENABLE_NLS K3D_INTL_FOUND "intl")
K3D_CHECK_OPTIONAL_DEPENDENCY(K3D_BUILD_OPENCASCADE_MODULE K3D_OPENCASCADE_FOUND "OpenCASCADE")
K3D_CHECK_OPTIONAL_DEPENDENCY(K3D_BUILD_OPENEXR_IO_MODULE K3D_OPENEXR_FOUND "OpenEXR")
K3D_CHECK_OPTIONAL_DEPENDENCY(K3D_BUILD_PGP_REMESH_MODULE K3D_GMM_FOUND "gmm")
K3D_CHECK_OPTIONAL_DEPENDENCY(K3D_BUILD_PNG_IO_MODULE K3D_PNG_FOUND "PNG")

K3D_CHECK_NGUI_DEPENDENCY(K3D_BUILD_NGUI_ABOUT_MODULE)
K3D_CHECK_NGUI_DEPENDENCY(K3D_BUILD_NGUI_ANIMATION_TIMELINE_PANEL_MODULE)
K3D_CHECK_NGUI_DEPENDENCY(K3D_BUILD_NGUI_ASSIGN_HOTKEYS_MODULE)
K3D_CHECK_NGUI_DEPENDENCY(K3D_BUILD_NGUI_ATK_EVENT_RECORDER_MODULE)
K3D_CHECK_NGUI_DEPENDENCY(K3D_BUILD_NGUI_KNOT_VECTOR_CONTROL_MODULE)
K3D_CHECK_NGUI_DEPENDENCY(K3D_BUILD_NGUI_LEARNING_MODULE)
K3D_CHECK_NGUI_DEPENDENCY(K3D_BUILD_NGUI_LOG_MODULE)
K3D_CHECK_NGUI_DEPENDENCY(K3D_BUILD_NGUI_MESH_CONTROL_MODULE)
K3D_CHECK_NGUI_DEPENDENCY(K3D_BUILD_NGUI_MODULE)
K3D_CHECK_NGUI_DEPENDENCY(K3D_BUILD_NGUI_MORPH_POINTS_PAGE_MODULE)
K3D_CHECK_NGUI_DEPENDENCY(K3D_BUILD_NGUI_NODE_HISTORY_PANEL_MODULE)
K3D_CHECK_NGUI_DEPENDENCY(K3D_BUILD_NGUI_NODE_LIST_PANEL_MODULE)
K3D_CHECK_NGUI_DEPENDENCY(K3D_BUILD_NGUI_NODE_PROPERTIES_PANEL_MODULE)
K3D_CHECK_NGUI_DEPENDENCY(K3D_BUILD_NGUI_OPENGL_DIALOG_MODULE)
K3D_CHECK_NGUI_DEPENDENCY(K3D_BUILD_NGUI_PARENT_TOOL_MODULE)
K3D_CHECK_NGUI_DEPENDENCY(K3D_BUILD_NGUI_PIPELINE_PANEL_MODULE)
K3D_CHECK_NGUI_DEPENDENCY(K3D_BUILD_NGUI_PIPELINE_PROFILER_PANEL_MODULE)
K3D_CHECK_NGUI_DEPENDENCY(K3D_BUILD_NGUI_PYTHON_SHELL_MODULE)
K3D_CHECK_NGUI_DEPENDENCY(K3D_BUILD_NGUI_RECTANGLE_CONTROL_MODULE)
K3D_CHECK_NGUI_DEPENDENCY(K3D_BUILD_NGUI_RENDER_REGION_TOOL_MODULE)
K3D_CHECK_NGUI_DEPENDENCY(K3D_BUILD_NGUI_SELECTION_CONTROL_MODULE)
K3D_CHECK_NGUI_DEPENDENCY(K3D_BUILD_NGUI_SNAP_TOOL_MODULE)
K3D_CHECK_NGUI_DEPENDENCY(K3D_BUILD_NGUI_SPACE_NAVIGATOR_MODULE)
K3D_CHECK_NGUI_DEPENDENCY(K3D_BUILD_NGUI_TEXT_EDITOR_MODULE)
K3D_CHECK_NGUI_DEPENDENCY(K3D_BUILD_NGUI_TIMELINE_PANEL_MODULE)
K3D_CHECK_NGUI_DEPENDENCY(K3D_BUILD_NGUI_TOOLBAR_PANEL_MODULE)
K3D_CHECK_NGUI_DEPENDENCY(K3D_BUILD_NGUI_TOOL_PROPERTIES_PANEL_MODULE)
K3D_CHECK_NGUI_DEPENDENCY(K3D_BUILD_NGUI_UNDO_TREE_PANEL_MODULE)
K3D_CHECK_NGUI_DEPENDENCY(K3D_BUILD_NGUI_UV_EDITOR_PANEL_MODULE)

INCLUDE(K3DFindBoost)
K3D_CHECK_REQUIRED_DEPENDENCY(K3D_BOOST_FOUND "Boost" "http://www.boost.org" "Note: in addition to the main Boost libraries, K-3D requires Boost.Program_options, Boost.Python, Boost.Regex, and Boost.UnitTest which may be distributed separately on some systems.")

IF(K3D_BUILD_PYTHON_MODULE AND NOT K3D_ENABLE_PYTHON)
	MESSAGE(SEND_ERROR "K3D_BUILD_PYTHON_MODULE requires K3D_ENABLE_PYTHON")
ENDIF()

IF(K3D_BUILD_PYUI_MODULE AND NOT K3D_ENABLE_PYTHON)
	MESSAGE(SEND_ERROR "K3D_BUILD_PYUI_MODULE requires K3D_ENABLE_PYTHON")
ENDIF()

IF(K3D_BUILD_NGUI_PYTHON_SHELL_MODULE AND NOT K3D_ENABLE_PYTHON)
	MESSAGE(SEND_ERROR "K3D_BUILD_NGUI_PYTHON_SHELL_MODULE requires K3D_ENABLE_PYTHON")
ENDIF()

IF(K3D_ENABLE_PYTHON AND NOT K3D_PYTHON_FOUND)
	MESSAGE(SEND_ERROR "K3D_ENABLE_PYTHON cannot locate Python.")
ENDIF()

K3D_CHECK_OPTIONAL_DEPENDENCY(K3D_ENABLE_PARALLEL K3D_TBB_FOUND "Threading Building Blocks (http://threadingbuildingblocks.org)")
K3D_CHECK_OPTIONAL_DEPENDENCY(K3D_ENABLE_PROFILING K3D_GOOGLE_PERFTOOLS_FOUND "Google Perftools (http://code.google.com/p/google-perftools)")
K3D_CHECK_OPTIONAL_DEPENDENCY(K3D_BUILD_TIFF_IO_MODULE K3D_TIFF_FOUND "TIFF")

# Capture system configuration
INCLUDE(K3DSystemConfiguration)

# Win32 configuration
IF(WIN32)
	IF(NOT MSVC)
		SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--enable-runtime-pseudo-reloc" CACHE STRING "" FORCE)
		SET(CMAKE_SHARED_LINKER_FLAGS "-Wl,--enable-runtime-pseudo-reloc -Wl,--export-all-symbols" CACHE STRING "" FORCE)
	ENDIF(NOT MSVC)
ENDIF(WIN32)

# Setup output directories ...
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${k3d_BINARY_DIR}/bin)

SET(K3D_LIBDIR lib) # Allows us to handle 64-bit libs if/when it becomes necessary.
IF(WIN32)
	SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${k3d_BINARY_DIR}/bin)
ELSE(WIN32)
	SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${k3d_BINARY_DIR}/${K3D_LIBDIR})
ENDIF(WIN32)

# Setup a macro for compiling resources ...
MACRO(K3D_COMPILE_RESOURCE OUTPUT INPUT RESOURCE_PATH)

	SET(INPUT_FILE "${CMAKE_CURRENT_SOURCE_DIR}/${INPUT}")
	SET(OUTPUT_FILE "${CMAKE_CURRENT_BINARY_DIR}/${INPUT}.cpp")
	GET_FILENAME_COMPONENT(OUTPUT_PATH ${OUTPUT_FILE} PATH)

	GET_TARGET_PROPERTY(K3D_RESOURCE_COMPILER k3d-resource-compiler LOCATION)

	ADD_CUSTOM_COMMAND(
		DEPENDS k3d-resource-compiler
		DEPENDS ${INPUT_FILE}
		COMMAND ${CMAKE_COMMAND} -E make_directory ${OUTPUT_PATH}
		COMMAND ${K3D_RESOURCE_COMPILER} --input ${INPUT_FILE} --path \"<path>${RESOURCE_PATH}</path>\" --output ${OUTPUT_FILE}
		OUTPUT ${OUTPUT_FILE}
		COMMENT "Compiling resource ${INPUT_FILE}"
		)

	LIST(APPEND ${OUTPUT} ${OUTPUT_FILE})

ENDMACRO(K3D_COMPILE_RESOURCE)

# Setup subdirectories ...
K3D_CONDITIONAL_BUILD(MSVC gendef)

ADD_SUBDIRECTORY(k3dsdk)
ADD_SUBDIRECTORY(resource-compiler)

ADD_SUBDIRECTORY(application)
ADD_SUBDIRECTORY(make-module-proxy)
ADD_SUBDIRECTORY(renderjob)
ADD_SUBDIRECTORY(renderframe)
ADD_SUBDIRECTORY(sl2xml)
ADD_SUBDIRECTORY(uuidgen)
ADD_SUBDIRECTORY(modules)
ADD_SUBDIRECTORY(share)

K3D_CONDITIONAL_BUILD(K3D_ENABLE_TESTING tests)
K3D_CONDITIONAL_BUILD(K3D_ENABLE_NLS po)

ADD_SUBDIRECTORY(bugs)
ADD_SUBDIRECTORY(docs)
ADD_SUBDIRECTORY(man)
ADD_SUBDIRECTORY(web)

OPTION(K3D_ENABLE_DISTRIBUTION "Enable distribution targets." OFF)
K3D_CONDITIONAL_BUILD(K3D_ENABLE_DISTRIBUTION distribution)

# Hide some cruft ...
MARK_AS_ADVANCED(CMAKE_BACKWARDS_COMPATIBILITY)
MARK_AS_ADVANCED(CMAKE_EXECUTABLE_FORMAT)
MARK_AS_ADVANCED(CMAKE_LIBRARY_OUTPUT_DIRECTORY)
MARK_AS_ADVANCED(CMAKE_OSX_ARCHITECTURES)
MARK_AS_ADVANCED(CMAKE_OSX_DEPLOYMENT_TARGET)
MARK_AS_ADVANCED(CMAKE_OSX_SYSROOT)
MARK_AS_ADVANCED(CMAKE_RUNTIME_OUTPUT_DIRECTORY)
MARK_AS_ADVANCED(CMAKE_USE_CHRPATH)

