-
Notifications
You must be signed in to change notification settings - Fork 8
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
🔨 Added cmake package configuration file
- Loading branch information
1 parent
142c2ca
commit 18ca8a0
Showing
7 changed files
with
165 additions
and
174 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -4,42 +4,42 @@ | |
# This is the main file where we prepare the general build environment | ||
# and provide build configuration options. | ||
###################################################################### | ||
# cmake system for PagedGeometry updated on 6-10-2017 by Edgar{at}AnotherFoxGuy{DOT}com | ||
# cmake system for PagedGeometry updated on 2-9-2021 by Edgar{at}AnotherFoxGuy{DOT}com | ||
|
||
cmake_minimum_required( VERSION 3.0.2 ) | ||
set( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake ) | ||
cmake_minimum_required(VERSION 3.0.2) | ||
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake) | ||
|
||
# define the project | ||
project( | ||
PagedGeometry | ||
HOMEPAGE_URL https://ogrecave.github.io/ogre-pagedgeometry/ | ||
DESCRIPTION "PagedGeometry is a library that helps you to add grass and trees to your Ogre3D scene" | ||
VERSION 1.3.0 | ||
) | ||
|
||
# add some functions we use that are shipped with cmake | ||
INCLUDE(CheckLibraryExists) | ||
INCLUDE(CheckIncludeFile) | ||
INCLUDE(CheckIncludeFileCXX) | ||
INCLUDE(CheckCCompilerFlag) | ||
INCLUDE(CheckCSourceCompiles) | ||
|
||
# some versioning things | ||
SET(LIB_MAJOR_VERSION "1") | ||
SET(LIB_MINOR_VERSION "2") | ||
SET(LIB_BUILD_VERSION "0") | ||
SET(LIB_VERSION "${LIB_MAJOR_VERSION}.${LIB_MINOR_VERSION}.${LIB_BUILD_VERSION}") | ||
IF(NOT DEFINED LIB_INSTALL_DIR) | ||
SET(LIB_INSTALL_DIR "lib${LIB_SUFFIX}") | ||
ENDIF(NOT DEFINED LIB_INSTALL_DIR) | ||
include(CheckLibraryExists) | ||
include(CheckIncludeFile) | ||
include(CheckIncludeFileCXX) | ||
include(CheckCCompilerFlag) | ||
include(CheckCSourceCompiles) | ||
include(CMakePackageConfigHelpers) | ||
include(GNUInstallDirs) | ||
|
||
# define the project | ||
project(PagedGeometry VERSION ${LIB_VERSION}) | ||
|
||
# build static libs by default | ||
SET(BUILD_SHARED_LIBS OFF) | ||
|
||
SET(CMAKE_USE_RELATIVE_PATHS OFF) | ||
|
||
|
||
# setup paths | ||
SET(RUNTIME_OUTPUT_DIRECTORY "${PagedGeometry_SOURCE_DIR}/bin/") | ||
SET(LIBRARY_OUTPUT_DIRECTORY "${PagedGeometry_SOURCE_DIR}/lib/") | ||
SET(ARCHIVE_OUTPUT_DIRECTORY "${PagedGeometry_SOURCE_DIR}/lib/") | ||
SET(EXECUTABLE_OUTPUT_PATH ${RUNTIME_OUTPUT_DIRECTORY}) | ||
SET(LIBRARY_OUTPUT_PATH ${LIBRARY_OUTPUT_DIRECTORY}) | ||
SET(RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/bin/") | ||
SET(LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/lib/") | ||
SET(ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/lib/") | ||
SET(EXECUTABLE_OUTPUT_PATH ${RUNTIME_OUTPUT_DIRECTORY}) | ||
SET(LIBRARY_OUTPUT_PATH ${LIBRARY_OUTPUT_DIRECTORY}) | ||
SET(CMAKEFILES_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/PagedGeometry") | ||
|
||
# fix executable paths for windows | ||
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${RUNTIME_OUTPUT_DIRECTORY}) | ||
|
@@ -49,138 +49,113 @@ SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${RUNTIME_OUTPUT_DIRECTORY}) | |
|
||
|
||
# some optimization flags | ||
if(MSVC) | ||
# add multi processor compilation flags | ||
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MP /GL /Ox /Ob2 /Oi /Ot /Oy /fp:fast /GS- /MP /Zi") | ||
set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} /MP /Zi") | ||
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /MP /Od /Zi") | ||
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MP /Od /Zi") | ||
# some general flags | ||
add_definitions("-D_CRT_SECURE_NO_WARNINGS") | ||
include_directories(${DirectX_INCLUDE_DIR}) | ||
|
||
set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /DEBUG /SUBSYSTEM:WINDOWS") | ||
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /DEBUG /SUBSYSTEM:WINDOWS /LTCG /OPT:REF") | ||
set(CMAKE_EXE_LINKER_FLAGS_MINSIZEREL "${CMAKE_EXE_LINKER_FLAGS_MINSIZEREL} /DEBUG /SUBSYSTEM:WINDOWS /LTCG /OPT:REF") | ||
set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO} /DEBUG /SUBSYSTEM:WINDOWS /LTCG /OPT:REF") | ||
ELSEIF() | ||
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} -mfpmath=sse -msse2 -mmmx -msse -msse3 -m3dnow -O2 -fomit-frame-pointer -fstrict-aliasing -ffast-math -ftracer") | ||
set(CMAKE_EXE_LINKER_FLAGS_RelWithDebug "${CMAKE_EXE_LINKER_FLAGS_RelWithDebug} -O0") | ||
endif() | ||
if (MSVC) | ||
# add multi processor compilation flags | ||
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MP /GL /Ox /Ob2 /Oi /Ot /Oy /fp:fast /GS- /MP /Zi") | ||
set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} /MP /Zi") | ||
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /MP /Od /Zi") | ||
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MP /Od /Zi") | ||
# some general flags | ||
add_definitions("-D_CRT_SECURE_NO_WARNINGS") | ||
include_directories(${DirectX_INCLUDE_DIR}) | ||
|
||
set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /DEBUG /SUBSYSTEM:WINDOWS") | ||
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /DEBUG /SUBSYSTEM:WINDOWS /LTCG /OPT:REF") | ||
set(CMAKE_EXE_LINKER_FLAGS_MINSIZEREL "${CMAKE_EXE_LINKER_FLAGS_MINSIZEREL} /DEBUG /SUBSYSTEM:WINDOWS /LTCG /OPT:REF") | ||
set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO} /DEBUG /SUBSYSTEM:WINDOWS /LTCG /OPT:REF") | ||
elseif () | ||
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} -mfpmath=sse -msse2 -mmmx -msse -msse3 -m3dnow -O2 -fomit-frame-pointer -fstrict-aliasing -ffast-math -ftracer") | ||
set(CMAKE_EXE_LINKER_FLAGS_RelWithDebug "${CMAKE_EXE_LINKER_FLAGS_RelWithDebug} -O0") | ||
endif () | ||
|
||
# some PG build options | ||
set(PAGEDGEOMETRY_BUILD_SAMPLES "FALSE" CACHE BOOL "build the examples") | ||
set(PAGEDGEOMETRY_BUILD_SAMPLES "FALSE" CACHE BOOL "build the examples") | ||
set(PAGEDGEOMETRY_ALTERNATE_COORDSYSTEM "FALSE" CACHE BOOL "alternate coordinate system, do not use unless you are very sure about it") | ||
set(PAGEDGEOMETRY_USER_DATA "FALSE" CACHE BOOL "ability to attach user data to entities") | ||
|
||
# Needed for PagedGeometry.pc.in | ||
SET(prefix ${CMAKE_INSTALL_PREFIX}) | ||
SET(exec_prefix "\${prefix}") | ||
SET(libdir "\${exec_prefix}/${LIB_INSTALL_DIR}") | ||
SET(bindir "\${exec_prefix}/bin") | ||
SET(includedir "\${prefix}/include") | ||
SET(PACKAGE_NAME "PagedGeometry") | ||
SET(PACKAGE_VERSION "${LIB_VERSION}") | ||
|
||
# configuration of the config.h and PkgConfig | ||
CONFIGURE_FILE( | ||
"${PagedGeometry_SOURCE_DIR}/include/PagedGeometryConfig.h.in" | ||
"${PagedGeometry_BINARY_DIR}/include/PagedGeometryConfig.h") | ||
CONFIGURE_FILE( | ||
"${PagedGeometry_SOURCE_DIR}/PagedGeometry.pc.in" | ||
"${PagedGeometry_BINARY_DIR}/PagedGeometry.pc" | ||
@ONLY) | ||
# install the PkgConfig file | ||
INSTALL(FILES "${PagedGeometry_BINARY_DIR}/PagedGeometry.pc" DESTINATION "${LIB_INSTALL_DIR}/pkgconfig") | ||
set(PAGEDGEOMETRY_USER_DATA "FALSE" CACHE BOOL "ability to attach user data to entities") | ||
|
||
# configuration of the config.h | ||
CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/include/PagedGeometryConfig.h.in" "${CMAKE_BINARY_DIR}/include/PagedGeometryConfig.h") | ||
|
||
# some additional compiler flags | ||
IF(NOT WIN32) | ||
ADD_DEFINITIONS(-Wall -Wno-unused-parameter) | ||
CHECK_C_COMPILER_FLAG(-Wextra HAVE_W_EXTRA) | ||
IF(HAVE_W_EXTRA) | ||
ADD_DEFINITIONS(-Wextra) | ||
ENDIF() | ||
endif() | ||
if (NOT WIN32) | ||
ADD_DEFINITIONS(-Wall -Wno-unused-parameter) | ||
CHECK_C_COMPILER_FLAG(-Wextra HAVE_W_EXTRA) | ||
if (HAVE_W_EXTRA) | ||
ADD_DEFINITIONS(-Wextra) | ||
endif () | ||
endif () | ||
|
||
# Set visibility options if available | ||
IF(NOT WIN32) | ||
CHECK_C_SOURCE_COMPILES("int foo() __attribute__((destructor)); | ||
IF (NOT WIN32) | ||
CHECK_C_SOURCE_COMPILES("int foo() __attribute__((destructor)); | ||
int main() {return 0;}" HAVE_GCC_DESTRUCTOR) | ||
|
||
CHECK_C_COMPILER_FLAG(-fvisibility=hidden HAVE_VISIBILITY_SWITCH) | ||
IF(HAVE_VISIBILITY_SWITCH) | ||
CHECK_C_SOURCE_COMPILES("int foo() __attribute__((visibility(\"default\"))); | ||
CHECK_C_COMPILER_FLAG(-fvisibility=hidden HAVE_VISIBILITY_SWITCH) | ||
IF (HAVE_VISIBILITY_SWITCH) | ||
CHECK_C_SOURCE_COMPILES("int foo() __attribute__((visibility(\"default\"))); | ||
int main() {return 0;}" HAVE_GCC_VISIBILITY) | ||
IF(HAVE_GCC_VISIBILITY) | ||
ADD_DEFINITIONS(-fvisibility=hidden -DHAVE_GCC_VISIBILITY) | ||
ENDIF() | ||
ENDIF() | ||
ENDIF() | ||
IF (HAVE_GCC_VISIBILITY) | ||
ADD_DEFINITIONS(-fvisibility=hidden -DHAVE_GCC_VISIBILITY) | ||
ENDIF () | ||
ENDIF () | ||
ENDIF () | ||
|
||
# --- Ogre 3D graphics engine --- | ||
find_package( OGRE REQUIRED CONFIG) | ||
find_package(OGRE REQUIRED CONFIG) | ||
|
||
# now add the directories | ||
add_subdirectory(source) | ||
|
||
if(PAGEDGEOMETRY_BUILD_SAMPLES) | ||
add_subdirectory(examples) | ||
endif(PAGEDGEOMETRY_BUILD_SAMPLES) | ||
|
||
|
||
|
||
# cpack | ||
set(CPACK_PACKAGE_DESCRIPTION "PagedGeometry") | ||
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "The PagedGeometry engine is an add-on to Ogre which provides highly optimized methods for rendering massive amounts of small meshes, covering a possibly infinite area.") | ||
set(CPACK_PACKAGE_NAME "pagedgeometry") | ||
set(CPACK_DEBIAN_PACKAGE_DEPENDS "libogre-1.9-dev") | ||
set(CPACK_PACKAGE_CONTACT "[email protected]") | ||
set(CPACK_PACKAGE_VENDOR "[email protected]") | ||
SET(CPACK_PACKAGE_VERSION ${LIB_VERSION}) | ||
SET(CPACK_PACKAGE_VERSION_MAJOR ${LIB_MAJOR_VERSION}) | ||
SET(CPACK_PACKAGE_VERSION_MINOR ${LIB_MINOR_VERSION}) | ||
SET(CPACK_PACKAGE_VERSION_PATCH ${LIB_BUILD_VERSION}) | ||
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/zlib.txt") | ||
set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README.md") | ||
|
||
SET(CPACK_GENERATOR ZIP) | ||
IF(UNIX) | ||
SET(CPACK_GENERATOR ${CPACK_GENERATOR};STGZ;TGZ;DEB;RPM) | ||
ENDIF(UNIX) | ||
IF(LINUX) | ||
SET(CPACK_GENERATOR ${CPACK_GENERATOR};DEB;RPM) | ||
ENDIF(LINUX) | ||
IF(MSVC) | ||
SET(CPACK_GENERATOR ${CPACK_GENERATOR};NSIS) | ||
ENDIF(MSVC) | ||
IF(APPLE) | ||
SET(CPACK_GENERATOR ${CPACK_GENERATOR};PackageMaker) | ||
ENDIF(APPLE) | ||
set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${LIB_VERSION}-${CMAKE_SYSTEM_PROCESSOR}") | ||
include(CPack) | ||
if (PAGEDGEOMETRY_BUILD_SAMPLES) | ||
add_subdirectory(examples) | ||
endif (PAGEDGEOMETRY_BUILD_SAMPLES) | ||
|
||
|
||
# doxygen stuff | ||
find_package(Doxygen) | ||
if (DOXYGEN_FOUND) | ||
message("found doxygen, generating documentation") | ||
# prepare doxygen configuration file | ||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/docs/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile) | ||
|
||
add_custom_target( doc-doxygen | ||
COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile | ||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} | ||
COMMENT "Generating documentation with Doxygen." | ||
VERBATIM | ||
) | ||
|
||
# cleanup $build/api-doc on "make clean" | ||
set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES api-doc) | ||
|
||
#install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/docs/html/ DESTINATION doc/pagedgeometry/api) | ||
# install man pages into packages, scope is now project root.. | ||
#install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/api-doc/man/man3 DESTINATION share/man/man3/ ) | ||
message("found doxygen, generating documentation") | ||
# prepare doxygen configuration file | ||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/docs/Doxyfile.in ${CMAKE_BINARY_DIR}/Doxyfile) | ||
|
||
add_custom_target( | ||
doc_doxygen | ||
COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_BINARY_DIR}/Doxyfile | ||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR} | ||
COMMENT "Generating documentation with Doxygen." | ||
VERBATIM | ||
) | ||
|
||
# cleanup $build/docs on "make clean" | ||
set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES docs) | ||
|
||
#install(DIRECTORY ${CMAKE_BINARY_DIR}/docs/html/ DESTINATION ${CMAKE_INSTALL_DOCDIR}/api) | ||
# install man pages into packages, scope is now project root.. | ||
#install(DIRECTORY ${CMAKE_BINARY_DIR}/docs/man/man3 DESTINATION share/man/man3/ ) | ||
endif (DOXYGEN_FOUND) | ||
|
||
# other doc files | ||
set(DOC_FILES Contributors.txt zlib.txt README.md Todo.txt) | ||
install(FILES ${DOC_FILES} DESTINATION doc/pagedgeometry/) | ||
install(FILES ${DOC_FILES} DESTINATION TYPE DOC) | ||
|
||
# install the PkgConfig file | ||
configure_file("${CMAKE_SOURCE_DIR}/PagedGeometry.pc.in" "${CMAKE_BINARY_DIR}/PagedGeometry.pc" @ONLY) | ||
install(FILES "${CMAKE_BINARY_DIR}/PagedGeometry.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") | ||
|
||
configure_package_config_file( | ||
PagedGeometryConfig.cmake.in | ||
${CMAKE_BINARY_DIR}/PagedGeometryConfig.cmake | ||
INSTALL_DESTINATION ${CMAKEFILES_INSTALL_DIR} | ||
) | ||
|
||
write_basic_package_version_file( | ||
${CMAKE_BINARY_DIR}/PagedGeometryConfigVersion.cmake | ||
VERSION "${CMAKE_PROJECT_VERSION}" | ||
COMPATIBILITY SameMajorVersion | ||
) | ||
|
||
install( | ||
FILES ${CMAKE_BINARY_DIR}/PagedGeometryConfig.cmake | ||
${CMAKE_BINARY_DIR}/PagedGeometryConfigVersion.cmake | ||
DESTINATION ${CMAKEFILES_INSTALL_DIR} | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,11 +1,11 @@ | ||
prefix=@prefix@ | ||
exec_prefix=@exec_prefix@ | ||
libdir=@libdir@ | ||
includedir=@includedir@ | ||
prefix="@CMAKE_INSTALL_PREFIX@" | ||
exec_prefix="${prefix}" | ||
libdir="${prefix}/@CMAKE_INSTALL_LIBDIR@" | ||
includedir="${prefix}/include" | ||
|
||
Name: PagedGeometry | ||
Description: Paged Geometry is a library that helps you to add grass and trees to your Ogre3D scene | ||
Name: @CMAKE_PROJECT_NAME@ | ||
Version: @CMAKE_PROJECT_VERSION@ | ||
Description: @CMAKE_PROJECT_DESCRIPTION@ | ||
Requires: @PKG_CONFIG_REQUIRES@ | ||
Version: @PACKAGE_VERSION@ | ||
Libs: -L${libdir} -l@LIBNAME@ @PKG_CONFIG_LIBS@ | ||
Libs: -L${libdir} -l@CMAKE_PROJECT_NAME@ | ||
Cflags: -I${includedir} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
@PACKAGE_INIT@ | ||
|
||
include("${CMAKE_CURRENT_LIST_DIR}/PagedGeometryTargets.cmake") | ||
|
||
check_required_components(PagedGeometry) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.