#
# $Id: CMakeLists.txt,v 1.1.1.1 2006/12/19 22:58:33 christianh Exp $
#
# The name of our project is "SVV".  CMakeLists files in this project can
# refer to the root source directory of the project as ${SVV_SOURCE_DIR} 
# and to the root binary directory of the project as ${SVV_BINARY_DIR}.
#
CMAKE_MINIMUM_REQUIRED (VERSION 1.6)
PROJECT (SVV)

# -----------------------------------------------------------------------------
# Don't build anything unless the version of CMake is high enough.
# The matching ELSE/ENDIF should be the last lines in the file.
#
IF("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" GREATER 1.5)

# -----------------------------------------------------------------------------
# SV version number.  An even minor number corresponds to releases.
# 
SET (SVV_MAJOR_VERSION 0)
SET (SVV_MINOR_VERSION 3)
SET (SVV_MICRO_VERSION 1)
SET (SVV_PATCH_VERSION 0)
SET (SVV_VERSION "${SVV_MAJOR_VERSION}.${SVV_MINOR_VERSION}.${SVV_MICRO_VERSION}")
SET (SVV_RPM_VERSION "${SVV_VERSION}-${SVV_PATCH_VERSION}")

#-----------------------------------------------------------------------------
# Location of CMake configuration files.
#
SET (SVV_CMAKE_DIR ${SVV_SOURCE_DIR}/CMake)

#-----------------------------------------------------------------------------
# Output directories.
#
SET (LIBRARY_OUTPUT_PATH ${SVV_BINARY_DIR}/bin CACHE PATH
  "Output directory for building the vtkMrml library.")
SET (EXECUTABLE_OUTPUT_PATH ${SVV_BINARY_DIR}/bin CACHE PATH
  "Single output directory for building all executables.")
MARK_AS_ADVANCED (LIBRARY_OUTPUT_PATH EXECUTABLE_OUTPUT_PATH)

SET (SVV_LIBRARY_DIR ${LIBRARY_OUTPUT_PATH}/${CMAKE_CFG_INTDIR})
SET (SVV_EXECUTABLE_DIR ${EXECUTABLE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR})
SET (CXX_TEST_PATH ${EXECUTABLE_OUTPUT_PATH})

# Put "." in the rpath of all vtkMrml shared libraries.
LINK_DIRECTORIES (.)

# -----------------------------------------------------------------------------
# Debug Build?
#
IF (${CMAKE_BUILD_TYPE} MATCHES "Debug")
  ADD_DEFINITIONS (-DSVV_DEBUG)
ENDIF (${CMAKE_BUILD_TYPE} MATCHES "Debug")

# -----------------------------------------------------------------------------
# Choose static or shared libraries.
#
OPTION (BUILD_SHARED_LIBS "Build vtkMrml with shared libraries." OFF)
SET (SVV_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS} CACHE INTERNAL
     "Is SV to be built with shared libraries.")

#-----------------------------------------------------------------------------
# Load some macros.
#
INCLUDE (${SVV_CMAKE_DIR}/svvMacros.cmake)

# -----------------------------------------------------------------------------
# SV requires VTK.
#
INCLUDE (${CMAKE_ROOT}/Modules/FindVTK.cmake)
IF (VTK_FOUND)
  INCLUDE (${VTK_USE_FILE})
ELSE (VTK_FOUND)
  SET (CAN_BUILD 0)
ENDIF (VTK_FOUND)

# -----------------------------------------------------------------------------
# SV requires vtkExtensions
#
FIND_AND_USE_PACKAGE (VTK_EXTENSIONS vtkExtensions vtkExtensions)

# -----------------------------------------------------------------------------
# Should SV support MRML?
#
OPTION (SVV_SUPPORT_MRML "Build MRML support for SV." ON)
MARK_AS_ADVANCED (SVV_SUPPORT_MRML)
IF (SVV_SUPPORT_MRML)
  FIND_AND_USE_PACKAGE (VTK_MRML vtkMrml vtkMrml)
ENDIF (SVV_SUPPORT_MRML)

# -----------------------------------------------------------------------------
# Source code shared between SV implementations.
#
INCLUDE_DIRECTORIES (${SVV_SOURCE_DIR}/common ${SVV_BINARY_DIR}/common)

# -----------------------------------------------------------------------------
# Recurse into the subdirectories.
#
SUBDIRS (Utilities common)

# -----------------------------------------------------------------------------
# Build with extra XML junk?
#
OPTION (SVV_BUILD_XML "Build extra SV XML junk." OFF)
MARK_AS_ADVANCED (SVV_BUILD_XML)
IF (SVV_BUILD_XML)
  SUBDIRS (xml)
ENDIF (SVV_BUILD_XML)

# -----------------------------------------------------------------------------
# Build the widgets?
#
OPTION (SVV_BUILD_WIDGETS "Build SV FLTK Widgets." ON)
MARK_AS_ADVANCED (SVV_BUILD_WIDGETS)
IF (SVV_BUILD_WIDGETS)
  FIND_AND_USE_PACKAGE (VTK_FLTK vtkFLTK vtkFLTK)

  SUBDIRS (widgets)

  INCLUDE_DIRECTORIES (
    ${SVV_SOURCE_DIR}/widgets
    ${SVV_BINARY_DIR}/widgets
    ${SVV_SOURCE_DIR}/widgets/Fl_Color_Chooser_A
    ${SVV_SOURCE_DIR}/widgets/Fl_Toggle_Tree
    )
ENDIF (SVV_BUILD_WIDGETS)

# -----------------------------------------------------------------------------
# Build the utilities?
#
OPTION (SVV_BUILD_UTILS "Build SV-related utilites." OFF)
IF (SVV_BUILD_UTILS)
  SUBDIRS (utils)
ENDIF (SVV_BUILD_UTILS)

# -----------------------------------------------------------------------------
# Build minisv?
#
OPTION (SVV_BUILD_MINISV "Build minisv." ON)
IF (SVV_BUILD_MINISV)
  SUBDIRS (minisv)
ENDIF (SVV_BUILD_MINISV)

# -----------------------------------------------------------------------------
# Build svv?
#
OPTION (SVV_BUILD_SV "Build SV (maxi)." OFF)
MARK_AS_ADVANCED (SVV_BUILD_SVV)
IF (SVV_BUILD_SV)
  SUBDIRS (sv)
ENDIF (SVV_BUILD_SV)

# -----------------------------------------------------------------------------
# Set some compiler flags which quiet extraneous warnings.
#
SET (SVV_REQUIRED_CXX_FLAGS "")
SET (SVV_REQUIRED_C_FLAGS "")
SET (SVV_REQUIRED_EXE_LINKER_FLAGS "")

IF (CMAKE_COMPILER_IS_GNUCXX)
  MESSAGE (STATUS "Compiler is g++.")
  # A GCC compiler.  Quiet warning about strstream deprecation.
  SET (SVV_REQUIRED_CXX_FLAGS
    "${SVV_REQUIRED_CXX_FLAGS} -Wno-deprecated")

  IF (WIN32)
    # The platform is gcc on cygwin.
    SET (VTK_REQUIRED_CXX_FLAGS "${SVV_REQUIRED_CXX_FLAGS} -mwin32")
    SET (VTK_REQUIRED_C_FLAGS "${SVV_REQUIRED_C_FLAGS} -mwin32")
  ENDIF (WIN32)

  IF (MINGW)
    LINK_LIBRARIES (-lgdi32)
  ENDIF (MINGW)

  IF (CMAKE_SYSTEM MATCHES "SunOS.*")
    # Disable warnings that occur in X11 headers.
    SET (SVV_REQUIRED_CXX_FLAGS
      "${SVV_REQUIRED_CXX_FLAGS} -Wno-unknown-pragmas")
    MESSAGE (STATUS "g++ flags: ${SVV_REQUIRED_CXX_FLAGS}.")
    SET (SVV_REQUIRED_C_FLAGS
      "${SVV_REQUIRED_C_FLAGS} -Wno-unknown-pragmas")      
    MESSAGE (STATUS "gcc flags: ${SVV_REQUIRED_C_FLAGS}.")
  ENDIF (CMAKE_SYSTEM MATCHES "SunOS.*")
ENDIF (CMAKE_COMPILER_IS_GNUCXX)

##-----------------------------------------------------------------------------
## Configure Dart testing support.
##
#INCLUDE (${CMAKE_ROOT}/Modules/Dart.cmake)
#MARK_AS_ADVANCED (BUILD_TESTING DART_ROOT TCL_TCLSH)
#IF(BUILD_TESTING)
#  ENABLE_TESTING()
#  OPTION (SVV_USE_DISPLAY
#    "Turn this option off and tests will not popup windows" ON)
#  MARK_AS_ADVANCED(SVV_USE_DISPLAY)
#ENDIF(BUILD_TESTING)

#-----------------------------------------------------------------------------
# Allow local additions to this file without CVS conflicts.
#
#INCLUDE (${SVV_BINARY_DIR}/LocalUserOptions.cmake OPTIONAL)
#INCLUDE (${SVV_SOURCE_DIR}/LocalUserOptions.cmake OPTIONAL)

##-----------------------------------------------------------------------------
## CMake build process debugging information.
##
#FILE (WRITE ${CMAKE_CURRENT_BINARY_DIR}/AllVariables.txt "")
#GET_CMAKE_PROPERTY (VARS VARIABLES)
#FOREACH (var ${VARS})
#  FILE (APPEND ${CMAKE_CURRENT_BINARY_DIR}/AllVariables.txt
#        "${var} \"${${var}}\"\n")
#ENDFOREACH (var ${VARS})

# -----------------------------------------------------------------------------
# If the version of CMake was too old, complain and build nothing.
# These should be the last lines in this file.
#
ELSE("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" GREATER 1.5)
  MESSAGE (SEND_ERROR
           "This version of CMake is too old to build VTK.  "
           "Please upgrade to CMake 1.6.")
ENDIF("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" GREATER 1.5)

#
# End of: $Id: CMakeLists.txt,v 1.1.1.1 2006/12/19 22:58:33 christianh Exp $.
#
