Annotation of embedaddon/miniupnpd/miniupnpc/CMakeLists.txt, revision 1.1
1.1 ! misho 1: cmake_minimum_required(VERSION 3.12 FATAL_ERROR)
! 2:
! 3: project (miniupnpc
! 4: VERSION 2.2.4
! 5: DESCRIPTION "UPnP IGD client lightweight library"
! 6: HOMEPAGE_URL https://miniupnp.tuxfamily.org/
! 7: LANGUAGES C)
! 8:
! 9: set (MINIUPNPC_API_VERSION 17)
! 10:
! 11: option (UPNPC_BUILD_STATIC "Build static library" TRUE)
! 12: option (UPNPC_BUILD_SHARED "Build shared library" TRUE)
! 13: option (UPNPC_BUILD_TESTS "Build test executables" TRUE)
! 14: option (UPNPC_BUILD_SAMPLE "Build sample executables" TRUE)
! 15: option (NO_GETADDRINFO "Define NO_GETADDRINFO" FALSE)
! 16: option (UPNPC_NO_INSTALL "Disable installation" FALSE)
! 17:
! 18: if (NOT UPNPC_BUILD_STATIC AND NOT UPNPC_BUILD_SHARED)
! 19: message (FATAL "Both shared and static libraries are disabled!")
! 20: endif ()
! 21:
! 22: include(GNUInstallDirs)
! 23:
! 24: # Interface library for compile definitions, flags and option
! 25: add_library(miniupnpc-private INTERFACE)
! 26:
! 27: if (NO_GETADDRINFO)
! 28: target_compile_definitions(miniupnpc-private INTERFACE NO_GETADDRINFO)
! 29: endif ()
! 30:
! 31: if (NOT WIN32)
! 32: target_compile_definitions(miniupnpc-private INTERFACE
! 33: MINIUPNPC_SET_SOCKET_TIMEOUT
! 34: _BSD_SOURCE _DEFAULT_SOURCE)
! 35: if (NOT APPLE AND NOT CMAKE_SYSTEM_NAME MATCHES ".*BSD" AND NOT CMAKE_SYSTEM_NAME STREQUAL "SunOS")
! 36: # add_definitions (-D_POSIX_C_SOURCE=200112L)
! 37: target_compile_definitions(miniupnpc-private INTERFACE _XOPEN_SOURCE=600)
! 38: endif ()
! 39: else ()
! 40: target_compile_definitions(miniupnpc-private INTERFACE _WIN32_WINNT=0x0501) # XP or higher for getnameinfo and friends
! 41: endif ()
! 42:
! 43: if (APPLE)
! 44: target_compile_definitions(miniupnpc-private INTERFACE _DARWIN_C_SOURCE)
! 45: endif ()
! 46:
! 47: # Set compiler specific build flags
! 48: if (CMAKE_COMPILER_IS_GNUCC AND NOT CMAKE_SYSTEM_NAME STREQUAL "AmigaOS")
! 49: set(CMAKE_POSITION_INDEPENDENT_CODE ON)
! 50: target_compile_options(miniupnpc-private INTERFACE -Wall)
! 51: endif ()
! 52:
! 53: # Suppress noise warnings
! 54: if (MSVC)
! 55: target_compile_definitions(miniupnpc-private INTERFACE _CRT_SECURE_NO_WARNINGS _WINSOCK_DEPRECATED_NO_WARNINGS)
! 56: endif()
! 57:
! 58: configure_file (${CMAKE_CURRENT_SOURCE_DIR}/miniupnpcstrings.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/miniupnpcstrings.h)
! 59: target_include_directories(miniupnpc-private INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>)
! 60:
! 61: set (MINIUPNPC_SOURCES
! 62: src/igd_desc_parse.c
! 63: src/miniupnpc.c
! 64: src/minixml.c
! 65: src/minisoap.c
! 66: src/minissdpc.c
! 67: src/miniwget.c
! 68: src/upnpcommands.c
! 69: src/upnpdev.c
! 70: src/upnpreplyparse.c
! 71: src/upnperrors.c
! 72: src/connecthostport.c
! 73: src/portlistingparse.c
! 74: src/receivedata.c
! 75: src/addr_is_reserved.c
! 76: ${CMAKE_CURRENT_BINARY_DIR}/miniupnpcstrings.h
! 77: )
! 78:
! 79: if (WIN32)
! 80: target_link_libraries(miniupnpc-private INTERFACE ws2_32 iphlpapi)
! 81: elseif (CMAKE_SYSTEM_NAME STREQUAL "SunOS")
! 82: target_link_libraries(miniupnpc-private INTERFACE socket nsl resolv)
! 83: find_library (SOCKET_LIBRARY NAMES socket)
! 84: find_library (NSL_LIBRARY NAMES nsl)
! 85: find_library (RESOLV_LIBRARY NAMES resolv)
! 86: set (LDLIBS ${SOCKET_LIBRARY} ${NSL_LIBRARY} ${RESOLV_LIBRARY} ${LDLIBS})
! 87: elseif (HAIKU)
! 88: target_link_libraries(miniupnpc-private INTERFACE network)
! 89: find_library (SOCKET_LIBRARY NAMES network)
! 90: find_library (NSL_LIBRARY NAMES network)
! 91: find_library (RESOLV_LIBRARY NAMES network)
! 92: set (LDLIBS ${SOCKET_LIBRARY} ${NSL_LIBRARY} ${RESOLV_LIBRARY} ${LDLIBS})
! 93: endif ()
! 94:
! 95:
! 96: if (UPNPC_BUILD_STATIC)
! 97: add_library (libminiupnpc-static STATIC ${MINIUPNPC_SOURCES})
! 98: target_include_directories (libminiupnpc-static PUBLIC
! 99: $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
! 100: $<INSTALL_INTERFACE:include/miniupnpc>)
! 101: if (NOT UPNPC_BUILD_SHARED)
! 102: add_library (miniupnpc::miniupnpc ALIAS libminiupnpc-static)
! 103: endif()
! 104: set_target_properties (libminiupnpc-static PROPERTIES EXPORT_NAME miniupnpc)
! 105: if (WIN32 AND NOT MINGW)
! 106: set_target_properties (libminiupnpc-static PROPERTIES OUTPUT_NAME "libminiupnpc")
! 107: else()
! 108: set_target_properties (libminiupnpc-static PROPERTIES OUTPUT_NAME "miniupnpc")
! 109: endif()
! 110: target_link_libraries (libminiupnpc-static PRIVATE miniupnpc-private)
! 111: target_include_directories(libminiupnpc-static INTERFACE $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
! 112: target_compile_definitions(libminiupnpc-static PUBLIC MINIUPNP_STATICLIB)
! 113:
! 114: if (NOT UPNPC_NO_INSTALL)
! 115: install (TARGETS miniupnpc-private EXPORT miniupnpc-private)
! 116:
! 117: install (EXPORT miniupnpc-private
! 118: DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/miniupnpc"
! 119: NAMESPACE miniupnpc::)
! 120:
! 121: install (TARGETS libminiupnpc-static
! 122: EXPORT libminiupnpc-static
! 123: RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
! 124: LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
! 125: ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
! 126:
! 127: install (EXPORT libminiupnpc-static
! 128: DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/miniupnpc"
! 129: NAMESPACE miniupnpc::)
! 130: endif()
! 131:
! 132: if (UPNPC_BUILD_SAMPLE)
! 133: add_executable (upnpc-static src/upnpc.c)
! 134: target_link_libraries (upnpc-static PRIVATE libminiupnpc-static)
! 135: target_include_directories(upnpc-static PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
! 136: if (NOT UPNPC_NO_INSTALL)
! 137: install (TARGETS upnpc-static
! 138: RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
! 139: endif()
! 140: endif ()
! 141: endif ()
! 142:
! 143: if (UPNPC_BUILD_SHARED)
! 144: add_library (libminiupnpc-shared SHARED ${MINIUPNPC_SOURCES})
! 145: target_include_directories (libminiupnpc-shared PUBLIC
! 146: $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
! 147: $<INSTALL_INTERFACE:include/miniupnpc>)
! 148: add_library (miniupnpc::miniupnpc ALIAS libminiupnpc-shared)
! 149: set_target_properties (libminiupnpc-shared PROPERTIES EXPORT_NAME miniupnpc)
! 150: set_target_properties (libminiupnpc-shared PROPERTIES OUTPUT_NAME "miniupnpc")
! 151: set_target_properties (libminiupnpc-shared PROPERTIES VERSION ${PROJECT_VERSION})
! 152: set_target_properties (libminiupnpc-shared PROPERTIES SOVERSION ${MINIUPNPC_API_VERSION})
! 153: target_link_libraries (libminiupnpc-shared PRIVATE miniupnpc-private)
! 154: target_compile_definitions(libminiupnpc-shared PRIVATE MINIUPNP_EXPORTS)
! 155:
! 156: target_include_directories(libminiupnpc-shared INTERFACE $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
! 157: if (WIN32)
! 158: target_link_libraries(libminiupnpc-shared INTERFACE ws2_32 iphlpapi)
! 159: endif()
! 160:
! 161: if (NOT UPNPC_NO_INSTALL)
! 162: install (TARGETS libminiupnpc-shared
! 163: EXPORT libminiupnpc-shared
! 164: RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
! 165: LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
! 166: ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
! 167:
! 168: install (EXPORT libminiupnpc-shared
! 169: DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/miniupnpc"
! 170: NAMESPACE miniupnpc::)
! 171: endif()
! 172:
! 173: if (UPNPC_BUILD_SAMPLE)
! 174: add_executable (upnpc-shared src/upnpc.c)
! 175: target_link_libraries (upnpc-shared PRIVATE libminiupnpc-shared)
! 176: target_include_directories(upnpc-shared PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
! 177: if (NOT UPNPC_NO_INSTALL)
! 178: install (TARGETS upnpc-shared
! 179: RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
! 180: endif()
! 181: endif ()
! 182:
! 183: add_executable (listdevices src/listdevices.c)
! 184: target_link_libraries (listdevices PRIVATE libminiupnpc-shared)
! 185: target_include_directories(listdevices PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
! 186: if (NOT UPNPC_NO_INSTALL)
! 187: install (TARGETS listdevices
! 188: RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
! 189: endif()
! 190: endif ()
! 191:
! 192: if (UPNPC_BUILD_TESTS)
! 193: add_library(miniupnpc-tests INTERFACE)
! 194: target_link_libraries(miniupnpc-tests INTERFACE miniupnpc-private)
! 195: target_compile_definitions(miniupnpc-tests INTERFACE MINIUPNP_STATICLIB)
! 196:
! 197: add_executable (testminixml src/testminixml.c src/minixml.c src/igd_desc_parse.c)
! 198: target_include_directories (testminixml PRIVATE
! 199: $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>)
! 200: target_link_libraries (testminixml PRIVATE miniupnpc-tests)
! 201:
! 202: add_executable (minixmlvalid src/minixmlvalid.c src/minixml.c)
! 203: target_link_libraries (minixmlvalid PRIVATE miniupnpc-tests)
! 204:
! 205: add_executable (testupnpreplyparse src/testupnpreplyparse.c
! 206: src/minixml.c src/upnpreplyparse.c)
! 207: target_include_directories (testupnpreplyparse PRIVATE
! 208: $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>)
! 209: target_link_libraries (testupnpreplyparse PRIVATE miniupnpc-tests)
! 210:
! 211: add_executable (testigddescparse src/testigddescparse.c
! 212: src/igd_desc_parse.c src/minixml.c src/miniupnpc.c src/miniwget.c src/minissdpc.c
! 213: src/upnpcommands.c src/upnpreplyparse.c src/minisoap.c src/connecthostport.c
! 214: src/portlistingparse.c src/receivedata.c src/addr_is_reserved.c
! 215: )
! 216: target_include_directories (testigddescparse PRIVATE
! 217: $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>)
! 218: target_link_libraries (testigddescparse PRIVATE miniupnpc-tests)
! 219:
! 220: add_executable (testminiwget src/testminiwget.c
! 221: src/miniwget.c src/miniupnpc.c src/minisoap.c src/upnpcommands.c src/minissdpc.c
! 222: src/upnpreplyparse.c src/minixml.c src/igd_desc_parse.c src/connecthostport.c
! 223: src/portlistingparse.c src/receivedata.c src/addr_is_reserved.c
! 224: )
! 225: target_include_directories (testminiwget PRIVATE
! 226: $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>)
! 227: target_link_libraries (testminiwget PRIVATE miniupnpc-tests)
! 228:
! 229: add_executable (testaddr_is_reserved src/testaddr_is_reserved.c
! 230: src/addr_is_reserved.c
! 231: )
! 232: target_link_libraries (testaddr_is_reserved PRIVATE miniupnpc-tests)
! 233:
! 234: add_executable (testportlistingparse src/testportlistingparse.c
! 235: src/minixml.c src/portlistingparse.c)
! 236: target_include_directories (testportlistingparse PRIVATE
! 237: $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>)
! 238: target_link_libraries (testportlistingparse PRIVATE miniupnpc-tests)
! 239:
! 240: add_executable (minihttptestserver src/minihttptestserver.c)
! 241:
! 242: # set (UPNPC_INSTALL_TARGETS ${UPNPC_INSTALL_TARGETS} testminixml minixmlvalid testupnpreplyparse testigddescparse testminiwget)
! 243: include(CTest)
! 244: add_test(NAME validateminixml
! 245: COMMAND minixmlvalid)
! 246: add_test(NAME validateminiwget
! 247: COMMAND ${CMAKE_SOURCE_DIR}/testminiwget.sh)
! 248: set_property(TEST validateminiwget
! 249: PROPERTY ENVIRONMENT
! 250: TESTSERVER=${CMAKE_BINARY_DIR}/minihttptestserver
! 251: TESTMINIWGET=${CMAKE_BINARY_DIR}/testminiwget)
! 252: add_test(NAME validateupnpreplyparse
! 253: COMMAND ${CMAKE_SOURCE_DIR}/testupnpreplyparse.sh
! 254: WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
! 255: set_property(TEST validateupnpreplyparse
! 256: PROPERTY ENVIRONMENT
! 257: TESTUPNPREPLYPARSE=${CMAKE_BINARY_DIR}/testupnpreplyparse)
! 258: add_test(NAME validateportlistingparse
! 259: COMMAND testportlistingparse)
! 260: add_test(NAME validateigddescparse1
! 261: COMMAND testigddescparse new_LiveBox_desc.xml new_LiveBox_desc.values
! 262: WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/testdesc)
! 263: add_test(NAME validateigddescparse2
! 264: COMMAND testigddescparse linksys_WAG200G_desc.xml linksys_WAG200G_desc.values
! 265: WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/testdesc)
! 266: add_test(NAME validateaddr_is_reserved
! 267: COMMAND testaddr_is_reserved)
! 268:
! 269: endif ()
! 270:
! 271: configure_file(miniupnpc.pc.in miniupnpc.pc @ONLY)
! 272:
! 273: if (NOT UPNPC_NO_INSTALL)
! 274: install (FILES
! 275: include/miniupnpc.h
! 276: include/miniwget.h
! 277: include/upnpcommands.h
! 278: include/igd_desc_parse.h
! 279: include/upnpreplyparse.h
! 280: include/upnperrors.h
! 281: include/upnpdev.h
! 282: include/miniupnpctypes.h
! 283: include/portlistingparse.h
! 284: include/miniupnpc_declspec.h
! 285: DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/miniupnpc
! 286: )
! 287:
! 288: install(FILES miniupnpc-config.cmake
! 289: DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/miniupnpc
! 290: )
! 291:
! 292: install(FILES ${CMAKE_CURRENT_BINARY_DIR}/miniupnpc.pc
! 293: DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig
! 294: )
! 295:
! 296: install(FILES man3/miniupnpc.3
! 297: DESTINATION ${CMAKE_INSTALL_MANDIR}/man3
! 298: )
! 299:
! 300: install(FILES external-ip.sh
! 301: TYPE BIN
! 302: )
! 303: endif()
! 304:
! 305: # vim: ts=2:sw=2:expandtab
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>