30 lines
1.7 KiB
C++
30 lines
1.7 KiB
C++
|
|
#pragma once
|
|||
|
|
|
|||
|
|
#include <QString>
|
|||
|
|
|
|||
|
|
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
|