project(RoR_Main)

set(ror_src
	source/aeroengine.h
	source/airbrake.cpp
	source/airbrake.h
	source/Airfoil.cpp
	source/Airfoil.h
	source/approxmath.h
	source/autopilot.cpp
	source/autopilot.h
	source/Beam.cpp
	source/Beam.h
	source/BeamStats.cpp
	source/BeamStats.h
	source/buoyance.cpp
	source/buoyance.h
	source/CacheSystem.cpp
	source/CacheSystem.h
	source/Character.cpp
	source/Character.h
	source/CmdKeyInertia.cpp
	source/CmdKeyInertia.h
	source/collisions.cpp
	source/collisions.h
	source/CollisionTools.cpp
	source/CollisionTools.h
	source/ColoredTextAreaOverlayElement.cpp
	source/ColoredTextAreaOverlayElement.h
	source/ColoredTextAreaOverlayElementFactory.h
	source/COPYING
	source/dashboard.cpp
	source/dashboard.h
	source/Differentials.cpp
	source/Differentials.h
	source/DustPool.cpp
	source/DustPool.h
	source/DynamicLines.cpp
	source/DynamicLines.h
	source/DynamicRenderable.cpp
	source/DynamicRenderable.h
	source/editor.cpp
	source/editor.h
	source/engine.cpp
	source/engine.h
	source/envmap.cpp
	source/envmap.h
	source/ExampleFrameListener.cpp
	source/ExampleFrameListener.h
	source/FlexAirfoil.cpp
	source/FlexAirfoil.h
	source/FlexBody.cpp
	source/FlexBody.h
	source/FlexMesh.cpp
	source/FlexMesh.h
	source/FlexMeshWheel.cpp
	source/FlexMeshWheel.h
	source/FlexObj.cpp
	source/FlexObj.h
	source/gui_loader.cpp
	source/gui_loader.h
	source/gui_manager.cpp
	source/gui_manager.h
	source/Heathaze.cpp
	source/Heathaze.h
	source/heightfinder.h
	source/HydraxWater.cpp
	source/HydraxWater.h
	source/icon.rc
	source/ImprovedConfigFile.h
	source/IngameConsole.cpp
	source/IngameConsole.h
	source/InputEngine.cpp
	source/InputEngine.h
	source/Landusemap.cpp
	source/Landusemap.h
	source/language.cpp
	source/language.h
	source/luasystem.cpp
	source/luasystem.h
	source/main.cpp
	source/main.h
	source/MapControl.cpp
	source/MapControl.h
	source/materialFunctionMapper.cpp
	source/materialFunctionMapper.h
	source/mirrors.cpp
	source/mirrors.h
	source/MovableText.cpp
	source/MovableText.h
	source/network.cpp
	source/network.h
	source/networkinfo.h
	source/ogreconsole.cpp
	source/ogreconsole.h
	source/OgreLineStreamOverlayElement.cpp
	source/OgreLineStreamOverlayElement.h
	source/ProceduralManager.cpp
	source/ProceduralManager.h
	source/pstdint.h
	source/RandomTreeLoader.h
	source/Replay.cpp
	source/Replay.h
	source/resource.h
	source/ResourceBuffer.h
	source/Road.cpp
	source/Road.h
	source/road2.cpp
	source/road2.h
	source/ror.ico
	source/rornet.h
	source/screwprop.cpp
	source/screwprop.h
	source/ScriptEngine.cpp
	source/ScriptEngine.h
	source/Settings.cpp
	source/Settings.h
	source/sha1.cpp
	source/sha1.h
	source/SimpleOpt.h
	source/Skidmark.cpp
	source/Skidmark.h
	source/skin.cpp
	source/skin.h
	source/skinmanager.cpp
	source/skinmanager.h
	source/SoundManager.cpp
	source/SoundManager.h
	source/SoundScriptManager.cpp
	source/SoundScriptManager.h
	source/TorqueCurve.cpp
	source/TorqueCurve.h
	source/TruckHUD.cpp
	source/TruckHUD.h
	source/tsmheightfinder.cpp
	source/turbojet.cpp
	source/turbojet.h
	source/turboprop.cpp
	source/turboprop.h
	source/water.h
	source/WaterOld.cpp
	source/WaterOld.h
	source/writeTextToTexture.cpp
	source/writeTextToTexture.h
	source/xfiregameclient.cpp
	source/xfiregameclient.h
	
	source/mplatform_fd.cpp
	source/mplatform_base.cpp
	source/mplatform_fd.h
	source/mplatform_base.h

	source/hdrlistener.h
	source/hdrlistener.cpp
	
	source/softshadowlistener.h
	source/softshadowlistener.cpp

	source/ssaolistener.h
	source/ssaolistener.cpp
)

include_directories (OgreMain/include Dependencies/include)
include_directories (${RoR_Dependencies_SOURCE_DIR}/ogrenew/OgreMain/include)
include_directories (${RoR_Dependencies_SOURCE_DIR}/mysocketw/)

if(CAELUM_BUILD_NEW)
  include_directories (${RoR_Dependencies_SOURCE_DIR}/caelum/main/include)
else(CAELUM_BUILD_NEW)
  include_directories (${RoR_Dependencies_SOURCE_DIR}/Caelum-2006-11-09/include)
endif(CAELUM_BUILD_NEW)

include_directories (${RoR_Dependencies_SOURCE_DIR}/openal-soft-1.6.372/include/AL)
include_directories (${RoR_Dependencies_SOURCE_DIR}/openal-soft-1.6.372/include)
include_directories (${RoR_Dependencies_SOURCE_DIR}/OIS-HEAD/ois/includes)
include_directories (${RoR_Dependencies_SOURCE_DIR}/moFileReader/include)
include_directories (${RoR_Dependencies_SOURCE_DIR}/mygui/include)

IF(WIN32)
  add_definitions("-D_CRT_SECURE_NO_WARNINGS")
ELSEIF(UNIX)
ELSEIF(APPLE)
ENDIF(WIN32)

# optional features
if(ROR_BUILD_HYDRAX)
  add_definitions("-DHYDRAX")
  include_directories (${RoR_Dependencies_SOURCE_DIR}/hydrax/)
endif(ROR_BUILD_HYDRAX)

if(ROR_BUILD_PAGED)
  add_definitions("-DPAGED")
  include_directories (${RoR_Dependencies_SOURCE_DIR}/PagedGeometry/include)
endif(ROR_BUILD_PAGED)

if(ROR_BUILD_BEAMSTATS)
  add_definitions("-DBEAMSTATS -DTIMING")
endif(ROR_BUILD_BEAMSTATS)

if(ROR_BUILD_MOTION_PLATFORM)
  add_definitions("-DMPLATFORM")
endif(ROR_BUILD_MOTION_PLATFORM)

if(ROR_BUILD_LUASCRIPT)
  add_definitions("-DLUASCRIPT")
  include_directories (${RoR_Dependencies_SOURCE_DIR}/lua-5.1.2/src)
endif(ROR_BUILD_LUASCRIPT)

if(ROR_BUILD_BUGTRAP)
  add_definitions("-DBUGTRAP")
  include_directories (${RoR_Dependencies_SOURCE_DIR}/bugtrap)
endif(ROR_BUILD_BUGTRAP)

if(WSYNC_BUILD_WSYNC)
  add_definitions("-DWSYNC")
  include_directories (${RoR_SOURCE_DIR}/wsync/include)
  IF(WIN32)
    #message("using boost dir: ${WSYNC_BOOST_DIR}")
    include_directories(${WSYNC_BOOST_DIR})
    add_definitions("-D_CRT_SECURE_NO_WARNINGS -D_WIN32_WINDOWS -D_WIN32")
    link_directories(${WSYNC_BOOST_DIR}/lib)
  ELSEIF(UNIX)
    find_package(Boost REQUIRED COMPONENTS filesystem iostreams)
    add_definitions("-DNWIN32")
    link_directories(${Boost_LIBRARY_DIRS})
    include_directories (${Boost_INCLUDE_DIR})
    add_definitions("-DNWIN32")
  ELSEIF(APPLE)
  ENDIF(WIN32)
endif(WSYNC_BUILD_WSYNC)

if(CAELUM_BUILD_NEW)
  add_definitions("-DCAELUMNEW")
endif(CAELUM_BUILD_NEW)

if(ROR_BUILD_XFIRE)
  add_definitions("-DXFIRE")
endif(ROR_BUILD_XFIRE)

IF(ROR_BUILD_ANGELSCRIPT)
  add_definitions("-DANGELSCRIPT")
  include_directories (${RoR_Dependencies_SOURCE_DIR}/angelscript/include)
  include_directories (${RoR_Dependencies_SOURCE_DIR}/angelscript/add_on)
ENDIF(ROR_BUILD_ANGELSCRIPT)

# platform specific flags
IF(WIN32)
  include_directories (${RoR_Dependencies_SOURCE_DIR}/pthreads/Pre-built.2/include)

#  add_definitions("")
ELSEIF(UNIX)
#  some useful optimizations, including SSE
#  add_definitions("-mfpmath=sse -msse2 -O2 -fomit-frame-pointer -fstrict-aliasing -ffast-math -ftracer")
  add_definitions("-Wextra -Wfloat-equal -Wno-deprecated-declarations") # -Wunreachable-code")

  # ignore warnings that are generated from the libs we use, just warn about RoR code
  add_definitions("
    -isystem ${RoR_Dependencies_SOURCE_DIR}/ogrenew/OgreMain/include
  ")

  EXEC_PROGRAM(pkg-config ARGS "--cflags gtk+" OUTPUT_VARIABLE CFLAGS_GTK)
  SET(CMAKE_C_FLAGS "${CMAKE_PKGCONFIG_C_FLAGS} ${CFLAGS_GTK}")

ELSEIF(APPLE)
#  add_definitions("")
ENDIF(WIN32)

# main target
add_executable(RoR ${ror_src})

# add dependencies
add_dependencies(RoR OgreMain caelum mysocketw ois mygui mofilereader)

# optional features
if(ROR_BUILD_HYDRAX)
  add_dependencies(RoR hydrax)
endif(ROR_BUILD_HYDRAX)

if(ROR_BUILD_PAGED)
  add_dependencies(RoR paged)
endif(ROR_BUILD_PAGED)

if(ROR_BUILD_ETM)
  add_dependencies(RoR etm)
endif(ROR_BUILD_ETM)

if(ROR_BUILD_LUASCRIPT)
  add_dependencies(RoR lua)
endif(ROR_BUILD_LUASCRIPT)

if(ROR_BUILD_BUGTRAP)
  #
endif(ROR_BUILD_BUGTRAP)

# now the linking

# always required common libs for self generated targets
target_link_libraries(RoR
  caelum
  mysocketw
  OgreMain
  ois
  mygui
  mofilereader
)

IF(WIN32)
  set_target_properties(RoR PROPERTIES LINK_FLAGS_DEBUG "/SUBSYSTEM:CONSOLE")
  set_target_properties(RoR PROPERTIES LINK_FLAGS_RELWITHDEBINFO "/SUBSYSTEM:CONSOLE")
  set_target_properties(RoR PROPERTIES LINK_FLAGS_RELEASE "/LTCG /OPT:REF /OPT:NOWIN98 /SUBSYSTEM:WINDOWS")
  if(ROR_USE_OPTIMIZATIONS_WINDOWS)
    SET_TARGET_PROPERTIES(RoR PROPERTIES COMPILE_FLAGS "/GL /Ox /Ob2 /Oi /Ot /Oy /fp:fast /GS-")
  else(ROR_USE_OPTIMIZATIONS_WINDOWS)
    SET_TARGET_PROPERTIES(RoR PROPERTIES COMPILE_FLAGS "/Od")
  endif(ROR_USE_OPTIMIZATIONS_WINDOWS)

  target_link_libraries(RoR openal32)
ELSEIF(UNIX)
  SET_TARGET_PROPERTIES(RoR PROPERTIES COMPILE_FLAGS "-msse2 -msse2 -mmmx -msse -msse3 -m3dnow")
  SET_TARGET_PROPERTIES(RoR PROPERTIES LINK_FLAGS    "")
  target_link_libraries(RoR openal)
ELSEIF(APPLE)
ENDIF(WIN32)


# optional, self build features
if(ROR_BUILD_HYDRAX)
  add_dependencies(RoR hydrax)
  target_link_libraries(RoR hydrax)
endif(ROR_BUILD_HYDRAX)

if(ROR_BUILD_PAGED)
  add_dependencies(RoR paged)
  target_link_libraries(RoR paged)
endif(ROR_BUILD_PAGED)

if(ROR_BUILD_LUASCRIPT)
  add_dependencies(RoR lua)
  target_link_libraries(RoR lua)
endif(ROR_BUILD_LUASCRIPT)

if(WSYNC_BUILD_WSYNC)
  add_dependencies(RoR libwsync)
  target_link_libraries(RoR libwsync ${Boost_LIBRARIES})
endif(WSYNC_BUILD_WSYNC)

IF(ROR_BUILD_ANGELSCRIPT)
 add_dependencies(RoR angelscript)
 target_link_libraries(RoR angelscript)
ENDIF(ROR_BUILD_ANGELSCRIPT)


IF(WIN32)
ELSEIF(UNIX)
  EXEC_PROGRAM(pkg-config ARGS "--libs gtk+" OUTPUT_VARIABLE LDFLAGS_GTK)
  SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${LDFLAGS_GTK}")
ELSEIF(APPLE)
ENDIF(WIN32)

# platform specific libraries (external ones only)
IF(WIN32)
  target_link_libraries(RoR
    ${RoR_Dependencies_SOURCE_DIR}/pthreads/Pre-built.2/lib/pthreadVC2.lib
  )
ELSEIF(UNIX)
  target_link_libraries(RoR
    zzip
    freetype
    X11
    Xt
    Xaw
  )
ELSEIF(APPLE)
ENDIF(WIN32)

install(TARGETS RoR
      RUNTIME DESTINATION ${BIN_DIR}
      LIBRARY DESTINATION ${BIN_DIR}
      ARCHIVE DESTINATION ${LIB_DIR})
