diff --git a/.gitignore b/.gitignore index f6f1e54d..ff2a3af0 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,8 @@ #ignore thumbnails created by windows Thumbs.db #Ignore files build by Visual Studio +bii/build/* +bii/cmake/* *.obj *.exe *.pdb @@ -27,4 +29,6 @@ obj/ _ReSharper*/ [Tt]est[Rr]esult* *.suo -*.sdf \ No newline at end of file +*.sdf + +bii/.hive.db \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 87593cf6..72cda278 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,10 +2,22 @@ # Author: Andrew Kornilov(https://github.com/ierofant) # Contributor: # Robert Hauck - Enable support for PNG/Freetype +# Qiangqiang Wu - Add biicode support -project(nana) -cmake_minimum_required(VERSION 2.8) +if(NOT BIICODE) + project(nana) + cmake_minimum_required(VERSION 2.8) +else() + set(LIB_SRC ${BII_LIB_SRC}) + + foreach(cpp ${BII_LIB_SRC}) + if(${cpp} MATCHES "(include/nana|source)/detail/[A-Za-z0-9_]+/.+$") + list(APPEND trash_files ${cpp}) + endif() + endforeach() + list(REMOVE_ITEM BII_LIB_SRC ${trash_files}) +endif() #Select platform automatically if(WIN32) @@ -21,12 +33,21 @@ if(WIN32) add_definitions(-DSTD_THREAD_NOT_SUPPORTED) endif() endif() + + if(BIICODE) + file(GLOB_RECURSE platform_files "*/detail/win32/*") + list(APPEND BII_LIB_SRC ${platform_files}) + endif() endif() if(UNIX) add_definitions(-DNANA_LINUX) add_definitions(-DNANA_X11) add_definitions(-DPLATFORM_SPEC_HPP=) add_definitions(-DSTD_CODECVT_NOT_SUPPORTED) + if(BIICODE) + file(GLOB_RECURSE platform_files "*/detail/linux_X11/*") + list(APPEND BII_LIB_SRC ${platform_files}) + endif() endif() @@ -55,73 +76,77 @@ if(NANA_UNICODE) endif() -#Find PNG -if(UNIX) - find_package(Freetype) - if (FREETYPE_FOUND) - include_directories( ${FREETYPE_INCLUDE_DIRS}) - endif() +if(NOT BIICODE) + #Find PNG + if(UNIX) + find_package(Freetype) + if (FREETYPE_FOUND) + include_directories( ${FREETYPE_INCLUDE_DIRS}) + endif() + endif() + + option(NANA_ENABLE_PNG "Enable the use of PNG" ON) + if(NANA_ENABLE_PNG) + add_definitions(-DNANA_ENABLE_PNG) + + option(NANA_LIBPNG "Use the included libpng" ON) + if(NANA_LIBPNG) + add_definitions(-DNANA_LIBPNG) + else() + find_package(PNG) + if (PNG_FOUND) + include_directories( ${PNG_INCLUDE_DIRS}) + endif() + endif() + endif() +else() + add_definitions(-DNANA_LIBPNG) + add_definitions(-DNANA_ENABLE_PNG) endif() -option(NANA_ENABLE_PNG "Enable the use of PNG" ON) -if(NANA_ENABLE_PNG) - add_definitions(-DNANA_ENABLE_PNG) - - option(NANA_LIBPNG "Use the included libpng" ON) - if(NANA_LIBPNG) - add_definitions(-DNANA_LIBPNG) - else() - find_package(PNG) - if (PNG_FOUND) - include_directories( ${PNG_INCLUDE_DIRS}) - endif() - endif() -endif() - - - #Copy our new config.hpp (with removed defines) -execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_SOURCE_DIR}/build/cmake/config.hpp ${CMAKE_SOURCE_DIR}/include/nana/) - - -set(NANA_SOURCE_DIR ${CMAKE_SOURCE_DIR}/source) -set(NANA_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/include) - +execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/build/cmake/config.hpp ${CMAKE_CURRENT_SOURCE_DIR}/include/nana/) + if(CMAKE_COMPILER_IS_GNUCXX) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall") endif(CMAKE_COMPILER_IS_GNUCXX) -include_directories(${NANA_INCLUDE_DIR}) -aux_source_directory(${NANA_SOURCE_DIR} NANA_SOURCE) -aux_source_directory(${NANA_SOURCE_DIR}/detail NANA_DETAIL_SOURCE) -aux_source_directory(${NANA_SOURCE_DIR}/filesystem NANA_FILESYSTEM_SOURCE) -aux_source_directory(${NANA_SOURCE_DIR}/audio NANA_AUDIO_SOURCE) -aux_source_directory(${NANA_SOURCE_DIR}/audio/detail NANA_AUDIO_DETAIL_SOURCE) -aux_source_directory(${NANA_SOURCE_DIR}/gui NANA_GUI_SOURCE) -aux_source_directory(${NANA_SOURCE_DIR}/gui/detail NANA_GUI_DETAIL_SOURCE) -aux_source_directory(${NANA_SOURCE_DIR}/gui/widgets NANA_GUI_WIDGETS_SOURCE) -aux_source_directory(${NANA_SOURCE_DIR}/gui/widgets/skeletons NANA_GUI_WIDGETS_SKELETONS_SOURCE) -aux_source_directory(${NANA_SOURCE_DIR}/paint NANA_PAINT_SOURCE) -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) +if(BIICODE) + add_biicode_targets() +else() + set(NANA_SOURCE_DIR ${CMAKE_SOURCE_DIR}/source) + set(NANA_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/include) -add_library(${PROJECT_NAME} ${NANA_SOURCE} - ${NANA_DETAIL_SOURCE} - ${NANA_FILESYSTEM_SOURCE} - ${NANA_AUDIO_SOURCE} - ${NANA_AUDIO_DETAIL_SOURCE} - ${NANA_GUI_SOURCE} - ${NANA_GUI_DETAIL_SOURCE} - ${NANA_GUI_WIDGETS_SOURCE} - ${NANA_GUI_WIDGETS_SKELETONS_SOURCE} - ${NANA_PAINT_SOURCE} - ${NANA_PAINT_DETAIL_SOURCE} - ${NANA_SYSTEM_SOURCE} - ${NANA_THREADS_SOURCE}) + include_directories(${NANA_INCLUDE_DIR}) + aux_source_directory(${NANA_SOURCE_DIR} NANA_SOURCE) + aux_source_directory(${NANA_SOURCE_DIR}/detail NANA_DETAIL_SOURCE) + aux_source_directory(${NANA_SOURCE_DIR}/filesystem NANA_FILESYSTEM_SOURCE) + aux_source_directory(${NANA_SOURCE_DIR}/audio NANA_AUDIO_SOURCE) + aux_source_directory(${NANA_SOURCE_DIR}/audio/detail NANA_AUDIO_DETAIL_SOURCE) + aux_source_directory(${NANA_SOURCE_DIR}/gui NANA_GUI_SOURCE) + aux_source_directory(${NANA_SOURCE_DIR}/gui/detail NANA_GUI_DETAIL_SOURCE) + aux_source_directory(${NANA_SOURCE_DIR}/gui/widgets NANA_GUI_WIDGETS_SOURCE) + aux_source_directory(${NANA_SOURCE_DIR}/gui/widgets/skeletons NANA_GUI_WIDGETS_SKELETONS_SOURCE) + aux_source_directory(${NANA_SOURCE_DIR}/paint NANA_PAINT_SOURCE) + 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) - -install(TARGETS ${PROJECT_NAME} - ARCHIVE DESTINATION lib - LIBRARY DESTINATION lib) -install(DIRECTORY ${NANA_INCLUDE_DIR}/nana DESTINATION include) \ No newline at end of file + add_library(${PROJECT_NAME} ${NANA_SOURCE} + ${NANA_DETAIL_SOURCE} + ${NANA_FILESYSTEM_SOURCE} + ${NANA_AUDIO_SOURCE} + ${NANA_AUDIO_DETAIL_SOURCE} + ${NANA_GUI_SOURCE} + ${NANA_GUI_DETAIL_SOURCE} + ${NANA_GUI_WIDGETS_SOURCE} + ${NANA_GUI_WIDGETS_SKELETONS_SOURCE} + ${NANA_PAINT_SOURCE} + ${NANA_PAINT_DETAIL_SOURCE} + ${NANA_SYSTEM_SOURCE} + ${NANA_THREADS_SOURCE}) + install(TARGETS ${PROJECT_NAME} + ARCHIVE DESTINATION lib + LIBRARY DESTINATION lib) + install(DIRECTORY ${NANA_INCLUDE_DIR}/nana DESTINATION include) +endif() \ No newline at end of file diff --git a/README.md b/README.md index 3546c151..9f85c35f 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ # Nana C++ Library +[![Build Status](https://webapi.biicode.com/v1/badges/qiangwu/qiangwu/nana/master)](https://www.biicode.com/qiangwu/nana) Nana is a C++ library designed to allow developers to easily create cross-platform GUI applications with modern C++11 style, currently it can work on Linux(X11) and Windows. The nana repository contains the entire source of library, you can browse the source code and submit your pull request for contributing. diff --git a/bii/layout.bii b/bii/layout.bii new file mode 100644 index 00000000..31e284d2 --- /dev/null +++ b/bii/layout.bii @@ -0,0 +1,12 @@ + # Minimal layout, with all auxiliary folders inside "bii" and +# The binary "bin" folder as is, and enabled code edition in the project root +cmake: bii/cmake +lib: bii/lib +build: bii/build + +deps: bii/deps +# Setting this to True enables directly editing in the project root +# instead of blocks/youruser/yourblock +# the block will be named as your project folder +auto-root-block: True +root-block: qiangwu/nana \ No newline at end of file diff --git a/bii/policies.bii b/bii/policies.bii new file mode 100644 index 00000000..d6d5e86e --- /dev/null +++ b/bii/policies.bii @@ -0,0 +1,11 @@ +# This file configures your finds of dependencies. +# +# It is an ordered list of rules, which will be evaluated in order, of the form: +# block_pattern: TAG +# +# For each possible block that could resolve your dependencies, +# only versions with tag >= TAG will be accepted + +qiangwu/* : DEV +* : STABLE + diff --git a/bii/settings.bii b/bii/settings.bii new file mode 100644 index 00000000..fa648ede --- /dev/null +++ b/bii/settings.bii @@ -0,0 +1,2 @@ +cmake: {generator: MinGW Makefiles} +os: {arch: 32bit, family: Windows, subfamily: '7', version: 6.1.7601} diff --git a/biicode.conf b/biicode.conf new file mode 100644 index 00000000..a29a8779 --- /dev/null +++ b/biicode.conf @@ -0,0 +1,49 @@ +# Biicode configuration file + +[requirements] + # Blocks and versions this block depends on e.g. + # user/depblock1: 3 + # user2/depblock2(track) @tag + +[parent] + # The parent version of this block. Must match folder name. E.g. + # user/block # No version number means not published yet + # You can change it to publish to a different track, and change version, e.g. + # user/block(track): 7 + qiangwu/nana: 0 + +[paths] + # Local directories to look for headers (within block) + # / + include + +[dependencies] + # Manual adjust file implicit dependencies, add (+), remove (-), or overwrite (=) + # hello.h + hello_imp.cpp hello_imp2.cpp + # *.h + *.cpp + include/nana/config.hpp + build/cmake/config.hpp + +[mains] + # Manual adjust of files that define an executable + # !main.cpp # Do not build executable from this file + # main2.cpp # Build it (it doesnt have a main() function, but maybe it includes it) + +[tests] + # Manual adjust of files that define a CTest test + # test/* pattern to evaluate this test/ folder sources like tests + +[hooks] + # These are defined equal to [dependencies],files names matching bii*stage*hook.py + # will be launched as python scripts at stage = {post_process, clean} + # CMakeLists.txt + bii/my_post_process1_hook.py bii_clean_hook.py + +[includes] + # Mapping of include patterns to external blocks + # hello*.h: user3/depblock # includes will be processed as user3/depblock/hello*.h + +[data] + # Manually define data files dependencies, that will be copied to bin for execution + # By default they are copied to bin/user/block/... which should be taken into account + # when loading from disk such data + # image.cpp + image.jpg # code should write open("user/block/image.jpg") + diff --git a/include/nana/deploy.hpp b/include/nana/deploy.hpp index 0862a7a3..f13f5b94 100644 --- a/include/nana/deploy.hpp +++ b/include/nana/deploy.hpp @@ -15,6 +15,8 @@ #ifndef NANA_DEPLOY_HPP #define NANA_DEPLOY_HPP +#include + #include #include #if defined(NANA_LINUX) @@ -22,7 +24,7 @@ #endif //Implement workarounds for MinGW -#if defined(NANA_MINGW) +#if defined(NANA_MINGW) && __GNUC_MINOR__ < 8 namespace std { //Workaround for no implemenation of std::stoi in MinGW. diff --git a/include/nana/std_thread.hpp b/include/nana/std_thread.hpp index d6d88b18..572193ac 100644 --- a/include/nana/std_thread.hpp +++ b/include/nana/std_thread.hpp @@ -2,7 +2,7 @@ #define NANA_STD_THREAD_HPP #include -#if defined(NANA_MINGW) +#if defined(STD_THREAD_NOT_SUPPORTED) #include namespace std { diff --git a/source/deploy.cpp b/source/deploy.cpp index b2d053f4..b251b5db 100644 --- a/source/deploy.cpp +++ b/source/deploy.cpp @@ -23,7 +23,7 @@ #include PLATFORM_SPEC_HPP #endif -#if defined(NANA_MINGW) +#if defined(NANA_MINGW) && __GNUC_MINOR__ < 8 #include namespace std { diff --git a/source/detail/platform_spec_selector.cpp b/source/detail/platform_spec_selector.cpp index 1bf8a3c5..585646ab 100644 --- a/source/detail/platform_spec_selector.cpp +++ b/source/detail/platform_spec_selector.cpp @@ -19,5 +19,4 @@ #include "win32/platform_spec.cpp" #elif defined(NANA_LINUX) #include "linux_X11/platform_spec.cpp" -#endif - +#endif \ No newline at end of file