From dba195d5ceec8a909b6c891a38b8c073e9cbd3bd Mon Sep 17 00:00:00 2001
From: Philip Trettner <Philip.Trettner@rwth-aachen.de>
Date: Thu, 14 Jan 2016 11:57:32 +0100
Subject: [PATCH] CMakeLists.txt is now a modern-cmake alternative to
 CMakeListsStaticInclude and builds a simple, static lib

---
 CMakeLists.txt              | 93 +++++++++++++++----------------------
 CMakeListsStaticInclude.txt | 34 +++++++-------
 2 files changed, 56 insertions(+), 71 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index b51b7905..2f81375f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,23 +1,16 @@
 #
-# Use this to compile ACGL as a library. To include it statically compiled into 
+# Use this to compile ACGL as a library. To include it statically compiled into
 # your own project you can also just include the CMakeListsStaticInclude.txt:
 # INCLUDE(${CMAKE_CURRENT_SOURCE_DIR}/CMakeListsStaticInclude.txt)
 #
-CMAKE_MINIMUM_REQUIRED (VERSION 2.6) 
-
-include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/CMakeMacros.txt)
+CMAKE_MINIMUM_REQUIRED (VERSION 3.0)
 
 ################################################################################
 # Global Settings
 ################################################################################
 
-# Name of the Project 
+# Name of the Project
 PROJECT(ACGL)
-INCLUDE(${CMAKE_CURRENT_SOURCE_DIR}/cmake/CompileOptions.txt)
-
-# Specify dependencies
-SET(NEED_ACGL_GLOBAL_EXTERN_DIR TRUE)
-INCLUDE(${CMAKE_CURRENT_SOURCE_DIR}/cmake/GlobalAndLocalExternACGL.txt)
 
 # OpenGL Support
 IF(NOT DEFINED ACGL_OPENGL_SUPPORT)
@@ -31,55 +24,29 @@ IF(NOT DEFINED ACGL_ERROR_LEVEL)
     SET_PROPERTY(CACHE ACGL_ERROR_LEVEL PROPERTY STRINGS EC0 EC1 EC2 EC3)
 ENDIF()
 
-# UseQT
-IF(NOT DEFINED ACGL_COMPILE_WITH_QT)
-    SET(ACGL_COMPILE_WITH_QT Yes CACHE STRING "")
-    SET_PROPERTY(CACHE ACGL_COMPILE_WITH_QT PROPERTY STRINGS Yes No)
+# Build Type (Debug, Release, Deploy, ...)
+IF(NOT CMAKE_BUILD_TYPE)
+    SET(CMAKE_BUILD_TYPE Release CACHE STRING "" FORCE)
 ENDIF()
-
-################################################################################
-# Basic Configuration
-################################################################################
-
-# Where to find the cmake finders?
-SET(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH})
-
-# Target directory
-SET(LIBRARY_OUTPUT_PATH "${CMAKE_CURRENT_SOURCE_DIR}/lib")
+SET_PROPERTY(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS Release Debug Deploy)
 
 ################################################################################
 # Project Files
 ################################################################################
 
 #
-# if ACGL should not get compiled as a library, just include the following file 
+# if ACGL should not get compiled as a library, just include the following file
 # into the projects CMakeList.txt
 #
+SET(ACGL_SKIP_INCLUDE_AND_DEF TRUE) # don't use include_directories and add_definitions for modern cmake
 INCLUDE(${CMAKE_CURRENT_SOURCE_DIR}/CMakeListsStaticInclude.txt)
 
-################################################################################
-# Defines
-################################################################################
-
-INCLUDE(${CMAKE_CURRENT_SOURCE_DIR}/cmake/DefinesACGL.txt)
-ADD_DEFINITIONS(${ACGL_DEFINES})
-
-################################################################################
-# External Libraries
-################################################################################
-
-# Qt
-IF(ACGL_COMPILE_WITH_QT)
-    #MESSAGE("QT")
-    SET(QT_USE_QTOPENGL TRUE)
-    FIND_PACKAGE(Qt4 REQUIRED)
-    INCLUDE(${QT_USE_FILE})
-    SET(LIBRARIES ${LIBRARIES} ${QT_LIBRARIES})
-ENDIF()
+# Define the Project, add all required sources and dependencies to it
+ADD_LIBRARY(ACGL STATIC ${SOURCE_FILES} ${HEADER_FILES})
 
 # static linking for MSVC
 IF(ACGL_STATIC_RUNTIME_ENV)
-if(MSVC)
+  if(MSVC)
         foreach(flag
                 CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
                 CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
@@ -91,17 +58,33 @@ if(MSVC)
 ENDIF()
 
 ################################################################################
-# Final Definition
+# Target setup
 ################################################################################
 
-if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
-    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -stdlib=libc++")
-elseif(CMAKE_COMPILER_IS_GNUCXX)
-    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
-elseif(MSVC)
+# Include directories
+target_include_directories(ACGL PUBLIC
+  include/
+)
+
+# Compile flags
+target_compile_options(ACGL PUBLIC
+  $<$<COMPILE_LANGUAGE:CXX>:-std=c++11> # C++11 for C++ files
+)
+
+# WIN32 define
+IF(WIN32)
+  target_compile_definitions(ACGL PUBLIC WIN32)
+ENDIF(WIN32)
+
+# DEBUG define
+string(TOLOWER ${CMAKE_BUILD_TYPE} BuildTypeLower)
+if(BuildTypeLower STREQUAL debug)
+  target_compile_definitions(ACGL PUBLIC DEBUG)
 endif()
 
-# Define the Project, add all required sources and dependencies to it
-ADD_LIBRARY(ACGL${COMPILE_POSTFIX} STATIC ${SOURCE_FILES} ${HEADER_FILES})
-TARGET_LINK_LIBRARIES(ACGL${COMPILE_POSTFIX} ${LIBRARIES})
-#MESSAGE(${LIBRARY_NAME})
+# OpenGL define
+if(${ACGL_OPENGL_SUPPORT} MATCHES "CORE_")
+  target_compile_definitions(ACGL PUBLIC ACGL_OPENGL_PROFILE_CORE)
+endif()
+string(REGEX MATCH "([0-9]+)" ACGL_OPENGL_VERSION ${ACGL_OPENGL_SUPPORT})
+target_compile_definitions(ACGL PUBLIC ACGL_OPENGL_VERSION_${ACGL_OPENGL_VERSION})
diff --git a/CMakeListsStaticInclude.txt b/CMakeListsStaticInclude.txt
index eecd26f2..adaf216c 100644
--- a/CMakeListsStaticInclude.txt
+++ b/CMakeListsStaticInclude.txt
@@ -40,19 +40,21 @@ RECURSE_GROUPS ("${ACGL_BASE_DIR}/src")
 SET(HEADER_FILES ${HEADER_FILES} ${HEADER_FILES_H} ${HEADER_FILES_HH} ${HEADER_FILES_HPP})
 SET(SOURCE_FILES ${SOURCE_FILES} ${SOURCE_FILES_C} ${SOURCE_FILES_CC} ${SOURCE_FILES_CPP})
 
-INCLUDE_DIRECTORIES(${CMAKE_CURRENT_LIST_DIR}/include)
-
-# set debug build with: cmake -DCMAKE_BUILD_TYPE=Debug ...
-IF(CMAKE_BUILD_TYPE MATCHES Debug)
-    ADD_DEFINITIONS(-DDEBUG)
-ENDIF(CMAKE_BUILD_TYPE MATCHES Debug)
-IF(CMAKE_BUILD_TYPE MATCHES debug)
-    ADD_DEFINITIONS(-DDEBUG)
-ENDIF(CMAKE_BUILD_TYPE MATCHES debug)
-IF(CMAKE_BUILD_TYPE MATCHES DEBUG)
-    ADD_DEFINITIONS(-DDEBUG)
-ENDIF(CMAKE_BUILD_TYPE MATCHES DEBUG)
-
-IF(WIN32)
-    ADD_DEFINITIONS(-DWIN32)
-ENDIF(WIN32)
+IF(NOT ACGL_SKIP_INCLUDE_AND_DEF)
+  INCLUDE_DIRECTORIES(${CMAKE_CURRENT_LIST_DIR}/include)
+
+  # set debug build with: cmake -DCMAKE_BUILD_TYPE=Debug ...
+  IF(CMAKE_BUILD_TYPE MATCHES Debug)
+      ADD_DEFINITIONS(-DDEBUG)
+  ENDIF(CMAKE_BUILD_TYPE MATCHES Debug)
+  IF(CMAKE_BUILD_TYPE MATCHES debug)
+      ADD_DEFINITIONS(-DDEBUG)
+  ENDIF(CMAKE_BUILD_TYPE MATCHES debug)
+  IF(CMAKE_BUILD_TYPE MATCHES DEBUG)
+      ADD_DEFINITIONS(-DDEBUG)
+  ENDIF(CMAKE_BUILD_TYPE MATCHES DEBUG)
+
+  IF(WIN32)
+      ADD_DEFINITIONS(-DWIN32)
+  ENDIF(WIN32)
+ENDIF()
-- 
GitLab