Skip to content

Commit

Permalink
Reorganization (sync with Cefeika)
Browse files Browse the repository at this point in the history
  • Loading branch information
dmitigr committed Mar 6, 2020
1 parent 36b4a70 commit 22e85d4
Show file tree
Hide file tree
Showing 100 changed files with 1,738 additions and 1,491 deletions.
2 changes: 1 addition & 1 deletion .gitattributes
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
* text eol=lf
lib/dmitigr/mulf/test/mulf-form-data*.txt text eol=crlf
test/mulf/mulf-form-data*.txt text eol=crlf
doc/fcgi/dmitigr_fcgi_overview.violet.html binary
doc/pgfe/dmitigr_pgfe_overview.violet.html binary
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ cmake-build-*
dll.hpp
implementation_footer.hpp
implementation_header.hpp
version.cpp
version.hpp
version.rc
lib/dmitigr/pgfe/defaults.hpp
Expand Down
76 changes: 53 additions & 23 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,16 @@ include(dmitigr_cefeika)
# Build options
# ------------------------------------------------------------------------------

option(BUILD_SHARED_LIBS "Build shared libraries?" ON)
option(DMITIGR_CEFEIKA_HEADER_ONLY "Header-only?" OFF)
option(DMITIGR_CEFEIKA_BUILD_TESTS "Build tests?" OFF)
option(DMITIGR_LIBRARIAN_DEBUG "Print librarian.cmake debug output?" OFF)
set(CMAKE_VERBOSE_MAKEFILE FALSE CACHE BOOL
"Verbose output upon build?")
set(BUILD_SHARED_LIBS TRUE CACHE BOOL
"Build shared libraries?")
set(DMITIGR_CEFEIKA_HEADER_ONLY FALSE CACHE BOOL
"Header-only?")
set(DMITIGR_CEFEIKA_BUILD_TESTS FALSE CACHE BOOL
"Build tests?")
set(DMITIGR_LIBRARIAN_DEBUG FALSE CACHE BOOL
"Print librarian.cmake debug output?")

if(NOT DMITIGR_CEFEIKA_HEADER_ONLY)
if(BUILD_SHARED_LIBS)
Expand Down Expand Up @@ -71,6 +77,20 @@ elseif(WIN32)
STRING "Name of the installation directory for the includes relative to ${CMAKE_INSTALL_PREFIX}")
endif()

# ------------------------------------------------------------------------------
# Global variables (constants)
# ------------------------------------------------------------------------------

if(NOT DMITIGR_CEFEIKA_HEADER_ONLY)
if(BUILD_SHARED_LIBS)
set(export_file_suffix "shared")
else()
set(export_file_suffix "static")
endif()
else() # header-only
set(export_file_suffix "interface")
endif()

# ------------------------------------------------------------------------------
# Languages
# ------------------------------------------------------------------------------
Expand All @@ -83,8 +103,24 @@ set(CXX_STANDARD_REQUIRED ON)
# Include directories
# ------------------------------------------------------------------------------

include_directories(BEFORE ${CMAKE_CURRENT_SOURCE_DIR}/lib)
include_directories(BEFORE ${CMAKE_CURRENT_BINARY_DIR}/lib)
include_directories(BEFORE
${CMAKE_CURRENT_SOURCE_DIR}/lib
${CMAKE_CURRENT_BINARY_DIR}/lib
)

# ------------------------------------------------------------------------------
# Third-party dependencies
# ------------------------------------------------------------------------------

if ("rajson" IN_LIST dmitigr_cefeika_libraries)
add_subdirectory(thirdparty/rapidjson)
endif()

if ("ws" IN_LIST dmitigr_cefeika_libraries)
add_subdirectory(thirdparty/uv)
add_subdirectory(thirdparty/usockets)
add_subdirectory(thirdparty/uwebsockets)
endif()

# ------------------------------------------------------------------------------
# Output settings
Expand Down Expand Up @@ -139,7 +175,7 @@ foreach(lib ${dmitigr_cefeika_libraries})
dmitigr_set_library_info_lib_variables(${lib})

foreach(file dll.hpp implementation_footer.hpp
implementation_header.hpp version.hpp version.rc)
implementation_header.hpp version.hpp version.cpp version.rc)
configure_file(lib/dmitigr/${file}.in
${CMAKE_CURRENT_SOURCE_DIR}/lib/dmitigr/${lib}/${file} @ONLY
NEWLINE_STYLE UNIX)
Expand All @@ -159,6 +195,7 @@ foreach(lib ${dmitigr_cefeika_libraries})

list(APPEND dmitigr_${lib}_preprocessed_headers
dll.hpp implementation_footer.hpp implementation_header.hpp version.hpp)
list(APPEND dmitigr_${lib}_implementations version.cpp)
if (WIN32)
list(APPEND dmitigr_${lib}_build_only_sources version.rc)
endif()
Expand Down Expand Up @@ -270,16 +307,6 @@ foreach(lib ${dmitigr_cefeika_libraries})
DESTINATION ${DMITIGR_CEFEIKA_INCLUDE_INSTALL_DIR}/dmitigr)
endif()

if(NOT DMITIGR_CEFEIKA_HEADER_ONLY)
if(BUILD_SHARED_LIBS)
set(export_file_suffix "shared")
else()
set(export_file_suffix "static")
endif()
else() # header-only
set(export_file_suffix "interface")
endif()

install(EXPORT dmitigr_${lib}_export
NAMESPACE dmitigr::
DESTINATION ${DMITIGR_CEFEIKA_CMAKE_INSTALL_DIR}
Expand All @@ -299,7 +326,7 @@ foreach(lib ${dmitigr_cefeika_libraries})
endforeach()

# ------------------------------------------------------------------------------
# Testing
# Tests
# ------------------------------------------------------------------------------

if(DMITIGR_CEFEIKA_BUILD_TESTS)
Expand All @@ -308,14 +335,14 @@ if(DMITIGR_CEFEIKA_BUILD_TESTS)

function(dmitigr_configure_test lib test)
set(full_name "${lib}-${test}")
if(NOT EXISTS "${CMAKE_SOURCE_DIR}/lib/dmitigr/${lib}/test/${full_name}.cpp")
if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/test/${lib}/${full_name}.cpp")
set(is_unit_test TRUE)
set(full_name "${lib}-unit-${test}")
else()
set(is_unit_test FALSE)
endif()
set(exe "${full_name}")
set(src "${CMAKE_SOURCE_DIR}/lib/dmitigr/${lib}/test/${full_name}.cpp")
set(src "${CMAKE_CURRENT_SOURCE_DIR}/test/${lib}/${full_name}.cpp")
add_executable(${exe} ${src})
target_link_libraries(${exe} PRIVATE dmitigr::util dmitigr::${lib} ${dmitigr_${lib}_tests_target_link_libraries})
dmitigr_target_compile_options(${exe})
Expand All @@ -325,8 +352,11 @@ if(DMITIGR_CEFEIKA_BUILD_TESTS)
endfunction()

foreach(lib ${dmitigr_cefeika_libraries})
foreach(test ${dmitigr_${lib}_tests})
dmitigr_configure_test(${lib} ${test})
endforeach()
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/test/${lib}")
add_subdirectory(test/${lib})
foreach(test ${dmitigr_${lib}_tests})
dmitigr_configure_test(${lib} ${test})
endforeach()
endif()
endforeach()
endif()
9 changes: 7 additions & 2 deletions cmake/dmitigr.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,8 @@ macro(dmitigr_set_library_info lib version_major version_minor description)
set(dmitigr_${lib}_product_name "Dmitigr ${dmitigr_${lib}_Name}")
endmacro()

# ------------------------------------------------------------------------------

macro(dmitigr_propagate_library_settings lib)
set(dmitigr_${lib}_name ${dmitigr_${lib}_name} PARENT_SCOPE)
set(dmitigr_${lib}_NAME ${dmitigr_${lib}_NAME} PARENT_SCOPE)
Expand All @@ -105,14 +107,17 @@ macro(dmitigr_propagate_library_settings lib)
set(dmitigr_${lib}_${st} ${dmitigr_${lib}_${st}} PARENT_SCOPE)
endforeach()

set(dmitigr_${lib}_tests ${dmitigr_${lib}_tests} PARENT_SCOPE)

foreach(suff public private interface)
set(dmitigr_${lib}_target_link_libraries_${suff} ${dmitigr_${lib}_target_link_libraries_${suff}} PARENT_SCOPE)
set(dmitigr_${lib}_target_compile_definitions_${suff} ${dmitigr_${lib}_target_compile_definitions_${suff}} PARENT_SCOPE)
set(dmitigr_${lib}_target_include_directories_${suff} ${dmitigr_${lib}_target_include_directories_${suff}} PARENT_SCOPE)
endforeach()
endmacro()

# ------------------------------------------------------------------------------

macro(dmitigr_propagate_tests_settings lib)
set(dmitigr_${lib}_tests ${dmitigr_${lib}_tests} PARENT_SCOPE)
set(dmitigr_${lib}_tests_target_link_libraries ${dmitigr_${lib}_tests_target_link_libraries} PARENT_SCOPE)
endmacro()

Expand Down
17 changes: 16 additions & 1 deletion cmake/dmitigr_cefeika.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,23 @@
# For conditions of distribution and use, see file LICENSE.txt

set(dmitigr_cefeika_libraries
# Abstraction level 1
util
# Abstraction level 2
fs
mem
os
str
# Abstraction level 3
net
# Abstraction level 4
pgfe
)

set(dmitigr_cefeika_pgfe_deps util)
set(dmitigr_cefeika_util_deps)
set(dmitigr_cefeika_fs_deps util)
set(dmitigr_cefeika_mem_deps util)
set(dmitigr_cefeika_os_deps fs util)
set(dmitigr_cefeika_str_deps util)
set(dmitigr_cefeika_net_deps fs util)
set(dmitigr_cefeika_pgfe_deps mem net str util)
Empty file added doc/fs/doxyfile.specific
Empty file.
Empty file added doc/mem/doxyfile.specific
Empty file.
Empty file added doc/net/doxyfile.specific
Empty file.
Empty file added doc/os/doxyfile.specific
Empty file.
Empty file added doc/str/doxyfile.specific
Empty file.
7 changes: 7 additions & 0 deletions lib/dmitigr/fs.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
// -*- C++ -*-
// Copyright (C) Dmitry Igrishin
// For conditions of distribution and use, see files LICENSE.txt or fs.hpp

#define DMITIGR_FS_HEADER_ONLY
#define DMITIGR_FS_BUILDING
#include "dmitigr/fs.hpp"
29 changes: 29 additions & 0 deletions lib/dmitigr/fs.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
// -*- C++ -*-
// Copyright (C) 2020 Dmitry Igrishin
//
// This software is provided 'as-is', without any express or implied
// warranty. In no event will the authors be held liable for any damages
// arising from the use of this software.
//
// Permission is granted to anyone to use this software for any purpose,
// including commercial applications, and to alter it and redistribute it
// freely, subject to the following restrictions:
//
// 1. The origin of this software must not be misrepresented; you must not
// claim that you wrote the original software. If you use this software
// in a product, an acknowledgment in the product documentation would be
// appreciated but is not required.
// 2. Altered source versions must be plainly marked as such, and must not be
// misrepresented as being the original software.
// 3. This notice may not be removed or altered from any source distribution.
//
// Dmitry Igrishin
// dmitigr@gmail.com

#ifndef DMITIGR_FS_HPP
#define DMITIGR_FS_HPP

#include "dmitigr/fs/fs.hpp"
#include "dmitigr/fs/version.hpp"

#endif // DMITIGR_FS_HPP
49 changes: 49 additions & 0 deletions lib/dmitigr/fs/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# -*- cmake -*-
# Copyright (C) Dmitry Igrishin
# For conditions of distribution and use, see file LICENSE.txt

# ------------------------------------------------------------------------------
# Info
# ------------------------------------------------------------------------------

dmitigr_set_library_info(fs 0 1 "Filesystem extras")

# ------------------------------------------------------------------------------
# Sources
# ------------------------------------------------------------------------------

set(dmitigr_fs_root_headers
../fs.hpp
)

set(dmitigr_fs_headers
fs.hpp
types_fwd.hpp
)

set(dmitigr_fs_implementations
fs.cpp
)

set(dmitigr_fs_transunits
../fs.cpp
)

# ------------------------------------------------------------------------------
# Dependencies
# ------------------------------------------------------------------------------

set(dmitigr_fs_target_link_libraries_public dmitigr::util)
set(dmitigr_fs_target_link_libraries_interface dmitigr::util)

if(NOT DMITIGR_CEFEIKA_HEADER_ONLY)
dmitigr_append_cppfs(dmitigr_fs_target_link_libraries_public)
else()
dmitigr_append_cppfs(dmitigr_fs_target_link_libraries_interface)
endif()

# ------------------------------------------------------------------------------
# Variables propagation
# ------------------------------------------------------------------------------

dmitigr_propagate_library_settings(fs)
28 changes: 7 additions & 21 deletions lib/dmitigr/util/fs.cpp → lib/dmitigr/fs/fs.cpp
Original file line number Diff line number Diff line change
@@ -1,17 +1,15 @@
// -*- C++ -*-
// Copyright (C) Dmitry Igrishin
// For conditions of distribution and use, see files LICENSE.txt or util.hpp
// For conditions of distribution and use, see files LICENSE.txt or fs.hpp

#include "dmitigr/util/debug.hpp"
#include "dmitigr/util/fs.hpp"
#include "dmitigr/util/stream.hpp"
#include "dmitigr/util/implementation_header.hpp"
#include "dmitigr/fs/fs.hpp"
#include "dmitigr/fs/implementation_header.hpp"

#include <stdexcept>
#include "dmitigr/util/debug.hpp"

namespace dmitigr::fs {

DMITIGR_UTIL_INLINE std::vector<std::filesystem::path> file_paths_by_extension(const std::filesystem::path& root,
DMITIGR_FS_INLINE std::vector<std::filesystem::path> file_paths_by_extension(const std::filesystem::path& root,
const std::filesystem::path& extension,
const bool recursive, const bool include_heading)
{
Expand Down Expand Up @@ -45,7 +43,7 @@ DMITIGR_UTIL_INLINE std::vector<std::filesystem::path> file_paths_by_extension(c
return result;
}

DMITIGR_UTIL_INLINE std::optional<std::filesystem::path> parent_directory_path(const std::filesystem::path& dir)
DMITIGR_FS_INLINE std::optional<std::filesystem::path> parent_directory_path(const std::filesystem::path& dir)
{
auto path = std::filesystem::current_path();
while (true) {
Expand All @@ -58,18 +56,6 @@ DMITIGR_UTIL_INLINE std::optional<std::filesystem::path> parent_directory_path(c
}
}

DMITIGR_UTIL_INLINE std::string file_data_to_string(const std::filesystem::path& path,
const bool is_binary)
{
const std::ios_base::openmode om =
is_binary ? (std::ios_base::in | std::ios_base::binary) : std::ios_base::in;
std::ifstream stream{path, om};
if (stream)
return stream::read_to_string(stream);
else
throw std::runtime_error{"unable to open the file \"" + path.generic_string() + "\""};
}

} // namespace dmitigr::fs

#include "dmitigr/util/implementation_footer.hpp"
#include "dmitigr/fs/implementation_footer.hpp"
Loading

0 comments on commit 22e85d4

Please sign in to comment.