Add cmake
This commit is contained in:
parent
b58166cc90
commit
677e5dc5d3
75
.gitignore
vendored
75
.gitignore
vendored
@ -6,3 +6,78 @@ lib
|
||||
sqlite
|
||||
examples/ca/CA.pl
|
||||
.vscode
|
||||
|
||||
# This file is used to ignore files which are generated
|
||||
# ----------------------------------------------------------------------------
|
||||
|
||||
*~
|
||||
*.autosave
|
||||
*.a
|
||||
*.core
|
||||
*.moc
|
||||
*.o
|
||||
*.obj
|
||||
*.orig
|
||||
*.rej
|
||||
*.so
|
||||
*.so.*
|
||||
*_pch.h.cpp
|
||||
*_resource.rc
|
||||
*.qm
|
||||
.#*
|
||||
*.*#
|
||||
core
|
||||
!core/
|
||||
tags
|
||||
.DS_Store
|
||||
.directory
|
||||
*.debug
|
||||
Makefile*
|
||||
*.prl
|
||||
*.app
|
||||
moc_*.cpp
|
||||
ui_*.h
|
||||
qrc_*.cpp
|
||||
Thumbs.db
|
||||
*.res
|
||||
*.rc
|
||||
/.qmake.cache
|
||||
/.qmake.stash
|
||||
|
||||
# qtcreator generated files
|
||||
*.pro.user*
|
||||
*.user*
|
||||
|
||||
# xemacs temporary files
|
||||
*.flc
|
||||
|
||||
# Vim temporary files
|
||||
.*.swp
|
||||
|
||||
# Visual Studio generated files
|
||||
*.ib_pdb_index
|
||||
*.idb
|
||||
*.ilk
|
||||
*.pdb
|
||||
*.sln
|
||||
*.suo
|
||||
*.vcproj
|
||||
*vcproj.*.*.user
|
||||
*.ncb
|
||||
*.sdf
|
||||
*.opensdf
|
||||
*.vcxproj
|
||||
*vcxproj.*
|
||||
|
||||
# MinGW generated files
|
||||
*.Debug
|
||||
*.Release
|
||||
|
||||
# Python byte code
|
||||
*.pyc
|
||||
|
||||
# Binaries
|
||||
# --------
|
||||
*.dll
|
||||
*.exe
|
||||
|
||||
|
||||
74
CMakeLists.txt
Normal file
74
CMakeLists.txt
Normal file
@ -0,0 +1,74 @@
|
||||
# Author: Kang Lin (kl222@126.com)
|
||||
|
||||
cmake_minimum_required(VERSION 3.5)
|
||||
|
||||
project(coturn)
|
||||
|
||||
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake)
|
||||
SET(BUILD_VERSION "4.5.2")
|
||||
|
||||
# Find Git Version Patch
|
||||
IF(EXISTS "${CMAKE_SOURCE_DIR}/.git")
|
||||
if(NOT GIT)
|
||||
SET(GIT $ENV{GIT})
|
||||
endif()
|
||||
if(NOT GIT)
|
||||
FIND_PROGRAM(GIT NAMES git git.exe git.cmd)
|
||||
endif()
|
||||
IF(GIT)
|
||||
EXECUTE_PROCESS(
|
||||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||
COMMAND ${GIT} describe --tags
|
||||
OUTPUT_VARIABLE GIT_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
if(NOT GIT_VERSION)
|
||||
EXECUTE_PROCESS(
|
||||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||
COMMAND ${GIT} rev-parse --short HEAD
|
||||
OUTPUT_VARIABLE GIT_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
endif()
|
||||
SET(BUILD_VERSION ${GIT_VERSION})
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
message("BUILD_VERSION:${BUILD_VERSION}")
|
||||
set(VERSION ${BUILD_VERSION})
|
||||
|
||||
if(NOT DEFINED CMAKE_BUILD_TYPE)
|
||||
set(CMAKE_BUILD_TYPE "Release")
|
||||
endif(NOT DEFINED CMAKE_BUILD_TYPE)
|
||||
if("Debug" STREQUAL CMAKE_BUILD_TYPE)
|
||||
add_definitions(-D_DEBUG)
|
||||
endif()
|
||||
|
||||
IF(MSVC)
|
||||
# This option is to enable the /MP switch for Visual Studio 2005 and above compilers
|
||||
OPTION(WIN32_USE_MP "Set to ON to build with the /MP option (Visual Studio 2005 and above)." ON)
|
||||
MARK_AS_ADVANCED(WIN32_USE_MP)
|
||||
IF(WIN32_USE_MP)
|
||||
#SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP")
|
||||
add_compile_options(/MP)
|
||||
ENDIF(WIN32_USE_MP)
|
||||
add_compile_options("$<$<C_COMPILER_ID:MSVC>:/utf-8>")
|
||||
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/utf-8>")
|
||||
ENDIF(MSVC)
|
||||
|
||||
include(CMakePackageConfigHelpers)
|
||||
include(GNUInstallDirs)
|
||||
include(GenerateExportHeader)
|
||||
include(CheckIncludeFile)
|
||||
include(CheckIncludeFileCXX)
|
||||
include(CheckFunctionExists)
|
||||
|
||||
# Create will be delete files
|
||||
CONFIGURE_FILE(
|
||||
"${CMAKE_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in"
|
||||
"${CMAKE_BINARY_DIR}/cmake_uninstall.cmake"
|
||||
IMMEDIATE @ONLY)
|
||||
# Create unistall target
|
||||
ADD_CUSTOM_TARGET(uninstall
|
||||
"${CMAKE_COMMAND}" -P "${CMAKE_BINARY_DIR}/cmake_uninstall.cmake"
|
||||
)
|
||||
|
||||
add_subdirectory(src)
|
||||
|
||||
68
cmake/CacheLog.cmake
Normal file
68
cmake/CacheLog.cmake
Normal file
@ -0,0 +1,68 @@
|
||||
# Functions for keeping track of set cache variables and clearing them.
|
||||
#
|
||||
# get_cachelog_var
|
||||
#
|
||||
# add_to_cachelog
|
||||
#
|
||||
# unset_cachelog_entries
|
||||
#
|
||||
# reset_cachelog
|
||||
#
|
||||
|
||||
|
||||
# Get name of variable that cachelog will be stored in for this file.
|
||||
#
|
||||
# Name the cachelog variable after the Find* file that called this function.
|
||||
# This prevents collisions if multiple find modules use these functions.
|
||||
function(get_cachelog_var _cachelog_var_outname)
|
||||
get_filename_component(_log_var "${CMAKE_CURRENT_LIST_FILE}" NAME)
|
||||
string(MAKE_C_IDENTIFIER "${_log_var}" _log_var)
|
||||
set(${_cachelog_var_outname} "${_log_var}_cachelog" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
|
||||
# Add the given cache variable name to the cache log, and mark it as advanced.
|
||||
function(add_to_cachelog _name)
|
||||
get_cachelog_var(_log_var)
|
||||
set(${_log_var} ${${_log_var}} ${_name} CACHE INTERNAL "" FORCE)
|
||||
mark_as_advanced(FORCE ${_name})
|
||||
endfunction()
|
||||
|
||||
|
||||
# Unset all cache variables that are listed in the cache log.
|
||||
function(unset_cachelog_entries)
|
||||
get_cachelog_var(_log_var)
|
||||
foreach (_cachevar ${${_log_var}})
|
||||
unset(${_cachevar} CACHE)
|
||||
endforeach ()
|
||||
endfunction()
|
||||
|
||||
|
||||
# Remove all cache variable names from the cache log.
|
||||
function(reset_cachelog)
|
||||
get_cachelog_var(_log_var)
|
||||
set(${_log_var} "" CACHE INTERNAL "" FORCE)
|
||||
endfunction()
|
||||
|
||||
# From https://github.com/Monetra/mstdlib/blob/master/CMakeModules
|
||||
# The MIT License (MIT)
|
||||
|
||||
# Copyright (c) 2015-2017 Main Street Softworks, Inc.
|
||||
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furnished to do so, subject to the following conditions:
|
||||
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
97
cmake/FindLibevent.cmake
Normal file
97
cmake/FindLibevent.cmake
Normal file
@ -0,0 +1,97 @@
|
||||
# Author: Kang Lin (kl222@126.com)
|
||||
|
||||
# Try to find Libevent
|
||||
# Once done, this will define
|
||||
#
|
||||
# Libevent_FOUND - system has Libevent
|
||||
# Libevent_INCLUDE_DIRS - Libevent include directories
|
||||
# Libevent_LIBRARIES - libraries needed to use Libevent
|
||||
#
|
||||
# and the following imported targets
|
||||
#
|
||||
# Libevent::core - the core functons of Libevent
|
||||
# Libevent::extra - extra functions, contains http, dns and rpc
|
||||
# Libevent::pthreads - multiple threads for Libevent, not exists on Windows
|
||||
# Libevent::openssl - openssl support for Libevent
|
||||
|
||||
macro(no_component_msg _comp)
|
||||
if(${CMAKE_FIND_PACKAGE_NAME}_FIND_REQUIRED_${_comp})
|
||||
set(pthreadlib)
|
||||
if(NOT WIN32)
|
||||
set(pthreadlib ", pthreads")
|
||||
endif()
|
||||
message(FATAL_ERROR "Your libevent library does not contain a ${_comp} component!\n"
|
||||
"The valid components are core, extra${pthreadlib} and openssl.")
|
||||
else()
|
||||
message_if_needed(WARNING "Your libevent library does not contain a ${_comp} component!")
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
set(_AVAILABLE_LIBS core extra openssl pthreads)
|
||||
set(_EVENT_COMPONENTS)
|
||||
if(${CMAKE_FIND_PACKAGE_NAME}_FIND_COMPONENTS)
|
||||
foreach(_comp ${${CMAKE_FIND_PACKAGE_NAME}_FIND_COMPONENTS})
|
||||
list(FIND _AVAILABLE_LIBS ${_comp} _INDEX)
|
||||
if(_INDEX GREATER -1)
|
||||
list(APPEND _EVENT_COMPONENTS ${_comp})
|
||||
else()
|
||||
no_component_msg(${_comp})
|
||||
endif()
|
||||
endforeach()
|
||||
else()
|
||||
set(_EVENT_COMPONENTS core extra openssl)
|
||||
if(NOT WIN32)
|
||||
list(APPEND _EVENT_COMPONENTS pthreads)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
foreach(_libevent_comp ${_EVENT_COMPONENTS})
|
||||
list(APPEND _libevent_comps libevent_${_libevent_comp})
|
||||
endforeach()
|
||||
|
||||
find_package(PkgConfig)
|
||||
pkg_check_modules(PC_Libevent QUIET ${_libevent_comps})
|
||||
if(PC_Libevent_FOUND)
|
||||
set(Libevent_VERSION ${PC_Libevent_VERSION})
|
||||
else()
|
||||
foreach(_libevent_comp ${_EVENT_COMPONENTS})
|
||||
list(APPEND PC_Libevent_LIBRARIES event_${_libevent_comp})
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
find_path(Libevent_INCLUDE_DIR
|
||||
NAMES event2/event.h
|
||||
HINTS ${Libevent_ROOT} ${PC_Libevent_INCLUDEDIR} ${PC_Libevent_INCLUDE_DIRS} /usr
|
||||
PATHS $ENV{Libevent_DIR} ${Libevent_DIR}
|
||||
PATH_SUFFIXES include
|
||||
)
|
||||
|
||||
foreach(Libevent_var ${PC_Libevent_LIBRARIES})
|
||||
unset(Libevent_lib CACHE)
|
||||
find_library(
|
||||
Libevent_lib
|
||||
NAMES
|
||||
${Libevent_var}
|
||||
HINTS ${Libevent_ROOT} ${PC_Libevent_LIBDIR} ${PC_Libevent_LIBRARY_DIRS}
|
||||
PATHS $ENV{Libevent_DIR} ${Libevent_DIR}
|
||||
PATH_SUFFIXES ${CMAKE_INSTALL_LIBDIR} lib)
|
||||
if(Libevent_lib)
|
||||
string(REPLACE event_ "" _name ${Libevent_var})
|
||||
add_library(Libevent::${_name} UNKNOWN IMPORTED)
|
||||
set_target_properties(Libevent::${_name} PROPERTIES
|
||||
IMPORTED_LOCATION "${Libevent_lib}"
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${Libevent_INCLUDE_DIR}")
|
||||
list(APPEND Libevent_LIBRARY ${Libevent_lib})
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(Libevent
|
||||
REQUIRED_VARS Libevent_LIBRARY Libevent_INCLUDE_DIR)
|
||||
|
||||
mark_as_advanced(Libevent_FOUND Libevent_INCLUDE_DIR Libevent_LIBRARY Libevent_lib)
|
||||
|
||||
set(Libevent_INCLUDE_DIRS ${Libevent_INCLUDE_DIR})
|
||||
set(Libevent_LIBRARIES ${Libevent_LIBRARY})
|
||||
unset(Libevent_INCLUDE_DIR)
|
||||
unset(Libevent_LIBRARY)
|
||||
300
cmake/FindMySQL.cmake
Normal file
300
cmake/FindMySQL.cmake
Normal file
@ -0,0 +1,300 @@
|
||||
# Find MySQL.
|
||||
#
|
||||
# This module prefers the MariaDB implementation of MySQL (it works better, especially on Windows). It will
|
||||
# only look for standard MySQL if MariaDB is not found.
|
||||
#
|
||||
# Set this variable to any additional path you want the module to search:
|
||||
# MySQL_DIR
|
||||
#
|
||||
# Imported targets defined by this module:
|
||||
# MySQL::mysql - shared library if available, or static if that's all there is
|
||||
# MySQL::mysql_shared - shared library
|
||||
# MySQL::mysql_static - static library
|
||||
#
|
||||
# Informational variables:
|
||||
# MySQL_FOUND - MySQL (or all requested components of MySQL) was found.
|
||||
# MySQL_VERSION - the version of MySQL that was found
|
||||
# MySQL_IS_MARIADB - TRUE if the MySQL that was found is MariaDB
|
||||
#
|
||||
|
||||
include(CacheLog)
|
||||
include(FindPackageHandleStandardArgs)
|
||||
|
||||
# Helper function for globbing for directories.
|
||||
function(append_glob_dirs list_name glob_path)
|
||||
file(TO_CMAKE_PATH "${glob_path}" glob_path)
|
||||
file(GLOB dirs LIST_DIRECTORIES true "${glob_path}")
|
||||
if (dirs)
|
||||
list(APPEND ${list_name} "${dirs}")
|
||||
set(${list_name} "${${list_name}}" PARENT_SCOPE)
|
||||
endif ()
|
||||
endfunction()
|
||||
|
||||
# If MySQL_DIR has changed since the last invocation, wipe internal cache variables so we can search for everything
|
||||
# again.
|
||||
if (NOT "${MySQL_DIR}" STREQUAL "${_internal_old_mysql_dir}")
|
||||
unset_cachelog_entries()
|
||||
endif ()
|
||||
reset_cachelog()
|
||||
|
||||
set(_old_suffixes "${CMAKE_FIND_LIBRARY_SUFFIXES}")
|
||||
|
||||
# Set path guesses.
|
||||
set(_paths)
|
||||
if (CMAKE_HOST_WIN32)
|
||||
if (CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||
set(archdir "$ENV{ProgramFiles}")
|
||||
set(notarchdir "$ENV{ProgramFiles\(x86\)}")
|
||||
else ()
|
||||
set(archdir "$ENV{ProgramFiles\(x86\)}")
|
||||
set(notarchdir "$ENV{ProgramFiles}")
|
||||
endif ()
|
||||
# MariaDB
|
||||
append_glob_dirs(_paths "${archdir}/MariaDB*/")
|
||||
append_glob_dirs(_paths "${notarchdir}/MariaDB*/")
|
||||
# MySQL
|
||||
append_glob_dirs(_paths "${archdir}/MySQL/MySQL Connector.C*/")
|
||||
append_glob_dirs(_paths "${notarchdir}/MySQL/MySQL Connector.C*/")
|
||||
else ()
|
||||
if (CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||
set(arch 64)
|
||||
else ()
|
||||
set(arch 32)
|
||||
endif ()
|
||||
list(APPEND _paths
|
||||
/usr/local/mariadb${arch}
|
||||
/usr/local/mysql${arch}
|
||||
/usr/local/mariadb
|
||||
/usr/local/mysql
|
||||
)
|
||||
if (APPLE)
|
||||
list(APPEND _paths /usr/local/opt/mariadb-connector-c)
|
||||
append_glob_dirs(_paths "/usr/local/Cellar/mariadb-connector-c/*/")
|
||||
list(APPEND _paths /usr/local/opt/mysql-connector-c)
|
||||
append_glob_dirs(_paths "/usr/local/Cellar/mysql-connector-c/*/")
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
# Find include directory. Try hints set by variable and stuff from _paths, first.
|
||||
set(_suffixes
|
||||
mariadb
|
||||
include/mariadb
|
||||
mariadb/include
|
||||
mysql
|
||||
include/mysql include
|
||||
)
|
||||
find_path(MySQL_INCLUDE_DIR
|
||||
NAMES mysql.h
|
||||
HINTS ${MySQL_DIR}
|
||||
$ENV{MySQL_DIR}
|
||||
${MYSQL_ROOT_DIR}
|
||||
PATHS ${_paths}
|
||||
PATH_SUFFIXES ${_suffixes}
|
||||
NO_DEFAULT_PATH
|
||||
)
|
||||
if (NOT MySQL_INCLUDE_DIR)
|
||||
# If we didn't find anything using those hints, proceed to checking system paths. We need
|
||||
# to do this in two steps in order to prevent a MySQL installation installed in system paths
|
||||
# from being found before a MariaDB installation in /usr/local.
|
||||
find_path(MySQL_INCLUDE_DIR
|
||||
NAMES mysql.h
|
||||
PATH_SUFFIXES ${_suffixes}
|
||||
)
|
||||
endif ()
|
||||
add_to_cachelog(MySQL_INCLUDE_DIR)
|
||||
|
||||
if (MySQL_INCLUDE_DIR)
|
||||
# Figure out if these headers belong to MariaDB or not.
|
||||
if (MySQL_INCLUDE_DIR MATCHES "[Mm][Aa][Rr][Ii][Aa][Dd][Bb]")
|
||||
set(MySQL_IS_MARIADB TRUE)
|
||||
else ()
|
||||
set(MySQL_IS_MARIADB FALSE)
|
||||
endif ()
|
||||
|
||||
# Calculate root directory of installation from include directory.
|
||||
string(REGEX REPLACE "(/)*include(/)*.*$" "" _root_dir "${MySQL_INCLUDE_DIR}")
|
||||
set(MySQL_DIR "${_root_dir}" CACHE PATH "Root directory of MySQL installation" FORCE)
|
||||
set(_internal_old_mysql_dir "${MySQL_DIR}" CACHE INTERNAL "" FORCE)
|
||||
mark_as_advanced(FORCE MySQL_DIR)
|
||||
|
||||
# Find version by parsing the mysql_version.h or mariadb_version.h header.
|
||||
set(ver_file "${MySQL_INCLUDE_DIR}/mysql_version.h")
|
||||
if (NOT EXISTS "${ver_file}")
|
||||
# Note: some (but not all) mariadb installations in the wild have mariadb_version.h instead of mysql_version.h
|
||||
set(ver_file "${MySQL_INCLUDE_DIR}/mariadb_version.h")
|
||||
if (EXISTS "${ver_file}")
|
||||
set(MySQL_IS_MARIADB TRUE)
|
||||
else ()
|
||||
set(ver_file)
|
||||
endif ()
|
||||
endif ()
|
||||
if (ver_file)
|
||||
file(STRINGS "${ver_file}" _id_str REGEX "^[ \t]*#[ \t]*define[\t ]+MYSQL_VERSION_ID[ \t]+[0-9]+")
|
||||
if (_id_str MATCHES "^[ \t]*#[ \t]*define[\t ]+MYSQL_VERSION_ID[ \t]+([0-9]+)")
|
||||
math(EXPR _major "${CMAKE_MATCH_1} / 10000")
|
||||
math(EXPR _minor "( ${CMAKE_MATCH_1} % 10000 ) / 100")
|
||||
math(EXPR _patch "${CMAKE_MATCH_1} % 100")
|
||||
set(MySQL_VERSION "${_major}.${_minor}.${_patch}")
|
||||
endif ()
|
||||
|
||||
# If we haven't detected mariadb yet, try scanning the version file for mentions.
|
||||
if (NOT MySQL_IS_MARIADB)
|
||||
file(STRINGS "${MySQL_INCLUDE_DIR}/mysql_version.h" _mariadb REGEX [Mm][Aa][Rr][Ii][Aa][Dd][Bb])
|
||||
if (_mariadb)
|
||||
set(MySQL_IS_MARIADB TRUE)
|
||||
endif ()
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
# Set library names, based on which mysql we found.
|
||||
if (MySQL_IS_MARIADB)
|
||||
set(_static_names mariadbclient mariadb)
|
||||
set(_shared_names libmariadb mariadb)
|
||||
set(_dll_names libmariadb)
|
||||
else ()
|
||||
set(_static_names mysqlclient)
|
||||
set(_shared_names libmysql mysqlclient)
|
||||
set(_dll_names libmysql)
|
||||
endif ()
|
||||
|
||||
# Find static library.
|
||||
set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_STATIC_LIBRARY_SUFFIX})
|
||||
foreach(defpath "NO_DEFAULT_PATH" "")
|
||||
find_library(MySQL_STATIC_LIBRARY
|
||||
NAMES ${_static_names}
|
||||
NAMES_PER_DIR
|
||||
HINTS ${MySQL_DIR}
|
||||
PATH_SUFFIXES lib lib/mariadb
|
||||
${defpath}
|
||||
)
|
||||
if (MySQL_STATIC_LIBRARY)
|
||||
break()
|
||||
endif ()
|
||||
endforeach()
|
||||
add_to_cachelog(MySQL_STATIC_LIBRARY)
|
||||
if (MySQL_STATIC_LIBRARY)
|
||||
set(MySQL_mysql_static_FOUND TRUE)
|
||||
set(MySQL_mysql_FOUND TRUE)
|
||||
endif ()
|
||||
|
||||
# Find shared library (will pick up static lib if shared not found).
|
||||
set(CMAKE_FIND_LIBRARY_SUFFIXES "${_old_suffixes}")
|
||||
foreach(defpath "NO_DEFAULT_PATH" "")
|
||||
find_library(MySQL_LIBRARY
|
||||
NAMES ${_shared_names}
|
||||
NAMES_PER_DIR
|
||||
HINTS ${MySQL_DIR}
|
||||
PATH_SUFFIXES lib lib/mariadb
|
||||
${defpath}
|
||||
)
|
||||
if (MySQL_LIBRARY)
|
||||
break()
|
||||
endif ()
|
||||
endforeach()
|
||||
add_to_cachelog(MySQL_LIBRARY)
|
||||
if (MySQL_LIBRARY AND NOT MySQL_LIBRARY STREQUAL MySQL_STATIC_LIBRARY)
|
||||
set(MySQL_mysql_shared_FOUND TRUE)
|
||||
set(MySQL_mysql_FOUND TRUE)
|
||||
endif ()
|
||||
|
||||
# Find the DLL (if any).
|
||||
if (WIN32)
|
||||
set(CMAKE_FIND_LIBRARY_SUFFIXES .dll)
|
||||
foreach(defpath "NO_DEFAULT_PATH" "")
|
||||
find_library(MySQL_DLL_LIBRARY
|
||||
NAMES ${_dll_names}
|
||||
NAMES_PER_DIR
|
||||
HINTS ${MySQL_DIR}
|
||||
PATH_SUFFIXES bin lib bin/mariadb lib/mariadb ""
|
||||
${defpath}
|
||||
)
|
||||
if (MySQL_DLL_LIBRARY)
|
||||
break()
|
||||
endif ()
|
||||
endforeach()
|
||||
add_to_cachelog(MySQL_DLL_LIBRARY)
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
set(_reqs MySQL_INCLUDE_DIR)
|
||||
if (NOT MySQL_FIND_COMPONENTS) # If user didn't request any particular component explicitly:
|
||||
if (NOT MySQL_mysql_FOUND)
|
||||
list(APPEND _reqs MySQL_LIBRARY)
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
find_package_handle_standard_args(MySQL
|
||||
REQUIRED_VARS ${_reqs}
|
||||
VERSION_VAR MySQL_VERSION
|
||||
HANDLE_COMPONENTS
|
||||
FAIL_MESSAGE "MySQL not found, try -DMySQL_DIR=<path>"
|
||||
)
|
||||
add_to_cachelog(FIND_PACKAGE_MESSAGE_DETAILS_MySQL)
|
||||
|
||||
# Static library.
|
||||
if (MySQL_mysql_static_FOUND AND NOT TARGET MySQL::mysql_static)
|
||||
add_library(MySQL::mysql_static STATIC IMPORTED)
|
||||
set_target_properties(MySQL::mysql_static PROPERTIES
|
||||
IMPORTED_LOCATION "${MySQL_STATIC_LIBRARY}"
|
||||
IMPORTED_LINK_INTERFACE_LANGUAGES "C"
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${MySQL_INCLUDE_DIR}"
|
||||
)
|
||||
set(_mysql_any MySQL::mysql_static)
|
||||
endif ()
|
||||
|
||||
# Shared library.
|
||||
if (MySQL_mysql_shared_FOUND AND NOT TARGET MySQL::mysql_shared)
|
||||
add_library(MySQL::mysql_shared SHARED IMPORTED)
|
||||
set_target_properties(MySQL::mysql_shared PROPERTIES
|
||||
IMPORTED_LINK_INTERFACE_LANGUAGES "C"
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${MySQL_INCLUDE_DIR}"
|
||||
)
|
||||
if (WIN32)
|
||||
set_target_properties(MySQL::mysql_shared PROPERTIES
|
||||
IMPORTED_IMPLIB "${MySQL_LIBRARY}"
|
||||
)
|
||||
if (MySQL_DLL_LIBRARY)
|
||||
set_target_properties(MySQL::mysql_shared PROPERTIES
|
||||
IMPORTED_LOCATION "${MySQL_DLL_LIBRARY}"
|
||||
)
|
||||
endif ()
|
||||
else ()
|
||||
set_target_properties(MySQL::mysql_shared PROPERTIES
|
||||
IMPORTED_LOCATION "${MySQL_LIBRARY}"
|
||||
)
|
||||
endif ()
|
||||
set(_mysql_any MySQL::mysql_shared)
|
||||
endif ()
|
||||
|
||||
# I-don't-care library (shared, or static if shared not available).
|
||||
if (MySQL_mysql_FOUND AND NOT TARGET MySQL::mysql)
|
||||
add_library(MySQL::mysql INTERFACE IMPORTED)
|
||||
set_target_properties(MySQL::mysql PROPERTIES
|
||||
INTERFACE_LINK_LIBRARIES ${_mysql_any}
|
||||
)
|
||||
endif ()
|
||||
|
||||
set(CMAKE_FIND_LIBRARY_SUFFIXES "${_old_suffixes}")
|
||||
|
||||
# From https://github.com/Monetra/mstdlib/blob/master/CMakeModules
|
||||
# The MIT License (MIT)
|
||||
|
||||
# Copyright (c) 2015-2017 Main Street Softworks, Inc.
|
||||
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furnished to do so, subject to the following conditions:
|
||||
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
260
cmake/FindPostgreSQL.cmake
Normal file
260
cmake/FindPostgreSQL.cmake
Normal file
@ -0,0 +1,260 @@
|
||||
# Find PostgreSQL.
|
||||
#
|
||||
# Specifically, this finds the C client library (libpq) that can be used to talk to PostgreSQL databases.
|
||||
#
|
||||
# Set this variable to any additional path you want the module to search:
|
||||
# PostgreSQL_DIR
|
||||
#
|
||||
# Imported targets defined by this module:
|
||||
# PostgreSQL::pq - shared library if available, or static if that's all there is
|
||||
# PostgreSQL::pq_shared - shared library
|
||||
# PostgreSQL::pq_static - static library
|
||||
#
|
||||
# Informational variables:
|
||||
# PostgreSQL_FOUND - PostgreSQL (or all requested components of PostgreSQL) was found.
|
||||
# PostgreSQL_VERSION - the version of PostgreSQL that was found
|
||||
#
|
||||
|
||||
include(CacheLog)
|
||||
include(FindPackageHandleStandardArgs)
|
||||
|
||||
# Helper function for globbing for directories.
|
||||
function(append_glob_dirs list_name glob_path)
|
||||
file(TO_CMAKE_PATH "${glob_path}" glob_path)
|
||||
file(GLOB dirs LIST_DIRECTORIES true "${glob_path}")
|
||||
if (dirs)
|
||||
list(APPEND ${list_name} "${dirs}")
|
||||
set(${list_name} "${${list_name}}" PARENT_SCOPE)
|
||||
endif ()
|
||||
endfunction()
|
||||
|
||||
# If PostgreSQL_DIR has changed since the last invocation, wipe internal cache variables so we can search for everything
|
||||
# again.
|
||||
if (NOT "${PostgreSQL_DIR}" STREQUAL "${_internal_old_postgresql_dir}")
|
||||
unset_cachelog_entries()
|
||||
endif ()
|
||||
reset_cachelog()
|
||||
|
||||
set(_old_suffixes "${CMAKE_FIND_LIBRARY_SUFFIXES}")
|
||||
|
||||
# Set path guesses.
|
||||
set(_paths)
|
||||
if (CMAKE_HOST_WIN32)
|
||||
if (CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||
set(archdir "$ENV{ProgramFiles}")
|
||||
set(notarchdir "$ENV{ProgramFiles\(x86\)}")
|
||||
set(arch 64)
|
||||
else ()
|
||||
set(archdir "$ENV{ProgramFiles\(x86\)}")
|
||||
set(notarchdir "$ENV{ProgramFiles}")
|
||||
set(arch 32)
|
||||
endif ()
|
||||
# This should find installations from either the BigSQL or EDB Postgres installers.
|
||||
# (Note: I'd recommend BigSQL, it's built with MinGW, so it's easier to package)
|
||||
list(APPEND _paths /PostgreSQL${arch})
|
||||
append_glob_dirs(_paths "/PostgreSQL${arch}/pg*/")
|
||||
list(APPEND _paths /PostgreSQL)
|
||||
append_glob_dirs(_paths "/PostgreSQL/pg*/")
|
||||
list(APPEND _paths "${archdir}/PostgreSQL")
|
||||
append_glob_dirs(_paths "${archdir}/PostgreSQL/*/")
|
||||
list(APPEND _paths "${notarchdir}/PostgreSQL")
|
||||
append_glob_dirs(_paths "${notarchdir}/PostgreSQL/*/")
|
||||
else ()
|
||||
if (CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||
set(arch 64)
|
||||
else ()
|
||||
set(arch 32)
|
||||
endif ()
|
||||
list(APPEND _paths
|
||||
/usr/local/postgresql${arch}
|
||||
/usr/local/pgsql${arch}
|
||||
/usr/local/postgresql
|
||||
/usr/local/pgsql
|
||||
)
|
||||
append_glob_dirs(_paths "/usr/pgsql-*")
|
||||
endif ()
|
||||
|
||||
# Find include directory.
|
||||
find_path(PostgreSQL_INCLUDE_DIR
|
||||
NAMES libpq-fe.h
|
||||
HINTS ${PostgreSQL_DIR}
|
||||
$ENV{PostgreSQL_DIR}
|
||||
${POSTGRESQL_ROOT_DIR}
|
||||
PATHS ${_paths}
|
||||
PATH_SUFFIXES include include/postgresql postgresql
|
||||
)
|
||||
add_to_cachelog(PostgreSQL_INCLUDE_DIR)
|
||||
|
||||
if (PostgreSQL_INCLUDE_DIR)
|
||||
# Calculate root directory of installation from include directory.
|
||||
string(REGEX REPLACE "(/)*include(/)*.*$" "" _root_dir "${PostgreSQL_INCLUDE_DIR}")
|
||||
set(PostgreSQL_DIR "${_root_dir}" CACHE PATH "Root directory of PostgreSQL installation" FORCE)
|
||||
set(_internal_old_postgresql_dir "${PostgreSQL_DIR}" CACHE INTERNAL "" FORCE)
|
||||
mark_as_advanced(FORCE PostgreSQL_DIR)
|
||||
|
||||
# Find version by parsing the pg_config.h header.
|
||||
set(header "${PostgreSQL_INCLUDE_DIR}/pg_config_x86_64.h")
|
||||
if (NOT EXISTS "${header}")
|
||||
set(header "${PostgreSQL_INCLUDE_DIR}/pg_config_x86.h")
|
||||
if (NOT EXISTS "${header}")
|
||||
set(header "${PostgreSQL_INCLUDE_DIR}/pg_config.h")
|
||||
if (NOT EXISTS "${header}")
|
||||
set(header)
|
||||
endif ()
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
if (header)
|
||||
file(STRINGS "${header}" _ver_str
|
||||
REGEX "^[ \t]*#[ \t]*define[\t ]+PG_VERSION[ \t]+\".*\"")
|
||||
if (_ver_str MATCHES "^[ \t]*#[ \t]*define[\t ]+PG_VERSION[ \t]+\"([^\"]*)\"")
|
||||
set(PostgreSQL_VERSION "${CMAKE_MATCH_1}")
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
# Find static library (if not on Windows, none of the installers I could find there had a static libpq)).
|
||||
if (WIN32)
|
||||
set(PostgreSQL_STATIC_LIBRARY "PostgreSQL_STATIC_LIBRARY-NOTFOUND" CACHE PATH "Path to libpq static lib")
|
||||
else ()
|
||||
set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_STATIC_LIBRARY_SUFFIX})
|
||||
foreach(defpath "NO_DEFAULT_PATH" "")
|
||||
find_library(PostgreSQL_STATIC_LIBRARY
|
||||
NAMES pq libpq
|
||||
NAMES_PER_DIR
|
||||
HINTS ${PostgreSQL_DIR}
|
||||
PATH_SUFFIXES lib
|
||||
${defpath}
|
||||
)
|
||||
if (PostgreSQL_STATIC_LIBRARY)
|
||||
break()
|
||||
endif ()
|
||||
endforeach()
|
||||
endif ()
|
||||
add_to_cachelog(PostgreSQL_STATIC_LIBRARY)
|
||||
if (PostgreSQL_STATIC_LIBRARY)
|
||||
set(PostgreSQL_pq_static_FOUND TRUE)
|
||||
set(PostgreSQL_pq_FOUND TRUE)
|
||||
endif ()
|
||||
|
||||
# Find shared library (will pick up static lib if shared not found).
|
||||
set(CMAKE_FIND_LIBRARY_SUFFIXES "${_old_suffixes}")
|
||||
if (WIN32)
|
||||
list(APPEND CMAKE_FIND_LIBRARY_SUFFIXES ".a") #BigSQL installer names the import lib with a .a extension
|
||||
endif ()
|
||||
foreach(defpath "NO_DEFAULT_PATH" "")
|
||||
find_library(PostgreSQL_LIBRARY
|
||||
NAMES pq libpq
|
||||
NAMES_PER_DIR
|
||||
HINTS ${PostgreSQL_DIR}
|
||||
PATH_SUFFIXES lib
|
||||
${defpath}
|
||||
)
|
||||
if (PostgreSQL_LIBRARY)
|
||||
break()
|
||||
endif ()
|
||||
endforeach()
|
||||
add_to_cachelog(PostgreSQL_LIBRARY)
|
||||
if (PostgreSQL_LIBRARY AND NOT PostgreSQL_LIBRARY STREQUAL PostgreSQL_STATIC_LIBRARY)
|
||||
set(PostgreSQL_pq_shared_FOUND TRUE)
|
||||
set(PostgreSQL_pq_FOUND TRUE)
|
||||
endif ()
|
||||
|
||||
# Find the DLL (if any).
|
||||
if (WIN32)
|
||||
set(CMAKE_FIND_LIBRARY_SUFFIXES .dll)
|
||||
foreach(defpath "NO_DEFAULT_PATH" "")
|
||||
find_library(PostgreSQL_DLL_LIBRARY
|
||||
NAMES pq libpq
|
||||
NAMES_PER_DIR
|
||||
HINTS ${PostgreSQL_DIR}
|
||||
PATH_SUFFIXES bin lib ""
|
||||
${defpath}
|
||||
)
|
||||
if (PostgreSQL_DLL_LIBRARY)
|
||||
break()
|
||||
endif ()
|
||||
endforeach()
|
||||
add_to_cachelog(PostgreSQL_DLL_LIBRARY)
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
set(_reqs PostgreSQL_INCLUDE_DIR)
|
||||
if (NOT PostgreSQL_FIND_COMPONENTS) # If user didn't request any particular component explicitly:
|
||||
list(APPEND _reqs PostgreSQL_LIBRARY) # Will contain shared lib, or static lib if no shared lib present
|
||||
endif ()
|
||||
|
||||
find_package_handle_standard_args(PostgreSQL
|
||||
REQUIRED_VARS ${_reqs}
|
||||
VERSION_VAR PostgreSQL_VERSION
|
||||
HANDLE_COMPONENTS
|
||||
FAIL_MESSAGE "PostgreSQL not found, try -DPostgreSQL_DIR=<path>"
|
||||
)
|
||||
add_to_cachelog(FIND_PACKAGE_MESSAGE_DETAILS_PostgreSQL)
|
||||
|
||||
# Static library.
|
||||
if (PostgreSQL_pq_static_FOUND AND NOT TARGET PostgreSQL::pq_static)
|
||||
add_library(PostgreSQL::pq_static STATIC IMPORTED)
|
||||
set_target_properties(PostgreSQL::pq_static PROPERTIES
|
||||
IMPORTED_LOCATION "${PostgreSQL_STATIC_LIBRARY}"
|
||||
IMPORTED_LINK_INTERFACE_LANGUAGES "C"
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${PostgreSQL_INCLUDE_DIR}"
|
||||
)
|
||||
set(_pq_any PostgreSQL::pq_static)
|
||||
endif ()
|
||||
|
||||
# Shared library.
|
||||
if (PostgreSQL_pq_shared_FOUND AND NOT TARGET PostgreSQL::pq_shared)
|
||||
add_library(PostgreSQL::pq_shared SHARED IMPORTED)
|
||||
set_target_properties(PostgreSQL::pq_shared PROPERTIES
|
||||
IMPORTED_LINK_INTERFACE_LANGUAGES "C"
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${PostgreSQL_INCLUDE_DIR}"
|
||||
)
|
||||
if (WIN32)
|
||||
set_target_properties(PostgreSQL::pq_shared PROPERTIES
|
||||
IMPORTED_IMPLIB "${PostgreSQL_LIBRARY}"
|
||||
)
|
||||
if (PostgreSQL_DLL_LIBRARY)
|
||||
set_target_properties(PostgreSQL::pq_shared PROPERTIES
|
||||
IMPORTED_LOCATION "${PostgreSQL_DLL_LIBRARY}"
|
||||
)
|
||||
endif ()
|
||||
else ()
|
||||
set_target_properties(PostgreSQL::pq_shared PROPERTIES
|
||||
IMPORTED_LOCATION "${PostgreSQL_LIBRARY}"
|
||||
)
|
||||
endif ()
|
||||
set(_pq_any PostgreSQL::pq_shared)
|
||||
endif ()
|
||||
|
||||
# I-don't-care library (shared, or static if shared not available).
|
||||
if (PostgreSQL_pq_FOUND AND NOT TARGET PostgreSQL::pq)
|
||||
add_library(PostgreSQL::pq INTERFACE IMPORTED)
|
||||
set_target_properties(PostgreSQL::pq PROPERTIES
|
||||
INTERFACE_LINK_LIBRARIES ${_pq_any}
|
||||
)
|
||||
endif ()
|
||||
|
||||
set(CMAKE_FIND_LIBRARY_SUFFIXES "${_old_suffixes}")
|
||||
|
||||
# From https://github.com/Monetra/mstdlib/blob/master/CMakeModules
|
||||
# The MIT License (MIT)
|
||||
|
||||
# Copyright (c) 2015-2017 Main Street Softworks, Inc.
|
||||
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furnished to do so, subject to the following conditions:
|
||||
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
224
cmake/FindSQLite.cmake
Normal file
224
cmake/FindSQLite.cmake
Normal file
@ -0,0 +1,224 @@
|
||||
# Find SQLite.
|
||||
#
|
||||
# Set this variable to any additional path you want the module to search:
|
||||
# SQLite_DIR
|
||||
#
|
||||
# Imported targets defined by this module:
|
||||
# SQLite::sqlite - shared library if available, or static if that's all there is
|
||||
# SQLite::sqlite_shared - shared library
|
||||
# SQLite::sqlite_static - static library
|
||||
#
|
||||
# Informational variables:
|
||||
# SQLite_FOUND - sqlite (or all requested components of sqlite) was found.
|
||||
# SQLite_VERSION - the version of sqlite that was found
|
||||
#
|
||||
|
||||
include(CacheLog)
|
||||
include(FindPackageHandleStandardArgs)
|
||||
|
||||
# If SQLite_DIR has changed since the last invocation, wipe internal cache variables so we can search for everything
|
||||
# again.
|
||||
if (NOT "${SQLite_DIR}" STREQUAL "${_internal_old_sqlite_dir}")
|
||||
unset_cachelog_entries()
|
||||
endif ()
|
||||
reset_cachelog()
|
||||
|
||||
set(_old_suffixes "${CMAKE_FIND_LIBRARY_SUFFIXES}")
|
||||
|
||||
find_package(PkgConfig QUIET)
|
||||
if (PKG_CONFIG_FOUND)
|
||||
PKG_CHECK_MODULES(PC_SQLite QUIET sqlite)
|
||||
endif ()
|
||||
|
||||
if (CMAKE_HOST_WIN32)
|
||||
if (CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||
set(archdir "$ENV{ProgramFiles}")
|
||||
set(notarchdir "$ENV{ProgramFiles\(x86\)}")
|
||||
else ()
|
||||
set(archdir "$ENV{ProgramFiles\(x86\)}")
|
||||
set(notarchdir "$ENV{ProgramFiles}")
|
||||
endif ()
|
||||
set(_paths
|
||||
"${archdir}/sqlite"
|
||||
"${archdir}/sqlite3"
|
||||
"${notarchdir}/sqlite"
|
||||
"${notarchdir}/sqlite3"
|
||||
)
|
||||
else ()
|
||||
if (CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||
set(arch 64)
|
||||
else ()
|
||||
set(arch 32)
|
||||
endif ()
|
||||
set(_paths
|
||||
/usr/local/sqlite${arch}
|
||||
/usr/locla/sqlite
|
||||
/usr/local/sqlite3
|
||||
)
|
||||
endif ()
|
||||
|
||||
find_path(SQLite_INCLUDE_DIR
|
||||
NAMES sqlite3.h
|
||||
HINTS ${SQLite_DIR}
|
||||
$ENV{SQLite_DIR}
|
||||
${SQLITE_ROOT_DIR}
|
||||
${PC_SQLite_INCLUDE_DIRS}
|
||||
PATHS ${_paths}
|
||||
PATH_SUFFIXES include
|
||||
)
|
||||
add_to_cachelog(SQLite_INCLUDE_DIR)
|
||||
|
||||
if (SQLite_INCLUDE_DIR)
|
||||
# Calculate root directory of installation from include directory.
|
||||
string(REGEX REPLACE "(/)*include(/)*$" "" _root_dir "${SQLite_INCLUDE_DIR}")
|
||||
set(SQLite_DIR "${_root_dir}" CACHE PATH "Root directory of SQLite installation" FORCE)
|
||||
set(_internal_old_sqlite_dir "${SQLite_DIR}" CACHE INTERNAL "" FORCE)
|
||||
mark_as_advanced(FORCE SQLite_DIR)
|
||||
|
||||
# Find version by parsing SQLite header.
|
||||
if (EXISTS "${SQLite_INCLUDE_DIR}/sqlite3.h")
|
||||
file(STRINGS "${SQLite_INCLUDE_DIR}/sqlite3.h" sqlite_version_str
|
||||
REGEX "^[ \t]*#[ \t]*define[\t ]+SQLITE_VERSION[ \t]+\".*\"")
|
||||
if (sqlite_version_str MATCHES "^[ \t]*#[ \t]*define[\t ]+SQLITE_VERSION[ \t]+\"([^\"]*)\"")
|
||||
set(SQLite_VERSION "${CMAKE_MATCH_1}")
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
# Find static library.
|
||||
set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_STATIC_LIBRARY_SUFFIX})
|
||||
foreach(defpath "NO_DEFAULT_PATH" "")
|
||||
find_library(SQLite_STATIC_LIBRARY
|
||||
NAMES sqlite_static sqlite3_static sqlitestatic sqlite3static sqlite sqlite3
|
||||
NAMES_PER_DIR
|
||||
HINTS ${SQLite_DIR} ${PC_SQLite_LIBRARY_DIRS}
|
||||
PATH_SUFFIXES lib ""
|
||||
${defpath}
|
||||
)
|
||||
if (SQLite_STATIC_LIBRARY)
|
||||
break()
|
||||
endif ()
|
||||
endforeach()
|
||||
add_to_cachelog(SQLite_STATIC_LIBRARY)
|
||||
if (SQLite_STATIC_LIBRARY)
|
||||
set(SQLite_sqlite_static_FOUND TRUE)
|
||||
set(SQLite_sqlite_FOUND TRUE)
|
||||
endif ()
|
||||
|
||||
# Find shared library (will pick up static lib if shared not found).
|
||||
set(CMAKE_FIND_LIBRARY_SUFFIXES "${_old_suffixes}")
|
||||
foreach(defpath "NO_DEFAULT_PATH" "")
|
||||
find_library(SQLite_LIBRARY
|
||||
NAMES sqlite sqlite3 sqlite_satic sqlite3_static sqlitestatic sqlite3static
|
||||
NAMES_PER_DIR
|
||||
HINTS ${SQLite_DIR} ${PC_SQLite_LIBRARY_DIRS}
|
||||
PATH_SUFFIXES lib ""
|
||||
${defpath}
|
||||
)
|
||||
if (SQLite_LIBRARY)
|
||||
break()
|
||||
endif ()
|
||||
endforeach()
|
||||
add_to_cachelog(SQLite_LIBRARY)
|
||||
if (SQLite_LIBRARY AND NOT SQLite_LIBRARY STREQUAL SQLite_STATIC_LIBRARY)
|
||||
set(SQLite_sqlite_shared_FOUND TRUE)
|
||||
set(SQLite_sqlite_FOUND TRUE)
|
||||
endif ()
|
||||
|
||||
# Look for the DLL.
|
||||
if (WIN32)
|
||||
set(CMAKE_FIND_LIBRARY_SUFFIXES .dll)
|
||||
foreach(defpath "NO_DEFAULT_PATH" "")
|
||||
find_library(SQLite_DLL_LIBRARY
|
||||
NAMES sqlite sqlite3
|
||||
NAMES_PER_DIR
|
||||
HINTS ${SQLite_DIR}
|
||||
PATH_SUFFIXES bin lib ""
|
||||
${defpath}
|
||||
)
|
||||
if (SQLite_DLL_LIBRARY)
|
||||
break()
|
||||
endif ()
|
||||
endforeach()
|
||||
add_to_cachelog(SQLite_DLL_LIBRARY)
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
set(_reqs SQLite_INCLUDE_DIR)
|
||||
if (NOT SQLite_FIND_COMPONENTS) # If user didn't request any particular component explicitly:
|
||||
list(APPEND _reqs SQLite_LIBRARY) # Will contain shared lib, or static lib if no shared lib present
|
||||
endif ()
|
||||
|
||||
find_package_handle_standard_args(SQLite
|
||||
REQUIRED_VARS ${_reqs}
|
||||
VERSION_VAR SQLite_VERSION
|
||||
HANDLE_COMPONENTS
|
||||
FAIL_MESSAGE "SQLite not found, try -DSQLite_DIR=<path>"
|
||||
)
|
||||
|
||||
# Static library.
|
||||
if (SQLite_sqlite_static_FOUND AND NOT TARGET SQLite::sqlite_static)
|
||||
add_library(SQLite::sqlite_static STATIC IMPORTED)
|
||||
set_target_properties(SQLite::sqlite_static PROPERTIES
|
||||
IMPORTED_LOCATION "${SQLite_STATIC_LIBRARY}"
|
||||
IMPORTED_LINK_INTERFACE_LANGUAGES "C"
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${SQLite_INCLUDE_DIR}"
|
||||
)
|
||||
set(_sqlite_any SQLite::sqlite_static)
|
||||
endif ()
|
||||
|
||||
# Shared library.
|
||||
if (SQLite_sqlite_shared_FOUND AND NOT TARGET SQLite::sqlite_shared)
|
||||
add_library(SQLite::sqlite_shared SHARED IMPORTED)
|
||||
set_target_properties(SQLite::sqlite_shared PROPERTIES
|
||||
IMPORTED_LINK_INTERFACE_LANGUAGES "C"
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${SQLite_INCLUDE_DIR}"
|
||||
)
|
||||
if (WIN32)
|
||||
set_target_properties(SQLite::sqlite_shared PROPERTIES
|
||||
IMPORTED_IMPLIB "${SQLite_LIBRARY}"
|
||||
)
|
||||
if (SQLite_DLL_LIBRARY)
|
||||
set_target_properties(SQLite::sqlite_shared PROPERTIES
|
||||
IMPORTED_LOCATION "${SQLite_DLL_LIBRARY}"
|
||||
)
|
||||
endif ()
|
||||
else ()
|
||||
set_target_properties(SQLite::sqlite_shared PROPERTIES
|
||||
IMPORTED_LOCATION "${SQLite_LIBRARY}"
|
||||
)
|
||||
endif ()
|
||||
set(_sqlite_any SQLite::sqlite_shared)
|
||||
endif ()
|
||||
|
||||
# I-don't-care library (shared, or static if shared not available).
|
||||
if (SQLite_sqlite_FOUND AND NOT TARGET SQLite::sqlite)
|
||||
add_library(SQLite::sqlite INTERFACE IMPORTED)
|
||||
set_target_properties(SQLite::sqlite PROPERTIES
|
||||
INTERFACE_LINK_LIBRARIES ${_sqlite_any}
|
||||
)
|
||||
endif ()
|
||||
|
||||
set(CMAKE_FIND_LIBRARY_SUFFIXES "${_old_suffixes}")
|
||||
|
||||
# From https://github.com/Monetra/mstdlib/blob/master/CMakeModules
|
||||
# The MIT License (MIT)
|
||||
|
||||
# Copyright (c) 2015-2017 Main Street Softworks, Inc.
|
||||
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furnished to do so, subject to the following conditions:
|
||||
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
57
cmake/cmake_uninstall.cmake.in
Normal file
57
cmake/cmake_uninstall.cmake.in
Normal file
@ -0,0 +1,57 @@
|
||||
# Author: Kang Lin(kl222@126.com)
|
||||
|
||||
# Use: Please add the follow code to CMakeLists.txt
|
||||
|
||||
# # Install runtime target
|
||||
# add_custom_target(install-runtime
|
||||
# COMMAND
|
||||
# "${CMAKE_COMMAND}" -DCMAKE_INSTALL_COMPONENT=Runtime
|
||||
# -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_install.cmake"
|
||||
# )
|
||||
# # Uninstall runtime target
|
||||
# add_custom_target(uninstall-runtime
|
||||
# COMMAND
|
||||
# "${CMAKE_COMMAND}" -DCMAKE_INSTALL_COMPONENT=Runtime
|
||||
# -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
|
||||
# )
|
||||
# # Create will be delete files
|
||||
# CONFIGURE_FILE(
|
||||
# "${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in"
|
||||
# "${CMAKE_BINARY_DIR}/cmake_uninstall.cmake"
|
||||
# IMMEDIATE @ONLY)
|
||||
# # Create unistall target
|
||||
# ADD_CUSTOM_TARGET(uninstall
|
||||
# "${CMAKE_COMMAND}" -P "${CMAKE_BINARY_DIR}/cmake_uninstall.cmake"
|
||||
# DEPENDS uninstall-runtime)
|
||||
|
||||
|
||||
if(CMAKE_INSTALL_COMPONENT)
|
||||
set(CMAKE_INSTALL_MANIFEST "install_manifest_${CMAKE_INSTALL_COMPONENT}.txt")
|
||||
else()
|
||||
set(CMAKE_INSTALL_MANIFEST "install_manifest.txt")
|
||||
endif()
|
||||
|
||||
IF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/${CMAKE_INSTALL_MANIFEST}")
|
||||
MESSAGE(WARNING "Cannot find install manifest: \"@CMAKE_CURRENT_BINARY_DIR@/${CMAKE_INSTALL_MANIFEST}\"")
|
||||
ELSE()
|
||||
|
||||
FILE(READ "@CMAKE_CURRENT_BINARY_DIR@/${CMAKE_INSTALL_MANIFEST}" files)
|
||||
STRING(REGEX REPLACE "\n" ";" files "${files}")
|
||||
FOREACH(file ${files})
|
||||
MESSAGE(STATUS "Uninstalling \"${file}\"")
|
||||
IF(EXISTS "${file}")
|
||||
EXEC_PROGRAM(
|
||||
"@CMAKE_COMMAND@" ARGS "-E remove \"${file}\""
|
||||
OUTPUT_VARIABLE rm_out
|
||||
RETURN_VALUE rm_retval
|
||||
)
|
||||
IF("${rm_retval}" STREQUAL 0)
|
||||
ELSE("${rm_retval}" STREQUAL 0)
|
||||
MESSAGE(FATAL_ERROR "Problem when removing \"${file}\"")
|
||||
ENDIF("${rm_retval}" STREQUAL 0)
|
||||
ELSE(EXISTS "${file}")
|
||||
MESSAGE(STATUS "File \"${file}\" does not exist.")
|
||||
ENDIF(EXISTS "${file}")
|
||||
ENDFOREACH(file)
|
||||
|
||||
ENDIF()
|
||||
8
src/CMakeLists.txt
Normal file
8
src/CMakeLists.txt
Normal file
@ -0,0 +1,8 @@
|
||||
# Author: Kang Lin (kl222@126.com)
|
||||
|
||||
project(coturn)
|
||||
|
||||
add_subdirectory(client)
|
||||
add_subdirectory(server)
|
||||
add_subdirectory(apps)
|
||||
|
||||
10
src/apps/CMakeLists.txt
Normal file
10
src/apps/CMakeLists.txt
Normal file
@ -0,0 +1,10 @@
|
||||
# Author: Kang Lin (kl222@126.com)
|
||||
|
||||
add_subdirectory(common)
|
||||
add_subdirectory(natdiscovery)
|
||||
add_subdirectory(oauth)
|
||||
add_subdirectory(peer)
|
||||
add_subdirectory(relay)
|
||||
add_subdirectory(rfc5769)
|
||||
add_subdirectory(stunclient)
|
||||
add_subdirectory(uclient)
|
||||
89
src/apps/common/CMakeLists.txt
Normal file
89
src/apps/common/CMakeLists.txt
Normal file
@ -0,0 +1,89 @@
|
||||
# Author: Kang Lin (kl222@126.com)
|
||||
|
||||
project(turncommon)
|
||||
|
||||
set(SOURCE_FILES
|
||||
apputils.c
|
||||
ns_turn_utils.c
|
||||
stun_buffer.c
|
||||
)
|
||||
|
||||
set(HEADER_FILES
|
||||
apputils.h
|
||||
ns_turn_openssl.h
|
||||
ns_turn_utils.h
|
||||
stun_buffer.h
|
||||
)
|
||||
|
||||
if(NOT WIN32)
|
||||
set(COMMON_LIBS pthread)
|
||||
endif()
|
||||
set(libevent_components core extra openssl)
|
||||
if(NOT WIN32)
|
||||
list(APPEND libevent_components pthreads)
|
||||
endif()
|
||||
find_package(Libevent COMPONENTS ${libevent_components})
|
||||
if(Libevent_FOUND)
|
||||
foreach(_libevent_com ${libevent_components})
|
||||
list(APPEND COMMON_LIBS Libevent::${_libevent_com})
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
find_package(hiredis)
|
||||
if(hiredis_FOUND)
|
||||
list(APPEND SOURCE_FILES hiredis_libevent2.c)
|
||||
list(APPEND HEADER_FILES hiredis_libevent2.h)
|
||||
list(APPEND COMMON_LIBS hiredis::hiredis)
|
||||
else()
|
||||
list(APPEND COMMON_DEFINED TURN_NO_HIREDIS)
|
||||
endif()
|
||||
message("COMMON_LIBS:${COMMON_LIBS}")
|
||||
|
||||
add_library(${PROJECT_NAME} ${SOURCE_FILES} ${HEADER_FILES})
|
||||
|
||||
target_link_libraries(${PROJECT_NAME} PUBLIC ${COMMON_LIBS})
|
||||
target_compile_definitions(${PROJECT_NAME} PUBLIC ${COMMON_DEFINED})
|
||||
|
||||
# See: http://www.it1352.com/478094.html
|
||||
target_include_directories(${PROJECT_NAME} PUBLIC
|
||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
|
||||
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/src/server>
|
||||
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/src>
|
||||
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/src/client>
|
||||
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/src/apps/common>
|
||||
${COMMON_INCLUDE_DIR}
|
||||
)
|
||||
|
||||
# Install head files
|
||||
set_target_properties(${PROJECT_NAME} PROPERTIES
|
||||
VERSION ${VERSION}
|
||||
)
|
||||
|
||||
INSTALL(TARGETS ${PROJECT_NAME}
|
||||
EXPORT ${PROJECT_NAME}Config
|
||||
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
|
||||
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
|
||||
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
|
||||
INCLUDES DESTINATION
|
||||
${CMAKE_INSTALL_INCLUDEDIR}
|
||||
${CMAKE_INSTALL_INCLUDEDIR}/turn
|
||||
${CMAKE_INSTALL_INCLUDEDIR}/turn/client
|
||||
)
|
||||
|
||||
export(TARGETS ${PROJECT_NAME}
|
||||
APPEND FILE ${CMAKE_BINARY_DIR}/${PROJECT_NAME}Config.cmake
|
||||
)
|
||||
|
||||
# Install cmake configure files
|
||||
install(EXPORT ${PROJECT_NAME}Config
|
||||
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake"
|
||||
)
|
||||
# Install cmake version configure file
|
||||
if(DEFINED VERSION)
|
||||
write_basic_package_version_file(
|
||||
"${CMAKE_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
|
||||
VERSION ${VERSION}
|
||||
COMPATIBILITY AnyNewerVersion)
|
||||
install(FILES "${CMAKE_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
|
||||
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake")
|
||||
endif()
|
||||
13
src/apps/natdiscovery/CMakeLists.txt
Normal file
13
src/apps/natdiscovery/CMakeLists.txt
Normal file
@ -0,0 +1,13 @@
|
||||
# Author: Kang Lin (kl222@126.com)
|
||||
|
||||
project(turnutils_natdiscovery)
|
||||
|
||||
set(SOURCE_FILES
|
||||
natdiscovery.c
|
||||
)
|
||||
|
||||
add_executable(${PROJECT_NAME} ${SOURCE_FILES})
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE turnclient)
|
||||
INSTALL(TARGETS ${PROJECT_NAME}
|
||||
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
|
||||
)
|
||||
13
src/apps/oauth/CMakeLists.txt
Normal file
13
src/apps/oauth/CMakeLists.txt
Normal file
@ -0,0 +1,13 @@
|
||||
# Author: Kang Lin (kl222@126.com)
|
||||
|
||||
project(turnutils_oauth)
|
||||
|
||||
set(SOURCE_FILES
|
||||
oauth.c
|
||||
)
|
||||
|
||||
add_executable(${PROJECT_NAME} ${SOURCE_FILES})
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE turnclient)
|
||||
INSTALL(TARGETS ${PROJECT_NAME}
|
||||
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
|
||||
)
|
||||
13
src/apps/peer/CMakeLists.txt
Normal file
13
src/apps/peer/CMakeLists.txt
Normal file
@ -0,0 +1,13 @@
|
||||
# Author: Kang Lin (kl222@126.com)
|
||||
|
||||
project(turnutils_peer)
|
||||
|
||||
set(SOURCE_FILES
|
||||
mainudpserver.c udpserver.c
|
||||
)
|
||||
|
||||
add_executable(${PROJECT_NAME} ${SOURCE_FILES})
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE turnclient)
|
||||
INSTALL(TARGETS ${PROJECT_NAME}
|
||||
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
|
||||
)
|
||||
99
src/apps/relay/CMakeLists.txt
Normal file
99
src/apps/relay/CMakeLists.txt
Normal file
@ -0,0 +1,99 @@
|
||||
# Author: Kang Lin (kl222@126.com)
|
||||
|
||||
project(turnserver)
|
||||
|
||||
set(HEAD_FILES
|
||||
tls_listener.h
|
||||
mainrelay.h
|
||||
turn_admin_server.h
|
||||
dtls_listener.h
|
||||
libtelnet.h
|
||||
ns_ioalib_impl.h
|
||||
ns_sm.h
|
||||
turn_ports.h
|
||||
userdb.h
|
||||
dbdrivers/dbdriver.h
|
||||
)
|
||||
|
||||
set(SOURCE_FILES
|
||||
mainrelay.c
|
||||
netengine.c
|
||||
libtelnet.c
|
||||
turn_admin_server.c
|
||||
tls_listener.c
|
||||
dtls_listener.c
|
||||
ns_ioalib_engine_impl.c
|
||||
turn_ports.c
|
||||
http_server.c
|
||||
acme.c
|
||||
userdb.c
|
||||
dbdrivers/dbdriver.c
|
||||
)
|
||||
|
||||
find_package(SQLite)
|
||||
if(SQLite_FOUND)
|
||||
list(APPEND turnserver_LIBS SQLite::sqlite)
|
||||
list(APPEND SOURCE_FILES dbdrivers/dbd_sqlite.c)
|
||||
list(APPEND HEAD_FILES dbdrivers/dbd_sqlite.h)
|
||||
else()
|
||||
list(APPEND turnserver_DEFINED TURN_NO_SQLITE)
|
||||
endif()
|
||||
|
||||
find_package(PostgreSQL)
|
||||
if(PostgreSQL_FOUND)
|
||||
list(APPEND turnserver_LIBS PostgreSQL::pq)
|
||||
list(APPEND SOURCE_FILES dbdrivers/dbd_pgsql.c)
|
||||
list(APPEND HEAD_FILES dbdrivers/dbd_pgsql.h)
|
||||
else()
|
||||
list(APPEND turnserver_DEFINED TURN_NO_PQ)
|
||||
endif()
|
||||
|
||||
find_package(MySQL)
|
||||
if(MySQL_FOUND)
|
||||
list(APPEND turnserver_LIBS MySQL::mysql)
|
||||
list(APPEND SOURCE_FILES dbdrivers/dbd_mysql.c)
|
||||
list(APPEND HEAD_FILES dbdrivers/dbd_mysql.h)
|
||||
else()
|
||||
list(APPEND turnserver_DEFINED TURN_NO_MYSQL)
|
||||
endif()
|
||||
|
||||
find_package(mongo)
|
||||
if(mongo_FOUND)
|
||||
list(APPEND turnserver_LIBS mongo)
|
||||
list(APPEND SOURCE_FILES dbdrivers/dbd_mongo.c)
|
||||
list(APPEND HEAD_FILES dbdrivers/dbd_mongo.h)
|
||||
else()
|
||||
list(APPEND turnserver_DEFINED TURN_NO_MONGO)
|
||||
endif()
|
||||
|
||||
find_package(hiredis)
|
||||
if(hiredis_FOUND)
|
||||
list(APPEND turnserver_LIBS hiredis::hiredis)
|
||||
list(APPEND SOURCE_FILES dbdrivers/dbd_redis.c)
|
||||
list(APPEND HEAD_FILES dbdrivers/dbd_redis.h)
|
||||
else()
|
||||
list(APPEND turnserver_DEFINED TURN_NO_HIREDIS)
|
||||
endif()
|
||||
|
||||
find_package(libsystemd)
|
||||
if(libsystemd_FOUND)
|
||||
else()
|
||||
list(APPEND turnserver_DEFINED TURN_NO_SYSTEMD)
|
||||
endif()
|
||||
|
||||
find_package(Prometheus)
|
||||
if(Prometheus_FOUND)
|
||||
list(APPEND SOURCE_FILES prom_server.c)
|
||||
list(APPEND HEAD_FILES prom_server.h)
|
||||
else()
|
||||
list(APPEND turnserver_DEFINED TURN_NO_PROMETHEUS)
|
||||
endif()
|
||||
|
||||
add_executable(${PROJECT_NAME} ${SOURCE_FILES} ${HEAD_FILES})
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE turn_server ${turnserver_LIBS})
|
||||
target_include_directories(${PROJECT_NAME} PRIVATE ${turnserver_include_dirs})
|
||||
target_compile_definitions(${PROJECT_NAME} PRIVATE ${turnserver_DEFINED})
|
||||
|
||||
INSTALL(TARGETS ${PROJECT_NAME}
|
||||
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
|
||||
)
|
||||
13
src/apps/rfc5769/CMakeLists.txt
Normal file
13
src/apps/rfc5769/CMakeLists.txt
Normal file
@ -0,0 +1,13 @@
|
||||
# Author: Kang Lin (kl222@126.com)
|
||||
|
||||
project(turnutils_rfc5769check)
|
||||
|
||||
set(SOURCE_FILES
|
||||
rfc5769check.c
|
||||
)
|
||||
|
||||
add_executable(${PROJECT_NAME} ${SOURCE_FILES})
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE turnclient)
|
||||
INSTALL(TARGETS ${PROJECT_NAME}
|
||||
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
|
||||
)
|
||||
13
src/apps/stunclient/CMakeLists.txt
Normal file
13
src/apps/stunclient/CMakeLists.txt
Normal file
@ -0,0 +1,13 @@
|
||||
# Author: Kang Lin (kl222@126.com)
|
||||
|
||||
project(turnutils_stunclient)
|
||||
|
||||
set(SOURCE_FILES
|
||||
stunclient.c
|
||||
)
|
||||
|
||||
add_executable(${PROJECT_NAME} ${SOURCE_FILES})
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE turnclient)
|
||||
INSTALL(TARGETS ${PROJECT_NAME}
|
||||
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
|
||||
)
|
||||
15
src/apps/uclient/CMakeLists.txt
Normal file
15
src/apps/uclient/CMakeLists.txt
Normal file
@ -0,0 +1,15 @@
|
||||
# Author: Kang Lin (kl222@126.com)
|
||||
|
||||
project(turnutils_uclient)
|
||||
|
||||
set(SOURCE_FILES
|
||||
uclient.c
|
||||
startuclient.c
|
||||
mainuclient.c
|
||||
)
|
||||
|
||||
add_executable(${PROJECT_NAME} ${SOURCE_FILES})
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE turnclient)
|
||||
INSTALL(TARGETS ${PROJECT_NAME}
|
||||
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
|
||||
)
|
||||
61
src/client/CMakeLists.txt
Normal file
61
src/client/CMakeLists.txt
Normal file
@ -0,0 +1,61 @@
|
||||
# Author: Kang Lin (kl222@126.com)
|
||||
|
||||
project(turnclient)
|
||||
|
||||
find_package(OpenSSL REQUIRED)
|
||||
|
||||
set(HEADER_FILES
|
||||
${CMAKE_SOURCE_DIR}/src/ns_turn_defs.h
|
||||
${CMAKE_SOURCE_DIR}/src/client++/TurnMsgLib.h
|
||||
ns_turn_ioaddr.h
|
||||
ns_turn_msg.h
|
||||
ns_turn_msg_defs.h
|
||||
ns_turn_msg_defs_experimental.h
|
||||
ns_turn_msg_addr.h
|
||||
)
|
||||
|
||||
set(SOURCE_FILES
|
||||
ns_turn_ioaddr.c
|
||||
ns_turn_msg_addr.c
|
||||
ns_turn_msg.c
|
||||
)
|
||||
|
||||
add_library(${PROJECT_NAME} ${SOURCE_FILES} ${HEADER_FILES})
|
||||
|
||||
target_link_libraries(${PROJECT_NAME} PUBLIC turncommon OpenSSL::SSL OpenSSL::Crypto)
|
||||
|
||||
# Install head files
|
||||
set_target_properties(${PROJECT_NAME} PROPERTIES
|
||||
PUBLIC_HEADER "${HEADER_FILES}"
|
||||
VERSION ${VERSION}
|
||||
)
|
||||
|
||||
INSTALL(TARGETS ${PROJECT_NAME}
|
||||
EXPORT ${PROJECT_NAME}Config
|
||||
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
|
||||
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
|
||||
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
|
||||
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/turn/client
|
||||
INCLUDES DESTINATION
|
||||
${CMAKE_INSTALL_INCLUDEDIR}
|
||||
${CMAKE_INSTALL_INCLUDEDIR}/turn
|
||||
${CMAKE_INSTALL_INCLUDEDIR}/turn/client
|
||||
)
|
||||
|
||||
export(TARGETS ${PROJECT_NAME}
|
||||
APPEND FILE ${CMAKE_BINARY_DIR}/${PROJECT_NAME}Config.cmake
|
||||
)
|
||||
|
||||
# Install cmake configure files
|
||||
install(EXPORT ${PROJECT_NAME}Config
|
||||
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake"
|
||||
)
|
||||
# Install cmake version configure file
|
||||
if(DEFINED VERSION)
|
||||
write_basic_package_version_file(
|
||||
"${CMAKE_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
|
||||
VERSION ${VERSION}
|
||||
COMPATIBILITY AnyNewerVersion)
|
||||
install(FILES "${CMAKE_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
|
||||
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake")
|
||||
endif()
|
||||
63
src/server/CMakeLists.txt
Normal file
63
src/server/CMakeLists.txt
Normal file
@ -0,0 +1,63 @@
|
||||
# Author: Kang Lin (kl222@126.com)
|
||||
|
||||
project(turn_server)
|
||||
|
||||
set(SOURCE_FILES
|
||||
ns_turn_allocation.c
|
||||
ns_turn_maps_rtcp.c
|
||||
ns_turn_maps.c
|
||||
ns_turn_server.c
|
||||
)
|
||||
|
||||
set(HEADER_FILES
|
||||
ns_turn_allocation.h
|
||||
ns_turn_ioalib.h
|
||||
ns_turn_khash.h
|
||||
ns_turn_maps_rtcp.h
|
||||
ns_turn_maps.h
|
||||
ns_turn_server.h
|
||||
ns_turn_session.h
|
||||
)
|
||||
|
||||
add_library(${PROJECT_NAME} ${SOURCE_FILES} ${HEADER_FILES})
|
||||
|
||||
target_link_libraries(${PROJECT_NAME} PUBLIC turnclient)
|
||||
|
||||
# See: http://www.it1352.com/478094.html
|
||||
target_include_directories(${PROJECT_NAME} PUBLIC
|
||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
|
||||
)
|
||||
|
||||
# Install head files
|
||||
set_target_properties(${PROJECT_NAME} PROPERTIES
|
||||
VERSION ${VERSION}
|
||||
)
|
||||
|
||||
INSTALL(TARGETS ${PROJECT_NAME}
|
||||
EXPORT ${PROJECT_NAME}Config
|
||||
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
|
||||
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
|
||||
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
|
||||
INCLUDES DESTINATION
|
||||
${CMAKE_INSTALL_INCLUDEDIR}
|
||||
${CMAKE_INSTALL_INCLUDEDIR}/turn
|
||||
${CMAKE_INSTALL_INCLUDEDIR}/turn/client
|
||||
)
|
||||
|
||||
export(TARGETS ${PROJECT_NAME}
|
||||
APPEND FILE ${CMAKE_BINARY_DIR}/${PROJECT_NAME}Config.cmake
|
||||
)
|
||||
|
||||
# Install cmake configure files
|
||||
install(EXPORT ${PROJECT_NAME}Config
|
||||
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake"
|
||||
)
|
||||
# Install cmake version configure file
|
||||
if(DEFINED VERSION)
|
||||
write_basic_package_version_file(
|
||||
"${CMAKE_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
|
||||
VERSION ${VERSION}
|
||||
COMPATIBILITY AnyNewerVersion)
|
||||
install(FILES "${CMAKE_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
|
||||
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake")
|
||||
endif()
|
||||
Loading…
Reference in New Issue
Block a user