PROJECT(claw)

INCLUDE_DIRECTORIES(.)
SET( CLAW_VERSION )
SET( CLAW_CODE_DIR claw/code/ )
SET( CLAW_INCLUDE_DIRECTORY "${CMAKE_INSTALL_PREFIX}/include/" )
SET( CLAW_INSTALLDIR_SOURCE include/claw/ )
SET( CLAW_INSTALLDIR_LIB lib/ )
SET( CLAW_INSTALLDIR_DOC share/doc/libclaw/ )
SET( CLAW_EXECUTABLE_DIR bin/ )

SET( CLAW_LIBRARIES
  claw_application
  claw_configuration_file
  claw_dynamic_library
  claw_graphic
  claw_logger
  claw_net
  )

# custom build options
OPTION( CLAW_NO_JPEG
        "Turn off jpeg support"
        OFF )
OPTION( CLAW_NO_PNG
        "Turn off png support"
        OFF )
OPTION( CLAW_INSTALL_CMAKE_MODULES
        "Install cmake modules for CLAW"
        ON )

# common flags
SET( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ansi -pedantic -Wall")

#-------------------------------------------------------------------------------
# look for the jpeg library
IF( CLAW_NO_JPEG )
ELSE( CLAW_NO_JPEG )
  INCLUDE( ${CMAKE_ROOT}/Modules/FindJPEG.cmake )
  SET( CLAW_DEFINITIONS ${CLAW_DEFINITIONS} -DCLAW_JPEG_SUPPORT )
  INCLUDE_DIRECTORIES(${JPEG_INCLUDE_DIR})
ENDIF( CLAW_NO_JPEG )

# look for the png library
IF( CLAW_NO_PNG )
ELSE( CLAW_NO_PNG )
  INCLUDE( ${CMAKE_ROOT}/Modules/FindPNG.cmake )
  SET( CLAW_DEFINITIONS ${CLAW_DEFINITIONS} -DCLAW_PNG_SUPPORT )
  INCLUDE_DIRECTORIES(${PNG_INCLUDE_DIR})
ENDIF( CLAW_NO_PNG )

#-------------------------------------------------------------------------------
# set compilation defines
ADD_DEFINITIONS( ${CLAW_DEFINITIONS} )

#-------------------------------------------------------------------------------
# application
ADD_LIBRARY( claw_application SHARED
             ${CLAW_CODE_DIR}application.cpp
             ${CLAW_CODE_DIR}arguments.cpp
             ${CLAW_CODE_DIR}arguments_table.cpp )
TARGET_LINK_LIBRARIES( claw_application claw_logger )

# configuration file
ADD_LIBRARY( claw_configuration_file SHARED
             ${CLAW_CODE_DIR}configuration_file.cpp )

# dynamic libraries
ADD_LIBRARY( claw_dynamic_library SHARED
             ${CLAW_CODE_DIR}dynamic_library.cpp )

# log system
ADD_LIBRARY( claw_logger SHARED
             ${CLAW_CODE_DIR}logger.cpp
	           ${CLAW_CODE_DIR}log_stream.cpp
	           ${CLAW_CODE_DIR}log_level.cpp)

# network
ADD_LIBRARY( claw_net SHARED
             ${CLAW_CODE_DIR}basic_socket.cpp
             ${CLAW_CODE_DIR}socket_server.cpp )
IF( WIN32 )
  TARGET_LINK_LIBRARIES( claw_net wsock32 )
ENDIF( WIN32 )

# graphic
SET( CLAW_GRAPHIC_LIBRARIES )
SET( CLAW_GRAPHIC_SOURCES
     ${CLAW_CODE_DIR}image.cpp
     ${CLAW_CODE_DIR}bitmap.cpp
     ${CLAW_CODE_DIR}bitmap_writer.cpp
     ${CLAW_CODE_DIR}bitmap_reader.cpp
     ${CLAW_CODE_DIR}pcx.cpp
     ${CLAW_CODE_DIR}pcx_reader.cpp
     ${CLAW_CODE_DIR}pcx_writer.cpp
     ${CLAW_CODE_DIR}targa.cpp
     ${CLAW_CODE_DIR}targa_writer.cpp
     ${CLAW_CODE_DIR}targa_reader.cpp
     ${CLAW_CODE_DIR}targa_file_structure.cpp
     ${CLAW_CODE_DIR}xbm.cpp
     ${CLAW_CODE_DIR}xbm_reader.cpp
     ${CLAW_CODE_DIR}xbm_writer.cpp
 )

# check jpeg library
IF( JPEG_FOUND )
  SET( CLAW_GRAPHIC_LIBRARIES ${CLAW_GRAPHIC_LIBRARIES} ${JPEG_LIBRARIES} )
  SET( CLAW_GRAPHIC_SOURCES ${CLAW_GRAPHIC_SOURCES}
      ${CLAW_CODE_DIR}jpeg.cpp
      ${CLAW_CODE_DIR}jpeg_reader.cpp
      ${CLAW_CODE_DIR}jpeg_writer.cpp
      ${CLAW_CODE_DIR}jpeg_error_manager.cpp
   )
ELSE( JPEG_FOUND )
  MESSAGE( "jpeg library not found." )
ENDIF( JPEG_FOUND )

# check png library
IF( PNG_FOUND )
  SET( CLAW_GRAPHIC_LIBRARIES ${CLAW_GRAPHIC_LIBRARIES} ${PNG_LIBRARIES} )
  SET( CLAW_GRAPHIC_SOURCES ${CLAW_GRAPHIC_SOURCES}
      ${CLAW_CODE_DIR}png.cpp
      ${CLAW_CODE_DIR}png_reader.cpp
      ${CLAW_CODE_DIR}png_writer.cpp
   )
ELSE( PNG_FOUND )
  MESSAGE( "png library not found." )
ENDIF( PNG_FOUND )

ADD_LIBRARY( claw_graphic SHARED ${CLAW_GRAPHIC_SOURCES} )
TARGET_LINK_LIBRARIES(claw_graphic ${CLAW_GRAPHIC_LIBRARIES})

# extra flags for the link
SET_TARGET_PROPERTIES( ${CLAW_LIBRARIES} PROPERTIES LINK_FLAGS -s )

# all libraries
SET( CLAW_ALL_LIBRARIES ${CLAW_LIBRARIES} ${CLAW_GRAPHIC_LIBRARIES})

#-------------------------------------------------------------------------------
# subdirectories
SUBDIRS( doc claw )

#-------------------------------------------------------------------------------
# install libraries
FOREACH( lib ${CLAW_LIBRARIES} )
  INSTALL( TARGETS ${lib} DESTINATION ${CLAW_INSTALLDIR_LIB}  )
ENDFOREACH( lib )

INSTALL( FILES COPYING DESTINATION ${CLAW_INSTALLDIR_DOC} )

# target to uninstall files
CONFIGURE_FILE(
  "${CMAKE_CURRENT_SOURCE_DIR}/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")

IF(UNIX)
  # configuration script
  CONFIGURE_FILE(
    "${CMAKE_CURRENT_SOURCE_DIR}/claw-config.in"
    "${CMAKE_CURRENT_BINARY_DIR}/claw-config"
    IMMEDIATE @ONLY)

  INSTALL( FILES claw-config
    DESTINATION ${CLAW_EXECUTABLE_DIR}
    PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE
      GROUP_READ GROUP_EXECUTE
      WORLD_READ WORLD_EXECUTE )
ENDIF(UNIX)

IF(WIN32)
  SUBDIRS(win)
ENDIF(WIN32)

# check if we have to install cmake modules
IF( CLAW_INSTALL_CMAKE_MODULES )
  SUBDIRS( cmake-module )
ENDIF( CLAW_INSTALL_CMAKE_MODULES )
