+ # 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 wglapi.py wglenum.py glapi.py glparams.py gltypes.py winapi.py stdapi.py
+ )
+ add_library (wgltrace MODULE opengl32.def
+ wgltrace.cpp
+ glcaps.cpp
+ ${CMAKE_CURRENT_BINARY_DIR}/glproc.hpp
+ )
+ set_target_properties (wgltrace PROPERTIES
+ PREFIX ""
+ OUTPUT_NAME opengl32
+ RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/wrappers
+ LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/wrappers
+ )
+ if (MINGW)
+ set_target_properties(wgltrace PROPERTIES LINK_FLAGS "-Wl,--enable-stdcall-fixup ${CMAKE_CURRENT_SOURCE_DIR}/opengl32.def")
+ endif (MINGW)
+ install (TARGETS wgltrace LIBRARY DESTINATION wrappers)
+
+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 cglapi.py glapi.py glparams.py gltypes.py stdapi.py
+ )
+
+ add_library (cgltrace SHARED
+ cgltrace.cpp
+ glcaps.cpp
+ ${CMAKE_CURRENT_BINARY_DIR}/glproc.hpp
+ )
+
+ 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 wrappers)
+else ()
+ # 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 glxapi.py glapi.py glparams.py gltypes.py stdapi.py
+ )
+
+ add_library (glxtrace SHARED
+ ${CMAKE_CURRENT_BINARY_DIR}/glproc.hpp
+ glxtrace.cpp
+ glcaps.cpp
+ glsnapshot.cpp
+ )
+
+ 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.
+ set_target_properties (glxtrace PROPERTIES
+ LINK_FLAGS "-Wl,-Bsymbolic -Wl,-Bsymbolic-functions"
+ )
+
+ target_link_libraries (glxtrace dl ${X11_X11_LIB})
+
+ install (TARGETS glxtrace LIBRARY DESTINATION lib)
+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 codegen.py glapi.py gltypes.py 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 glparams.py gltypes.py stdapi.py
+)
+
+include_directories (
+ ${CMAKE_CURRENT_BINARY_DIR}
+ ${OPENGL_INCLUDE_PATH}
+)
+
+add_executable (glretrace
+ glretrace_gl.cpp
+ glretrace_cgl.cpp
+ glretrace_glx.cpp
+ glretrace_wgl.cpp
+ glretrace_main.cpp
+ glstate.cpp
+ glstate_params.cpp
+ retrace.cpp
+ ${glws}
+ image.cpp
+ ${CMAKE_CURRENT_BINARY_DIR}/glproc.hpp
+)
+
+set_property (
+ TARGET glretrace
+ APPEND
+ PROPERTY COMPILE_DEFINITIONS "RETRACE"
+)
+
+target_link_libraries (glretrace
+ common
+)
+
+if (WIN32)
+ target_link_libraries (glretrace ${OPENGL_gl_LIBRARY})
+elseif (APPLE)
+ # XXX: We use GLX on MacOSX, which is in a separate library.
+ target_link_libraries (glretrace
+ ${X11_GL_LIB}
+ ${X11_X11_LIB}
+ "-framework ApplicationServices" # CGS*
+ ${OPENGL_gl_LIBRARY} # CGL*
+ )
+else ()
+ target_link_libraries (glretrace ${OPENGL_gl_LIBRARY} ${X11_X11_LIB})
+endif ()
+
+install (TARGETS glretrace RUNTIME DESTINATION bin)
+
+
+##############################################################################
+# GUI
+
+if (ENABLE_GUI AND QT4_FOUND AND QJSON_FOUND)
+ add_subdirectory(gui)
+endif ()
+
+
+##############################################################################
+# Packaging
+
+install (FILES LICENSE README.markdown TODO.markdown DESTINATION doc)
+
+set (CPACK_PACKAGE_VERSION_MAJOR "1")
+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 ()