diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1c3690e6..7c9d4fc2 100755
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -133,7 +133,13 @@ else()
set (OPENMESH_LIBRARY_DIR "${_OPENMESH_LIBRARY_DIR}" CACHE PATH "The directory where the OpenMesh libraries can be found.")
endif()
-add_subdirectory (Doc)
+if ( NOT DEFINED OPENMESH_DOCS )
+ set( OPENMESH_DOCS true CACHE BOOL "Enable or disable building of documentation" )
+endif()
+
+if (OPENMESH_DOCS)
+ add_subdirectory (Doc)
+endif()
# ========================================================================
# Bundle generation (Targets exist, now configure them)
@@ -175,6 +181,20 @@ endif()
# ========================================================================
+# Generate openmesh.pc file
+
+set(DEST_DIR "${CMAKE_INSTALL_PREFIX}")
+set(PRIVATE_LIBS "-lOpenMeshCore -lOpenMeshTools")
+
+configure_file("openmesh.pc.in" "${CMAKE_CURRENT_BINARY_DIR}/openmesh.pc" @ONLY)
+
+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/openmesh.pc DESTINATION libdata/pkgconfig)
+
+# generate target file
+
+install(EXPORT OpenMeshConfig DESTINATION share/OpenMesh/cmake)
+
+export(TARGETS OpenMeshCore OpenMeshTools FILE OpenMeshConfig.cmake)
# display results
acg_print_configure_header (OPENMESH "OpenMesh")
diff --git a/Doc/changelog.docu b/Doc/changelog.docu
index e82a80a5..73a97c72 100644
--- a/Doc/changelog.docu
+++ b/Doc/changelog.docu
@@ -14,6 +14,12 @@
PropertyManager: add hasProperty function
+Build System
+
+- Generate OpenMeshConfig.cmake (Thanks to Thibault Payet for the patch)
+- Support building on FreeBSD (Thanks to Thibault Payet for the patch)
+
+
diff --git a/openmesh.pc.in b/openmesh.pc.in
new file mode 100644
index 00000000..99c3437d
--- /dev/null
+++ b/openmesh.pc.in
@@ -0,0 +1,11 @@
+prefix=@DEST_DIR@
+exec_prefix=${prefix}
+libdir=${prefix}/lib
+includedir=${prefix}/include
+
+Name: libOpenMesh
+Description: OpenMesh library
+Version: @OPENMESH_VERSION_MAJOR@.@OPENMESH_VERSION_MINOR@
+
+Libs: -L${libdir} @PRIVATE_LIBS@
+Cflags: -I${includedir}
diff --git a/src/OpenMesh/Core/CMakeLists.txt b/src/OpenMesh/Core/CMakeLists.txt
index 753e20ac..cc3a73fb 100644
--- a/src/OpenMesh/Core/CMakeLists.txt
+++ b/src/OpenMesh/Core/CMakeLists.txt
@@ -132,4 +132,12 @@ install(DIRECTORY IO/
PATTERN "Debian*" EXCLUDE )
endif ()
+target_include_directories(OpenMeshCore PUBLIC
+ $
+ $)
+
+install(TARGETS OpenMeshCore EXPORT OpenMeshConfig
+ ARCHIVE DESTINATION ${ACG_PROJECT_LIBDIR}
+ LIBRARY DESTINATION ${ACG_PROJECT_LIBDIR}
+ RUNTIME DESTINATION ${ACG_PROJECT_BINDIR})
diff --git a/src/OpenMesh/Tools/CMakeLists.txt b/src/OpenMesh/Tools/CMakeLists.txt
index f00145b1..b48530a0 100644
--- a/src/OpenMesh/Tools/CMakeLists.txt
+++ b/src/OpenMesh/Tools/CMakeLists.txt
@@ -1,118 +1,126 @@
-include (ACGCommon)
-
-include_directories (
- ../..
- ${CMAKE_CURRENT_SOURCE_DIR}
-)
-
-# source code directories
-set (directories
- .
- Decimater
- Dualizer
- Smoother
- Subdivider/Adaptive/Composite
- Subdivider/Uniform/Composite
- Subdivider/Uniform
- Utils
- VDPM
-)
-
-# collect all header and source files
-acg_append_files (headers "*.hh" ${directories})
-acg_append_files (sources "*.cc" ${directories})
-
-IF(WIN32 AND NOT MINGW)
- acg_append_files (sources "*.c" ${directories})
-ENDIF(WIN32 AND NOT MINGW)
-
-# Disable Library installation when not building OpenMesh on its own but as part of another project!
-if ( NOT ${PROJECT_NAME} MATCHES "OpenMesh")
- set(ACG_NO_LIBRARY_INSTALL true)
-endif()
-
-
-if (WIN32)
-
- if ( OPENMESH_BUILD_SHARED )
- add_definitions( -DOPENMESHDLL -DBUILDOPENMESHDLL)
- acg_add_library (OpenMeshTools SHARED ${sources} ${headers})
- else()
- # OpenMesh has no dll exports so we have to build a static library on windows
- acg_add_library (OpenMeshTools STATIC ${sources} ${headers})
- endif()
-
-else ()
- acg_add_library (OpenMeshTools SHAREDANDSTATIC ${sources} ${headers})
- set_target_properties (OpenMeshTools PROPERTIES VERSION ${OPENMESH_VERSION_MAJOR}.${OPENMESH_VERSION_MINOR}
- SOVERSION ${OPENMESH_VERSION_MAJOR}.${OPENMESH_VERSION_MINOR} )
-endif ()
-
-target_link_libraries (OpenMeshTools OpenMeshCore)
-
-IF( NOT WIN32 )
- target_link_libraries (OpenMeshToolsStatic OpenMeshCoreStatic)
-ENDIF(NOT WIN32)
-
-if ( (${PROJECT_NAME} MATCHES "OpenMesh") AND BUILD_APPS )
-
- if ( WIN32 )
- if ( NOT "${CMAKE_GENERATOR}" MATCHES "MinGW Makefiles" )
- # let bundle generation depend on target
- add_dependencies (fixbundle OpenMeshTools)
- endif()
- endif()
-
- # Add tools as dependency before fixbundle
- if (APPLE)
- # let bundle generation depend on target
- add_dependencies (fixbundle OpenMeshTools)
- add_dependencies (fixbundle OpenMeshToolsStatic)
- endif()
-
-endif()
-
-
-# Install Header Files (Apple)
-if ( NOT ACG_PROJECT_MACOS_BUNDLE AND APPLE )
- FILE(GLOB files_install_Decimater "${CMAKE_CURRENT_SOURCE_DIR}/Decimater/*.hh" )
- FILE(GLOB files_install_Dualizer "${CMAKE_CURRENT_SOURCE_DIR}/Dualizer/*.hh" )
- FILE(GLOB files_install_KERNEL_OSG "${CMAKE_CURRENT_SOURCE_DIR}/Kernel_OSG/*.hh" )
- FILE(GLOB files_install_Smoother "${CMAKE_CURRENT_SOURCE_DIR}/Smoother/*.hh" )
- FILE(GLOB files_install_Subdivider_Adaptive "${CMAKE_CURRENT_SOURCE_DIR}/Subdivider/Adaptive/Composite/*.hh" )
- FILE(GLOB files_install_Subdivider_Uniform "${CMAKE_CURRENT_SOURCE_DIR}/Subdivider/Uniform/*.hh" )
- FILE(GLOB files_install_Subdivider_Uniform_Composite "${CMAKE_CURRENT_SOURCE_DIR}/Subdivider/Uniform/Composite/*.hh" )
- FILE(GLOB files_install_Utils "${CMAKE_CURRENT_SOURCE_DIR}/Utils/*.hh" "${CMAKE_CURRENT_SOURCE_DIR}/Utils/getopt.h" )
- FILE(GLOB files_install_VDPM "${CMAKE_CURRENT_SOURCE_DIR}/VDPM/*.hh" )
- INSTALL(FILES ${files_install_Decimater} DESTINATION include/OpenMesh/Tools/Decimater )
- INSTALL(FILES ${files_install_Dualizer} DESTINATION include/OpenMesh/Tools/Dualizer )
- INSTALL(FILES ${files_install_KERNEL_OSG} DESTINATION include/OpenMesh/Tools/Kernel_OSG )
- INSTALL(FILES ${files_install_Smoother} DESTINATION include/OpenMesh/Tools/Smoother )
- INSTALL(FILES ${files_install_Subdivider_Adaptive} DESTINATION include/OpenMesh/Tools/Subdivider/Adaptive/Composite )
- INSTALL(FILES ${files_install_Subdivider_Uniform} DESTINATION include/OpenMesh/Tools/Subdivider/Uniform )
- INSTALL(FILES ${files_install_Subdivider_Uniform_Composite} DESTINATION include/OpenMesh/Tools/Subdivider/Uniform/Composite )
- INSTALL(FILES ${files_install_Utils} DESTINATION include/OpenMesh/Tools/Utils )
- INSTALL(FILES ${files_install_VDPM} DESTINATION include/OpenMesh/Tools/VDPM )
-endif()
-
-
-# Only install if the project name matches OpenMesh.
-if (NOT APPLE AND ${PROJECT_NAME} MATCHES "OpenMesh")
-
-# Install Header Files
-install(DIRECTORY .
- DESTINATION include/OpenMesh/Tools
- FILES_MATCHING
- PATTERN "*.hh"
- PATTERN "CVS" EXCLUDE
- PATTERN ".svn" EXCLUDE
- PATTERN "tmp" EXCLUDE
- PATTERN "Templates" EXCLUDE
- PATTERN "Debian*" EXCLUDE)
-
-#install the config file
-install(FILES Utils/getopt.h DESTINATION include/OpenMesh/Tools/Utils)
-
-endif ()
-
-
+include (ACGCommon)
+
+include_directories (
+ ../..
+ ${CMAKE_CURRENT_SOURCE_DIR}
+)
+
+# source code directories
+set (directories
+ .
+ Decimater
+ Dualizer
+ Smoother
+ Subdivider/Adaptive/Composite
+ Subdivider/Uniform/Composite
+ Subdivider/Uniform
+ Utils
+ VDPM
+)
+
+# collect all header and source files
+acg_append_files (headers "*.hh" ${directories})
+acg_append_files (sources "*.cc" ${directories})
+
+IF(WIN32 AND NOT MINGW)
+ acg_append_files (sources "*.c" ${directories})
+ENDIF(WIN32 AND NOT MINGW)
+
+# Disable Library installation when not building OpenMesh on its own but as part of another project!
+if ( NOT ${PROJECT_NAME} MATCHES "OpenMesh")
+ set(ACG_NO_LIBRARY_INSTALL true)
+endif()
+
+
+if (WIN32)
+
+ if ( OPENMESH_BUILD_SHARED )
+ add_definitions( -DOPENMESHDLL -DBUILDOPENMESHDLL)
+ acg_add_library (OpenMeshTools SHARED ${sources} ${headers})
+ else()
+ # OpenMesh has no dll exports so we have to build a static library on windows
+ acg_add_library (OpenMeshTools STATIC ${sources} ${headers})
+ endif()
+
+else ()
+ acg_add_library (OpenMeshTools SHAREDANDSTATIC ${sources} ${headers})
+ set_target_properties (OpenMeshTools PROPERTIES VERSION ${OPENMESH_VERSION_MAJOR}.${OPENMESH_VERSION_MINOR}
+ SOVERSION ${OPENMESH_VERSION_MAJOR}.${OPENMESH_VERSION_MINOR} )
+endif ()
+
+target_link_libraries (OpenMeshTools OpenMeshCore)
+
+IF( NOT WIN32 )
+ target_link_libraries (OpenMeshToolsStatic OpenMeshCoreStatic)
+ENDIF(NOT WIN32)
+
+if ( (${PROJECT_NAME} MATCHES "OpenMesh") AND BUILD_APPS )
+
+ if ( WIN32 )
+ if ( NOT "${CMAKE_GENERATOR}" MATCHES "MinGW Makefiles" )
+ # let bundle generation depend on target
+ add_dependencies (fixbundle OpenMeshTools)
+ endif()
+ endif()
+
+ # Add tools as dependency before fixbundle
+ if (APPLE)
+ # let bundle generation depend on target
+ add_dependencies (fixbundle OpenMeshTools)
+ add_dependencies (fixbundle OpenMeshToolsStatic)
+ endif()
+
+endif()
+
+
+# Install Header Files (Apple)
+if ( NOT ACG_PROJECT_MACOS_BUNDLE AND APPLE )
+ FILE(GLOB files_install_Decimater "${CMAKE_CURRENT_SOURCE_DIR}/Decimater/*.hh" )
+ FILE(GLOB files_install_Dualizer "${CMAKE_CURRENT_SOURCE_DIR}/Dualizer/*.hh" )
+ FILE(GLOB files_install_KERNEL_OSG "${CMAKE_CURRENT_SOURCE_DIR}/Kernel_OSG/*.hh" )
+ FILE(GLOB files_install_Smoother "${CMAKE_CURRENT_SOURCE_DIR}/Smoother/*.hh" )
+ FILE(GLOB files_install_Subdivider_Adaptive "${CMAKE_CURRENT_SOURCE_DIR}/Subdivider/Adaptive/Composite/*.hh" )
+ FILE(GLOB files_install_Subdivider_Uniform "${CMAKE_CURRENT_SOURCE_DIR}/Subdivider/Uniform/*.hh" )
+ FILE(GLOB files_install_Subdivider_Uniform_Composite "${CMAKE_CURRENT_SOURCE_DIR}/Subdivider/Uniform/Composite/*.hh" )
+ FILE(GLOB files_install_Utils "${CMAKE_CURRENT_SOURCE_DIR}/Utils/*.hh" "${CMAKE_CURRENT_SOURCE_DIR}/Utils/getopt.h" )
+ FILE(GLOB files_install_VDPM "${CMAKE_CURRENT_SOURCE_DIR}/VDPM/*.hh" )
+ INSTALL(FILES ${files_install_Decimater} DESTINATION include/OpenMesh/Tools/Decimater )
+ INSTALL(FILES ${files_install_Dualizer} DESTINATION include/OpenMesh/Tools/Dualizer )
+ INSTALL(FILES ${files_install_KERNEL_OSG} DESTINATION include/OpenMesh/Tools/Kernel_OSG )
+ INSTALL(FILES ${files_install_Smoother} DESTINATION include/OpenMesh/Tools/Smoother )
+ INSTALL(FILES ${files_install_Subdivider_Adaptive} DESTINATION include/OpenMesh/Tools/Subdivider/Adaptive/Composite )
+ INSTALL(FILES ${files_install_Subdivider_Uniform} DESTINATION include/OpenMesh/Tools/Subdivider/Uniform )
+ INSTALL(FILES ${files_install_Subdivider_Uniform_Composite} DESTINATION include/OpenMesh/Tools/Subdivider/Uniform/Composite )
+ INSTALL(FILES ${files_install_Utils} DESTINATION include/OpenMesh/Tools/Utils )
+ INSTALL(FILES ${files_install_VDPM} DESTINATION include/OpenMesh/Tools/VDPM )
+endif()
+
+
+# Only install if the project name matches OpenMesh.
+if (NOT APPLE AND ${PROJECT_NAME} MATCHES "OpenMesh")
+
+# Install Header Files
+install(DIRECTORY .
+ DESTINATION include/OpenMesh/Tools
+ FILES_MATCHING
+ PATTERN "*.hh"
+ PATTERN "CVS" EXCLUDE
+ PATTERN ".svn" EXCLUDE
+ PATTERN "tmp" EXCLUDE
+ PATTERN "Templates" EXCLUDE
+ PATTERN "Debian*" EXCLUDE)
+
+#install the config file
+install(FILES Utils/getopt.h DESTINATION include/OpenMesh/Tools/Utils)
+
+endif ()
+
+target_include_directories(OpenMeshTools PUBLIC
+ $
+ $)
+
+install(TARGETS OpenMeshTools EXPORT OpenMeshConfig
+ ARCHIVE DESTINATION ${ACG_PROJECT_LIBDIR}
+ LIBRARY DESTINATION ${ACG_PROJECT_LIBDIR}
+ RUNTIME DESTINATION ${ACG_PROJECT_BINDIR})
+
diff --git a/src/OpenMesh/Tools/Utils/Timer.cc b/src/OpenMesh/Tools/Utils/Timer.cc
index 72ae0f0e..28d8f5e1 100644
--- a/src/OpenMesh/Tools/Utils/Timer.cc
+++ b/src/OpenMesh/Tools/Utils/Timer.cc
@@ -183,7 +183,7 @@ protected:
};
// ----------------------------------------------------------- gettimeofday ----
-#elif (defined(__GNUC__) || (defined(__INTEL_COMPILER) && !defined(WIN32))) && !defined(__MINGW32__)
+#elif (defined(__GNUC__) && !defined(__FreeBSD__) || (defined(__INTEL_COMPILER) && !defined(WIN32))) && !defined(__MINGW32__)
# include
# include
@@ -271,7 +271,7 @@ Timer::Timer(void) :
# else
impl_ = new TimerImplPosix;
# endif
-#elif (defined(__GNUC__) || (defined(__INTEL_COMPILER) && !defined(WIN32)) ) && !defined(__MINGW32__)
+#elif (defined(__GNUC__) && !defined(__FreeBSD__) || (defined(__INTEL_COMPILER) && !defined(WIN32)) ) && !defined(__MINGW32__)
impl_ = new TimerImplGToD;
#else
impl_ = new TimerImplStd;
diff --git a/src/OpenMesh/Tools/Utils/getopt.h b/src/OpenMesh/Tools/Utils/getopt.h
index 59600d73..d2d7f918 100644
--- a/src/OpenMesh/Tools/Utils/getopt.h
+++ b/src/OpenMesh/Tools/Utils/getopt.h
@@ -21,7 +21,7 @@
#endif
-#elif defined __APPLE__
+#elif defined __APPLE__ || defined(__FreeBSD__)
#include
#else
#include