2023-03-23 19:20:44 +01:00
|
|
|
#
|
|
|
|
# D++ (DPP), The Lightweight C++ Discord Library
|
|
|
|
#
|
|
|
|
# Copyright 2021 Craig Edwards <support@brainbox.cc>
|
|
|
|
#
|
|
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
# you may not use this file except in compliance with the License.
|
|
|
|
# You may obtain a copy of the License at
|
|
|
|
#
|
|
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
#
|
|
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
# See the License for the specific language governing permissions and
|
|
|
|
# limitations under the License.
|
|
|
|
#
|
|
|
|
|
|
|
|
cmake_minimum_required (VERSION 3.16)
|
|
|
|
|
|
|
|
option(BUILD_SHARED_LIBS "Build shared libraries" ON)
|
|
|
|
option(BUILD_VOICE_SUPPORT "Build voice support" ON)
|
|
|
|
option(RUN_LDCONFIG "Run ldconfig after installation" ON)
|
|
|
|
option(DPP_INSTALL "Generate the install target" ON)
|
|
|
|
option(DPP_BUILD_TEST "Build the test program" ON)
|
|
|
|
option(DPP_NO_VCPKG "No VCPKG" OFF)
|
|
|
|
option(DPP_CORO "Experimental support for C++20 coroutines" OFF)
|
|
|
|
option(DPP_USE_EXTERNAL_JSON "Use an external installation of nlohmann::json" OFF)
|
|
|
|
|
|
|
|
include(CheckCXXSymbolExists)
|
|
|
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
|
|
|
add_compile_definitions(DPP_BUILD)
|
|
|
|
|
2023-08-05 20:31:33 +02:00
|
|
|
set(DPP_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR})
|
|
|
|
|
|
|
|
file(READ "${DPP_ROOT_PATH}/include/dpp/version.h" version_h)
|
2023-03-23 19:20:44 +01:00
|
|
|
|
|
|
|
if(NOT version_h MATCHES "DPP_VERSION_SHORT ([0-9][0-9])([0-9][0-9])([0-9][0-9])")
|
|
|
|
message(FATAL_ERROR "Cannot get DPP_VERSION_SHORT from version.h")
|
|
|
|
endif()
|
|
|
|
|
|
|
|
math(EXPR DPP_VERSION_MAJOR "${CMAKE_MATCH_1}")
|
|
|
|
math(EXPR DPP_VERSION_MINOR "${CMAKE_MATCH_2}")
|
|
|
|
math(EXPR DPP_VERSION_PATCH "${CMAKE_MATCH_3}")
|
|
|
|
|
|
|
|
string(CONCAT DPP_VERSION "${DPP_VERSION_MAJOR}.${DPP_VERSION_MINOR}.${DPP_VERSION_PATCH}")
|
|
|
|
|
2023-08-05 20:31:33 +02:00
|
|
|
set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${DPP_ROOT_PATH}/cmake/")
|
2023-03-23 19:20:44 +01:00
|
|
|
|
|
|
|
if (DPP_NO_VCPKG)
|
|
|
|
message("-- INFO: Explicitly disabling VCPKG as running inside the CI action.")
|
|
|
|
else()
|
|
|
|
message("-- INFO: Using VCPKG if detected")
|
|
|
|
endif()
|
|
|
|
|
|
|
|
if (WIN32 AND NOT MINGW AND BUILD_SHARED_LIBS)
|
|
|
|
message("-- INFO: Configuring .rc resource script")
|
2023-08-05 20:31:33 +02:00
|
|
|
configure_file("${DPP_ROOT_PATH}/src/dpp/dpp.rc.in" "${DPP_ROOT_PATH}/src/dpp/dpp.rc" NEWLINE_STYLE WIN32)
|
2023-03-23 19:20:44 +01:00
|
|
|
endif()
|
|
|
|
|
|
|
|
if (NOT DPP_NO_VCPKG AND EXISTS "${_VCPKG_ROOT_DIR}")
|
|
|
|
set(PROJECT_NAME "dpp")
|
|
|
|
project(
|
|
|
|
"${PROJECT_NAME}"
|
|
|
|
VERSION "${DPP_VERSION}"
|
|
|
|
LANGUAGES CXX
|
|
|
|
HOMEPAGE_URL "https://dpp.dev/"
|
|
|
|
DESCRIPTION "An incredibly lightweight C++ Discord library."
|
|
|
|
)
|
2023-08-05 20:31:33 +02:00
|
|
|
add_subdirectory(library-vcpkg)
|
2023-03-23 19:20:44 +01:00
|
|
|
else()
|
|
|
|
set(PROJECT_NAME "libdpp")
|
|
|
|
project(
|
|
|
|
"${PROJECT_NAME}"
|
|
|
|
VERSION "${DPP_VERSION}"
|
|
|
|
LANGUAGES CXX
|
|
|
|
HOMEPAGE_URL "https://dpp.dev/"
|
|
|
|
DESCRIPTION "An incredibly lightweight C++ Discord library."
|
|
|
|
)
|
|
|
|
add_subdirectory(library)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
if(DPP_USE_EXTERNAL_JSON)
|
|
|
|
# We do nothing here, we just assume it is on the include path.
|
|
|
|
# nlohmann::json's cmake stuff does all kinds of weird, and is more hassle than it's worth.
|
|
|
|
# This functionality is here mostly for package maintainers so if you enable it you should
|
|
|
|
# know what you are doing.
|
|
|
|
message("-- Using external nlohmann::json")
|
|
|
|
target_compile_definitions(dpp PUBLIC DPP_USE_EXTERNAL_JSON)
|
|
|
|
else()
|
|
|
|
# Add the nlohmann single include to the include path. Note that nlohmann::json is kinda
|
|
|
|
# fussy, this is an older version because trying to use v3.11.2 gave a bunch of parse errors
|
|
|
|
# that made no sense, it seems they may have changed their parsing rules somehow.
|
|
|
|
message("-- Using bundled nlohmann::json")
|
|
|
|
endif()
|