added new screens and getting ready for networking, looking at SDL_net for cross platfrom networking so i dont have to touch windows
This commit is contained in:
272
SDL2_net-2.2.0/CMakeLists.txt
Normal file
272
SDL2_net-2.2.0/CMakeLists.txt
Normal file
@@ -0,0 +1,272 @@
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
|
||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake")
|
||||
|
||||
# See release_checklist.md
|
||||
set(MAJOR_VERSION 2)
|
||||
set(MINOR_VERSION 2)
|
||||
set(MICRO_VERSION 0)
|
||||
set(SDL_REQUIRED_VERSION 2.0.4)
|
||||
|
||||
set(DYLIB_COMPATIBILITY_VERSION "1")
|
||||
|
||||
include(PrivateSdlFunctions)
|
||||
sdl_calculate_derived_version_variables()
|
||||
|
||||
if(CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR)
|
||||
message(FATAL_ERROR "Prevented in-tree built. Please create a build directory outside of the SDL_net source code and call cmake from there")
|
||||
endif()
|
||||
|
||||
project(SDL2_net
|
||||
LANGUAGES C
|
||||
VERSION "${FULL_VERSION}"
|
||||
)
|
||||
|
||||
message(STATUS "Configuring ${PROJECT_NAME} ${PROJECT_VERSION}")
|
||||
|
||||
if(CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR)
|
||||
set(SDL2NET_ROOTPROJECT ON)
|
||||
else()
|
||||
set(SDL2NET_ROOTPROJECT OFF)
|
||||
endif()
|
||||
|
||||
if(TARGET SDL2::SDL2test)
|
||||
set(SDL2test_FOUND ON)
|
||||
else()
|
||||
find_package(SDL2test)
|
||||
endif()
|
||||
|
||||
# Set defaults preventing destination file conflicts
|
||||
set(SDL2NET_DEBUG_POSTFIX "d"
|
||||
CACHE STRING "Name suffix for debug builds")
|
||||
mark_as_advanced(SDL2NET_DEBUG_POSTFIX)
|
||||
|
||||
include(CMakeDependentOption)
|
||||
include(CMakePackageConfigHelpers)
|
||||
include(GNUInstallDirs)
|
||||
|
||||
option(CMAKE_POSITION_INDEPENDENT_CODE "Build static libraries with -fPIC" ON)
|
||||
option(BUILD_SHARED_LIBS "Build the library as a shared library" ON)
|
||||
|
||||
option(SDL2NET_INSTALL "Enable SDL2_net install target" ${SDL2NET_ROOTPROJECT})
|
||||
|
||||
cmake_dependent_option(SDL2NET_SAMPLES "Build SDL2_net samples" ${SDL2NET_ROOTPROJECT} "${SDL2test_FOUND}" OFF)
|
||||
|
||||
if(SDL2NET_SAMPLES)
|
||||
find_package(SDL2test REQUIRED)
|
||||
endif()
|
||||
|
||||
# Save BUILD_SHARED_LIBS variable
|
||||
set(SDL2NET_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS})
|
||||
|
||||
if(SDL2NET_BUILD_SHARED_LIBS)
|
||||
set(sdl2_net_export_name SDL2_net)
|
||||
set(sdl2_net_install_name_infix shared)
|
||||
set(sdl2_target_name SDL2::SDL2)
|
||||
else()
|
||||
set(sdl2_net_export_name SDL2_net-static)
|
||||
set(sdl2_net_install_name_infix static)
|
||||
set(sdl2_target_name SDL2::SDL2-static)
|
||||
endif()
|
||||
|
||||
sdl_find_sdl2(${sdl2_target_name} ${SDL_REQUIRED_VERSION})
|
||||
|
||||
add_library(SDL2_net
|
||||
SDLnet.c
|
||||
SDLnetselect.c
|
||||
SDLnetTCP.c
|
||||
SDLnetUDP.c
|
||||
)
|
||||
add_library(SDL2_net::${sdl2_net_export_name} ALIAS SDL2_net)
|
||||
target_include_directories(SDL2_net PUBLIC
|
||||
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>"
|
||||
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/SDL2>"
|
||||
)
|
||||
target_compile_definitions(SDL2_net PRIVATE
|
||||
BUILD_SDL
|
||||
SDL_BUILD_MAJOR_VERSION=${MAJOR_VERSION}
|
||||
SDL_BUILD_MINOR_VERSION=${MINOR_VERSION}
|
||||
SDL_BUILD_MICRO_VERSION=${MICRO_VERSION}
|
||||
)
|
||||
target_link_libraries(SDL2_net PRIVATE $<BUILD_INTERFACE:${sdl2_target_name}>)
|
||||
if(WIN32)
|
||||
if (MSVC)
|
||||
target_compile_options(SDL2_net PRIVATE /W3 /wd4244)
|
||||
endif()
|
||||
target_compile_definitions(SDL2_net PRIVATE _WINSOCK_DEPRECATED_NO_WARNINGS)
|
||||
target_link_libraries(SDL2_net PRIVATE ws2_32 iphlpapi)
|
||||
if(SDL2NET_BUILD_SHARED_LIBS)
|
||||
target_sources(SDL2_net PRIVATE version.rc)
|
||||
endif()
|
||||
endif()
|
||||
set_target_properties(SDL2_net PROPERTIES
|
||||
DEFINE_SYMBOL DLL_EXPORT
|
||||
EXPORT_NAME ${sdl2_net_export_name}
|
||||
C_VISIBILITY_PRESET "hidden"
|
||||
)
|
||||
if(NOT ANDROID)
|
||||
set_target_properties(SDL2_net PROPERTIES
|
||||
DEBUG_POSTFIX "${SDL2NET_DEBUG_POSTFIX}"
|
||||
)
|
||||
if(APPLE)
|
||||
# the SOVERSION property corresponds to the compatibility version and VERSION corresponds to the current version
|
||||
# https://cmake.org/cmake/help/latest/prop_tgt/SOVERSION.html#mach-o-versions
|
||||
set_target_properties(SDL2_net PROPERTIES
|
||||
SOVERSION "${DYLIB_COMPATIBILITY_VERSION}"
|
||||
VERSION "${DYLIB_CURRENT_VERSION}"
|
||||
)
|
||||
else()
|
||||
set_target_properties(SDL2_net PROPERTIES
|
||||
SOVERSION "${LT_MAJOR}"
|
||||
VERSION "${LT_VERSION}"
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
if(SDL2NET_BUILD_SHARED_LIBS AND (APPLE OR (UNIX AND NOT ANDROID)))
|
||||
add_custom_command(TARGET SDL2_net POST_BUILD
|
||||
COMMAND "${CMAKE_COMMAND}" -E create_symlink "$<TARGET_SONAME_FILE_NAME:SDL2_net>" "libSDL2_net$<$<CONFIG:Debug>:${SDL2NET_DEBUG_POSTFIX}>$<TARGET_FILE_SUFFIX:SDL2_net>"
|
||||
WORKING_DIRECTORY "${PROJECT_BINARY_DIR}"
|
||||
)
|
||||
endif()
|
||||
if(SDL2NET_BUILD_SHARED_LIBS)
|
||||
if(WIN32 OR OS2)
|
||||
set_target_properties(SDL2_net PROPERTIES
|
||||
PREFIX ""
|
||||
)
|
||||
endif()
|
||||
if(OS2)
|
||||
# FIXME: OS/2 Makefile has a different LIBNAME
|
||||
set_target_properties(SDL2_net PROPERTIES
|
||||
OUTPUT_NAME "SDL2net"
|
||||
)
|
||||
elseif(UNIX AND NOT ANDROID)
|
||||
set_target_properties(SDL2_net PROPERTIES
|
||||
OUTPUT_NAME "SDL2_net-${LT_RELEASE}"
|
||||
)
|
||||
endif()
|
||||
else()
|
||||
if(MSVC OR (WATCOM AND (WIN32 OR OS2)))
|
||||
set_target_properties(SDL2_net PROPERTIES
|
||||
OUTPUT_NAME "SDL2_net-static"
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Use `Compatible Interface Properties` to ensure a shared SDL2_net is built with a shared SDL2
|
||||
if(SDL2NET_BUILD_SHARED_LIBS)
|
||||
set_target_properties(SDL2_net PROPERTIES
|
||||
INTERFACE_SDL2_SHARED ${SDL2NET_BUILD_SHARED_LIBS}
|
||||
COMPATIBLE_INTERFACE_BOOL SDL2_SHARED
|
||||
)
|
||||
endif()
|
||||
|
||||
if(SDL2NET_BUILD_SHARED_LIBS)
|
||||
sdl_target_link_options_no_undefined(SDL2_net)
|
||||
endif()
|
||||
|
||||
if(SDL2NET_INSTALL)
|
||||
install(
|
||||
TARGETS SDL2_net
|
||||
EXPORT SDL2NetExports
|
||||
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT devel
|
||||
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT library
|
||||
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT library
|
||||
)
|
||||
install(FILES
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/SDL_net.h"
|
||||
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/SDL2" COMPONENT devel
|
||||
)
|
||||
|
||||
if(WIN32 AND NOT MINGW)
|
||||
set(PKG_PREFIX "cmake")
|
||||
else()
|
||||
set(PKG_PREFIX "${CMAKE_INSTALL_LIBDIR}/cmake/SDL2_net")
|
||||
endif()
|
||||
|
||||
configure_package_config_file(SDL2_netConfig.cmake.in SDL2_netConfig.cmake
|
||||
INSTALL_DESTINATION "${PKG_PREFIX}"
|
||||
)
|
||||
write_basic_package_version_file("${PROJECT_BINARY_DIR}/SDL2_netConfigVersion.cmake"
|
||||
VERSION ${FULL_VERSION}
|
||||
COMPATIBILITY AnyNewerVersion
|
||||
)
|
||||
install(
|
||||
FILES
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/SDL2_netConfig.cmake"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/SDL2_netConfigVersion.cmake"
|
||||
DESTINATION "${PKG_PREFIX}"
|
||||
COMPONENT devel
|
||||
)
|
||||
install(EXPORT SDL2NetExports
|
||||
FILE SDL2_net-${sdl2_net_install_name_infix}-targets.cmake
|
||||
NAMESPACE SDL2_net::
|
||||
DESTINATION "${PKG_PREFIX}"
|
||||
COMPONENT devel
|
||||
)
|
||||
|
||||
if(SDL2NET_BUILD_SHARED_LIBS)
|
||||
# Only create a .pc file for a shared SDL2_net
|
||||
set(prefix "${CMAKE_INSTALL_PREFIX}")
|
||||
set(exec_prefix "\${prefix}")
|
||||
set(libdir "\${exec_prefix}/${CMAKE_INSTALL_LIBDIR}")
|
||||
set(includedir "\${prefix}/${CMAKE_INSTALL_INCLUDEDIR}")
|
||||
set(PACKAGE "${PROJECT_NAME}")
|
||||
set(VERSION "${FULL_VERSION}")
|
||||
set(SDL_VERSION "${SDL_REQUIRED_VERSION}")
|
||||
string(JOIN " " PC_REQUIRES ${PC_REQUIRES})
|
||||
string(JOIN " " PC_LIBS ${PC_LIBS})
|
||||
configure_file("${PROJECT_SOURCE_DIR}/SDL2_net.pc.in" "${CMAKE_CURRENT_BINARY_DIR}/SDL2_net.pc.intermediate" @ONLY)
|
||||
file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/SDL2_net-$<CONFIG>.pc" INPUT "${CMAKE_CURRENT_BINARY_DIR}/SDL2_net.pc.intermediate")
|
||||
|
||||
set(PC_DESTDIR)
|
||||
if(CMAKE_SYSTEM_NAME MATCHES FreeBSD)
|
||||
# FreeBSD uses ${PREFIX}/libdata/pkgconfig
|
||||
set(PC_DESTDIR "libdata/pkgconfig")
|
||||
else()
|
||||
set(PC_DESTDIR "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
|
||||
endif()
|
||||
# Only install a SDL2_net.pc file in Release mode
|
||||
install(CODE "
|
||||
if(CMAKE_INSTALL_CONFIG_NAME MATCHES \"Release\")
|
||||
# FIXME: use file(COPY_FILE) if minimum CMake version >= 3.21
|
||||
execute_process(COMMAND \"\${CMAKE_COMMAND}\" -E copy_if_different
|
||||
\"${CMAKE_CURRENT_BINARY_DIR}/SDL2_net-$<CONFIG>.pc\"
|
||||
\"${CMAKE_CURRENT_BINARY_DIR}/SDL2_net.pc\")
|
||||
file(INSTALL DESTINATION \"\${CMAKE_INSTALL_PREFIX}/${PC_DESTDIR}\"
|
||||
TYPE FILE
|
||||
FILES \"${CMAKE_CURRENT_BINARY_DIR}/SDL2_net.pc\")
|
||||
endif()" COMPONENT devel)
|
||||
endif()
|
||||
|
||||
if(SDL2NET_BUILD_SHARED_LIBS AND (APPLE OR (UNIX AND NOT ANDROID)))
|
||||
install(
|
||||
FILES
|
||||
"${PROJECT_BINARY_DIR}/libSDL2_net$<$<CONFIG:Debug>:${SDL2NET_DEBUG_POSTFIX}>$<TARGET_FILE_SUFFIX:SDL2_net>"
|
||||
DESTINATION "${CMAKE_INSTALL_LIBDIR}"
|
||||
COMPONENT devel
|
||||
)
|
||||
endif()
|
||||
|
||||
install(FILES "LICENSE.txt"
|
||||
DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/licenses/${PROJECT_NAME}"
|
||||
COMPONENT library
|
||||
)
|
||||
endif()
|
||||
|
||||
if(SDL2NET_SAMPLES)
|
||||
find_package(SDL2main)
|
||||
|
||||
add_executable(showinterfaces showinterfaces.c)
|
||||
target_compile_definitions(showinterfaces PRIVATE SDL_MAIN_HANDLED)
|
||||
target_link_libraries(showinterfaces PRIVATE SDL2_net::${sdl2_net_export_name} ${sdl2_target_name})
|
||||
|
||||
add_executable(chat chat.c chat.h)
|
||||
if(TARGET SDL2::SDL2main)
|
||||
target_link_libraries(chat PRIVATE SDL2::SDL2main)
|
||||
endif()
|
||||
target_link_libraries(chat PRIVATE SDL2_net::${sdl2_net_export_name} SDL2::SDL2test ${sdl2_target_name})
|
||||
|
||||
add_executable(chatd chatd.c)
|
||||
target_compile_definitions(chatd PRIVATE SDL_MAIN_HANDLED)
|
||||
target_link_libraries(chatd PRIVATE SDL2_net::${sdl2_net_export_name} ${sdl2_target_name})
|
||||
endif()
|
||||
Reference in New Issue
Block a user