diff --git a/CMakeLists.txt b/CMakeLists.txt index 63898e6a0..0e7c26f8d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ # OpenClonk, http://www.openclonk.org # -# Copyright (c) 2009-2014, The OpenClonk Team and contributors +# Copyright (c) 2009-2015, The OpenClonk Team and contributors # # Distributed under the terms of the ISC license; see accompanying file # "COPYING" for details. @@ -63,6 +63,8 @@ option(USE_SYSTEM_TINYXML "Use system tinyxml library" OFF) unset(OC_BUILD_MULTIPROCESSOR CACHE) unset(USE_APPLE_CLANG CACHE) +unset(HAVE_NATUPNP_H CACHE) + ############################################################################ # Check for compiler quirks and features ############################################################################ @@ -774,11 +776,6 @@ if(USE_CONSOLE) CHECK_INCLUDE_FILE_CXX(readline.h HAVE_READLINE_H) CHECK_INCLUDE_FILE_CXX(readline/readline.h HAVE_READLINE_READLINE_H) endif() -CHECK_INCLUDE_FILE_CXX(natupnp.h HAVE_NATUPNP_H) -if(WIN32 AND NOT HAVE_NATUPNP_H) - include_directories(thirdparty/natupnp) - set(HAVE_NATUPNP_H TRUE CACHE BOOL "natupnp.h available" FORCE) -endif() CHECK_INCLUDE_FILES_CXX("X11/Xlib.h;X11/extensions/Xrandr.h" HAVE_X11_EXTENSIONS_XRANDR_H) CHECK_INCLUDE_FILES_CXX("X11/Xlib.h;X11/keysym.h" HAVE_X11_KEYSYM_H) @@ -844,22 +841,19 @@ if(HAVE_EXECINFO_H) endif() endif() -if(HAVE_NATUPNP_H) +find_package(Upnp) +if(NOT UPNP_FOUND) + list(APPEND OC_SYSTEM_SOURCES + src/network/C4Network2UPnPDummy.cpp + ) +elseif(UPNP_STYLE STREQUAL "Win32") list(APPEND OC_SYSTEM_SOURCES src/network/C4Network2UPnPWin32.cpp ) -else() - FIND_PACKAGE(Upnp) - SET(HAVE_UPNP ${UPNP_FOUND}) - if(UPNP_FOUND) - list(APPEND OC_SYSTEM_SOURCES - src/network/C4Network2UPnPLinux.cpp - ) - else() - list(APPEND OC_SYSTEM_SOURCES - src/network/C4Network2UPnPDummy.cpp - ) - endif() +elseif(UPNP_STYLE STREQUAL "libupnp") + list(APPEND OC_SYSTEM_SOURCES + src/network/C4Network2UPnPLinux.cpp + ) endif() if(USE_CONSOLE) @@ -1369,7 +1363,7 @@ if (WIN32) endif() endif() -if(HAVE_UPNP) +if(UPNP_FOUND) include_directories(${UPNP_INCLUDE_DIR}) target_link_libraries(openclonk ${UPNP_LIBRARIES}) endif() diff --git a/cmake/FindUpnp.cmake b/cmake/FindUpnp.cmake index 18bbcfbf1..b648744f5 100644 --- a/cmake/FindUpnp.cmake +++ b/cmake/FindUpnp.cmake @@ -1,6 +1,6 @@ # OpenClonk, http://www.openclonk.org # -# Copyright (c) 2012-2013, The OpenClonk Team and contributors +# Copyright (c) 2012-2015, The OpenClonk Team and contributors # # Distributed under the terms of the ISC license; see accompanying file # "COPYING" for details. @@ -20,20 +20,33 @@ # TODO: Use pkg-config if available -find_path(UPNP_INCLUDE_DIR NAMES upnp.h PATH_SUFFIXES upnp) -set(UPNP_NAMES ${UPNP_NAMES} upnp) -set(THREADUTIL_NAMES ${THREADUTIL_NAMES} threadutil) -set(IXML_NAMES ${IXML_NAMES} ixml) -find_library(UPNP_LIBRARY NAMES ${UPNP_NAMES}) -find_library(THREADUTIL_LIBRARY NAMES ${THREADUTIL_NAMES}) -find_library(IXML_LIBRARY NAMES ${IXML_NAMES}) +if(WIN32) + CHECK_INCLUDE_FILE_CXX(natupnp.h HAVE_NATIVE_NATUPNP) + if(NOT HAVE_NATIVE_NATUPNP) + SET(UPNP_INCLUDE_DIR "thirdparty/natupnp") + else() + SET(UPNP_INCLUDE_DIR) + endif() + SET(UPNP_LIBRARIES) + SET(UPNP_FOUND TRUE) + SET(UPNP_STYLE "Win32") +else() + find_path(UPNP_INCLUDE_DIR NAMES upnp.h PATH_SUFFIXES upnp) + set(UPNP_NAMES ${UPNP_NAMES} upnp) + set(THREADUTIL_NAMES ${THREADUTIL_NAMES} threadutil) + set(IXML_NAMES ${IXML_NAMES} ixml) + find_library(UPNP_LIBRARY NAMES ${UPNP_NAMES}) + find_library(THREADUTIL_LIBRARY NAMES ${THREADUTIL_NAMES}) + find_library(IXML_LIBRARY NAMES ${IXML_NAMES}) -include(FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(UPNP DEFAULT_MSG UPNP_LIBRARY THREADUTIL_LIBRARY IXML_LIBRARY UPNP_INCLUDE_DIR) + include(FindPackageHandleStandardArgs) + FIND_PACKAGE_HANDLE_STANDARD_ARGS(UPNP DEFAULT_MSG UPNP_LIBRARY THREADUTIL_LIBRARY IXML_LIBRARY UPNP_INCLUDE_DIR) -if(UPNP_FOUND) - set(UPNP_LIBRARIES ${UPNP_LIBRARY} ${THREADUTIL_LIBRARY} ${IXML_LIBRARY}) - set(UPNP_INCLUDE_DIR ${UPNP_INCLUDE_DIR}) + if(UPNP_FOUND) + set(UPNP_LIBRARIES ${UPNP_LIBRARY} ${THREADUTIL_LIBRARY} ${IXML_LIBRARY}) + set(UPNP_INCLUDE_DIR ${UPNP_INCLUDE_DIR}) + set(UPNP_STYLE "libupnp") + endif() endif() mark_as_advanced(UPNP_LIBRARY IXML_LIBRARY UPNP_INCLUDE_DIR)