PROJECT (VTKFTGL)

#
# Dependency mask
#
INCLUDE_REGULAR_EXPRESSION(".*")

#
# Include path
#
INCLUDE_DIRECTORIES (
  ${VTKFTGL_SOURCE_DIR}/src
  ${VTKFTGL_BINARY_DIR}
)

#
# Collect the required libs
#
SET (VTKFTGL_LIBS "")

#
# Do not use the STL (portability issue)
#
SET (VTKFTGL_DO_NOT_USE_STL 1)

#
# Source files
#
SET (FTGL_SRCS
  src/FTBitmapGlyph.cpp
  src/FTBitmapGlyphRenderOpenGL.cpp
  src/FTCharmap.cpp
  src/FTFace.cpp
  src/FTFont.cpp
  src/FTGLBitmapFont.cpp
  src/FTGLBitmapFontRenderOpenGL.cpp
  src/FTGLPixmapFont.cpp
  src/FTGLPixmapFontRenderOpenGL.cpp
  src/FTGlyph.cpp
  src/FTGlyphContainer.cpp
  src/FTLibrary.cpp
  src/FTPixmapGlyph.cpp
  src/FTPixmapGlyphRenderOpenGL.cpp
  src/FTSize.cpp
)

#
# Do not use texture fonts (crash on Type1 fonts)
#
SET (VTKFTGL_DO_NOT_USE_TEXTURE_FONT 1)
IF (NOT VTKFTGL_DO_NOT_USE_TEXTURE_FONT)
  SET (FTGL_SRCS ${FTGL_SRCS}
    src/FTGLTextureFont.cpp
    src/FTTextureGlyph.cpp
  )
ENDIF (NOT VTKFTGL_DO_NOT_USE_TEXTURE_FONT)

#
# Do not use vector fonts (we only need pixmap and bitmaps and vector fonts
# needs glu). Might be an option at some point, but set it to 'true' for now.
#
SET (VTKFTGL_DO_NOT_USE_VECTORISER 1)
IF (NOT VTKFTGL_DO_NOT_USE_VECTORISER)
  SET (FTGL_SRCS ${FTGL_SRCS}
    src/FTExtrdGlyph.cpp
    src/FTGLExtrdFont.cpp
    src/FTGLOutlineFont.cpp
    src/FTGLPolygonFont.cpp
    src/FTOutlineGlyph.cpp
    src/FTPolyGlyph.cpp
  )
ENDIF (NOT VTKFTGL_DO_NOT_USE_VECTORISER)

#
# Support Mangle Mesa
#
IF (VTK_USE_MANGLED_MESA)
  SET (FTGL_SUPPORT_MANGLE_MESA 1)
  IF (FTGL_SUPPORT_MANGLE_MESA)
    SET (FTGL_SRCS ${FTGL_SRCS}
      src/FTBitmapGlyphRenderMesa.cpp
      src/FTGLBitmapFontRenderMesa.cpp
      src/FTGLPixmapFontRenderMesa.cpp
      src/FTPixmapGlyphRenderMesa.cpp
    )
  ENDIF (FTGL_SUPPORT_MANGLE_MESA)
ENDIF (VTK_USE_MANGLED_MESA)

#
# Shared/static lib settings)
#
IF (BUILD_SHARED_LIBS)
  SET (VTKFTGL_DLL 1)
ELSE (BUILD_SHARED_LIBS)
  SET (VTKFTGL_STATIC 1)
ENDIF (BUILD_SHARED_LIBS)

#
# Win32 flags (and shared/static lib settings)
#
IF (WIN32)
  # This will add -DUSE_STD_NAMESPACE and -DWIN32
  SET (VTKFTGL_WIN32_FLAGS 1)
ENDIF (WIN32)

#
# Unix flags
#
IF (UNIX)
  IF(CMAKE_SYSTEM MATCHES "HP-UX.*")
    SET (VTKFTGL_HPUX_SOURCE 1)
  ENDIF(CMAKE_SYSTEM MATCHES "HP-UX.*")
ENDIF (UNIX)

#
# Apple flags
#
IF (APPLE)
  IF(CMAKE_COMPILER_IS_GNUCXX)
    SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated -fpascal-strings")
  ENDIF(CMAKE_COMPILER_IS_GNUCXX)
ENDIF (APPLE)

#
# We need OpenGL
#
# Use GL library provided by parent VTK if possible.
#
IF(NOT OPENGL_FOUND)
  FIND_PACKAGE(OpenGL)
  IF (OPENGL_INCLUDE_PATH)
    INCLUDE_DIRECTORIES (${OPENGL_INCLUDE_PATH})
  ENDIF (OPENGL_INCLUDE_PATH)
ENDIF(NOT OPENGL_FOUND)
SET (VTKFTGL_LIBS "${VTKFTGL_LIBS};${OPENGL_gl_LIBRARY}")

#
# We obviously need FreeType
#
SET (VTKFTGL_LIBS "${VTKFTGL_LIBS};${VTK_FREETYPE_LIBRARIES}")

#
# Define the library (and install it)
#
ADD_LIBRARY (vtkftgl ${FTGL_SRCS})
TARGET_LINK_LIBRARIES(vtkftgl ${VTKFTGL_LIBS})

# Apply user-defined properties to the library target.
IF(VTK_LIBRARY_PROPERTIES)
  SET_TARGET_PROPERTIES(vtkftgl PROPERTIES ${VTK_LIBRARY_PROPERTIES})
ENDIF(VTK_LIBRARY_PROPERTIES)

IF(NOT VTK_INSTALL_NO_LIBRARIES)
  INSTALL_TARGETS (${VTK_INSTALL_LIB_DIR} vtkftgl)
ENDIF(NOT VTK_INSTALL_NO_LIBRARIES)

#
# Do not cover this lib
#
CONFIGURE_FILE (${VTKFTGL_SOURCE_DIR}/.NoDartCoverage
                ${VTKFTGL_BINARY_DIR}/.NoDartCoverage)

#
# Create the configuration file
#
ADD_DEFINITIONS (-DVTKFTGL)
CONFIGURE_FILE(${VTKFTGL_SOURCE_DIR}/vtkftglConfig.h.in
               ${VTKFTGL_BINARY_DIR}/vtkftglConfig.h)

#
# Build examples (testing purposes)
# (Warning, they use Glut)
#
#OPTION (FTGL_BUILD_EXAMPLES "Build FTGL examples (warning: you need Glut)" OFF)
#MARK_AS_ADVANCED (FTGL_BUILD_EXAMPLES)
SET(FTGL_BUILD_EXAMPLES 0)

IF (FTGL_BUILD_EXAMPLES)

  #
  # Need GLU and GLUT
  #
  FIND_PACKAGE(GLU)
  FIND_PACKAGE(GLUT)

  IF (GLU_LIBRARY AND GLUT_LIBRARY)

    SET (VTKFTGL_EXAMPLES_LIBS "${VTKFTGL_LIBS}")

    IF (GLUT_INCLUDE_PATH)
      INCLUDE_DIRECTORIES (${GLUT_INCLUDE_PATH})
    ENDIF (GLUT_INCLUDE_PATH)
    SET (VTKFTGL_EXAMPLES_LIBS "${VTKFTGL_EXAMPLES_LIBS};${GLUT_LIBRARY}")

    IF (GLU_INCLUDE_PATH)
      INCLUDE_DIRECTORIES (${GLU_INCLUDE_PATH})
    ENDIF (GLU_INCLUDE_PATH)
    SET (VTKFTGL_EXAMPLES_LIBS "${VTKFTGL_EXAMPLES_LIBS};${GLU_LIBRARY}")

    #
    # Do we need X ?
    #
    IF (VTK_USE_X)
      SET (VTKFTGL_EXAMPLES_LIBS "${VTKFTGL_EXAMPLES_LIBS};-lXt")
      FIND_LIBRARY (XMU_LIBRARY Xmu
        /usr/lib 
        /usr/local/lib 
        /opt/graphics/OpenGL/lib 
        /usr/openwin/lib 
        /usr/X11R6/lib
        /usr/contrib/X11R6/lib
      )
      MARK_AS_ADVANCED (XMU_LIBRARY)
      IF (XMU_LIBRARY)
        SET (VTKFTGL_EXAMPLES_LIBS "${VTKFTGL_EXAMPLES_LIBS};${XMU_LIBRARY}")
      ENDIF (XMU_LIBRARY)
      SET (VTKFTGL_EXAMPLES_LIBS "${VTKFTGL_EXAMPLES_LIBS};${CMAKE_X_LIBS}")
    ENDIF (VTK_USE_X)

    #
    # Win32 flags
    #
    IF (WIN32)
      # - Avoid the glutCreateMenu_ATEXIT_HACK pb.
      # - Sort-of a hack to avoid the bug in glut.h to avoid
      #   ambiguity between 'std::exit(int)' and 'std::exit(int)' in function
      ADD_DEFINITIONS (-DGLUT_DISABLE_ATEXIT_HACK)
      ADD_DEFINITIONS (-DGLUT_BUILDING_LIB)
    ENDIF (WIN32)

    #
    # Apple libraries.
    #
    IF (APPLE)
      SET (VTKFTGL_EXAMPLES_LIBS "-framework Cocoa" ${VTKFTGL_EXAMPLES_LIBS})
    ENDIF (APPLE)

    #
    # Link examples to FTGL and Freetype
    #
    SET (VTKFTGL_EXAMPLES_LIBS "${VTKFTGL_EXAMPLES_LIBS};vtkftgl;${VTK_FREETYPE_LIBRARIES}")

    #
    # Example 1
    #
    SET(FTGL_DEMO_SRCS
      demo/tb.c
      demo/trackball.c
      demo/FTGLDemo.cpp
    )
    ADD_EXECUTABLE (ftgl_demo ${FTGL_DEMO_SRCS})
    TARGET_LINK_LIBRARIES(ftgl_demo ${VTKFTGL_EXAMPLES_LIBS})

    #
    # Example 2
    #
    ADD_EXECUTABLE (ftgl_demo2 demo/demo.cpp)
    TARGET_LINK_LIBRARIES(ftgl_demo2 ${VTKFTGL_EXAMPLES_LIBS})

  ENDIF (GLU_LIBRARY AND GLUT_LIBRARY)

ENDIF (FTGL_BUILD_EXAMPLES)
