From c0eed05614df6404a9ed901dcd8dcd94b1e83f0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20M=C3=B6bius?= Date: Fri, 1 May 2009 21:17:01 +0000 Subject: [PATCH] Dennis: OpenMesh cmake support git-svn-id: http://www.openmesh.org/svnrepo/OpenMesh/trunk@111 fdac6126-5c0c-442c-9429-916003d36597 --- CMakeLists.txt | 26 ++ VERSION | 6 +- cmake/ACGCommon.cmake | 380 ++++++++++++++++++ cmake/ACGCompiler.cmake | 17 + cmake/ACGOutput.cmake | 39 ++ cmake/FindGLEW.cmake | 47 +++ cmake/FindOpenMP.cmake | 108 +++++ src/OpenMesh/Apps/CMakeLists.txt | 37 ++ .../Decimating/DecimaterGui/CMakeLists.txt | 48 +++ .../commandlineDecimater/CMakeLists.txt | 21 + src/OpenMesh/Apps/QtViewer/CMakeLists.txt | 44 ++ src/OpenMesh/Apps/Smoothing/CMakeLists.txt | 20 + .../Subdivider/SubdividerGui/CMakeLists.txt | 48 +++ .../CMakeLists.txt | 21 + .../commandlineSubdivider/CMakeLists.txt | 21 + src/OpenMesh/Apps/mconvert/CMakeLists.txt | 20 + src/OpenMesh/Core/CMakeLists.txt | 18 +- src/OpenMesh/Tools/CMakeLists.txt | 17 +- 18 files changed, 912 insertions(+), 26 deletions(-) create mode 100644 CMakeLists.txt create mode 100644 cmake/ACGCommon.cmake create mode 100644 cmake/ACGCompiler.cmake create mode 100644 cmake/ACGOutput.cmake create mode 100644 cmake/FindGLEW.cmake create mode 100644 cmake/FindOpenMP.cmake create mode 100644 src/OpenMesh/Apps/CMakeLists.txt create mode 100644 src/OpenMesh/Apps/Decimating/DecimaterGui/CMakeLists.txt create mode 100644 src/OpenMesh/Apps/Decimating/commandlineDecimater/CMakeLists.txt create mode 100644 src/OpenMesh/Apps/QtViewer/CMakeLists.txt create mode 100644 src/OpenMesh/Apps/Smoothing/CMakeLists.txt create mode 100644 src/OpenMesh/Apps/Subdivider/SubdividerGui/CMakeLists.txt create mode 100644 src/OpenMesh/Apps/Subdivider/commandlineAdaptiveSubdivider/CMakeLists.txt create mode 100644 src/OpenMesh/Apps/Subdivider/commandlineSubdivider/CMakeLists.txt create mode 100644 src/OpenMesh/Apps/mconvert/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 00000000..14f84485 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required (VERSION 2.6) + +project (OpenMesh) + +# add our macro directory to cmake search path +set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake) + +# include our cmake files +include (ACGCommon) + +acg_get_version () + +include (ACGOutput) + +if (WIN32) + add_definitions( + -D_USE_MATH_DEFINES -DNOMINMAX + ) +endif () + +add_subdirectory (src/OpenMesh/Core) +add_subdirectory (src/OpenMesh/Tools) +add_subdirectory (src/OpenMesh/Apps) + +# display results +acg_print_configure_header ("OpenMesh") diff --git a/VERSION b/VERSION index 115ee4d4..8eb31f85 100644 --- a/VERSION +++ b/VERSION @@ -1,2 +1,4 @@ -2-0-RC2 -$Name: $ +VERSION=2.0-RC2 +MAJOR=2 +MINOR=0 +PATCH=0 diff --git a/cmake/ACGCommon.cmake b/cmake/ACGCommon.cmake new file mode 100644 index 00000000..9bafbe06 --- /dev/null +++ b/cmake/ACGCommon.cmake @@ -0,0 +1,380 @@ +if (EXISTS ${CMAKE_SOURCE_DIR}/${CMAKE_PROJECT_NAME}.cmake) + include (${CMAKE_SOURCE_DIR}/${CMAKE_PROJECT_NAME}.cmake) +endif () + +# prevent build in source directory +if ("${CMAKE_BINARY_DIR}" STREQUAL "${CMAKE_SOURCE_DIR}") + message (SEND_ERROR "Building in the source directory is not supported.") + message (FATAL_ERROR "Please remove the created \"CMakeCache.txt\" file, the \"CMakeFiles\" directory and create a build directory and call \"${CMAKE_COMMAND} \".") +endif ("${CMAKE_BINARY_DIR}" STREQUAL "${CMAKE_SOURCE_DIR}") + +# allow only Debug and Release builds +set (CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "" FORCE) +mark_as_advanced (CMAKE_CONFIGURATION_TYPES) + +# set Debus as default build target +if (NOT CMAKE_BUILD_TYPE) + set (CMAKE_BUILD_TYPE Debug CACHE STRING + "Choose the type of build, options are: Debug, Release." + FORCE) +endif () + +# create our output directroy +if (NOT EXISTS ${CMAKE_BINARY_DIR}/Build) + file (MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/Build) +endif () + +# read version from file +macro (acg_get_version) + file (READ "${CMAKE_CURRENT_SOURCE_DIR}/VERSION" _file) + string ( + REGEX REPLACE + "^.*VERSION=([^\n]*).*$" "\\1" + _version ${_file} + ) + string ( + REGEX REPLACE + "^.*MAJOR=([^\n]*).*$" "\\1" + _major ${_file} + ) + string ( + REGEX REPLACE + "^.*MINOR=([^\n]*).*$" "\\1" + _minor ${_file} + ) + string ( + REGEX REPLACE + "^.*PATCH=([^\n]*).*$" "\\1" + _patch ${_file} + ) + set (VERSION ${_version}) + set (VERSION_MAJOR ${_major}) + set (VERSION_MINOR ${_minor}) + set (VERSION_PATCH ${_patch}) +endmacro () + + +# set directory structures for the different platforms +if (WIN32) + set (ACG_PROJECT_DATADIR ".") + set (ACG_PROJECT_LIBDIR "bin") + set (ACG_PROJECT_BINDIR "bin") + set (ACG_PROJECT_PLUGINDIR "Plugins") + if (NOT EXISTS ${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_BINDIR}) + file (MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_BINDIR}) + endif () +else () + set (ACG_PROJECT_DATADIR "share/${CMAKE_PROJECT_NAME}") + set (ACG_PROJECT_LIBDIR "lib/${CMAKE_PROJECT_NAME}") + set (ACG_PROJECT_PLUGINDIR "lib/${CMAKE_PROJECT_NAME}/plugins") + set (ACG_PROJECT_BINDIR "bin") +endif () + +# allow a project to modify the directories +if (COMMAND acg_modify_project_dirs) + acg_modify_project_dirs () +endif () + +# sets default build properties +macro (acg_set_target_props target) + if (WIN32) + set_target_properties ( + ${target} PROPERTIES + BUILD_WITH_INSTALL_RPATH 1 + SKIP_BUILD_RPATH 0 + ) + elseif (APPLE AND NOT ACG_PROJECT_MACOS_BUNDLE) + set_target_properties ( + ${target} PROPERTIES + INSTALL_NAME_DIR "@executable_path/../lib/${CMAKE_PROJECT_NAME}" + BUILD_WITH_INSTALL_RPATH 1 + SKIP_BUILD_RPATH 0 + ) + elseif (NOT APPLE) + set_target_properties ( + ${target} PROPERTIES + INSTALL_RPATH "$ORIGIN/../lib/${CMAKE_PROJECT_NAME}" + BUILD_WITH_INSTALL_RPATH 1 + SKIP_BUILD_RPATH 0 + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_BINDIR}" + LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_LIBDIR}" + ) + endif () +endmacro () + +include (AddFileDependencies) +include (ACGCompiler) + +# define INCLUDE_TEMPLATES for everything we build +add_definitions (-DINCLUDE_TEMPLATES) + +# look for selected qt dependencies +macro (acg_qt4) + if (NOT QT4_FOUND) + find_package (Qt4 ${ARGN}) + + set (QT_USE_QTOPENGL 1) + set (QT_USE_QTNETWORK 1) + set (QT_USE_QTSCRIPT 1) + set (QT_USE_QTSQL 1) + set (QT_USE_QTHELP 1) + set (QT_USE_QTWEBKIT 1) + set (QT_USE_QTUITOOLS 1) + + include (${QT_USE_FILE}) + endif () +endmacro () + +# unsets the given variable +macro (acg_unset var) + set (${var} "" CACHE INTERNAL "") +endmacro () + +# sets the given variable +macro (acg_set var value) + set (${var} ${value} CACHE INTERNAL "") +endmacro () + +# test for OpenMP +macro (acg_openmp) + if (NOT OPENMP_NOTFOUND) + find_package(OpenMP) + if (OPENMP_FOUND) + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") + set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") + add_definitions(-DUSE_OPENMP) + else () + set (OPENMP_NOTFOUND 1) + endif () + endif () +endmacro () + +# test for FTGL +macro (acg_ftgl) + find_package (Freetype) + + if (FREETYPE_FOUND) + find_package (FTGL) + + if (FTGL_FOUND) + add_definitions (-DUSE_FTGL) + include_directories (${FTGL_INCLUDE_DIR} ${FREETYPE_INCLUDE_DIR_freetype2}) + set (FTGL_LIBS ${FREETYPE_LIBRARIES} ${FTGL_LIBRARIES}) + endif () + endif () +endmacro () + +# append all files with extension "ext" in the "dirs" directories to "ret" +macro (acg_append_files ret ext) + foreach (_dir ${ARGN}) + file (GLOB _files "${_dir}/${ext}") + list (APPEND ${ret} ${_files}) + endforeach () +endmacro () + +# append all files with extension "ext" in the "dirs" directories and its subdirectories to "ret" +macro (acg_append_files_recursive ret ext) + foreach (_dir ${ARGN}) + file (GLOB_RECURSE _files "${_dir}/${ext}") + list (APPEND ${ret} ${_files}) + endforeach () +endmacro () + +# drop all "*T.cc" files from list +macro (acg_drop_templates list) + foreach (_file ${${list}}) + if (_file MATCHES "T.cc$") + list (REMOVE_ITEM ${list} ${_file}) + endif () + endforeach () +endmacro () + +# generate moc targets for sources in list +macro (acg_qt4_automoc moc_SRCS) + qt4_get_moc_flags (_moc_INCS) + + set (_matching_FILES ) + foreach (_current_FILE ${ARGN}) + + get_filename_component (_abs_FILE ${_current_FILE} ABSOLUTE) + # if "SKIP_AUTOMOC" is set to true, we will not handle this file here. + # here. this is required to make bouic work correctly: + # we need to add generated .cpp files to the sources (to compile them), + # but we cannot let automoc handle them, as the .cpp files don't exist yet when + # cmake is run for the very first time on them -> however the .cpp files might + # exist at a later run. at that time we need to skip them, so that we don't add two + # different rules for the same moc file + get_source_file_property (_skip ${_abs_FILE} SKIP_AUTOMOC) + + if ( NOT _skip AND EXISTS ${_abs_FILE} ) + + file (READ ${_abs_FILE} _contents) + + get_filename_component (_abs_PATH ${_abs_FILE} PATH) + + string (REGEX MATCHALL "Q_OBJECT" _match "${_contents}") + if (_match) + get_filename_component (_basename ${_current_FILE} NAME_WE) + set (_header ${_abs_FILE}) + set (_moc ${CMAKE_CURRENT_BINARY_DIR}/moc_${_basename}.cpp) + + add_custom_command (OUTPUT ${_moc} + COMMAND ${QT_MOC_EXECUTABLE} + ARGS ${_moc_INCS} ${_header} -o ${_moc} + DEPENDS ${_header} + ) + + add_file_dependencies (${_abs_FILE} ${_moc}) + set (${moc_SRCS} ${${moc_SRCS}} ${_moc}) + + endif () + endif () + endforeach () +endmacro () + +# generate uic targets for sources in list +macro (acg_qt4_autouic uic_SRCS) + + set (_matching_FILES ) + foreach (_current_FILE ${ARGN}) + + get_filename_component (_abs_FILE ${_current_FILE} ABSOLUTE) + + if ( EXISTS ${_abs_FILE} ) + + file (READ ${_abs_FILE} _contents) + + get_filename_component (_abs_PATH ${_abs_FILE} PATH) + + get_filename_component (_basename ${_current_FILE} NAME_WE) + string (REGEX REPLACE "Ui$" "" _cbasename ${_basename}) + set (_outfile ${CMAKE_CURRENT_BINARY_DIR}/ui_${_basename}.hh) + set (_header ${_basename}.hh) + set (_source ${_abs_PATH}/${_cbasename}.cc) + + add_custom_command (OUTPUT ${_outfile} + COMMAND ${QT_UIC_EXECUTABLE} + ARGS -o ${_outfile} ${_abs_FILE} + DEPENDS ${_abs_FILE}) + + add_file_dependencies (${_source} ${_outfile}) + set (${uic_SRCS} ${${uic_SRCS}} ${_outfile}) + + endif () + endforeach () +endmacro () + +# get all files in directory, but ignore svn +macro (acg_get_files_in_dir ret dir) + file (GLOB_RECURSE __files RELATIVE "${dir}" "${dir}/*") + foreach (_file ${__files}) + if (NOT _file MATCHES ".*svn.*") + list (APPEND ${ret} "${_file}") + endif () + endforeach () +endmacro () + +# copy the whole directory without svn files +function (acg_copy_after_build target src dst) + acg_unset (_files) + acg_get_files_in_dir (_files ${src}) + foreach (_file ${_files}) + add_custom_command(TARGET ${target} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_if_different "${src}/${_file}" "${dst}/${_file}" + ) + endforeach () +endfunction () + +# install the whole directory without svn files +function (acg_install_dir src dst) + acg_unset (_files) + acg_get_files_in_dir (_files ${src}) + foreach (_file ${_files}) + get_filename_component (_file_PATH ${_file} PATH) + install(FILES "${src}/${_file}" + DESTINATION "${dst}/${_file_PATH}" + ) + endforeach () +endfunction () + +# extended version of add_executable that also copies output to out Build directory +function (acg_add_executable _target) + add_executable (${_target} ${ARGN}) + + # set common target properties defined in common.cmake + acg_set_target_props (${_target}) + + if (WIN32) + # copy exe file to "Build" directory + # Visual studio will create this file in a subdirectory so we can't use + # RUNTIME_OUTPUT_DIRECTORY directly here + add_custom_command (TARGET ${_target} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E + copy_if_different + ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${_target}.exe + ${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_BINDIR}/${_target}.exe) + elseif (APPLE AND NOT ACG_PROJECT_MACOS_BUNDLE) + add_custom_command (TARGET ${_target} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E + copy_if_different + ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${_target} + ${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_BINDIR}/${_target}) + endif () + if (NOT ACG_PROJECT_BUNDLE OR NOT APPLE) + install (TARGETS ${_target} DESTINATION ${ACG_PROJECT_BINDIR}) + endif () +endfunction () + +# extended version of add_library that also copies output to out Build directory +function (acg_add_library _target _type) + add_library (${_target} ${_type} ${ARGN}) + + # set common target properties defined in common.cmake + acg_set_target_props (${_target}) + + if (WIN32) + # copy exe file to "Build" directory + # Visual studio will create this file in a subdirectory so we can't use + # RUNTIME_OUTPUT_DIRECTORY directly here + if (${_type} STREQUAL SHARED) + add_custom_command (TARGET ${_target} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E + copy_if_different + ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${_target}.dll + ${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_LIBDIR}/${_target}.dll) + elseif (${_type} STREQUAL MODULE) + if (NOT EXISTS ${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_PLUGINDIR}) + file (MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_PLUGINDIR}) + endif () + add_custom_command (TARGET ${_target} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E + copy_if_different + ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${_target}.dll + ${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_PLUGINDIR}/${_target}.dll) + endif () + elseif (APPLE AND NOT ACG_PROJECT_MACOS_BUNDLE) + if (${_type} STREQUAL SHARED) + add_custom_command (TARGET ${target} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E + copy_if_different + ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${_target}.dylib + ${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_LIBDIR}/${_target}.dylib) + elseif (${_type} STREQUAL MODULE) + if (NOT EXISTS ${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_PLUGINDIR}) + file (MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_PLUGINDIR}) + endif () + add_custom_command (TARGET ${target} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E + copy_if_different + ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${_target}.so + ${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_PLUGINDIR}/${_target}.so) + endif () + endif () + if (NOT ACG_PROJECT_BUNDLE OR NOT APPLE) + if (${_type} STREQUAL SHARED) + install (TARGETS ${_target} DESTINATION ${ACG_PROJECT_LIBDIR}) + elseif (${_type} STREQUAL MODULE) + install (TARGETS ${_target} DESTINATION ${ACG_PROJECT_PLUGINDIR}) + endif () + endif () +endfunction () diff --git a/cmake/ACGCompiler.cmake b/cmake/ACGCompiler.cmake new file mode 100644 index 00000000..822c724a --- /dev/null +++ b/cmake/ACGCompiler.cmake @@ -0,0 +1,17 @@ +################################################################################ +# Custom settings for compiler flags and similar +################################################################################ + +if (UNIX) + + set (CMAKE_CFLAGS_RELEASE "-O3 -DINCLUDE_TEMPLATES -W -Wall -Wno-unused -DNDEBUG") + set (CMAKE_CXX_FLAGS_RELEASE "-O3 -DINCLUDE_TEMPLATES -ftemplate-depth-100 -W -Wall -Wno-unused -DNDEBUG") + set (CMAKE_C_FLAGS_DEBUG "-g -DINCLUDE_TEMPLATES -W -Wall -Wno-unused -DDEBUG") + set (CMAKE_CXX_FLAGS_DEBUG "-g -DINCLUDE_TEMPLATES -ftemplate-depth-100 -W -Wall -Wno-unused -DDEBUG") + + if (APPLE) + add_definitions( -DARCH_DARWIN ) + set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wno-non-virtual-dtor") + set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wno-non-virtual-dtor") + endif () +endif () diff --git a/cmake/ACGOutput.cmake b/cmake/ACGOutput.cmake new file mode 100644 index 00000000..5f5b8d41 --- /dev/null +++ b/cmake/ACGOutput.cmake @@ -0,0 +1,39 @@ +# fill string with spaces +macro (acg_format_string str length return) + string (LENGTH "${str}" _str_len) + math (EXPR _add_chr "${length} - ${_str_len}") + set (${return} "${str}") + while (_add_chr GREATER 0) + set (${return} "${${return}} ") + math (EXPR _add_chr "${_add_chr} - 1") + endwhile () +endmacro () + +# print message with color escape sequences if CMAKE_COLOR_MAKEFILE is set +string (ASCII 27 _escape) +function (acg_color_message _str) + if (CMAKE_COLOR_MAKEFILE AND NOT WIN32) + message (${_str}) + else () + string (REGEX REPLACE "${_escape}.[0123456789;]*m" "" __str ${_str}) + message (${__str}) + endif () +endfunction () + +# info header +function (acg_print_configure_header _name) + acg_format_string ("${_name}" 40 _project) + acg_format_string ("${VERSION}" 40 _version) + acg_color_message ("\n${_escape}[40;37m************************************************************${_escape}[0m") + acg_color_message ("${_escape}[40;37m* ${_escape}[1;31mACG ${_escape}[0;40;34mBuildsystem${_escape}[0m${_escape}[40;37m *${_escape}[0m") + acg_color_message ("${_escape}[40;37m* *${_escape}[0m") + acg_color_message ("${_escape}[40;37m* Package : ${_escape}[32m${_project} ${_escape}[37m *${_escape}[0m") + acg_color_message ("${_escape}[40;37m* Version : ${_escape}[32m${_version} ${_escape}[37m *${_escape}[0m") + acg_color_message ("${_escape}[40;37m************************************************************${_escape}[0m") +endfunction () + +# info line +function (acg_print_configure_footer) + acg_color_message ("${_escape}[40;37m************************************************************${_escape}[0m\n") +endfunction () + diff --git a/cmake/FindGLEW.cmake b/cmake/FindGLEW.cmake new file mode 100644 index 00000000..a59da135 --- /dev/null +++ b/cmake/FindGLEW.cmake @@ -0,0 +1,47 @@ +# - Try to find GLEW +# Once done this will define +# +# GLEW_FOUND - system has GLEW +# GLEW_INCLUDE_DIR - the GLEW include directory +# GLEW_LIBRARY_DIR - where the libraries are +# GLEW_LIBRARY - Link these to use GLEW +# + +IF (GLEW_INCLUDE_DIR) + # Already in cache, be silent + SET(GLEW_FIND_QUIETLY TRUE) +ENDIF (GLEW_INCLUDE_DIR) + +if( WIN32 ) + if( MSVC80 ) + set( COMPILER_PATH "C:/Program\ Files/Microsoft\ Visual\ Studio\ 8/VC" ) + endif( MSVC80 ) + if( MSVC71 ) + set( COMPILER_PATH "C:/Program\ Files/Microsoft\ Visual\ Studio\ .NET\ 2003/Vc7" ) + endif( MSVC71 ) + FIND_PATH( GLEW_INCLUDE_DIR gl/glew.h gl/wglew.h + PATHS c:/glew/include ${COMPILER_PATH}/PlatformSDK/Include ) + SET( GLEW_NAMES glew32 ) + FIND_LIBRARY( GLEW_LIBRARY + NAMES ${GLEW_NAMES} + PATHS c:/glew/lib ${COMPILER_PATH}/PlatformSDK/Lib ) +else( WIN32 ) + FIND_PATH( GLEW_INCLUDE_DIR glew.h wglew.h + PATHS /usr/local/include /usr/include + PATH_SUFFIXES gl/ GL/ ) + SET( GLEW_NAMES glew GLEW ) + FIND_LIBRARY( GLEW_LIBRARY + NAMES ${GLEW_NAMES} + PATHS /usr/lib /usr/local/lib ) +endif( WIN32 ) + +GET_FILENAME_COMPONENT( GLEW_LIBRARY_DIR ${GLEW_LIBRARY} PATH ) + +IF (GLEW_INCLUDE_DIR AND GLEW_LIBRARY) + SET(GLEW_FOUND TRUE) + SET( GLEW_LIBRARY_DIR ${GLEW_LIBRARY} ) +ELSE (GLEW_INCLUDE_DIR AND GLEW_LIBRARY) + SET( GLEW_FOUND FALSE ) + SET( GLEW_LIBRARY_DIR ) +ENDIF (GLEW_INCLUDE_DIR AND GLEW_LIBRARY) + diff --git a/cmake/FindOpenMP.cmake b/cmake/FindOpenMP.cmake new file mode 100644 index 00000000..5e8980de --- /dev/null +++ b/cmake/FindOpenMP.cmake @@ -0,0 +1,108 @@ +# - Finds OpenMP support +# This module can be used to detect OpenMP support in a compiler. +# If the compiler supports OpenMP, the flags required to compile with +# openmp support are set. +# +# The following variables are set: +# OpenMP_C_FLAGS - flags to add to the C compiler for OpenMP support +# OpenMP_CXX_FLAGS - flags to add to the CXX compiler for OpenMP support +# OPENMP_FOUND - true if openmp is detected +# +# Supported compilers can be found at http://openmp.org/wp/openmp-compilers/ + + +# Copyright 2008, 2009 Andre.Brodtkorb@ifi.uio.no +# +# Redistribution AND use is allowed according to the terms of the New +# BSD license. +# For details see the accompanying COPYING-CMAKE-SCRIPTS file. + + +include(CheckCSourceCompiles) +include(CheckCXXSourceCompiles) +include(FindPackageHandleStandardArgs) + +set(OpenMP_C_FLAG_CANDIDATES + #Gnu + "-fopenmp" + #Microsoft Visual Studio + "/openmp" + #Intel windows + "-Qopenmp" + #Intel + "-openmp" + #Empty, if compiler automatically accepts openmp + " " + #Sun + "-xopenmp" + #HP + "+Oopenmp" + #IBM XL C/c++ + "-qsmp" + #Portland Group + "-mp" +) +set(OpenMP_CXX_FLAG_CANDIDATES ${OpenMP_C_FLAG_CANDIDATES}) + +# sample openmp source code to test +set(OpenMP_C_TEST_SOURCE +" +#include +int main() { +#ifdef _OPENMP + return 0; +#else + breaks_on_purpose +#endif +} +") +# use the same source for CXX as C for now +set(OpenMP_CXX_TEST_SOURCE ${OpenMP_C_TEST_SOURCE}) +# if these are set then do not try to find them again, +# by avoiding any try_compiles for the flags +if(DEFINED OpenMP_C_FLAGS AND DEFINED OpenMP_CXX_FLAGS) + set(OpenMP_C_FLAG_CANDIDATES) + set(OpenMP_CXX_FLAG_CANDIDATES) +endif(DEFINED OpenMP_C_FLAGS AND DEFINED OpenMP_CXX_FLAGS) + +# check c compiler +foreach(FLAG ${OpenMP_C_FLAG_CANDIDATES}) + set(SAFE_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}") + set(CMAKE_REQUIRED_FLAGS "${FLAG}") + set(OpenMP_C_FLAG_DETECTED) + message(STATUS "Try OpenMP C flag = [${FLAG}]") + check_c_source_compiles("${OpenMP_CXX_TEST_SOURCE}" OpenMP_C_FLAG_DETECTED) + set(CMAKE_REQUIRED_FLAGS "${SAFE_CMAKE_REQUIRED_FLAGS}") + if(OpenMP_C_FLAG_DETECTED) + set(OpenMP_C_FLAGS_INTERNAL "${FLAG}") + break() + endif(OpenMP_C_FLAG_DETECTED) +endforeach(FLAG ${OpenMP_C_FLAG_CANDIDATES}) + +# check cxx compiler +foreach(FLAG ${OpenMP_CXX_FLAG_CANDIDATES}) + set(SAFE_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}") + set(CMAKE_REQUIRED_FLAGS "${FLAG}") + set(OpenMP_CXX_FLAG_DETECTED) + message(STATUS "Try OpenMP CXX flag = [${FLAG}]") + check_cxx_source_compiles("${OpenMP_C_TEST_SOURCE}" OpenMP_CXX_FLAG_DETECTED) + set(CMAKE_REQUIRED_FLAGS "${SAFE_CMAKE_REQUIRED_FLAGS}") + if(OpenMP_CXX_FLAG_DETECTED) + set(OpenMP_CXX_FLAGS_INTERNAL "${FLAG}") + break() + endif(OpenMP_CXX_FLAG_DETECTED) +endforeach(FLAG ${OpenMP_CXX_FLAG_CANDIDATES}) + +set(OpenMP_C_FLAGS "${OpenMP_C_FLAGS_INTERNAL}" + CACHE STRING "C compiler flags for OpenMP parallization") + +set(OpenMP_CXX_FLAGS "${OpenMP_CXX_FLAGS_INTERNAL}" + CACHE STRING "C++ compiler flags for OpenMP parallization") +# handle the standard arguments for find_package +find_package_handle_standard_args(OpenMP DEFAULT_MSG + OpenMP_C_FLAGS OpenMP_CXX_FLAGS ) + +mark_as_advanced( + OpenMP_C_FLAGS + OpenMP_CXX_FLAGS +) diff --git a/src/OpenMesh/Apps/CMakeLists.txt b/src/OpenMesh/Apps/CMakeLists.txt new file mode 100644 index 00000000..02626f5e --- /dev/null +++ b/src/OpenMesh/Apps/CMakeLists.txt @@ -0,0 +1,37 @@ +include (ACGCommon) + +# find needed packages +find_package (OpenGL) +find_package (GLUT) +find_package (GLEW) + +acg_qt4 () + +add_subdirectory (Decimating/commandlineDecimater) +add_subdirectory (Smoothing) +add_subdirectory (Subdivider/commandlineSubdivider) +add_subdirectory (Subdivider/commandlineAdaptiveSubdivider) +add_subdirectory (mconvert) + +# check for OpenGL, GLEW and GLUT as our required dependencies +if (QT4_FOUND AND OPENGL_FOUND AND GLEW_FOUND AND GLUT_FOUND) + add_subdirectory (Decimating/DecimaterGui) + add_subdirectory (QtViewer) + add_subdirectory (Subdivider/SubdividerGui) +else () + if (NOT QT4_FOUND) + message ("QT 4 not found! Skipping some apps.") + endif () + + if (NOT OPENGL_FOUND) + message ("OpengGL not found! Skipping some apps.") + endif () + + if (NOT GLEW_FOUND) + message ("GLEW not found! Skipping some apps.") + endif () + + if (NOT GLUT_FOUND) + message ("GLUT not found! Skipping some apps.") + endif () +endif () \ No newline at end of file diff --git a/src/OpenMesh/Apps/Decimating/DecimaterGui/CMakeLists.txt b/src/OpenMesh/Apps/Decimating/DecimaterGui/CMakeLists.txt new file mode 100644 index 00000000..1faf4caa --- /dev/null +++ b/src/OpenMesh/Apps/Decimating/DecimaterGui/CMakeLists.txt @@ -0,0 +1,48 @@ +include (ACGCommon) + +include_directories ( + ../../../.. + ${CMAKE_CURRENT_SOURCE_DIR} +) + +set (targetName DecimaterGui) + +# source code directories +set (directories + ../../QtViewer + ../ +) + +# collect all header and source files +acg_append_files (headers "*.hh" ${directories}) + +set (sources + ../../QtViewer/QGLViewerWidget.cc + ../../QtViewer/MeshViewerWidgetT.cc + ../DecimaterViewerWidget.cc + ../decimaterviewer.cc +) + +# remove template cc files from source file list +acg_drop_templates (sources) + +# genereate uic and moc targets +acg_qt4_automoc (moc_targets ${headers}) + +if (WIN32) + acg_add_executable (${targetName} WIN32 ${sources} ${headers} ${moc_targets}) + # link to qtmain library to get WinMain function for a non terminal app + target_link_libraries (${targetName} ${QT_QTMAIN_LIBRARY}) +else () + acg_add_executable (${targetName} ${sources} ${headers} ${moc_targets}) +endif () + +target_link_libraries (${targetName} + OpenMeshCore + OpenMeshTools + ${QT_LIBRARIES} + ${OPENGL_LIBRARIES} + ${GLEW_LIBRARY} + ${GLUT_LIBRARIES} +) + diff --git a/src/OpenMesh/Apps/Decimating/commandlineDecimater/CMakeLists.txt b/src/OpenMesh/Apps/Decimating/commandlineDecimater/CMakeLists.txt new file mode 100644 index 00000000..67642927 --- /dev/null +++ b/src/OpenMesh/Apps/Decimating/commandlineDecimater/CMakeLists.txt @@ -0,0 +1,21 @@ +include (ACGCommon) + +include_directories ( + ../../../.. + ${CMAKE_CURRENT_SOURCE_DIR} +) + +set (targetName commandlineDecimater) + +# collect all header and source files +set (sources + ../decimater.cc +) + +acg_add_executable (${targetName} ${sources}) + +target_link_libraries (${targetName} + OpenMeshCore + OpenMeshTools +) + diff --git a/src/OpenMesh/Apps/QtViewer/CMakeLists.txt b/src/OpenMesh/Apps/QtViewer/CMakeLists.txt new file mode 100644 index 00000000..e148c419 --- /dev/null +++ b/src/OpenMesh/Apps/QtViewer/CMakeLists.txt @@ -0,0 +1,44 @@ +include (ACGCommon) + +include_directories ( + ../../.. + ${CMAKE_CURRENT_SOURCE_DIR} +) + +set (targetName QtViewer) + +# source code directories +set (directories + . +) + +# collect all header and source files +acg_append_files (headers "*.hh" ${directories}) +acg_append_files (sources "*.cc" ${directories}) +acg_append_files (ui "*.ui" ${directories}) + +# remove template cc files from source file list +acg_drop_templates (sources) + +# genereate uic and moc targets +acg_qt4_autouic (uic_targets ${ui}) +acg_qt4_automoc (moc_targets ${headers}) + + +if (WIN32) + acg_add_executable (${targetName} WIN32 ${uic_targets} ${sources} ${headers} ${moc_targets}) + # link to qtmain library to get WinMain function for a non terminal app + target_link_libraries (${targetName} ${QT_QTMAIN_LIBRARY}) +else () + acg_add_executable (${targetName} ${uic_targets} ${sources} ${headers} ${moc_targets}) +endif () + +target_link_libraries (${targetName} + OpenMeshCore + OpenMeshTools + ${QT_LIBRARIES} + ${OPENGL_LIBRARIES} + ${GLEW_LIBRARY} + ${GLUT_LIBRARIES} +) + diff --git a/src/OpenMesh/Apps/Smoothing/CMakeLists.txt b/src/OpenMesh/Apps/Smoothing/CMakeLists.txt new file mode 100644 index 00000000..82eac480 --- /dev/null +++ b/src/OpenMesh/Apps/Smoothing/CMakeLists.txt @@ -0,0 +1,20 @@ +include (ACGCommon) + +include_directories ( + ../../.. + ${CMAKE_CURRENT_SOURCE_DIR} +) + +set (targetName Smoothing) + +# collect all header and source files +acg_append_files (headers "*.hh" .) +acg_append_files (sources "*.cc" .) + +acg_add_executable (${targetName} ${headers} ${sources}) + +target_link_libraries (${targetName} + OpenMeshCore + OpenMeshTools +) + diff --git a/src/OpenMesh/Apps/Subdivider/SubdividerGui/CMakeLists.txt b/src/OpenMesh/Apps/Subdivider/SubdividerGui/CMakeLists.txt new file mode 100644 index 00000000..296e4421 --- /dev/null +++ b/src/OpenMesh/Apps/Subdivider/SubdividerGui/CMakeLists.txt @@ -0,0 +1,48 @@ +include (ACGCommon) + +include_directories ( + ../../../.. + ${CMAKE_CURRENT_SOURCE_DIR} +) + +set (targetName SubdividerGui) + +# source code directories +set (directories + ../../QtViewer + ../ +) + +# collect all header and source files +acg_append_files (headers "*.hh" ${directories}) + +set (sources + ../../QtViewer/QGLViewerWidget.cc + ../../QtViewer/MeshViewerWidgetT.cc + ../SubdivideWidget.cc + ../qtsubdivider.cc +) + +# remove template cc files from source file list +acg_drop_templates (sources) + +# genereate uic and moc targets +acg_qt4_automoc (moc_targets ${headers}) + +if (WIN32) + acg_add_executable (${targetName} WIN32 ${sources} ${headers} ${moc_targets}) + # link to qtmain library to get WinMain function for a non terminal app + target_link_libraries (${targetName} ${QT_QTMAIN_LIBRARY}) +else () + acg_add_executable (${targetName} ${sources} ${headers} ${moc_targets}) +endif () + +target_link_libraries (${targetName} + OpenMeshCore + OpenMeshTools + ${QT_LIBRARIES} + ${OPENGL_LIBRARIES} + ${GLEW_LIBRARY} + ${GLUT_LIBRARIES} +) + diff --git a/src/OpenMesh/Apps/Subdivider/commandlineAdaptiveSubdivider/CMakeLists.txt b/src/OpenMesh/Apps/Subdivider/commandlineAdaptiveSubdivider/CMakeLists.txt new file mode 100644 index 00000000..0cd93599 --- /dev/null +++ b/src/OpenMesh/Apps/Subdivider/commandlineAdaptiveSubdivider/CMakeLists.txt @@ -0,0 +1,21 @@ +include (ACGCommon) + +include_directories ( + ../../../.. + ${CMAKE_CURRENT_SOURCE_DIR} +) + +set (targetName commandlineAdaptiveSubdivider) + +# collect all header and source files +set (sources + ../adaptive_subdivider.cc +) + +acg_add_executable (${targetName} ${sources}) + +target_link_libraries (${targetName} + OpenMeshCore + OpenMeshTools +) + diff --git a/src/OpenMesh/Apps/Subdivider/commandlineSubdivider/CMakeLists.txt b/src/OpenMesh/Apps/Subdivider/commandlineSubdivider/CMakeLists.txt new file mode 100644 index 00000000..bcc48469 --- /dev/null +++ b/src/OpenMesh/Apps/Subdivider/commandlineSubdivider/CMakeLists.txt @@ -0,0 +1,21 @@ +include (ACGCommon) + +include_directories ( + ../../../.. + ${CMAKE_CURRENT_SOURCE_DIR} +) + +set (targetName commandlineSubdivider) + +# collect all header and source files +set (sources + ../subdivider.cc +) + +acg_add_executable (${targetName} ${sources}) + +target_link_libraries (${targetName} + OpenMeshCore + OpenMeshTools +) + diff --git a/src/OpenMesh/Apps/mconvert/CMakeLists.txt b/src/OpenMesh/Apps/mconvert/CMakeLists.txt new file mode 100644 index 00000000..dc76a122 --- /dev/null +++ b/src/OpenMesh/Apps/mconvert/CMakeLists.txt @@ -0,0 +1,20 @@ +include (ACGCommon) + +include_directories ( + ../../.. + ${CMAKE_CURRENT_SOURCE_DIR} +) + +set (targetName mconvert) + +# collect all header and source files +acg_append_files (headers "*.hh" .) +acg_append_files (sources "*.cc" .) + +acg_add_executable (${targetName} ${headers} ${sources}) + +target_link_libraries (${targetName} + OpenMeshCore + OpenMeshTools +) + diff --git a/src/OpenMesh/Core/CMakeLists.txt b/src/OpenMesh/Core/CMakeLists.txt index b7e16575..f4be1e8d 100644 --- a/src/OpenMesh/Core/CMakeLists.txt +++ b/src/OpenMesh/Core/CMakeLists.txt @@ -1,4 +1,4 @@ -include (common) +include (ACGCommon) include_directories ( ../.. @@ -21,20 +21,14 @@ set (directories ) # collect all header and source files -append_files (headers "*.hh" ${directories}) -append_files (sources "*.cc" ${directories}) +acg_append_files (headers "*.hh" ${directories}) +acg_append_files (sources "*.cc" ${directories}) if (WIN32) # OpenMesh has no dll exports so we have to build a static library on windows - add_library (OpenMeshCore STATIC ${sources} ${headers}) + acg_add_library (OpenMeshCore STATIC ${sources} ${headers}) else () - add_library (OpenMeshCore SHARED ${sources} ${headers}) - # no install on mac, because the whole bundle will be installed in the - # toplevel CMakeLists.txt - if (NOT APPLE) - install (TARGETS OpenMeshCore DESTINATION ${OPENFLIPPER_LIBDIR}) - endif () + acg_add_library (OpenMeshCore SHARED ${sources} ${headers}) endif () -# set common target properties defined in common.cmake -set_target_props (OpenMeshCore) + diff --git a/src/OpenMesh/Tools/CMakeLists.txt b/src/OpenMesh/Tools/CMakeLists.txt index d201213a..f693d099 100644 --- a/src/OpenMesh/Tools/CMakeLists.txt +++ b/src/OpenMesh/Tools/CMakeLists.txt @@ -1,4 +1,4 @@ -include (common) +include (ACGCommon) include_directories ( ../.. @@ -17,22 +17,15 @@ set (directories ) # collect all header and source files -append_files (headers "*.hh" ${directories}) -append_files (sources "*.cc" ${directories}) +acg_append_files (headers "*.hh" ${directories}) +acg_append_files (sources "*.cc" ${directories}) if (WIN32) # OpenMesh has no dll exports so we have to build a static library on windows - add_library (OpenMeshTools STATIC ${sources} ${headers}) + acg_add_library (OpenMeshTools STATIC ${sources} ${headers}) else () - add_library (OpenMeshTools SHARED ${sources} ${headers}) - # no install on mac, because the whole bundle will be installed in the - # toplevel CMakeLists.txt - if (NOT APPLE) - install (TARGETS OpenMeshTools DESTINATION ${OPENFLIPPER_LIBDIR}) - endif () + acg_add_library (OpenMeshTools SHARED ${sources} ${headers}) endif () target_link_libraries (OpenMeshTools OpenMeshCore) -# set common target properties defined in common.cmake -set_target_props (OpenMeshTools)