include_directories(
    ../addons/acodec
    ../addons/audio
    ../addons/color
    ../addons/font
    ../addons/image
    ../addons/main
    ../addons/memfile
    ../addons/native_dialog
    ../addons/physfs
    ../addons/primitives
    ../addons/shader
    ../addons/ttf
    ../addons/video
    )

if(SUPPORT_PHYSFS)
    # The physfs example directly includes physfs.h
    include_directories(${PHYSFS_INCLUDE_DIR})
endif()

#-----------------------------------------------------------------------------#

# List dependencies explicitly for loading by Android APKs.

set(AUDIO x${AUDIO_LINK_WITH})
set(ACODEC ${AUDIO} x${ACODEC_LINK_WITH})
set(COLOR x${COLOR_LINK_WITH})
set(DIALOG x${NATIVE_DIALOG_LINK_WITH})
set(FONT x${FONT_LINK_WITH})
set(IMAGE x${IMAGE_LINK_WITH})
set(MEMFILE x${MEMFILE_LINK_WITH})
set(PHYSFS x${PHYSFS_LINK_WITH})
set(PRIM x${PRIMITIVES_LINK_WITH})
set(TTF ${FONT} x${TTF_LINK_WITH})
set(VIDEO x${VIDEO_LINK_WITH})
set(NIHGUI nihgui.cpp ${FONT} ${PRIM})

include(Helper.cmake)

#-----------------------------------------------------------------------------#

# Lists of data files to add to Android APKs, to appear after the DATA keyword.
# DATA_IMAGES is a special case that includes the DATA keyword.
# Examples don't necessarily use every file in the list.

set(DATA_IMAGES
    DATA
    a4_font.tga
    alexlogo.bmp
    alexlogo.png
    allegro.pcx
    bkg.png
    bmpfont.tga
    cursor.tga
    fakeamp.bmp
    fixed_font.tga
    font.tga
    gradient1.bmp
    haiku/air_effect.png
    icon.tga
    mysha.pcx
    mysha256x256.png
    obp.jpg
    texture.tga
    texture2.tga
    )

set(DATA_TTF
    DejaVuSans.ttf
    a4_font.fnt
    )

set(DATA_AUDIO
    welcome.wav
    welcome.voc
    )

set(DATA_SHADERS
    ex_prim_shader_pixel.glsl
    ex_prim_shader_pixel.hlsl
    ex_prim_shader_vertex.glsl
    ex_prim_shader_vertex.hlsl
    ex_prim_wrap_pixel.glsl
    ex_prim_wrap_pixel.hlsl
    ex_shader_multitex_pixel.glsl
    ex_shader_multitex_pixel.hlsl
    ex_shader_palette_pixel.glsl
    ex_shader_pixel.glsl
    ex_shader_pixel.hlsl
    ex_shader_vertex.glsl
    ex_shader_vertex.hlsl
    )

file(GLOB DATA_HAIKU RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/data data/haiku/*)
set(DATA_HAIKU ${DATA_HAIKU})

#-----------------------------------------------------------------------------#

example(ex_config DATA sample.cfg)
example(ex_dir ${DATA_IMAGES})
example(ex_file CONSOLE ${DATA_IMAGES})
example(ex_file_slice CONSOLE)
example(ex_get_path)
example(ex_memfile CONSOLE ${MEMFILE})
example(ex_monitorinfo)
example(ex_path)
example(ex_path_test)
example(ex_user_events)
example(ex_inject_events)

if(NOT MSVC)
    # UTF-8 strings are problematic under MSVC.
    example(ex_utf8)
endif(NOT MSVC)

if(ANDROID)
    example(ex_android ${IMAGE} ${PRIM} ${DATA_IMAGES})
endif(ANDROID)

example(ex_bitmap ${IMAGE} ${DATA_IMAGES})
example(ex_bitmap_file ${IMAGE} ${DATA_IMAGES})
example(ex_bitmap_flip ${IMAGE} ${FONT} ${DATA_IMAGES})
example(ex_blend ${FONT} ${IMAGE} ${PRIM} ${DATA_IMAGES})
example(ex_blend2 ex_blend2.cpp ${NIHGUI} ${IMAGE} ${DATA_IMAGES})
example(ex_blend_bench ${IMAGE} ${PRIM} ${DATA_IMAGES})
example(ex_blend_test ${PRIM})
example(ex_blend_target ${IMAGE} ${DATA_IMAGES})
example(ex_blit ${FONT} ${IMAGE} ${COLOR} ${DATA_IMAGES})
example(ex_clip ${FONT} ${COLOR})
example(ex_clipboard ${IMAGE} ${FONT} ${DATA_IMAGES})
example(ex_color ex_color.cpp ${NIHGUI} ${TTF} ${COLOR} DATA ${DATA_TTF})
example(ex_color2 ex_color2.c ${FONT} ${COLOR} ${PRIM})
example(ex_color_gradient ex_color_gradient.c ${TTF} ${COLOR} ${PRIM} DATA ${DATA_TTF})
example(ex_compressed ${IMAGE} ${FONT} ${DATA_IMAGES})
example(ex_convert CONSOLE ${IMAGE})
example(ex_cpu ${FONT})
example(ex_depth_mask ${IMAGE} ${TTF} ${DATA_IMAGES} ${DATA_TTF})
example(ex_depth_target ${IMAGE} ${FONT} ${COLOR} ${PRIM})
example(ex_disable_screensaver ${FONT})
example(ex_display_events ${FONT} ${PRIM})
example(ex_display_options ${FONT} ${PRIM})
example(ex_draw ${FONT} ${IMAGE} ${COLOR} ${PRIM} ${DATA_IMAGES})
example(ex_draw_bitmap ${IMAGE} ${FONT} ${DATA_IMAGES})
example(ex_drawpixels)
example(ex_dualies ${IMAGE})
example(ex_expose ${IMAGE} ${PRIM} ${DATA_IMAGES})
example(ex_filter ${FONT} ${IMAGE} ${COLOR} ${DATA_IMAGES})
example(ex_fs_resize ${IMAGE} ${PRIM} ${DATA_IMAGES})
example(ex_fs_window ${IMAGE} ${PRIM} ${FONT} ${DATA_IMAGES})
example(ex_icon ${IMAGE} ${DATA_IMAGES})
example(ex_icon2 ${IMAGE} ${DATA_IMAGES})
example(ex_haptic ${PRIM})
example(ex_haptic2 ex_haptic2.cpp ${NIHGUI} ${TTF} DATA ${DATA_TTF})
example(ex_joystick_events ${PRIM} ${FONT})
example(ex_joystick_hotplugging ${PRIM})
example(ex_keyboard_events)
example(ex_keyboard_focus)
example(ex_lines ${PRIM})
example(ex_loading_thread ${IMAGE} ${FONT} ${PRIM} ${DATA_IMAGES})
example(ex_lockbitmap)
example(ex_membmp ${FONT} ${IMAGE} ${DATA_IMAGES})
example(ex_mouse ${IMAGE} ${PRIM} ${DATA_IMAGES})
example(ex_mouse_cursor ${FONT} ${IMAGE} ${DATA_IMAGES})
example(ex_mouse_events ${FONT} ${IMAGE} ${PRIM} ${DATA_IMAGES})
example(ex_mouse_focus)
example(ex_mouse_warp ${FONT} ${PRIM})
example(ex_multisample ${FONT} ${COLOR} ${PRIM})
example(ex_multisample_target ${IMAGE} ${FONT} ${COLOR} ${PRIM})
example(ex_multiwin ${IMAGE})
example(ex_nodisplay ${IMAGE} ${DATA_IMAGES})
example(ex_noframe ${IMAGE} ${DATA_IMAGES})
example(ex_physfs ${PHYSFS} ${IMAGE} ${DATA_IMAGES})
example(ex_pixelformat ex_pixelformat.cpp ${NIHGUI} ${IMAGE} ${DATA_IMAGES})
example(ex_polygon ${FONT} ${PRIM})
example(ex_premulalpha ${FONT})
example(ex_prim ${FONT} ${IMAGE} ${PRIM} ${DATA_IMAGES})
example(ex_prim_shader ${PRIM} DATA ${DATA_SHADERS})
example(ex_prim_wrap ${IMAGE} ${FONT} ${PRIM} ${DATA_IMAGES} ${DATA_SHADERS})
example(ex_reparent ${IMAGE} ${PRIM} ${DATA_IMAGES})
example(ex_resize ${PRIM})
example(ex_resize2 ${IMAGE} ${FONT})
example(ex_rotate ${IMAGE} ${DATA_IMAGES})
example(ex_scale ${IMAGE} ${DATA_IMAGES})
example(ex_shader ex_shader.cpp ${IMAGE} ${DATA_IMAGES} ${DATA_SHADERS})
example(ex_shader_multitex ${IMAGE} ${DATA_IMAGES} ${DATA_SHADERS})
example(ex_shader_target ${IMAGE} ${DATA_IMAGES} ${DATA_SHADERS})
example(ex_subbitmap ${IMAGE} ${PRIM} ${DATA_IMAGES})
example(ex_threads ${PRIM})
example(ex_threads2)
example(ex_timedwait)
example(ex_timer ${FONT} ${PRIM})
example(ex_timer_pause)
example(ex_touch_input ${PRIM})
example(ex_transform ${FONT} ${IMAGE} ${PRIM} ${DATA_IMAGES})
example(ex_vertex_buffer ${FONT} ${PRIM})
example(ex_vsync ${FONT} ${IMAGE} ${PRIM})
example(ex_windows ${FONT} ${IMAGE})
example(ex_window_constraints ${FONT} ${IMAGE})
example(ex_window_maximized ${FONT} ${IMAGE} ${PRIM} ${DIALOG})
example(ex_window_title ${IMAGE} ${FONT} ${DATA_IMAGES})
example(ex_winfull)
example(ex_video ${AUDIO} ${FONT} ${PRIM} ${VIDEO})

if(WANT_D3D AND D3DX9_FOUND)
    example(ex_d3d ex_d3d.cpp EXTRA_LIBS ${D3DX9_LIBRARY})
endif()

if(SUPPORT_OPENGL AND NOT SUPPORT_OPENGLES)
    example(ex_gldepth ${FONT} ${IMAGE})
    example(ex_glext)
    example(ex_opengl)
    example(ex_opengl_pixel_shader ${IMAGE})
endif()
if(SUPPORT_OPENGL AND NOT IPHONE AND NOT ALLEGRO_RASPBERRYPI)
    example(ex_palette ${IMAGE} ${COLOR} ${DATA_IMAGES} ${DATA_SHADERS})
endif()

example(ex_font ${FONT} ${IMAGE} ${DATA_IMAGES})
example(ex_font_justify ex_font_justify.cpp ${NIHGUI} ${IMAGE} ${TTF} ${DATA_IMAGES} ${DATA_TTF})
example(ex_font_multiline ex_font_multiline.cpp ${NIHGUI} ${IMAGE} ${TTF} ${COLOR} ${DATA_IMAGES} ${DATA_TTF})
example(ex_logo ${FONT} ${TTF} ${IMAGE} ${PRIM} DATA ${DATA_TTF})
example(ex_projection ${TTF} ${IMAGE} ${DATA_IMAGES} ${DATA_TTF})
example(ex_projection2 ${PRIM} ${FONT} ${IMAGE} ${DATA_IMAGES})
example(ex_camera ${FONT} ${COLOR} ${PRIM} ${IMAGE})
example(ex_ttf ${TTF} ${PRIM} ${IMAGE} DATA ${DATA_TTF} ex_ttf.ini)

example(ex_acodec CONSOLE ${AUDIO} ${ACODEC})
example(ex_acodec_multi CONSOLE ${AUDIO} ${ACODEC})
example(ex_audio_devices ${AUDIO})
example(ex_audio_chain ex_audio_chain.cpp ${AUDIO} ${ACODEC} ${PRIM} ${FONT} ${TTF} DATA ${DATA_TTF} ${DATA_HAIKU})
example(ex_audio_props ex_audio_props.cpp ${NIHGUI} ${ACODEC} DATA ${DATA_AUDIO})
example(ex_audio_simple CONSOLE ${AUDIO} ${ACODEC} ${FONT})
example(ex_audio_timer ${AUDIO} ${FONT})
example(ex_haiku ${AUDIO} ${ACODEC} ${IMAGE} ${DATA_IMAGES} ${DATA_HAIKU})
example(ex_kcm_direct CONSOLE ${AUDIO} ${ACODEC})
example(ex_mixer_chain CONSOLE ${AUDIO} ${ACODEC})
example(ex_mixer_pp ${AUDIO} ${ACODEC} ${PRIM} ${IMAGE} ${DATA_IMAGES} ${DATA_AUDIO})
example(ex_record ${AUDIO} ${ACODEC} ${PRIM})
example(ex_record_name ${AUDIO} ${ACODEC} ${PRIM} ${IMAGE} ${FONT})
example(ex_resample_test ${AUDIO})
example(ex_saw ${AUDIO})
example(ex_stream_file CONSOLE ${AUDIO} ${ACODEC})
example(ex_stream_seek ${AUDIO} ${ACODEC} ${PRIM} ${FONT} ${IMAGE} ${DATA_IMAGES} ${DATA_AUDIO})
example(ex_synth ex_synth.cpp ${NIHGUI} ${AUDIO} ${TTF} DATA ${DATA_TTF})

example(ex_native_filechooser ${DIALOG} ${FONT} ${IMAGE} ${COLOR})
example(ex_menu ${DIALOG} ${IMAGE})

# In some configurations CURL pulls in dependencies which we don't check for.
# This example isn't important so it's disabled by default to prevent problems.
option(WANT_CURL_EXAMPLE "Build ex_curl example" off)
if(WANT_CURL_EXAMPLE)
    find_package(CURL)
    if(CURL_FOUND)
        if(WIN32)
            # select() is in the Winsock library.
            example(ex_curl ${IMAGE} EXTRA_LIBS ${CURL_LIBRARIES} ws2_32)
        else(WIN32)
            example(ex_curl ${IMAGE} EXTRA_LIBS ${CURL_LIBRARIES})
        endif(WIN32)
    endif(CURL_FOUND)
endif(WANT_CURL_EXAMPLE)

# Only build the enet examples if libenet is installed
find_package(ENet)
if(ENET_FOUND)
    example(ex_enet_client ${PRIM} EXTRA_LIBS ${ENET_LIBRARIES})
    example(ex_enet_server EXTRA_LIBS ${ENET_LIBRARIES})
endif()

# example(ex_ogre3d ex_ogre3d.cpp)
# include_directories(/usr/include/OGRE)
# target_link_libraries(ex_ogre3d OgreMain)

copy_data_dir_to_build(copy_example_data
    "${CMAKE_CURRENT_SOURCE_DIR}/data"
    "${CMAKE_CURRENT_BINARY_DIR}/data"
    )

# This is useful for developers to add temporary test programs.
include(${CMAKE_CURRENT_SOURCE_DIR}/local_examples.cmake OPTIONAL)

#-----------------------------------------------------------------------------#
# vim: set ts=8 sts=4 sw=4 et:
