+ # opengl32.dll
+ add_custom_command (
+ OUTPUT wgltrace.cpp
+ COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/wgltrace.py > ${CMAKE_CURRENT_BINARY_DIR}/wgltrace.cpp
+ DEPENDS wgltrace.py gltrace.py trace.py specs/wglapi.py specs/wglenum.py specs/glapi.py specs/glparams.py specs/gltypes.py specs/winapi.py specs/stdapi.py
+ )
+ add_library (wgltrace MODULE specs/opengl32.def
+ wgltrace.cpp
+ glcaps.cpp
+ glproc_gl.cpp
+ )
+ add_dependencies (wgltrace glproc)
+ set_target_properties (wgltrace PROPERTIES
+ PREFIX ""
+ OUTPUT_NAME opengl32
+ RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/wrappers
+ LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/wrappers
+ )
+ install (TARGETS wgltrace LIBRARY DESTINATION ${WRAPPER_INSTALL_DIR})
+
+elseif (APPLE)
+ # OpenGL framework
+ add_custom_command (
+ OUTPUT cgltrace.cpp
+ COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/cgltrace.py > ${CMAKE_CURRENT_BINARY_DIR}/cgltrace.cpp
+ DEPENDS cgltrace.py gltrace.py trace.py specs/cglapi.py specs/glapi.py specs/glparams.py specs/gltypes.py specs/stdapi.py
+ )
+
+ add_library (cgltrace SHARED
+ cgltrace.cpp
+ glcaps.cpp
+ glproc_gl.cpp
+ )
+
+ add_dependencies (cgltrace glproc)
+
+ set_target_properties (cgltrace PROPERTIES
+ # OpenGL framework name
+ PREFIX "" OUTPUT_NAME "OpenGL" SUFFIX ""
+ # Specificy the version and reexport GLU symbols
+ LINK_FLAGS "-compatibility_version 1 -current_version 1.0.0 -Wl,-reexport_library,/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLU.dylib"
+ RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/wrappers
+ LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/wrappers
+ )
+
+ target_link_libraries (cgltrace dl)
+
+ install (TARGETS cgltrace LIBRARY DESTINATION ${WRAPPER_INSTALL_DIR})
+elseif (X11_FOUND)
+ # libGL.so
+ add_custom_command (
+ OUTPUT glxtrace.cpp
+ COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/glxtrace.py > ${CMAKE_CURRENT_BINARY_DIR}/glxtrace.cpp
+ DEPENDS glxtrace.py gltrace.py trace.py specs/glxapi.py specs/glapi.py specs/glparams.py specs/gltypes.py specs/stdapi.py
+ )
+
+ add_library (glxtrace SHARED
+ glxtrace.cpp
+ glcaps.cpp
+ glproc_gl.cpp
+ )
+
+ add_dependencies (glxtrace glproc)
+
+ set_target_properties (glxtrace PROPERTIES
+ # avoid the default "lib" prefix
+ PREFIX ""
+ # Prevent symbol relocations internal to our wrapper library to be
+ # overwritten by the application.
+ LINK_FLAGS "-Wl,-Bsymbolic -Wl,-Bsymbolic-functions"
+ RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/wrappers
+ LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/wrappers
+ )
+
+ target_link_libraries (glxtrace dl ${X11_X11_LIB})
+
+ install (TARGETS glxtrace LIBRARY DESTINATION ${WRAPPER_INSTALL_DIR})
+endif ()
+
+
+if (EGL_FOUND)
+ # libEGL.so/libGL.so
+ add_custom_command (
+ OUTPUT egltrace.cpp
+ COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/egltrace.py > ${CMAKE_CURRENT_BINARY_DIR}/egltrace.cpp
+ DEPENDS egltrace.py gltrace.py trace.py specs/eglapi.py specs/glapi.py specs/glparams.py specs/gltypes.py specs/stdapi.py
+ )
+
+ add_library (egltrace SHARED
+ egltrace.cpp
+ glcaps.cpp
+ glproc_egl.cpp
+ )
+
+ add_dependencies (egltrace glproc)
+
+ set_property (
+ TARGET egltrace
+ APPEND
+ PROPERTY COMPILE_DEFINITIONS "TRACE_EGL"
+ )
+
+ set_target_properties (egltrace PROPERTIES
+ # avoid the default "lib" prefix
+ PREFIX ""
+ LINK_FLAGS "-Wl,-Bsymbolic -Wl,-Bsymbolic-functions"
+ # Prevent symbol relocations internal to our wrapper library to be
+ # overwritten by the application.
+ RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/wrappers
+ LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/wrappers
+ )
+
+ target_link_libraries (egltrace dl)
+
+ install (TARGETS egltrace LIBRARY DESTINATION ${WRAPPER_INSTALL_DIR})
+endif ()
+
+##############################################################################
+# API retracers
+
+add_custom_command (
+ OUTPUT glretrace_gl.cpp
+ COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/glretrace.py > ${CMAKE_CURRENT_BINARY_DIR}/glretrace_gl.cpp
+ DEPENDS glretrace.py retrace.py specs/glapi.py specs/gltypes.py specs/stdapi.py
+)
+
+add_custom_command (
+ OUTPUT glstate_params.cpp
+ COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/glstate.py > ${CMAKE_CURRENT_BINARY_DIR}/glstate_params.cpp
+ DEPENDS glstate.py specs/glparams.py specs/gltypes.py specs/stdapi.py
+)
+
+set (retrace_sources
+ glretrace_gl.cpp
+ glretrace_cgl.cpp
+ glretrace_glx.cpp
+ glretrace_wgl.cpp
+ glretrace_egl.cpp
+ glretrace_main.cpp
+ glstate.cpp
+ glstate_params.cpp
+ retrace.cpp
+ retrace_stdc.cpp
+ glws.cpp
+)
+
+if (WIN32 OR APPLE OR X11_FOUND)
+ add_executable (glretrace
+ ${retrace_sources}
+ ${glws_os}
+ glproc_gl.cpp
+ )
+
+ add_dependencies (glretrace glproc)
+
+ set_property (
+ TARGET glretrace
+ APPEND
+ PROPERTY COMPILE_DEFINITIONS "RETRACE"
+ )
+
+ target_link_libraries (glretrace
+ common
+ )
+
+ if (WIN32)
+ else ()
+ if (APPLE)
+ target_link_libraries (glretrace
+ "-framework Cocoa"
+ "-framework ApplicationServices" # CGS*
+ ${OPENGL_gl_LIBRARY} # CGL*
+ )
+ else ()
+ target_link_libraries (glretrace ${X11_X11_LIB})
+ endif ()
+
+ target_link_libraries (glretrace
+ # gdb doesn't like when pthreads is loaded through dlopen (which happens
+ # when dlopen'ing libGL), so link pthreads to avoid this issue. See also
+ # http://stackoverflow.com/questions/2702628/gdb-cannot-find-new-threads-generic-error
+ pthread
+ dl
+ )
+ endif ()
+
+ install (TARGETS glretrace RUNTIME DESTINATION bin)
+endif ()
+
+if (EGL_FOUND AND X11_FOUND AND NOT WIN32 AND NOT APPLE)
+ add_executable (eglretrace
+ ${retrace_sources}
+ glws_egl_xlib.cpp
+ glproc_egl.cpp
+ )
+
+ add_dependencies (eglretrace glproc)
+
+ set_property (
+ TARGET eglretrace
+ APPEND
+ PROPERTY COMPILE_DEFINITIONS "RETRACE"
+ PROPERTY COMPILE_DEFINITIONS "TRACE_EGL"
+ )
+
+ target_link_libraries (eglretrace
+ common
+ ${X11_X11_LIB}
+ pthread
+ dl
+ )
+
+ install (TARGETS eglretrace RUNTIME DESTINATION bin)
+endif ()
+
+##############################################################################
+# CLI
+
+add_subdirectory(cli)
+
+##############################################################################
+# Scripts (to support the CLI)
+
+install (
+ PROGRAMS
+ ${CMAKE_CURRENT_SOURCE_DIR}/scripts/tracediff.sh
+ ${CMAKE_CURRENT_SOURCE_DIR}/scripts/jsondiff.py
+ ${CMAKE_CURRENT_SOURCE_DIR}/scripts/snapdiff.py
+ DESTINATION ${SCRIPTS_INSTALL_DIR}
+)
+
+##############################################################################
+# GUI
+
+if (ENABLE_GUI AND QT4_FOUND AND QJSON_FOUND)
+ add_subdirectory(gui)
+endif ()
+
+
+##############################################################################
+# Packaging
+
+install (
+ FILES
+ BUGS.markdown
+ LICENSE
+ NEWS.markdown
+ README.markdown
+ TODO.markdown
+ DESTINATION ${DOC_INSTALL_DIR}
+)
+
+set (CPACK_PACKAGE_VERSION_MAJOR "2")
+set (CPACK_PACKAGE_VERSION_MINOR "0")
+
+# Use current date in YYYYMMDD format as patch number
+execute_process (
+ COMMAND ${PYTHON_EXECUTABLE} -c "import time, sys; sys.stdout.write(time.strftime('%Y%m%d'))"
+ OUTPUT_VARIABLE CPACK_PACKAGE_VERSION_PATCH
+)
+
+# See http://www.vtk.org/Wiki/CMake:CPackPackageGenerators
+if (WIN32)
+ set (CPACK_GENERATOR "ZIP")
+elseif (APPLE)
+ set (CPACK_GENERATOR "DragNDrop")
+else ()
+ set (CPACK_GENERATOR "TBZ2")
+endif ()