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)

# Set the K-3D version
SET(K3D_MAJOR_VERSION 0)
SET(K3D_MINOR_VERSION 7)
SET(K3D_RELEASE_VERSION 11)
SET(K3D_BUILD_VERSION 0)

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-2008, Timothy M. Shead.  All Rights Reserved.")
SET(K3D_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX})
SET(K3D_LIBDIR lib${LIB_SUFFIX})

# Setup testing
SET(BUILD_TESTING OFF CACHE BOOL "Build the testing tree.")
INCLUDE(CTest)
MARK_AS_ADVANCED(BUILD_TESTING)
MARK_AS_ADVANCED(DART_TESTING_TIMEOUT)

IF(BUILD_TESTING)
	CMAKE_MINIMUM_REQUIRED(VERSION 2.6.1 FATAL_ERROR)
ENDIF(BUILD_TESTING)

# Detect 32/64 bit platform type
MESSAGE(STATUS "checking the width of std::vector<>::size_type for this platform")

TRY_RUN(
	K3D_PLATFORM_SIZE_TYPE
	K3D_PLATFORM_SIZE_TYPE_COMPILE
	${CMAKE_CURRENT_BINARY_DIR}
	${CMAKE_CURRENT_SOURCE_DIR}/configuration/size_type.cpp)

MESSAGE(STATUS "  std::vector<>::size_type is ${K3D_PLATFORM_SIZE_TYPE} bits")

IF(K3D_PLATFORM_SIZE_TYPE EQUAL 32)
	SET(K3D_UINT_T_32_BITS 1)
ELSEIF(K3D_PLATFORM_SIZE_TYPE EQUAL 64)
	SET(K3D_UINT_T_64_BITS 1)
ELSE(K3D_PLATFORM_SIZE_TYPE EQUAL 32)
	MESSAGE(SEND_ERROR "Error detecting platform word-size.")
ENDIF(K3D_PLATFORM_SIZE_TYPE EQUAL 32)

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

# Run tests to find external packages ...
INCLUDE(K3DFind3ds)
INCLUDE(K3DFindBoost)
INCLUDE(K3DFindCairomm)
INCLUDE(K3DFindCGAL)
INCLUDE(K3DFindCollada)
INCLUDE(K3DFindFreetype2)
INCLUDE(K3DFindFreetype2)
INCLUDE(K3DFindGlibmm)
INCLUDE(K3DFindGMM)
INCLUDE(K3DFindGnomeVFS)
INCLUDE(K3DFindGtkGLExt)
INCLUDE(K3DFindGtkmm)
INCLUDE(K3DFindGTS)
INCLUDE(K3DFindImageMagick)
INCLUDE(K3DFindIntl)
INCLUDE(K3DFindJPEG)
INCLUDE(K3DFindOpenCascade)
INCLUDE(K3DFindOpenEXR)
INCLUDE(K3DFindOpenGL)
INCLUDE(K3DFindPNG)
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 ON)
ENDIF(WIN32)

IF(UNIX AND NOT APPLE)
	SET(K3D_BUILD_INOTIFY_DEFAULT ON)
	SET(K3D_BUILD_GLX_MODULE_DEFAULT ON)
	SET(K3D_BUILD_OSX_MODULE_DEFAULT OFF)
	SET(K3D_BUILD_VIRTUAL_OFFSCREEN_MODULE_DEFAULT ON)
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_ANIMATION_MODULE "Build the animation plugin module" ON)
OPTION(K3D_BUILD_ANNOTATION_MODULE "Build the annotation plugin module" ${K3D_FREETYPE2_FOUND})
OPTION(K3D_BUILD_AQSIS_MODULE "Build the Aqsis render engine integration plugin module" ON)
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_CGAL_MODULE "Build the CGAL plugin module" ${K3D_CGAL_FOUND})
OPTION(K3D_BUILD_BUNDLED_RENDERMAN_ENGINES_MODULE "Provides integration with RenderMan-compatible render engines that are bundled with K-3D." OFF)
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_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_EULER_OPERATIONS_MODULE "Build the module that exposes the Euler mesh operations as mesh modifiers" ON)
OPTION(K3D_BUILD_INOTIFY_MODULE "Build the inotify file change notification module" ${K3D_BUILD_INOTIFY_DEFAULT})
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_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_IMAGEMAGICK_IO_MODULE "Build the ImageMagick file format module" ${K3D_IMAGEMAGICK_FOUND})
OPTION(K3D_BUILD_JPEG_IO_MODULE "Build the jpeg file format module" ${K3D_JPEG_FOUND})
OPTION(K3D_BUILD_K3DSCRIPT_MODULE "Build the k3dscript scripting language module" ON)
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_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_NAMED_ARRAYS_MODULE "Build the named arrays module" OFF)
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_COMMAND_NODE_INSPECTOR_MODULE "Build the user interface 'command node inspector' plugin module" ON)
OPTION(K3D_BUILD_NGUI_EVENT_RECORDER_MODULE "Build the user interface 'event recorder' plugin module" ON)
OPTION(K3D_BUILD_NGUI_KNIFE_TOOL_MODULE "Build the user interface 'knife tool' 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" ON)
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_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_RENDER_REGION_TOOL_MODULE "Build the user interface 'render region tool' plugin module" ON)
OPTION(K3D_BUILD_NGUI_SNAP_TOOL_MODULE "Build the user interface 'snap tool' plugin module" ON)
OPTION(K3D_BUILD_NGUI_TEXT_EDITOR_MODULE "Build the user interface text editor plugin module" ON)
OPTION(K3D_BUILD_NGUI_TEST_CASE_RECORDER_MODULE "Build the user interface test-case recorder 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_TUTORIAL_RECORDER_MODULE "Build the user interface tutorial recorder 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" ON)
OPTION(K3D_BUILD_NLS "Build K-3D with native language support" ON)
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_OBJ_IO_MODULE "Build the Wavefront .obj file format 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_FRAMEBUFFER_MODULE "Build the GL_EXT_FRAMEBUFFER offscreen rendering module" OFF)
OPTION(K3D_BUILD_OPENGL_MODULE "Build the OpenGL integration module" ON)
OPTION(K3D_BUILD_OPENGL_PAINTERS_MODULE "Build the OpenGL mesh painters module" ON)
OPTION(K3D_BUILD_OSX_MODULE "Build the Mac OSX integration plugin module" ${K3D_BUILD_OSX_MODULE_DEFAULT})
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_POINT_GROUP_MODULE "Build the point group plugin module" ON)
OPTION(K3D_BUILD_POLYHEDRA_MODULE "Build the polyhedra plugin module" ON)
OPTION(K3D_BUILD_PRIMITIVES_MODULE "Build the polygonal primitives 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_QTUI_MODULE "Build the sample Qt graphical user interface plugin" OFF)
OPTION(K3D_BUILD_QUADRICS_MODULE "Build the quadrics 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_SCALAR_MODULE "Build the scalar plugin 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_STL_IO_MODULE "Build the STL file format 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_TEXTURE_MODULE "Build the texture 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_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_BUILD_PARALLEL "Enable parallel computation using the Threaded Building Blocks library" OFF)
MARK_AS_ADVANCED(K3D_BUILD_PARALLEL)

OPTION(K3D_SYMBOL_VISIBILITY "Minimize the number of symbols exported from shared libraries" ${K3D_SYMBOL_VISIBILITY_DEFAULT})
MARK_AS_ADVANCED(K3D_SYMBOL_VISIBILITY)

OPTION(K3D_TEST_VBO "Run tests using VBO painters" OFF)
MARK_AS_ADVANCED(K3D_TEST_VBO)

# Find required external packages
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, and Boost.Regex, which may be distributed separately on some systems.")
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_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_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_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_BUILD_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_OPTIONAL_DEPENDENCY(K3D_BUILD_QUADRILATERAL_REMESHING_MODULE K3D_SUPERLU_FOUND "SuperLU")

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_COMMAND_NODE_INSPECTOR_MODULE)
K3D_CHECK_NGUI_DEPENDENCY(K3D_BUILD_NGUI_EVENT_RECORDER_MODULE)
K3D_CHECK_NGUI_DEPENDENCY(K3D_BUILD_NGUI_KNIFE_TOOL_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_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_RENDER_REGION_TOOL_MODULE)
K3D_CHECK_NGUI_DEPENDENCY(K3D_BUILD_NGUI_SNAP_TOOL_MODULE)
K3D_CHECK_NGUI_DEPENDENCY(K3D_BUILD_NGUI_TEST_CASE_RECORDER_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_TUTORIAL_RECORDER_MODULE)
K3D_CHECK_NGUI_DEPENDENCY(K3D_BUILD_NGUI_UNDO_TREE_PANEL_MODULE)
K3D_CHECK_NGUI_DEPENDENCY(K3D_BUILD_NGUI_UV_EDITOR_PANEL_MODULE)

IF(K3D_BUILD_PYTHON_MODULE OR K3D_BUILD_PYUI_MODULE)
	INCLUDE(FindPythonLibs)
#	IF(NOT Python_FOUND)
#		MESSAGE(SEND_ERROR "Couldn't find the Python libraries")
#	ENDIF(NOT Python_FOUND)
	MARK_AS_ADVANCED(PYTHON_INCLUDE_PATH)
	MARK_AS_ADVANCED(PYTHON_LIBRARY)
	MARK_AS_ADVANCED(PYTHON_DEBUG_LIBRARY)
  MARK_AS_ADVANCED(PY_MODULES_LIST)
  MARK_AS_ADVANCED(PY_STATIC_MODULES_LIST)
ENDIF(K3D_BUILD_PYTHON_MODULE OR K3D_BUILD_PYUI_MODULE)

IF(K3D_BUILD_QTUI_MODULE)
	INCLUDE(FindQt4)

	MARK_AS_ADVANCED(QT_MKSPECS_DIR)
	MARK_AS_ADVANCED(QT_PLUGINS_DIR)
	MARK_AS_ADVANCED(QT_QMAKE_EXECUTABLE)
	MARK_AS_ADVANCED(QT_X11_X11_LIBRARY)
	MARK_AS_ADVANCED(QT_X11_Xext_LIBRARY)
	MARK_AS_ADVANCED(QT_X11_m_LIBRARY)
ENDIF(K3D_BUILD_QTUI_MODULE)

K3D_CHECK_OPTIONAL_DEPENDENCY(K3D_BUILD_QTUI_MODULE QT4_FOUND "Qt4")
K3D_CHECK_OPTIONAL_DEPENDENCY(K3D_BUILD_PARALLEL K3D_TBB_FOUND "Threading Building Blocks (http://threadingbuildingblocks.org)")
K3D_CHECK_OPTIONAL_DEPENDENCY(K3D_BUILD_TIFF_IO_MODULE K3D_TIFF_FOUND "TIFF")

# Compiler configuration
IF(WIN32)
	IF(MSVC)
		SET(K3D_COMPILER_MSVC TRUE)
	ELSE(MSVC)
		SET(K3D_COMPILER_GCC TRUE)
	ENDIF(MSVC)
ELSE(WIN32)
	SET(K3D_COMPILER_GCC TRUE)
ENDIF(WIN32)

# Win32 API configuration
IF(WIN32)
	SET(K3D_API_WIN32 TRUE)
	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)

# Darwin API configuration
IF(APPLE)
	SET(K3D_API_DARWIN TRUE)
ENDIF(APPLE)

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

IF(WIN32)
	SET(LIBRARY_OUTPUT_PATH ${k3d_BINARY_DIR}/bin)
ELSE(WIN32)
	SET(LIBRARY_OUTPUT_PATH ${k3d_BINARY_DIR}/${K3D_LIBDIR})
ENDIF(WIN32)

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

	SET(INPUT_PATH "${CMAKE_CURRENT_SOURCE_DIR}/${INPUT_FILE}")
	SET(OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}/resource_${INPUT_FILE}.cpp")

	GET_TARGET_PROPERTY(K3D_RESOURCE_COMPILER k3d-resource-compiler LOCATION)

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

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

ENDMACRO(K3D_COMPILE_RESOURCE)

# Setup subdirectories ...
IF(MSVC)
	ADD_SUBDIRECTORY(gendef)
ENDIF(MSVC)

IF(BUILD_TESTING)
	ADD_SUBDIRECTORY(types)
ENDIF(BUILD_TESTING)

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(uimodules)
ADD_SUBDIRECTORY(modules)
ADD_SUBDIRECTORY(share)

IF(BUILD_TESTING)
	ADD_SUBDIRECTORY(tests)
ENDIF(BUILD_TESTING)

ADD_SUBDIRECTORY(po)
ADD_SUBDIRECTORY(distribution)
ADD_SUBDIRECTORY(docs)
ADD_SUBDIRECTORY(man)

# Hide some cruft ...
MARK_AS_ADVANCED(CMAKE_BACKWARDS_COMPATIBILITY)
MARK_AS_ADVANCED(CMAKE_EXECUTABLE_FORMAT)
MARK_AS_ADVANCED(CMAKE_OSX_ARCHITECTURES)
MARK_AS_ADVANCED(CMAKE_OSX_SYSROOT)
MARK_AS_ADVANCED(CMAKE_USE_CHRPATH)
MARK_AS_ADVANCED(EXECUTABLE_OUTPUT_PATH)
MARK_AS_ADVANCED(LIBRARY_OUTPUT_PATH)

