added the timer demo
[freeglut] / CMakeLists.txt
index 2c80756..c39f2be 100644 (file)
@@ -37,6 +37,8 @@ SET(FREEGLUT_SRCS
 
 IF(WIN32)
        LIST(APPEND FREEGLUT_SRCS
+               src/Common/xparsegeometry_repl.c
+               src/Common/xparsegeometry_repl.h
                src/mswin/freeglut_cursor_mswin.c
                src/mswin/freeglut_display_mswin.c
                src/mswin/freeglut_ext_mswin.c
@@ -85,8 +87,13 @@ OPTION(BUILD_SHARED_LIBS "Build FreeGLUT shared library." ON)
 OPTION(BUILD_STATIC_LIBS "Build FreeGLUT static library." ON)
 
 FIND_PACKAGE(OpenGL REQUIRED)
+INCLUDE_DIRECTORIES(${OPENGL_INCLUDE_DIR})
+LIST(APPEND LIBS ${OPENGL_gl_LIBRARY})
 
-INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include ${OPENGL_INCLUDE_DIR})
+# lib m for math, not needed on windows
+IF (NOT WIN32)
+    LIST(APPEND LIBS m)
+ENDIF()
 
 IF(WIN32)
        MESSAGE(WARNING "Insecure CRT warnings hidden (might want to fix these)")
@@ -102,11 +109,16 @@ if(UNIX)
        ENDIF()
        IF(X11_xf86vmode_FOUND)
                SET(HAVE_X11_EXTENSIONS_XF86VMODE_H TRUE)
-               LIST(APPEND LIBS ${X11_xf86vmode_LIB})
+               # Work-around http://www.cmake.org/Bug/bug_view_page.php?bug_id=6976
+               IF(NOT "${X11_Xxf86vm_LIB}")
+                       SET(X11_Xxf86vm_LIB "Xxf86vm")
+               ENDIF()
+               LIST(APPEND LIBS ${X11_Xxf86vm_LIB})
        ENDIF()
 ENDIF()
 
 INCLUDE(CheckIncludeFiles)
+INCLUDE(CheckFunctionExists)
 CHECK_INCLUDE_FILES(sys/types.h HAVE_SYS_TYPES_H)
 CHECK_INCLUDE_FILES(unistd.h   HAVE_UNISTD_H)
 CHECK_INCLUDE_FILES(sys/time.h         HAVE_SYS_TIME_H)
@@ -116,12 +128,15 @@ CHECK_INCLUDE_FILES(sys/ioctl.h HAVE_SYS_IOCTL_H)
 CHECK_INCLUDE_FILES(fcntl.h    HAVE_FCNTL_H)
 CHECK_INCLUDE_FILES(errno.h    HAVE_ERRNO_H)
 CHECK_INCLUDE_FILES(usbhid.h   HAVE_USBHID_H)
+CHECK_FUNCTION_EXISTS(gettimeofday HAVE_GETTIMEOFDAY)
+CHECK_FUNCTION_EXISTS(vfprintf HAVE_VFPRINTF)
+CHECK_FUNCTION_EXISTS(_doprnt HAVE_DOPRNT)
 
 # The generated config.h is placed in the project's build directory, just to
 # ensure that all CMake-generated files are kept away from the main source tree.
 # As a result, the build directory must to be added to the include path list.
 CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/config.h.in ${CMAKE_BINARY_DIR}/config.h)
-INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR})
+INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/src)
 ADD_DEFINITIONS(-DHAVE_CONFIG_H)
 
 # by default, at least on UNIX, we want to build both
@@ -134,6 +149,7 @@ ENDIF()
 
 
 IF(WIN32)
+       LIST(APPEND LIBS winmm)
        IF(BUILD_SHARED_LIBS)
                LIST(APPEND FREEGLUT_SRCS src/Common/freeglutdll.def freeglut.rc)
                # XXX I assume that if we want both shared and static this one is appropriate
@@ -143,14 +159,20 @@ IF(WIN32)
        ENDIF()
 ELSE()
        # on UNIX we need to make sure:
-       # - all shared libraries must have a soname/version
+       # - all shared libraries must have a soname/version (see
+    #   http://sourceware.org/autobook/autobook/autobook_91.html#SEC91)
        # - the output library should be named glut so it'll be linkable with -lglut
        # - the shared library should link to the dependency libraries so that the user
        #   won't have to link them explicitly (they shouldn't have to know that we depend
        #   on Xrandr or Xxf86vm)
        SET_TARGET_PROPERTIES(freeglut PROPERTIES VERSION 3.9.0 SOVERSION 3 OUTPUT_NAME glut)
        SET_TARGET_PROPERTIES(freeglut_static PROPERTIES OUTPUT_NAME glut)
-       TARGET_LINK_LIBRARIES(freeglut ${LIBS})
+ENDIF()
+IF(BUILD_SHARED_LIBS)
+    TARGET_LINK_LIBRARIES(freeglut ${LIBS})
+ENDIF()
+IF(BUILD_STATIC_LIBS)
+    TARGET_LINK_LIBRARIES(freeglut_static ${LIBS})
 ENDIF()
 
 IF(BUILD_SHARED_LIBS)
@@ -166,16 +188,23 @@ INSTALL(FILES ${FREEGLUT_HEADERS} DESTINATION include/GL)
 # Optionally build demos, on by default.
 option( FREEGLUT_BUILD_DEMOS "Build FreeGLUT demos." ON )
 
-SET(DEMO_LIBS ${OPENGL_LIBRARY} ${LIBS})
+SET(DEMO_LIBS ${OPENGL_glu_LIBRARY} ${LIBS})
+# lib m for math, not needed on windows
+IF (NOT WIN32)
+    LIST(APPEND DEMO_LIBS m)
+ENDIF()
+
 MACRO(ADD_DEMO name)
-       if( FREEGLUT_BUILD_DEMOS )
-               ADD_EXECUTABLE(${name} ${ARGN})
-               IF(BUILD_SHARED_LIBS)
-                       TARGET_LINK_LIBRARIES(${name} ${DEMO_LIBS} freeglut)
-               ELSE()
-                       TARGET_LINK_LIBRARIES(${name} ${DEMO_LIBS} freeglut_static)
-               ENDIF()
-       endif()
+    IF( FREEGLUT_BUILD_DEMOS )
+        IF(BUILD_SHARED_LIBS)
+            ADD_EXECUTABLE(${name} ${ARGN})
+            TARGET_LINK_LIBRARIES(${name} ${DEMO_LIBS} freeglut)
+        ENDIF()
+        IF(BUILD_STATIC_LIBS)
+            ADD_EXECUTABLE(${name}_static ${ARGN})
+            TARGET_LINK_LIBRARIES(${name}_static ${DEMO_LIBS} freeglut_static)
+        ENDIF()
+    ENDIF()
 ENDMACRO()
 
 ADD_DEMO(CallbackMaker   progs/demos/CallbackMaker/CallbackMaker.c)
@@ -190,5 +219,4 @@ ADD_DEMO(spaceball       progs/demos/spaceball/spaceball.c
                          progs/demos/spaceball/vmath.c
                          progs/demos/spaceball/vmath.h)
 ADD_DEMO(subwin          progs/demos/subwin/subwin.c)
-
-
+ADD_DEMO(timer           progs/demos/timer/timer.c)