From d5721fbe30513a0136a61454184657628c6f804a Mon Sep 17 00:00:00 2001 From: qPCR4vir Date: Mon, 14 Dec 2015 01:44:22 +0100 Subject: [PATCH 1/6] STD_make_unique_NOT_SUPPORTED "Add support for make_unique<>()." --- CMakeLists.txt | 9 ++++++++ include/nana/config.hpp | 6 ++++- include/nana/deploy.hpp | 40 ++++++++++++++++++++++++++++++++++ source/gui/widgets/listbox.cpp | 4 ++-- 4 files changed, 56 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5b65dadc..99af4a08 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,6 +4,9 @@ # Robert Hauck - Enable support for PNG/Freetype # Qiangqiang Wu - Add biicode support +option(CMAKE_STD_make_unique_NOT_SUPPORTED "Add support for make_unique<>().") +#set(CMAKE_STD_make_unique_NOT_SUPPORTED OFF) + # set compile flags if(CMAKE_COMPILER_IS_GNUCXX OR "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall") @@ -96,6 +99,12 @@ endif() +# STD_make_unique_NOT_SUPPORTED +if(CMAKE_STD_make_unique_NOT_SUPPORTED) + add_definitions(-DSTD_make_unique_NOT_SUPPORTED) +endif(CMAKE_STD_make_unique_NOT_SUPPORTED) + + set(NANA_SOURCE_DIR ${CMAKE_SOURCE_DIR}/source) set(NANA_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/include) diff --git a/include/nana/config.hpp b/include/nana/config.hpp index e97c70f6..b580adb0 100644 --- a/include/nana/config.hpp +++ b/include/nana/config.hpp @@ -82,7 +82,7 @@ #endif #if (__GNUC__ == 4) - #if ((__GNUC_MINOR__ < 8) || (__GNUC_MINOR__ == 8 && __GNUC_PATCHLEVEL__ < 1)) + #if ((__GNUC_MINOR__ < 8) || (__GNUC_MINOR__ == 8 && __GNUC_PATCHLEVEL__ <= 1)) #define STD_THREAD_NOT_SUPPORTED //boost.thread is preferred @@ -90,6 +90,10 @@ //boost.thread will be replaced with meganz's mingw-std-threads. // https://github.com/meganz/mingw-std-threads //#define USE_github_com_meganz_mingw_std_threads + #if !defined(STD_make_unique_NOT_SUPPORTED) + #define STD_make_unique_NOT_SUPPORTED + #endif //STD_make_unique_NOT_SUPPORTED + #endif #if defined(NANA_MINGW) diff --git a/include/nana/deploy.hpp b/include/nana/deploy.hpp index 30d87935..f10dbebc 100644 --- a/include/nana/deploy.hpp +++ b/include/nana/deploy.hpp @@ -142,4 +142,44 @@ namespace nana #define NANA_RGB(a) (((DWORD)(a) & 0xFF)<<16) | ((DWORD)(a) & 0xFF00) | (((DWORD)(a) & 0xFF0000) >> 16 ) +#if defined(STD_make_unique_NOT_SUPPORTED) +// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3656.htm + +#include +#include +#include +#include + +namespace std { + template struct _Unique_if { + typedef unique_ptr _Single_object; + }; + + template struct _Unique_if { + typedef unique_ptr _Unknown_bound; + }; + + template struct _Unique_if { + typedef void _Known_bound; + }; + + template + typename _Unique_if::_Single_object + make_unique(Args&&... args) { + return unique_ptr(new T(std::forward(args)...)); + } + + template + typename _Unique_if::_Unknown_bound + make_unique(size_t n) { + typedef typename remove_extent::type U; + return unique_ptr(new U[n]()); + } + + template + typename _Unique_if::_Known_bound + make_unique(Args&&...) = delete; +} +#endif //STD_make_unique_NOT_SUPPORTED + #endif //NANA_MACROS_HPP diff --git a/source/gui/widgets/listbox.cpp b/source/gui/widgets/listbox.cpp index ef8b18a0..3da06cf2 100644 --- a/source/gui/widgets/listbox.cpp +++ b/source/gui/widgets/listbox.cpp @@ -58,12 +58,12 @@ namespace nana cell::cell(nana::string text, const format& fmt) : text(std::move(text)), - custom_format(new format{ fmt }) //make_unique + custom_format(std::make_unique( fmt )) // or custom_format(new format{ fmt }) {} cell::cell(nana::string text, const ::nana::color& bgcolor, const ::nana::color& fgcolor) : text(std::move(text)), - custom_format{ new format{ bgcolor, fgcolor } } //make_unique + custom_format{std::make_unique( bgcolor, fgcolor ) } //custom_format{ new format{ bgcolor, fgcolor } } {} cell& cell::operator=(const cell& rhs) From f59afb9aa421ac065d5610e3b11ec0f1b39d8192 Mon Sep 17 00:00:00 2001 From: qPCR4vir Date: Mon, 14 Dec 2015 01:49:47 +0100 Subject: [PATCH 2/6] Build demos --- CMakeLists.txt | 69 +++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 66 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 99af4a08..15bcb6c9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,6 +4,7 @@ # Robert Hauck - Enable support for PNG/Freetype # Qiangqiang Wu - Add biicode support +option(BUILD_NANA_DEMOS "Build all the demos form the nana_demo repository." ON) option(CMAKE_STD_make_unique_NOT_SUPPORTED "Add support for make_unique<>().") #set(CMAKE_STD_make_unique_NOT_SUPPORTED OFF) @@ -148,10 +149,72 @@ target_link_libraries(${PROJECT_NAME} -L/opt/X11/lib/ -lX11 -lXft -lpng -liconv) install(TARGETS ${PROJECT_NAME} ARCHIVE DESTINATION lib LIBRARY DESTINATION lib) +# ?? install(DIRECTORY ${NANA_INCLUDE_DIR}/nana DESTINATION include) set_property( TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 14 ) -add_executable(nana_test test.cpp) -set_property( TARGET nana_test PROPERTY CXX_STANDARD 14 ) -target_link_libraries(nana_test ${PROJECT_NAME}) +if (BUILD_NANA_DEMOS) + set (CMAKE_INSTALL_PREFIX ${DEMO_BIN}) + set(DEMO_BIN ${NANA_SOURCE_DIR}../nana-demo/bin) + set(CMAKE_INSTALL_PREFIX ) + add_executable(file_explorer ../nana-demo/file_explorer.cpp) + set_property( TARGET file_explorer PROPERTY CXX_STANDARD 14 ) + target_link_libraries(file_explorer ${PROJECT_NAME}) + install(TARGETS file_explorer RUNTIME DESTINATION &{DEMO_BIN}) + + add_executable(calculator ../nana-demo/calculator.cpp) + set_property( TARGET calculator PROPERTY CXX_STANDARD 14 ) + target_link_libraries(calculator ${PROJECT_NAME}) + install(TARGETS calculator RUNTIME DESTINATION &{DEMO_BIN}) + + add_executable(FreeMe ../nana-demo/FreeMe.cpp) + set_property( TARGET FreeMe PROPERTY CXX_STANDARD 14 ) + target_link_libraries(FreeMe ${PROJECT_NAME}) + install(TARGETS FreeMe RUNTIME DESTINATION &{DEMO_BIN}) + + add_executable(notepad ../nana-demo/notepad.cpp) + set_property( TARGET notepad PROPERTY CXX_STANDARD 14 ) + target_link_libraries(notepad ${PROJECT_NAME}) + install(TARGETS notepad RUNTIME DESTINATION &{DEMO_BIN}) + + add_executable(widget_show ../nana-demo/widget_show.cpp) + set_property( TARGET widget_show PROPERTY CXX_STANDARD 14 ) + target_link_libraries(widget_show ${PROJECT_NAME}) + install(TARGETS widget_show RUNTIME DESTINATION &{DEMO_BIN}) + + add_executable(widget_show2 ../nana-demo/widget_show2.cpp) + set_property( TARGET widget_show2 PROPERTY CXX_STANDARD 14 ) + target_link_libraries(widget_show2 ${PROJECT_NAME}) + install(TARGETS widget_show2 RUNTIME DESTINATION &{DEMO_BIN}) + + add_executable(a_group_impl ../nana-demo/Examples/a_group_impl.cpp) + set_property( TARGET a_group_impl PROPERTY CXX_STANDARD 14 ) + target_link_libraries(a_group_impl ${PROJECT_NAME}) + + add_executable(animate-bmp ../nana-demo/Examples/animate-bmp.cpp) + set_property( TARGET animate-bmp PROPERTY CXX_STANDARD 14 ) + target_link_libraries(animate-bmp ${PROJECT_NAME}) + + add_executable(audio_player ../nana-demo/Examples/audio_player.cpp) + set_property( TARGET audio_player PROPERTY CXX_STANDARD 14 ) + target_link_libraries(audio_player ${PROJECT_NAME}) + + + #add_executable(nana_test test.cpp) + #set_property( TARGET nana_test PROPERTY CXX_STANDARD 14 ) + #target_link_libraries(nana_test ${PROJECT_NAME}) + + #set(NANA_DEMOS_DIR ${CMAKE_SOURCE_DIR}/../nana-demo) + #set(NANA_EXAMPLES_DIR ${CMAKE_SOURCE_DIR}/../Examples/nana-demo/) + # https://cmake.org/cmake/help/v3.3/command/file.html?highlight=glob#file + #file( GLOB_RECURSE DEMO_SOURCES RELATIVE ../nana-demo *.cpp ) + + #foreach( demofile ${DEMO_SOURCES} ) + # string( REPLACE ".cpp" "" demoname ${demofile} ) + # add_executable( ${demoname} ${demofile} ) + # set_property( TARGET ${demoname} PROPERTY CXX_STANDARD 14 ) + # target_link_libraries(${demoname} ${PROJECT_NAME}) + #endforeach( demofile ${DEMO_SOURCES} ) +endif(BUILD_NANA_DEMOS) + From 0c59065d9edf227ad2f55de124cee058ec4e580f Mon Sep 17 00:00:00 2001 From: qPCR4vir Date: Mon, 14 Dec 2015 01:55:46 +0100 Subject: [PATCH 3/6] Document config.hpp --- include/nana/config.hpp | 81 +++++++++++++++++++++++++++++------------ 1 file changed, 57 insertions(+), 24 deletions(-) diff --git a/include/nana/config.hpp b/include/nana/config.hpp index b580adb0..b13c0886 100644 --- a/include/nana/config.hpp +++ b/include/nana/config.hpp @@ -7,7 +7,38 @@ * (See accompanying file LICENSE_1_0.txt or copy at * http://www.boost.org/LICENSE_1_0.txt) * - * @file: nana/config.hpp + * @file nana/config.hpp + * + * @brief Provide switches to adapt to the target OS, use of external libraries or workarounds compiler errors or lack of std C++ support. + * + * To control target OS/compiler: + * - NANA_WINDOWS + * - NANA_MINGW + * - NANA_POSIX + * - NANA_LINUX + * - NANA_MACOS + * - NANA_X11 + * - NANA_UNICODE + * + * External libraries: + * - NANA_LIBPNG, USE_LIBPNG_FROM_OS + * - NANA_LIBJPEG, USE_LIBJPEG_FROM_OS + * + * (see: Feature-testing recommendations for C++ + * in http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0096r0.html + * for example: __cpp_lib_experimental_filesystem = 201406 in is a known issue on libstdc++, it works on libc++) + * - STD_THREAD_NOT_SUPPORTED (GCC < 4.8.1) + * - STD_NUMERIC_CONVERSIONS_NOT_SUPPORTED (MinGW with GCC < 4.8.1) + * - USE_github_com_meganz_mingw_std_threads (MinGW with GCC < 4.8.1) + * - STD_NUMERIC_CONVERSIONS_NOT_SUPPORTED (MinGW with GCC < 4.8.1) + * - STD_TO_STRING_NOT_SUPPORTED (MinGW with GCC < 4.8) + * - STD_make_unique_NOT_SUPPORTED (MinGW with GCC < 4.8.1) + * or __cpp_lib_make_unique + * http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0096r0.html#detail.cpp14.n3656 */ #ifndef NANA_CONFIG_HPP @@ -18,31 +49,31 @@ // Windows: #if defined(_WIN32) || defined(__WIN32__) || defined(WIN32) - #define NANA_WINDOWS + #define NANA_WINDOWS - // MINGW ... - #if defined(__MINGW32__) || defined(__MINGW64__) || defined(MINGW) - #define NANA_MINGW - #endif // MINGW - - // end Windows + // MINGW ... + #if defined(__MINGW32__) || defined(__MINGW64__) || defined(MINGW) + #define NANA_MINGW + #endif // MINGW + // end Windows - // MacOS: who define APPLE ?? - //#define APPLE - #elif defined(APPLE) - #define NANA_MACOS - #define NANA_X11 + // MacOS: who define APPLE ?? + //#define APPLE + #elif defined(APPLE) + #define NANA_MACOS + #define NANA_X11 // how to add this: include_directories(/opt/X11/include/) - // end MacOS + // end MacOS - // Linux: (not sure about __GNU__ ??) - #elif (defined(linux) || defined(__linux) || defined(__linux__) || defined(__GNU__) || defined(__GLIBC__)) && !defined(_CRAYC) - #define NANA_LINUX - #define NANA_X11 - // end Linux - #else - # static_assert(false, "Only Windows and Unix are supported now (Mac OS is experimental)"); + // Linux: (not sure about __GNU__ ??) + #elif (defined(linux) || defined(__linux) || defined(__linux__) || defined(__GNU__) || defined(__GLIBC__)) && !defined(_CRAYC) + #define NANA_LINUX + #define NANA_X11 + // end Linux + + #else + #error( "Only Windows and Unix are supported now (Mac OS is experimental)"); #endif // Select platform #if defined(NANA_LINUX) || defined(NANA_MACOS) @@ -76,7 +107,7 @@ #endif #elif defined(__GNUC__) //GCC - #if defined(__GLIBCPP__) || defined(__GLIBCXX__) + #if defined(__GLIBCPP__) || defined( __GLIBCXX__ ) // is a known issue on libstdc++, it works on libc++ #define STD_CODECVT_NOT_SUPPORTED #endif @@ -89,7 +120,9 @@ //but if USE_github_com_meganz_mingw_std_threads is enabled, //boost.thread will be replaced with meganz's mingw-std-threads. // https://github.com/meganz/mingw-std-threads - //#define USE_github_com_meganz_mingw_std_threads + #if !defined( USE_github_com_meganz_mingw_std_threads ) + //#define USE_github_com_meganz_mingw_std_threads + #endif #if !defined(STD_make_unique_NOT_SUPPORTED) #define STD_make_unique_NOT_SUPPORTED #endif //STD_make_unique_NOT_SUPPORTED @@ -156,4 +189,4 @@ #endif -#endif //NANA_CONFIG_HPP +#endif // NANA_CONFIG_HPP \ No newline at end of file From cfc73be627f41574b0bb6723e767553aadf6f40d Mon Sep 17 00:00:00 2001 From: qPCR4vir Date: Mon, 14 Dec 2015 02:09:26 +0100 Subject: [PATCH 4/6] VERBOSE_PREPROCESSOR "Show annoying debug messages during compilation." --- .gitignore | 1 + CMakeLists.txt | 5 +++ include/nana/config.hpp | 9 +++++ include/nana/deploy.hpp | 7 +++- include/nana/verbose_preprocessor.hpp | 56 +++++++++++++++++++++++++++ 5 files changed, 76 insertions(+), 2 deletions(-) create mode 100644 include/nana/verbose_preprocessor.hpp diff --git a/.gitignore b/.gitignore index 53eee01b..71a1545a 100644 --- a/.gitignore +++ b/.gitignore @@ -38,6 +38,7 @@ lib/ *.ninja* CMakeCache.txt CMakeFiles/ +.idea/ cmake_install.cmake *.DS_Store .idea/ diff --git a/CMakeLists.txt b/CMakeLists.txt index 15bcb6c9..6dcf635d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,6 +4,8 @@ # Robert Hauck - Enable support for PNG/Freetype # Qiangqiang Wu - Add biicode support +option(CMAKE_VERBOSE_PREPROCESSOR "Show annoying debug messages during compilation." OFF) +option(CMAKE_STOP_VERBOSE_PREPROCESSOR "Stop compilation after showing the annoying debug messages." ON) option(BUILD_NANA_DEMOS "Build all the demos form the nana_demo repository." ON) option(CMAKE_STD_make_unique_NOT_SUPPORTED "Add support for make_unique<>().") #set(CMAKE_STD_make_unique_NOT_SUPPORTED OFF) @@ -99,6 +101,9 @@ if(ENABLE_JPEG) endif() +if(CMAKE_VERBOSE_PREPROCESSOR) + add_definitions(-DVERBOSE_PREPROCESSOR) +endif(CMAKE_VERBOSE_PREPROCESSOR) # STD_make_unique_NOT_SUPPORTED if(CMAKE_STD_make_unique_NOT_SUPPORTED) diff --git a/include/nana/config.hpp b/include/nana/config.hpp index b13c0886..cbac37f0 100644 --- a/include/nana/config.hpp +++ b/include/nana/config.hpp @@ -36,6 +36,7 @@ * - USE_github_com_meganz_mingw_std_threads (MinGW with GCC < 4.8.1) * - STD_NUMERIC_CONVERSIONS_NOT_SUPPORTED (MinGW with GCC < 4.8.1) * - STD_TO_STRING_NOT_SUPPORTED (MinGW with GCC < 4.8) + * - VERBOSE_PREPROCESSOR, STOP_VERBOSE_PREPROCESSOR * - STD_make_unique_NOT_SUPPORTED (MinGW with GCC < 4.8.1) * or __cpp_lib_make_unique * http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0096r0.html#detail.cpp14.n3656 @@ -188,5 +189,13 @@ #endif #endif +#if !defined(VERBOSE_PREPROCESSOR) + //#define VERBOSE_PREPROCESSOR +#endif + +#if !defined(STOP_VERBOSE_PREPROCESSOR) + #define STOP_VERBOSE_PREPROCESSOR +#endif + #endif // NANA_CONFIG_HPP \ No newline at end of file diff --git a/include/nana/deploy.hpp b/include/nana/deploy.hpp index f10dbebc..2b8f7e13 100644 --- a/include/nana/deploy.hpp +++ b/include/nana/deploy.hpp @@ -15,9 +15,12 @@ #ifndef NANA_DEPLOY_HPP #define NANA_DEPLOY_HPP -#include - #include +#if defined(VERBOSE_PREPROCESSOR) + #include +#endif + +#include #include diff --git a/include/nana/verbose_preprocessor.hpp b/include/nana/verbose_preprocessor.hpp new file mode 100644 index 00000000..b62267f6 --- /dev/null +++ b/include/nana/verbose_preprocessor.hpp @@ -0,0 +1,56 @@ +/** + * Nana Verbose preprocessor + * Nana C++ Library(http://www.nanapro.org) + * Copyright(C) 2003-2016 Jinhao(cnjinhao@hotmail.com) + * + * Distributed under the Boost Software License, Version 1.0. + * (See accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * @file nana/verbose_preprocessor.hpp + * + * @brief show the values of configuration constants during compilation to facilitate build debugging. + * + * Set VERBOSE_PREPROCESSOR to 1 to show the messages or to 0 for a normal build. + * Normally set to 0. Set to 1 only in case you want to debug the build system because it is extremely repetitive and slow. + * + * @authors Ariel Vina-Rodriguez (qPCR4vir) + * + */ +// Created by ariel.rodriguez on 08.12.2015. +// + +#ifndef NANA_VERBOSE_PREPROCESSOR_H +#define NANA_VERBOSE_PREPROCESSOR_H + +#if defined(VERBOSE_PREPROCESSOR) + + #define STRING2(x) #x + #define STRING(x) STRING2(x) + #pragma message ( "\nVerbose preprocessor =" STRING(VERBOSE_PREPROCESSOR)" , \n STOP_VERBOSE_PREPROCESSOR=" STRING(STOP_VERBOSE_PREPROCESSOR) ) + + #pragma message ( "\nWindows: \n _WIN32=" STRING(_WIN32) ", \n __WIN32__ =" STRING(__WIN32__) " , \n WIN32=" STRING(WIN32)" , \n NANA_WINDOWS=" STRING(NANA_WINDOWS) ) + + #pragma message ( "\nUNICODE: \n NANA_UNICODE=" STRING(NANA_UNICODE) ", \n _UNICODE =" STRING(_UNICODE) " , \n UNICODE=" STRING(UNICODE) ) + + #pragma message ( "\nMinGW: \n __MINGW32__=" STRING(__MINGW32__) ", \n __MINGW64__=" STRING(__MINGW64__) " , \n MINGW=" STRING(MINGW) ) + + #pragma message ( "\nGNU: \n __GNUC__=" STRING(__GNUC__) ", \n __GNUC_MINOR__=" STRING(__GNUC_MINOR__) " , \n __GNUC_PATCHLEVEL__=" STRING(__GNUC_PATCHLEVEL__) ) + + #pragma message ( "\nSTD: \nSTD_CODECVT_NOT_SUPPORTED=" STRING(STD_CODECVT_NOT_SUPPORTED) " , \nSTD_THREAD_NOT_SUPPORTED=" STRING(STD_THREAD_NOT_SUPPORTED) ) + + #pragma message ( "\nSTD: \nUSE_github_com_meganz_mingw_std_threads=" STRING(USE_github_com_meganz_mingw_std_threads) " , \nSTD_THREAD_NOT_SUPPORTED=" STRING(STD_THREAD_NOT_SUPPORTED) ) + + #pragma message ( "\nClang compiler: \n__clang__=" STRING(__clang__) ", \n__GLIBCPP__=" STRING(__GLIBCPP__) " , \n__GLIBCXX__=" STRING(__GLIBCXX__) ) + + #pragma message ( "\nMSC: \n_MSC_VER=" STRING(_MSC_VER) ", \n_MSC_FULL_VER=" STRING(_MSC_FULL_VER ) ) + + #if defined(STOP_VERBOSE_PREPROCESSOR) + #error ("\nCompilation stopped to avoid annoying messages") + #endif + +#endif // VERBOSE_PREPROCESSOR + + + +#endif //NANA_VERBOSE_PREPROCESSOR_H From 986f5ea9ad84899b1cb965d63da6f176b3c4af99 Mon Sep 17 00:00:00 2001 From: qPCR4vir Date: Mon, 14 Dec 2015 02:33:11 +0100 Subject: [PATCH 5/6] Reorganize options in CMakeList.txt at the beginning with right defaults. Add condition in endif() --- CMakeLists.txt | 81 ++++++++++++++++++++++++++++++-------------------- 1 file changed, 49 insertions(+), 32 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6dcf635d..2ffdc012 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,6 +4,16 @@ # Robert Hauck - Enable support for PNG/Freetype # Qiangqiang Wu - Add biicode support + +#https://cmake.org/cmake-tutorial/ +#https://cmake.org/cmake/help/v3.3/module/CMakeDependentOption.html?highlight=cmakedependentoption +# use CACHE FORCE? or set(USE_meganz_mingw_std_threads ON) or delete CMakecache.txt or the entery build dir +option(USE_meganz_mingw_std_threads "replaced boost.thread with meganz's mingw-std-threads." OFF) +option(USE_UNICODE "Use Unicode Character Set" ON) +option(ENABLE_PNG "Enable the use of PNG" OFF) +option(LIBPNG_FROM_OS "Use libpng from operating system." ON) +option(ENABLE_JPEG "Enable the use of JPEG" OFF) +option(LIBJPEG_FROM_OS "Use libjpeg from operating system." ON) option(CMAKE_VERBOSE_PREPROCESSOR "Show annoying debug messages during compilation." OFF) option(CMAKE_STOP_VERBOSE_PREPROCESSOR "Stop compilation after showing the annoying debug messages." ON) option(BUILD_NANA_DEMOS "Build all the demos form the nana_demo repository." ON) @@ -24,37 +34,47 @@ if(BIICODE) add_biicode_targets() return() -endif() +endif(BIICODE) project(nana) cmake_minimum_required(VERSION 2.8) -#Global MSVC definitions if(WIN32) - if(MSVC) + add_definitions(-DWIN32) + + #Global MSVC definitions + if(MSVC) option(WIN32_USE_MP "Set to ON to build nana with the /MP option (Visual Studio 2005 and above)." ON) # ?? if(WIN32_USE_MP) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP") - endif() - + endif(WIN32_USE_MP) endif(MSVC) + + if(MINGW) + add_definitions(-DMINGW) + #Find PNG + if(USE_meganz_mingw_std_threads) + add_definitions(-DUSE_github_com_meganz_mingw_std_threads) + # remove_definitions() + endif(USE_meganz_mingw_std_threads) + endif(MINGW) + endif(WIN32) #Unicode -option(USE_UNICODE "Use Unicode Character Set") if(USE_UNICODE) add_definitions(-DNANA_UNICODE) -endif() +endif(USE_UNICODE) if(APPLE) add_definitions(-DAPPLE) include_directories(/opt/X11/include/) elseif(UNIX) add_definitions(-Dlinux) -endif() +endif(APPLE) @@ -62,19 +82,10 @@ if(UNIX) find_package(Freetype) if (FREETYPE_FOUND) include_directories( ${FREETYPE_INCLUDE_DIRS}) - endif() -endif() - -if(WIN32) - add_definitions(-DWIN32) - if(MINGW) - add_definitions(-DMINGW) - endif() -endif() + endif(FREETYPE_FOUND) +endif(UNIX) #Find PNG -option(ENABLE_PNG "Enable the use of PNG") -option(LIBPNG_FROM_OS "Use libpng from operating system.") if(ENABLE_PNG) add_definitions(-DNANA_ENABLE_PNG) if(LIBPNG_FROM_OS) @@ -82,13 +93,11 @@ if(ENABLE_PNG) if (PNG_FOUND) include_directories( ${PNG_INCLUDE_DIRS}) add_definitions(-DUSE_LIBPNG_FROM_OS) - endif() - endif() -endif() + endif(PNG_FOUND) + endif(LIBPNG_FROM_OS) +endif(ENABLE_PNG) #Find JPEG -option(ENABLE_JPEG "Enable the use of JPEG") -option(LIBJPEG_FROM_OS "Use libjpeg from operating system.") if(ENABLE_JPEG) add_definitions(-DNANA_ENABLE_JPEG) if(LIBJPEG_FROM_OS) @@ -96,11 +105,13 @@ if(ENABLE_JPEG) if (JPEG_FOUND) include_directories( ${JPEG_INCLUDE_DIRS}) add_definitions(-DUSE_LIBJPEG_FROM_OS) - endif() - endif() -endif() + endif(JPEG_FOUND) + endif(LIBJPEG_FROM_OS) +endif(ENABLE_JPEG) + +#Unicode if(CMAKE_VERBOSE_PREPROCESSOR) add_definitions(-DVERBOSE_PREPROCESSOR) endif(CMAKE_VERBOSE_PREPROCESSOR) @@ -131,13 +142,16 @@ aux_source_directory(${NANA_SOURCE_DIR}/paint/detail NANA_PAINT_DETAIL_SOURCE) aux_source_directory(${NANA_SOURCE_DIR}/system NANA_SYSTEM_SOURCE) aux_source_directory(${NANA_SOURCE_DIR}/threads NANA_THREADS_SOURCE) +#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 + add_library(${PROJECT_NAME} ${NANA_SOURCE} ${NANA_DETAIL_SOURCE} ${NANA_FILESYSTEM_SOURCE} -#if(NOT APPLE) +if(NOT APPLE) ${NANA_AUDIO_SOURCE} ${NANA_AUDIO_DETAIL_SOURCE} -#endif +endif (NOT APPLE) ${NANA_GUI_SOURCE} ${NANA_GUI_DETAIL_SOURCE} ${NANA_GUI_WIDGETS_SOURCE} @@ -147,9 +161,12 @@ add_library(${PROJECT_NAME} ${NANA_SOURCE} ${NANA_SYSTEM_SOURCE} ${NANA_THREADS_SOURCE}) -#if(APPLE) -target_link_libraries(${PROJECT_NAME} -L/opt/X11/lib/ -lX11 -lXft -lpng -liconv) -#endif() +if(APPLE) + #Headers: use INCLUDE_DIRECTORIES + # Libraries: use FIND_LIBRARY and link with the result of it (try to avoid LINK_DIRECTORIES + target_link_libraries(${PROJECT_NAME} -L/opt/X11/lib/ -lX11 -lXft -lpng -liconv) + +endif(APPLE) install(TARGETS ${PROJECT_NAME} ARCHIVE DESTINATION lib From 0bd5483cdd7d77ea3bd2d791466eeebfff014d24 Mon Sep 17 00:00:00 2001 From: qPCR4vir Date: Mon, 14 Dec 2015 12:44:37 +0100 Subject: [PATCH 6/6] reorganize --- CMakeLists.txt | 9 +++++---- include/nana/config.hpp | 25 +++++++++++-------------- 2 files changed, 16 insertions(+), 18 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2ffdc012..e416d60c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,11 +3,12 @@ # Contributor: # Robert Hauck - Enable support for PNG/Freetype # Qiangqiang Wu - Add biicode support - +# Ariel Vina-Rodriguez (qPCR4vir) #https://cmake.org/cmake-tutorial/ #https://cmake.org/cmake/help/v3.3/module/CMakeDependentOption.html?highlight=cmakedependentoption -# use CACHE FORCE? or set(USE_meganz_mingw_std_threads ON) or delete CMakecache.txt or the entery build dir +# use CACHE FORCE or set(USE_meganz_mingw_std_threads ON) or delete CMakecache.txt or the entirely build dir +# if your changes don't execute option(USE_meganz_mingw_std_threads "replaced boost.thread with meganz's mingw-std-threads." OFF) option(USE_UNICODE "Use Unicode Character Set" ON) option(ENABLE_PNG "Enable the use of PNG" OFF) @@ -16,8 +17,8 @@ option(ENABLE_JPEG "Enable the use of JPEG" OFF) option(LIBJPEG_FROM_OS "Use libjpeg from operating system." ON) option(CMAKE_VERBOSE_PREPROCESSOR "Show annoying debug messages during compilation." OFF) option(CMAKE_STOP_VERBOSE_PREPROCESSOR "Stop compilation after showing the annoying debug messages." ON) -option(BUILD_NANA_DEMOS "Build all the demos form the nana_demo repository." ON) -option(CMAKE_STD_make_unique_NOT_SUPPORTED "Add support for make_unique<>().") +option(BUILD_NANA_DEMOS "Build all the demos form the nana_demo repository." OFF) +option(CMAKE_STD_make_unique_NOT_SUPPORTED "Add support for make_unique<>()." OFF) #set(CMAKE_STD_make_unique_NOT_SUPPORTED OFF) # set compile flags diff --git a/include/nana/config.hpp b/include/nana/config.hpp index cbac37f0..52ec94c6 100644 --- a/include/nana/config.hpp +++ b/include/nana/config.hpp @@ -52,10 +52,6 @@ #define NANA_WINDOWS - // MINGW ... - #if defined(__MINGW32__) || defined(__MINGW64__) || defined(MINGW) - #define NANA_MINGW - #endif // MINGW // end Windows @@ -101,18 +97,15 @@ #endif // _MSC_VER == 1900 #endif // _MSVC -#if defined(__clang__) - #if defined(__GLIBCPP__) || defined(__GLIBCXX__) - // is a known issue on libstdc++, it works on libc++ - #define STD_CODECVT_NOT_SUPPORTED - #endif - +#if defined(__clang__) #elif defined(__GNUC__) //GCC - #if defined(__GLIBCPP__) || defined( __GLIBCXX__ ) - // is a known issue on libstdc++, it works on libc++ - #define STD_CODECVT_NOT_SUPPORTED - #endif + // MINGW ... + #if defined(__MINGW32__) || defined(__MINGW64__) || defined(MINGW) + #define NANA_MINGW + #endif // MINGW + + // support for GCC 4.8.1 will be discontinued. Please use v5 or newer. #if (__GNUC__ == 4) #if ((__GNUC_MINOR__ < 8) || (__GNUC_MINOR__ == 8 && __GNUC_PATCHLEVEL__ <= 1)) #define STD_THREAD_NOT_SUPPORTED @@ -141,6 +134,10 @@ #endif #endif +// is a known issue on libstdc++, it works on libc++ +#if defined(__GLIBCPP__) || defined( __GLIBCXX__ ) + #define STD_CODECVT_NOT_SUPPORTED +#endif // __GLIBCPP__ or __GLIBCXX__ // End compilers ...