Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions c/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,34 @@
# either License.

PROJECT(libfreenect)
set (PROJECT_VER_MAJOR 0)
set (PROJECT_VER_MINOR 0)
set (PROJECT_VER_PATCH 0)
set (PROJECT_VER
"${PROJECT_VER_MAJOR}.${PROJECT_VER_MINOR}.${PROJECT_VER_PATCH}")
set (PROJECT_APIVER
"${PROJECT_VER_MAJOR}.${PROJECT_VER_MINOR}")

cmake_minimum_required(VERSION 2.6)

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/Modules/")

set(CMAKE_C_FLAGS "-Wall -O3 -g")

# Find the host operating system and architecture
include (FindOS)
# Set up installation directories
include (SetupDirectories)

# Add source directories
add_subdirectory (lib)
add_subdirectory (examples)

# Create an uninstall target
configure_file(
"${CMAKE_SOURCE_DIR}/Modules/UninstallTarget.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/UninstallTarget.cmake"
IMMEDIATE @ONLY)

add_custom_target(uninstall
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/UninstallTarget.cmake)
59 changes: 59 additions & 0 deletions c/Modules/FindOS.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
# Check the OS type.

# CMake does not distinguish Linux from other Unices.
STRING (REGEX MATCH "Linux" PROJECT_OS_LINUX ${CMAKE_SYSTEM_NAME})
# Nor *BSD
STRING (REGEX MATCH "BSD" PROJECT_OS_BSD ${CMAKE_SYSTEM_NAME})
# Or Solaris. I'm seeing a trend, here
STRING (REGEX MATCH "SunOS" PROJECT_OS_SOLARIS ${CMAKE_SYSTEM_NAME})

# Windows is easy (for once)
IF (WIN32)
SET (PROJECT_OS_WIN TRUE BOOL INTERNAL)
ENDIF (WIN32)

# Check if it's an Apple OS
IF (APPLE)
# Check if it's OS X or another MacOS (that's got to be pretty unlikely)
STRING (REGEX MATCH "Darwin" PROJECT_OS_OSX ${CMAKE_SYSTEM_NAME})
IF (NOT PROJECT_OS_OSX)
SET (PROJECT_OS_MACOS TRUE BOOL INTERNAL)
ENDIF (NOT PROJECT_OS_OSX)
ENDIF (APPLE)

# QNX
IF (QNXNTO)
SET (PROJECT_OS_QNX TRUE BOOL INTERNAL)
ENDIF (QNXNTO)

IF (PROJECT_OS_LINUX)
MESSAGE (STATUS "Operating system is Linux")
ELSEIF (PROJECT_OS_BSD)
MESSAGE (STATUS "Operating system is BSD")
ELSEIF (PROJECT_OS_WIN)
MESSAGE (STATUS "Operating system is Windows")
ELSEIF (PROJECT_OS_OSX)
MESSAGE (STATUS "Operating system is Apple MacOS X")
ELSEIF (PROJECT_OS_MACOS)
MESSAGE (STATUS "Operating system is Apple MacOS (not OS X)")
ELSEIF (PROJECT_OS_QNX)
MESSAGE (STATUS "Operating system is QNX")
ELSEIF (PROJECT_OS_SOLARIS)
MESSAGE (STATUS "Operating system is Solaris")
ELSE (PROJECT_OS_LINUX)
MESSAGE (STATUS "Operating system is generic Unix")
ENDIF (PROJECT_OS_LINUX)

MESSAGE (STATUS "Got System Processor ${CMAKE_SYSTEM_PROCESSOR}")

# 32 or 64 bit Linux
IF (PROJECT_OS_LINUX)
# Set the library directory suffix accordingly
IF (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "x86_64")
SET (PROJECT_PROC_64BIT TRUE BOOL INTERNAL)
MESSAGE (STATUS "Linux x86_64 Detected")
ELSEIF (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "ppc64")
MESSAGE (STATUS "Linux ppc64 Detected")
SET (PROJECT_PROC_64BIT TRUE BOOL INTERNAL)
ENDIF (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "x86_64")
ENDIF (PROJECT_OS_LINUX)
24 changes: 24 additions & 0 deletions c/Modules/SetupDirectories.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Default installation directory, based on operating system
IF (PROJECT_OS_WIN)
SET (CMAKE_INSTALL_PREFIX "C:\\Program Files\\libfreenect" CACHE PATH "Installation directory")
ELSE (PROJECT_OS_WIN)
SET (CMAKE_INSTALL_PREFIX "/usr/local" CACHE PATH "Installation directory")
ENDIF (PROJECT_OS_WIN)

MESSAGE (STATUS "${PROJECT_NAME} will be installed to ${CMAKE_INSTALL_PREFIX}")

# Installation prefix for include files
STRING (TOLOWER ${PROJECT_NAME} projectNameLower)
SET (PROJECT_INCLUDE_INSTALL_DIR "include/${projectNameLower}")

IF (PROJECT_PROC_64BIT)
SET (LIB_SUFFIX "64" CACHE STRING "Suffix for library installation directory")
ELSE (PROJECT_PROC_64BIT)
SET (LIB_SUFFIX "" CACHE STRING "Suffix for library installation directory")
ENDIF (PROJECT_PROC_64BIT)

SET (PROJECT_LIBRARY_INSTALL_DIR "lib${LIB_SUFFIX}")

MESSAGE (STATUS "Headers will be installed to ${CMAKE_INSTALL_PREFIX}/${PROJECT_INCLUDE_INSTALL_DIR}")
MESSAGE (STATUS "Libraries will be installed to ${CMAKE_INSTALL_PREFIX}/${PROJECT_LIBRARY_INSTALL_DIR}")

21 changes: 21 additions & 0 deletions c/Modules/UninstallTarget.cmake.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
if (NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
message(FATAL_ERROR "Cannot find install manifest: \"@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt\"")
endif(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")

file(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files)
string(REGEX REPLACE "\n" ";" files "${files}")
foreach (file ${files})
message(STATUS "Uninstalling \"$ENV{DESTDIR}${file}\"")
if (EXISTS "$ENV{DESTDIR}${file}")
execute_process(
COMMAND @CMAKE_COMMAND@ -E remove "$ENV{DESTDIR}${file}"
OUTPUT_VARIABLE rm_out
RESULT_VARIABLE rm_retval
)
if(NOT ${rm_retval} EQUAL 0)
message(FATAL_ERROR "Problem when removing \"$ENV{DESTDIR}${file}\"")
endif (NOT ${rm_retval} EQUAL 0)
else (EXISTS "$ENV{DESTDIR}${file}")
message(STATUS "File \"$ENV{DESTDIR}${file}\" does not exist.")
endif (EXISTS "$ENV{DESTDIR}${file}")
endforeach(file)
40 changes: 24 additions & 16 deletions c/examples/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,19 +1,27 @@
include_directories (${CMAKE_SOURCE_DIR}/include)
link_directories (${CMAKE_BINARY_DIR}/lib)
option (BUILD_EXAMPLES "Build example programs" ON)

find_package(Threads REQUIRED)
find_package(OpenGL REQUIRED)
find_package(GLU REQUIRED)
find_package(GLUT REQUIRED)
if (BUILD_EXAMPLES)
include_directories (${CMAKE_SOURCE_DIR}/include)
link_directories (${CMAKE_BINARY_DIR}/lib)

find_package(USB REQUIRED)
include_directories(${USB_INCLUDE_DIRS})
find_package(Threads REQUIRED)
find_package(OpenGL REQUIRED)
find_package(GLU REQUIRED)
find_package(GLUT REQUIRED)

add_executable(glview glview.c)
find_library (PTHREAD pthread)
IF(APPLE)
set(CMAKE_EXE_LINKER_FLAGS "-framework OpenGL -framework GLUT")
target_link_libraries(glview freenect)
ELSE()
target_link_libraries(glview freenect GL GLU glut m)
ENDIF()
find_package(USB REQUIRED)
include_directories(${USB_INCLUDE_DIRS})

add_executable(glview glview.c)
find_library (PTHREAD pthread)
IF(PROJECT_OS_OSX)
set(CMAKE_EXE_LINKER_FLAGS "-framework OpenGL -framework GLUT")
target_link_libraries(glview freenect)
ELSE()
target_link_libraries(glview freenect GL GLU glut m)
ENDIF()

install (TARGETS glview
DESTINATION bin)

endif (BUILD_EXAMPLES)
22 changes: 21 additions & 1 deletion c/lib/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,31 @@ find_package(Threads REQUIRED)
find_package(USB REQUIRED)
include_directories(${USB_INCLUDE_DIRS})

add_library (freenect core.c cameras.c usb_libusb10.c ${CMAKE_CURRENT_BINARY_DIR}/inits.c)
if (NOT PROJECT_OS_WIN)
add_library (freenect SHARED core.c cameras.c usb_libusb10.c ${CMAKE_CURRENT_BINARY_DIR}/inits.c)
set_target_properties ( freenect PROPERTIES
VERSION ${PROJECT_VER}
SOVERSION ${PROJECT_APIVER})
install (TARGETS freenect
DESTINATION "${PROJECT_LIBRARY_INSTALL_DIR}")
endif (NOT PROJECT_OS_WIN)

add_library (freenectstatic STATIC core.c cameras.c usb_libusb10.c ${CMAKE_CURRENT_BINARY_DIR}/inits.c)
set_target_properties (freenectstatic PROPERTIES
OUTPUT_NAME freenect)
install (TARGETS freenectstatic
DESTINATION "${PROJECT_LIBRARY_INSTALL_DIR}")

find_library (PTHREAD pthread)
target_link_libraries (freenect ${CMAKE_THREAD_LIBS_INIT} ${USB_LIBRARIES})
target_link_libraries (freenectstatic ${CMAKE_THREAD_LIBS_INIT} ${USB_LIBRARIES})


add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/inits.c
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/geninits.py
MAIN_DEPENDENCY inits.txt
COMMAND python ${CMAKE_CURRENT_SOURCE_DIR}/geninits.py ${CMAKE_CURRENT_SOURCE_DIR}/inits.txt ${CMAKE_CURRENT_BINARY_DIR}/inits.c)

# Install the header file
install (FILES "../include/libfreenect.h"
DESTINATION ${PROJECT_INCLUDE_INSTALL_DIR})