diff --git a/.circleci/config.yml b/.circleci/config.yml deleted file mode 100644 index 5081fee66..000000000 --- a/.circleci/config.yml +++ /dev/null @@ -1,103 +0,0 @@ -version: 2 -defaults: &defaults - working_directory: ~/ddnet/ddnet - docker: - - image: buildpack-deps:stretch - -defignore: &defignore - filters: - branches: - ignore: - - /.*\.tmp/ - -jobs: - pre_test: - <<: *defaults - parallelism: 1 - steps: - - checkout - - run: python scripts/check_header_guards.py - - build: - <<: *defaults - parallelism: 1 - #environment: - #CIRCLE_ARTIFACTS: /tmp/circleci-artifacts - #CIRCLE_TEST_REPORTS: /tmp/circleci-test-results - - steps: - - checkout - #- run: mkdir -p $CIRCLE_ARTIFACTS $CIRCLE_TEST_REPORTS - - run: git submodule update --init - - - run: | - apt-get update - apt-get install -y build-essential \ - python3 \ - libcurl4-openssl-dev \ - libfreetype6-dev \ - libsdl2-dev \ - libglew-dev \ - libogg-dev \ - libopus-dev \ - libpnglite-dev \ - libopusfile-dev \ - libwavpack-dev - apt-get install -y cmake xz-utils - - # Compile - - run: python scripts/check_header_guards.py - - run: | - mkdir build - cd build - env CFLAGS="-Wdeclaration-after-statement -Werror" CXXFLAGS="-Werror" cmake -DDOWNLOAD_GTEST=ON .. - make everything - make package_default - mkdir -p /tmp/artifacts - cp DDNet-*-linux_x86_64.tar.xz /tmp/artifacts - - run: | - mkdir noautoupdate - cd noautoupdate - env CFLAGS="-Wdeclaration-after-statement -Werror" CXXFLAGS="-Werror" cmake -DAUTOUPDATE=OFF -DDOWNLOAD_GTEST=ON .. - make everything - - - store_artifacts: - path: /tmp/artifacts - - - persist-to-workspace: - root: ./ - paths: ./* - - test: - <<: *defaults - steps: - - attach-workspace: - at: ./ - - - run: | - apt-get update - apt-get install -y make cmake xz-utils - - - run: | - cd build - make run_tests - ./DDNet-Server shutdown - - - run: | - cd noautoupdate - make run_tests - -workflows: - version: 2 - build_and_test: - jobs: - - pre_test: - <<: *defignore - - build: - <<: *defignore - requires: - - pre_test - - test: - <<: *defignore - requires: - - build diff --git a/.clang-format b/.clang-format new file mode 100644 index 000000000..86a3a921d --- /dev/null +++ b/.clang-format @@ -0,0 +1,49 @@ +--- +Language: Cpp +AccessModifierOffset: -8 +AlignAfterOpenBracket: DontAlign +AlignTrailingComments: false +AllowShortFunctionsOnASingleLine: Inline +AlwaysBreakTemplateDeclarations: true +BasedOnStyle: LLVM +BreakBeforeBraces: Custom +BreakBeforeTernaryOperators: false +BreakStringLiterals: true +BraceWrapping: + AfterCaseLabel: true + AfterClass: true + AfterControlStatement: true + AfterEnum: true + AfterExternBlock: false + AfterFunction: true + AfterNamespace: false + AfterStruct: true + AfterUnion: true + BeforeCatch: true + BeforeElse: true + IndentBraces: false + SplitEmptyNamespace: true + SplitEmptyRecord: true +#ColumnLimit: 100 +ColumnLimit: 0 +CommentPragmas: '' +ConstructorInitializerAllOnOneLineOrOnePerLine: true +ConstructorInitializerIndentWidth: 8 +ContinuationIndentWidth: 8 +IncludeCategories: + - Regex: '^"' + Priority: 1 + - Regex: '^<(engine|game|mastersrv|versionsrv>' + Priority: 2 + - Regex: '.*' + Priority: 3 +IncludeIsMainRegex: '$' +IndentWidth: 8 +KeepEmptyLinesAtTheStartOfBlocks: false +PointerAlignment: Right +ReflowComments: true +SpaceBeforeParens: Never +SpaceAfterTemplateKeyword: false +TabWidth: 8 +UseTab: ForContinuationAndIndentation +... diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml new file mode 100644 index 000000000..b9e0ae859 --- /dev/null +++ b/.github/workflows/build.yaml @@ -0,0 +1,133 @@ +name: Build + +on: + push: + branches-ignore: + - staging.tmp + - trying.tmp + - staging-squash-merge.tmp + pull_request: + +jobs: + build-cmake: + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, macOS-latest, windows-latest, ubuntu-16.04] + include: + - os: ubuntu-latest + cmake-args: -G "Unix Makefiles" + build-args: --parallel + package-file: DDNet-*-linux_x86_64.tar.xz + fancy: true + env: + CFLAGS: -Wdeclaration-after-statement -Werror + CXXFLAGS: -Werror + - os: ubuntu-16.04 + cmake-path: /usr/bin/ + cmake-args: -G "Unix Makefiles" + package-file: DDNet-*-linux_x86_64.tar.xz + fancy: false + env: + CFLAGS: -Wdeclaration-after-statement -Werror + CXXFLAGS: -Werror + - os: macOS-latest + cmake-args: -G "Unix Makefiles" + build-args: --parallel + package-file: DDNet-*-osx.dmg + fancy: false + env: + CFLAGS: -Wdeclaration-after-statement -Werror + CXXFLAGS: -Werror + - os: windows-latest + cmake-args: -G "Visual Studio 16 2019" -A x64 + package-file: DDNet-*-win64.zip + fancy: false + env: + CFLAGS: /WX + CXXFLAGS: /WX + LDFLAGS: /WX + + steps: + - uses: actions/checkout@v2 + - name: Checkout submodules + shell: bash + run: | + auth_header="$(git config --local --get http.https://github.com/.extraheader)" + git submodule sync --recursive + git -c "http.extraheader=$auth_header" -c protocol.version=2 submodule update --init --force --recursive --depth=1 + + - name: Prepare Linux + if: contains(matrix.os, 'ubuntu') + run: | + sudo apt-get update -y + sudo apt-get install pkg-config cmake libfreetype6-dev libnotify-dev libsdl2-dev libsqlite3-dev -y + + - name: Prepare Linux (fancy) + if: contains(matrix.os, 'ubuntu') && matrix.fancy + run: | + sudo apt-get install libboost-dev libmariadbclient-dev libmysqlcppconn-dev libwebsockets-dev -y + + - name: Prepare MacOS + if: contains(matrix.os, 'macOS') + run: | + brew update + brew install pkg-config sdl2 + brew upgrade freetype + sudo rm -rf /Library/Developer/CommandLineTools + + - name: Build in debug mode + env: ${{ matrix.env }} + run: | + mkdir debug + cd debug + ${{ matrix.cmake-path }}cmake --version + ${{ matrix.cmake-path }}cmake ${{ matrix.cmake-args }} -DCMAKE_BUILD_TYPE=Debug -Werror=dev -DDOWNLOAD_GTEST=ON -DDEV=ON -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG=. .. + ${{ matrix.cmake-path }}cmake --build . --config Debug ${{ matrix.build-args }} --target everything + - name: Test debug + run: | + cd debug + ${{ matrix.cmake-path }}cmake --build . --config Debug ${{ matrix.build-args }} --target run_tests + ./DDNet-Server shutdown + + - name: Build in release mode + env: ${{ matrix.env }} + run: | + mkdir release + cd release + ${{ matrix.cmake-path }}cmake ${{ matrix.cmake-args }} -DCMAKE_BUILD_TYPE=Release -Werror=dev -DDOWNLOAD_GTEST=ON -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE=. .. + ${{ matrix.cmake-path }}cmake --build . --config Release ${{ matrix.build-args }} --target everything + - name: Test release + run: | + cd release + ${{ matrix.cmake-path }}cmake --build . --config Release ${{ matrix.build-args }} --target run_tests + ./DDNet-Server shutdown + + - name: Build in release mode with debug info and all features on + if: matrix.fancy + env: ${{ matrix.env }} + run: | + mkdir fancy + cd fancy + ${{ matrix.cmake-path }}cmake ${{ matrix.cmake-args }} -DCMAKE_BUILD_TYPE=RelWithDebInfo -DANTIBOT=ON -DMYSQL=ON -DWEBSOCKETS=ON .. + ${{ matrix.cmake-path }}cmake --build . --config RelWithDebInfo ${{ matrix.build-args }} --target everything + - name: Test fancy + if: matrix.fancy + run: | + cd release + ${{ matrix.cmake-path }}cmake --build . --config RelWithDebInfo ${{ matrix.build-args }} --target run_tests + ./DDNet-Server shutdown + + - name: Package + run: | + cd release + ${{ matrix.cmake-path }}cmake --build . --config Release ${{ matrix.build-args }} --target package_default + mkdir artifacts + mv ${{ matrix.package-file }} artifacts + + - name: Upload Artifacts + uses: actions/upload-artifact@v1 + with: + name: ddnet-${{ matrix.os }} + path: release/artifacts diff --git a/.github/workflows/style.yml b/.github/workflows/style.yml new file mode 100644 index 000000000..a883caaa3 --- /dev/null +++ b/.github/workflows/style.yml @@ -0,0 +1,27 @@ +name: Check style + +on: + push: + branches-ignore: + - master + - staging.tmp + - trying.tmp + - staging-squash-merge.tmp + pull_request: + +jobs: + check-style: + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@v2 + with: + fetch-depth: 0 + - name: Install clang-format + run: | + sudo apt-get update -y + sudo apt-get install clang-format -y + - name: Check style + run: | + clang-format -version + scripts/fix_style.py --dry-run --base origin/master + scripts/check_header_guards.py diff --git a/.gitignore b/.gitignore index dc789a31b..262c6618e 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,8 @@ data/ !/data/ +docs/ + bundle/ !/other/bundle/ @@ -38,12 +40,14 @@ testrunner\[1\]_include.cmake DDNet DDNet-Server DDNet-Server-Launcher +libsteam_api.a config_retrieve config_store crapnet dilate dummy_map fake_server +map_convert_07 map_diff map_extract map_replace_image @@ -52,10 +56,6 @@ map_version mastersrv packetgen testrunner -tileset_borderadd -tileset_borderfix -tileset_borderrem -tileset_borderset twping unicode_confusables uuid @@ -97,6 +97,8 @@ tags *.res *.sdf *.sln +*.so +*.sqlite *.suo *.swp *.tar.gz diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index cfc309195..000000000 --- a/.travis.yml +++ /dev/null @@ -1,35 +0,0 @@ -language: c++ -sudo: false -dist: trusty -os: -- linux -- osx -addons: - apt: - packages: - - libfreetype6-dev - - libgtest-dev - - libsdl2-dev -script: -- python scripts/check_header_guards.py -- if [ "$TRAVIS_OS_NAME" = "osx" ]; then CMAKE_EXTRA_ARGS="-DDOWNLOAD_GTEST=ON -DDEV=ON"; fi -- if [ "$TRAVIS_OS_NAME" != "osx" ]; then CMAKE_EXTRA_ARGS="-DGTEST_LIBRARY=../gtest_build/libgtest.a -DGTEST_MAIN_LIBRARY=../gtest_build/libgtest_main.a"; mkdir gtest_build; cmake -E chdir gtest_build cmake /usr/src/gtest; cmake --build gtest_build; fi -- mkdir build; cd build -- cmake -Werror=dev -DCMAKE_INSTALL_PREFIX=/usr $CMAKE_EXTRA_ARGS .. -- make everything -- make run_tests -- if [ "$TRAVIS_OS_NAME" != "osx" ]; then make DESTDIR=install install; test -x install/bin/DDNet; test -x install/bin/DDNet-Server; test -d install/bin/data; test -d install/usr/lib; fi -- make package_default -- cd ..; mkdir build_debug; cd build_debug -- cmake -Werror=dev -DCMAKE_BUILD_TYPE=Debug $CMAKE_EXTRA_ARGS .. -- make run_tests -- cd .. -- build/DDNet-Server shutdown -env: - global: - - CFLAGS="-Wdeclaration-after-statement -Werror" - - CXXFLAGS="-Werror" -branches: - except: - - staging.tmp - - testing.tmp diff --git a/CMakeLists.txt b/CMakeLists.txt index 504a74047..ec9912fbc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,10 @@ cmake_minimum_required(VERSION 2.8) +set(CMAKE_OSX_DEPLOYMENT_TARGET 10.9 CACHE INTERNAL "") +if(CMAKE_OSX_DEPLOYMENT_TARGET VERSION_LESS 10.9) + message(WARNING "Building for macOS <= 10.9 is not supported") +endif() + file(STRINGS src/game/version.h VERSION_LINE LIMIT_COUNT 1 REGEX "^#define GAME_RELEASE_VERSION " @@ -17,6 +22,14 @@ else() message(FATAL_ERROR "Couldn't parse version from src/game/version.h") endif() +if(POLICY CMP0017) + cmake_policy(SET CMP0017 NEW) +endif() + +if(POLICY CMP0042) + cmake_policy(SET CMP0042 NEW) +endif() + if(POLICY CMP0048) cmake_policy(SET CMP0048 NEW) if(VERSION_PATCH STREQUAL "0") @@ -42,10 +55,10 @@ set(ORIGINAL_CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES}) set(OWN_CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/cmake) set(CMAKE_MODULE_PATH ${OWN_CMAKE_MODULE_PATH}) -if(CMAKE_SIZEOF_VOID_P EQUAL 8) - set(TARGET_BITS "64") -elseif(CMAKE_SIZEOF_VOID_P EQUAL 4) +if(CMAKE_SIZEOF_VOID_P EQUAL 4) set(TARGET_BITS "32") +else() + set(TARGET_BITS "64") endif() if(CMAKE_SYSTEM_NAME STREQUAL "Windows") @@ -68,19 +81,20 @@ else() endif() set(AUTO_DEPENDENCIES_DEFAULT OFF) -set(AUTOUPDATE_DEFAULT OFF) if(TARGET_OS STREQUAL "windows") set(AUTO_DEPENDENCIES_DEFAULT ON) - set(AUTOUPDATE_DEFAULT ON) elseif(TARGET_OS STREQUAL "linux") - set(AUTOUPDATE_DEFAULT ON) endif() option(WEBSOCKETS "Enable websockets support" OFF) option(MYSQL "Enable mysql support" OFF) -option(AUTOUPDATE "Enable the autoupdater" ${AUTOUPDATE_DEFAULT}) +option(AUTOUPDATE "Enable the autoupdater" OFF) +option(VIDEORECORDER "Enable video recording support via FFmpeg" OFF) +option(UPNP "Enable UPnP support" OFF) +option(ANTIBOT "Enable support for a dynamic anticheat library" OFF) option(CLIENT "Compile client" ON) option(DOWNLOAD_GTEST "Download and compile GTest" ${AUTO_DEPENDENCIES_DEFAULT}) +option(STEAM "Build the Steam release version" OFF) option(PREFER_BUNDLED_LIBS "Prefer bundled libraries over system libraries" ${AUTO_DEPENDENCIES_DEFAULT}) option(DEV "Don't generate stuff necessary for packaging" OFF) @@ -155,14 +169,17 @@ if(NOT MSVC) # Inaccurate floating point numbers cause problems on mingw-w64-gcc when # compiling for x86, might cause problems elsewhere. So don't store floats # in registers but keep them at higher accuracy. - if(TARGET_ARCH STREQUAL "x86") add_c_compiler_flag_if_supported(OUR_FLAGS -ffloat-store) endif() + # Don't insert timestamps into PEs to keep the build reproducible. + if(TARGET_OS STREQUAL "windows") + add_c_compiler_flag_if_supported(OUR_FLAGS_LINK -Wl,--no-insert-timestamp) + endif() + if(TARGET_OS STREQUAL "mac") add_c_compiler_flag_if_supported(OUR_FLAGS -stdlib=libc++) - add_c_compiler_flag_if_supported(OUR_FLAGS -mmacosx-version-min=10.7) endif() add_c_compiler_flag_if_supported(OUR_FLAGS_OWN -Wall) @@ -177,6 +194,7 @@ if(NOT MSVC) add_c_compiler_flag_if_supported(OUR_FLAGS_OWN -Wno-missing-field-initializers) add_c_compiler_flag_if_supported(OUR_FLAGS_OWN -Wformat=2) # Warn about format strings. add_c_compiler_flag_if_supported(OUR_FLAGS_DEP -Wno-implicit-function-declaration) + add_c_compiler_flag_if_supported(OUR_FLAGS_OWN -Wno-nullability-completeness) # Mac OS build on github add_c_compiler_flag_if_supported(OUR_FLAGS_OWN -Wduplicated-cond) add_c_compiler_flag_if_supported(OUR_FLAGS_OWN -Wduplicated-branches) add_c_compiler_flag_if_supported(OUR_FLAGS_OWN -Wlogical-op) @@ -193,8 +211,12 @@ endif() # COMMON FUNCTIONS ######################################################################## -function(set_glob VAR GLOBBING DIRECTORY) # ... - file(${GLOBBING} GLOB_RESULT "${DIRECTORY}/*.c" "${DIRECTORY}/*.cpp" "${DIRECTORY}/*.h") +function(set_glob VAR GLOBBING EXTS DIRECTORY) # ... + set(GLOBS) + foreach(ext ${EXTS}) + list(APPEND GLOBS "${DIRECTORY}/*.${ext}") + endforeach() + file(${GLOBBING} GLOB_RESULT ${GLOBS}) list(SORT GLOB_RESULT) set(FILES) foreach(file ${ARGN}) @@ -232,6 +254,28 @@ function(set_glob VAR GLOBBING DIRECTORY) # ... set(${VAR} ${FILES} PARENT_SCOPE) endfunction() +function(set_src VAR GLOBBING DIRECTORY) # ... + set_glob(${VAR} ${GLOBBING} "c;cpp;h" ${DIRECTORY} ${ARGN}) + set(${VAR} ${${VAR}} PARENT_SCOPE) +endfunction() + +function(set_own_rpath TARGET) + if(NOT TARGET_OS STREQUAL "windows" AND NOT TARGET_OS STREQUAL "mac") + if(CMAKE_VERSION VERSION_GREATER 3.14 OR CMAKE_VERSION VERSION_EQUAL 3.14) + set_property(TARGET ${TARGET} PROPERTY BUILD_RPATH_USE_ORIGIN TRUE) + elseif(CMAKE_VERSION VERSION_GREATER 3.8 OR CMAKE_VERSION VERSION_EQUAL 3.8) + set_property(TARGET ${TARGET} PROPERTY BUILD_RPATH "$ORIGIN") + endif() + set_property(TARGET ${TARGET} PROPERTY INSTALL_RPATH "$ORIGIN/../lib/ddnet") + endif() +endfunction() + +if(NOT TARGET_OS STREQUAL "windows" AND NOT TARGET_OS STREQUAL "mac" AND CMAKE_VERSION VERSION_LESS 3.8) + if((CLIENT AND STEAM) OR ANTIBOT) + message(STATUS "Can't set BUILD_RPATH in CMake before 3.8, pass -Wl,-rpath,'$ORIGIN' manually if you wish to emulate this. Or just install a newer version of CMake...") + endif() +endif() + ######################################################################## # INITIALIZE TARGET LISTS ######################################################################## @@ -296,12 +340,18 @@ endif() find_package(ZLIB) find_package(Crypto) find_package(Curl) -find_package(OwnFreetype) +if(VIDEORECORDER) + find_package(FFMPEG) +endif() +find_package(Freetype) if(DOWNLOAD_GTEST) find_package(Git) endif() find_package(GLEW) find_package(GTest) +if(UPNP) + find_package(Miniupnpc) +endif() if(MYSQL) find_package(MySQL) else() @@ -311,8 +361,9 @@ find_package(Ogg) find_package(Opus) find_package(Opusfile) find_package(Pnglite) -find_package(PythonInterp) +find_package(PythonInterp 3) find_package(SDL2) +find_package(SQLite3) find_package(Threads) find_package(Wavpack) if(WEBSOCKETS) @@ -324,6 +375,7 @@ endif() if(TARGET_OS AND TARGET_OS STREQUAL "mac") + find_program(CMAKE_OTOOL otool) find_program(DMG dmg) find_program(HFSPLUS hfsplus) find_program(NEWFS_HFS newfs_hfs) @@ -334,10 +386,19 @@ if(TARGET_OS AND TARGET_OS STREQUAL "mac") endif() find_program(HDIUTIL hdiutil) + if(HDIUTIL) + set(HDIUTIL_FOUND ON) + else() + set(HDIUTIL_FOUND OFF) + endif() endif() message(STATUS "******** DDNet ********") -message(STATUS "Target OS: ${TARGET_OS} ${TARGET_BITS}bit") +if(NOT TARGET_OS STREQUAL "mac") + message(STATUS "Target OS: ${TARGET_OS} ${TARGET_BITS}bit") +else() + message(STATUS "Target OS: ${TARGET_OS} ${TARGET_BITS}bit (SDK: ${CMAKE_OSX_SYSROOT})") +endif() message(STATUS "Compiler: ${CMAKE_CXX_COMPILER}") message(STATUS "Build type: ${CMAKE_BUILD_TYPE}") @@ -358,6 +419,9 @@ show_dependency_status("Curl" CURL) if(TARGET_OS AND TARGET_OS STREQUAL "mac") show_dependency_status("Dmg tools" DMGTOOLS) endif() +if(VIDEORECORDER) + show_dependency_status("FFmpeg" FFMPEG) +endif() show_dependency_status("Freetype" FREETYPE) if(DOWNLOAD_GTEST) show_dependency_status("Git" GIT) @@ -367,6 +431,9 @@ show_dependency_status("GTest" GTEST) if(TARGET_OS AND TARGET_OS STREQUAL "mac") show_dependency_status("Hdiutil" HDIUTIL) endif() +if(UPNP) + show_dependency_status("Miniupnpc" MINIUPNPC) +endif() if(MYSQL) show_dependency_status("MySQL" MYSQL) endif() @@ -377,6 +444,7 @@ show_dependency_status("Opusfile" OPUSFILE) show_dependency_status("Pnglite" PNGLITE) show_dependency_status("PythonInterp" PYTHONINTERP) show_dependency_status("SDL2" SDL2) +show_dependency_status("SQLite3" SQLite3) show_dependency_status("Wavpack" WAVPACK) show_dependency_status("Zlib" ZLIB) if(WEBSOCKETS) @@ -389,6 +457,9 @@ endif() if(NOT(PYTHONINTERP_FOUND)) message(SEND_ERROR "You must install Python to compile DDNet") endif() +if(NOT(SQLite3_FOUND)) + message(SEND_ERROR "You must install SQLite3 to compile DDNet") +endif() if(MYSQL AND NOT(MYSQL_FOUND)) message(SEND_ERROR "You must install MySQL to compile the DDNet server with MySQL support") @@ -398,6 +469,10 @@ if(WEBSOCKETS AND NOT(WEBSOCKETS_FOUND)) message(SEND_ERROR "You must install libwebsockets to compile the DDNet server with websocket support") endif() +if(UPNP AND NOT(MINIUPNPC_FOUND)) + message(SEND_ERROR "You must install miniupnpc to compile the DDNet server with UPnP support") +endif() + if(CLIENT AND NOT(FREETYPE_FOUND)) message(SEND_ERROR "You must install Freetype to compile the DDNet client") endif() @@ -428,7 +503,7 @@ endif() if(TARGET_OS STREQUAL "windows") set(PLATFORM_CLIENT) - set(PLATFORM_CLIENT_LIBS opengl32 glu32 winmm) + set(PLATFORM_CLIENT_LIBS opengl32 winmm) set(PLATFORM_LIBS ws2_32) # Windows sockets elseif(TARGET_OS STREQUAL "mac") find_library(CARBON Carbon) @@ -436,19 +511,18 @@ elseif(TARGET_OS STREQUAL "mac") find_library(OPENGL OpenGL) find_library(SECURITY Security) set(PLATFORM_CLIENT - src/osx/notification.h - src/osx/notification.mm - src/osxlaunch/client.h + src/osx/notifications.mm src/osxlaunch/client.m ) set(PLATFORM_CLIENT_LIBS ${COCOA} ${OPENGL}) set(PLATFORM_LIBS ${CARBON} ${SECURITY}) else() - set(PLATFORM_CLIENT) + find_package(Notify) find_package(OpenGL) find_package(X11) - set(PLATFORM_CLIENT_LIBS ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} ${X11_X11_LIB}) - set(PLATFORM_CLIENT_INCLUDE_DIRS ${OPENGL_INCLUDE_DIR} ${X11_X11_INCLUDE_PATH}) + set(PLATFORM_CLIENT_LIBS ${OPENGL_gl_LIBRARY} ${X11_X11_LIB} ${NOTIFY_LIBRARIES}) + set(PLATFORM_CLIENT_INCLUDE_DIRS ${OPENGL_INCLUDE_DIR} ${X11_X11_INCLUDE_PATH} ${NOTIFY_INCLUDE_DIRS}) + set(PLATFORM_CLIENT) if(TARGET_OS STREQUAL "linux") set(PLATFORM_LIBS rt) # clock_gettime for glibc < 2.17 else() @@ -512,11 +586,10 @@ endif() # DEPENDENCY COMPILATION ######################################################################## -# Static dependencies -set_glob(DEP_JSON_SRC GLOB src/engine/external/json-parser json.c json.h) +set_src(DEP_JSON_SRC GLOB src/engine/external/json-parser json.c json.h) add_library(json EXCLUDE_FROM_ALL OBJECT ${DEP_JSON_SRC}) -set_glob(DEP_MD5_SRC GLOB src/engine/external/md5 md5.c md5.h) +set_src(DEP_MD5_SRC GLOB src/engine/external/md5 md5.c md5.h) add_library(md5 EXCLUDE_FROM_ALL OBJECT ${DEP_MD5_SRC}) list(APPEND TARGETS_DEP json md5) @@ -526,16 +599,703 @@ if(NOT CRYPTO_FOUND) set(DEP_MD5 $) endif() +######################################################################## +# DATA +######################################################################## + +set(EXPECTED_DATA + arrow.png + audio/foley_body_impact-01.wv + audio/foley_body_impact-02.wv + audio/foley_body_impact-03.wv + audio/foley_body_splat-01.wv + audio/foley_body_splat-02.wv + audio/foley_body_splat-03.wv + audio/foley_body_splat-04.wv + audio/foley_dbljump-01.wv + audio/foley_dbljump-02.wv + audio/foley_dbljump-03.wv + audio/foley_foot_left-01.wv + audio/foley_foot_left-02.wv + audio/foley_foot_left-03.wv + audio/foley_foot_left-04.wv + audio/foley_foot_right-01.wv + audio/foley_foot_right-02.wv + audio/foley_foot_right-03.wv + audio/foley_foot_right-04.wv + audio/foley_land-01.wv + audio/foley_land-02.wv + audio/foley_land-03.wv + audio/foley_land-04.wv + audio/hook_attach-01.wv + audio/hook_attach-02.wv + audio/hook_attach-03.wv + audio/hook_loop-01.wv + audio/hook_loop-02.wv + audio/hook_noattach-01.wv + audio/hook_noattach-02.wv + audio/hook_noattach-03.wv + audio/music_menu.wv + audio/sfx_ctf_cap_pl.wv + audio/sfx_ctf_drop.wv + audio/sfx_ctf_grab_en.wv + audio/sfx_ctf_grab_pl.wv + audio/sfx_ctf_rtn.wv + audio/sfx_hit_strong-01.wv + audio/sfx_hit_strong-02.wv + audio/sfx_hit_weak-01.wv + audio/sfx_hit_weak-02.wv + audio/sfx_hit_weak-03.wv + audio/sfx_msg-client.wv + audio/sfx_msg-highlight.wv + audio/sfx_msg-server.wv + audio/sfx_pickup_arm-01.wv + audio/sfx_pickup_arm-02.wv + audio/sfx_pickup_arm-03.wv + audio/sfx_pickup_arm-04.wv + audio/sfx_pickup_gun.wv + audio/sfx_pickup_hrt-01.wv + audio/sfx_pickup_hrt-02.wv + audio/sfx_pickup_launcher.wv + audio/sfx_pickup_ninja.wv + audio/sfx_pickup_sg.wv + audio/sfx_skid-01.wv + audio/sfx_skid-02.wv + audio/sfx_skid-03.wv + audio/sfx_skid-04.wv + audio/sfx_spawn_wpn-01.wv + audio/sfx_spawn_wpn-02.wv + audio/sfx_spawn_wpn-03.wv + audio/vo_teefault_cry-01.wv + audio/vo_teefault_cry-02.wv + audio/vo_teefault_ninja-01.wv + audio/vo_teefault_ninja-02.wv + audio/vo_teefault_ninja-03.wv + audio/vo_teefault_ninja-04.wv + audio/vo_teefault_pain_long-01.wv + audio/vo_teefault_pain_long-02.wv + audio/vo_teefault_pain_short-01.wv + audio/vo_teefault_pain_short-02.wv + audio/vo_teefault_pain_short-03.wv + audio/vo_teefault_pain_short-04.wv + audio/vo_teefault_pain_short-05.wv + audio/vo_teefault_pain_short-06.wv + audio/vo_teefault_pain_short-07.wv + audio/vo_teefault_pain_short-08.wv + audio/vo_teefault_pain_short-09.wv + audio/vo_teefault_pain_short-10.wv + audio/vo_teefault_pain_short-11.wv + audio/vo_teefault_pain_short-12.wv + audio/vo_teefault_sledge-01.wv + audio/vo_teefault_sledge-02.wv + audio/vo_teefault_sledge-03.wv + audio/vo_teefault_spawn-01.wv + audio/vo_teefault_spawn-02.wv + audio/vo_teefault_spawn-03.wv + audio/vo_teefault_spawn-04.wv + audio/vo_teefault_spawn-05.wv + audio/vo_teefault_spawn-06.wv + audio/vo_teefault_spawn-07.wv + audio/wp_flump_explo-01.wv + audio/wp_flump_explo-02.wv + audio/wp_flump_explo-03.wv + audio/wp_flump_launch-01.wv + audio/wp_flump_launch-02.wv + audio/wp_flump_launch-03.wv + audio/wp_gun_fire-01.wv + audio/wp_gun_fire-02.wv + audio/wp_gun_fire-03.wv + audio/wp_hammer_hit-01.wv + audio/wp_hammer_hit-02.wv + audio/wp_hammer_hit-03.wv + audio/wp_hammer_swing-01.wv + audio/wp_hammer_swing-02.wv + audio/wp_hammer_swing-03.wv + audio/wp_laser_bnce-01.wv + audio/wp_laser_bnce-02.wv + audio/wp_laser_bnce-03.wv + audio/wp_laser_fire-01.wv + audio/wp_laser_fire-02.wv + audio/wp_laser_fire-03.wv + audio/wp_ninja_attack-01.wv + audio/wp_ninja_attack-02.wv + audio/wp_ninja_attack-03.wv + audio/wp_ninja_attack-04.wv + audio/wp_ninja_hit-01.wv + audio/wp_ninja_hit-02.wv + audio/wp_ninja_hit-03.wv + audio/wp_ninja_hit-04.wv + audio/wp_noammo-01.wv + audio/wp_noammo-02.wv + audio/wp_noammo-03.wv + audio/wp_noammo-04.wv + audio/wp_noammo-05.wv + audio/wp_shotty_fire-01.wv + audio/wp_shotty_fire-02.wv + audio/wp_shotty_fire-03.wv + audio/wp_switch-01.wv + audio/wp_switch-02.wv + audio/wp_switch-03.wv + blob.png + browse_icons.png + console.png + console_bar.png + countryflags/AD.png + countryflags/AE.png + countryflags/AF.png + countryflags/AG.png + countryflags/AI.png + countryflags/AL.png + countryflags/AM.png + countryflags/AO.png + countryflags/AR.png + countryflags/AS.png + countryflags/AT.png + countryflags/AU.png + countryflags/AW.png + countryflags/AX.png + countryflags/AZ.png + countryflags/BA.png + countryflags/BB.png + countryflags/BD.png + countryflags/BE.png + countryflags/BF.png + countryflags/BG.png + countryflags/BH.png + countryflags/BI.png + countryflags/BJ.png + countryflags/BL.png + countryflags/BM.png + countryflags/BN.png + countryflags/BO.png + countryflags/BR.png + countryflags/BS.png + countryflags/BT.png + countryflags/BW.png + countryflags/BY.png + countryflags/BZ.png + countryflags/CA.png + countryflags/CC.png + countryflags/CD.png + countryflags/CF.png + countryflags/CG.png + countryflags/CH.png + countryflags/CI.png + countryflags/CK.png + countryflags/CL.png + countryflags/CM.png + countryflags/CN.png + countryflags/CO.png + countryflags/CR.png + countryflags/CU.png + countryflags/CV.png + countryflags/CW.png + countryflags/CX.png + countryflags/CY.png + countryflags/CZ.png + countryflags/DE.png + countryflags/DJ.png + countryflags/DK.png + countryflags/DM.png + countryflags/DO.png + countryflags/DZ.png + countryflags/EC.png + countryflags/EE.png + countryflags/EG.png + countryflags/EH.png + countryflags/ER.png + countryflags/ES.png + countryflags/ET.png + countryflags/FI.png + countryflags/FJ.png + countryflags/FK.png + countryflags/FM.png + countryflags/FO.png + countryflags/FR.png + countryflags/GA.png + countryflags/GB.png + countryflags/GD.png + countryflags/GE.png + countryflags/GF.png + countryflags/GG.png + countryflags/GH.png + countryflags/GI.png + countryflags/GL.png + countryflags/GM.png + countryflags/GN.png + countryflags/GP.png + countryflags/GQ.png + countryflags/GR.png + countryflags/GS.png + countryflags/GT.png + countryflags/GU.png + countryflags/GW.png + countryflags/GY.png + countryflags/HK.png + countryflags/HN.png + countryflags/HR.png + countryflags/HT.png + countryflags/HU.png + countryflags/ID.png + countryflags/IE.png + countryflags/IL.png + countryflags/IM.png + countryflags/IN.png + countryflags/IO.png + countryflags/IQ.png + countryflags/IR.png + countryflags/IS.png + countryflags/IT.png + countryflags/JE.png + countryflags/JM.png + countryflags/JO.png + countryflags/JP.png + countryflags/KE.png + countryflags/KG.png + countryflags/KH.png + countryflags/KI.png + countryflags/KM.png + countryflags/KN.png + countryflags/KP.png + countryflags/KR.png + countryflags/KW.png + countryflags/KY.png + countryflags/KZ.png + countryflags/LA.png + countryflags/LB.png + countryflags/LC.png + countryflags/LI.png + countryflags/LK.png + countryflags/LR.png + countryflags/LS.png + countryflags/LT.png + countryflags/LU.png + countryflags/LV.png + countryflags/LY.png + countryflags/MA.png + countryflags/MC.png + countryflags/MD.png + countryflags/ME.png + countryflags/MF.png + countryflags/MG.png + countryflags/MH.png + countryflags/MK.png + countryflags/ML.png + countryflags/MM.png + countryflags/MN.png + countryflags/MO.png + countryflags/MP.png + countryflags/MQ.png + countryflags/MR.png + countryflags/MS.png + countryflags/MT.png + countryflags/MU.png + countryflags/MV.png + countryflags/MW.png + countryflags/MX.png + countryflags/MY.png + countryflags/MZ.png + countryflags/NA.png + countryflags/NC.png + countryflags/NE.png + countryflags/NF.png + countryflags/NG.png + countryflags/NI.png + countryflags/NL.png + countryflags/NO.png + countryflags/NP.png + countryflags/NR.png + countryflags/NU.png + countryflags/NZ.png + countryflags/OM.png + countryflags/PA.png + countryflags/PE.png + countryflags/PF.png + countryflags/PG.png + countryflags/PH.png + countryflags/PK.png + countryflags/PL.png + countryflags/PM.png + countryflags/PN.png + countryflags/PR.png + countryflags/PS.png + countryflags/PT.png + countryflags/PW.png + countryflags/PY.png + countryflags/QA.png + countryflags/RE.png + countryflags/RO.png + countryflags/RS.png + countryflags/RU.png + countryflags/RW.png + countryflags/SA.png + countryflags/SB.png + countryflags/SC.png + countryflags/SD.png + countryflags/SE.png + countryflags/SG.png + countryflags/SH.png + countryflags/SI.png + countryflags/SK.png + countryflags/SL.png + countryflags/SM.png + countryflags/SN.png + countryflags/SO.png + countryflags/SR.png + countryflags/SS.png + countryflags/ST.png + countryflags/SV.png + countryflags/SX.png + countryflags/SY.png + countryflags/SZ.png + countryflags/TC.png + countryflags/TD.png + countryflags/TF.png + countryflags/TG.png + countryflags/TH.png + countryflags/TJ.png + countryflags/TK.png + countryflags/TL.png + countryflags/TM.png + countryflags/TN.png + countryflags/TO.png + countryflags/TR.png + countryflags/TT.png + countryflags/TV.png + countryflags/TW.png + countryflags/TZ.png + countryflags/UA.png + countryflags/UG.png + countryflags/US.png + countryflags/UY.png + countryflags/UZ.png + countryflags/VA.png + countryflags/VC.png + countryflags/VE.png + countryflags/VG.png + countryflags/VI.png + countryflags/VN.png + countryflags/VU.png + countryflags/WF.png + countryflags/WS.png + countryflags/XCA.png + countryflags/XEN.png + countryflags/XEU.png + countryflags/XNI.png + countryflags/XSC.png + countryflags/XWA.png + countryflags/YE.png + countryflags/ZA.png + countryflags/ZM.png + countryflags/ZW.png + countryflags/default.png + countryflags/index.txt + debug_font.png + demo_buttons.png + demo_buttons2.png + editor/audio_source.png + editor/background.png + editor/basic_freeze.rules + editor/checker.png + editor/cursor.png + editor/ddmax_freeze.rules + editor/ddnet_tiles.rules + editor/ddnet_walls.rules + editor/desert_main.rules + editor/entities/DDNet.png + editor/entities/FNG.png + editor/entities/Race.png + editor/entities/Vanilla.png + editor/entities/blockworlds.png + editor/entities_clear/blockworlds.png + editor/entities_clear/ddnet.png + editor/entities_clear/ddrace.png + editor/entities_clear/fng.png + editor/entities_clear/race.png + editor/entities_clear/vanilla.png + editor/fadeout.rules + editor/front.png + editor/generic_clear.rules + editor/generic_unhookable.rules + editor/generic_unhookable_0.7.rules + editor/grass_main.rules + editor/grass_main_0.7.rules + editor/jungle_main.rules + editor/jungle_midground.rules + editor/round_tiles.rules + editor/speed_arrow.png + editor/speedup.png + editor/switch.png + editor/tele.png + editor/tune.png + editor/water.rules + editor/winter_main.rules + emoticons.png + file_icons.png + fonts/DejaVuSans.ttf + fonts/Icons.ttf + fonts/SourceHanSansSC-Regular.otf + game.png + gui_buttons.png + gui_cursor.png + gui_icons.png + gui_logo.png + languages/belarusian.txt + languages/bosnian.txt + languages/brazilian_portuguese.txt + languages/bulgarian.txt + languages/catalan.txt + languages/chuvash.txt + languages/czech.txt + languages/danish.txt + languages/dutch.txt + languages/finnish.txt + languages/french.txt + languages/german.txt + languages/greek.txt + languages/hungarian.txt + languages/index.txt + languages/italian.txt + languages/japanese.txt + languages/korean.txt + languages/kyrgyz.txt + languages/license.txt + languages/norwegian.txt + languages/persian.txt + languages/polish.txt + languages/portuguese.txt + languages/romanian.txt + languages/russian.txt + languages/serbian.txt + languages/simplified_chinese.txt + languages/slovak.txt + languages/spanish.txt + languages/swedish.txt + languages/traditional_chinese.txt + languages/turkish.txt + languages/ukrainian.txt + mapres/basic_freeze.png + mapres/bg_cloud1.png + mapres/bg_cloud2.png + mapres/bg_cloud3.png + mapres/ddmax_freeze.png + mapres/ddnet_start.png + mapres/ddnet_tiles.png + mapres/ddnet_walls.png + mapres/desert_background.png + mapres/desert_doodads.png + mapres/desert_main.png + mapres/desert_mountains.png + mapres/desert_mountains2.png + mapres/desert_mountains_new_background.png + mapres/desert_mountains_new_foreground.png + mapres/desert_sun.png + mapres/entities.png + mapres/fadeout.png + mapres/font_teeworlds.png + mapres/font_teeworlds_alt.png + mapres/generic_clear.png + mapres/generic_deathtiles.png + mapres/generic_lamps.png + mapres/generic_unhookable.png + mapres/generic_unhookable_0.7.png + mapres/grass_doodads.png + mapres/grass_doodads_0.7.png + mapres/grass_main.png + mapres/grass_main_0.7.png + mapres/jungle_background.png + mapres/jungle_deathtiles.png + mapres/jungle_doodads.png + mapres/jungle_main.png + mapres/jungle_midground.png + mapres/jungle_unhookables.png + mapres/light.png + mapres/mixed_tiles.png + mapres/moon.png + mapres/mountains.png + mapres/round_tiles.png + mapres/snow.png + mapres/snow_mountain.png + mapres/stars.png + mapres/sun.png + mapres/water.png + mapres/winter_doodads.png + mapres/winter_main.png + mapres/winter_mountains.png + mapres/winter_mountains2.png + mapres/winter_mountains3.png + maps/Gold\ Mine.map + maps/ctf1.map + maps/ctf2.map + maps/ctf3.map + maps/ctf4.map + maps/ctf5.map + maps/ctf6.map + maps/ctf7.map + maps/dm1.map + maps/dm2.map + maps/dm6.map + maps/dm7.map + maps/dm8.map + maps/dm9.map + maps/license.txt + maps7/Gold\ Mine.map + maps7/readme.txt + menuimages/demos.png + menuimages/editor.png + menuimages/local_server.png + menuimages/play_game.png + menuimages/settings.png + particles.png + shader/pipeline.frag + shader/pipeline.vert + shader/prim.frag + shader/prim.vert + shader/quad.frag + shader/quad.vert + shader/sprite.frag + shader/sprite.vert + shader/spritemulti.frag + shader/spritemulti.vert + shader/text.frag + shader/text.vert + shader/tile.frag + shader/tile.vert + "skins/Ablush NeoN.png" + skins/Aoe4leg.png + "skins/Apish Coke.png" + "skins/Black Phantom heinrich5991.png" + "skins/Evil Puffi.png" + "skins/Flying Silex.png" + "skins/Hidden Assassin.png" + "skins/Irradiated Sunny.png" + "skins/Mobys Skull.png" + skins/PaladiN.png + skins/Terrorist.png + skins/antiantey.png + skins/beast.png + skins/blacktee.png + skins/bluekitty.png + skins/bluestripe.png + skins/bomb.png + skins/brownbear.png + skins/cammo.png + skins/cammostripes.png + skins/chinese_by_whis.png + skins/coala.png + skins/coala_bluekitty.png + skins/coala_bluestripe.png + skins/coala_cammo.png + skins/coala_cammostripes.png + skins/coala_default.png + skins/coala_limekitty.png + skins/coala_pinky.png + skins/coala_redbopp.png + skins/coala_redstripe.png + skins/coala_saddo.png + skins/coala_toptri.png + skins/coala_twinbop.png + skins/coala_twintri.png + skins/coala_warpaint.png + skins/coala_x_ninja.png + skins/default.png + skins/demonlimekitty.png + skins/dino.png + skins/dragon.png + skins/evil.png + skins/evilwolfe.png + skins/ghost.png + skins/ghostjtj.png + skins/giraffe.png + skins/greensward.png + skins/greyfox.png + skins/greyfox_2.png + skins/hammie-chew.png + skins/hammie-whis.png + skins/jeet.png + skins/kintaro_2.png + skins/kitty_bluestripe.png + skins/kitty_brownbear.png + skins/kitty_cammo.png + skins/kitty_cammostripes.png + skins/kitty_coala.png + skins/kitty_default.png + skins/kitty_pinky.png + skins/kitty_redbopp.png + skins/kitty_redstripe.png + skins/kitty_saddo.png + skins/kitty_toptri.png + skins/kitty_twinbop.png + skins/kitty_twintri.png + skins/kitty_warpaint.png + skins/kitty_x_ninja.png + skins/license.txt + skins/limekitty.png + skins/mermydon-coala.png + skins/mermydon.png + skins/mouse.png + skins/musmann.png + skins/nanami.png + skins/nanas.png + skins/nersif.png + skins/oldman.png + skins/oldschool.png + skins/penguin.png + skins/pinky.png + skins/random.png + skins/redbopp.png + skins/redstripe.png + skins/saddo.png + skins/santa_bluekitty.png + skins/santa_bluestripe.png + skins/santa_brownbear.png + skins/santa_cammo.png + skins/santa_cammostripes.png + skins/santa_coala.png + skins/santa_default.png + skins/santa_limekitty.png + skins/santa_pinky.png + skins/santa_redbopp.png + skins/santa_redstripe.png + skins/santa_saddo.png + skins/santa_toptri.png + skins/santa_twinbop.png + skins/santa_twintri.png + skins/santa_warpaint.png + skins/teerasta.png + skins/toptri.png + skins/twinbop.png + skins/twintri.png + skins/veteran.png + skins/voodoo_tee.png + skins/warpaint.png + skins/wartee.png + skins/whis.png + skins/x_ninja.png + skins/x_spec.png + wordlist.txt +) + +set_glob(DATA GLOB_RECURSE "frag;json;map;otf;png;rules;ttf;txt;vert;wv" data ${EXPECTED_DATA}) + ######################################################################## # COPY DATA AND DLLS ######################################################################## -file(COPY data DESTINATION .) +foreach(datafile ${DATA}) + file(RELATIVE_PATH OUT ${PROJECT_SOURCE_DIR}/data ${datafile}) + get_filename_component(DESTINATION data/${OUT} PATH) + file(MAKE_DIRECTORY ${DESTINATION}) + file(COPY ${datafile} DESTINATION ${DESTINATION}) +endforeach() set(COPY_FILES ${CURL_COPY_FILES} ${FREETYPE_COPY_FILES} ${OPUSFILE_COPY_FILES} ${SDL2_COPY_FILES} + ${SQLite3_COPY_FILES} + ${FFMPEG_COPY_FILES} + ${WEBSOCKETS_COPY_FILES} ) file(COPY ${COPY_FILES} DESTINATION .) @@ -556,9 +1316,40 @@ function(generate_source output_file script_parameter) ) endfunction() +function(generate_source7 output_file script_parameter) + add_custom_command(OUTPUT ${output_file} + COMMAND ${PYTHON_EXECUTABLE} -m datasrc.seven.compile ${script_parameter} + > "${PROJECT_BINARY_DIR}/${output_file}" + DEPENDS + datasrc/seven/compile.py + datasrc/seven/content.py + datasrc/seven/datatypes.py + datasrc/seven/network.py + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} + ) +endfunction() + +function(generate_maps output_file) + add_custom_command(OUTPUT ${output_file} + COMMAND ${PYTHON_EXECUTABLE} datasrc/crosscompile.py + > "${PROJECT_BINARY_DIR}/${output_file}" + DEPENDS + datasrc/compile.py + datasrc/content.py + datasrc/datatypes.py + datasrc/network.py + datasrc/seven/compile.py + datasrc/seven/content.py + datasrc/seven/datatypes.py + datasrc/seven/network.py + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} + ) +endfunction() + file(MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/src/game/generated/") execute_process(COMMAND git rev-parse --git-dir ERROR_QUIET + WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}" OUTPUT_VARIABLE PROJECT_GIT_DIR OUTPUT_STRIP_TRAILING_WHITESPACE RESULT_VARIABLE PROJECT_GIT_DIR_ERROR @@ -585,15 +1376,20 @@ generate_source("src/game/generated/protocol.h" "network_header") generate_source("src/game/generated/server_data.cpp" "server_content_source") generate_source("src/game/generated/server_data.h" "server_content_header") +generate_source7("src/game/generated/protocol7.cpp" "network_source") +generate_source7("src/game/generated/protocol7.h" "network_header") + +generate_maps("src/game/generated/protocolglue.h") ######################################################################## # SHARED ######################################################################## # Sources -set_glob(BASE GLOB_RECURSE src/base +set_src(BASE GLOB_RECURSE src/base color.h detect.h + dynamic.h hash.c hash.h hash_bundled.c @@ -617,7 +1413,8 @@ set_glob(BASE GLOB_RECURSE src/base unicode/tolower_data.h vmath.h ) -set_glob(ENGINE_INTERFACE GLOB src/engine +set_src(ENGINE_INTERFACE GLOB src/engine + antibot.h client.h config.h console.h @@ -636,12 +1433,13 @@ set_glob(ENGINE_INTERFACE GLOB src/engine server.h serverbrowser.h sound.h + steam.h storage.h textrender.h updater.h uuid.h ) -set_glob(ENGINE_SHARED GLOB src/engine/shared +set_src(ENGINE_SHARED GLOB src/engine/shared compression.cpp compression.h config.cpp @@ -649,6 +1447,8 @@ set_glob(ENGINE_SHARED GLOB src/engine/shared config_variables.h console.cpp console.h + csv.cpp + csv.h datafile.cpp datafile.h demo.cpp @@ -703,10 +1503,14 @@ set_glob(ENGINE_SHARED GLOB src/engine/shared teehistorian_ex_chunks.h uuid_manager.cpp uuid_manager.h + video.cpp + video.h websockets.cpp websockets.h ) -set_glob(GAME_SHARED GLOB src/game +set_src(GAME_SHARED GLOB src/game + bezier.cpp + bezier.h collision.cpp collision.h ddracecommands.h @@ -726,6 +1530,8 @@ set_glob(GAME_SHARED GLOB src/game mapitems_ex.cpp mapitems_ex.h mapitems_ex_types.h + prng.cpp + prng.h teamscore.cpp teamscore.h tuning.h @@ -736,6 +1542,9 @@ set_glob(GAME_SHARED GLOB src/game # A bit hacky, but these are needed to register all the UUIDs, even for stuff # that doesn't link game. set(ENGINE_UUID_SHARED + src/game/generated/protocolglue.h + src/game/generated/protocol7.cpp + src/game/generated/protocol7.h src/game/generated/protocol.cpp src/game/generated/protocol.h src/game/mapitems_ex.cpp @@ -751,6 +1560,8 @@ list(REMOVE_ITEM GAME_SHARED ${ENGINE_UUID_SHARED}) set(GAME_GENERATED_SHARED src/game/generated/git_revision.cpp src/game/generated/protocol.h + src/game/generated/protocol7.h + src/game/generated/protocolglue.h ) set(DEPS ${DEP_JSON} ${DEP_MD5} ${ZLIB_DEP}) @@ -778,7 +1589,21 @@ list(APPEND TARGETS_OWN engine-shared game-shared) if(CLIENT) # Sources - set_glob(ENGINE_CLIENT GLOB src/engine/client + set_src(STEAMAPI_SRC GLOB_RECURSE src/steam + steam_api_flat.h + steam_api_stub.cpp + ) + + if(STEAM OR TARGET_OS STREQUAL "windows" OR TARGET_OS STREQUAL "mac") + set(STEAMAPI_KIND SHARED) + else() + set(STEAMAPI_KIND STATIC) + endif() + set(TARGET_STEAMAPI steam_api) + add_library(${TARGET_STEAMAPI} ${STEAMAPI_KIND} ${STEAMAPI_SRC}) + list(APPEND TARGETS_OWN ${TARGET_STEAMAPI}) + + set_src(ENGINE_CLIENT GLOB src/engine/client backend_sdl.cpp backend_sdl.h client.cpp @@ -794,6 +1619,8 @@ if(CLIENT) input.cpp input.h keynames.h + notifications.cpp + notifications.h opengl_sl.cpp opengl_sl.h opengl_sl_program.cpp @@ -802,11 +1629,14 @@ if(CLIENT) serverbrowser.h sound.cpp sound.h + steam.cpp text.cpp updater.cpp updater.h + video.cpp + video.h ) - set_glob(GAME_CLIENT GLOB_RECURSE src/game/client + set_src(GAME_CLIENT GLOB_RECURSE src/game/client animstate.cpp animstate.h component.h @@ -856,6 +1686,7 @@ if(CLIENT) components/menus_demo.cpp components/menus_ingame.cpp components/menus_settings.cpp + components/menus_start.cpp components/motd.cpp components/motd.h components/nameplates.cpp @@ -902,7 +1733,7 @@ if(CLIENT) ui.cpp ui.h ) - set_glob(GAME_EDITOR GLOB src/game/editor + set_src(GAME_EDITOR GLOB src/game/editor auto_map.cpp auto_map.h editor.cpp @@ -932,12 +1763,15 @@ if(CLIENT) ${PNGLITE_LIBRARIES} ${SDL2_LIBRARIES} ${WAVPACK_LIBRARIES} + ${FFMPEG_LIBRARIES} # Order of these three is important. ${OPUSFILE_LIBRARIES} ${OPUS_LIBRARIES} ${OGG_LIBRARIES} + ${TARGET_STEAMAPI} + ${PLATFORM_CLIENT_LIBS} # Add pthreads (on non-Windows) at the end, so that other libraries can depend @@ -951,6 +1785,7 @@ if(CLIENT) set(CLIENT_MANIFEST "other/manifest/DDNet.manifest") else() set(CLIENT_MANIFEST "other/manifest/DDNet.rc") + set_target_properties(${TARGET_STEAMAPI} PROPERTIES PREFIX "") endif() else() set(CLIENT_ICON) @@ -979,8 +1814,15 @@ if(CLIENT) ${PNGLITE_INCLUDE_DIRS} ${SDL2_INCLUDE_DIRS} ${WAVPACK_INCLUDE_DIRS} + ${FFMPEG_INCLUDE_DIRS} + + ${PLATFORM_CLIENT_INCLUDE_DIRS} ) + if(STEAMAPI_KIND STREQUAL SHARED) + set_own_rpath(${TARGET_CLIENT}) + endif() + set(PARAMS "${WAVPACK_INCLUDE_DIRS};${WAVPACK_INCLUDE_DIRS}") if(NOT(WAVPACK_OPEN_FILE_INPUT_EX_PARAMS STREQUAL PARAMS)) unset(WAVPACK_OPEN_FILE_INPUT_EX CACHE) @@ -990,6 +1832,7 @@ if(CLIENT) set(CMAKE_REQUIRED_INCLUDES ${ORIGINAL_CMAKE_REQUIRED_INCLUDES} ${WAVPACK_INCLUDE_DIRS}) set(CMAKE_REQUIRED_LIBRARIES ${ORIGINAL_CMAKE_REQUIRED_LIBRARIES} ${WAVPACK_LIBRARIES}) check_symbol_exists(WavpackOpenFileInputEx wavpack.h WAVPACK_OPEN_FILE_INPUT_EX) + check_symbol_exists(WavpackCloseFile wavpack.h WAVPACK_CLOSE_FILE) set(CMAKE_REQUIRED_INCLUDES ${ORIGINAL_CMAKE_REQUIRED_INCLUDES}) set(CMAKE_REQUIRED_LIBRARIES ${ORIGINAL_CMAKE_REQUIRED_LIBRARIES}) @@ -997,6 +1840,10 @@ if(CLIENT) target_compile_definitions(${TARGET_CLIENT} PRIVATE CONF_WAVPACK_OPEN_FILE_INPUT_EX) endif() + if(WAVPACK_CLOSE_FILE) + target_compile_definitions(${TARGET_CLIENT} PRIVATE CONF_WAVPACK_CLOSE_FILE) + endif() + list(APPEND TARGETS_OWN ${TARGET_CLIENT}) list(APPEND TARGETS_LINK ${TARGET_CLIENT}) endif() @@ -1007,23 +1854,37 @@ endif() ######################################################################## # Sources -set_glob(ENGINE_SERVER GLOB src/engine/server +set_src(ANTIBOT_SRC GLOB src/antibot + antibot_data.h + antibot_interface.h + antibot_null.cpp +) + +set_src(ENGINE_SERVER GLOB_RECURSE src/engine/server + antibot.cpp + antibot.h authmanager.cpp authmanager.h + databases/connection.cpp + databases/connection.h + databases/connection_pool.cpp + databases/connection_pool.h + databases/mysql.cpp + databases/mysql.h + databases/sqlite.cpp + databases/sqlite.h name_ban.cpp name_ban.h register.cpp register.h server.cpp server.h - sql_connector.cpp - sql_connector.h - sql_server.cpp - sql_server.h sql_string_helpers.cpp sql_string_helpers.h + upnp.cpp + upnp.h ) -set_glob(GAME_SERVER GLOB_RECURSE src/game/server +set_src(GAME_SERVER GLOB_RECURSE src/game/server ddracechat.cpp ddracechat.h ddracecommands.cpp @@ -1064,15 +1925,14 @@ set_glob(GAME_SERVER GLOB_RECURSE src/game/server player.h save.cpp save.h + score.cpp score.h - score/file_score.cpp - score/file_score.h - score/sql_score.cpp - score/sql_score.h teams.cpp teams.h teehistorian.cpp teehistorian.h + teeinfo.cpp + teeinfo.h ) set(GAME_GENERATED_SERVER "src/game/generated/server_data.cpp" @@ -1085,10 +1945,20 @@ else() set(SERVER_ICON) endif() +# Antibot +if(ANTIBOT) + set(TARGET_ANTIBOT antibot) + add_library(${TARGET_ANTIBOT} SHARED ${ANTIBOT_SRC}) + list(APPEND TARGETS_OWN ${TARGET_ANTIBOT}) +endif() + # Libraries set(LIBS_SERVER ${LIBS} ${MYSQL_LIBRARIES} + ${SQLite3_LIBRARIES} + ${TARGET_ANTIBOT} + ${MINIUPNPC_LIBRARIES} # Add pthreads (on non-Windows) at the end, so that other libraries can depend # on it. ${CMAKE_THREAD_LIBS_INIT} @@ -1120,8 +1990,8 @@ endif() # VARIOUS TARGETS ######################################################################## -set_glob(MASTERSRV_SRC GLOB src/mastersrv mastersrv.cpp mastersrv.h) -set_glob(TWPING_SRC GLOB src/twping twping.cpp) +set_src(MASTERSRV_SRC GLOB src/mastersrv mastersrv.cpp mastersrv.h) +set_src(TWPING_SRC GLOB src/twping twping.cpp) set(TARGET_MASTERSRV mastersrv) set(TARGET_TWPING twping) @@ -1136,7 +2006,7 @@ list(APPEND TARGETS_OWN ${TARGET_MASTERSRV} ${TARGET_TWPING}) list(APPEND TARGETS_LINK ${TARGET_MASTERSRV} ${TARGET_TWPING}) set(TARGETS_TOOLS) -set_glob(TOOLS GLOB src/tools +set_src(TOOLS GLOB src/tools config_common.h config_retrieve.cpp config_store.cpp @@ -1144,15 +2014,12 @@ set_glob(TOOLS GLOB src/tools dilate.cpp dummy_map.cpp fake_server.cpp + map_convert_07.cpp map_diff.cpp map_extract.cpp map_replace_image.cpp map_resave.cpp packetgen.cpp - tileset_borderadd.cpp - tileset_borderfix.cpp - tileset_borderrem.cpp - tileset_borderset.cpp unicode_confusables.cpp uuid.cpp ) @@ -1162,7 +2029,7 @@ foreach(ABS_T ${TOOLS}) string(REGEX REPLACE "\\.cpp$" "" TOOL "${T}") set(TOOL_DEPS ${DEPS}) set(TOOL_LIBS ${LIBS}) - if(TOOL MATCHES "^(tileset_.*|dilate|map_extract|map_replace_image)$") + if(TOOL MATCHES "^(tileset_.*|dilate|map_convert_07|map_extract|map_replace_image)$") list(APPEND TOOL_DEPS ${PNGLITE_DEP}) list(APPEND TOOL_LIBS ${PNGLITE_LIBRARIES}) list(APPEND TOOL_INCLUDE_DIRS ${PNGLITE_INCLUDE_DIRS}) @@ -1197,9 +2064,11 @@ add_custom_target(everything DEPENDS ${TARGETS_OWN}) ######################################################################## if(GTEST_FOUND OR DOWNLOAD_GTEST) - set_glob(TESTS GLOB src/test + set_src(TESTS GLOB src/test aio.cpp + bezier.cpp color.cpp + csv.cpp datafile.cpp fs.cpp git_revision.cpp @@ -1208,6 +2077,8 @@ if(GTEST_FOUND OR DOWNLOAD_GTEST) json.cpp mapbugs.cpp name_ban.cpp + packer.cpp + prng.cpp str.cpp strip_path_and_extension.cpp teehistorian.cpp @@ -1398,9 +2269,13 @@ set(CPACK_TARGETS config_retrieve config_store dilate + map_convert_07 map_diff map_extract ) +if(STEAMAPI_KIND STREQUAL SHARED) + list(APPEND CPACK_TARGETS ${TARGET_STEAMAPI}) +endif() set(CPACK_DIRS data) set(CPACK_FILES license.txt @@ -1413,13 +2288,21 @@ if(TARGET_OS STREQUAL "windows") endif() if(NOT DEV) - install(DIRECTORY data DESTINATION share/ddnet COMPONENT data) - install(TARGETS ${TARGET_CLIENT} DESTINATION bin COMPONENT client) - install(TARGETS ${TARGET_SERVER} DESTINATION bin COMPONENT server) - install(TARGETS ${TARGETS_TOOLS} DESTINATION lib/ddnet COMPONENT tools) - install(FILES other/ddnet.desktop DESTINATION share/applications COMPONENT client) + include(GNUInstallDirs) + install(DIRECTORY data DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/ddnet COMPONENT data) + install(TARGETS ${TARGET_CLIENT} DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT client) + if(STEAMAPI_KIND STREQUAL SHARED) + install(TARGETS ${TARGET_STEAMAPI} DESTINATION ${CMAKE_INSTALL_LIBDIR}/ddnet COMPONENT client) + endif() + install(TARGETS ${TARGET_SERVER} DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT server) + if(ANTIBOT) + install(TARGETS ${TARGET_ANTIBOT} DESTINATION ${CMAKE_INSTALL_LIBDIR}/ddnet COMPONENT server) + endif() + install(TARGETS ${TARGETS_TOOLS} DESTINATION ${CMAKE_INSTALL_LIBDIR}/ddnet COMPONENT tools) + install(FILES other/ddnet.desktop DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/applications COMPONENT client) + install(FILES other/ddnet.appdata.xml DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/metainfo COMPONENT client) foreach(SIZE 16 32 48 128 256 512) - install(FILES other/icons/DDNet_${SIZE}x${SIZE}x32.png DESTINATION share/icons/hicolor/${SIZE}x${SIZE}/apps RENAME ddnet.png COMPONENT client) + install(FILES other/icons/DDNet_${SIZE}x${SIZE}x32.png DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/${SIZE}x${SIZE}/apps RENAME ddnet.png COMPONENT client) endforeach() endif() @@ -1435,7 +2318,6 @@ else() endif() set(PACKAGE_TARGETS) - if(CLIENT AND (DMGTOOLS_FOUND OR HDIUTIL)) file(MAKE_DIRECTORY bundle/client/) file(MAKE_DIRECTORY bundle/server/) @@ -1476,20 +2358,54 @@ if(CLIENT AND (DMGTOOLS_FOUND OR HDIUTIL)) COMMAND ${CMAKE_COMMAND} -E copy $ ${DMG_TMPDIR}/${TARGET_CLIENT}.app/Contents/MacOS/ COMMAND ${CMAKE_COMMAND} -E copy_directory ${PROJECT_SOURCE_DIR}/ddnet-libs/sdl/mac/lib64/SDL2.framework ${DMG_TMPDIR}/${TARGET_CLIENT}.app/Contents/Frameworks/SDL2.framework COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/ddnet-libs/freetype/mac/lib64/libfreetype.6.dylib ${DMG_TMPDIR}/${TARGET_CLIENT}.app/Contents/Frameworks/ - COMMAND ${CMAKE_INSTALL_NAME_TOOL} -change @rpath/SDL2.framework/Versions/A/SDL2 @executable_path/../Frameworks/SDL2.framework/SDL2 ${DMG_TMPDIR}/${TARGET_CLIENT}.app/Contents/MacOS/${TARGET_CLIENT} - COMMAND ${CMAKE_INSTALL_NAME_TOOL} -change /usr/local/lib/libfreetype.6.dylib @executable_path/../Frameworks/libfreetype.6.dylib ${DMG_TMPDIR}/${TARGET_CLIENT}.app/Contents/MacOS/${TARGET_CLIENT} + COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/ddnet-libs/ffmpeg/mac/lib64/libavcodec.58.dylib ${DMG_TMPDIR}/${TARGET_CLIENT}.app/Contents/Frameworks/ + COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/ddnet-libs/ffmpeg/mac/lib64/libavformat.58.dylib ${DMG_TMPDIR}/${TARGET_CLIENT}.app/Contents/Frameworks/ + COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/ddnet-libs/ffmpeg/mac/lib64/libavutil.56.dylib ${DMG_TMPDIR}/${TARGET_CLIENT}.app/Contents/Frameworks/ + COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/ddnet-libs/ffmpeg/mac/lib64/libswresample.3.dylib ${DMG_TMPDIR}/${TARGET_CLIENT}.app/Contents/Frameworks/ + COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/ddnet-libs/ffmpeg/mac/lib64/libswscale.5.dylib ${DMG_TMPDIR}/${TARGET_CLIENT}.app/Contents/Frameworks/ + COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/ddnet-libs/websockets/mac/lib64/libwebsockets.17.dylib ${DMG_TMPDIR}/${TARGET_CLIENT}.app/Contents/Frameworks/ + COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_BINARY_DIR}/libsteam_api.dylib ${DMG_TMPDIR}/${TARGET_CLIENT}.app/Contents/Frameworks/ + COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/scripts/darwin_strip_rpath.py ${CMAKE_OTOOL} ${CMAKE_INSTALL_NAME_TOOL} ${DMG_TMPDIR}/${TARGET_CLIENT}.app/Contents/MacOS/${TARGET_CLIENT} + COMMAND ${CMAKE_INSTALL_NAME_TOOL} -add_rpath @loader_path/../Frameworks ${DMG_TMPDIR}/${TARGET_CLIENT}.app/Contents/MacOS/${TARGET_CLIENT} + COMMAND ${CMAKE_INSTALL_NAME_TOOL} -add_rpath @loader_path/../Frameworks ${DMG_TMPDIR}/${TARGET_CLIENT}.app/Contents/Frameworks/libavcodec.58.dylib + COMMAND ${CMAKE_INSTALL_NAME_TOOL} -add_rpath @loader_path/../Frameworks ${DMG_TMPDIR}/${TARGET_CLIENT}.app/Contents/Frameworks/libavformat.58.dylib + COMMAND ${CMAKE_INSTALL_NAME_TOOL} -add_rpath @loader_path/../Frameworks ${DMG_TMPDIR}/${TARGET_CLIENT}.app/Contents/Frameworks/libswscale.5.dylib + COMMAND ${CMAKE_INSTALL_NAME_TOOL} -add_rpath @loader_path/../Frameworks ${DMG_TMPDIR}/${TARGET_CLIENT}.app/Contents/Frameworks/libswresample.3.dylib + COMMAND ${CMAKE_INSTALL_NAME_TOOL} -change /usr/local/lib/libavcodec.58.dylib @rpath/libavcodec.58.dylib ${DMG_TMPDIR}/${TARGET_CLIENT}.app/Contents/MacOS/${TARGET_CLIENT} + COMMAND ${CMAKE_INSTALL_NAME_TOOL} -change /usr/local/lib/libavcodec.58.dylib @rpath/libavcodec.58.dylib ${DMG_TMPDIR}/${TARGET_CLIENT}.app/Contents/Frameworks/libavformat.58.dylib + COMMAND ${CMAKE_INSTALL_NAME_TOOL} -change /usr/local/lib/libavformat.58.dylib @rpath/libavformat.58.dylib ${DMG_TMPDIR}/${TARGET_CLIENT}.app/Contents/MacOS/${TARGET_CLIENT} + COMMAND ${CMAKE_INSTALL_NAME_TOOL} -change /usr/local/lib/libavutil.56.dylib @rpath/libavutil.56.dylib ${DMG_TMPDIR}/${TARGET_CLIENT}.app/Contents/MacOS/${TARGET_CLIENT} + COMMAND ${CMAKE_INSTALL_NAME_TOOL} -change /usr/local/lib/libavutil.56.dylib @rpath/libavutil.56.dylib ${DMG_TMPDIR}/${TARGET_CLIENT}.app/Contents/Frameworks/libavcodec.58.dylib + COMMAND ${CMAKE_INSTALL_NAME_TOOL} -change /usr/local/lib/libavutil.56.dylib @rpath/libavutil.56.dylib ${DMG_TMPDIR}/${TARGET_CLIENT}.app/Contents/Frameworks/libavformat.58.dylib + COMMAND ${CMAKE_INSTALL_NAME_TOOL} -change /usr/local/lib/libavutil.56.dylib @rpath/libavutil.56.dylib ${DMG_TMPDIR}/${TARGET_CLIENT}.app/Contents/Frameworks/libswscale.5.dylib + COMMAND ${CMAKE_INSTALL_NAME_TOOL} -change /usr/local/lib/libavutil.56.dylib @rpath/libavutil.56.dylib ${DMG_TMPDIR}/${TARGET_CLIENT}.app/Contents/Frameworks/libswresample.3.dylib + COMMAND ${CMAKE_INSTALL_NAME_TOOL} -change /usr/local/lib/libswscale.5.dylib @rpath/libswscale.5.dylib ${DMG_TMPDIR}/${TARGET_CLIENT}.app/Contents/MacOS/${TARGET_CLIENT} + COMMAND ${CMAKE_INSTALL_NAME_TOOL} -change /usr/local/lib/libswresample.3.dylib @rpath/libswresample.3.dylib ${DMG_TMPDIR}/${TARGET_CLIENT}.app/Contents/MacOS/${TARGET_CLIENT} + COMMAND ${CMAKE_INSTALL_NAME_TOOL} -change /usr/local/lib/libfreetype.6.dylib @rpath/libfreetype.6.dylib ${DMG_TMPDIR}/${TARGET_CLIENT}.app/Contents/MacOS/${TARGET_CLIENT} + # TODO: Cleaner solution than hardcoding paths + COMMAND ${CMAKE_INSTALL_NAME_TOOL} -change /home/deen/isos/ddnet/debian6/mac64/libwebsockets-4.1.1/lib/libwebsockets.17.dylib @rpath/libwebsockets.17.dylib ${DMG_TMPDIR}/${TARGET_CLIENT}.app/Contents/MacOS/${TARGET_CLIENT} + COMMAND ${CMAKE_INSTALL_NAME_TOOL} -change ${PROJECT_BINARY_DIR}/libsteam_api.dylib @rpath/libsteam_api.dylib ${DMG_TMPDIR}/${TARGET_CLIENT}.app/Contents/MacOS/${TARGET_CLIENT} + COMMAND ${CMAKE_INSTALL_NAME_TOOL} -change ${PROJECT_BINARY_DIR}/libsteam_api.dylib @rpath/libsteam_api.dylib ${DMG_TMPDIR}/${TARGET_CLIENT}.app/Contents/Frameworks/libsteam_api.dylib # SERVER COMMAND ${CMAKE_COMMAND} -E copy_directory ${PROJECT_SOURCE_DIR}/data/maps ${DMG_TMPDIR}/${TARGET_SERVER}.app/Contents/Resources/data/maps COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/other/icons/${TARGET_SERVER}.icns ${DMG_TMPDIR}/${TARGET_SERVER}.app/Contents/Resources/ COMMAND ${CMAKE_COMMAND} -E copy bundle/server/Info.plist ${PROJECT_SOURCE_DIR}/other/bundle/server/PkgInfo ${DMG_TMPDIR}/${TARGET_SERVER}.app/Contents/ COMMAND ${CMAKE_COMMAND} -E copy $ $ ${DMG_TMPDIR}/${TARGET_SERVER}.app/Contents/MacOS/ + COMMAND ${CMAKE_COMMAND} -E make_directory ${DMG_TMPDIR}/${TARGET_SERVER}.app/Contents/Frameworks/ + COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/ddnet-libs/sqlite3/mac/lib64/libsqlite3.0.dylib ${DMG_TMPDIR}/${TARGET_SERVER}.app/Contents/Frameworks/ + COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/ddnet-libs/websockets/mac/lib64/libwebsockets.17.dylib ${DMG_TMPDIR}/${TARGET_SERVER}.app/Contents/Frameworks/ + COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/scripts/darwin_strip_rpath.py ${CMAKE_OTOOL} ${CMAKE_INSTALL_NAME_TOOL} ${DMG_TMPDIR}/${TARGET_SERVER}.app/Contents/MacOS/${TARGET_SERVER} + COMMAND ${CMAKE_INSTALL_NAME_TOOL} -add_rpath @loader_path/../Frameworks ${DMG_TMPDIR}/${TARGET_SERVER}.app/Contents/MacOS/${TARGET_SERVER} + COMMAND ${CMAKE_INSTALL_NAME_TOOL} -change /usr/local/lib/libsqlite3.0.dylib @rpath/libsqlite3.0.dylib ${DMG_TMPDIR}/${TARGET_SERVER}.app/Contents/MacOS/${TARGET_SERVER} + COMMAND ${CMAKE_INSTALL_NAME_TOOL} -change /home/deen/isos/ddnet/debian6/mac64/libwebsockets-4.1.1/lib/libwebsockets.17.dylib @rpath/libwebsockets.17.dylib ${DMG_TMPDIR}/${TARGET_SERVER}.app/Contents/MacOS/${TARGET_SERVER} # DMG COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/scripts/dmg.py create ${DMG_PARAMS} ${CPACK_PACKAGE_FILE_NAME}.dmg ${CPACK_PACKAGE_FILE_NAME} ${DMG_TMPDIR} DEPENDS ${TARGET_CLIENT} + ${TARGET_STEAMAPI} ${TARGET_SERVER_LAUNCHER} ${TARGET_SERVER} ${PROJECT_BINARY_DIR}/bundle/client/Info.plist @@ -1585,6 +2501,10 @@ macro(source_group_tree dir) endmacro() source_group_tree(src) +if(ANTIBOT) + set_own_rpath(${TARGET_SERVER}) +endif() + set(TARGETS ${TARGETS_OWN} ${TARGETS_DEP}) foreach(target ${TARGETS}) @@ -1595,11 +2515,18 @@ foreach(target ${TARGETS}) target_compile_options(${target} PRIVATE /GS) # Protect the stack pointer. target_compile_options(${target} PRIVATE /wd4996) # Use of non-_s functions. endif() + if(OUR_FLAGS_LINK) + target_link_libraries(${target} ${OUR_FLAGS_LINK}) + endif() if(OUR_FLAGS) target_compile_options(${target} PRIVATE ${OUR_FLAGS}) endif() if(DEFINE_FORTIFY_SOURCE) - target_compile_definitions(${target} PRIVATE $<$>:_FORTIFY_SOURCE=2>) # Detect some buffer overflows. + if(MINGW) + target_compile_definitions(${target} PRIVATE $<$>:_FORTIFY_SOURCE=0>) # Currently broken in MinGW, see https://sourceforge.net/p/mingw-w64/discussion/723798/thread/b9d24f041f/ + else() + target_compile_definitions(${target} PRIVATE $<$>:_FORTIFY_SOURCE=2>) # Detect some buffer overflows. + endif() endif() endforeach() @@ -1609,11 +2536,6 @@ foreach(target ${TARGETS_LINK}) endif() if(TARGET_OS STREQUAL "mac") target_link_libraries(${target} -stdlib=libc++) - target_link_libraries(${target} -mmacosx-version-min=10.7) - # Fixes: Undefined symbols for architecture x86_64: - # "___isOSVersionAtLeast", referenced from: - # _singleipconnect in libcurl.a(libcurl_la-connect.o) - target_link_libraries(${target} -Wl,-undefined -Wl,dynamic_lookup) endif() if((MINGW OR TARGET_OS STREQUAL "linux") AND PREFER_BUNDLED_LIBS) # Statically link the standard libraries with on MinGW/Linux so we don't @@ -1640,7 +2562,7 @@ foreach(target ${TARGETS_OWN}) target_include_directories(${target} PRIVATE ${PROJECT_BINARY_DIR}/src) target_include_directories(${target} PRIVATE src) target_compile_definitions(${target} PRIVATE $<$:CONF_DEBUG>) - target_include_directories(${target} PRIVATE ${ZLIB_INCLUDE_DIRS}) + target_include_directories(${target} PRIVATE ${SQLite3_INCLUDE_DIRS} ${ZLIB_INCLUDE_DIRS}) target_compile_definitions(${target} PRIVATE GLEW_STATIC) if(CRYPTO_FOUND) target_compile_definitions(${target} PRIVATE CONF_OPENSSL) @@ -1650,6 +2572,16 @@ foreach(target ${TARGETS_OWN}) target_compile_definitions(${target} PRIVATE CONF_WEBSOCKETS) target_include_directories(${target} PRIVATE ${WEBSOCKETS_INCLUDE_DIRS}) endif() + if(UPNP) + target_compile_definitions(${target} PRIVATE CONF_UPNP) + target_include_directories(${target} PRIVATE ${MINIUPNPC_INCLUDE_DIRS}) + endif() + if(VIDEORECORDER) + target_compile_definitions(${target} PRIVATE CONF_VIDEORECORDER) + endif() + if(ANTIBOT) + target_compile_definitions(${target} PRIVATE CONF_ANTIBOT) + endif() if(MYSQL) target_compile_definitions(${target} PRIVATE CONF_SQL) target_include_directories(${target} PRIVATE ${MYSQL_INCLUDE_DIRS}) diff --git a/Doxyfile b/Doxyfile new file mode 100644 index 000000000..247269817 --- /dev/null +++ b/Doxyfile @@ -0,0 +1,2553 @@ +# Doxyfile 1.8.18 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project. +# +# All text after a double hash (##) is considered a comment and is placed in +# front of the TAG it is preceding. +# +# All text after a single hash (#) is considered a comment and will be ignored. +# The format is: +# TAG = value [value, ...] +# For lists, items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (\" \"). + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the configuration +# file that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. Doxygen uses libiconv (or the +# iconv built into libc) for the transcoding. See +# https://www.gnu.org/software/libiconv/ for the list of possible encodings. +# The default value is: UTF-8. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by +# double-quotes, unless you are using Doxywizard) that should identify the +# project for which the documentation is generated. This name is used in the +# title of most generated pages and in a few other places. +# The default value is: My Project. + +PROJECT_NAME = "DDraceNetwork" + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. This +# could be handy for archiving the generated documentation or if some version +# control system is used. + +PROJECT_NUMBER = + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer a +# quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = + +# With the PROJECT_LOGO tag one can specify a logo or an icon that is included +# in the documentation. The maximum height of the logo should not exceed 55 +# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy +# the logo to the output directory. + +PROJECT_LOGO = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path +# into which the generated documentation will be written. If a relative path is +# entered, it will be relative to the location where doxygen was started. If +# left blank the current directory will be used. + +OUTPUT_DIRECTORY = docs + +# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- +# directories (in 2 levels) under the output directory of each output format and +# will distribute the generated files over these directories. Enabling this +# option can be useful when feeding doxygen a huge amount of source files, where +# putting all generated files in the same directory would otherwise causes +# performance problems for the file system. +# The default value is: NO. + +CREATE_SUBDIRS = NO + +# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII +# characters to appear in the names of generated files. If set to NO, non-ASCII +# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode +# U+3044. +# The default value is: NO. + +ALLOW_UNICODE_NAMES = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, +# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), +# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, +# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), +# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, +# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, +# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, +# Ukrainian and Vietnamese. +# The default value is: English. + +OUTPUT_LANGUAGE = English + +# The OUTPUT_TEXT_DIRECTION tag is used to specify the direction in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all generated output in the proper direction. +# Possible values are: None, LTR, RTL and Context. +# The default value is: None. + +OUTPUT_TEXT_DIRECTION = None + +# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member +# descriptions after the members that are listed in the file and class +# documentation (similar to Javadoc). Set to NO to disable this. +# The default value is: YES. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief +# description of a member or function before the detailed description +# +# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. +# The default value is: YES. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator that is +# used to form the text in various listings. Each string in this list, if found +# as the leading text of the brief description, will be stripped from the text +# and the result, after processing the whole list, is used as the annotated +# text. Otherwise, the brief description is used as-is. If left blank, the +# following values are used ($name is automatically replaced with the name of +# the entity):The $name class, The $name widget, The $name file, is, provides, +# specifies, contains, represents, a, an and the. + +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# doxygen will generate a detailed section even if there is only a brief +# description. +# The default value is: NO. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. +# The default value is: NO. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path +# before files name in the file list and in the header files. If set to NO the +# shortest path that makes the file name unique will be used +# The default value is: YES. + +FULL_PATH_NAMES = YES + +# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. +# Stripping is only done if one of the specified strings matches the left-hand +# part of the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the path to +# strip. +# +# Note that you can specify absolute paths here, but also relative paths, which +# will be relative from the directory where doxygen is started. +# This tag requires that the tag FULL_PATH_NAMES is set to YES. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the +# path mentioned in the documentation of a class, which tells the reader which +# header file to include in order to use a class. If left blank only the name of +# the header file containing the class definition is used. Otherwise one should +# specify the list of include paths that are normally passed to the compiler +# using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but +# less readable) file names. This can be useful is your file systems doesn't +# support long names like on DOS, Mac, or CD-ROM. +# The default value is: NO. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the +# first line (until the first dot) of a Javadoc-style comment as the brief +# description. If set to NO, the Javadoc-style will behave just like regular Qt- +# style comments (thus requiring an explicit @brief command for a brief +# description.) +# The default value is: NO. + +JAVADOC_AUTOBRIEF = NO + +# If the JAVADOC_BANNER tag is set to YES then doxygen will interpret a line +# such as +# /*************** +# as being the beginning of a Javadoc-style comment "banner". If set to NO, the +# Javadoc-style will behave just like regular comments and it will not be +# interpreted by doxygen. +# The default value is: NO. + +JAVADOC_BANNER = NO + +# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first +# line (until the first dot) of a Qt-style comment as the brief description. If +# set to NO, the Qt-style will behave just like regular Qt-style comments (thus +# requiring an explicit \brief command for a brief description.) +# The default value is: NO. + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a +# multi-line C++ special comment block (i.e. a block of //! or /// comments) as +# a brief description. This used to be the default behavior. The new default is +# to treat a multi-line C++ comment block as a detailed description. Set this +# tag to YES if you prefer the old behavior instead. +# +# Note that setting this tag to YES also means that rational rose comments are +# not recognized any more. +# The default value is: NO. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the +# documentation from any documented member that it re-implements. +# The default value is: YES. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new +# page for each member. If set to NO, the documentation of a member will be part +# of the file/class/namespace that contains it. +# The default value is: NO. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen +# uses this value to replace tabs by spaces in code fragments. +# Minimum value: 1, maximum value: 16, default value: 4. + +TAB_SIZE = 4 + +# This tag can be used to specify a number of aliases that act as commands in +# the documentation. An alias has the form: +# name=value +# For example adding +# "sideeffect=@par Side Effects:\n" +# will allow you to put the command \sideeffect (or @sideeffect) in the +# documentation, which will result in a user-defined paragraph with heading +# "Side Effects:". You can put \n's in the value part of an alias to insert +# newlines (in the resulting output). You can put ^^ in the value part of an +# alias to insert a newline as if a physical newline was in the original file. +# When you need a literal { or } or , in the value part of an alias you have to +# escape them by means of a backslash (\), this can lead to conflicts with the +# commands \{ and \} for these it is advised to use the version @{ and @} or use +# a double escape (\\{ and \\}) + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources +# only. Doxygen will then generate output that is more tailored for C. For +# instance, some of the names that are used will be different. The list of all +# members will be omitted, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or +# Python sources only. Doxygen will then generate output that is more tailored +# for that language. For instance, namespaces will be presented as packages, +# qualified scopes will look different, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources. Doxygen will then generate output that is tailored for Fortran. +# The default value is: NO. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for VHDL. +# The default value is: NO. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Set the OPTIMIZE_OUTPUT_SLICE tag to YES if your project consists of Slice +# sources only. Doxygen will then generate output that is more tailored for that +# language. For instance, namespaces will be presented as modules, types will be +# separated into more groups, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_SLICE = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given +# extension. Doxygen has a built-in mapping, but you can override or extend it +# using this tag. The format is ext=language, where ext is a file extension, and +# language is one of the parsers supported by doxygen: IDL, Java, JavaScript, +# Csharp (C#), C, C++, D, PHP, md (Markdown), Objective-C, Python, Slice, VHDL, +# Fortran (fixed format Fortran: FortranFixed, free formatted Fortran: +# FortranFree, unknown formatted Fortran: Fortran. In the later case the parser +# tries to guess whether the code is fixed or free formatted code, this is the +# default for Fortran type files). For instance to make doxygen treat .inc files +# as Fortran files (default is PHP), and .f files as C (default is Fortran), +# use: inc=Fortran f=C. +# +# Note: For files without extension you can use no_extension as a placeholder. +# +# Note that for custom extensions you also need to set FILE_PATTERNS otherwise +# the files are not read by doxygen. + +EXTENSION_MAPPING = + +# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments +# according to the Markdown format, which allows for more readable +# documentation. See https://daringfireball.net/projects/markdown/ for details. +# The output of markdown processing is further processed by doxygen, so you can +# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in +# case of backward compatibilities issues. +# The default value is: YES. + +MARKDOWN_SUPPORT = YES + +# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up +# to that level are automatically included in the table of contents, even if +# they do not have an id attribute. +# Note: This feature currently applies only to Markdown headings. +# Minimum value: 0, maximum value: 99, default value: 5. +# This tag requires that the tag MARKDOWN_SUPPORT is set to YES. + +TOC_INCLUDE_HEADINGS = 5 + +# When enabled doxygen tries to link words that correspond to documented +# classes, or namespaces to their corresponding documentation. Such a link can +# be prevented in individual cases by putting a % sign in front of the word or +# globally by setting AUTOLINK_SUPPORT to NO. +# The default value is: YES. + +AUTOLINK_SUPPORT = YES + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should set this +# tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); +# versus func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. +# The default value is: NO. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. +# The default value is: NO. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: +# https://www.riverbankcomputing.com/software/sip/intro) sources only. Doxygen +# will parse them like normal C++ but will assume all classes use public instead +# of private inheritance when no explicit protection keyword is present. +# The default value is: NO. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate +# getter and setter methods for a property. Setting this option to YES will make +# doxygen to replace the get and set methods by a property in the documentation. +# This will only work if the methods are indeed getting or setting a simple +# type. If this is not the case, or you want to show the methods anyway, you +# should set this option to NO. +# The default value is: YES. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. +# The default value is: NO. + +DISTRIBUTE_GROUP_DOC = NO + +# If one adds a struct or class to a group and this option is enabled, then also +# any nested class or struct is added to the same group. By default this option +# is disabled and one has to add nested compounds explicitly via \ingroup. +# The default value is: NO. + +GROUP_NESTED_COMPOUNDS = NO + +# Set the SUBGROUPING tag to YES to allow class member groups of the same type +# (for instance a group of public functions) to be put as a subgroup of that +# type (e.g. under the Public Functions section). Set it to NO to prevent +# subgrouping. Alternatively, this can be done per class using the +# \nosubgrouping command. +# The default value is: YES. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions +# are shown inside the group in which they are included (e.g. using \ingroup) +# instead of on a separate page (for HTML and Man pages) or section (for LaTeX +# and RTF). +# +# Note that this feature does not work in combination with +# SEPARATE_MEMBER_PAGES. +# The default value is: NO. + +INLINE_GROUPED_CLASSES = NO + +# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions +# with only public data fields or simple typedef fields will be shown inline in +# the documentation of the scope in which they are defined (i.e. file, +# namespace, or group documentation), provided this scope is documented. If set +# to NO, structs, classes, and unions are shown on a separate page (for HTML and +# Man pages) or section (for LaTeX and RTF). +# The default value is: NO. + +INLINE_SIMPLE_STRUCTS = NO + +# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or +# enum is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically be +# useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. +# The default value is: NO. + +TYPEDEF_HIDES_STRUCT = NO + +# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This +# cache is used to resolve symbols given their name and scope. Since this can be +# an expensive process and often the same symbol appears multiple times in the +# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small +# doxygen will become slower. If the cache is too large, memory is wasted. The +# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range +# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 +# symbols. At the end of a run doxygen will report the cache usage and suggest +# the optimal cache size from a speed point of view. +# Minimum value: 0, maximum value: 9, default value: 0. + +LOOKUP_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in +# documentation are documented, even if no documentation was available. Private +# class members and static file members will be hidden unless the +# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. +# Note: This will also disable the warnings about undocumented members that are +# normally produced when WARNINGS is set to YES. +# The default value is: NO. + +EXTRACT_ALL = NO + +# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will +# be included in the documentation. +# The default value is: NO. + +EXTRACT_PRIVATE = YES + +# If the EXTRACT_PRIV_VIRTUAL tag is set to YES, documented private virtual +# methods of a class will be included in the documentation. +# The default value is: NO. + +EXTRACT_PRIV_VIRTUAL = YES + +# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal +# scope will be included in the documentation. +# The default value is: NO. + +EXTRACT_PACKAGE = NO + +# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be +# included in the documentation. +# The default value is: NO. + +EXTRACT_STATIC = YES + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined +# locally in source files will be included in the documentation. If set to NO, +# only classes defined in header files are included. Does not have any effect +# for Java sources. +# The default value is: YES. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. If set to YES, local methods, +# which are defined in the implementation section but not in the interface are +# included in the documentation. If set to NO, only methods in the interface are +# included. +# The default value is: NO. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base name of +# the file that contains the anonymous namespace. By default anonymous namespace +# are hidden. +# The default value is: NO. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all +# undocumented members inside documented classes or files. If set to NO these +# members will be included in the various overviews, but no documentation +# section is generated. This option has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. If set +# to NO, these classes will be included in the various overviews. This option +# has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend +# declarations. If set to NO, these declarations will be included in the +# documentation. +# The default value is: NO. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any +# documentation blocks found inside the body of a function. If set to NO, these +# blocks will be appended to the function's detailed documentation block. +# The default value is: NO. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation that is typed after a +# \internal command is included. If the tag is set to NO then the documentation +# will be excluded. Set it to YES to include the internal documentation. +# The default value is: NO. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file +# names in lower-case letters. If set to YES, upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# (including Cygwin) ands Mac users are advised to set this option to NO. +# The default value is: system dependent. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with +# their full class and namespace scopes in the documentation. If set to YES, the +# scope will be hidden. +# The default value is: NO. + +HIDE_SCOPE_NAMES = NO + +# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will +# append additional text to a page's title, such as Class Reference. If set to +# YES the compound reference will be hidden. +# The default value is: NO. + +HIDE_COMPOUND_REFERENCE= NO + +# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of +# the files that are included by a file in the documentation of that file. +# The default value is: YES. + +SHOW_INCLUDE_FILES = YES + +# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each +# grouped member an include statement to the documentation, telling the reader +# which file to include in order to use the member. +# The default value is: NO. + +SHOW_GROUPED_MEMB_INC = NO + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include +# files with double quotes in the documentation rather than with sharp brackets. +# The default value is: NO. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the +# documentation for inline members. +# The default value is: YES. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the +# (detailed) documentation of file and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. +# The default value is: YES. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief +# descriptions of file, namespace and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. Note that +# this will also influence the order of the classes in the class list. +# The default value is: NO. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the +# (brief and detailed) documentation of class members so that constructors and +# destructors are listed first. If set to NO the constructors will appear in the +# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. +# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief +# member documentation. +# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting +# detailed member documentation. +# The default value is: NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy +# of group names into alphabetical order. If set to NO the group names will +# appear in their defined order. +# The default value is: NO. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by +# fully-qualified names, including namespaces. If set to NO, the class list will +# be sorted only by class name, not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the alphabetical +# list. +# The default value is: NO. + +SORT_BY_SCOPE_NAME = NO + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper +# type resolution of all parameters of a function it will reject a match between +# the prototype and the implementation of a member function even if there is +# only one candidate or it is obvious which candidate to choose by doing a +# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still +# accept a match between prototype and implementation in such cases. +# The default value is: NO. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo +# list. This list is created by putting \todo commands in the documentation. +# The default value is: YES. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test +# list. This list is created by putting \test commands in the documentation. +# The default value is: YES. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug +# list. This list is created by putting \bug commands in the documentation. +# The default value is: YES. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) +# the deprecated list. This list is created by putting \deprecated commands in +# the documentation. +# The default value is: YES. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional documentation +# sections, marked by \if ... \endif and \cond +# ... \endcond blocks. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the +# initial value of a variable or macro / define can have for it to appear in the +# documentation. If the initializer consists of more lines than specified here +# it will be hidden. Use a value of 0 to hide initializers completely. The +# appearance of the value of individual variables and macros / defines can be +# controlled using \showinitializer or \hideinitializer command in the +# documentation regardless of this setting. +# Minimum value: 0, maximum value: 10000, default value: 30. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at +# the bottom of the documentation of classes and structs. If set to YES, the +# list will mention the files that were used to generate the documentation. +# The default value is: YES. + +SHOW_USED_FILES = YES + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This +# will remove the Files entry from the Quick Index and from the Folder Tree View +# (if specified). +# The default value is: YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces +# page. This will remove the Namespaces entry from the Quick Index and from the +# Folder Tree View (if specified). +# The default value is: YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command command input-file, where command is the value of the +# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided +# by doxygen. Whatever the program writes to standard output is used as the file +# version. For an example see the documentation. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. To create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. You can +# optionally specify a file name after the option, if omitted DoxygenLayout.xml +# will be used as the name of the layout file. +# +# Note that if you run doxygen from a directory containing a file called +# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE +# tag is left empty. + +LAYOUT_FILE = + +# The CITE_BIB_FILES tag can be used to specify one or more bib files containing +# the reference definitions. This must be a list of .bib files. The .bib +# extension is automatically appended if omitted. This requires the bibtex tool +# to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info. +# For LaTeX the style of the bibliography can be controlled using +# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the +# search path. See also \cite for info how to create references. + +CITE_BIB_FILES = + +#--------------------------------------------------------------------------- +# Configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated to +# standard output by doxygen. If QUIET is set to YES this implies that the +# messages are off. +# The default value is: NO. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES +# this implies that the warnings are on. +# +# Tip: Turn warnings on while writing the documentation. +# The default value is: YES. + +WARNINGS = YES + +# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate +# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag +# will automatically be disabled. +# The default value is: YES. + +WARN_IF_UNDOCUMENTED = YES + +# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some parameters +# in a documented function, or documenting parameters that don't exist or using +# markup commands wrongly. +# The default value is: YES. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that +# are documented, but have no documentation for their parameters or return +# value. If set to NO, doxygen will only warn about wrong or incomplete +# parameter documentation, but not about the absence of documentation. If +# EXTRACT_ALL is set to YES then this flag will automatically be disabled. +# The default value is: NO. + +WARN_NO_PARAMDOC = NO + +# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when +# a warning is encountered. +# The default value is: NO. + +WARN_AS_ERROR = NO + +# The WARN_FORMAT tag determines the format of the warning messages that doxygen +# can produce. The string should contain the $file, $line, and $text tags, which +# will be replaced by the file and line number from which the warning originated +# and the warning text. Optionally the format may contain $version, which will +# be replaced by the version of the file (if it could be obtained via +# FILE_VERSION_FILTER) +# The default value is: $file:$line: $text. + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning and error +# messages should be written. If left blank the output is written to standard +# error (stderr). + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# Configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag is used to specify the files and/or directories that contain +# documented source files. You may enter file names like myfile.cpp or +# directories like /usr/src/myproject. Separate the files or directories with +# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING +# Note: If this tag is empty the current directory is searched. + +INPUT = src + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses +# libiconv (or the iconv built into libc) for the transcoding. See the libiconv +# documentation (see: https://www.gnu.org/software/libiconv/) for the list of +# possible encodings. +# The default value is: UTF-8. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and +# *.h) to filter out the source-files in the directories. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# read by doxygen. +# +# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, +# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, +# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, +# *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C comment), +# *.doc (to be provided as doxygen C comment), *.txt (to be provided as doxygen +# C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f18, *.f, *.for, *.vhd, +# *.vhdl, *.ucf, *.qsf and *.ice. + +FILE_PATTERNS = *.c \ + *.cc \ + *.cxx \ + *.cpp \ + *.c++ \ + *.java \ + *.ii \ + *.ixx \ + *.ipp \ + *.i++ \ + *.inl \ + *.idl \ + *.ddl \ + *.odl \ + *.h \ + *.hh \ + *.hxx \ + *.hpp \ + *.h++ \ + *.cs \ + *.d \ + *.php \ + *.php4 \ + *.php5 \ + *.phtml \ + *.inc \ + *.m \ + *.markdown \ + *.md \ + *.mm \ + *.dox \ + *.doc \ + *.txt \ + *.py \ + *.pyw \ + *.f90 \ + *.f95 \ + *.f03 \ + *.f08 \ + *.f18 \ + *.f \ + *.for \ + *.vhd \ + *.vhdl \ + *.ucf \ + *.qsf \ + *.ice + +# The RECURSIVE tag can be used to specify whether or not subdirectories should +# be searched for input files as well. +# The default value is: NO. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should be +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. +# +# Note that relative paths are relative to the directory from which doxygen is +# run. + +EXCLUDE = src/engine/external + +# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded +# from the input. +# The default value is: NO. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories use the pattern */test/* + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or directories +# that contain example code fragments that are included (see the \include +# command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and +# *.h) to filter out the source-files in the directories. If left blank all +# files are included. + +EXAMPLE_PATTERNS = * + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude commands +# irrespective of the value of the RECURSIVE tag. +# The default value is: NO. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or directories +# that contain images that are to be included in the documentation (see the +# \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command: +# +# +# +# where is the value of the INPUT_FILTER tag, and is the +# name of an input file. Doxygen will then use the output that the filter +# program writes to standard output. If FILTER_PATTERNS is specified, this tag +# will be ignored. +# +# Note that the filter must not add or remove lines; it is applied before the +# code is scanned, but not when the output code is generated. If lines are added +# or removed, the anchors will not be placed correctly. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: pattern=filter +# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how +# filters are used. If the FILTER_PATTERNS tag is empty or if none of the +# patterns match the file name, INPUT_FILTER is applied. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will also be used to filter the input files that are used for +# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). +# The default value is: NO. + +FILTER_SOURCE_FILES = NO + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and +# it is also possible to disable source filtering for a specific pattern using +# *.ext= (so without naming a filter). +# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. + +FILTER_SOURCE_PATTERNS = + +# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that +# is part of the input, its contents will be placed on the main page +# (index.html). This can be useful if you have a project on for instance GitHub +# and want to reuse the introduction page also for the doxygen output. + +USE_MDFILE_AS_MAINPAGE = + +#--------------------------------------------------------------------------- +# Configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will be +# generated. Documented entities will be cross-referenced with these sources. +# +# Note: To get rid of all source code in the generated output, make sure that +# also VERBATIM_HEADERS is set to NO. +# The default value is: NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body of functions, +# classes and enums directly into the documentation. +# The default value is: NO. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any +# special comment blocks from generated source code fragments. Normal C, C++ and +# Fortran comments will always remain visible. +# The default value is: YES. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES then for each documented +# entity all documented functions referencing it will be listed. +# The default value is: NO. + +REFERENCED_BY_RELATION = NO + +# If the REFERENCES_RELATION tag is set to YES then for each documented function +# all documented entities called/used by that function will be listed. +# The default value is: NO. + +REFERENCES_RELATION = NO + +# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set +# to YES then the hyperlinks from functions in REFERENCES_RELATION and +# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will +# link to the documentation. +# The default value is: YES. + +REFERENCES_LINK_SOURCE = YES + +# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the +# source code will show a tooltip with additional information such as prototype, +# brief description and links to the definition and documentation. Since this +# will make the HTML file larger and loading of large files a bit slower, you +# can opt to disable this feature. +# The default value is: YES. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +SOURCE_TOOLTIPS = YES + +# If the USE_HTAGS tag is set to YES then the references to source code will +# point to the HTML generated by the htags(1) tool instead of doxygen built-in +# source browser. The htags tool is part of GNU's global source tagging system +# (see https://www.gnu.org/software/global/global.html). You will need version +# 4.8.6 or higher. +# +# To use it do the following: +# - Install the latest version of global +# - Enable SOURCE_BROWSER and USE_HTAGS in the configuration file +# - Make sure the INPUT points to the root of the source tree +# - Run doxygen as normal +# +# Doxygen will invoke htags (and that will in turn invoke gtags), so these +# tools must be available from the command line (i.e. in the search path). +# +# The result: instead of the source browser generated by doxygen, the links to +# source code will now point to the output of htags. +# The default value is: NO. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a +# verbatim copy of the header file for each class for which an include is +# specified. Set to NO to disable this. +# See also: Section \class. +# The default value is: YES. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# Configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all +# compounds will be generated. Enable this if the project contains a lot of +# classes, structs, unions or interfaces. +# The default value is: YES. + +ALPHABETICAL_INDEX = YES + +# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in +# which the alphabetical index list will be split. +# Minimum value: 1, maximum value: 20, default value: 5. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all classes will +# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag +# can be used to specify a prefix (or a list of prefixes) that should be ignored +# while generating the index headers. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output +# The default value is: YES. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each +# generated HTML page (for example: .htm, .php, .asp). +# The default value is: .html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a user-defined HTML header file for +# each generated HTML page. If the tag is left blank doxygen will generate a +# standard header. +# +# To get valid HTML the header file that includes any scripts and style sheets +# that doxygen needs, which is dependent on the configuration options used (e.g. +# the setting GENERATE_TREEVIEW). It is highly recommended to start with a +# default header using +# doxygen -w html new_header.html new_footer.html new_stylesheet.css +# YourConfigFile +# and then modify the file new_header.html. See also section "Doxygen usage" +# for information on how to generate the default header that doxygen normally +# uses. +# Note: The header is subject to change so you typically have to regenerate the +# default header when upgrading to a newer version of doxygen. For a description +# of the possible markers and block names see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each +# generated HTML page. If the tag is left blank doxygen will generate a standard +# footer. See HTML_HEADER for more information on how to generate a default +# footer and what special commands can be used inside the footer. See also +# section "Doxygen usage" for information on how to generate the default footer +# that doxygen normally uses. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style +# sheet that is used by each HTML page. It can be used to fine-tune the look of +# the HTML output. If left blank doxygen will generate a default style sheet. +# See also section "Doxygen usage" for information on how to generate the style +# sheet that doxygen normally uses. +# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as +# it is more robust and this tag (HTML_STYLESHEET) will in the future become +# obsolete. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_STYLESHEET = + +# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined +# cascading style sheets that are included after the standard style sheets +# created by doxygen. Using this option one can overrule certain style aspects. +# This is preferred over using HTML_STYLESHEET since it does not replace the +# standard style sheet and is therefore more robust against future updates. +# Doxygen will copy the style sheet files to the output directory. +# Note: The order of the extra style sheet files is of importance (e.g. the last +# style sheet in the list overrules the setting of the previous ones in the +# list). For an example see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_STYLESHEET = + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that the +# files will be copied as-is; there are no commands or markers available. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen +# will adjust the colors in the style sheet and background images according to +# this color. Hue is specified as an angle on a colorwheel, see +# https://en.wikipedia.org/wiki/Hue for more information. For instance the value +# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 +# purple, and 360 is red again. +# Minimum value: 0, maximum value: 359, default value: 220. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_HUE = 220 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors +# in the HTML output. For a value of 0 the output will use grayscales only. A +# value of 255 will produce the most vivid colors. +# Minimum value: 0, maximum value: 255, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the +# luminance component of the colors in the HTML output. Values below 100 +# gradually make the output lighter, whereas values above 100 make the output +# darker. The value divided by 100 is the actual gamma applied, so 80 represents +# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not +# change the gamma. +# Minimum value: 40, maximum value: 240, default value: 80. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_GAMMA = 80 + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting this +# to YES can help to show when doxygen was last run and thus if the +# documentation is up to date. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_TIMESTAMP = NO + +# If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML +# documentation will contain a main index with vertical navigation menus that +# are dynamically created via JavaScript. If disabled, the navigation index will +# consists of multiple levels of tabs that are statically embedded in every HTML +# page. Disable this option to support browsers that do not have JavaScript, +# like the Qt help browser. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_DYNAMIC_MENUS = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_DYNAMIC_SECTIONS = NO + +# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries +# shown in the various tree structured indices initially; the user can expand +# and collapse entries dynamically later on. Doxygen will expand the tree to +# such a level that at most the specified number of entries are visible (unless +# a fully collapsed tree already exceeds this amount). So setting the number of +# entries 1 will produce a full collapsed tree by default. 0 is a special value +# representing an infinite number of entries and will result in a full expanded +# tree by default. +# Minimum value: 0, maximum value: 9999, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_INDEX_NUM_ENTRIES = 100 + +# If the GENERATE_DOCSET tag is set to YES, additional index files will be +# generated that can be used as input for Apple's Xcode 3 integrated development +# environment (see: https://developer.apple.com/xcode/), introduced with OSX +# 10.5 (Leopard). To create a documentation set, doxygen will generate a +# Makefile in the HTML output directory. Running make will produce the docset in +# that directory and running make install will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at +# startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy +# genXcode/_index.html for more information. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_DOCSET = NO + +# This tag determines the name of the docset feed. A documentation feed provides +# an umbrella under which multiple documentation sets from a single provider +# (such as a company or product suite) can be grouped. +# The default value is: Doxygen generated docs. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# This tag specifies a string that should uniquely identify the documentation +# set bundle. This should be a reverse domain-name style string, e.g. +# com.mycompany.MyDocSet. Doxygen will append .docset to the name. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_BUNDLE_ID = tw.ddnet.DDraceNetwork + +# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify +# the documentation publisher. This should be a reverse domain-name style +# string, e.g. com.mycompany.MyDocSet.documentation. +# The default value is: org.doxygen.Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_ID = tw.ddnet.DDraceNetwork + +# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. +# The default value is: Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three +# additional HTML index files: index.hhp, index.hhc, and index.hhk. The +# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop +# (see: https://www.microsoft.com/en-us/download/details.aspx?id=21138) on +# Windows. +# +# The HTML Help Workshop contains a compiler that can convert all HTML output +# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML +# files are now used as the Windows 98 help format, and will replace the old +# Windows help format (.hlp) on all Windows platforms in the future. Compressed +# HTML files also contain an index, a table of contents, and you can search for +# words in the documentation. The HTML workshop also contains a viewer for +# compressed HTML files. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_HTMLHELP = NO + +# The CHM_FILE tag can be used to specify the file name of the resulting .chm +# file. You can add a path in front of the file if the result should not be +# written to the html output directory. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_FILE = + +# The HHC_LOCATION tag can be used to specify the location (absolute path +# including file name) of the HTML help compiler (hhc.exe). If non-empty, +# doxygen will try to run the HTML help compiler on the generated index.hhp. +# The file has to be specified with full path. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +HHC_LOCATION = + +# The GENERATE_CHI flag controls if a separate .chi index file is generated +# (YES) or that it should be included in the master .chm file (NO). +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +GENERATE_CHI = NO + +# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) +# and project file content. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_INDEX_ENCODING = + +# The BINARY_TOC flag controls whether a binary table of contents is generated +# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it +# enables the Previous and Next buttons. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members to +# the table of contents of the HTML help documentation and to the tree view. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that +# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help +# (.qch) of the generated HTML documentation. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify +# the file name of the resulting .qch file. The path specified is relative to +# the HTML output folder. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help +# Project output. For more information please see Qt Help Project / Namespace +# (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace). +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt +# Help Project output. For more information please see Qt Help Project / Virtual +# Folders (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual- +# folders). +# The default value is: doc. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_VIRTUAL_FOLDER = doc + +# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom +# filter to add. For more information please see Qt Help Project / Custom +# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see Qt Help Project / Custom +# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's filter section matches. Qt Help Project / Filter Attributes (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_SECT_FILTER_ATTRS = + +# The QHG_LOCATION tag can be used to specify the location of Qt's +# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the +# generated .qhp file. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be +# generated, together with the HTML files, they form an Eclipse help plugin. To +# install this plugin and make it available under the help contents menu in +# Eclipse, the contents of the directory containing the HTML and XML files needs +# to be copied into the plugins directory of eclipse. The name of the directory +# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. +# After copying Eclipse needs to be restarted before the help appears. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the Eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have this +# name. Each documentation set should have its own identifier. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. + +ECLIPSE_DOC_ID = tw.ddnet.DDraceNetwork + +# If you want full control over the layout of the generated HTML pages it might +# be necessary to disable the index and replace it with your own. The +# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top +# of each HTML page. A value of NO enables the index and the value YES disables +# it. Since the tabs in the index contain the same information as the navigation +# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +DISABLE_INDEX = NO + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. If the tag +# value is set to YES, a side panel will be generated containing a tree-like +# index structure (just like the one that is generated for HTML Help). For this +# to work a browser that supports JavaScript, DHTML, CSS and frames is required +# (i.e. any modern browser). Windows users are probably better off using the +# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can +# further fine-tune the look of the index. As an example, the default style +# sheet generated by doxygen has an example that shows how to put an image at +# the root of the tree instead of the PROJECT_NAME. Since the tree basically has +# the same information as the tab index, you could consider setting +# DISABLE_INDEX to YES when enabling this option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_TREEVIEW = YES + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that +# doxygen will group on one line in the generated HTML documentation. +# +# Note that a value of 0 will completely suppress the enum values from appearing +# in the overview section. +# Minimum value: 0, maximum value: 20, default value: 4. +# This tag requires that the tag GENERATE_HTML is set to YES. + +ENUM_VALUES_PER_LINE = 4 + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used +# to set the initial width (in pixels) of the frame in which the tree is shown. +# Minimum value: 0, maximum value: 1500, default value: 250. +# This tag requires that the tag GENERATE_HTML is set to YES. + +TREEVIEW_WIDTH = 250 + +# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to +# external symbols imported via tag files in a separate window. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +EXT_LINKS_IN_WINDOW = NO + +# If the HTML_FORMULA_FORMAT option is set to svg, doxygen will use the pdf2svg +# tool (see https://github.com/dawbarton/pdf2svg) or inkscape (see +# https://inkscape.org) to generate formulas as SVG images instead of PNGs for +# the HTML output. These images will generally look nicer at scaled resolutions. +# Possible values are: png The default and svg Looks nicer but requires the +# pdf2svg tool. +# The default value is: png. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FORMULA_FORMAT = png + +# Use this tag to change the font size of LaTeX formulas included as images in +# the HTML documentation. When you change the font size after a successful +# doxygen run you need to manually remove any form_*.png images from the HTML +# output directory to force them to be regenerated. +# Minimum value: 8, maximum value: 50, default value: 10. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANSPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are not +# supported properly for IE 6.0, but are supported on all modern browsers. +# +# Note that when changing this option you need to delete any form_*.png files in +# the HTML output directory before the changes have effect. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_TRANSPARENT = YES + +# The FORMULA_MACROFILE can contain LaTeX \newcommand and \renewcommand commands +# to create new LaTeX commands to be used in formulas as building blocks. See +# the section "Including formulas" for details. + +FORMULA_MACROFILE = + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see +# https://www.mathjax.org) which uses client side JavaScript for the rendering +# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX +# installed or if you want to formulas look prettier in the HTML output. When +# enabled you may also need to install MathJax separately and configure the path +# to it using the MATHJAX_RELPATH option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +USE_MATHJAX = NO + +# When MathJax is enabled you can set the default output format to be used for +# the MathJax output. See the MathJax site (see: +# http://docs.mathjax.org/en/latest/output.html) for more details. +# Possible values are: HTML-CSS (which is slower, but has the best +# compatibility), NativeMML (i.e. MathML) and SVG. +# The default value is: HTML-CSS. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_FORMAT = HTML-CSS + +# When MathJax is enabled you need to specify the location relative to the HTML +# output directory using the MATHJAX_RELPATH option. The destination directory +# should contain the MathJax.js script. For instance, if the mathjax directory +# is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax +# Content Delivery Network so you can quickly see the result without installing +# MathJax. However, it is strongly recommended to install a local copy of +# MathJax from https://www.mathjax.org before deployment. +# The default value is: https://cdn.jsdelivr.net/npm/mathjax@2. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_RELPATH = https://cdn.jsdelivr.net/npm/mathjax@2 + +# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax +# extension names that should be enabled during MathJax rendering. For example +# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_EXTENSIONS = + +# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces +# of code that will be used on startup of the MathJax code. See the MathJax site +# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an +# example see the documentation. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_CODEFILE = + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box for +# the HTML output. The underlying search engine uses javascript and DHTML and +# should work on any modern browser. Note that when using HTML help +# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) +# there is already a search function so this one should typically be disabled. +# For large projects the javascript based search engine can be slow, then +# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to +# search using the keyboard; to jump to the search box use + S +# (what the is depends on the OS and browser, but it is typically +# , /