diff --git a/cmake/FindAllRequirements.cmake b/cmake/FindAllRequirements.cmake index 6092bc5..f37b17a 100644 --- a/cmake/FindAllRequirements.cmake +++ b/cmake/FindAllRequirements.cmake @@ -1,46 +1,3 @@ -include(ExternalProject) - -# This function is used to force a build on a dependant project at cmake configuration phase. -# -function (build_external_project target prefix url) #FOLLOWING ARGUMENTS are the CMAKE_ARGS of ExternalProject_Add - - set(trigger_build_dir ${CMAKE_BINARY_DIR}/force_${target}) - - #mktemp dir in build tree - file(MAKE_DIRECTORY ${trigger_build_dir} ${trigger_build_dir}/build) - - #generate false dependency project - set(CMAKE_LIST_CONTENT " - cmake_minimum_required(VERSION 2.8) - - include(ExternalProject) - ExternalProject_add(${target} - PREFIX ${prefix}/${target} - GIT_REPOSITORY ${url} - LIST_SEPARATOR | - CMAKE_ARGS ${ARGN} - INSTALL_COMMAND \"\" - BUILD_COMMAND \"\" - ) - - add_custom_target(trigger_${target}) - add_dependencies(trigger_${target} ${target}) - ") - - file(WRITE ${trigger_build_dir}/CMakeLists.txt "${CMAKE_LIST_CONTENT}") - - execute_process(COMMAND ${CMAKE_COMMAND} -G${CMAKE_GENERATOR} .. - WORKING_DIRECTORY ${trigger_build_dir}/build - ) - execute_process(COMMAND ${CMAKE_COMMAND} --build . - WORKING_DIRECTORY ${trigger_build_dir}/build - ) - execute_process(COMMAND ${CMAKE_COMMAND} --build . --target install - WORKING_DIRECTORY ${trigger_build_dir}/build/${prefix}/${target}/src/${target}-build - ) - -endfunction() - SET(_BOOST_COMPONENTS program_options system filesystem thread) hunter_add_package(Boost COMPONENTS ${_BOOST_COMPONENTS}) find_package(Boost CONFIG REQUIRED ${_BOOST_COMPONENTS}) @@ -51,98 +8,20 @@ find_package(nlohmann_json CONFIG REQUIRED) hunter_add_package(GTest) find_package(GMock CONFIG REQUIRED) -hunter_add_package(benchmark) -find_package(benchmark CONFIG REQUIRED) +#hunter_add_package(benchmark) +#find_package(benchmark CONFIG REQUIRED) hunter_add_package(spdlog) find_package(spdlog CONFIG REQUIRED) -hunter_add_package(range-v3) -find_package(range-v3 CONFIG REQUIRED) +#hunter_add_package(range-v3) +#find_package(range-v3 CONFIG REQUIRED) hunter_add_package(PostgreSQL) find_package(PostgreSQL REQUIRED) -set(EXTERNAL_INSTALL_LOCATION ${CMAKE_BINARY_DIR}/lib CACHE STRING "external libs root path") -set(EXTERNAL_LOCATION ${CMAKE_BINARY_DIR}/external CACHE STRING "external sources root path") -set(_HUNTER_ROOT "${Boost_DIR}/../../../") - -message("HUNTER ROOT DIRECTORY ${_HUNTER_ROOT}") -string(REPLACE ";" "|" CMAKE_PREFIX_PATH_ALT_SEP "${CMAKE_PREFIX_PATH}") - -build_external_project(project_wt wt - https://github.com/emweb/wt.git - -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} - -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} - -DCMAKE_INSTALL_PREFIX=${EXTERNAL_LOCATION} - -DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH_ALT_SEP} - -DBoost_NO_BOOST_CMAKE=TRUE - -DBoost_NO_SYSTEM_PATHS=TRUE - -DBUILD_EXAMPLES=OFF - -DINSTALL_RESOURCES=OFF - -DENABLE_SSL=OFF - -DENABLE_HARU=OFF - -DENABLE_PANGO=OFF - -DENABLE_SQLITE=OFF - -DENABLE_POSTGRES=OFF - -DENABLE_FIREBIRD=OFF - -DENABLE_MYSQL=OFF - -DENABLE_MSSQLSERVER=OFF - -DENABLE_LIBWTDBO=TRUE - -DENABLE_QT4=OFF - -DENABLE_OPENGL=OFF - -DENABLE_UNWIND=OFF - -DCONNECTOR_FCGI=OFF -) - -add_library(wt SHARED IMPORTED) -set_target_properties(wt PROPERTIES IMPORTED_LOCATION ${EXTERNAL_LOCATION}/lib/libwt.so) -add_dependencies(wt project_wt) - -add_library(wthttp SHARED IMPORTED) -set_target_properties(wthttp PROPERTIES IMPORTED_LOCATION ${EXTERNAL_LOCATION}/lib/libwthttp.so) -add_dependencies(wthttp project_wt) - -LIST(APPEND CMAKE_MODULE_PATH "${EXTERNAL_LOCATION}") - -build_external_project(project_hhdate date - https://github.com/HowardHinnant/date.git - -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} - -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} - -DCMAKE_INSTALL_PREFIX=${EXTERNAL_LOCATION} - -DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH_ALT_SEP} - -DTZ_CXX_STANDARD=14 -) - -add_library(date INTERFACE IMPORTED) -add_dependencies(date project_hhdate) - -build_external_project(project_sqlpp sqlpp - https://github.com/rbock/sqlpp11.git - -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} - -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} - -DCMAKE_INSTALL_PREFIX=${EXTERNAL_LOCATION} - -DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH_ALT_SEP} - -DENABLE_TESTS=FALSE -) - -add_library(sqlpp INTERFACE IMPORTED) -add_dependencies(sqlpp project_sqlpp) - -link_directories(${_HUNTER_ROOT}/lib GLOBAL) -link_directories(${EXTERNAL_LOCATION}/lib GLOBAL) - -find_library(wt REQUIRED) -find_library(wthttp REQUIRED) -find_library(sqlpp REQUIRED) - -build_external_project(project_sqlpp_connector sqlpp_connector - https://github.com/matthijs/sqlpp11-connector-postgresql.git - -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} - -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} - -DCMAKE_INSTALL_PREFIX=${EXTERNAL_LOCATION} - -DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH_ALT_SEP} - -DENABLE_TESTS=FALSE - -DDATE_INCLUDE_DIR=${EXTERNAL_LOCATION}/include/date - -DSQLPP11_INCLUDE_DIR=${EXTERNAL_LOCATION}/include -) +#set(MAKE_CMD "${CMAKE_CURRENT_SOURCE_DIR}/cmake/install_deps.sh") +#MESSAGE("COMMAND: ${MAKE_CMD} ${CMAKE_COMMAND} ${CMAKE_GENERATOR} ${CMAKE_CXX_COMPILER} ${CMAKE_C_COMPILER} ${CMAKE_PREFIX_PATH}") +#execute_process( +# COMMAND x-terminal-emulator -e "sudo ${MAKE_CMD} ${CMAKE_GENERATOR} ${CMAKE_COMMAND} ${CMAKE_CXX_COMPILER} ${CMAKE_C_COMPILER} ${CMAKE_PREFIX_PATH}" +# WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/external ) diff --git a/cmake/install_deps.sh b/cmake/install_deps.sh new file mode 100755 index 0000000..af54ba0 --- /dev/null +++ b/cmake/install_deps.sh @@ -0,0 +1,77 @@ +CMAKE_COMMAND=$1 +CMAKE_GENERATOR=$2 +CMAKE_CXX_COMPILER=$3 +CMAKE_C_COMPILER=$4 +CMAKE_PREFIX_PATH=$5 + +# clone all +if [ ! -d date/.git ]; then + git clone --depth=1 https://github.com/HowardHinnant/date.git +else + cd date; git pull; cd ../ +fi + +if [ ! -d sqlpp11/.git ]; then + git clone -b develop --depth=1 https://github.com/rbock/sqlpp11.git +else + cd sqlpp11; git pull; cd ../ +fi + +if [ ! -d sqlpp11-connector-postgresql/.git ]; then + git clone -b develop --depth=1 https://github.com/matthijs/sqlpp11-connector-postgresql.git +else + cd sqlpp11-connector-postgresql; git pull; cd ../ +fi + +if [ ! -d wt/.git ]; then + git clone --depth=1 https://github.com/emweb/wt.git +else + cd wt; git pull; cd ../ +fi + +# install all + +mkdir date-build; cd date-build +${CMAKE_COMMAND} -G${CMAKE_GENERATOR} ../date -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} \ + -DTZ_CXX_STANDARD=14 +${CMAKE_COMMAND} --build . --target install +cd ../ + +mkdir sqlpp11-build; cd sqlpp11-build +${CMAKE_COMMAND} -G${CMAKE_GENERATOR} ../sqlpp11 -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}\ + -DENABLE_TESTS=FALSE +${CMAKE_COMMAND} --build . --target install +cd ../ + +mkdir sqlpp11-connector-postgresql-build; cd sqlpp11-connector-postgresql-build +${CMAKE_COMMAND} -G${CMAKE_GENERATOR} ../sqlpp11-connector-postgresql -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}\ + -DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}\ + -DENABLE_TESTS=FALSE +${CMAKE_COMMAND} --build . --target install +cd ../ + +mkdir wt-build; cd wt-build +${CMAKE_COMMAND} -G${CMAKE_GENERATOR} ../wt -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} \ + -DBoost_NO_BOOST_CMAKE=TRUE\ + -DBoost_NO_SYSTEM_PATHS=TRUE\ + -DBUILD_EXAMPLES=OFF\ + -DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}\ + -DINSTALL_RESOURCES=OFF\ + -DENABLE_SSL=OFF\ + -DENABLE_HARU=OFF\ + -DENABLE_PANGO=OFF\ + -DENABLE_SQLITE=OFF\ + -DENABLE_POSTGRES=OFF\ + -DENABLE_FIREBIRD=OFF\ + -DENABLE_MYSQL=OFF\ + -DENABLE_MSSQLSERVER=OFF\ + -DENABLE_LIBWTDBO=TRUE\ + -DENABLE_QT4=OFF\ + -DENABLE_OPENGL=OFF\ + -DENABLE_UNWIND=OFF\ + -DCONNECTOR_FCGI=OFF +${CMAKE_COMMAND} --build . --target install +cd ../ + +echo "NOW WAIT" +sleep 100000 diff --git a/src/libs/db/CMakeLists.txt b/src/libs/db/CMakeLists.txt index ed77000..14054d7 100644 --- a/src/libs/db/CMakeLists.txt +++ b/src/libs/db/CMakeLists.txt @@ -1 +1,4 @@ +find_package(Sqlpp11 REQUIRED) +find_package(Sqlpp-connector-postgresql REQUIRED) + add_subdirectory(postgresql_connector) diff --git a/src/libs/db/postgresql_connector/CMakeLists.txt b/src/libs/db/postgresql_connector/CMakeLists.txt index f62b7c7..a2f76e1 100644 --- a/src/libs/db/postgresql_connector/CMakeLists.txt +++ b/src/libs/db/postgresql_connector/CMakeLists.txt @@ -14,8 +14,8 @@ target_include_directories(${LIB} PRIVATE ${PostgreSQL_INCLUDE_DIRS}) target_include_directories(${LIB} PUBLIC include) target_link_libraries(${LIB} PUBLIC nlohmann_json) -target_link_libraries(${LIB} PRIVATE eedb) -target_link_libraries(${LIB} PRIVATE sqlpp-postgresql) +target_link_libraries(${LIB} PRIVATE eedb stdc++fs) +target_link_libraries(${LIB} PRIVATE sqlpp11-connector-postgresql pq Boost::system Boost::filesystem) # add cotire set_target_properties(${LIB} PROPERTIES COTIRE_ADD_UNITY_BUILD FALSE) diff --git a/src/libs/db/postgresql_connector/include/config.hpp b/src/libs/db/postgresql_connector/include/config.hpp index ffeb9aa..dfbc133 100644 --- a/src/libs/db/postgresql_connector/include/config.hpp +++ b/src/libs/db/postgresql_connector/include/config.hpp @@ -2,6 +2,8 @@ #include +#include + namespace Wt { class WEnvironment; } // namespace Wt @@ -11,6 +13,6 @@ namespace eedb::db { class PgConfig : public sqlpp::postgresql::connection_config { public: PgConfig(); - explicit PgConfig(const Wt::WEnvironment & env); + explicit PgConfig(std::function< bool(const std::string &, std::string &) > readProperty); }; } // namespace eedb::db diff --git a/src/libs/db/postgresql_connector/src/RawSql.cpp b/src/libs/db/postgresql_connector/src/RawSql.cpp index aa3694b..5dee242 100644 --- a/src/libs/db/postgresql_connector/src/RawSql.cpp +++ b/src/libs/db/postgresql_connector/src/RawSql.cpp @@ -7,7 +7,7 @@ #include namespace eedb::db{ -void exec_file(PgConnection & db, const std::experimental::filesystem::v1::__cxx11::path & filepath) { +void exec_file(PgConnection & db, const std::experimental::filesystem::path & filepath) { std::ifstream stream(filepath); std::string filebuf{std::istreambuf_iterator< char >(stream), std::istreambuf_iterator< char >()}; diff --git a/src/libs/db/postgresql_connector/src/config.cpp b/src/libs/db/postgresql_connector/src/config.cpp index 3a1562b..c139e8c 100644 --- a/src/libs/db/postgresql_connector/src/config.cpp +++ b/src/libs/db/postgresql_connector/src/config.cpp @@ -1,8 +1,5 @@ #include "config.hpp" -#include -#include - namespace eedb::db { PgConfig::PgConfig() { @@ -14,25 +11,25 @@ PgConfig::PgConfig() { debug = true; } -PgConfig::PgConfig(const Wt::WEnvironment & env) { - auto readString = [&env](auto && name, auto & val, auto def) { - if(!env.server()->readConfigurationProperty(name, val)) { +PgConfig::PgConfig(std::function< bool(const std::string &, std::string &) > readProperty) { + auto readString = [&readProperty](auto && name, auto & val, auto def) { + if(!readProperty(name, val)) { val = def; } }; - auto readInt = [&env](auto && name, auto & val, auto def) { + auto readInt = [&readProperty](auto && name, auto & val, auto def) { std::string tmp; - if(env.server()->readConfigurationProperty(name, tmp)) { + if(readProperty(name, tmp)) { val = std::atoi(tmp.c_str()); } else { val = def; } }; - auto readBool = [&env](auto && name, auto & val, auto def) { + auto readBool = [&readProperty](auto && name, auto & val, auto def) { std::string tmp; - if(env.server()->readConfigurationProperty(name, tmp)) { + if(readProperty(name, tmp)) { val = tmp == "true"; } else { val = def; diff --git a/src/libs/widgets/CMakeLists.txt b/src/libs/widgets/CMakeLists.txt index 102d687..c313360 100644 --- a/src/libs/widgets/CMakeLists.txt +++ b/src/libs/widgets/CMakeLists.txt @@ -3,6 +3,7 @@ set(LIB widgets) file(GLOB widget_SOURCE src/*) # find packages +find_package(wt) #find_package(Wt REQUIRED) # create library