# -*- cmake -*-
#
# Compared to other libraries, compiling this one is a mess.  The
# reason is that we have several source files that have two different
# sets of behaviour, depending on whether they're intended to be part
# of the viewer or the map server.
#
# Unfortunately, the affected code is a rat's nest of #ifdefs, so it's
# easier to play compilation tricks than to actually fix the problem.

project(llwindow)

include(00-Common)
include(DirectX)
include(LLCommon)
include(LLImage)
include(LLMath)
include(LLRender)
include(LLVFS)
include(LLWindow)
include(LLXML)
include(UI)

include_directories(
    ${LLCOMMON_INCLUDE_DIRS}
    ${LLIMAGE_INCLUDE_DIRS}
    ${LLMATH_INCLUDE_DIRS}
    ${LLRENDER_INCLUDE_DIRS}
    ${LLVFS_INCLUDE_DIRS}
    ${LLWINDOW_INCLUDE_DIRS}
    ${LLXML_INCLUDE_DIRS}
    ${DIRECTX_INCLUDE_DIR}
    )

set(llwindow_SOURCE_FILES
    llkeyboard.cpp
    llkeyboardheadless.cpp
    llwindow.cpp
    llwindowcallbacks.cpp
    llwindowheadless.cpp
    )

set(llwindow_HEADER_FILES
    CMakeLists.txt

    llkeyboard.h
    llkeyboardheadless.h
    llwindowcallbacks.h
    llwindowheadless.h
    )

set(viewer_SOURCE_FILES
    llmousehandler.cpp
    )

set(viewer_HEADER_FILES
    llmousehandler.h
    llpreeditor.h
    llwindow.h
    )

# Libraries on which this library depends, needed for Linux builds
# Sort by high-level to low-level
if (LINUX)
  set(llwindow_LINK_LIBRARIES
      ${LLCOMMON_LIBRARIES}
      ${LLIMAGE_LIBRARIES}
      ${LLMATH_LIBRARIES}
      ${LLRENDER_LIBRARIES}
      ${LLVFS_LIBRARIES}
      ${LLXML_LIBRARIES}
      ${UI_LIBRARIES}     # for GTK
      ${SDL_LIBRARY}
      fontconfig          # For FCInit and other FC* functions.
      )

  list(APPEND viewer_SOURCE_FILES 
       llkeyboardsdl.cpp 
       llwindowsdl.cpp
       )
  list(APPEND viewer_HEADER_FILES
       llkeyboardsdl.h
       llwindowsdl.h
       )


endif (LINUX)

if (DARWIN)
  list(APPEND llwindow_SOURCE_FILES
    llkeyboardmacosx.cpp
    llwindowmacosx.cpp
    llwindowmacosx-objc.mm
    )
  list(APPEND llwindow_HEADER_FILES
    llkeyboardmacosx.h
    llwindowmacosx.h
    llwindowmacosx-objc.h
    )

  # We use a bunch of deprecated system APIs.
  set_source_files_properties(
      llkeyboardmacosx.cpp
      llwindowmacosx.cpp
      PROPERTIES
      COMPILE_FLAGS "-Wno-deprecated-declarations -fpascal-strings"
      )
endif (DARWIN)


if (WINDOWS)
  list(APPEND llwindow_SOURCE_FILES
       lldragdropwin32.cpp
       lldxhardware.cpp
       llkeyboardwin32.cpp
       llwindowwin32.cpp
       )
  list(APPEND llwindow_HEADER_FILES
       lldragdropwin32.h
       lldxhardware.h
       llkeyboardwin32.h
       llwindowwin32.h
       )
  list(APPEND llwindow_LINK_LIBRARIES
       comdlg32     # Common Dialogs for ChooseColor
       ole32
       )
endif (WINDOWS)

if (SOLARIS)
  list(APPEND llwindow_SOURCE_FILES
       llwindowsolaris.cpp
       )
  list(APPEND llwindow_HEADER_FILES
       llwindowsolaris.h
       )
endif (SOLARIS)

set_source_files_properties(${llwindow_HEADER_FILES}
                            PROPERTIES HEADER_FILE_ONLY TRUE)

if (llwindow_HEADER_FILES)
  list(APPEND llwindow_SOURCE_FILES ${llwindow_HEADER_FILES})
endif (llwindow_HEADER_FILES)
  list(APPEND viewer_SOURCE_FILES ${viewer_HEADER_FILES})

add_library (llwindow
    ${llwindow_SOURCE_FILES}
    ${viewer_SOURCE_FILES}
    )
add_dependencies(llwindow prepare)
target_link_libraries (llwindow ${llwindow_LINK_LIBRARIES})


