aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Marakasov <amdmi3@FreeBSD.org>2022-05-17 14:43:57 +0000
committerDmitry Marakasov <amdmi3@FreeBSD.org>2022-05-18 18:54:10 +0000
commit973414029d3442683b314739d3b4df5153b04394 (patch)
tree845bcecc0f40e7ceada2c55318404cc7d340dc6e
parent755720c7b8a1841175271d6c3184e667f4882cef (diff)
downloadports-973414029d3442683b314739d3b4df5153b04394.tar.gz
ports-973414029d3442683b314739d3b4df5153b04394.zip
games/devilutionX: update to 1.4
- Update to 1.4 - Drop dependency on font, no longer needed - Drop unnecessary .desktop file patches (also upstream PR exists) - Install from the port (instead of patching CMakeLists.txt), to be more explicit and flexible - Convert to pkg-plist as there are more files now - The new version tries to fetch dependencies from the net, for some depenencies this is unconditional. Fetch these properly with GH_TUPLE and place in a directory where CMake expectes them. - Upstream code expects patch component in the version, so add an extra .0 to VERSION_NUM. This should not break on (future) X.Y.Z versions as the component will move to micropatch position and will be ignored - BINARY_RELEASE option is gone - Untie DEBUG (engine debug bode) from WITH_DEBUG knob (build debug binary), these are orthogonal - Properly support optional depends; zerotier is the only one broken as it conflicts with system header (see https://github.com/diasurgical/devilutionX/issues/4585) - Install devilutionx (own) data file - Since it's not versioned, use a little hack to add a tag to the filename to avoid clashes on the future updates; this seemed less evil than introducing DIST_SUBDIR - Use two-level datadir to be consistent with ~/.local/share path - Update pkg-message (Diablo data file doesn't have to be lowercase, works either way) PR: 264064 Approved by: eduardo@FreeBSD.org (maintainer)
-rw-r--r--games/devilutionX/Makefile101
-rw-r--r--games/devilutionX/distinfo26
-rw-r--r--games/devilutionX/files/patch-CMakeLists.txt20
-rw-r--r--games/devilutionX/files/patch-Packaging_fedora_devilutionx.desktop17
-rw-r--r--games/devilutionX/files/patch-Source_engine_random.cpp14
-rw-r--r--games/devilutionX/files/patch-Source_init.cpp11
-rw-r--r--games/devilutionX/files/patch-Source_sound.h14
-rw-r--r--games/devilutionX/pkg-message3
-rw-r--r--games/devilutionX/pkg-plist6
9 files changed, 156 insertions, 56 deletions
diff --git a/games/devilutionX/Makefile b/games/devilutionX/Makefile
index 1723b6e09fba..bc4eb3b34e38 100644
--- a/games/devilutionX/Makefile
+++ b/games/devilutionX/Makefile
@@ -1,39 +1,96 @@
PORTNAME= devilutionX
-DISTVERSION= 1.2.1
-PORTREVISION= 1
+DISTVERSION= 1.4
CATEGORIES= games
+MASTER_SITES= https://github.com/diasurgical/devilutionx-assets/releases/download/${DATA_VERSION}/:data
+DISTFILES= devilutionx.mpq?tag=${DATA_VERSION}:data
+EXTRACT_ONLY= ${DISTFILES:N*\:data:C/:.*//}
MAINTAINER= eduardo@FreeBSD.org
COMMENT= Diablo I engine for modern operating systems
-LICENSE= UNLICENSE
-LICENSE_FILE= ${WRKSRC}/LICENSE
+LICENSE= UNLICENSE CC-BY-NC-SA-4.0 OFL11
+LICENSE_COMB= multi
+LICENSE_FILE_UNLICENSE= ${WRKSRC}/LICENSE
-_MY_DEPENDS= CharisSIL>0:x11-fonts/charis
-BUILD_DEPENDS= ${_MY_DEPENDS}
-LIB_DEPENDS= libsodium.so:security/libsodium
-RUN_DEPENDS= ${_MY_DEPENDS}
+LIB_DEPENDS= libfmt.so:devel/libfmt
-USES= cmake compiler:c++11-lang dos2unix sdl
-DOS2UNIX_GLOB= *.c *.h CMakeLists.txt
+USES= cmake compiler:c++11-lang dos2unix gettext-tools pkgconfig sdl
+DOS2UNIX_GLOB= *.cpp *.h CMakeLists.txt
USE_GITHUB= yes
GH_ACCOUNT= diasurgical
-USE_SDL= mixer2 sdl2 ttf2
+GH_TUPLE= diasurgical:libsmackerdec:2997ee0e41e91bb723003bc09234be553b190e38:libsmackerdec/_deps/libsmackerdec-src \
+ brofield:simpleini:9b3ed7ec815997bc8c5b9edf140d6bde653e1458:simpleini/_deps/simpleini-src \
+ diasurgical:libmpq:0f10bd1600f406b13932bf5351ba713361262184:libmpq/_deps/libmpq-src
+USE_SDL= sdl2 image2
CMAKE_ARGS= -DCMAKE_INSTALL_SHAREDIR:PATH=${PREFIX}/share \
- -DVERSION_NUM=${PORTVERSION}
+ -DVERSION_NUM="${PORTVERSION}.0"
+CMAKE_ON= FETCHCONTENT_FULLY_DISCONNECTED
-.if defined(WITH_DEBUG)
-CMAKE_ON= DEBUG
-.else
-CMAKE_ON= BINARY_RELEASE
-.endif
+DATA_VERSION= v2
+DATADIR= ${PREFIX}/share/diasurgical/devilutionx
+
+OPTIONS_DEFINE= TEST SOUND LTO DEBUG
+OPTIONS_GROUP= NETWORKING
+OPTIONS_GROUP_NETWORKING= NETWORK TCP ZEROTIER ENCRYPTION
+OPTIONS_DEFAULT= LTO NETWORK TCP ENCRYPTION SOUND
+
+TEST_CMAKE_BOOL= BUILD_TESTING
+TEST_BUILD_DEPENDS= googletest>0:devel/googletest
+
+NETWORK_DESC= Enable network support
+NETWORK_CMAKE_BOOL_OFF= NONET
+
+TCP_DESC= TCP multiplayer option
+TCP_CMAKE_BOOL_OFF= DISABLE_TCP
+TCP_IMPLIES= NETWORK
+TCP_GH_TUPLE= diasurgical:asio:ebeff99f539da23d27c2e8d4bdbc1ee011968644:asio/_deps/asio-src
+
+ZEROTIER_DESC= ZeroTier multiplayer option (broken)
+ZEROTIER_BROKEN= does not build: fatal error: 'sys/appleapiopts.h' file not found
+ZEROTIER_CMAKE_BOOL_OFF=DISABLE_ZERO_TIER
+ZEROTIER_IMPLIES= NETWORK
+ZEROTIER_GH_TUPLE= diasurgical:libzt:a34ba7f1cc2e41b05badd25d1b01fdc5fd2f4e02:libzt/_deps/libzt-src \
+ diasurgical:ZeroTierOne:b1350ac91118d1bd6bb71c0c41be5f4a30196838:ZeroTierOne/_deps/libzt-src/ext/ZeroTierOne \
+ diasurgical:lwip:1bf7e011caf4e992ad139f6cb8c9818a9c1fbe1b:lwip/_deps/libzt-src/ext/lwip \
+ diasurgical:lwip-contrib:1f9e26e221a41542563834222c4ec8399be1908f:lwipcontrib/_deps/libzt-src/ext/lwip-contrib
+
+ENCRYPTION_DESC= Encrypt network packets
+ENCRYPTION_CMAKE_BOOL= PACKET_ENCRYPTION
+ENCRYPTION_IMPLIES= NETWORK
+ENCRYPTION_LIB_DEPENDS= libsodium.so:security/libsodium
-CXXFLAGS+= -DTTF_FONT_NAME=\\\"${LOCALBASE}/share/fonts/CharisSIL/CharisSIL-Bold.ttf\\\"
+SOUND_CMAKE_BOOL_OFF= NOSOUND
+SOUND_GH_TUPLE= realnc:SDL_audiolib:1a69135313c79817b38a3a99826d4ac28d627fdf:SDL_audiolib/_deps/sdl_audiolib-src
-PLIST_FILES= bin/devilutionx \
- share/applications/devilutionx.desktop \
- share/icons/hicolor/512x512/apps/devilutionx.png \
- share/icons/hicolor/512x512/apps/devilutionx_solid.png
+LTO_CMAKE_BOOL_OFF= DISABLE_LTO
+
+DEBUG_CMAKE_BOOL= DEBUG
+
+post-extract:
+ @${MKDIR} ${BUILD_WRKSRC}
+ @${LN} -s ${WRKSRC}/_deps ${BUILD_WRKSRC}/_deps
+
+post-patch:
+ @${REINPLACE_CMD} -e 's|/usr/local|${PREFIX}|' ${WRKSRC}/Source/init.cpp
+
+do-install:
+ ${INSTALL_PROGRAM} ${BUILD_WRKSRC}/devilutionx ${STAGEDIR}${PREFIX}/bin
+ ${INSTALL_DATA} ${WRKSRC}/Packaging/nix/devilutionx.desktop ${STAGEDIR}${PREFIX}/share/applications
+ ${INSTALL_DATA} ${WRKSRC}/Packaging/nix/devilutionx-hellfire.desktop ${STAGEDIR}${PREFIX}/share/applications
+ @${MKDIR} ${STAGEDIR}${PREFIX}/share/icons/hicolor/512x512/apps
+ ${INSTALL_DATA} ${WRKSRC}/Packaging/resources/icon.png ${STAGEDIR}${PREFIX}/share/icons/hicolor/512x512/apps/devilutionx.png
+ ${INSTALL_DATA} ${WRKSRC}/Packaging/resources/hellfire.png ${STAGEDIR}${PREFIX}/share/icons/hicolor/512x512/apps/devilutionx-hellfire.png
+ @${MKDIR} ${STAGEDIR}${DATADIR}
+ ${INSTALL_DATA} ${DISTDIR}/devilutionx.mpq?tag=${DATA_VERSION} ${STAGEDIR}${DATADIR}/devilutionx.mpq
+
+do-test-TEST-on:
+ @cd ${TEST_WRKSRC} && ${SETENV} ${TEST_ENV} ${LOCALBASE}/bin/ctest -V
+
+.if make(makesum)
+GH_TUPLE+= ${TCP_GH_TUPLE} \
+ ${ZEROTIER_GH_TUPLE} \
+ ${SOUND_GH_TUPLE}
+.endif
.include <bsd.port.mk>
diff --git a/games/devilutionX/distinfo b/games/devilutionX/distinfo
index 6936974b1c1a..8eade3a9e6b8 100644
--- a/games/devilutionX/distinfo
+++ b/games/devilutionX/distinfo
@@ -1,3 +1,23 @@
-TIMESTAMP = 1619323414
-SHA256 (diasurgical-devilutionX-1.2.1_GH0.tar.gz) = 002dcbd4d4a5bdf8db1a3ec01139e5bfbed46d6a1caa32b17c9f2df161ad3521
-SIZE (diasurgical-devilutionX-1.2.1_GH0.tar.gz) = 3573200
+TIMESTAMP = 1652828881
+SHA256 (devilutionx.mpq?tag=v2) = 90467c15f5e0ac902b2b8ac916f63a1fe2dd4b554ca36ab218bcd27f5121e988
+SIZE (devilutionx.mpq?tag=v2) = 4959860
+SHA256 (diasurgical-devilutionX-1.4_GH0.tar.gz) = 02efcb59c0b4c9f9332a93c9d9056d828381b261f00727d10e461b5b6a052c71
+SIZE (diasurgical-devilutionX-1.4_GH0.tar.gz) = 7559966
+SHA256 (diasurgical-libsmackerdec-2997ee0e41e91bb723003bc09234be553b190e38_GH0.tar.gz) = 40c0dc21943de22e153d56a7992c621a42a0c56c7cd833f8b84f90e48da753ea
+SIZE (diasurgical-libsmackerdec-2997ee0e41e91bb723003bc09234be553b190e38_GH0.tar.gz) = 18556
+SHA256 (brofield-simpleini-9b3ed7ec815997bc8c5b9edf140d6bde653e1458_GH0.tar.gz) = f7792eca9f3f7b0ee8916ffa4e124cb4b319b11d5849e15c5eef58eb910b0451
+SIZE (brofield-simpleini-9b3ed7ec815997bc8c5b9edf140d6bde653e1458_GH0.tar.gz) = 62870
+SHA256 (diasurgical-libmpq-0f10bd1600f406b13932bf5351ba713361262184_GH0.tar.gz) = ee173f5edb20f162482658cbc9d4bb84b640f651041d686c0ad7b2af12baf2a1
+SIZE (diasurgical-libmpq-0f10bd1600f406b13932bf5351ba713361262184_GH0.tar.gz) = 69570
+SHA256 (diasurgical-asio-ebeff99f539da23d27c2e8d4bdbc1ee011968644_GH0.tar.gz) = 88bb72f7bbdde7dbd050789bd73ff2abb2e9eacd8f9c889202b502f222230b6e
+SIZE (diasurgical-asio-ebeff99f539da23d27c2e8d4bdbc1ee011968644_GH0.tar.gz) = 1614738
+SHA256 (diasurgical-libzt-a34ba7f1cc2e41b05badd25d1b01fdc5fd2f4e02_GH0.tar.gz) = 40fd669e429b477bf2463e94c730b1db26752aafe06e4337dd76a112933ae1bf
+SIZE (diasurgical-libzt-a34ba7f1cc2e41b05badd25d1b01fdc5fd2f4e02_GH0.tar.gz) = 390951
+SHA256 (diasurgical-ZeroTierOne-b1350ac91118d1bd6bb71c0c41be5f4a30196838_GH0.tar.gz) = 39c1b7e28f9d4d92edaaa831007715358465a068019fe84a56b5366b386a1363
+SIZE (diasurgical-ZeroTierOne-b1350ac91118d1bd6bb71c0c41be5f4a30196838_GH0.tar.gz) = 13122622
+SHA256 (diasurgical-lwip-1bf7e011caf4e992ad139f6cb8c9818a9c1fbe1b_GH0.tar.gz) = 1477b5a427672480d0035b5af3e2cfae01c691afa9cace4500b43fcd262fa0bf
+SIZE (diasurgical-lwip-1bf7e011caf4e992ad139f6cb8c9818a9c1fbe1b_GH0.tar.gz) = 1136882
+SHA256 (diasurgical-lwip-contrib-1f9e26e221a41542563834222c4ec8399be1908f_GH0.tar.gz) = 0fd240b20ec56da41f5072161b8d1f1ad4367f994e183579bb5de9576394dcda
+SIZE (diasurgical-lwip-contrib-1f9e26e221a41542563834222c4ec8399be1908f_GH0.tar.gz) = 395250
+SHA256 (realnc-SDL_audiolib-1a69135313c79817b38a3a99826d4ac28d627fdf_GH0.tar.gz) = 8e013245bf8e676d4e2c61661d7cee6cb9de74f97a475c9e6b35a25d5e7a7715
+SIZE (realnc-SDL_audiolib-1a69135313c79817b38a3a99826d4ac28d627fdf_GH0.tar.gz) = 304183
diff --git a/games/devilutionX/files/patch-CMakeLists.txt b/games/devilutionX/files/patch-CMakeLists.txt
index 94b22747cbe4..0d51936652a8 100644
--- a/games/devilutionX/files/patch-CMakeLists.txt
+++ b/games/devilutionX/files/patch-CMakeLists.txt
@@ -1,14 +1,10 @@
---- CMakeLists.txt.orig 2021-04-08 06:20:26 UTC
+--- CMakeLists.txt.orig 2022-04-25 02:21:41 UTC
+++ CMakeLists.txt
-@@ -873,6 +873,11 @@ if(CPACK)
- set(CPACK_GENERATOR "DragNDrop")
- endif()
+@@ -156,7 +156,6 @@ if(NONET)
+ set(PACKET_ENCRYPTION OFF)
+ endif()
-+install(TARGETS devilutionx DESTINATION ${CMAKE_INSTALL_BINDIR})
-+install(FILES Packaging/fedora/devilutionx.desktop DESTINATION ${CMAKE_INSTALL_SHAREDIR}/applications)
-+install(FILES Packaging/resources/icon.png DESTINATION ${CMAKE_INSTALL_SHAREDIR}/icons/hicolor/512x512/apps RENAME devilutionx.png)
-+install(FILES Packaging/resources/icon_solid.png DESTINATION ${CMAKE_INSTALL_SHAREDIR}/icons/hicolor/512x512/apps RENAME devilutionx_solid.png)
-+
- set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
- set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
- set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})
+-find_program(CCACHE_PROGRAM ccache)
+ if(CCACHE_PROGRAM)
+ set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CCACHE_PROGRAM}")
+ endif()
diff --git a/games/devilutionX/files/patch-Packaging_fedora_devilutionx.desktop b/games/devilutionX/files/patch-Packaging_fedora_devilutionx.desktop
deleted file mode 100644
index 46627d9440d7..000000000000
--- a/games/devilutionX/files/patch-Packaging_fedora_devilutionx.desktop
+++ /dev/null
@@ -1,17 +0,0 @@
---- Packaging/fedora/devilutionx.desktop.orig 2021-04-06 05:51:05 UTC
-+++ Packaging/fedora/devilutionx.desktop
-@@ -1,10 +1,10 @@
- [Desktop Entry]
- Name=DevilutionX
- GenericName=DevilutionX
--Comment=Play Diablo I on Linux
--Comment[da]=Spil Diablo I på Linux
--Comment[hr]=Igrajte Diablo I na Linuxu
--Comment[it]=Gioca a Diablo I su Linux
-+Comment=Play Diablo
-+Comment[da]=Spil Diablo I
-+Comment[hr]=Igrajte Diablo I
-+Comment[it]=Gioca a Diablo I
- Exec=devilutionx --diablo
- Icon=devilutionx
- Terminal=false
diff --git a/games/devilutionX/files/patch-Source_engine_random.cpp b/games/devilutionX/files/patch-Source_engine_random.cpp
new file mode 100644
index 000000000000..ac57d195923f
--- /dev/null
+++ b/games/devilutionX/files/patch-Source_engine_random.cpp
@@ -0,0 +1,14 @@
+https://github.com/diasurgical/devilutionX/pull/4588
+
+--- Source/engine/random.cpp.orig 2022-04-25 02:21:41 UTC
++++ Source/engine/random.cpp
+@@ -29,7 +29,8 @@ uint32_t GetLCGEngineState()
+
+ int32_t GetRndSeed()
+ {
+- return abs(static_cast<int32_t>(sglGameSeed));
++ const int32_t seed = static_cast<int32_t>(sglGameSeed);
++ return seed == -2147483648 ? -2147483648 : abs(seed);
+ }
+
+ int32_t AdvanceRndSeed()
diff --git a/games/devilutionX/files/patch-Source_init.cpp b/games/devilutionX/files/patch-Source_init.cpp
new file mode 100644
index 000000000000..96130a70054a
--- /dev/null
+++ b/games/devilutionX/files/patch-Source_init.cpp
@@ -0,0 +1,11 @@
+--- Source/init.cpp.orig 2022-04-25 02:21:41 UTC
++++ Source/init.cpp
+@@ -90,7 +90,7 @@ std::vector<std::string> GetMPQSearchPaths()
+ if (paths[0] == paths[1])
+ paths.pop_back();
+
+-#if defined(__linux__) && !defined(__ANDROID__)
++#if (defined(__linux__) && !defined(__ANDROID__)) || defined(__FreeBSD__)
+ paths.emplace_back("/usr/share/diasurgical/devilutionx/");
+ paths.emplace_back("/usr/local/share/diasurgical/devilutionx/");
+ #elif defined(__3DS__) || defined(__SWITCH__)
diff --git a/games/devilutionX/files/patch-Source_sound.h b/games/devilutionX/files/patch-Source_sound.h
new file mode 100644
index 000000000000..c392962bd8dc
--- /dev/null
+++ b/games/devilutionX/files/patch-Source_sound.h
@@ -0,0 +1,14 @@
+--- Source/sound.h.orig 2022-05-17 15:57:06 UTC
++++ Source/sound.h
+@@ -60,7 +60,11 @@ struct TSnd {
+ };
+
+ extern bool gbSndInited;
++#ifndef NOSOUND
+ extern _music_id sgnMusicTrack;
++#else
++inline const _music_id sgnMusicTrack = NUM_MUSIC;
++#endif
+
+ void ClearDuplicateSounds();
+ void snd_stop_snd(TSnd *pSnd);
diff --git a/games/devilutionX/pkg-message b/games/devilutionX/pkg-message
index b084bb8cb89f..14e563baa00c 100644
--- a/games/devilutionX/pkg-message
+++ b/games/devilutionX/pkg-message
@@ -4,8 +4,7 @@
This game requires a datafile from the original Diablo(tm) CD or the GOG release.
If you don't own it yet, you can buy it at https://www.gog.com/game/diablo
-Copy DIABDAT.MPQ to ~/.local/share/diasurgical/devilution/diabdat.mpq
-Pay attention to the case, the resulting file needs to be entirely lowercase!
+Copy DIABDAT.MPQ to ~/.local/share/diasurgical/devilution/
If you have any issues with this game, please file a bug report on the GitHub page:
https://github.com/diasurgical/devilutionX/issues
diff --git a/games/devilutionX/pkg-plist b/games/devilutionX/pkg-plist
new file mode 100644
index 000000000000..1add42c683cb
--- /dev/null
+++ b/games/devilutionX/pkg-plist
@@ -0,0 +1,6 @@
+bin/devilutionx
+share/applications/devilutionx-hellfire.desktop
+share/applications/devilutionx.desktop
+%%DATADIR%%/devilutionx.mpq
+share/icons/hicolor/512x512/apps/devilutionx-hellfire.png
+share/icons/hicolor/512x512/apps/devilutionx.png