diff --git a/.gitignore b/.gitignore index ff2a3af0..c3cd3cfa 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ Thumbs.db #Ignore files build by Visual Studio bii/build/* bii/cmake/* +bii/deps/* *.obj *.exe *.pdb diff --git a/CMakeLists.txt b/CMakeLists.txt index 72cda278..dc814f45 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,21 +4,48 @@ # Robert Hauck - Enable support for PNG/Freetype # Qiangqiang Wu - Add biicode support -if(NOT BIICODE) - project(nana) - cmake_minimum_required(VERSION 2.8) -else() +if(BIICODE) + # prepare BII_LIB_SRC set(LIB_SRC ${BII_LIB_SRC}) - + foreach(cpp ${BII_LIB_SRC}) - if(${cpp} MATCHES "(include/nana|source)/detail/[A-Za-z0-9_]+/.+$") + if(${cpp} MATCHES "/detail/(win32|linux_X11)/.+$") list(APPEND trash_files ${cpp}) endif() endforeach() list(REMOVE_ITEM BII_LIB_SRC ${trash_files}) + + if(WIN32) + file(GLOB_RECURSE platform_files "*/detail/win32/*") + list(APPEND BII_LIB_SRC ${platform_files}) + elseif(UNIX) + file(GLOB_RECURSE platform_files "*/detail/linux_X11/*") + list(APPEND BII_LIB_SRC ${platform_files}) + else() + message(FATAL_ERROR "Only Windows and Unix are supported for the moment") + endif() + + # set compile flags + if(CMAKE_COMPILER_IS_GNUCXX) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall") + endif(CMAKE_COMPILER_IS_GNUCXX) + + # we'll use the default config file so we can iliminate the following macro definitions + if(MSVC) + # More MSVC specific compilation flags + add_definitions(-D_SCL_SECURE_NO_WARNINGS) + add_definitions(-D_CRT_SECURE_NO_DEPRECATE) + endif() + + add_biicode_targets() + + return() endif() +project(nana) +cmake_minimum_required(VERSION 2.8) + #Select platform automatically if(WIN32) add_definitions(-DNANA_WINDOWS) @@ -33,21 +60,12 @@ 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() @@ -75,78 +93,71 @@ if(NANA_UNICODE) endif() endif() - -if(NOT BIICODE) - #Find PNG - if(UNIX) - find_package(Freetype) - if (FREETYPE_FOUND) - include_directories( ${FREETYPE_INCLUDE_DIRS}) - endif() +#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) +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_CURRENT_SOURCE_DIR}/build/cmake/config.hpp ${CMAKE_CURRENT_SOURCE_DIR}/include/nana/) +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) -if(BIICODE) - add_biicode_targets() -else() - set(NANA_SOURCE_DIR ${CMAKE_SOURCE_DIR}/source) - set(NANA_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/include) +set(NANA_SOURCE_DIR ${CMAKE_SOURCE_DIR}/source) +set(NANA_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/include) - 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) +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) - 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 +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) \ No newline at end of file diff --git a/README.md b/README.md index 9f85c35f..0b034cf6 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,21 @@ Nana is licensed under the [Boost Software License]. [Boost Software License]: http://www.boost.org/LICENSE_1_0.txt +## Biicode +Nana is available in biicode, download biicode and try the nana example: + +``` +> mkdir try-nana +> cd try-nana +> bii init +> bii open qiangwu/nana-example +> bii find +> bii build +> cd bin +``` + +Run it! All dependencies will be resovled automatically by biicode! Amazing, isn't it? + ## Support The best way to get help with Nana library is by visiting http://nanapro.org/help.htm diff --git a/biicode.conf b/biicode.conf index a29a8779..872c1375 100644 --- a/biicode.conf +++ b/biicode.conf @@ -1,9 +1,7 @@ # Biicode configuration file [requirements] - # Blocks and versions this block depends on e.g. - # user/depblock1: 3 - # user2/depblock2(track) @tag + glenn/png: 6 [parent] # The parent version of this block. Must match folder name. E.g. @@ -21,7 +19,8 @@ # 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 + include/nana/config.hpp + include/* + include/nana/config.hpp + source/* [mains] # Manual adjust of files that define an executable @@ -40,6 +39,7 @@ [includes] # Mapping of include patterns to external blocks # hello*.h: user3/depblock # includes will be processed as user3/depblock/hello*.h + png.h: glenn/png [data] # Manually define data files dependencies, that will be copied to bin for execution diff --git a/include/nana/config.hpp b/include/nana/config.hpp index 418871f1..9462f04c 100644 --- a/include/nana/config.hpp +++ b/include/nana/config.hpp @@ -31,10 +31,11 @@ #define NANA_X11 1 #define PLATFORM_SPEC_HPP #define STD_CODECVT_NOT_SUPPORTED +#else +# static_assert(false, "Only Windows and Unix are support now"); #endif //Here defines some flags that tell Nana what features will be supported. - #define NANA_UNICODE #if defined(NANA_UNICODE) && defined(NANA_WINDOWS)