Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
192 changes: 192 additions & 0 deletions srcpkgs/Aegisub/patches/01-no-iconv-tests.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,192 @@
From c5f5bffd46d56c3af2ca46c15a31691d46f3b177 Mon Sep 17 00:00:00 2001
From: Komeil Parseh <komeilparseh@disroot.org>
Date: Mon, 16 Jun 2025 03:46:22 +0330
Subject: [PATCH 1/3] Remove tests/tests/iconv.cpp

This file is removed as it does not contribute to the test suite
and is not required for the build or testing process.
---
tests/meson.build | 1 -
tests/tests/iconv.cpp | 158 ------------------------------------------
2 files changed, 159 deletions(-)
delete mode 100644 tests/tests/iconv.cpp

diff --git a/tests/meson.build b/tests/meson.build
index 81008e3ca..ff8cee523 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -25,7 +25,6 @@ tests_src = [
'tests/format.cpp',
'tests/fs.cpp',
'tests/hotkey.cpp',
- 'tests/iconv.cpp',
'tests/ifind.cpp',
'tests/karaoke_matcher.cpp',
'tests/keyframe.cpp',
diff --git a/tests/tests/iconv.cpp b/tests/tests/iconv.cpp
deleted file mode 100644
index 07a494c72..000000000
--- a/tests/tests/iconv.cpp
+++ /dev/null
@@ -1,158 +0,0 @@
-// Copyright (c) 2010, Thomas Goyne <plorkyeran@aegisub.org>
-//
-// Permission to use, copy, modify, and distribute this software for any
-// purpose with or without fee is hereby granted, provided that the above
-// copyright notice and this permission notice appear in all copies.
-//
-// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
-// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
-// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-#include <libaegisub/charset_conv.h>
-
-#include <main.h>
-
-#include <array>
-#include <cstdint>
-#include <iconv.h>
-
-using namespace agi::charset;
-
-TEST(lagi_iconv, BasicSetup) {
- EXPECT_NO_THROW(IconvWrapper("UTF-8", "UTF-16LE"));
-}
-
-TEST(lagi_iconv, InvalidConversions) {
- EXPECT_THROW(IconvWrapper("nonexistent charset", "UTF-16LE"), UnsupportedConversion);
- EXPECT_THROW(IconvWrapper("UTF-16LE", "nonexistent charset"), UnsupportedConversion);
- EXPECT_THROW(IconvWrapper("nonexistent charset", "nonexistent charset"), UnsupportedConversion);
-}
-
-#ifdef _LIBICONV_VERSION
-TEST(lagi_iconv, Fallbacks) {
- IconvWrapper nofallback("UTF-8", "Shift-JIS", false);
- IconvWrapper fallback("UTF-8", "Shift-JIS", true);
- IconvWrapper noneneeded("UTF-8", "UTF-16LE", false);
-
- // Shift-JIS does not have a backslash
- EXPECT_THROW(nofallback.Convert("\\"), BadInput);
- ASSERT_NO_THROW(fallback.Convert("\\"));
- EXPECT_EQ("\\", fallback.Convert("\\"));
- EXPECT_NO_THROW(noneneeded.Convert("\\"));
-
- // BOM into non-unicode
- char bom[] = "\xEF\xBB\xBF";
- EXPECT_THROW(nofallback.Convert(bom), BadInput);
- ASSERT_NO_THROW(fallback.Convert(bom));
- EXPECT_EQ("", fallback.Convert(bom));
- EXPECT_NO_THROW(noneneeded.Convert(bom));
-
- // A snowman (U+2603)
- char snowman[] = "\xE2\x98\x83";
- EXPECT_THROW(nofallback.Convert(snowman), BadInput);
- EXPECT_NO_THROW(noneneeded.Convert(snowman));
- ASSERT_NO_THROW(fallback.Convert(snowman));
- EXPECT_EQ("?", fallback.Convert(snowman));
-}
-
-TEST(lagi_iconv, BadInput) {
- IconvWrapper utf16("UTF-16LE", "UTF-8");
- EXPECT_THROW(utf16.Convert(" "), BadInput);
- IconvWrapper utf8("UTF-8", "UTF-16LE");
- EXPECT_THROW(utf8.Convert("\xE2\xFF"), BadInput);
-}
-#endif
-
-TEST(lagi_iconv, Conversions) {
- IconvWrapper utf16le("UTF-16LE", "UTF-8", false);
- IconvWrapper utf16be("UTF-16BE", "UTF-8", false);
- IconvWrapper utf8("UTF-8", "UTF-16LE", false);
-
- char space_utf8_[] = " ";
- char space_utf16be_[] = {0, 32, 0, 0};
- char space_utf16le_[] = {32, 0, 0, 0};
- std::string space_utf8(space_utf8_);
- std::string space_utf16be(space_utf16be_, 2);
- std::string space_utf16le(space_utf16le_, 2);
-
- EXPECT_EQ(space_utf8, utf16le.Convert(space_utf16le));
- EXPECT_EQ(space_utf8, utf16be.Convert(space_utf16be));
- EXPECT_EQ(space_utf16le, utf8.Convert(space_utf8));
-}
-
-// Basic overflow tests
-TEST(lagi_iconv, Buffer) {
- IconvWrapper conv("UTF-8", "UTF-16LE", false);
- std::array<char, 4> buff;
- buff.fill(0xFF);
- std::span<char> sbuff(buff);
- std::string_view src("", 1);
-
- EXPECT_THROW(conv.Convert(src, sbuff.first(0)), BufferTooSmall);
- EXPECT_EQ('\xFF', buff[0]);
- EXPECT_THROW(conv.Convert(src, sbuff.first(1)), BufferTooSmall);
- EXPECT_EQ('\xFF', buff[0]);
- EXPECT_NO_THROW(conv.Convert(src, sbuff.first(2)));
- EXPECT_EQ('\0', buff[0]);
- EXPECT_EQ('\0', buff[1]);
- EXPECT_EQ('\xFF', buff[2]);
-}
-
-TEST(lagi_iconv, LocalSupport) {
- ASSERT_NO_THROW(IconvWrapper("UTF-8", ""));
- IconvWrapper conv("UTF-8", "");
- ASSERT_NO_THROW(conv.Convert(" "));
- EXPECT_EQ(" ", conv.Convert(" "));
-}
-TEST(lagi_iconv, wchar_tSupport) {
- EXPECT_NO_THROW(IconvWrapper("UTF-8", "wchar_t"));
-}
-
-TEST(lagi_iconv, Roundtrip) {
- for (auto const& name : GetEncodingsList<std::vector<std::string>>()) {
- ASSERT_NO_THROW(IconvWrapper("utf-8", name.c_str()));
- ASSERT_NO_THROW(IconvWrapper(name.c_str(), "utf-8"));
- EXPECT_EQ(
- "Jackdaws love my big sphinx of quartz",
- IconvWrapper(name.c_str(), "utf-8").Convert(
- IconvWrapper("utf-8", name.c_str()).Convert(
- "Jackdaws love my big sphinx of quartz")));
- }
-}
-
-TEST(lagi_iconv, Iso6937) {
- ASSERT_NO_THROW(IconvWrapper("UTF-8", "ISO-6937-2"));
- IconvWrapper subst("UTF-8", "ISO-6937-2");
- IconvWrapper no_subst("UTF-8", "ISO-6937-2", false);
-
- // 7-bit is same as ISO-8859
- for (int i = 0; i < 128; ++i) {
- const char buf[] = { (char)i, 0 };
- std::string ret;
- EXPECT_NO_THROW(ret = subst.Convert(buf));
- EXPECT_STREQ(buf, ret.c_str());
- }
-
- std::string ret;
-
- // LATIN CAPITAL LETTER D WITH CARON (U+010E) - multibyte char in main block
- EXPECT_NO_THROW(ret = subst.Convert("\xC4\x8E"));
- EXPECT_STREQ("\xCF\x44", ret.c_str());
-
- // BREVE - multibyte char in extended ranges
- EXPECT_NO_THROW(ret = subst.Convert("\xCB\x98"));
- EXPECT_STREQ("\xC6\x20", ret.c_str());
-
- // EM DASH - single byte char in extended ranges
- EXPECT_NO_THROW(ret = subst.Convert("\xE2\x80\x94"));
- EXPECT_STREQ("\xD0", ret.c_str());
-
- // codepoint not in ISO-6937-2
- EXPECT_NO_THROW(ret = subst.Convert("\xCB\x97"));
- EXPECT_STREQ("?", ret.c_str());
- EXPECT_THROW(no_subst.Convert("\xCB\x97"), BadInput);
-}
--
2.49.0

101 changes: 101 additions & 0 deletions srcpkgs/Aegisub/patches/02-luajit-5.2.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
From 663c2818115316f1cbd4f97324ba2764870b6269 Mon Sep 17 00:00:00 2001
From: Komeil Parseh <komeilparseh@disroot.org>
Date: Mon, 16 Jun 2025 15:44:47 +0330
Subject: [PATCH 2/3] Adjust LuaJIT dependency to avoid cross-build test
failures

On Void Linux, LuaJIT is consistently provided as version 5.2 (97618aeef1ac02ddc6cc755a8c9c712c7de3bfe2)(#55648)
Aegisub's Meson build system performs an internal check/test
to verify compatibility with LuaJIT 5.2 during configuration.
This test involves running a compiled binary or script for the
target architecture, which invariably fails in a cross-compilation
environment with "Can not run test applications in this cross environment"
errors, even when LuaJIT is correctly installed for the target.

To resolve this, the Meson build configuration is modified to
bypass this runtime compatibility test. Instead of explicitly
checking for LuaJIT 5.2 support, it now relies on the system's
'luajit' dependency directly. This ensures that the build
process completes successfully without attempting to execute
target binaries/scripts on the host system.

This addresses the LuaJIT test failures encountered during
aarch64 cross-compilation.
---
meson.build | 24 +-----------------------
subprojects/luabins/meson.build | 24 +-----------------------
2 files changed, 2 insertions(+), 46 deletions(-)

diff --git a/meson.build b/meson.build
index f0e56521c..0af26806e 100644
--- a/meson.build
+++ b/meson.build
@@ -319,29 +319,7 @@ if get_option('enable_update_checker')
endif

luajit = dependency('luajit', version: '>=2.0.0', required: get_option('system_luajit'))
-if luajit.found() and luajit.type_name() != 'internal'
- luajit_test = cc.run('''#include <lauxlib.h>
-int main(void)
-{
- lua_State *L = luaL_newstate();
- if (!L) return 1;
- // This is valid in lua 5.2, but a syntax error in 5.1
- const char testprogram[] = "function foo() while true do break return end end";
- return luaL_loadstring(L, testprogram) == LUA_ERRSYNTAX;
-}''', dependencies: luajit)
-
- if luajit_test.returncode() == 1
- if get_option('system_luajit')
- error('System luajit found but not compiled in 5.2 mode')
- else
- message('System luajit found but not compiled in 5.2 mode; using built-in luajit')
- endif
- else
- deps += luajit
- endif
-else
- message('System luajit not found; using built-in luajit')
-endif
+deps += luajit # void already uses luajit52 https://github.com/void-linux/void-packages/commit/97618aeef1ac02ddc6cc755a8c9c712c7de3bfe2

if not deps.contains(luajit)
deps += subproject('luajit').get_variable('luajit_dep')
diff --git a/subprojects/luabins/meson.build b/subprojects/luabins/meson.build
index 1d87ab2b1..6176a8471 100644
--- a/subprojects/luabins/meson.build
+++ b/subprojects/luabins/meson.build
@@ -12,29 +12,7 @@ luabins_src = files(
deps = []

luajit = dependency('luajit', version: '>=2.0.0')
-if luajit.found() and luajit.type_name() != 'internal'
- luajit_test = meson.get_compiler('c').run('''#include <lauxlib.h>
-int main(void)
-{
- lua_State *L = luaL_newstate();
- if (!L) return 1;
- // This is valid in lua 5.2, but a syntax error in 5.1
- const char testprogram[] = "function foo() while true do break return end end";
- return luaL_loadstring(L, testprogram) == LUA_ERRSYNTAX;
-}''', dependencies: luajit)
-
- if luajit_test.returncode() == 1
- message('System luajit found but not compiled in 5.2 mode; using built-in luajit')
- else
- deps += luajit
- endif
-else
- message('System luajit not found; using built-in luajit')
-endif
-
-if not deps.contains(luajit)
- deps += subproject('luajit').get_variable('luajit_dep')
-endif
+deps += luajit # void already uses luajit52 https://github.com/void-linux/void-packages/commit/97618aeef1ac02ddc6cc755a8c9c712c7de3bfe2

luabins = static_library('luabins', luabins_src, dependencies: deps)
luabins_dep = declare_dependency(link_with: luabins)
--
2.49.0

56 changes: 0 additions & 56 deletions srcpkgs/Aegisub/patches/allow-cmake-builds-from-tarball.patch

This file was deleted.

Loading