#pragma once #include class QProcessEnvironment; // Установщики Forge и NeoForge сверяют sha1 каждого jar, который сами же и // собирают, с эталоном из install_profile.json. Эталон посчитан на обычном // zlib, а CachyOS, Fedora и другие подставляют вместо него zlib-ng: сжатие // корректное, но побайтово другое, поэтому установка падает на любой версии // игры сообщением «Processor failed, invalid outputs». // // Сменить Java не поможет — сборки OpenJDK под Linux берут libz.so.1 из // системы. Поэтому рядом с лаунчером лежит собранный обычный zlib, и процессу // установщика мы подсовываем его через LD_PRELOAD. Системный zlib-ng при этом // остаётся на месте: подмена живёт ровно один процесс. namespace ZlibReference { // libz.so.1, который достанется процессу java, — это zlib-ng? bool systemIsZlibNg(); // Путь к собранному рядом эталонному libz.so.1; пусто, если его нет. QString bundledPath(); // Дописывает LD_PRELOAD, если подмена нужна. true — окружение готово (в том // числе когда подменять нечего). note — строка для лога и текста ошибки. bool applyTo(QProcessEnvironment &env, QString *note = nullptr); } // namespace ZlibReference