if (openSUSE)
    # openSUSE don't install wx in a standard library system
    # path. Let's bypass the dynamic linker and hardcode the path.
    set(CMAKE_INSTALL_RPATH_USE_LINK_PATH ON)
endif()

# Check that people use the good file
if(NOT TOP_CMAKE_WAS_SOURCED)
    message(FATAL_ERROR "
    You did not 'cmake' the good CMakeLists.txt file. Use the one in the top dir.
    It is advice to delete all wrongly generated cmake stuff => CMakeFiles & CMakeCache.txt")
endif(NOT TOP_CMAKE_WAS_SOURCED)

# Allow to build the shader files
if(EXISTS "${CMAKE_SOURCE_DIR}/plugins/zzogl-pg/opengl/ZeroGSShaders" AND REBUILD_SHADER AND NOT GLSL_API)
    add_subdirectory(ZeroGSShaders)
endif(EXISTS "${CMAKE_SOURCE_DIR}/plugins/zzogl-pg/opengl/ZeroGSShaders" AND REBUILD_SHADER AND NOT GLSL_API)

# plugin name
set(Output zzogl-0.4.0)

set(CommonFlags
    -DZEROGS_SSE2
    -fno-strict-aliasing
    -Wstrict-aliasing # Allow to track strict aliasing issue.
    -Wunused-variable
    )

#Clang doesn't support a few common flags that GCC does.
if(NOT USE_CLANG)
	set(zzoglFinalFlags
        ${zzoglFinalFlags}
        ${CommonFlags} -fno-regmove
    )
endif(NOT USE_CLANG) 

if(CMAKE_BUILD_TYPE STREQUAL Debug)
    set(zzoglFinalFlags
        ${zzoglFinalFlags}
        ${CommonFlags} -g -Wall -D_DEBUG
    )
elseif(CMAKE_BUILD_TYPE STREQUAL Devel)
    set(zzoglFinalFlags
        ${zzoglFinalFlags}
        ${CommonFlags} -g -W -DZEROGS_DEVBUILD
    )
elseif(CMAKE_BUILD_TYPE STREQUAL Release)
    set(zzoglFinalFlags
        ${zzoglFinalFlags}
        ${CommonFlags} -W
    )
endif()

# Select the shader API 
if(GLSL_API)
    set(zzoglFinalFlags
        ${zzoglFinalFlags}
        -DGLSL4_API -DOGL4_LOG
    )
    #-DGLSL_API
else(GLSL_API)
    set(zzoglFinalFlags
        ${zzoglFinalFlags}
        -DNVIDIA_CG_API
    )
endif(GLSL_API)

# Select the EGL API
if(EGL_API AND EGL_FOUND)
    if (EGL_GL_CONTEXT_SUPPORT)
        set(zzoglFinalFlags
            ${zzoglFinalFlags}
            -DEGL_API
        )
    else()
        message(WARNING "Current EGL implementation doesn't support openGL context. Fallback to standard GLX.")
    endif()
endif()


# zzogl sources
set(zzoglSources
    GifTransfer.cpp
    GLWin32.cpp
    GLWinX11.cpp
    GSDump.cpp
    GSmain.cpp
    HostMemory.cpp
    Mem.cpp
    Mem_Swizzle.cpp
    Mem_Tables.cpp
    Profile.cpp
    rasterfont.cpp
    Regs.cpp
    targets.cpp
    zerogs.cpp
    zpipe.cpp
    ZZDepthTargets.cpp
    ZZMemoryTargets.cpp
    ZZRenderTargets.cpp
    ZZClut.cpp
    ZZHacks.cpp
    ZZKeyboard.cpp
    ZZoglDrawing.cpp
    ZZLog.cpp
    ZZoglCreate.cpp
    ZZoglCRTC.cpp
    ZZoglFlush.cpp
    ZZoglFlushHack.cpp
    ZZoglMem.cpp
    ZZoglSave.cpp
    ZZoglShaders.cpp
    ZZoglShadersGLSL.cpp
    ZZoglShadersGLSL4.cpp
    ZZoglShoots.cpp
    ZZoglVB.cpp
    )

# zzogl headers
set(zzoglHeaders
    common.h
    CRC.h
    GifTransfer.h
    # glprocs.h
    GS.h
    GSDump.h
    HostMemory.h
    ps2hw_gl4.h
    Mem.h
    Mem_Swizzle.h
    Mem_Transmit.h
    Profile.h
    rasterfont.h
    Regs.h
    targets.h
    Util.h
    x86.h
    zerogs.h
    zpipe.h
    ZZClut.h
    ZZoglFlush.h
    ZZGl.h
    ZZHacks.h
    ZZoglDrawing.h
    ZZLog.h
    ZZoglCRTC.h
    ZZoglMath.h
    ZZoglMem.h
    ZZoglShaders.h
    ZZoglShoots.h
    ZZoglVB.h
    )

# zzogl shader sources
set(zzoglShaderSources
    ctx0/ps2hw_ctx.fx
    ctx1/ps2hw_ctx.fx)

# zzogl Linux sources
set(zzoglLinuxSources
    Linux/Conf.cpp
    Linux/Linux.cpp)

# zzogl Linux headers
set(zzoglLinuxHeaders
    Linux/Linux.h)

set(zzoglFinalSources
    ${zzoglSources}
    ${zzoglHeaders}
    ${zzoglShaderSources}
    ${zzoglLinuxSources}
    ${zzoglLinuxHeaders}
)

set(zzoglFinalLibs
    Utilities_NO_TLS
    ${OPENGL_LIBRARIES}
)

# add additional include directories
include_directories(Linux)

# Generate Glsl header file. Protect with REBUILD_SHADER to avoid build-dependency on PERL
if (REBUILD_SHADER)
    add_custom_command(OUTPUT ps2hw_gl4.h COMMAND perl ${CMAKE_SOURCE_DIR}/linux_various/glsl2h.pl)
endif()

if(EGL_API AND EGL_FOUND AND EGL_GL_CONTEXT_SUPPORT)
    set(zzoglFinalLibs
        ${zzoglFinalLibs}
        ${EGL_LIBRARIES}
    )
endif()

if(NOT GLSL_API)
    set(zzoglFinalLibs
        ${zzoglFinalLibs}
        ${CG_LIBRARIES}
    )
endif(NOT GLSL_API)

set(zzoglFinalLibs
    ${zzoglFinalLibs}
    ${GLEW_LIBRARY}
    ${X11_LIBRARIES}
    ${JPEG_LIBRARIES}
    ${GTK2_LIBRARIES}
    ${ZLIB_LIBRARIES}
    ${LIBC_LIBRARIES}
)

add_pcsx2_plugin(${Output} "${zzoglFinalSources}" "${zzoglFinalLibs}" "${zzoglFinalFlags}")

# Trick that allow to compile zzogl with GSOPEN2 and the replayer with GSOPEN
set_target_properties(${Output} PROPERTIES COMPILE_DEFINITIONS USE_GSOPEN2)

if(NOT GLSL_API AND NOT REBUILD_SHADER)
    if(PACKAGE_MODE)
        install(FILES ${CMAKE_SOURCE_DIR}/plugins/zzogl-pg/opengl/ps2hw.dat DESTINATION ${PLUGIN_DIR})
    else()
        install(FILES ${CMAKE_SOURCE_DIR}/plugins/zzogl-pg/opengl/ps2hw.dat DESTINATION ${CMAKE_SOURCE_DIR}/bin/plugins)
    endif()
endif()

################################### Replay Loader
if(BUILD_REPLAY_LOADERS)
	set(Replay pcsx2_ZZReplayLoader)
    set(zzoglReplayLoaderFinalSources
        ${zzoglFinalSources}
        linux_replay.cpp
    )
    add_pcsx2_executable(${Replay} "${zzoglReplayLoaderFinalSources}" "${zzoglFinalLibs}" "${zzoglFinalFlags}")
endif(BUILD_REPLAY_LOADERS)