Annotation of embedaddon/miniupnpd/miniupnpc/CMakeLists.txt, revision 1.1.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>