CMAKE_MINIMUM_REQUIRED(VERSION 2.6.0)
SET(CMAKE_XCODE_ATTRIBUTE_GCC_VERSION "com.apple.compilers.llvmgcc42")
PROJECT(Overgrowth)

if(APPLE)
    SET(CMAKE_OSX_ARCHITECTURES "i386")
endif()

#Create subprojects that have their own CMakeLists
ADD_SUBDIRECTORY(triangle triangle)
ADD_SUBDIRECTORY(minizip minizip)
ADD_SUBDIRECTORY(qslim qslim)
ADD_SUBDIRECTORY(sigar sigar)
ADD_SUBDIRECTORY(Recast Recast)
ADD_SUBDIRECTORY(TheoraPlayer TheoraPlayer)

#Put subprojects in the "Support" folder
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
set_property(TARGET qslim PROPERTY FOLDER "Support")
set_property(TARGET triangle PROPERTY FOLDER "Support")
set_property(TARGET minizip PROPERTY FOLDER "Support")
set_property(TARGET sigar PROPERTY FOLDER "Support")
set_property(TARGET Recast PROPERTY FOLDER "Support")
set_property(TARGET TheoraPlayer PROPERTY FOLDER "Support")

INCLUDE(CheckCCompilerFlag)

SET(CMAKE_USE_RELATIVE_PATHS ON CACHE BOOL "Use relative paths" FORCE )

#define platform variables
IF(WIN32 AND NOT WINDOWS)
    SET(WINDOWS TRUE)
ENDIF(WIN32 AND NOT WINDOWS)
IF(APPLE AND NOT MACOSX)
    SET(MACOSX TRUE)
ENDIF(APPLE AND NOT MACOSX)
IF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
    SET(LINUX TRUE)
ENDIF(CMAKE_SYSTEM_NAME STREQUAL "Linux")

IF(CMAKE_COMPILER_IS_GNUCC)
    SET(GCC TRUE)
ENDIF(CMAKE_COMPILER_IS_GNUCC)

IF(GCC)
    ADD_DEFINITIONS(-w)  # !!! FIXME
    ADD_DEFINITIONS(-pipe -Wall -fsigned-char)

    # See if -fno-stack-protector is available to us.
    # It doesn't seem to work well, and it adds bulk to the binary.
    CHECK_C_COMPILER_FLAG("-fno-stack-protector" OVERGROWTH_GCC_HAS_STACKPROT)
    IF(OVERGROWTH_GCC_HAS_STACKPROT)
        ADD_DEFINITIONS(-fno-stack-protector)
    ENDIF(OVERGROWTH_GCC_HAS_STACKPROT)

    # CMake mailing list had this hack for getting rid of -rdynamic:
    #   http://public.kitware.com/pipermail/cmake/2006-July/010404.html
    IF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
        SET(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS)
        SET(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS)
    ENDIF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
ENDIF(GCC)

# Add preprocessor definitions so that the code can use platform #ifdefs
IF(UNIX)
    ADD_DEFINITIONS(-DPLATFORM_UNIX=1)
ENDIF(UNIX)
IF(LINUX)
    ADD_DEFINITIONS(-DPLATFORM_LINUX=1)
ENDIF(LINUX)
IF(MACOSX)
    ADD_DEFINITIONS(-DPLATFORM_MACOSX=1)
ENDIF(MACOSX)

SET(SRCDIR "${CMAKE_SOURCE_DIR}/../Source")
SET(LIBDIR "${CMAKE_SOURCE_DIR}/../Libraries")

IF(LINUX)
    IF(CMAKE_SIZEOF_VOID_P MATCHES "8")
        SET(LIB_SUFFIX "lib64")
        SET(BIN_SUFFIX ".bin.x86_64")
    ELSE()
        SET(LIB_SUFFIX "lib")
        SET(BIN_SUFFIX ".bin.x86")
    ENDIF(CMAKE_SIZEOF_VOID_P MATCHES "8")

    SET(BIN_RPATH "\$ORIGIN/${LIB_SUFFIX}")
    SET(LIB_ROOT ${LIBDIR}/Linux/${LIB_SUFFIX})
    LINK_DIRECTORIES(
        ${LIB_ROOT}
    )

    # Don't use -rpath.
    SET(CMAKE_SKIP_BUILD_RPATH TRUE)
    SET(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
    SET(CMAKE_INSTALL_RPATH ${BIN_RPATH})
    SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)

    SET(CMAKE_EXECUTABLE_SUFFIX ${BIN_SUFFIX})
    
    IF(CMAKE_SIZEOF_VOID_P MATCHES "8")
        SET(NVTT_LINUX_LIB "linux64")
    ELSE()
        SET(NVTT_LINUX_LIB "linux32")
    ENDIF()
    
    LINK_DIRECTORIES(
        ${LIBDIR}/bullet-2.81/lib/linux64
        ${LIBDIR}/boost_1_52_0/linux64libs
        ${LIBDIR}/nvidia-texture-tools-read-only/lib/${NVTT_LINUX_LIB}
    )
ENDIF(LINUX)

SET(AWESOMIUM_VERSION awesomium-1.6.6)

IF(WINDOWS)    
    LINK_DIRECTORIES(
        ${LIBDIR}/FreeImage/lib/Release
        ${LIBDIR}/bullet-2.81/lib
        ${LIBDIR}/LIB_SDL/lib
        ${LIBDIR}/freealut-1.1.0-bin/lib
        ${LIBDIR}/ogg/lib
        ${LIBDIR}/vorbis/lib
        ${LIBDIR}/theora/lib
        ${LIBDIR}/LIB_SDL/lib
        ${LIBDIR}/${AWESOMIUM_VERSION}/lib
        ${LIBDIR}/angelscript_2.24.a/lib
        ${LIBDIR}/boost_1_52_0/winlibs
        ${LIBDIR}/fftw-3.0.1-w32-pl1
        ${LIBDIR}/qslim-2.1/lib
        ${LIBDIR}/xinput/Lib/x86
        ${LIBDIR}/nvapi/x86
        ${LIBDIR}/vtune/lib32
        ${LIBDIR}/GLEW/lib
        ${LIBDIR}/zlib1.2.7/lib
        "${LIBDIR}/ode-0.11/lib"
        "${LIBDIR}/OpenAL 1.1 SDK/libs/Win32"
    )
ENDIF(WINDOWS)


IF(MACOSX)    
    LINK_DIRECTORIES(
        ${CMAKE_SOURCE_DIR}/../MacLibs
        ${LIBDIR}/boost_1_52_0/maclibs
        ${LIBDIR}/bullet-2.81/maclib
    )
    FIND_LIBRARY(AWESOMIUM_FRAMEWORK Awesomium PATHS ${CMAKE_SOURCE_DIR}/../MacLibs NO_DEFAULT_PATH)
    FIND_LIBRARY(SDL_FRAMEWORK SDL PATHS ${CMAKE_SOURCE_DIR}/../MacInterfaces NO_DEFAULT_PATH)
    FIND_LIBRARY(OPENAL_FRAMEWORK OpenAL)
    FIND_LIBRARY(CARBON_FRAMEWORK Carbon)
    FIND_LIBRARY(OPENGL_FRAMEWORK OpenGL)
    FIND_LIBRARY(IOKIT_FRAMEWORK IOKit)
    FIND_LIBRARY(APPKIT_FRAMEWORK AppKit)
	SET(FRAMEWORKS 		
		${SDL_FRAMEWORK}
		${AWESOMIUM_FRAMEWORK}
		${OPENAL_FRAMEWORK}
		${CARBON_FRAMEWORK}
		${OPENGL_FRAMEWORK}
		${IOKIT_FRAMEWORK}
		${APPKIT_FRAMEWORK}
	)
ENDIF(MACOSX)

ADD_DEFINITIONS(
    -DBOOST_MPL_CFG_NO_PREPROCESSED_HEADERS=1
    -DHAVE_MIXCFG_H
    -DGUI_ENABLED
    -DMAIN_MENU
)

INCLUDE_DIRECTORIES(
    ${SRCDIR}/Internal
    ${SRCDIR}/Internal/sigar
    ${SRCDIR}/Main
    ${SRCDIR}/Graphics
    ${SRCDIR}/Images
    ${SRCDIR}/Sound
    ${SRCDIR}/Physics
    ${SRCDIR}/Network
    ${SRCDIR}/AI
    ${SRCDIR}/UserInput
    ${SRCDIR}/GUI
    ${SRCDIR}/Scripting
    ${SRCDIR}/Scripting/angelscript
    ${SRCDIR}/Scripting/v8
    ${SRCDIR}/Objects
    ${SRCDIR}/Game
    ${SRCDIR}/XML
    ${SRCDIR}/Editors
    ${SRCDIR}/Math
    ${SRCDIR}/Recast
    ${SRCDIR}/TheoraPlayer
    "${SRCDIR}/Math/Boost Extensions"
    ${SRCDIR}/Math/pbaker
    ${SRCDIR}/Simplification
    ${SRCDIR}
    ${LIBDIR}
    ${LIBDIR}/GLEW/include
    ${LIBDIR}/ode-0.11/include
    ${LIBDIR}/boost_1_52_0
    ${LIBDIR}/angelscript_2.24.a/include
    ${LIBDIR}/FreeImage/include
    ${LIBDIR}/ogg/include
    ${LIBDIR}/vorbis/include
    ${LIBDIR}/theora/include
    ${LIBDIR}/tinyxml
    ${LIBDIR}/qslim-2.1/mixkit/src
    ${LIBDIR}/qslim-2.1/tools/qslim
    ${LIBDIR}/nvidia-texture-tools-read-only/include
    ${LIBDIR}/fftw-3.3
    ${LIBDIR}/nvapi
    ${LIBDIR}/freealut-1.1.0-bin/include/AL
    ${LIBDIR}/bullet-2.81/src
)

if(WINDOWS)
    INCLUDE_DIRECTORIES(
    	${LIBDIR}/${AWESOMIUM_VERSION}/include
      ${LIBDIR}/LIB_SDL/include
      ${LIBDIR}/vtune/include
      ${LIBDIR}/zlib1.2.7/include
      "${LIBDIR}/OpenAL 1.1 SDK/include"
    )
ENDIF(WINDOWS)

if(MACOSX)
    INCLUDE_DIRECTORIES(
        ${LIBDIR}/../MacInterfaces/
    )
ENDIF(MACOSX)

IF(LINUX)
    INCLUDE_DIRECTORIES(
        LinuxInclude
        ${SRCDIR}/Internal/sigar/os/linux
        ${LIBDIR}/Linux/include
        ${LIBDIR}/Linux/include/AL
    	  ${LIBDIR}/${AWESOMIUM_VERSION}/include
    )
ENDIF(LINUX)

FILE(GLOB TINYXML_SRCS
    ${LIBDIR}/tinyxml/tinystr.cpp
    ${LIBDIR}/tinyxml/tinyxml.cpp
    ${LIBDIR}/tinyxml/tinyxmlerror.cpp
    ${LIBDIR}/tinyxml/tinyxmlparser.cpp
)

MACRO(AddGroupedSource folder)
    FILE(GLOB GROUPED_SRCS RELATIVE ${CMAKE_SOURCE_DIR}
        ${SRCDIR}/${folder}/*.cpp
    )
    LIST(APPEND OVERGROWTH_SRCS ${GROUPED_SRCS})
    STRING(REGEX REPLACE "/" "\\\\" folder_backslash ${folder})
    SOURCE_GROUP(${folder_backslash} FILES ${GROUPED_SRCS})
ENDMACRO(AddGroupedSource)

AddGroupedSource(AI)
AddGroupedSource(Editors)
AddGroupedSource(Game)
AddGroupedSource(Graphics)
AddGroupedSource(GUI)
AddGroupedSource(Images)
AddGroupedSource(Main)
AddGroupedSource(Math)
AddGroupedSource("Math/Boost\ Extensions")
AddGroupedSource(Network)
AddGroupedSource(Objects)
AddGroupedSource(Physics)
AddGroupedSource(Scripting)
AddGroupedSource(Scripting/angelscript)
AddGroupedSource(Sound)
AddGroupedSource(UserInput)
AddGroupedSource(XML)

FILE(GLOB OVERGROWTH_INTERNAL_SRCS RELATIVE ${CMAKE_SOURCE_DIR}
    ${SRCDIR}/Internal/assets.cpp
    ${SRCDIR}/Internal/backgroundtasks.cpp
    ${SRCDIR}/Internal/benchmark.cpp
    ${SRCDIR}/Internal/checksum.cpp
    ${SRCDIR}/Internal/crashreport.cpp
    ${SRCDIR}/Internal/collisiondetection.cpp
    ${SRCDIR}/Internal/config.cpp
    ${SRCDIR}/Internal/controller.cpp
    ${SRCDIR}/Internal/datemodified.cpp
    ${SRCDIR}/Internal/dialogues.cpp
    ${SRCDIR}/Internal/error.cpp
    ${SRCDIR}/Internal/filepath.cpp
    ${SRCDIR}/Internal/hardware_specs.cpp
    ${SRCDIR}/Internal/memwrite.cpp
    ${SRCDIR}/Internal/memory.cpp
    ${SRCDIR}/Internal/pathUtility.cpp
    ${SRCDIR}/Internal/stopwatch.cpp
    ${SRCDIR}/Internal/textfile.cpp
    ${SRCDIR}/Internal/timer.cpp
    ${SRCDIR}/Internal/treestructure.cpp
    ${SRCDIR}/Internal/platformsetup.cpp
    ${SRCDIR}/Internal/log.cpp
    ${SRCDIR}/Internal/cachefile.cpp
    ${SRCDIR}/Internal/debugtext.cpp
    ${SRCDIR}/Internal/varstring.cpp
    ${SRCDIR}/Internal/levelxml.cpp
    ${SRCDIR}/Internal/levelxml_script.cpp
    ${SRCDIR}/Internal/minizip/zip_util.cpp
    ${SRCDIR}/Internal/returnpathutil.cpp
    ${SRCDIR}/Internal/casecorrectpath.cpp
    ${SRCDIR}/Internal/processpool.cpp
    ${SRCDIR}/Internal/file_descriptor.cpp
    ${SRCDIR}/Internal/path_set.cpp
)

IF(UNIX)
    LIST(APPEND OVERGROWTH_INTERNAL_SRCS ${SRCDIR}/Internal/unix_compat.cpp)
ENDIF(UNIX)

IF(MACOSX)
    LIST(APPEND OVERGROWTH_INTERNAL_SRCS 
		${SRCDIR}/Internal/error.mm
		${SRCDIR}/Internal/mac_compat.mm
	)
    LIST(APPEND OVERGROWTH_SRCS 
		${SRCDIR}/GUI/macKeyEventTranslator.mm
		${CMAKE_SOURCE_DIR}/../MacInterfaces/SDLMain.m
	)
ENDIF(MACOSX)

IF(WINDOWS)
    LIST(APPEND OVERGROWTH_INTERNAL_SRCS 
        ${SRCDIR}/Internal/win_compat.cpp 
        ${SRCDIR}/Internal/Win32InputBox.cpp
    )
ENDIF(WINDOWS)

LIST(APPEND OVERGROWTH_SRCS
    ${TINYXML_SRCS}
    ${OVERGROWTH_INTERNAL_SRCS}
)

SOURCE_GROUP(Internal FILES ${OVERGROWTH_INTERNAL_SRCS})
SOURCE_GROUP(TinyXML FILES ${TINYXML_SRCS})

IF(WINDOWS)        
    add_library(ode_lib SHARED IMPORTED)
    set_target_properties(ode_lib PROPERTIES
        IMPORTED_CONFIGURATIONS "Release;Debug"
        IMPORTED_LOCATION_RELEASE "${LIBDIR}/ode-0.11/lib/ode_single.dll"
        IMPORTED_LOCATION_DEBUG "${LIBDIR}/ode-0.11/lib/ode_singled.dll"
        IMPORTED_IMPLIB_RELEASE "${LIBDIR}/ode-0.11/lib/ode_single.lib"
        IMPORTED_IMPLIB_DEBUG "${LIBDIR}/ode-0.11/lib/ode_singled.lib"
    )
    
    SET(STATIC_LIBS
        ${STATIC_LIBS}
        debug Mixkitd
        optimized Mixkit
        libgfx
        zlib
        fftw3
        xinput
        glew32
        ode_lib
        debug angelscriptd
        optimized angelscript
        debug BulletCollision_vs2010_debug
        optimized BulletCollision_vs2010 
        debug BulletDynamics_vs2010_debug
        optimized BulletDynamics_vs2010 
        debug LinearMath_vs2010_debug
        optimized LinearMath_vs2010
        libittnotify #For VTune profiling
        ws2_32 #Winsock2 for http_get
        version #For SIGAR versioning
        nvapi #For NVIDIA video card queries
        comdlg32 #For Windows dialog boxes
        dbghelp #For Minidump crash logs
        Netapi32 #For SIGAR net tests
    )
ENDIF(WINDOWS)

IF(LINUX)
    SET(STATIC_LIBS
        ${STATIC_LIBS}
        mix
        gfx
        fftw3f
        ode
        angelscript
    )

    SET(FLTK_LIBS
        fltk fltk_images fltk_forms
    )
    FOREACH(StaticLib ITEMS ${STATIC_LIBS} ${FLTK_LIBS} )
        ADD_LIBRARY(${StaticLib} STATIC IMPORTED)
        SET_TARGET_PROPERTIES(${StaticLib} PROPERTIES
            IMPORTED_LOCATION ${LIB_ROOT}/lib${StaticLib}.a
        )
    ENDFOREACH()
    LIST(APPEND FLTK_LIBS X11 Xext Xft Xinerama fontconfig dl)
ENDIF(LINUX)

IF(APPLE)
    SET(SSE_FLAGS "-msse")
ENDIF(APPLE)

IF(LINUX)
    SET(SSE_FLAGS "-msse -mfpmath=sse")
ENDIF(LINUX)

IF(WINDOWS)
    SET(SSE_FLAGS "/arch:SSE2")
ENDIF(WINDOWS)

IF(WINDOWS)
    string (REPLACE "/DWIN32" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
    string (REPLACE "/D_WINDOWS" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
ENDIF(WINDOWS)

SET(OVERGROWTHWORKER_SRCS
    ${SRCDIR}/Images/FreeImageWrapper.cpp
    ${SRCDIR}/Internal/processpool.cpp
    ${SRCDIR}/Internal/worker.cpp
    ${SRCDIR}/Graphics/converttexture.cpp
    ${SRCDIR}/Internal/casecorrectpath.cpp
)

IF(UNIX)
    LIST(APPEND OVERGROWTHWORKER_SRCS ${SRCDIR}/Internal/unix_compat.cpp)
ENDIF(UNIX)

IF(WINDOWS)
    LIST(APPEND OVERGROWTHWORKER_SRCS ${SRCDIR}/Internal/win_compat.cpp)
ENDIF(WINDOWS)

SET(WIN_RESOURCE_FILE icon.rc)
ADD_EXECUTABLE(OvergrowthWorker ${OVERGROWTHWORKER_SRCS}  ${WIN_RESOURCE_FILE})
SET_TARGET_PROPERTIES(OvergrowthWorker PROPERTIES
    OUTPUT_NAME OvergrowthWorker
    COMPILE_FLAGS ${SSE_FLAGS}
    COMPILE_DEFINITIONS NO_ERR=1
)

TARGET_LINK_LIBRARIES(OvergrowthWorker
    freeimage
)

IF(WINDOWS)
    TARGET_LINK_LIBRARIES(OvergrowthWorker
        debug ${LIBDIR}/nvidia-texture-tools-read-only/lib/win32debug/nvtt.lib
        optimized ${LIBDIR}/nvidia-texture-tools-read-only/lib/win32release/nvtt.lib
        debug ${LIBDIR}/nvidia-texture-tools-read-only/lib/win32debug/nvcore.lib
        optimized ${LIBDIR}/nvidia-texture-tools-read-only/lib/win32release/nvcore.lib
        debug ${LIBDIR}/nvidia-texture-tools-read-only/lib/win32debug/nvimage.lib
        optimized ${LIBDIR}/nvidia-texture-tools-read-only/lib/win32release/nvimage.lib
        debug ${LIBDIR}/nvidia-texture-tools-read-only/lib/win32debug/nvmath.lib
        optimized ${LIBDIR}/nvidia-texture-tools-read-only/lib/win32release/nvmath.lib
        debug ${LIBDIR}/nvidia-texture-tools-read-only/lib/win32debug/squish.lib
        optimized ${LIBDIR}/nvidia-texture-tools-read-only/lib/win32release/squish.lib
        debug ${LIBDIR}/nvidia-texture-tools-read-only/lib/win32debug/posh.lib
        optimized ${LIBDIR}/nvidia-texture-tools-read-only/lib/win32release/posh.lib
    )
ENDIF(WINDOWS)

IF(MACOSX)
    TARGET_LINK_LIBRARIES(OvergrowthWorker
        ${LIBDIR}/nvidia-texture-tools-read-only/lib/mac/libnvtt.a
        ${LIBDIR}/nvidia-texture-tools-read-only/lib/mac/libnvcore.a
        ${LIBDIR}/nvidia-texture-tools-read-only/lib/mac/libnvmath.a
        ${LIBDIR}/nvidia-texture-tools-read-only/lib/mac/libnvimage.a
        ${LIBDIR}/nvidia-texture-tools-read-only/lib/mac/libsquish.a
        ${LIBDIR}/nvidia-texture-tools-read-only/lib/mac/libposh.a
    )
ENDIF(MACOSX)

IF(LINUX)
    TARGET_LINK_LIBRARIES(OvergrowthWorker
        nvtt nvcore nvmath nvimage squish posh
        dl #needed by nvcore
    )
ENDIF(LINUX)

IF(UNIX)
    TARGET_LINK_LIBRARIES(OvergrowthWorker pthread)
ENDIF(UNIX)

IF(MSVC)
    SET(PrecompiledHeader "${SRCDIR}/stdafx.h")
    SET(PrecompiledSource "${SRCDIR}/stdafx.cpp")
    GET_FILENAME_COMPONENT(PrecompiledBasename ${PrecompiledHeader} NAME_WE)
    SET(PrecompiledBinary "$(IntDir)/${PrecompiledBasename}.pch")
    SET(Sources ${${SourcesVar}})

    SET_SOURCE_FILES_PROPERTIES(${PrecompiledSource} PROPERTIES 
        COMPILE_FLAGS "/Yc\"${PrecompiledHeader}\" /FI\"${PrecompiledHeader}\" /Fp\"${PrecompiledBinary}\""
        OBJECT_OUTPUTS "${PrecompiledBinary}"
        OBJECT_DEPENDS ""
    )
    # Add precompiled header to SourcesVar
    LIST(APPEND OVERGROWTH_SRCS ${PrecompiledSource})
ENDIF(MSVC)

ADD_EXECUTABLE(Overgrowth ${OVERGROWTH_SRCS} ${WIN_RESOURCE_FILE})
SET_TARGET_PROPERTIES(Overgrowth PROPERTIES
    OUTPUT_NAME Overgrowth
)

IF(WINDOWS)
    SET_TARGET_PROPERTIES(Overgrowth PROPERTIES
        COMPILE_FLAGS "${SSE_FLAGS} /DWIN32"
    )
    IF(MSVC)
        SET_TARGET_PROPERTIES(Overgrowth PROPERTIES 
            COMPILE_FLAGS "${SSE_FLAGS} /DWIN32 /MP /Yu\"${PrecompiledBinary}\" /FI\"${PrecompiledBinary}\" /Fp\"${PrecompiledBinary}\"" 
            OBJECT_DEPENDS "${PrecompiledBinary}"
        )
    ENDIF(MSVC)
    
    function(CopyDLL start_path end_path)
        add_custom_command( TARGET Overgrowth POST_BUILD
            COMMAND ${CMAKE_COMMAND} -E copy_if_different
                "${start_path}"
                "\"$<TARGET_FILE_DIR:Overgrowth>/${end_path}\""
        )
    endfunction(CopyDLL)
    
    CopyDLL("${CMAKE_SOURCE_DIR}/steam_appid.txt" "")
    CopyDLL("${LIBDIR}/LIB_SDL/lib/SDL.dll fullscreen mouse patch" SDL.dll)
    
    CopyDLL("${LIBDIR}/${AWESOMIUM_VERSION}/bin/release_packed/Awesomium.dll" "")
    CopyDLL("${LIBDIR}/${AWESOMIUM_VERSION}/bin/release_packed/AwesomiumProcess.exe" "")
    CopyDLL("${LIBDIR}/${AWESOMIUM_VERSION}/bin/release_packed/icudt42.dll" "")
    
    CopyDLL("${LIBDIR}/fftw-3.0.1-w32-pl1/fftw3.dll" "")
    CopyDLL("${LIBDIR}/GLEW/bin/glew32.dll" "")
    CopyDLL("${LIBDIR}/ogg/bin/libogg.dll" "")
    CopyDLL("${LIBDIR}/vorbis/bin/libvorbis.dll" "")
    CopyDLL("${LIBDIR}/vorbis/bin/libvorbisfile.dll" "")
    CopyDLL("${LIBDIR}/theora/bin/libtheora.dll" "")
    CopyDLL("${LIBDIR}/zlib1.2.7/bin/zlib.dll" "")
    CopyDLL("${LIBDIR}/freealut-1.1.0-bin/lib/alut.dll" "")
    CopyDLL("${LIBDIR}/FreeImage/bin/FreeImage.dll" "")
    add_custom_command( TARGET Overgrowth POST_BUILD
        COMMAND ${CMAKE_COMMAND} -E copy_if_different
            $<TARGET_FILE:ode_lib>
            $<TARGET_FILE_DIR:Overgrowth>/$<TARGET_FILE_NAME:ode_lib>
    )
ENDIF(WINDOWS)

IF(UNIX)
    SET_TARGET_PROPERTIES(Overgrowth PROPERTIES
        COMPILE_FLAGS "${SSE_FLAGS} -include ${SRCDIR}/stdafx.h"
    )
ENDIF(UNIX)

TARGET_LINK_LIBRARIES(Overgrowth
    triangle
    sigar
    minizip
    qslim
    triangle
    Recast
    TheoraPlayer
    freeimage

    ${STATIC_LIBS}
    ${FLTK_LIBS}
)

IF(WINDOWS)
    TARGET_LINK_LIBRARIES(Overgrowth
        openal32
        opengl32
        libogg
        libvorbis
        libvorbisfile
        libtheora
        glu32
        sdlmain
        alut
        awesomium
        SDL
        debug ${LIBDIR}/nvidia-texture-tools-read-only/lib/win32debug/nvtt.lib
        optimized ${LIBDIR}/nvidia-texture-tools-read-only/lib/win32release/nvtt.lib
        debug ${LIBDIR}/nvidia-texture-tools-read-only/lib/win32debug/nvcore.lib
        optimized ${LIBDIR}/nvidia-texture-tools-read-only/lib/win32release/nvcore.lib
        debug ${LIBDIR}/nvidia-texture-tools-read-only/lib/win32debug/nvimage.lib
        optimized ${LIBDIR}/nvidia-texture-tools-read-only/lib/win32release/nvimage.lib
        debug ${LIBDIR}/nvidia-texture-tools-read-only/lib/win32debug/nvmath.lib
        optimized ${LIBDIR}/nvidia-texture-tools-read-only/lib/win32release/nvmath.lib
        debug ${LIBDIR}/nvidia-texture-tools-read-only/lib/win32debug/squish.lib
        optimized ${LIBDIR}/nvidia-texture-tools-read-only/lib/win32release/squish.lib
        debug ${LIBDIR}/nvidia-texture-tools-read-only/lib/win32debug/posh.lib
        optimized ${LIBDIR}/nvidia-texture-tools-read-only/lib/win32release/posh.lib
    )
ENDIF(WINDOWS)

if(UNIX)
    TARGET_LINK_LIBRARIES(Overgrowth
        BulletDynamics
        BulletCollision
        LinearMath
    )
ENDIF(UNIX)

IF(LINUX)
    TARGET_LINK_LIBRARIES(Overgrowth
        alut
        openal
        ogg
        vorbis
        vorbisfile
        theora
        theoradec
        GL
        GLU
        pthread
        bz2
        png12
        jpeg
        awesomium
        SDL
        boost_date_time boost_filesystem boost_system boost_thread boost_wave
        nvtt nvcore nvmath nvimage squish posh
        libz.so
    )
ENDIF(LINUX)

IF(MACOSX)
    TARGET_LINK_LIBRARIES(Overgrowth
        ${FRAMEWORKS}
        ogg
        vorbis
        vorbisfile
        theoradec
        fftw3f
        mix
        angelscript
        ode
        gfx
        boost_date_time boost_filesystem boost_system boost_thread boost_wave
        ${LIBDIR}/nvidia-texture-tools-read-only/lib/mac/libnvtt.a
        ${LIBDIR}/nvidia-texture-tools-read-only/lib/mac/libnvcore.a
        ${LIBDIR}/nvidia-texture-tools-read-only/lib/mac/libnvmath.a
        ${LIBDIR}/nvidia-texture-tools-read-only/lib/mac/libnvimage.a
        ${LIBDIR}/nvidia-texture-tools-read-only/lib/mac/libsquish.a
        ${LIBDIR}/nvidia-texture-tools-read-only/lib/mac/libposh.a
    )
    SET_TARGET_PROPERTIES(Overgrowth PROPERTIES LINK_FLAGS "-F${CMAKE_SOURCE_DIR}/../MacInterfaces")
ENDIF(MACOSX)

IF(MACOSX)
    function(CreateBundleDir path)
        add_custom_command( TARGET Overgrowth POST_BUILD
            COMMAND ${CMAKE_COMMAND} -E make_directory "$<TARGET_FILE_DIR:Overgrowth>/Overgrowth.app${path}"
        )
    endfunction(CreateBundleDir)

    function(CopyFileToBundle start_path end_path)
        add_custom_command( TARGET Overgrowth POST_BUILD
            COMMAND ${CMAKE_COMMAND} -E copy_if_different
                "\"${start_path}\""
                "\"$<TARGET_FILE_DIR:Overgrowth>/Overgrowth.app/Contents/${end_path}\""
        )
    endfunction(CopyFileToBundle)

    function(CopyFolderToBundle start_path end_path)
        add_custom_command( TARGET Overgrowth POST_BUILD
            COMMAND cp -af
                "\"${start_path}\""
                "\"$<TARGET_FILE_DIR:Overgrowth>/Overgrowth.app/Contents/${end_path}\""
        )
    endfunction(CopyFolderToBundle)

    #add_custom_command( TARGET Overgrowth POST_BUILD
    #    COMMAND rm -R "\"$<TARGET_FILE_DIR:Overgrowth>/Overgrowth.app\""
    #)
    CreateBundleDir("")
    CreateBundleDir("/Contents")
    CreateBundleDir("/Contents/MacOS")
    CreateBundleDir("/Contents/Resources")
    CreateBundleDir("/Contents/Frameworks")
    CopyFileToBundle("$<TARGET_FILE:Overgrowth>" "MacOS/Overgrowth")
    CopyFileToBundle("$<TARGET_FILE:OvergrowthWorker>" "MacOS/OvergrowthWorker")
    CopyFileToBundle("${CMAKE_SOURCE_DIR}/lugaru2.icns" "Resources/lugaru2.icns")
    CopyFileToBundle("${CMAKE_SOURCE_DIR}/FinalInfo.plist" "Info.plist")
    CopyFileToBundle("${CMAKE_SOURCE_DIR}/steam_appid.txt" "MacOS/steam_appid.txt")
    CopyFileToBundle("${CMAKE_SOURCE_DIR}/../MacLibs/libsteam_api.dylib" "MacOS/libsteam_api.dylib")
    CopyFileToBundle("${CMAKE_SOURCE_DIR}/steam_appid.txt" "Resources/steam_appid.txt")
    CopyFolderToBundle("${CMAKE_SOURCE_DIR}/../MacInterfaces/SDL.framework" "Frameworks/SDL.framework")
    CopyFolderToBundle("${CMAKE_SOURCE_DIR}/../MacLibs/Awesomium.framework" "Frameworks/Awesomium.framework")
ENDIF(MACOSX)

# end of CMakeLists.txt ...
