From c1a905b5020c4f2f4ade85577e0c36811be87de4 Mon Sep 17 00:00:00 2001
From: Ferenc Szontágh <szf@fsociety.hu>
Date: Mon, 14 Apr 2025 09:08:34 +0000
Subject: [PATCH] packaging, docs

---
 CMakeLists.txt |  156 ++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 103 insertions(+), 53 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index a5af0a9..14318e8 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,100 +1,150 @@
-cmake_minimum_required(VERSION 3.5)
+cmake_minimum_required(VERSION 3.20)
 project(
     voidscript
     LANGUAGES CXX
     VERSION 0.0.1
-    )
+    DESCRIPTION "A simple scripting language"
+    HOMEPAGE_URL "https://github.com/fszontagh/voidshell"
+)
 
 set(CMAKE_CXX_STANDARD 20)
 set(CMAKE_CXX_STANDARD_REQUIRED ON)
-set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
+set(CMAKE_CXX_EXTENSIONS OFF)
 
 set(NEED_CLI ON)
-set(NEED_TESTS OFF)
-set(NEED_STATIC_LIBS ON)
-set(NEED_SHARED_LIBS ON)
 
 option(BUILD_CLI, "Build example commandline intrepeter" ${NEED_CLI})
-option(BUILD_TESTS, "Build tests" ${NEED_TESTS})
-option(BUILD_SHARED_LIBS "Build shared library" ${NEED_SHARED_LIBS})
-option(BUILD_STATIC_LIBS "Build static library" ${NEED_STATIC_LIBS})
+option(BUILD_SHARED_LIBS "Build using shared libraries" ON)
+
 
 if (BUILD_CLI)
     set(NEED_CLI ${BUILD_CLI})
 endif()
-if (BUILD_TESTS)
-    set(NEED_TESTS ${BUILD_TESTS})
-endif()
 
-if (BUILD_SHARED_LIBS)
-    set(NEED_SHARED_LIBS ${BUILD_SHARED_LIBS})
-endif()
-
-if (BUILD_STATIC_LIBS)
-    set(NEED_STATIC_LIBS ${BUILD_STATIC_LIBS})
-endif()
+include(cmake/AppVersion.cmake)
 
 set(COMMENT_CHARACTER "#")
 set(PARSER_OPEN_TAG "<?void")
 set(PARSER_CLOSE_TAG "?>")
 
 message(STATUS "BUILD_CLI:           ${NEED_CLI}")
-message(STATUS "BUILD_TESTS:         ${NEED_TESTS}")
-message(STATUS "BUILD_SHARED_LIBS:   ${NEED_SHARED_LIBS}")
-message(STATUS "BUILD_STATIC_LIBS:   ${NEED_STATIC_LIBS}")
+message(STATUS "BUILD_SHARED_LIBS:   ${BUILD_SHARED_LIBS}")
 message(STATUS "  COMMENT_CHARACTER: ${COMMENT_CHARACTER}")
 message(STATUS "  PARSER_OPEN_TAG:   ${PARSER_OPEN_TAG}")
 message(STATUS "  PARSER_CLOSE_TAG:  ${PARSER_CLOSE_TAG}")
+message(STATUS "APP_GIT_VERSION:     ${APP_GIT_VERSION}")
 
 if (CMAKE_BUILD_TYPE STREQUAL "")
     set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE)
 endif()
-
-
 
 message(STATUS "CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}")
 
 if (CMAKE_BUILD_TYPE STREQUAL "Debug")
     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g")
     set(DEBUG_BUILD ON)
-    set(COMPILE_WARNING_AS_ERROR ON)
+    set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
 endif()
+
+# PACKAGING PROPERTIES
+set(CPACK_RESOURCE_FILE_README "${CMAKE_SOURCE_DIR}/README.md")
+set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_SOURCE_DIR}/assets/linux/DESCRIPTION.txt")
+set(CPACK_PACKAGE_CONTACT "Ferenc Szontágh <szf@fsociety.hu>")
+set(CPACK_PACKAGE_VENDOR "fszontagh")
+set(CPACK_PACKAGE_HOMEPAGE_URL "https://github.com/fszontagh/voidscript")
+set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Voidscript a simple scripting language")
+set(CPACK_PACKAGE_CHECKSUM "SHA512")
+set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE")
+set(CPACK_DEBIAN_PACKAGE_DEPENDS "")
+set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
+#set(CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS ON)
+set(CPACK_STRIP_FILES YES)
+
+set(
+    CPACK_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS
+    OWNER_READ OWNER_WRITE OWNER_EXECUTE
+    GROUP_READ GROUP_EXECUTE
+    WORLD_READ WORLD_EXECUTE
+)
+set(CPACK_PACKAGING_INSTALL_PREFIX "/")
+
+set(ARCHITECTURE ${CMAKE_SYSTEM_PROCESSOR})
+
+if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
+    execute_process(
+        COMMAND bash -c "source /etc/lsb-release && echo \"$DISTRIB_CODENAME\""
+        OUTPUT_VARIABLE DISTRIB_CODENAME
+        OUTPUT_STRIP_TRAILING_WHITESPACE
+    )
+    set(CPACK_SYSTEM_NAME ${DISTRIB_CODENAME})
+    message(STATUS "Detected DISTRIB_CODENAME: ${DISTRIB_CODENAME}")
+
+    find_program(DPKG dpkg)
+    if (DPKG)
+        execute_process(COMMAND ${DPKG} --print-architecture OUTPUT_VARIABLE ARCHITECTURE OUTPUT_STRIP_TRAILING_WHITESPACE)
+    endif()
+
+
+    if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+        set(ARCHITECTURE "amd64")
+    elseif(CMAKE_SIZEOF_VOID_P EQUAL 4)
+        set(ARCHITECTURE "i386")
+    else()
+        message(STATUS "Célarchitektúra: Nem meghatározható (CMAKE_SIZEOF_VOID_P: ${CMAKE_SIZEOF_VOID_P})")
+    endif()
+endif()
+
+message(STATUS "System architecture: ${ARCHITECTURE}")
+
+if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
+  set_property(CACHE CMAKE_INSTALL_PREFIX PROPERTY VALUE "/")
+endif()
+
+include(GNUInstallDirs)
+# PACKAGING PROPERTIES END
 
 configure_file("cmake/options.h.in" "include/options.h" @ONLY)
 configure_file("test_scripts/test1.vs" "test_scripts/test1.vs" @ONLY)
 configure_file("test_scripts/test2.vs" "test_scripts/test2.vs" @ONLY)
 
+include_directories(${CMAKE_BINARY_DIR}/include src)
 
-include_directories(${CMAKE_BINARY_DIR}/include)
-include_directories(src)
-
-
-file(GLOB_RECURSE SOURCES
-    src/main.cpp
-    src/ScriptInterpreter.cpp
-    src/Lexer.cpp
+# LIBRARY TARGET
+add_library(voidscript
+            src/ScriptInterpreter.cpp
+            src/Lexer.cpp
 )
 
-if (NEED_SHARED_LIBS)
-    add_library(${CMAKE_PROJECT_NAME} SHARED)
-    target_sources(${CMAKE_PROJECT_NAME} PRIVATE ${SOURCES})
-    set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES OUTPUT_NAME ${CMAKE_PROJECT_NAME})
-endif()
-if (NEED_STATIC_LIBS)
-    add_library(${CMAKE_PROJECT_NAME}_static STATIC)
-    target_sources(${CMAKE_PROJECT_NAME}_static PRIVATE ${SOURCES})
-    set_target_properties(${CMAKE_PROJECT_NAME}_static PROPERTIES OUTPUT_NAME ${CMAKE_PROJECT_NAME})
-endif()
+install(TARGETS voidscript DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT "lib")
+set(CPACK_DEBIAN_LIB_FILE_NAME "libvoidscript_${CMAKE_PROJECT_VERSION}_${ARCHITECTURE}_${CPACK_SYSTEM_NAME}.deb")
+set(CPACK_DEBIAN_LIB_PACKAGE_NAME "libvoidscript")
+set(CPACK_DEBIAN_LIB_PACKAGE_SECTION "libs")
+set_target_properties(voidscript PROPERTIES VERSION ${CMAKE_PROJECT_VERSION} SOVERSION 1)
+message(STATUS "CMAKE_SYSTEM: ${CMAKE_SYSTEM}")
+
+set_target_properties(voidscript PROPERTIES
+    LINKER_LANGUAGE CXX
+    LIBRARY_OUTPUT_NAME voidscript
+)
 
 
-set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES LINKER_LANGUAGE CXX)
-
+# EXECUTABLE TARGET
 if (NEED_CLI)
-    add_executable(cli cli/main.cpp)
-    add_dependencies(cli ${CMAKE_PROJECT_NAME})
-    if (BUILD_SHARED_LIBS)
-        target_link_libraries(cli ${CMAKE_PROJECT_NAME})
-        else()
-        target_link_libraries(cli ${CMAKE_PROJECT_NAME}_static)
-    endif()
-endif()
\ No newline at end of file
+    add_executable(voidscript-cli cli/main.cpp)
+    target_link_libraries(voidscript-cli voidscript)
+    install(TARGETS voidscript-cli DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT "bin")
+    set_target_properties(voidscript-cli PROPERTIES
+    LINKER_LANGUAGE CXX
+    OUTPUT_NAME voidscript)
+    set(CPACK_PACKAGE_EXECUTABLES voidscript-cli "Simple Shell")
+    set(CPACK_DEBIAN_BIN_FILE_NAME "voidscript_${CMAKE_PROJECT_VERSION}_${ARCHITECTURE}_${CPACK_SYSTEM_NAME}.deb")
+    set(CPACK_DEBIAN_BIN_PACKAGE_NAME "voidscript")
+    set(CPACK_DEBIAN_BIN_PACKAGE_SECTION "interpreters")
+    set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS_PRIVATE_DIRS ${CMAKE_BINARY_DIR})
+    set(CPACK_DEBIAN_BIN_PACKAGE_DEPENDS "libvoidscript (= ${CMAKE_PROJECT_VERSION})")
+endif()
+
+# CPACK CONFIGURATION
+set(CPACK_DEB_COMPONENT_INSTALL ON)
+
+include(CPack)
\ No newline at end of file

--
Gitblit v1.9.3