Overhaul cmake configuration, add console api, fix http code that caused issues with cgi-bin

This commit is contained in:
2026-05-27 03:02:16 -05:00
parent 266ef5f830
commit 8413c67ec6
177 changed files with 20088 additions and 17948 deletions

67
cmake/apps.cmake Normal file
View File

@@ -0,0 +1,67 @@
if(TESSESFRAMEWORK_ENABLE_APPS)
add_executable(tbin2h apps/tbin2h.cpp)
target_link_libraries(tbin2h PUBLIC tessesframework)
install(TARGETS tbin2h DESTINATION "${CMAKE_INSTALL_BINDIR}")
add_executable(tanonydrop apps/tanonydrop.cpp)
target_link_libraries(tanonydrop PUBLIC tessesframework)
install(TARGETS tanonydrop DESTINATION "${CMAKE_INSTALL_BINDIR}")
add_executable(tfetch apps/tfetch.cpp)
target_link_libraries(tfetch PUBLIC tessesframework)
install(TARGETS tfetch DESTINATION "${CMAKE_INSTALL_BINDIR}")
add_executable(tfileserver apps/tfileserver.cpp)
target_link_libraries(tfileserver PUBLIC tessesframework)
install(TARGETS tfileserver DESTINATION "${CMAKE_INSTALL_BINDIR}")
add_executable(tdoc2json apps/tdoc2json.cpp)
target_link_libraries(tdoc2json PUBLIC tessesframework)
install(TARGETS tdoc2json DESTINATION "${CMAKE_INSTALL_BINDIR}")
add_executable(tjson2doc apps/tjson2doc.cpp)
target_link_libraries(tjson2doc PUBLIC tessesframework)
install(TARGETS tjson2doc DESTINATION "${CMAKE_INSTALL_BINDIR}")
add_executable(tjsonpretty apps/tjsonpretty.cpp)
target_link_libraries(tjsonpretty PUBLIC tessesframework)
install(TARGETS tjsonpretty DESTINATION "${CMAKE_INSTALL_BINDIR}")
add_executable(tjsonunpretty apps/tjsonunpretty.cpp)
target_link_libraries(tjsonunpretty PUBLIC tessesframework)
install(TARGETS tjsonunpretty DESTINATION "${CMAKE_INSTALL_BINDIR}")
add_executable(ttime apps/ttime.cpp)
target_link_libraries(ttime PUBLIC tessesframework)
install(TARGETS ttime DESTINATION "${CMAKE_INSTALL_BINDIR}")
add_executable(tshell apps/tshell.cpp)
target_link_libraries(tshell PUBLIC tessesframework)
install(TARGETS tshell DESTINATION "${CMAKE_INSTALL_BINDIR}")
add_executable(tprinttorrent apps/printtorrent.cpp)
target_link_libraries(tprinttorrent PUBLIC tessesframework)
install(TARGETS tprinttorrent DESTINATION "${CMAKE_INSTALL_BINDIR}")
add_executable(ttorrentcreate apps/ttorrentcreate.cpp)
target_link_libraries(ttorrentcreate PUBLIC tessesframework)
install(TARGETS ttorrentcreate DESTINATION "${CMAKE_INSTALL_BINDIR}")
add_executable(tclearwebseed apps/tclearwebseed.cpp)
target_link_libraries(tclearwebseed PUBLIC tessesframework)
install(TARGETS tclearwebseed DESTINATION "${CMAKE_INSTALL_BINDIR}")
add_executable(trng apps/trng.cpp)
target_link_libraries(trng PUBLIC tessesframework)
install(TARGETS trng DESTINATION "${CMAKE_INSTALL_BINDIR}")
add_executable(twatch apps/twatch.cpp)
target_link_libraries(twatch PUBLIC tessesframework)
install(TARGETS twatch DESTINATION "${CMAKE_INSTALL_BINDIR}")
add_executable(tuuid apps/tuuid.cpp)
target_link_libraries(tuuid PUBLIC tessesframework)
install(TARGETS tuuid DESTINATION "${CMAKE_INSTALL_BINDIR}")
endif()

43
cmake/examples.cmake Normal file
View File

@@ -0,0 +1,43 @@
if(TESSESFRAMEWORK_ENABLE_EXAMPLES)
add_executable(echo-my-name examples/echo-my-name.cpp)
target_link_libraries(echo-my-name PUBLIC tessesframework)
add_executable(echo-platform examples/echo-platform.cpp)
target_link_libraries(echo-platform PUBLIC tessesframework)
add_executable(console-list examples/console-list.cpp)
target_link_libraries(console-list PUBLIC tessesframework)
add_executable(console-test examples/console-test.cpp)
target_link_libraries(console-test PUBLIC tessesframework)
add_executable(console-raw examples/console-raw.cpp)
target_link_libraries(console-raw PUBLIC tessesframework)
add_executable(timer examples/timer.cpp)
target_link_libraries(timer PUBLIC tessesframework)
add_executable(copyfile examples/copyfile.cpp)
target_link_libraries(copyfile PUBLIC tessesframework)
add_executable(webserverex examples/webserverex.cpp)
target_link_libraries(webserverex PUBLIC tessesframework)
add_executable(safesubpath examples/safesubpath.cpp)
target_link_libraries(safesubpath PUBLIC tessesframework)
add_executable(pathtest examples/pathtest.cpp)
target_link_libraries(pathtest PUBLIC tessesframework)
add_executable(mountabletest examples/mountabletest.cpp)
target_link_libraries(mountabletest PUBLIC tessesframework)
add_executable(printjsondecodedemoji examples/printjsondecodedemoji.cpp)
target_link_libraries(printjsondecodedemoji PUBLIC tessesframework)
add_executable(wsecho examples/wsecho.cpp)
target_link_libraries(wsecho PUBLIC tessesframework)
add_executable(tests examples/tests.cpp)
target_link_libraries(tests PUBLIC tessesframework)
endif()

27
cmake/findmbed.cmake Normal file
View File

@@ -0,0 +1,27 @@
if(TESSESFRAMEWORK_FETCHCONTENT)
set(MBEDTLS_FATAL_WARNINGS OFF CACHE INTERNAL "For TessesFramework" FORCE)
set(ENABLE_TESTING OFF CACHE INTERNAL "For TessesFramework" FORCE)
set(ENABLE_PROGRAMS OFF CACHE INTERNAL "For TessesFramework" FORCE)
FetchContent_Declare(
mbedtls
URL https://downloads.tesses.net/cache/libraries/source/mbedtls-3.6.4.tar.bz2
)
if(TESSESFRAMEWORK_ENABLE_MBED AND TESSESFRAMEWORK_FETCHCONTENT)
set(MBEDTLS_FATAL_WARNINGS OFF CACHE INTERNAL "For TessesFramework" FORCE)
set(ENABLE_TESTING OFF CACHE INTERNAL "For TessesFramework" FORCE)
set(ENABLE_PROGRAMS OFF CACHE INTERNAL "For TessesFramework" FORCE)
if(TESSESFRAMEWORK_STATIC)
set(USE_STATIC_MBEDTLS_LIBRARY ON CACHE INTERNAL "For TessesFramework" FORCE)
set(USE_SHARED_MBEDTLS_LIBRARY OFF CACHE INTERNAL "For TessesFramework" FORCE)
else()
set(USE_STATIC_MBEDTLS_LIBRARY OFF CACHE INTERNAL "For TessesFramework" FORCE)
set(USE_SHARED_MBEDTLS_LIBRARY ON CACHE INTERNAL "For TessesFramework" FORCE)
endif()
endif()
FetchContent_MakeAvailable(mbedtls)
else()
find_package(MbedTLS REQUIRED)
endif()

78
cmake/helpers.cmake Normal file
View File

@@ -0,0 +1,78 @@
if(TESSESFRAMEWORK_ENABLE_SQLITE)
target_compile_definitions(tessesframework PRIVATE TESSESFRAMEWORK_ENABLE_SQLITE)
endif()
if(TESSESFRAMEWORK_ENABLE_PLATFORMFOLDERS)
target_compile_definitions(tessesframework PRIVATE TESSESFRAMEWORK_ENABLE_PLATFORMFOLDERS)
endif()
if(TESSESFRAMEWORK_ENABLE_PROCESS)
target_compile_definitions(tessesframework PRIVATE TESSESFRAMEWORK_ENABLE_PROCESS)
endif()
target_include_directories(tessesframework
PUBLIC
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>"
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
)
target_include_directories(tessesframework
PUBLIC
"$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>"
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
)
if(WIN32)
target_link_libraries(tessesframework PRIVATE iphlpapi)
target_link_libraries(tessesframework PRIVATE ws2_32)
endif()
if(TESSESFRAMEWORK_LOGTOFILE)
target_compile_definitions(tessesframework PRIVATE TESSESFRAMEWORK_LOGTOFILE)
endif()
if(TESSESFRAMEWORK_ENABLE_THREADING)
target_compile_definitions(tessesframework PRIVATE TESSESFRAMEWORK_ENABLE_THREADING)
endif()
if(TESSESFRAMEWORK_ENABLE_NETWORKING)
target_compile_definitions(tessesframework PRIVATE TESSESFRAMEWORK_ENABLE_NETWORKING)
endif()
if(TESSESFRAMEWORK_FETCHCONTENT)
target_compile_definitions(tessesframework PRIVATE TESSESFRAMEWORK_FETCHCONTENT)
endif()
if(TESSESFRAMEWORK_ENABLE_MBED)
target_compile_definitions(tessesframework PRIVATE TESSESFRAMEWORK_ENABLE_MBED)
if(TESSESFRAMEWORK_EMBED_CERT_BUNDLE)
target_compile_definitions(tessesframework PRIVATE TESSESFRAMEWORK_EMBED_CERT_BUNDLE)
else()
target_compile_definitions(tessesframework PRIVATE TESSESFRAMEWORK_CERT_BUNDLE_FILE=${TESSESFRAMEWORK_CERT_BUNDLE_FILE})
endif()
if(TESSESFRAMEWORK_FETCHCONTENT)
target_link_libraries(tessesframework PRIVATE mbedtls mbedx509 mbedcrypto everest p256m)
list(APPEND TessesFrameworkLibs mbedtls mbedx509 mbedcrypto everest p256m)
else()
target_link_libraries(tessesframework PRIVATE mbedtls mbedx509 mbedcrypto)
endif()
endif()
if(NOT(WIN32 OR PLATFORM_PS2))
if(TESSESFRAMEWORK_ENABLE_THREADING)
set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)
target_link_libraries(tessesframework PRIVATE Threads::Threads)
endif()
endif()
if(NOT(WIN32 OR PLATFORM_PS2 OR "${CMAKE_SYSTEM_NAME}" STREQUAL "NintendoWii" OR "${CMAKE_SYSTEM_NAME}" STREQUAL "NintendoGameCube") OR "${CMAKE_SYSTEM_NAME}" STREQUAL "NintendoSwitch")
check_library_exists(util forkpty "" HAVE_LIBUTIL)
if(HAVE_LIBUTIL)
target_link_libraries(tessesframework PRIVATE util)
endif()
endif()
if(NOT(WIN32 OR PLATFORM_PS2 OR "${CMAKE_SYSTEM_NAME}" STREQUAL "NintendoWii" OR "${CMAKE_SYSTEM_NAME}" STREQUAL "NintendoGameCube") OR "${CMAKE_SYSTEM_NAME}" STREQUAL "NintendoSwitch")
check_library_exists(dl dlopen "" HAVE_LIBDL)
if(HAVE_LIBDL)
target_link_libraries(tessesframework PRIVATE dl)
endif()
endif()

29
cmake/install-dev.cmake Normal file
View File

@@ -0,0 +1,29 @@
if(TESSESFRAMEWORK_INSTALL_DEVELOPMENT)
install(TARGETS ${TessesFrameworkLibs}
EXPORT TessesFrameworkTargets
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/TessesFramework DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/include/TessesFramework DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
install(EXPORT TessesFrameworkTargets
FILE TessesFrameworkTargets.cmake
NAMESPACE TessesFramework::
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/TessesFramework
)
include(CMakePackageConfigHelpers)
configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in "${CMAKE_CURRENT_BINARY_DIR}/TessesFrameworkConfig.cmake"
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/TessesFramework)
configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/TessesFrameworkFeatures.h.in "${CMAKE_CURRENT_BINARY_DIR}/include/TessesFramework/TessesFrameworkFeatures.h"
INSTALL_DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/TessesFramework/TessesFrameworkFeatures.h)
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/TessesFrameworkConfig.cmake"
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/TessesFramework)
endif()

16
cmake/options.cmake Normal file
View File

@@ -0,0 +1,16 @@
option(TESSESFRAMEWORK_EMBED_CERT_BUNDLE "Embed the certificate chain bundle" ON)
option(TESSESFRAMEWORK_ENABLE_MBED "Enable Tesses Framework mbedtls" ON)
option(TESSESFRAMEWORK_ENABLE_NETWORKING "Enable Networking" ON)
option(TESSESFRAMEWORK_ENABLE_THREADING "Enable Threading" ON)
option(TESSESFRAMEWORK_ENABLE_SQLITE "Enable sqlite (embedded in source)" ON)
option(TESSESFRAMEWORK_ENABLE_PLATFORMFOLDERS "Enable sago platformfolders (embedded in source)" ON)
option(TESSESFRAMEWORK_ENABLE_PROCESS "Enable process api" ON)
option(TESSESFRAMEWORK_ENABLE_RPATH "Enable RPATH" ON)
option(TESSESFRAMEWORK_ENABLE_EXAMPLES "Enable Tesses Framework examples" ON)
option(TESSESFRAMEWORK_ENABLE_APPS "Enable Tesses Framework cli apps" ON)
option(TESSESFRAMEWORK_INSTALL_DEVELOPMENT "Enable Installing Tesses Framework Development Packages" ON)
option(TESSESFRAMEWORK_STATIC "Build with static libraries instead of shared" OFF)
option(TESSESFRAMEWORK_ENABLE_SETDATE "Enable setting date to file" ON)
option(TESSESFRAMEWORK_LOGTOFILE "TessesFramework Log to file" OFF)
option(TESSESFRAMEWORK_FETCHCONTENT "TessesFramework fetchcontent" ON)
option(TESSESFRAMEWORK_VENDERCERTCHAIN "Use the ca-certificates.crt in project rather than system" ON)

21
cmake/sharedlib.cmake Normal file
View File

@@ -0,0 +1,21 @@
if(TESSESFRAMEWORK_ENABLE_RPATH)
set(CMAKE_MACOSX_RPATH 1)
set(CMAKE_BUILD_RPATH_USE_ORIGIN TRUE)
if (APPLE)
set(CMAKE_INSTALL_RPATH "@executable_path/../${CMAKE_INSTALL_LIBDIR}")
else()
set(CMAKE_INSTALL_RPATH "$ORIGIN/../${CMAKE_INSTALL_LIBDIR}")
endif()
endif()
add_library(tessesframework SHARED ${TESSESFRAMEWORK_SOURCE})
set_target_properties(tessesframework PROPERTIES
VERSION ${TESSESFRAMEWORK_MAJOR_VERSION}.${TESSESFRAMEWORK_MINOR_VERSION}.${TESSESFRAMEWORK_PATCH_VERSION}
SOVERSION ${TESSESFRAMEWORK_MAJOR_VERSION}
)
include(${CMAKE_CURRENT_LIST_DIR}/helpers.cmake)
install(TARGETS tessesframework DESTINATION)
list(APPEND TessesFrameworkLibs tessesframework)

View File

@@ -1,4 +1,5 @@
list(APPEND TESSESFRAMEWORK_SOURCE
src/Console.cpp
src/Random.cpp
src/Date/Date.cpp
src/Http/FileServer.cpp

14
cmake/staticlib.cmake Normal file
View File

@@ -0,0 +1,14 @@
add_library(tessesframework STATIC ${TESSESFRAMEWORK_SOURCE})
include(${CMAKE_CURRENT_LIST_DIR}/helpers.cmake)
if("${CMAKE_SYSTEM_NAME}" STREQUAL "NintendoWii" OR "${CMAKE_SYSTEM_NAME}" STREQUAL "NintendoGameCube")
target_link_libraries(tessesframework PUBLIC fat)
endif()
if("${CMAKE_SYSTEM_NAME}" STREQUAL "NintendoWii")
target_link_libraries(tessesframework PUBLIC wiisocket)
target_compile_definitions(tessesframework PUBLIC TESSESFRAMEWORK_USE_WII_SOCKET)
endif()
list(APPEND TessesFrameworkLibs tessesframework)

3
cmake/version.cmake Normal file
View File

@@ -0,0 +1,3 @@
set(TESSESFRAMEWORK_MAJOR_VERSION 0)
set(TESSESFRAMEWORK_MINOR_VERSION 0)
set(TESSESFRAMEWORK_PATCH_VERSION 4)