From 94bdf84633e1304863dcde75d9cee52e819f3793 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=A5=D1=80?= =?UTF-8?q?=D0=B0=D0=BC=D0=BE=D0=B2?= Date: Mon, 24 Nov 2025 00:03:59 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A1=D1=82=D0=B0=D1=80=D1=82=20=D1=80=D0=B5?= =?UTF-8?q?=D0=BF=D0=BE=D0=B7=D0=B8=D1=82=D0=BE=D1=80=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LICENSE | 18 +++ README.md | 19 +++ alr-repo.toml | 4 + lib32-libdrm/alr.sh | 118 +++++++++++++++++ lib32-llvm18/alr.sh | 151 ++++++++++++++++++++++ lib32-lm_sensors/alr.sh | 103 +++++++++++++++ lib32-mesa/alr.sh | 256 +++++++++++++++++++++++++++++++++++++ libdrm/alr.sh | 110 ++++++++++++++++ mesa/alr.sh | 236 ++++++++++++++++++++++++++++++++++ validate-alr.sh | 273 ++++++++++++++++++++++++++++++++++++++++ 10 files changed, 1288 insertions(+) create mode 100644 LICENSE create mode 100644 README.md create mode 100644 alr-repo.toml create mode 100644 lib32-libdrm/alr.sh create mode 100644 lib32-llvm18/alr.sh create mode 100644 lib32-lm_sensors/alr.sh create mode 100644 lib32-mesa/alr.sh create mode 100644 libdrm/alr.sh create mode 100644 mesa/alr.sh create mode 100644 validate-alr.sh diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..199b23a --- /dev/null +++ b/LICENSE @@ -0,0 +1,18 @@ +// This file was originally part of the project "LURE - Linux User REpository", created by Elara Musayelyan. +// It has been modified as part of "ALR - Any Linux Repository" by the ALR Authors. +// +// ALR - Any Linux Repository +// Copyright (C) 2025 The ALR Authors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..f6aa38a --- /dev/null +++ b/README.md @@ -0,0 +1,19 @@ +# ALR-repo +Репозиторий для [ALR](https://gitea.plemya-x.ru/Plemya-x/ALR) + +ALR - это независимая от дистрибутива система сборки для Linux, аналогичная AUR. +В настоящее время он находится в альфа-состоянии и может быть нестабильным. + +## Установка ALR +```bash +curl -fsSL https://gitea.plemya-x.ru/Plemya-x/ALR/raw/branch/master/scripts/install.sh | bash +``` +## Добавление этого репозитория +```bash +alr repo add alr-RG https://gitea.plemya-x.ru/Plemya-x/alr-RG.git +``` + +## Соцсети +Сайт - https://alr.plemya-x.ru/ + +Telegram - https://t.me/plemyakh \ No newline at end of file diff --git a/alr-repo.toml b/alr-repo.toml new file mode 100644 index 0000000..d028131 --- /dev/null +++ b/alr-repo.toml @@ -0,0 +1,4 @@ +[repo] +minVersion = "v0.0.28" +url = "https://gitea.plemya-x.ru/Plemya-x/alr-RG.git" +ref = "master" diff --git a/lib32-libdrm/alr.sh b/lib32-libdrm/alr.sh new file mode 100644 index 0000000..137c43d --- /dev/null +++ b/lib32-libdrm/alr.sh @@ -0,0 +1,118 @@ +name='lib32-libdrm' +version='2.4.128' +release='3' +desc='32-bit userspace library for kernel DRM services' +desc_ru='32-битная библиотека пользовательского пространства для служб DRM ядра' +homepage='https://dri.freedesktop.org/' +maintainer='Evgeniy Khramov ' +maintainer_ru='Евгений Храмов ' +license='MIT' +architectures=('amd64') +min_alr_version='v0.0.14' + +# Runtime dependencies +deps=( + 'libpciaccess.i686' + 'libdrm' +) + +deps_redos=( + 'libpciaccess(x86-32)' + 'libdrm' +) + +# Build dependencies +build_deps=( + 'meson' + 'ninja-build' + 'gcc' + 'libpciaccess-devel.i686' + 'systemd-devel.i686' + 'python3' +) + +build_deps_redos=("${build_deps[@]}") + +# Provides 32-bit libdrm +provides=( + 'libdrm.i686' + 'libdrm(x86-32)' + 'libdrm.so.2' + 'libdrm_amdgpu.so.1' + 'libdrm_intel.so.1' + 'libdrm_nouveau.so.2' + 'libdrm_radeon.so.1' + 'libdrm-devel.i686' + 'libdrm-devel(x86-32)' +) + +conflicts=( + 'libdrm.i686 < 2.4.128' + 'libdrm(x86-32) < 2.4.128' + 'libdrm-devel.i686 < 2.4.128' + 'libdrm-devel(x86-32) < 2.4.128' +) + +_pkgver="${version}" + +sources=("https://dri.freedesktop.org/libdrm/libdrm-${_pkgver}.tar.xz") +checksums=('SKIP') + +prepare() { + cd "$srcdir/libdrm-${_pkgver}" + echo "==> Preparing libdrm ${version} (32-bit)..." +} + +build() { + cd "$srcdir/libdrm-${_pkgver}" + + export CFLAGS="-m32 -O2 -g1" + export CXXFLAGS="-m32 -O2 -g1" + export LDFLAGS="-m32" + export PKG_CONFIG_PATH="/usr/lib/pkgconfig:/usr/share/pkgconfig" + + echo "==> Configuring libdrm (32-bit) with Meson..." + meson setup builddir \ + --prefix=/usr \ + --libdir=lib \ + --buildtype=release \ + -Dudev=true \ + -Dvalgrind=disabled \ + -Dcairo-tests=disabled \ + -Dintel=enabled \ + -Dradeon=enabled \ + -Damdgpu=enabled \ + -Dnouveau=enabled \ + -Dvmwgfx=enabled \ + -Domap=disabled \ + -Dexynos=disabled \ + -Dfreedreno=disabled \ + -Dtegra=disabled \ + -Dvc4=disabled \ + -Detnaviv=disabled \ + -Dinstall-test-programs=false + + echo "==> Building libdrm (32-bit)..." + meson compile -C builddir -j$(nproc) +} + +package() { + cd "$srcdir/libdrm-${_pkgver}" + + echo "==> Installing libdrm (32-bit)..." + DESTDIR="$pkgdir" meson install -C builddir --no-rebuild + + # Remove headers and pkg-config files (use from 64-bit libdrm+default) + rm -rf "$pkgdir/usr/include" + rm -rf "$pkgdir/usr/share" + + # Install license + install -Dm644 README.rst "$pkgdir/usr/share/licenses/$name/README.rst" + + echo "==> libdrm ${version} (32-bit) installed" +} + +files() { + # Find all installed files + find "$pkgdir" -type f -o -type l | sed "s|^$pkgdir||" | sort +} diff --git a/lib32-llvm18/alr.sh b/lib32-llvm18/alr.sh new file mode 100644 index 0000000..6079f98 --- /dev/null +++ b/lib32-llvm18/alr.sh @@ -0,0 +1,151 @@ +name='lib32-llvm18' +version='18.1.8' +release='12' +desc='32-bit LLVM libraries for Mesa' +desc_ru='32-битные библиотеки LLVM для Mesa' +homepage='https://llvm.org/' +maintainer='Evgeniy Khramov ' +maintainer_ru='Евгений Храмов ' +license='Apache-2.0 WITH LLVM-exception' +architectures=('amd64') +min_alr_version='v0.0.14' + +# Runtime dependencies +deps=() + +deps_redos=() + +# Build dependencies +build_deps=( + 'cmake' + 'ninja-build' + 'gcc' + 'gcc-c++' + 'python3' + 'python3-devel' + 'zlib-devel(x86-32)' + 'libzstd-devel(x86-32)' + 'libxml2-devel(x86-32)' + 'ncurses-devel(x86-32)' + 'libedit-devel(x86-32)' + 'libffi-devel(x86-32)' + 'glibc-devel(x86-32)' +) + +build_deps_redos=("${build_deps[@]}") + +# Provides 32-bit LLVM libraries and replaces system LLVM 17 +provides=( + 'lib32-llvm18' + 'llvm18-libs(x86-32)' + 'llvm18-devel(x86-32)' + 'llvm-libs(x86-32)' +) + +conflicts=( + 'llvm18-libs(x86-32) < 18.1.8' +) + +_pkgver="${version}" + +sources=("https://github.com/llvm/llvm-project/releases/download/llvmorg-${_pkgver}/llvm-project-${_pkgver}.src.tar.xz") +checksums=('SKIP') + +prepare() { + cd "$srcdir/llvm-project-${_pkgver}.src" + echo "==> Preparing LLVM ${version} (32-bit)..." +} + +build() { + cd "$srcdir/llvm-project-${_pkgver}.src/llvm" + + export CFLAGS="-m32 -O2 -g1" + export CXXFLAGS="-m32 -O2 -g1" + export LDFLAGS="-m32" + export PKG_CONFIG_PATH="/usr/lib/pkgconfig:/usr/share/pkgconfig" + + echo "==> Configuring LLVM (32-bit) with CMake..." + cmake -B build -G Ninja \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_LIBDIR=lib \ + -DCMAKE_C_FLAGS="-m32" \ + -DCMAKE_CXX_FLAGS="-m32" \ + -DLLVM_LIBDIR_SUFFIX="" \ + -DLLVM_TARGET_ARCH=i686 \ + -DLLVM_DEFAULT_TARGET_TRIPLE=i686-redsoft-linux-gnu \ + -DLLVM_TARGETS_TO_BUILD="X86;AMDGPU" \ + -DLLVM_ENABLE_PROJECTS="" \ + -DLLVM_BUILD_LLVM_DYLIB=ON \ + -DLLVM_LINK_LLVM_DYLIB=ON \ + -DLLVM_ENABLE_RTTI=ON \ + -DLLVM_BUILD_TOOLS=ON \ + -DLLVM_BUILD_UTILS=OFF \ + -DLLVM_INCLUDE_TESTS=OFF \ + -DLLVM_INCLUDE_EXAMPLES=OFF \ + -DLLVM_INCLUDE_BENCHMARKS=OFF \ + -DLLVM_INCLUDE_DOCS=OFF \ + -DLLVM_ENABLE_DOXYGEN=OFF \ + -DLLVM_ENABLE_SPHINX=OFF \ + -DLLVM_ENABLE_BINDINGS=OFF \ + -DLLVM_ENABLE_TERMINFO=ON \ + -DLLVM_ENABLE_ZLIB=ON \ + -DLLVM_ENABLE_ZSTD=ON \ + -DLLVM_ENABLE_LIBXML2=ON \ + -DBUILD_SHARED_LIBS=OFF + + echo "==> Building LLVM (32-bit) - this may take 30-60 minutes..." + cmake --build build -j$(nproc) +} + +package() { + cd "$srcdir/llvm-project-${_pkgver}.src/llvm" + + echo "==> Installing LLVM (32-bit) libraries..." + DESTDIR="$pkgdir" cmake --install build + + # Manually install llvm-config as llvm-config-18-32 + mkdir -p "$pkgdir/usr/bin" + if [ -f "build/bin/llvm-config" ]; then + install -m755 build/bin/llvm-config "$pkgdir/usr/bin/llvm-config-18-32" + else + echo "ERROR: llvm-config not found in build/bin/" + exit 1 + fi + + # Remove all other binaries that might have been installed + find "$pkgdir/usr/bin" -type f ! -name "llvm-config-18-32" -delete 2>/dev/null || true + + # Remove man pages and documentation + rm -rf "$pkgdir/usr/share/man" + rm -rf "$pkgdir/usr/share/opt-viewer" + rm -rf "$pkgdir/usr/share/doc" + + # Libraries should already be in /usr/lib due to CMAKE_INSTALL_LIBDIR=lib + # But check if any ended up in lib64 and move them + if [ -d "$pkgdir/usr/lib64" ]; then + mkdir -p "$pkgdir/usr/lib" + mv "$pkgdir/usr/lib64"/* "$pkgdir/usr/lib/" 2>/dev/null || true + rmdir "$pkgdir/usr/lib64" + fi + + # Remove static libraries to save space and avoid conflicts + echo "==> Removing static libraries..." + find "$pkgdir/usr/lib" -name "*.a" -delete + + # Remove cmake files that might conflict + rm -rf "$pkgdir/usr/lib/cmake" + + # Remove includes to avoid conflicts - Mesa will use system headers + rm -rf "$pkgdir/usr/include" + + # Install license + install -Dm644 LICENSE.TXT "$pkgdir/usr/share/licenses/$name/LICENSE.TXT" + + echo "==> LLVM ${version} (32-bit) installed: libraries in /usr/lib, llvm-config-18-32 in /usr/bin" +} + +files() { + # Find all installed files + find "$pkgdir" -type f -o -type l | sed "s|^$pkgdir||" | sort +} diff --git a/lib32-lm_sensors/alr.sh b/lib32-lm_sensors/alr.sh new file mode 100644 index 0000000..76e4f9d --- /dev/null +++ b/lib32-lm_sensors/alr.sh @@ -0,0 +1,103 @@ +name='lib32-lm_sensors' +version='3.6.0' +release='4' +desc='32-bit hardware monitoring library' +desc_ru='32-битная библиотека мониторинга оборудования' +homepage='https://github.com/lm-sensors/lm-sensors' +maintainer='Evgeniy Khramov ' +maintainer_ru='Евгений Храмов ' +license='GPL-2.0-or-later AND LGPL-2.1-or-later' +architectures=('amd64') +min_alr_version='v0.0.14' + +# Runtime dependencies +deps=( + 'lm_sensors' +) + +deps_redos=( + 'lm_sensors' +) + +# Build dependencies +build_deps=( + 'gcc' + 'make' + 'bison' + 'flex' + 'glibc-devel.i686' +) + +build_deps_redos=("${build_deps[@]}") + +# Provides 32-bit lm_sensors libraries +provides=( + 'lm_sensors-libs.i686' + 'lm_sensors-libs(x86-32)' + 'libsensors.so.5' +) + +conflicts=( + 'lm_sensors-libs.i686 < 3.6.0' +) + +_pkgver="${version}" + +sources=("https://github.com/lm-sensors/lm-sensors/archive/V${_pkgver//./-}.tar.gz") +checksums=('SKIP') + +prepare() { + cd "$srcdir/lm-sensors-${_pkgver//./-}" + echo "==> Preparing lm_sensors ${version} (32-bit)..." +} + +build() { + cd "$srcdir/lm-sensors-${_pkgver//./-}" + + export CFLAGS="-m32 -O2 -g1" + export CXXFLAGS="-m32 -O2 -g1" + export LDFLAGS="-m32" + + echo "==> Building lm_sensors (32-bit)..." + make PREFIX=/usr \ + LIBDIR=/usr/lib \ + MANDIR=/usr/share/man \ + BUILD_STATIC_LIB=0 \ + -j$(nproc) \ + lib/libsensors.so +} + +package() { + cd "$srcdir/lm-sensors-${_pkgver//./-}" + + echo "==> Installing lm_sensors (32-bit) libraries..." + + # Install library using make install (only libraries) + mkdir -p "$pkgdir/usr/lib" + make PREFIX="$pkgdir/usr" \ + LIBDIR="$pkgdir/usr/lib" \ + BUILD_STATIC_LIB=0 \ + install-lib + + # Remove pkg-config file (conflicts with 64-bit version) + rm -f "$pkgdir/usr/lib/pkgconfig/libsensors.pc" + rmdir "$pkgdir/usr/lib/pkgconfig" 2>/dev/null || true + + # Install license + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$name/COPYING" + install -Dm644 COPYING.LGPL "$pkgdir/usr/share/licenses/$name/COPYING.LGPL" + + echo "==> lm_sensors ${version} (32-bit) installed" +} + +files() { + # Find all installed files + if [ -d ./usr/lib ]; then + find ./usr/lib -type f -printf '%p\n' + find ./usr/lib -type l -printf '%p\n' + fi + + if [ -d ./usr/share/licenses ]; then + find ./usr/share/licenses -type f -printf '%p\n' + fi +} diff --git a/lib32-mesa/alr.sh b/lib32-mesa/alr.sh new file mode 100644 index 0000000..b008a4a --- /dev/null +++ b/lib32-mesa/alr.sh @@ -0,0 +1,256 @@ +name='lib32-mesa' +version='25.2.6' +release='15' +epoch='1' +desc='Open-source OpenGL and Vulkan drivers (32-bit) with AMD RDNA 4 support for gaming' +desc_ru='OpenGL и Vulkan драйверы (32-бит) с открытым исходным кодом с поддержкой AMD RDNA 4 для игр' +homepage='https://www.mesa3d.org/' +maintainer='Evgeniy Khramov ' +maintainer_ru='Евгений Храмов ' +architectures=('amd64') +license=('MIT' 'BSD-3-Clause' 'SGI-B-2.0') +provides=( + 'mesa-dri-drivers(x86-32)' + 'mesa-vulkan-drivers(x86-32)' + 'mesa-va-drivers(x86-32)' + 'mesa-vdpau-drivers(x86-32)' + 'mesa-libgbm(x86-32)' + 'mesa-libEGL(x86-32)' + 'mesa-libGL(x86-32)' + 'mesa-libGLES(x86-32)' + 'lib32-mesa' + 'lib32-mesa-dri-drivers' + 'lib32-mesa-vulkan-drivers' + 'lib32-mesa-va-drivers' + 'lib32-mesa-vdpau-drivers' + 'lib32-mesa-libgbm' + 'lib32-mesa-libEGL' + 'lib32-mesa-libGL' + 'lib32-mesa-libGLES' + 'lib32-vulkan-radeon' + 'lib32-libva-mesa-driver' + 'lib32-opengl-driver' + 'lib32-vulkan-driver' + 'libGLESv1_CM.so.1' + 'libGLESv2.so.2' +) +conflicts=( + 'mesa-dri-drivers(x86-32) < 25.2.6' + 'mesa-vulkan-drivers(x86-32) < 25.2.6' + 'mesa-va-drivers(x86-32) < 25.2.6' + 'mesa-vdpau-drivers(x86-32) < 25.2.6' + 'mesa-libgbm(x86-32) < 25.2.6' + 'mesa-libEGL(x86-32) < 25.2.6' + 'mesa-libGL(x86-32) < 25.2.6' + 'mesa-libGLES(x86-32) < 25.2.6' +) + +# 32-битные зависимости +deps=( + 'expat(x86-32)' + 'libdrm(x86-32)' + 'libelf(x86-32)' + 'libglvnd(x86-32)' + 'libx11(x86-32)' + 'libxcb(x86-32)' + 'libxext(x86-32)' + 'libxshmfence(x86-32)' + 'libxxf86vm(x86-32)' + 'libwayland-client(x86-32)' + 'libwayland-server(x86-32)' + 'zlib(x86-32)' + 'libzstd(x86-32)' + 'vulkan-icd-loader(x86-32)' +) + +# Зависимости для RedOS (32-бит) +deps_redos=( + 'expat(x86-32)' + 'lib32-libdrm' + 'elfutils-libelf(x86-32)' + 'libglvnd(x86-32)' + 'libglvnd-gles(x86-32)' + 'libX11(x86-32)' + 'libxcb(x86-32)' + 'libXext(x86-32)' + 'libxshmfence(x86-32)' + 'libXxf86vm(x86-32)' + 'libwayland-client(x86-32)' + 'libwayland-server(x86-32)' + 'zlib(x86-32)' + 'libzstd(x86-32)' + 'vulkan-loader(x86-32)' + 'lib32-llvm18' + 'lib32-lm_sensors' +) + +# Зависимости для сборки (в основном 64-бит tools + 32-бит libs) +build_deps=( + 'gcc' + 'clang' + 'meson' + 'ninja-build' + 'cmake' + 'python3' + 'python3-mako' + 'python3-packaging' + 'python3-pyyaml' + 'bison' + 'flex' + 'llvm18' + 'llvm18-devel' + 'clang-devel' + 'rust' + 'rust-bindgen-devel' + 'cbindgen' + 'glslang-devel' + 'spirv-tools-devel' + 'glibc-devel(x86-32)' + 'lib32-libdrm' + 'libxcb-devel(x86-32)' + 'libX11-devel(x86-32)' + 'libXext-devel(x86-32)' + 'libXxf86vm-devel(x86-32)' + 'libXfixes-devel(x86-32)' + 'libXdamage-devel(x86-32)' + 'libxshmfence-devel(x86-32)' + 'libXrandr-devel(x86-32)' + 'elfutils-libelf-devel(x86-32)' + 'libglvnd-devel(x86-64)' + 'wayland-devel(x86-32)' + 'wayland-protocols-devel' + 'libva-devel(x86-64)' + 'libvdpau-devel(x86-64)' + 'expat-devel(x86-32)' + 'libxml2-devel(x86-32)' + 'libzstd-devel(x86-32)' + 'lm_sensors-devel' + 'lib32-lm_sensors' + 'systemd-devel(x86-32)' + 'libpng-devel(x86-32)' + 'vulkan-headers' + 'vulkan-loader-devel(x86-32)' + 'lib32-llvm18' +) + +build_deps_redos=("${build_deps[@]}") + +_pkgver="${version}" + +sources=("https://archive.mesa3d.org/mesa-${_pkgver}.tar.xz") +checksums=('361c97e8afa5fe20141c5362c5b489040751e12861c186a16c621a2fb182fc42') + +prepare() { + cd "$srcdir/mesa-${_pkgver}" + + # Установка версии для правильной идентификации + echo "${version}-alr${epoch}.${release}" > VERSION + + # Create llvm-config-i386.h for 32-bit LLVM support + echo "==> Creating llvm-config-i386.h for 32-bit LLVM 18..." + sudo cp /usr/lib64/llvm18/include/llvm/Config/llvm-config-x86_64.h /usr/lib64/llvm18/include/llvm/Config/llvm-config-i386.h + sudo sed -i 's/x86_64-redsoft-linux-gnu/i686-redsoft-linux-gnu/g' /usr/lib64/llvm18/include/llvm/Config/llvm-config-i386.h + + # Create meson cross-file for 32-bit compilation + cat > "$srcdir/lib32-cross.ini" < Preparing Mesa ${version} (32-bit) with LLVM for AMD RDNA 4 gaming support..." +} + +build() { + cd "$srcdir/mesa-${_pkgver}" + + # Set environment for 32-bit build + export PKG_CONFIG_PATH="/usr/lib/pkgconfig:/usr/share/pkgconfig" + export LLVM_CONFIG="/usr/bin/llvm-config-18-32" + + # 32-bit CFLAGS/CXXFLAGS with LLVM 18 headers + export CFLAGS="-m32 -O2 -g1 -I/usr/lib64/llvm18/include" + export CXXFLAGS="-m32 -O2 -g1 -I/usr/lib64/llvm18/include" + export LDFLAGS="-m32" + + echo "==> Configuring Mesa (32-bit) with Meson..." + meson setup builddir \ + --cross-file="$srcdir/lib32-cross.ini" \ + --prefix=/usr \ + --libdir=lib \ + --buildtype=release \ + -Db_ndebug=true \ + -Dc_args="-I/usr/lib64/llvm18/include" \ + -Dcpp_args="-I/usr/lib64/llvm18/include" \ + -Dplatforms=x11,wayland \ + -Dgallium-drivers=r300,r600,radeonsi,llvmpipe,softpipe,zink \ + -Dvulkan-drivers=amd,swrast \ + -Dvideo-codecs=all \ + -Dgallium-extra-hud=true \ + -Dgallium-rusticl=false \ + -Dgallium-va=enabled \ + -Dgallium-vdpau=enabled \ + -Dgbm=enabled \ + -Dgles1=disabled \ + -Dgles2=enabled \ + -Dglvnd=enabled \ + -Dglx=dri \ + -Degl=enabled \ + -Dllvm=enabled \ + -Dlmsensors=enabled \ + -Dvalgrind=disabled \ + -Dvulkan-layers=device-select,overlay \ + -Dintel-rt=disabled \ + -Dlibunwind=disabled \ + -Dmicrosoft-clc=disabled + + echo "==> Building Mesa (32-bit) - this may take 15-30 minutes..." + meson compile -C builddir -j$(($(nproc) - 1)) +} + +package() { + cd "$srcdir/mesa-${_pkgver}" + + echo "==> Installing Mesa (32-bit)..." + DESTDIR="$pkgdir" meson install -C builddir --no-rebuild + + # Install license + install -Dm644 docs/license.rst "$pkgdir/usr/share/licenses/$name/LICENSE" + + # Remove files that conflict with 64-bit mesa + rm -rf "$pkgdir/usr/include" + rm -rf "$pkgdir/usr/share/drirc.d" + rm -rf "$pkgdir/usr/share/vulkan" + rm -rf "$pkgdir/usr/share/glvnd" + rm -rf "$pkgdir/usr/lib/pkgconfig" + rm -f "$pkgdir/usr/bin"/* + + echo "==> Mesa ${version} (32-bit) installed with LLVM and AMD RDNA 4 gaming support" +} + +files() { + # Find all installed 32-bit library files + if [ -d ./usr/lib ]; then + find ./usr/lib -type f -printf '%p\n' + find ./usr/lib -type l -printf '%p\n' + fi + + if [ -d ./usr/share/licenses ]; then + find ./usr/share/licenses -type f -printf '%p\n' + fi +} diff --git a/libdrm/alr.sh b/libdrm/alr.sh new file mode 100644 index 0000000..58c635d --- /dev/null +++ b/libdrm/alr.sh @@ -0,0 +1,110 @@ +name='libdrm' +version='2.4.128' +release='2' +desc='Userspace library for kernel DRM services' +desc_ru='Библиотека пользовательского пространства для служб DRM ядра' +homepage='https://dri.freedesktop.org/' +maintainer='Evgeniy Khramov ' +maintainer_ru='Евгений Храмов ' +license='MIT' +architectures=('amd64') +min_alr_version='v0.0.14' + +# Runtime dependencies +deps=( + 'libpciaccess' +) + +deps_redos=( + 'libpciaccess' +) + +# Build dependencies +build_deps=( + 'meson' + 'ninja-build' + 'gcc' + 'libpciaccess-devel' + 'systemd-devel' + 'python3' +) + +build_deps_redos=("${build_deps[@]}") + +# Provides - заменяет системную libdrm +provides=( + 'libdrm' + 'libdrm(x86-64)' + 'libdrm.so.2()(64bit)' + 'libdrm_amdgpu.so.1()(64bit)' + 'libdrm_intel.so.1()(64bit)' + 'libdrm_nouveau.so.2()(64bit)' + 'libdrm_radeon.so.1()(64bit)' + 'libdrm-devel' + 'libdrm-devel(x86-64)' + 'pkgconfig(libdrm)' + 'pkgconfig(libdrm_amdgpu)' + 'pkgconfig(libdrm_intel)' + 'pkgconfig(libdrm_nouveau)' + 'pkgconfig(libdrm_radeon)' +) + +conflicts=( + 'libdrm(x86-64) < 2.4.128' + 'libdrm-devel(x86-64) < 2.4.128' +) + +_pkgver="${version}" + +sources=("https://dri.freedesktop.org/libdrm/libdrm-${_pkgver}.tar.xz") +checksums=('SKIP') + +prepare() { + cd "$srcdir/libdrm-${_pkgver}" + echo "==> Preparing libdrm ${version}..." +} + +build() { + cd "$srcdir/libdrm-${_pkgver}" + + echo "==> Configuring libdrm with Meson..." + meson setup builddir \ + --prefix=/usr \ + --libdir=lib64 \ + --buildtype=release \ + -Dudev=true \ + -Dvalgrind=disabled \ + -Dcairo-tests=disabled \ + -Dintel=enabled \ + -Dradeon=enabled \ + -Damdgpu=enabled \ + -Dnouveau=enabled \ + -Dvmwgfx=enabled \ + -Domap=disabled \ + -Dexynos=disabled \ + -Dfreedreno=disabled \ + -Dtegra=disabled \ + -Dvc4=disabled \ + -Detnaviv=disabled \ + -Dinstall-test-programs=false + + echo "==> Building libdrm..." + meson compile -C builddir -j$(nproc) +} + +package() { + cd "$srcdir/libdrm-${_pkgver}" + + echo "==> Installing libdrm..." + DESTDIR="$pkgdir" meson install -C builddir --no-rebuild + + # Install license + install -Dm644 README.rst "$pkgdir/usr/share/licenses/$name/README.rst" + + echo "==> libdrm ${version} installed" +} + +files() { + # Find all installed files + find "$pkgdir" -type f -o -type l | sed "s|^$pkgdir||" | sort +} diff --git a/mesa/alr.sh b/mesa/alr.sh new file mode 100644 index 0000000..6204286 --- /dev/null +++ b/mesa/alr.sh @@ -0,0 +1,236 @@ +name='mesa' +version='25.2.6' +release='6' +epoch='1' +desc='Open-source OpenGL and Vulkan drivers with AMD RDNA 4 (RX 9070 XT) support' +desc_ru='OpenGL и Vulkan драйверы с открытым исходным кодом с поддержкой AMD RDNA 4 (RX 9070 XT)' +homepage='https://www.mesa3d.org/' +maintainer='Evgeniy Khramov ' +maintainer_ru='Евгений Храмов ' +architectures=('amd64') +license=('MIT' 'BSD-3-Clause' 'SGI-B-2.0') +provides=( + 'mesa' + 'mesa-dri-drivers' + 'mesa-dri-drivers(x86-64)' + 'mesa-vulkan-drivers' + 'mesa-vulkan-drivers(x86-64)' + 'mesa-va-drivers' + 'mesa-va-drivers(x86-64)' + 'mesa-vdpau-drivers' + 'mesa-vdpau-drivers(x86-64)' + 'mesa-libgbm' + 'mesa-libgbm(x86-64)' + 'mesa-libEGL' + 'mesa-libEGL(x86-64)' + 'mesa-libGL' + 'mesa-libGL(x86-64)' + 'mesa-libGLES' + 'mesa-libGLES(x86-64)' + 'vulkan-radeon' + 'libva-mesa-driver' + 'opengl-driver' + 'vulkan-driver' + 'libdril_dri.so()(64bit)' + 'libEGL_mesa.so.0()(64bit)' + 'libGLX_mesa.so.0()(64bit)' + 'libVkLayer_MESA_device_select.so()(64bit)' + 'libvulkan_lvp.so()(64bit)' + 'libvulkan_radeon.so()(64bit)' + 'libgbm.so.1()(64bit)' + 'libGLESv1_CM.so.1()(64bit)' + 'libGLESv2.so.2()(64bit)' +) +conflicts=( + 'mesa(x86-64) < 25.2.6' + 'mesa-dri-drivers(x86-64) < 25.2.6' + 'mesa-vulkan-drivers(x86-64) < 25.2.6' + 'mesa-va-drivers(x86-64) < 25.2.6' + 'mesa-vdpau-drivers(x86-64) < 25.2.6' + 'mesa-libgbm(x86-64) < 25.2.6' + 'mesa-libEGL(x86-64) < 25.2.6' + 'mesa-libGL(x86-64) < 25.2.6' + 'mesa-libGLES(x86-64) < 25.2.6' +) + +# Базовые зависимости +deps=( + 'expat' + 'libdrm' + 'libelf' + 'libglvnd' + 'libx11' + 'libxcb' + 'libxext' + 'libxshmfence' + 'libxxf86vm' + 'llvm18-libs' + 'lm_sensors' + 'libwayland-client' + 'libwayland-server' + 'zlib' + 'zstd' + 'vulkan-icd-loader' +) + +# Зависимости для RedOS +deps_redos=( + 'expat' + 'libdrm' + 'elfutils-libelf' + 'libglvnd' + 'libglvnd-gles' + 'libX11' + 'libxcb' + 'libXext' + 'libxshmfence' + 'libXxf86vm' + 'llvm18-libs' + 'lm_sensors-libs' + 'libwayland-client' + 'libwayland-server' + 'zlib' + 'zstd' + 'vulkan-loader' +) + +# Зависимости для сборки +build_deps=( + 'gcc' + 'clang' + 'meson' + 'ninja-build' + 'cmake' + 'python3' + 'python3-mako' + 'python3-packaging' + 'python3-pyyaml' + 'bison' + 'flex' + 'llvm18' + 'llvm18-devel' + 'clang-devel' + 'rust' + 'rust-bindgen-devel' + 'cbindgen' + 'glslang-devel' + 'spirv-tools-devel' + 'libdrm-devel' + 'libxcb-devel' + 'libX11-devel' + 'libXext-devel' + 'libXxf86vm-devel' + 'libXfixes-devel' + 'libXdamage-devel' + 'libxshmfence-devel' + 'libXrandr-devel' + 'elfutils-libelf-devel' + 'libglvnd-devel' + 'wayland-devel' + 'wayland-protocols-devel' + 'libva-devel' + 'libvdpau-devel' + 'expat-devel' + 'libxml2-devel' + 'libzstd-devel' + 'lm_sensors-devel' + 'systemd-devel' + 'libpng-devel' + 'vulkan-headers' + 'vulkan-loader-devel' +) + +build_deps_redos=("${build_deps[@]}") + +_pkgver="${version}" + +sources=("https://archive.mesa3d.org/mesa-${_pkgver}.tar.xz") +checksums=('361c97e8afa5fe20141c5362c5b489040751e12861c186a16c621a2fb182fc42') + +prepare() { + cd "$srcdir/mesa-${_pkgver}" + + # Установка версии для правильной идентификации + echo "${version}-alr${epoch}.${release}" > VERSION + + echo "==> Preparing Mesa ${version} for AMD RDNA 4 (RX 9070 XT) support..." +} + +build() { + cd "$srcdir/mesa-${_pkgver}" + + # Set LLVM 18 paths + export LLVM_CONFIG="/usr/bin/llvm-config-18" + + echo "==> Configuring Mesa with Meson..." + meson setup builddir \ + --prefix=/usr \ + --libdir=lib64 \ + --buildtype=release \ + -Db_ndebug=true \ + -Dplatforms=x11,wayland \ + -Dgallium-drivers=r300,r600,radeonsi,llvmpipe,softpipe,zink \ + -Dvulkan-drivers=amd,swrast \ + -Dvideo-codecs=all \ + -Dgallium-extra-hud=true \ + -Dgallium-rusticl=false \ + -Dgallium-va=enabled \ + -Dgallium-vdpau=enabled \ + -Dgbm=enabled \ + -Dgles1=disabled \ + -Dgles2=enabled \ + -Dglvnd=enabled \ + -Dglx=dri \ + -Degl=enabled \ + -Dllvm=enabled \ + -Dlmsensors=enabled \ + -Dvalgrind=disabled \ + -Dvulkan-layers=device-select,overlay \ + -Dintel-rt=disabled \ + -Dlibunwind=disabled \ + -Dmicrosoft-clc=disabled + + echo "==> Building Mesa (this may take 15-30 minutes)..." + meson compile -C builddir -j$(($(nproc) - 1)) +} + +package() { + cd "$srcdir/mesa-${_pkgver}" + + echo "==> Installing Mesa..." + DESTDIR="$pkgdir" meson install -C builddir --no-rebuild + + # Install license + install -Dm644 docs/license.rst "$pkgdir/usr/share/licenses/$name/LICENSE" + + echo "==> Mesa ${_pkgver} installed with AMD RDNA 4 support" +} + +files() { + # Find all installed files + if [ -d ./usr/lib64 ]; then + find ./usr/lib64 -type f -printf '%p\n' + find ./usr/lib64 -type l -printf '%p\n' + fi + + if [ -d ./usr/lib ]; then + find ./usr/lib -type f -printf '%p\n' + find ./usr/lib -type l -printf '%p\n' + fi + + if [ -d ./usr/include ]; then + find ./usr/include -type f -printf '%p\n' + fi + + if [ -d ./usr/share ]; then + find ./usr/share -type f -printf '%p\n' + fi + + if [ -d ./usr/bin ]; then + find ./usr/bin -type f -printf '%p\n' + fi + + if [ -d ./etc ]; then + find ./etc -type f -printf '%p\n' + fi +} diff --git a/validate-alr.sh b/validate-alr.sh new file mode 100644 index 0000000..2ff938a --- /dev/null +++ b/validate-alr.sh @@ -0,0 +1,273 @@ +#!/bin/bash + +# Валидатор для alr.sh файлов в репозитории ALR +# Проверяет синтаксис и структуру пакетов + +set -e + +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +NC='\033[0m' # No Color + +# Глобальные счетчики +declare -g errors=0 +declare -g warnings=0 + +# Функция для вывода ошибок +error() { + echo -e "${RED}[ERROR]${NC} $1" + ((errors++)) +} + +# Функция для вывода предупреждений +warning() { + echo -e "${YELLOW}[WARNING]${NC} $1" + ((warnings++)) +} + +# Функция для вывода успешных проверок +success() { + echo -e "${GREEN}[OK]${NC} $1" +} + +# Проверка одного alr.sh файла +check_alr_file() { + local file="$1" + local pkg_dir=$(dirname "$file") + local pkg_name=$(basename "$pkg_dir") + + echo "Проверка пакета: $pkg_name" + + # 1. Проверка синтаксиса bash + if ! bash -n "$file" 2>/dev/null; then + error "$pkg_name: синтаксические ошибки в alr.sh" + return 1 + fi + + # Загружаем файл в изолированной среде для проверки + { + # Определяем заглушки для функций ALR + srcdir="/tmp/alr-validate-src" + pkgdir="/tmp/alr-validate-pkg" + scriptdir="$pkg_dir" + + # Заглушки для функций установки + install() { :; } + install-desktop() { :; } + install-license() { :; } + + # Загружаем файл + source "$file" 2>/dev/null || { + error "$pkg_name: не удалось загрузить alr.sh" + return 1 + } + + # 2. Проверка обязательных полей + local required_fields=(name version release desc maintainer) + for field in "${required_fields[@]}"; do + if [[ -z "${!field}" ]]; then + error "$pkg_name: отсутствует обязательное поле '$field'" + fi + done + + # 3. Проверка формата версии + # Поддерживаемые форматы: + # - стандартный: 1.2.3, 1.0.0-alpha1 + # - git версии: git + # - release префикс: release-1.2.3 + # - версии с r префиксом: r20250906.ff1bee31 + if [[ ! "$version" =~ ^([0-9]+(\.[0-9]+)*([a-zA-Z0-9._-]+)?|git|release-[0-9]+(\.[0-9]+)*([a-zA-Z0-9._-]+)?|r[0-9]{8}\.[a-z0-9]+)$ ]]; then + # Не выводим предупреждения для git пакетов + if [[ ! "$pkg_name" =~ -git$ ]]; then + warning "$pkg_name: необычный формат версии '$version'" + fi + fi + + # 4. Проверка формата release + if [[ ! "$release" =~ ^[0-9]+$ ]]; then + error "$pkg_name: release должен быть числом, получено '$release'" + fi + + # 5. Проверка наличия функций + # Определяем тип пакета: мульти-пакет если name объявлен как массив с несколькими элементами + # Проверяем, объявлен ли name как массив в исходном файле + local is_multipackage=false + if grep -q "^name=(" "$file"; then + # Если в файле есть name=( значит это массив + if [[ "${#name[@]}" -gt 1 ]]; then + is_multipackage=true + fi + fi + + if [[ "$is_multipackage" == true ]]; then + # Мульти-пакет - проверяем функции с префиксами + for subpkg in "${name[@]}"; do + # Проверяем наличие meta функции + if ! declare -F "meta_${subpkg}" >/dev/null 2>&1; then + warning "$pkg_name: отсутствует функция meta_${subpkg}()" + fi + + # Проверяем наличие package функции + if ! declare -F "package_${subpkg}" >/dev/null 2>&1; then + warning "$pkg_name: отсутствует функция package_${subpkg}()" + fi + + # Проверяем наличие files функции + if ! declare -F "files_${subpkg}" >/dev/null 2>&1; then + error "$pkg_name: отсутствует функция files_${subpkg}()" + fi + done + else + # Обычный (моно)пакет - проверяем обычные функции + + # Проверяем наличие функции package() или build() + if ! declare -F package >/dev/null 2>&1; then + if ! declare -F build >/dev/null 2>&1; then + warning "$pkg_name: отсутствуют функции package() и build()" + fi + fi + + # Проверяем наличие функции files() + if ! declare -F files >/dev/null 2>&1; then + error "$pkg_name: отсутствует функция files()" + fi + fi + + # 6. Проверка архитектур + if [[ -n "${architectures[*]}" ]]; then + for arch in "${architectures[@]}"; do + if [[ ! "$arch" =~ ^(amd64|arm64|arm6|386|riscv64|aarch64|all)$ ]]; then + warning "$pkg_name: неизвестная архитектура '$arch'" + fi + done + fi + + # 7. Проверка источников и контрольных сумм + if [[ -n "${sources[*]}" ]]; then + if [[ -z "${checksums[*]}" ]]; then + warning "$pkg_name: sources определены, но checksums отсутствуют" + elif [[ "${#sources[@]}" -ne "${#checksums[@]}" ]]; then + if [[ "${checksums[0]}" != "SKIP" ]]; then + error "$pkg_name: количество sources (${#sources[@]}) не совпадает с checksums (${#checksums[@]})" + fi + fi + fi + + # 8. Проверка, что функции не вызывают явные ошибки + # Создаем временные директории для тестирования + mkdir -p "$srcdir" "$pkgdir" + + # Пробуем выполнить функции в dry-run режиме + if declare -F build >/dev/null 2>&1; then + # Переопределяем команды, которые могут быть опасными + curl() { echo "curl $*" >/dev/null; } + wget() { echo "wget $*" >/dev/null; } + git() { echo "git $*" >/dev/null; } + make() { echo "make $*" >/dev/null; } + cmake() { echo "cmake $*" >/dev/null; } + pip() { echo "pip $*" >/dev/null; } + npm() { echo "npm $*" >/dev/null; } + cargo() { echo "cargo $*" >/dev/null; } + tar() { echo "tar $*" >/dev/null; } + unzip() { echo "unzip $*" >/dev/null; } + cd() { builtin cd "$@" 2>/dev/null || :; } + + export -f curl wget git make cmake pip npm cargo tar unzip cd + + # Пробуем выполнить build в режиме проверки синтаксиса + if ! bash -c "source '$file' && declare -f build | bash -n" 2>/dev/null; then + warning "$pkg_name: синтаксические ошибки в функции build()" + fi + fi + + if declare -F package >/dev/null 2>&1; then + if ! bash -c "source '$file' && declare -f package | bash -n" 2>/dev/null; then + warning "$pkg_name: синтаксические ошибки в функции package()" + fi + fi + + if declare -F files >/dev/null 2>&1; then + if ! bash -c "source '$file' && declare -f files | bash -n" 2>/dev/null; then + warning "$pkg_name: синтаксические ошибки в функции files()" + fi + fi + + # Очистка + rm -rf "$srcdir" "$pkgdir" 2>/dev/null || true + + } 2>/dev/null || true +} + +# Главная функция +main() { + local check_all=false + local files_to_check=() + + # Парсим аргументы + while [[ $# -gt 0 ]]; do + case "$1" in + --all) + check_all=true + shift + ;; + *) + files_to_check+=("$1") + shift + ;; + esac + done + + # Если указан флаг --all, проверяем все alr.sh файлы + if [[ "$check_all" == true ]]; then + echo "Проверка всех alr.sh файлов в репозитории..." + while IFS= read -r file; do + check_alr_file "$file" + echo "---" + done < <(find . -name "alr.sh" -type f | grep -v "^\./\." | sort) + else + # Проверяем только указанные файлы или измененные в git + if [[ ${#files_to_check[@]} -eq 0 ]]; then + # Получаем список измененных alr.sh файлов из git + while IFS= read -r file; do + if [[ -f "$file" ]] && [[ "$(basename "$file")" == "alr.sh" ]]; then + files_to_check+=("$file") + fi + done < <(git diff --cached --name-only) + fi + + if [[ ${#files_to_check[@]} -eq 0 ]]; then + echo "Нет alr.sh файлов для проверки" + exit 0 + fi + + for file in "${files_to_check[@]}"; do + if [[ -f "$file" ]]; then + check_alr_file "$file" + echo "---" + fi + done + fi + + # Итоговая статистика + echo "" + if [[ $errors -gt 0 ]]; then + echo -e "${RED}Найдено ошибок: $errors${NC}" + fi + if [[ $warnings -gt 0 ]]; then + echo -e "${YELLOW}Найдено предупреждений: $warnings${NC}" + fi + + if [[ $errors -gt 0 ]]; then + echo -e "${RED}Проверка не пройдена!${NC}" + exit 1 + elif [[ $warnings -gt 0 ]]; then + echo -e "${YELLOW}Проверка пройдена с предупреждениями${NC}" + exit 0 + else + echo -e "${GREEN}Все проверки пройдены успешно!${NC}" + exit 0 + fi +} + +main "$@" \ No newline at end of file