diff --git a/.gitignore b/.gitignore
index 5cf2f9a..ead7931 100644
--- a/.gitignore
+++ b/.gitignore
@@ -49,3 +49,8 @@ cmake_install.cmake
# vcpkg
vcpkg_installed/
+
+# debian packaging
+*.deb
+deb/opt
+deb/usr
\ No newline at end of file
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 744eccf..ddb8a4e 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -18,9 +18,10 @@ get_directory_property(HAS_PARENT PARENT_DIRECTORY)
if(HAS_PARENT)
message(STATUS "Configuring as a subproject.")
- set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/../out/${CMAKE_BUILD_TYPE}/bin/)
- set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/../out/${CMAKE_BUILD_TYPE}/lib/)
- set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/../out/${CMAKE_BUILD_TYPE}/lib/)
+ set(BINARY_DIR ${CMAKE_SOURCE_DIR}/../out/${CMAKE_BUILD_TYPE})
+ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${BINARY_DIR}/bin/)
+ set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${BINARY_DIR}/lib/)
+ set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${BINARY_DIR}/lib/)
set(CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/../env/)
if(DEFINED ENV{WORKSPACE})
@@ -31,9 +32,10 @@ if(HAS_PARENT)
else()
message(STATUS "Configuring as a standalone project.")
- set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/out/${CMAKE_BUILD_TYPE}/bin/)
- set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/out/${CMAKE_BUILD_TYPE}/lib/)
- set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/out/${CMAKE_BUILD_TYPE}/lib/)
+ set(BINARY_DIR ${CMAKE_SOURCE_DIR}/out/${CMAKE_BUILD_TYPE}/)
+ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${BINARY_DIR}/bin/)
+ set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${BINARY_DIR}/lib/)
+ set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${BINARY_DIR}/lib/)
endif()
#======== Find dependencies ========#
@@ -73,38 +75,58 @@ target_link_libraries(aedile PRIVATE
plog::plog
websocketpp::websocketpp
)
-target_include_directories(aedile PUBLIC ${INCLUDE_DIR})
+target_include_directories(aedile PUBLIC $)
set_target_properties(aedile PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS YES)
-#======== Build the tests ========#
-enable_testing()
-include(GoogleTest)
+file(COPY include DESTINATION ${BINARY_DIR})
-FetchContent_Declare(
- googletest
- URL https://github.com/google/googletest/archive/03597a01ee50ed33e9dfd640b249b4be3799d395.zip
-)
+#======== Install Support ========#
+# Specify the version of the project
+set_target_properties(aedile PROPERTIES VERSION ${PROJECT_VERSION})
+set_target_properties(aedile PROPERTIES SOVERSION 0)
+
+# Install the library
+install(TARGETS ${PROJECT_NAME}
+ EXPORT ${PROJECT_NAME}Targets
+ LIBRARY DESTINATION lib
+ ARCHIVE DESTINATION lib)
-set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
-FetchContent_MakeAvailable(googletest)
+# Install the headers
+install(DIRECTORY include/ DESTINATION include)
-enable_testing()
+#======== Package Support ========#
-set(TEST_DIR ./test)
-set(TEST_SOURCES
- ${TEST_DIR}/nostr_service_test.cpp
+# Create a package configuration file
+include(CMakePackageConfigHelpers)
+
+write_basic_package_version_file(
+ ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake
+ VERSION ${PROJECT_VERSION}
+ COMPATIBILITY AnyNewerVersion
)
-add_executable(aedile_test ${TEST_SOURCES} ${HEADERS})
-target_link_libraries(aedile_test PRIVATE
- GTest::gmock
- GTest::gtest
- GTest::gtest_main
- aedile
- plog::plog
- websocketpp::websocketpp
+configure_package_config_file(
+ ${CMAKE_CURRENT_SOURCE_DIR}/cmake/${PROJECT_NAME}Config.cmake.in
+ ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake
+ INSTALL_DESTINATION lib/cmake/${PROJECT_NAME}
+)
+
+# Install the package configuration files
+install(FILES
+ ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake
+ ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake
+ DESTINATION lib/cmake/${PROJECT_NAME}
)
-target_include_directories(aedile_test PUBLIC ${INCLUDE_DIR})
-set_target_properties(aedile_test PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS YES)
-gtest_add_tests(TARGET aedile_test)
+# Export targets for use by other projects
+install(EXPORT ${PROJECT_NAME}Targets
+ FILE ${PROJECT_NAME}Targets.cmake
+ NAMESPACE ${PROJECT_NAME}::
+ DESTINATION lib/cmake/${PROJECT_NAME})
+
+if(${ENABLE_TESTS})
+ enable_testing()
+ add_subdirectory(test)
+else()
+ add_subdirectory(test EXCLUDE_FROM_ALL)
+endif()
\ No newline at end of file
diff --git a/CMakePresets.json b/CMakePresets.json
index d28f1a5..0ca4df0 100644
--- a/CMakePresets.json
+++ b/CMakePresets.json
@@ -6,7 +6,8 @@
"generator": "Unix Makefiles",
"binaryDir": "${sourceDir}/build/linux",
"cacheVariables": {
- "CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake"
+ "CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake",
+ "CMAKE_INSTALL_PREFIX": "$env{INSTALL_DIR}"
}
}
],
diff --git a/README.md b/README.md
index b2cd674..e086ce5 100644
--- a/README.md
+++ b/README.md
@@ -34,7 +34,7 @@ To build the SDK on Linux, run the following commands from the project root:
```bash
export VCPKG_ROOT=/path/to/vcpkg/installation
-cmake --preset=linux # configuration step
+cmake --preset=linux -DENABLE_TESTS=1 # configuration step with tests enabled
cmake --build build/linux # compilation or build step
```
@@ -42,4 +42,4 @@ To run unit tests, use the following command:
```bash
ctest --preset linux
-```
+```
\ No newline at end of file
diff --git a/cmake/aedileConfig.cmake.in b/cmake/aedileConfig.cmake.in
new file mode 100644
index 0000000..a1c6d45
--- /dev/null
+++ b/cmake/aedileConfig.cmake.in
@@ -0,0 +1,5 @@
+@PACKAGE_INIT@
+
+include("${CMAKE_CURRENT_LIST_DIR}/${PROJECT_NAME}Targets.cmake")
+
+check_required_components(${PROJECT_NAME})
diff --git a/deb/DEBIAN/control b/deb/DEBIAN/control
new file mode 100644
index 0000000..819ffa4
--- /dev/null
+++ b/deb/DEBIAN/control
@@ -0,0 +1,6 @@
+Package: libaedile
+Version: 0.0.2
+Maintainer: MichaelJ
+Architecture: amd64
+Description: Plug-and-play Nostr Development Kit
+Pre-Depends: dpkg ( >= 1.16.1), libwebsocketpp-dev ( >= 0.8.1-7), nlohmann-json3-dev ( >= 3.7.3-1), libssl-dev ( >= 3.0), libplog-dev ( >= 1.1.10)
diff --git a/gen_deb.sh b/gen_deb.sh
new file mode 100755
index 0000000..65fe464
--- /dev/null
+++ b/gen_deb.sh
@@ -0,0 +1,31 @@
+#! /bin/bash
+
+export PACKAGE_NAME="libaedile-dev"
+export VERSION="0.0.2"
+
+export SRC_ROOT_DIR=$(dirname $(readlink -f ${0}))
+export DEB_PACKAGE_ROOT="${SRC_ROOT_DIR}/deb"
+export INSTALL_DIR="${DEB_PACKAGE_ROOT}/opt/${PACKAGE_NAME}/usr"
+
+
+rm -rf $INSTALL_DIR
+mkdir -p $INSTALL_DIR
+
+cd "${SRC_ROOT_DIR}"
+cmake --preset=linux
+cmake --build build/linux
+cmake --install build/linux
+
+rm -rf ${DEB_PACKAGE_ROOT}/usr/
+
+mkdir -p ${DEB_PACKAGE_ROOT}/usr/include/aedile/client
+mkdir -p ${DEB_PACKAGE_ROOT}/usr/lib
+
+ln -s ${INSTALL_DIR}/include/nostr.h ${DEB_PACKAGE_ROOT}/usr/include/aedile/nostr.h
+ln -s ${INSTALL_DIR}/include/nostr.hpp ${DEB_PACKAGE_ROOT}/usr/include/aedile/nostr.hpp
+ln -s ${INSTALL_DIR}/include/client/web_socket_client.hpp ${DEB_PACKAGE_ROOT}/usr/include/aedile/client/web_socket_client.hpp
+ln -s ${INSTALL_DIR}/lib/libaedile.a ${DEB_PACKAGE_ROOT}/usr/lib/libaedile.a
+
+cd "${SRC_ROOT_DIR}"
+
+dpkg-deb --build deb deb/$PACKAGE_NAME-${VERSION}.deb
diff --git a/include/nostr.h b/include/nostr.h
new file mode 100644
index 0000000..785a6f1
--- /dev/null
+++ b/include/nostr.h
@@ -0,0 +1,2 @@
+#include
+#include
\ No newline at end of file
diff --git a/src/client/websocketpp_client.cpp b/src/client/websocketpp_client.cpp
index c7504e1..f2c2d5f 100644
--- a/src/client/websocketpp_client.cpp
+++ b/src/client/websocketpp_client.cpp
@@ -1,4 +1,5 @@
#include "web_socket_client.hpp"
+#include
using std::error_code;
using std::function;
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
new file mode 100644
index 0000000..a78a8f9
--- /dev/null
+++ b/test/CMakeLists.txt
@@ -0,0 +1,32 @@
+#======== Build the tests ========#
+enable_testing()
+include(GoogleTest)
+
+FetchContent_Declare(
+ googletest
+ URL https://github.com/google/googletest/archive/03597a01ee50ed33e9dfd640b249b4be3799d395.zip
+)
+
+set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
+FetchContent_MakeAvailable(googletest)
+
+enable_testing()
+
+set(TEST_DIR ./)
+set(TEST_SOURCES
+ ${TEST_DIR}/nostr_service_test.cpp
+)
+
+add_executable(aedile_test ${TEST_SOURCES} ${HEADERS})
+target_link_libraries(aedile_test PRIVATE
+ GTest::gmock
+ GTest::gtest
+ GTest::gtest_main
+ aedile
+ plog::plog
+ websocketpp::websocketpp
+)
+target_include_directories(aedile_test PUBLIC ${INCLUDE_DIR})
+set_target_properties(aedile_test PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS YES)
+
+gtest_add_tests(TARGET aedile_test)