From 0d0d63ede4eec572398c87efe016be7c33d48a3e Mon Sep 17 00:00:00 2001 From: Kyle Isom Date: Tue, 10 Oct 2023 22:23:12 -0700 Subject: [PATCH] packaging work --- .gitignore | 15 ++++- Buffer.cc | 180 ------------------------------------------------- Buffer.h | 48 ------------- BufferTest.cc | 16 ----- CMakeLists.txt | 24 ++++++- CMakePack.txt | 4 +- kge.desktop.in | 2 +- kge.md | 14 ++++ kge.png | Bin 0 -> 26695 bytes 9 files changed, 55 insertions(+), 248 deletions(-) delete mode 100644 Buffer.cc delete mode 100644 Buffer.h delete mode 100644 BufferTest.cc create mode 100644 kge.md create mode 100644 kge.png diff --git a/.gitignore b/.gitignore index b8b7e7f..b34b1e7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,17 @@ -__pycache__ +.idea +.trunk +.vc +.vscode + +*.a +*.o +*.bin +*.pc build +core +core.* cmake-build-* +bufferTest +dictionaryTest +tlvTest diff --git a/Buffer.cc b/Buffer.cc deleted file mode 100644 index 8ed0632..0000000 --- a/Buffer.cc +++ /dev/null @@ -1,180 +0,0 @@ -// -// Created by kyle on 2023-10-09. -// - -#include -#include -#include "Buffer.h" - -namespace kge { - - -constexpr size_t defaultCapacity = 32; -constexpr size_t maxReasonableLine = 8192; - - -static size_t -nearestPower(size_t x) -{ - if (x == 0) { - return 0; - } - - x--; - - x |= x >> 1; - x |= x >> 2; - x |= x >> 4; - x |= x >> 8; - x |= x >> 16; - x |= x >> 32; - - return x; -} - - -Buffer::Buffer() - : contents(nullptr), length(0), capacity(0) -{ - this->Resize(defaultCapacity); -} - - -Buffer::Buffer(size_t initialCapacity) - : contents(nullptr), length(0), capacity(0) -{ - this->Resize(initialCapacity); -} - - -Buffer::Buffer(const char *data) - : contents(nullptr), length(0), capacity(0) -{ - size_t datalen = strnlen(data, maxReasonableLine); - - this->Append((uint8_t *)data, datalen); -} - - -bool -Buffer::Append(uint8_t *data, size_t datalen) -{ - auto resized = false; - auto newCap = this->mustGrow(datalen); - - if (newCap > 0) { - this->Resize(newCap); - resized = true; - } - - memcpy(this->contents + this->length, data, datalen); - this->length += datalen; - return resized; -} - -bool -Buffer::Append(uint8_t c) -{ - return this->Append(&c, 1); -} - -bool -Buffer::Insert(size_t index, uint8_t *data, size_t datalen) -{ - auto resized = this->shift(index, datalen); - - memcpy(this->contents + index, data, datalen); - return resized; -} - -bool -Buffer::Insert(size_t index, uint8_t c) -{ - return this->Insert(index, &c, 1); -} - - -void -Buffer::Resize(size_t newCapacity) -{ - if (newCapacity < this->length) { - return; - } - - uint8_t *newContents = new uint8_t[newCapacity]; - - if (this->length > 0) { - memcpy(newContents, this->contents, this->length); - } - - if (this->contents != nullptr) { - delete this->contents; - } - - this->contents = newContents; - this->capacity = newCapacity; -} - -size_t -Buffer::Trim() -{ - size_t projectedCapacity = nearestPower(this->length); - - assert(projectedCapacity >= length); - - if (projectedCapacity < this->capacity) { - this->Resize(projectedCapacity); - return this->Capacity(); - } - - return 0; -} - -void -Buffer::Clear() -{ - memset(this->contents, 0, this->length); - this->length = 0; -} - -void -Buffer::Reclaim() -{ - delete this->contents; - this->length = 0; - this->capacity = 0; -} - -size_t -Buffer::mustGrow(size_t delta) -{ - if ((delta + this->length) < this->capacity) { - return 0; - } - - auto newCapacity = delta + this->length; - return nearestPower(newCapacity); -} - - -bool -Buffer::shift(size_t offset, size_t delta) -{ - auto resized = false; - auto newCap = this->mustGrow(delta); - - if (newCap > 0) { - this->Resize(newCap); - resized = true; - } - - - for (size_t i = this->length; i >= offset; i++) { - this->contents[i+delta] = this->contents[i]; - } - - return resized; -} - - -} // kge diff --git a/Buffer.h b/Buffer.h deleted file mode 100644 index f7fd291..0000000 --- a/Buffer.h +++ /dev/null @@ -1,48 +0,0 @@ -// -// Created by kyle on 2023-10-09. -// - -#ifndef KGE_BUFFER_H -#define KGE_BUFFER_H - -#include - - -namespace kge { - - -class Buffer { -public: - Buffer(); - Buffer(size_t); - Buffer(const char *); - - uint8_t *Contents() { return this->contents; } - size_t Size() { return this->length; }; - size_t Capacity() { return this->capacity; } - - bool Append(uint8_t *data, size_t datalen); - bool Append(uint8_t c); - bool Insert(size_t index, uint8_t *data, size_t datalen); - bool Insert(size_t index, uint8_t c); - - // bool Remove(size_t index, size_t length); - - /* memory management */ - void Resize(size_t newCapacity); - size_t Trim(); - void Clear(); - void Reclaim(); - -private: - size_t mustGrow(size_t delta); - bool shift(size_t offset, size_t delta); - - uint8_t *contents; - size_t length; - size_t capacity; -}; - -} // kge - -#endif //KGE_BUFFER_H diff --git a/BufferTest.cc b/BufferTest.cc deleted file mode 100644 index 858322b..0000000 --- a/BufferTest.cc +++ /dev/null @@ -1,16 +0,0 @@ -#include - -#include "Buffer.h" - - -int -main() -{ - kge::Buffer buffer("hlo, world"); - - std::cout << buffer.Contents() << std::endl; - - buffer.Insert(1, (uint8_t *)"el", 2); - - std::cout << buffer.Contents() << std::endl; -} diff --git a/CMakeLists.txt b/CMakeLists.txt index 49db486..c222238 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,6 +3,7 @@ cmake_minimum_required(VERSION 3.22) project(kge LANGUAGES CXX VERSION 0.0.1) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) +string(TIMESTAMP TODAY "%Y%m%d") include(FetchContent) FetchContent_Declare( @@ -70,9 +71,30 @@ add_executable(kge kge.cc ) target_link_libraries(kge imgui ${KLIB_LIBRARIES}) -install(TARGETS kge RUNTIME DESTINATION bin COMPONENT dist) + +add_custom_target(manpages) +configure_file(kge.md kge.1.scdoc @ONLY) +add_custom_command(TARGET manpages COMMAND scdoc < kge.1.scdoc > kge.1 + OUTPUTS ${CMAKE_CURRENT_BINARY_DIR}/kge.1) +add_dependencies(kge manpages) + +install(TARGETS kge + DESTINATION bin + COMPONENT dist) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/kge.desktop DESTINATION share/applications COMPONENT dist) +install(FILES kge.png + DESTINATION share/${PROJECT_NAME} + COMPONENT dist) +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/kge.1 + DESTINATION share/man/man1 + COMPONENT dist) include(CMakePack.txt) + + get_cmake_property(_variableNames VARIABLES) + list (SORT _variableNames) + foreach (_variableName ${_variableNames}) + message(STATUS "${_variableName}=${${_variableName}}") + endforeach() \ No newline at end of file diff --git a/CMakePack.txt b/CMakePack.txt index 72c01e1..de33d49 100644 --- a/CMakePack.txt +++ b/CMakePack.txt @@ -18,11 +18,12 @@ set(CPACK_DEBIAN_PACKAGE_DEPENDS set(CPACK_DEBIAN_PACKAGE_SECTION universe/editors) set(CPACK_DEB_COMPONENT_INSTALL ON) set(CPACK_COMPONENTS_ALL dist) +set(CPACK_COMPONENTS_GROUPING ONE_PER_GROUP) if(LINUX) set(CPACK_GENERATOR "DEB;STGZ;TGZ") elseif(APPLE) - set(CPACK_GENERATOR "productbuild") + set(CPACK_GENERATOR "productbuild;TGZ") elseif(MSVC OR MSYS OR MINGW) set(CPACK_GENERATOR "NSIS;ZIP") else() @@ -32,6 +33,7 @@ endif() set(CPACK_SOURCE_GENERATOR "TGZ;ZIP") set(CPACK_SOURCE_IGNORE_FILES /.git + /.idea /dist /.*build.*) diff --git a/kge.desktop.in b/kge.desktop.in index e2bb20b..89c798c 100644 --- a/kge.desktop.in +++ b/kge.desktop.in @@ -4,6 +4,6 @@ Version=@PROJECT_VERSION@ Name=@PROJECT_NAME@ Comment=@PROJECT_DESCRIPTION@ Exec=kge -Icon= +Icon=@prefix@/share/@PROJECT_NAME@/@PROJECT_NAME@.png Terminal=false Categories=Editors \ No newline at end of file diff --git a/kge.md b/kge.md new file mode 100644 index 0000000..9640474 --- /dev/null +++ b/kge.md @@ -0,0 +1,14 @@ +kge(1) ["@TODAY@" ["Shimmering Clarity Industries"]] + +# NAME + +kge - kyle's graphical editor + +# SYNOPSIS + +kge files... + +# AUTHORS + +Written by Kyle Isom . Up-to-date sources can be found +at https://git.wntrmute.dev/kyle/kge. \ No newline at end of file diff --git a/kge.png b/kge.png new file mode 100644 index 0000000000000000000000000000000000000000..571af08fc5e222cb74656ee61f68ce2dbb1546fe GIT binary patch literal 26695 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 O0000