aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitlab-ci.yml10
-rw-r--r--CMakeLists.txt41
-rw-r--r--README.md3
-rw-r--r--cmake/Modules/FindIrrlicht.cmake61
-rw-r--r--cmake/Modules/MinetestFindIrrlichtHeaders.cmake26
-rw-r--r--src/CMakeLists.txt41
-rwxr-xr-xutil/buildbot/buildwin32.sh8
-rwxr-xr-xutil/buildbot/buildwin64.sh8
-rw-r--r--util/ci/common.sh4
9 files changed, 62 insertions, 140 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index b5c4695bb..d335285d5 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -9,7 +9,7 @@ stages:
- deploy
variables:
- IRRLICHT_TAG: "1.9.0mt1"
+ IRRLICHT_TAG: "1.9.0mt2"
MINETEST_GAME_REPO: "https://github.com/minetest/minetest_game.git"
CONTAINER_IMAGE: registry.gitlab.com/$CI_PROJECT_PATH
@@ -19,14 +19,10 @@ variables:
- apt-get update
- apt-get -y install build-essential git cmake libpng-dev libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev libleveldb-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libgmp-dev libjsoncpp-dev
script:
- - git clone https://github.com/minetest/irrlicht -b $IRRLICHT_TAG
- - cd irrlicht
- - cmake . -DBUILD_SHARED_LIBS=OFF
- - make -j2
- - cd ..
+ - git clone https://github.com/minetest/irrlicht -b $IRRLICHT_TAG lib/irrlichtmt
- mkdir cmakebuild
- cd cmakebuild
- - cmake -DIRRLICHT_LIBRARY=$PWD/../irrlicht/lib/Linux/libIrrlichtMt.a -DIRRLICHT_INCLUDE_DIR=$PWD/../irrlicht/include -DCMAKE_INSTALL_PREFIX=../artifact/minetest/usr/ -DCMAKE_BUILD_TYPE=Release -DRUN_IN_PLACE=FALSE -DENABLE_GETTEXT=TRUE -DBUILD_SERVER=TRUE ..
+ - cmake -DCMAKE_INSTALL_PREFIX=../artifact/minetest/usr/ -DCMAKE_BUILD_TYPE=Release -DRUN_IN_PLACE=FALSE -DENABLE_GETTEXT=TRUE -DBUILD_SERVER=TRUE ..
- make -j2
- make install
artifacts:
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 42b343540..fe508ffdb 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -68,34 +68,25 @@ if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/lib/irrlichtmt")
if(NOT TARGET IrrlichtMt)
message(FATAL_ERROR "IrrlichtMt project is missing a CMake target?!")
endif()
-
- # set include dir the way it would normally be
- set(IRRLICHT_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/lib/irrlichtmt/include")
- set(IRRLICHT_LIBRARY IrrlichtMt)
else()
- find_package(Irrlicht)
- if(BUILD_CLIENT AND NOT IRRLICHT_FOUND)
- message(FATAL_ERROR "IrrlichtMt is required to build the client, but it was not found.")
- elseif(NOT IRRLICHT_INCLUDE_DIR)
- message(FATAL_ERROR "Irrlicht or IrrlichtMt headers are required to build the server, but none found.")
- endif()
-endif()
+ find_package(IrrlichtMt QUIET)
+ if(NOT TARGET IrrlichtMt::IrrlichtMt)
+ string(CONCAT explanation_msg
+ "The Minetest team has forked Irrlicht to make their own customizations. "
+ "It can be found here: https://github.com/minetest/irrlicht")
+ if(BUILD_CLIENT)
+ message(FATAL_ERROR "IrrlichtMt is required to build the client, but it was not found.\n${explanation_msg}")
+ endif()
-include(CheckSymbolExists)
-set(CMAKE_REQUIRED_INCLUDES ${IRRLICHT_INCLUDE_DIR})
-unset(HAS_FORKED_IRRLICHT CACHE)
-check_symbol_exists(IRRLICHT_VERSION_MT "IrrCompileConfig.h" HAS_FORKED_IRRLICHT)
-if(NOT HAS_FORKED_IRRLICHT)
- string(CONCAT EXPLANATION_MSG
- "Irrlicht found, but it is not IrrlichtMt (Minetest's Irrlicht fork). "
- "The Minetest team has forked Irrlicht to make their own customizations. "
- "It can be found here: https://github.com/minetest/irrlicht")
- if(BUILD_CLIENT)
- message(FATAL_ERROR "${EXPLANATION_MSG}\n"
- "Building the client with upstream Irrlicht is no longer possible.")
+ include(MinetestFindIrrlichtHeaders)
+ if(NOT IRRLICHT_INCLUDE_DIR)
+ message(FATAL_ERROR "Irrlicht or IrrlichtMt headers are required to build the server, but none found.\n${explanation_msg}")
+ endif()
+ message(STATUS "Found Irrlicht headers: ${IRRLICHT_INCLUDE_DIR}")
+ add_library(IrrlichtMt::IrrlichtMt INTERFACE IMPORTED)
+ target_include_directories(IrrlichtMt::IrrlichtMt INTERFACE "${IRRLICHT_INCLUDE_DIR}")
else()
- message(WARNING "${EXPLANATION_MSG}\n"
- "The server can still be built with upstream Irrlicht but this is DISCOURAGED.")
+ message(STATUS "Found IrrlichtMt ${IrrlichtMt_VERSION}")
endif()
endif()
diff --git a/README.md b/README.md
index 0cd134f27..1774d1ea3 100644
--- a/README.md
+++ b/README.md
@@ -223,6 +223,9 @@ Run it:
- Debug build is slower, but gives much more useful output in a debugger.
- If you build a bare server you don't need to have the Irrlicht or IrrlichtMt library installed.
- In that case use `-DIRRLICHT_INCLUDE_DIR=/some/where/irrlicht/include`.
+- IrrlichtMt can also be installed somewhere that is not a standard install path.
+ - In that case use `-DCMAKE_PREFIX_PATH=/path/to/install_prefix`
+ - The path must be set so that `$(CMAKE_PREFIX_PATH)/lib/cmake/IrrlichtMt` exists.
### CMake options
diff --git a/cmake/Modules/FindIrrlicht.cmake b/cmake/Modules/FindIrrlicht.cmake
deleted file mode 100644
index 1e334652b..000000000
--- a/cmake/Modules/FindIrrlicht.cmake
+++ /dev/null
@@ -1,61 +0,0 @@
-
-mark_as_advanced(IRRLICHT_DLL)
-
-# Find include directory and libraries
-
-# find our fork first, then upstream (TODO: remove this?)
-foreach(libname IN ITEMS IrrlichtMt Irrlicht)
- string(TOLOWER "${libname}" libname2)
-
- find_path(IRRLICHT_INCLUDE_DIR NAMES irrlicht.h
- DOC "Path to the directory with IrrlichtMt includes"
- PATHS
- /usr/local/include/${libname2}
- /usr/include/${libname2}
- /system/develop/headers/${libname2} #Haiku
- PATH_SUFFIXES "include/${libname2}"
- )
-
- find_library(IRRLICHT_LIBRARY NAMES lib${libname} ${libname}
- DOC "Path to the IrrlichtMt library file"
- PATHS
- /usr/local/lib
- /usr/lib
- /system/develop/lib # Haiku
- )
-
- if(IRRLICHT_INCLUDE_DIR OR IRRLICHT_LIBRARY)
- break()
- endif()
-endforeach()
-
-# Handholding for users
-if(IRRLICHT_INCLUDE_DIR AND (NOT IS_DIRECTORY "${IRRLICHT_INCLUDE_DIR}" OR
- NOT EXISTS "${IRRLICHT_INCLUDE_DIR}/irrlicht.h"))
- message(WARNING "IRRLICHT_INCLUDE_DIR was set to ${IRRLICHT_INCLUDE_DIR} "
- "but irrlicht.h does not exist inside. The path will not be used.")
- unset(IRRLICHT_INCLUDE_DIR CACHE)
-endif()
-if(WIN32 OR CMAKE_SYSTEM_NAME STREQUAL "Linux" OR APPLE)
- # (only on systems where we're sure how a valid library looks like)
- if(IRRLICHT_LIBRARY AND (NOT EXISTS "${IRRLICHT_LIBRARY}" OR
- NOT IRRLICHT_LIBRARY MATCHES "\\.(a|so|dylib|lib)([.0-9]+)?$"))
- message(WARNING "IRRLICHT_LIBRARY was set to ${IRRLICHT_LIBRARY} "
- "but is not a valid library file. The path will not be used.")
- unset(IRRLICHT_LIBRARY CACHE)
- endif()
-endif()
-
-# On Windows, find the DLL for installation
-if(WIN32)
- # If VCPKG_APPLOCAL_DEPS is ON, dll's are automatically handled by VCPKG
- if(NOT VCPKG_APPLOCAL_DEPS)
- find_file(IRRLICHT_DLL NAMES IrrlichtMt.dll
- DOC "Path of the IrrlichtMt dll (for installation)"
- )
- endif()
-endif(WIN32)
-
-include(FindPackageHandleStandardArgs)
-find_package_handle_standard_args(Irrlicht DEFAULT_MSG IRRLICHT_LIBRARY IRRLICHT_INCLUDE_DIR)
-
diff --git a/cmake/Modules/MinetestFindIrrlichtHeaders.cmake b/cmake/Modules/MinetestFindIrrlichtHeaders.cmake
new file mode 100644
index 000000000..d33b296d0
--- /dev/null
+++ b/cmake/Modules/MinetestFindIrrlichtHeaders.cmake
@@ -0,0 +1,26 @@
+# Locate Irrlicht or IrrlichtMt headers on system.
+
+foreach(libname IN ITEMS IrrlichtMt Irrlicht)
+ string(TOLOWER "${libname}" libname2)
+
+ find_path(IRRLICHT_INCLUDE_DIR NAMES irrlicht.h
+ DOC "Path to the directory with IrrlichtMt includes"
+ PATHS
+ /usr/local/include/${libname2}
+ /usr/include/${libname2}
+ /system/develop/headers/${libname2} #Haiku
+ PATH_SUFFIXES "include/${libname2}"
+ )
+
+ if(IRRLICHT_INCLUDE_DIR)
+ break()
+ endif()
+endforeach()
+
+# Handholding for users
+if(IRRLICHT_INCLUDE_DIR AND (NOT IS_DIRECTORY "${IRRLICHT_INCLUDE_DIR}" OR
+ NOT EXISTS "${IRRLICHT_INCLUDE_DIR}/irrlicht.h"))
+ message(WARNING "IRRLICHT_INCLUDE_DIR was set to ${IRRLICHT_INCLUDE_DIR} "
+ "but irrlicht.h does not exist inside. The path will not be used.")
+ unset(IRRLICHT_INCLUDE_DIR CACHE)
+endif()
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index ac460883a..7a5e48b49 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -293,33 +293,7 @@ else()
if(NOT HAIKU AND NOT APPLE)
find_package(X11 REQUIRED)
endif(NOT HAIKU AND NOT APPLE)
-
- ##
- # The following dependencies are transitive dependencies from Irrlicht.
- # Minetest itself does not use them, but we link them so that statically
- # linking Irrlicht works.
- if(NOT HAIKU AND NOT APPLE)
- # This way Xxf86vm is found on OpenBSD too
- find_library(XXF86VM_LIBRARY Xxf86vm)
- mark_as_advanced(XXF86VM_LIBRARY)
- set(CLIENT_PLATFORM_LIBS ${CLIENT_PLATFORM_LIBS} ${XXF86VM_LIBRARY})
- endif(NOT HAIKU AND NOT APPLE)
-
- find_package(JPEG REQUIRED)
- find_package(PNG REQUIRED)
- if(APPLE)
- find_library(CARBON_LIB Carbon REQUIRED)
- find_library(COCOA_LIB Cocoa REQUIRED)
- find_library(IOKIT_LIB IOKit REQUIRED)
- mark_as_advanced(
- CARBON_LIB
- COCOA_LIB
- IOKIT_LIB
- )
- SET(CLIENT_PLATFORM_LIBS ${CLIENT_PLATFORM_LIBS} ${CARBON_LIB} ${COCOA_LIB} ${IOKIT_LIB})
- endif(APPLE)
- ##
- endif(BUILD_CLIENT)
+ endif()
find_package(ZLIB REQUIRED)
set(PLATFORM_LIBS -lpthread ${CMAKE_DL_LIBS})
@@ -511,9 +485,7 @@ endif()
include_directories(
${PROJECT_BINARY_DIR}
${PROJECT_SOURCE_DIR}
- ${IRRLICHT_INCLUDE_DIR}
${ZLIB_INCLUDE_DIR}
- ${PNG_INCLUDE_DIR}
${SOUND_INCLUDE_DIRS}
${SQLITE3_INCLUDE_DIR}
${LUA_INCLUDE_DIR}
@@ -548,10 +520,7 @@ if(BUILD_CLIENT)
target_link_libraries(
${PROJECT_NAME}
${ZLIB_LIBRARIES}
- ${IRRLICHT_LIBRARY}
- ${JPEG_LIBRARIES}
- ${BZIP2_LIBRARIES}
- ${PNG_LIBRARIES}
+ IrrlichtMt::IrrlichtMt
${X11_LIBRARIES}
${SOUND_LIBRARIES}
${SQLITE3_LIBRARY}
@@ -559,7 +528,6 @@ if(BUILD_CLIENT)
${GMP_LIBRARY}
${JSON_LIBRARY}
${PLATFORM_LIBS}
- ${CLIENT_PLATFORM_LIBS}
)
if(NOT USE_LUAJIT)
set_target_properties(${PROJECT_NAME} PROPERTIES
@@ -629,6 +597,11 @@ endif(BUILD_CLIENT)
if(BUILD_SERVER)
add_executable(${PROJECT_NAME}server ${server_SRCS} ${extra_windows_SRCS})
add_dependencies(${PROJECT_NAME}server GenerateVersion)
+
+ get_target_property(
+ IRRLICHT_INCLUDES IrrlichtMt::IrrlichtMt INTERFACE_INCLUDE_DIRECTORIES)
+ # Doesn't work without PRIVATE/PUBLIC/INTERFACE mode specified.
+ target_include_directories(${PROJECT_NAME}server PRIVATE ${IRRLICHT_INCLUDES})
target_link_libraries(
${PROJECT_NAME}server
${ZLIB_LIBRARIES}
diff --git a/util/buildbot/buildwin32.sh b/util/buildbot/buildwin32.sh
index 468df05a9..40c205250 100755
--- a/util/buildbot/buildwin32.sh
+++ b/util/buildbot/buildwin32.sh
@@ -30,7 +30,7 @@ if [ -z "$toolchain_file" ]; then
fi
echo "Using $toolchain_file"
-irrlicht_version=1.9.0mt1
+irrlicht_version=1.9.0mt2
ogg_version=1.3.4
vorbis_version=1.3.7
curl_version=7.76.1
@@ -97,7 +97,7 @@ cd $builddir
mkdir build
cd build
-irr_dlls=$(echo $libdir/irrlicht/bin/*.dll | tr ' ' ';')
+irr_dlls=$(echo $libdir/irrlicht/lib/*.dll | tr ' ' ';')
vorbis_dlls=$(echo $libdir/libvorbis/bin/libvorbis{,file}-*.dll | tr ' ' ';')
gettext_dlls=$(echo $libdir/gettext/bin/lib{intl,iconv}-*.dll | tr ' ' ';')
@@ -113,9 +113,7 @@ cmake -S $sourcedir -B . \
-DENABLE_FREETYPE=1 \
-DENABLE_LEVELDB=1 \
\
- -DIRRLICHT_INCLUDE_DIR=$libdir/irrlicht/include/irrlichtmt \
- -DIRRLICHT_LIBRARY=$libdir/irrlicht/lib/libIrrlichtMt.dll.a \
- -DIRRLICHT_DLL="$irr_dlls" \
+ -DCMAKE_PREFIX_PATH=$libdir/irrlicht \
\
-DZLIB_INCLUDE_DIR=$libdir/zlib/include \
-DZLIB_LIBRARIES=$libdir/zlib/lib/libz.dll.a \
diff --git a/util/buildbot/buildwin64.sh b/util/buildbot/buildwin64.sh
index 3b5d61c96..6d3deceae 100755
--- a/util/buildbot/buildwin64.sh
+++ b/util/buildbot/buildwin64.sh
@@ -30,7 +30,7 @@ if [ -z "$toolchain_file" ]; then
fi
echo "Using $toolchain_file"
-irrlicht_version=1.9.0mt1
+irrlicht_version=1.9.0mt2
ogg_version=1.3.4
vorbis_version=1.3.7
curl_version=7.76.1
@@ -97,7 +97,7 @@ cd $builddir
mkdir build
cd build
-irr_dlls=$(echo $libdir/irrlicht/bin/*.dll | tr ' ' ';')
+irr_dlls=$(echo $libdir/irrlicht/lib/*.dll | tr ' ' ';')
vorbis_dlls=$(echo $libdir/libvorbis/bin/libvorbis{,file}-*.dll | tr ' ' ';')
gettext_dlls=$(echo $libdir/gettext/bin/lib{intl,iconv}-*.dll | tr ' ' ';')
@@ -113,9 +113,7 @@ cmake -S $sourcedir -B . \
-DENABLE_FREETYPE=1 \
-DENABLE_LEVELDB=1 \
\
- -DIRRLICHT_INCLUDE_DIR=$libdir/irrlicht/include/irrlichtmt \
- -DIRRLICHT_LIBRARY=$libdir/irrlicht/lib/libIrrlichtMt.dll.a \
- -DIRRLICHT_DLL="$irr_dlls" \
+ -DCMAKE_PREFIX_PATH=$libdir/irrlicht \
\
-DZLIB_INCLUDE_DIR=$libdir/zlib/include \
-DZLIB_LIBRARIES=$libdir/zlib/lib/libz.dll.a \
diff --git a/util/ci/common.sh b/util/ci/common.sh
index 6a28482fd..70a1bedaf 100644
--- a/util/ci/common.sh
+++ b/util/ci/common.sh
@@ -11,9 +11,7 @@ install_linux_deps() {
shift
pkgs+=(libirrlicht-dev)
else
- # TODO: return old URL when IrrlichtMt 1.9.0mt2 is tagged
- #wget "https://github.com/minetest/irrlicht/releases/download/1.9.0mt1/ubuntu-bionic.tar.gz"
- wget "http://minetest.kitsunemimi.pw/irrlichtmt-patched-temporary.tgz" -O ubuntu-bionic.tar.gz
+ wget "https://github.com/minetest/irrlicht/releases/download/1.9.0mt2/ubuntu-bionic.tar.gz"
sudo tar -xaf ubuntu-bionic.tar.gz -C /usr/local
fi