Added CMake Install.

This commit is contained in:
Maurice Grönwoldt 2023-09-02 14:17:56 +02:00
parent 5c8c4e86b2
commit 4367534a33
13 changed files with 68 additions and 18 deletions

1
.gitignore vendored
View file

@ -7,3 +7,4 @@ cmake-build-debug/
.idea/ .idea/
example/build example/build
dist/

View file

@ -1,5 +1,8 @@
cmake_minimum_required(VERSION 3.21) cmake_minimum_required(VERSION 3.21)
project(VWeb) set(version 1.0)
project(VWeb VERSION ${version})
set(project_lower vweb)
set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DDEBUGSOFT") set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DDEBUGSOFT")
@ -22,9 +25,29 @@ set(SOURCE_FILES
include_directories(${CMAKE_SOURCE_DIR}/) include_directories(${CMAKE_SOURCE_DIR}/)
add_library(VWeb ${SOURCE_FILES}) add_library(VWeb ${SOURCE_FILES})
set(mode Release) include(GNUInstallDirs)
if (CMAKE_BUILD_TYPE STREQUAL "Debug") set(config_install_dir "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}")
set(mode Debug) set(generated_dir "${CMAKE_CURRENT_BINARY_DIR}/generated")
endif () set(version_config "${generated_dir}/${PROJECT_NAME}ConfigVersion.cmake")
set(target_file ${CMAKE_SOURCE_DIR}/dist/libVWeb.${mode}.a) set(project_config "${generated_dir}/${PROJECT_NAME}Config.cmake")
add_custom_command(TARGET VWeb POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:VWeb> ${target_file})
install(FILES VWeb.h DESTINATION include/VWeb-${version})
install(TARGETS ${PROJECT_NAME}
EXPORT ${PROJECT_NAME}-targets
LIBRARY DESTINATION lib/$<CONFIG>
ARCHIVE DESTINATION lib/$<CONFIG>
)
install(EXPORT ${PROJECT_NAME}-targets
DESTINATION lib/${PROJECT_NAME}-${version})
configure_file(
${PROJECT_SOURCE_DIR}/pkg/${project_lower}-config.cmake.in
${PROJECT_BINARY_DIR}/pkg/${project_lower}-config.cmake @ONLY)
configure_file(
${PROJECT_SOURCE_DIR}/${project_lower}-config-version.cmake.in
${PROJECT_BINARY_DIR}/${project_lower}-config-version.cmake @ONLY)
install(FILES ${PROJECT_BINARY_DIR}/pkg/${project_lower}-config.cmake
${PROJECT_BINARY_DIR}/${project_lower}-config-version.cmake
DESTINATION lib/${PROJECT_NAME}-${version})

View file

@ -30,6 +30,6 @@ bool EPollManager::UpdateEvents(int sock, uint32_t eventType) const {
} }
int EPollManager::Wait(int maxEvents, epoll_event *events) const { int EPollManager::Wait(int maxEvents, epoll_event *events) const {
return epoll_wait(m_EpollID, events, maxEvents, 10); return epoll_wait(m_EpollID, events, maxEvents, -1);
} }
} // namespace VWeb } // namespace VWeb

View file

@ -45,8 +45,8 @@ SessionManager::SessionManager() {
m_Counter = -1; m_Counter = -1;
} }
m_Counter++; m_Counter++;
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
} }
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
}); });
} }
SessionManager::~SessionManager() { SessionManager::~SessionManager() {
@ -106,7 +106,7 @@ PreMiddleWareReturn CookieManager::PreHandle(Request &request) {
auto &cookies = request.CookieData; auto &cookies = request.CookieData;
if (cookieHeaders.Size() > 0) { if (cookieHeaders.Size() > 0) {
auto &values = cookieHeaders.Values(); auto &values = cookieHeaders.Values();
for (auto &rawCookie : cookieHeaders.Values()) { for (auto &rawCookie : values) {
auto splitCookies = String::Split(rawCookie, ";"); auto splitCookies = String::Split(rawCookie, ";");
for (auto &cookie : splitCookies) { for (auto &cookie : splitCookies) {
auto split = String::Split(cookie, "="); auto split = String::Split(cookie, "=");

View file

@ -8,7 +8,7 @@ Server::Server() {
m_ServerConfig->EPoll = CreateRef<EPollManager>(); m_ServerConfig->EPoll = CreateRef<EPollManager>();
m_ServerConfig->Socket = CreateRef<SocketManager>(m_ServerConfig); m_ServerConfig->Socket = CreateRef<SocketManager>(m_ServerConfig);
m_RequestHandler = CreateRef<RequestHandler>(m_ServerConfig->Socket); m_RequestHandler = CreateRef<RequestHandler>(m_ServerConfig->Socket);
auto& middleWare = m_RequestHandler->Middleware(); auto &middleWare = m_RequestHandler->Middleware();
middleWare->Create<CookieManager>(); middleWare->Create<CookieManager>();
middleWare->Create<SessionManager>(); middleWare->Create<SessionManager>();
middleWare->Create<AuthWare>(); middleWare->Create<AuthWare>();

View file

@ -1,8 +1,9 @@
#include <VWeb.h> #include <VWeb.h>
#include <thread> #include <thread>
#include <utility>
namespace VWeb { namespace VWeb {
ThreadPool::ThreadPool(const std::string &name) : m_Name(name) {} ThreadPool::ThreadPool(std::string name) : m_Name(std::move(name)) {}
void ThreadPool::Create() { void ThreadPool::Create() {
if (m_IsCreated) if (m_IsCreated)
return; return;
@ -10,9 +11,10 @@ void ThreadPool::Create() {
m_IsCreated = true; m_IsCreated = true;
m_Queue.Open(); m_Queue.Open();
for (int i = 0; i < m_ThreadCount; ++i) { for (int i = 0; i < m_ThreadCount; ++i) {
m_Threads.push_back(std::thread(&ThreadPool::Execute, this)); m_Threads.emplace_back(&ThreadPool::Execute, this);
}; }
printf("[ThreadPool] >> Created %d Threads for Pool \"%s\"\n", m_ThreadCount, m_Name.c_str()); printf("[ThreadPool] >> Created %d Threads for Pool \"%s\"\n", m_ThreadCount,
m_Name.c_str());
} }
void ThreadPool::Stop() { void ThreadPool::Stop() {
m_IsDone = true; m_IsDone = true;

2
VWeb.h
View file

@ -164,7 +164,7 @@ struct WorkerJob {
}; };
class ThreadPool { class ThreadPool {
public: public:
explicit ThreadPool(const std::string &name); explicit ThreadPool(std::string name);
void SetThreadCount(int); void SetThreadCount(int);
void Dispatch(const Ref<WorkerJob> &); void Dispatch(const Ref<WorkerJob> &);
void Create(); void Create();

BIN
dist/libVWeb.Debug.a vendored

Binary file not shown.

BIN
dist/libVWeb.Release.a vendored

Binary file not shown.

View file

@ -7,9 +7,15 @@ add_executable(VWeb_Example main.cpp)
include_directories(${CMAKE_SOURCE_DIR}/..) include_directories(${CMAKE_SOURCE_DIR}/..)
set(mode release) set(mode Release)
if (CMAKE_BUILD_TYPE STREQUAL "Debug") if (CMAKE_BUILD_TYPE STREQUAL "Debug")
set(mode debug) set(mode Debug)
endif () endif ()
set(vweb_lib ${CMAKE_SOURCE_DIR}/../dist/libVWeb.${mode}.a) set(vweb_lib ${CMAKE_SOURCE_DIR}/../dist/libVWeb.${mode}.a)
SET_SOURCE_FILES_PROPERTIES(
main.cpp
PROPERTIES OBJECT_DEPENDS ${vweb_lib}
)
target_link_libraries(VWeb_Example Threads::Threads ${vweb_lib}) target_link_libraries(VWeb_Example Threads::Threads ${vweb_lib})

View file

@ -23,6 +23,8 @@ int main() {
using namespace VWeb; using namespace VWeb;
VWeb::Server server; VWeb::Server server;
auto& router = server.GetRouter(); auto& router = server.GetRouter();
// For debugging and profiling more than 1 thread can be hard.
server.GetServerConfig()->WorkerThreads = 1;
router->Get("/test", [](const Request&, Response& response) { router->Get("/test", [](const Request&, Response& response) {
response << "NICE"; response << "NICE";
return true; return true;

9
pkg/vweb-config.cmake.in Normal file
View file

@ -0,0 +1,9 @@
# Compute installation prefix relative to this file.
get_filename_component(_dir "${CMAKE_CURRENT_LIST_FILE}" PATH)
get_filename_component(_prefix "${_dir}/../.." ABSOLUTE)
# Import the targets.
include("${_prefix}/lib/VWeb-@version@/VWeb-targets.cmake")
# Report other information.
set(VWeb_INCLUDE_DIRS "${_prefix}/include/VWeb-@version@")

View file

@ -0,0 +1,7 @@
set(PACKAGE_VERSION "@version@")
if(NOT "${PACKAGE_FIND_VERSION}" VERSION_GREATER "@version@")
set(PACKAGE_VERSION_COMPATIBLE 1) # compatible with older
if("${PACKAGE_FIND_VERSION}" VERSION_EQUAL "@version@")
set(PACKAGE_VERSION_EXACT 1) # exact match for this version
endif()
endif()