diff --git a/CMakeLists.txt b/CMakeLists.txt index c66f18a5..3566ec4c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -72,7 +72,7 @@ set(CMAKE_DEBUG_POSTFIX "_d") if(WIN32) add_definitions(-DWIN32) - #Global MSVC definitions. You may prefer the hand-tuned sln and projects from the nana repository. + # Global MSVC definitions. You may prefer the hand-tuned sln and projects from the nana repository. if(MSVC) option(MSVC_USE_MP "Set to ON to build nana with the /MP option (Visual Studio 2005 and above)." ON) option(MSVC_USE_STATIC_RUNTIME "Set to ON to build nana with the /MT(d) option." ON) @@ -80,7 +80,7 @@ if(WIN32) # Change the MSVC Compiler flags if(MSVC_USE_MP) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP") - endif(MSVC_USE_MP) + endif() if(MSVC_USE_STATIC_RUNTIME) foreach(flag @@ -92,31 +92,26 @@ if(WIN32) string(REGEX REPLACE "/MD" "/MT" ${flag} "${${flag}}") endif() endforeach() - endif(MSVC_USE_STATIC_RUNTIME) - endif(MSVC) + endif() + endif() if(MINGW) if(NANA_CMAKE_ENABLE_MINGW_STD_THREADS_WITH_MEGANZ) add_definitions(-DSTD_THREAD_NOT_SUPPORTED) add_definitions(-DNANA_ENABLE_MINGW_STD_THREADS_WITH_MEGANZ) - endif(NANA_CMAKE_ENABLE_MINGW_STD_THREADS_WITH_MEGANZ) - endif(MINGW) + endif() + endif() - if (MSVC) - set (DLLTOOL OFF) - else () + if(MSVC) + set(DLLTOOL OFF) + else() # mingw: If dlltool is found the def and lib file will be created - message (STATUS "Detecting dlltool") find_program (DLLTOOL dlltool) - if (DLLTOOL) - message (STATUS "Found dlltool: ${DLLTOOL}") - else () - message (WARNING "dlltool not found. Skipping import library generation.") - endif (DLLTOOL) - endif (MSVC) - -endif(WIN32) - + if(NOT DLLTOOL) + message(WARNING "dlltool not found. Skipping import library generation.") + endif() + endif() +endif() if(APPLE) @@ -126,17 +121,16 @@ if(APPLE) set(ENABLE_AUDIO OFF) elseif(UNIX) add_definitions(-Dlinux) - message("added -D linux") -endif(APPLE) +endif() if(UNIX) list(APPEND NANA_LINKS -lX11) include(FindFreetype) - if (FREETYPE_FOUND) + if(FREETYPE_FOUND) include_directories( ${FREETYPE_INCLUDE_DIRS}) list(APPEND NANA_LINKS -lXft) - endif(FREETYPE_FOUND) -endif(UNIX) + endif() +endif() ########### Compilers @@ -152,44 +146,31 @@ endif(UNIX) # # # see at end of: https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dynamic_or_shared.html -if(CMAKE_COMPILER_IS_GNUCXX OR "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") # Clang || GNU - - if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++14 -Wall -g") # Clang - - else ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -Wall -g") # GNU - - endif("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") - -endif(CMAKE_COMPILER_IS_GNUCXX OR "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") +if(CMAKE_COMPILER_IS_GNUCXX OR "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") + if("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") + set(CMAKE_CXX_FLAGS "-std=gnu++14 -Wall -g") + else() + set(CMAKE_CXX_FLAGS "-std=c++14 -Wall -g") + endif() +endif() # enable static linkage # GNU || CLang not MinGW -if(CMAKE_COMPILER_IS_GNUCXX OR "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") # AND NOT MINGW - +if(CMAKE_COMPILER_IS_GNUCXX OR "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") if(NANA_CMAKE_SHARED_LIB) list(APPEND NANA_LINKS -lgcc -lstdc++ -pthread) else() - set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++ -pthread") - # message("Setting NANA_LINKS to -static-libgcc -static-libstdc++ -pthread or ${NANA_LINKS}") - endif(NANA_CMAKE_SHARED_LIB) + set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++ -pthread") + endif() - if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.3) - # IS_GNUCXX < 5.3 - else(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.3) - - # set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lstdc++fs") # IS_GNUCXX 5.3 or more + if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.3) list(APPEND NANA_LINKS -lstdc++fs) - - endif(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.3) - -endif(CMAKE_COMPILER_IS_GNUCXX OR "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") # AND NOT MINGW + endif() +endif() -if (APPLE AND "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") # APPLE Clang - # set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -stdlib=libstdc++") - list(APPEND NANA_LINKS -stdlib=libstdc++) -endif () +if(APPLE AND "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") + list(APPEND NANA_LINKS -stdlib=libstdc++) +endif() ############# Optional libraries @@ -198,69 +179,67 @@ endif () if(NANA_CMAKE_ENABLE_PNG) if(NANA_CMAKE_LIBPNG_FROM_OS) find_package(PNG) - if (PNG_FOUND) - include_directories( ${PNG_INCLUDE_DIRS}) + if(PNG_FOUND) + include_directories(${PNG_INCLUDE_DIRS}) list(APPEND NANA_LINKS ${PNG_LIBRARIES}) - add_definitions("-DNANA_ENABLE_PNG" - "-DUSE_LIBPNG_FROM_OS") - endif(PNG_FOUND) + add_definitions(-DNANA_ENABLE_PNG -DUSE_LIBPNG_FROM_OS) + endif() else() add_definitions(-DNANA_ENABLE_PNG) - endif(NANA_CMAKE_LIBPNG_FROM_OS) -endif(NANA_CMAKE_ENABLE_PNG) + endif() +endif() # Find JPEG if(NANA_CMAKE_ENABLE_JPEG) add_definitions(-DNANA_ENABLE_JPEG) if(NANA_CMAKE_LIBJPEG_FROM_OS) find_package(JPEG) - if (JPEG_FOUND) + if(JPEG_FOUND) include_directories( ${JPEG_INCLUDE_DIR}) list(APPEND NANA_LINKS ${JPEG_LIBRARY}) - add_definitions("-DNANA_ENABLE_JPEG" - "-DUSE_LIBJPEG_FROM_OS") - endif(JPEG_FOUND) + add_definitions(-DNANA_ENABLE_JPEG -DUSE_LIBJPEG_FROM_OS) + endif() else() add_definitions(-DNANA_ENABLE_JPEG) - endif(NANA_CMAKE_LIBJPEG_FROM_OS) -endif(NANA_CMAKE_ENABLE_JPEG) + endif() +endif() # Find ASOUND if(NANA_CMAKE_ENABLE_AUDIO) add_definitions(-DNANA_ENABLE_AUDIO) if(UNIX) find_package(ASOUND) - if (ASOUND_FOUND) - include_directories( ${ASOUND_INCLUDE_DIRS}) + if(ASOUND_FOUND) + include_directories(${ASOUND_INCLUDE_DIRS}) list(APPEND NANA_LINKS -lasound) - else(ASOUND_FOUND) + else() message(FATAL_ERROR "libasound is not found") - endif(ASOUND_FOUND) - endif(UNIX) -endif(NANA_CMAKE_ENABLE_AUDIO) + endif() + endif() +endif() # Find/Select filesystem -if (NANA_CMAKE_NANA_FILESYSTEM_FORCE) +if(NANA_CMAKE_NANA_FILESYSTEM_FORCE) add_definitions(-DNANA_FILESYSTEM_FORCE) -elseif (NANA_CMAKE_STD_FILESYSTEM_FORCE) +elseif(NANA_CMAKE_STD_FILESYSTEM_FORCE) add_definitions(-DSTD_FILESYSTEM_FORCE) -elseif (NANA_CMAKE_FIND_BOOST_FILESYSTEM OR NANA_CMAKE_BOOST_FILESYSTEM_FORCE) - if (NANA_CMAKE_BOOST_FILESYSTEM_FORCE) +elseif(NANA_CMAKE_FIND_BOOST_FILESYSTEM OR NANA_CMAKE_BOOST_FILESYSTEM_FORCE) + if(NANA_CMAKE_BOOST_FILESYSTEM_FORCE) add_definitions(-DBOOST_FILESYSTEM_FORCE) - endif(NANA_CMAKE_BOOST_FILESYSTEM_FORCE) + endif() # https://cmake.org/cmake/help/git-master/module/FindBoost.html # Implicit dependencies such as Boost::filesystem requiring Boost::system will be automatically detected and satisfied, # even if system is not specified when using find_package and if Boost::system is not added to target_link_libraries. # If using Boost::thread, then Thread::Thread will also be added automatically. find_package(Boost COMPONENTS filesystem) - if (Boost_FOUND) + if(Boost_FOUND) add_definitions(-DBOOST_FILESYSTEM_AVAILABLE) include_directories(SYSTEM "${Boost_INCLUDE_DIR}") - list(APPEND NANA_LINKS ${Boost_LIBRARIES}) ###### FIRST !!!!!!!!!!!!!!!!! add is not first - endif (Boost_FOUND) + list(APPEND NANA_LINKS ${Boost_LIBRARIES}) + endif() set(Boost_USE_STATIC_LIBS ON) - set(Boost_USE_STATIC_RUNTIME ON) # ?? -endif (NANA_CMAKE_NANA_FILESYSTEM_FORCE) + set(Boost_USE_STATIC_RUNTIME ON) +endif() ######## Nana options @@ -268,11 +247,11 @@ endif (NANA_CMAKE_NANA_FILESYSTEM_FORCE) add_definitions(-DNANA_IGNORE_CONF) if(NANA_CMAKE_VERBOSE_PREPROCESSOR) add_definitions(-DVERBOSE_PREPROCESSOR) -endif(NANA_CMAKE_VERBOSE_PREPROCESSOR) +endif() if(NANA_CMAKE_AUTOMATIC_GUI_TESTING) - add_definitions(-DNANA_AUTOMATIC_GUI_TESTING) - enable_testing () -endif(NANA_CMAKE_AUTOMATIC_GUI_TESTING) + add_definitions(-DNANA_AUTOMATIC_GUI_TESTING) + enable_testing() +endif() ####################### Main setting of Nana sources, targets and install @@ -280,42 +259,42 @@ endif(NANA_CMAKE_AUTOMATIC_GUI_TESTING) set(NANA_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/source) set(NANA_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include) # collect all source sub-directories in a list to avoid duplication here -set(NANA_SOURCE_SUBDIRS /. - /detail - /filesystem - /gui - /gui/detail - /gui/widgets - /gui/widgets/skeletons - /paint - /paint/detail - /system - /threads ) +set(NANA_SOURCE_SUBDIRS /. + /detail + /filesystem + /gui + /gui/detail + /gui/widgets + /gui/widgets/skeletons + /paint + /paint/detail + /system + /threads + ) if(NANA_CMAKE_ENABLE_AUDIO) - list(APPEND NANA_SOURCE_SUBDIRS - /audio - /audio/detail ) -endif(NANA_CMAKE_ENABLE_AUDIO) + list(APPEND NANA_SOURCE_SUBDIRS /audio + /audio/detail + ) +endif() # collect all source files in the source-sub-dir # To show .h files in Visual Studio, add them to the list of sources in add_executable / add_library # and Use SOURCE_GROUP if all your sources are in the same directory foreach(subdir ${NANA_SOURCE_SUBDIRS}) - aux_source_directory(${NANA_SOURCE_DIR}${subdir} sources) - # message("Subir: ${subdir}") # message("Files: ${sources}") -endforeach(subdir ${NANA_SOURCE_SUBDIRS}) + aux_source_directory(${NANA_SOURCE_DIR}${subdir} SOURCES) +endforeach() -if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU") +if("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU") add_definitions(-fmax-errors=3) -endif ("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU") +endif() if(NANA_CMAKE_SHARED_LIB) - add_library(${PROJECT_NAME} SHARED ${sources} ) + add_library(${PROJECT_NAME} SHARED ${SOURCES}) else() - add_library(${PROJECT_NAME} STATIC ${sources} ) -endif(NANA_CMAKE_SHARED_LIB) + add_library(${PROJECT_NAME} STATIC ${SOURCES}) +endif() target_include_directories(${PROJECT_NAME} PUBLIC ${NANA_INCLUDE_DIR}) -target_link_libraries(${PROJECT_NAME} ${NANA_LINKS}) +target_link_libraries(${PROJECT_NAME} ${NANA_LINKS}) # Headers: use INCLUDE_DIRECTORIES # Libraries: use FIND_LIBRARY and link with the result of it (try to avoid LINK_DIRECTORIES) @@ -324,27 +303,24 @@ target_link_libraries(${PROJECT_NAME} ${NANA_LINKS}) # and the includes files "include/nana/" in DESTDIR/CMAKE_INSTALL_PREFIX/include/nana/ # unfortunatelly install() is still ignored by CLion: # https://intellij-support.jetbrains.com/hc/en-us/community/posts/205822949-CMake-install-isn-t-supported- -install(TARGETS ${PROJECT_NAME} ARCHIVE DESTINATION lib - LIBRARY DESTINATION lib - RUNTIME DESTINATION bin) +install(TARGETS ${PROJECT_NAME} ARCHIVE DESTINATION lib + LIBRARY DESTINATION lib + RUNTIME DESTINATION bin) # http://stackoverflow.com/questions/33788729/how-do-i-get-clion-to-run-an-install-target if(NANA_CLION) # the Clion IDE don't reconize the install target add_custom_target(install_${PROJECT_NAME} - $(MAKE) install - DEPENDS ${PROJECT_NAME} - COMMENT "Installing ${PROJECT_NAME}") + $(MAKE) install + DEPENDS ${PROJECT_NAME} + COMMENT "Installing ${PROJECT_NAME}") endif() -set_property( TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 14 ) - -if (NANA_CMAKE_SHARED_LIB) - if (WIN32) - set (CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) - - if (DLLTOOL) - #message(STATUS "CMAKE_CURRENT_BINARY_DIR = ${CMAKE_CURRENT_BINARY_DIR}") +set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 14) +if(NANA_CMAKE_SHARED_LIB) + if(WIN32) + set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) + if(DLLTOOL) #generate the lib and def files needed by msvc set_target_properties (${PROJECT_NAME} PROPERTIES OUTPUT_NAME "${PROJECT_NAME}" ARCHIVE_OUTPUT_NAME "${PROJECT_NAME}" @@ -359,42 +335,40 @@ if (NANA_CMAKE_SHARED_LIB) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/lib${PROJECT_NAME}.def" "${CMAKE_CURRENT_BINARY_DIR}/lib${PROJECT_NAME}.lib" DESTINATION lib) - endif () - - endif (WIN32) -endif (NANA_CMAKE_SHARED_LIB) - -message ("") + endif() + endif() +endif() +message("") message("The compiled Nana library will be installed in ${CMAKE_INSTALL_PREFIX}/lib") # Install the include directories too. if(NANA_CMAKE_INSTALL_INCLUDES) - install(DIRECTORY ${NANA_INCLUDE_DIR}/nana DESTINATION include ) + install(DIRECTORY ${NANA_INCLUDE_DIR}/nana DESTINATION include) message("The Nana include files will be installed in ${CMAKE_INSTALL_PREFIX}/include") -endif(NANA_CMAKE_INSTALL_INCLUDES) +endif() # Just for information: -message ("") -message ( "CMAKE_CXX_COMPILER_ID = " ${CMAKE_CXX_COMPILER_ID}) -message ( "COMPILER_IS_CLANG = " ${COMPILER_IS_CLANG}) -message ( "CMAKE_COMPILER_IS_GNUCXX = " ${CMAKE_COMPILER_IS_GNUCXX}) -message ( "CMAKE_CXX_FLAGS = " ${CMAKE_CXX_FLAGS}) -message ( "CMAKE_EXE_LINKER_FLAGS = " ${CMAKE_EXE_LINKER_FLAGS}) -message ( "CMAKE_STATIC_LINKER_FLAGS = " ${CMAKE_STATIC_LINKER_FLAGS}) -message ( "NANA_LINKS = " ${NANA_LINKS}) -message ( "DESTDIR = " ${DESTDIR}) -message ( "CMAKE_INSTALL_PREFIX = " ${CMAKE_INSTALL_PREFIX}) -message ( "NANA_INCLUDE_DIR = " ${NANA_INCLUDE_DIR}) -message ( "CMAKE_CURRENT_SOURCE_DIR = " ${CMAKE_CURRENT_SOURCE_DIR}) -message ( "NANA_CMAKE_ENABLE_AUDIO = " ${NANA_CMAKE_ENABLE_AUDIO}) -message ( "NANA_CMAKE_SHARED_LIB = " ${NANA_CMAKE_SHARED_LIB}) -message ( "NANA_CLION = " ${NANA_CLION}) -message ( "CMAKE_MAKE_PROGRAM = " ${CMAKE_MAKE_PROGRAM}) +message("") +message("CMAKE_CXX_COMPILER_ID = " ${CMAKE_CXX_COMPILER_ID}) +message("COMPILER_IS_CLANG = " ${COMPILER_IS_CLANG}) +message("CMAKE_COMPILER_IS_GNUCXX = " ${CMAKE_COMPILER_IS_GNUCXX}) +message("CMAKE_CXX_FLAGS = " ${CMAKE_CXX_FLAGS}) +message("CMAKE_EXE_LINKER_FLAGS = " ${CMAKE_EXE_LINKER_FLAGS}) +message("CMAKE_STATIC_LINKER_FLAGS = " ${CMAKE_STATIC_LINKER_FLAGS}) +message("NANA_LINKS = " ${NANA_LINKS}) +message("DESTDIR = " ${DESTDIR}) +message("CMAKE_INSTALL_PREFIX = " ${CMAKE_INSTALL_PREFIX}) +message("NANA_INCLUDE_DIR = " ${NANA_INCLUDE_DIR}) +message("CMAKE_CURRENT_SOURCE_DIR = " ${CMAKE_CURRENT_SOURCE_DIR}) +message("NANA_CMAKE_ENABLE_AUDIO = " ${NANA_CMAKE_ENABLE_AUDIO}) +message("NANA_CMAKE_SHARED_LIB = " ${NANA_CMAKE_SHARED_LIB}) +message("NANA_CLION = " ${NANA_CLION}) +message("CMAKE_MAKE_PROGRAM = " ${CMAKE_MAKE_PROGRAM}) -message ( "NANA_CMAKE_FIND_BOOST_FILESYSTEM = " ${NANA_CMAKE_FIND_BOOST_FILESYSTEM}) -message ( "NANA_CMAKE_BOOST_FILESYSTEM_FORCE = " ${NANA_CMAKE_BOOST_FILESYSTEM_FORCE}) -message ( "NANA_CMAKE_BOOST_FILESYSTEM_INCLUDE_ROOT = " ${NANA_CMAKE_BOOST_FILESYSTEM_INCLUDE_ROOT}) -message ( "NANA_CMAKE_BOOST_FILESYSTEM_LIB = " ${NANA_CMAKE_BOOST_FILESYSTEM_LIB}) -message ( "NANA_CMAKE_AUTOMATIC_GUI_TESTING = " ${NANA_CMAKE_AUTOMATIC_GUI_TESTING}) -message ( "NANA_CMAKE_ADD_DEF_AUTOMATIC_GUI_TESTING = " ${NANA_CMAKE_ADD_DEF_AUTOMATIC_GUI_TESTING}) +message("NANA_CMAKE_FIND_BOOST_FILESYSTEM = " ${NANA_CMAKE_FIND_BOOST_FILESYSTEM}) +message("NANA_CMAKE_BOOST_FILESYSTEM_FORCE = " ${NANA_CMAKE_BOOST_FILESYSTEM_FORCE}) +message("NANA_CMAKE_BOOST_FILESYSTEM_INCLUDE_ROOT = " ${NANA_CMAKE_BOOST_FILESYSTEM_INCLUDE_ROOT}) +message("NANA_CMAKE_BOOST_FILESYSTEM_LIB = " ${NANA_CMAKE_BOOST_FILESYSTEM_LIB}) +message("NANA_CMAKE_AUTOMATIC_GUI_TESTING = " ${NANA_CMAKE_AUTOMATIC_GUI_TESTING}) +message("NANA_CMAKE_ADD_DEF_AUTOMATIC_GUI_TESTING = " ${NANA_CMAKE_ADD_DEF_AUTOMATIC_GUI_TESTING})