ports/xorg (3.7): [notify] mesa: 23.1.8 -> 23.2.1; new optional dependencies
commit 6cfb6de28e160beb464086e333e7f9984fc3c27e Author: Tim Biermann <tbier@posteo.de> Date: Fri Sep 29 20:36:36 2023 +0200 [notify] mesa: 23.1.8 -> 23.2.1; new optional dependencies This update added and restructured new and existing dependencies! All of these are optional, see README.md Added: - directx-headers (optional) for gallium d3d12 support - libclc spirv-llvm-translator (optional) for gallium clover OpenCL frontend - libclc rust-bindgen spirv-llvm-translator (optional) for gallium rusticl OpenCL frontend - libunwind (optional) for stack-traces - lm_sensors (optional) for HUD lmsensors support Moved: - glslang (now optional), needed for vulkan support diff --git a/mesa/.footprint b/mesa/.footprint index abff3a83..1da15ad6 100644 --- a/mesa/.footprint +++ b/mesa/.footprint @@ -1,6 +1,4 @@ drwxr-xr-x root/root usr/ -drwxr-xr-x root/root usr/bin/ --r-xr-xr-x root/root usr/bin/mesa-overlay-control.py drwxr-xr-x root/root usr/include/ drwxr-xr-x root/root usr/include/EGL/ -rw-r--r-- root/root usr/include/EGL/eglext_angle.h @@ -36,17 +34,12 @@ lrwxrwxrwx root/root usr/lib/libGLX_mesa.so.0 -> libGLX_mesa.so.0.0.0 lrwxrwxrwx root/root usr/lib/libOSMesa.so -> libOSMesa.so.8 lrwxrwxrwx root/root usr/lib/libOSMesa.so.8 -> libOSMesa.so.8.0.0 -rwxr-xr-x root/root usr/lib/libOSMesa.so.8.0.0 --rwxr-xr-x root/root usr/lib/libVkLayer_INTEL_nullhw.so --rwxr-xr-x root/root usr/lib/libVkLayer_MESA_device_select.so --rwxr-xr-x root/root usr/lib/libVkLayer_MESA_overlay.so lrwxrwxrwx root/root usr/lib/libgbm.so -> libgbm.so.1 lrwxrwxrwx root/root usr/lib/libgbm.so.1 -> libgbm.so.1.0.0 -rwxr-xr-x root/root usr/lib/libgbm.so.1.0.0 lrwxrwxrwx root/root usr/lib/libglapi.so -> libglapi.so.0 lrwxrwxrwx root/root usr/lib/libglapi.so.0 -> libglapi.so.0.0.0 -rwxr-xr-x root/root usr/lib/libglapi.so.0.0.0 --rwxr-xr-x root/root usr/lib/libvulkan_intel.so --rwxr-xr-x root/root usr/lib/libvulkan_radeon.so lrwxrwxrwx root/root usr/lib/libxatracker.so -> libxatracker.so.2 lrwxrwxrwx root/root usr/lib/libxatracker.so.2 -> libxatracker.so.2.5.0 -rwxr-xr-x root/root usr/lib/libxatracker.so.2.5.0 @@ -58,16 +51,6 @@ drwxr-xr-x root/root usr/lib/pkgconfig/ drwxr-xr-x root/root usr/share/ drwxr-xr-x root/root usr/share/drirc.d/ -rw-r--r-- root/root usr/share/drirc.d/00-mesa-defaults.conf --rw-r--r-- root/root usr/share/drirc.d/00-radv-defaults.conf drwxr-xr-x root/root usr/share/glvnd/ drwxr-xr-x root/root usr/share/glvnd/egl_vendor.d/ -rw-r--r-- root/root usr/share/glvnd/egl_vendor.d/50_mesa.json -drwxr-xr-x root/root usr/share/vulkan/ -drwxr-xr-x root/root usr/share/vulkan/explicit_layer.d/ --rw-r--r-- root/root usr/share/vulkan/explicit_layer.d/VkLayer_INTEL_nullhw.json --rw-r--r-- root/root usr/share/vulkan/explicit_layer.d/VkLayer_MESA_overlay.json -drwxr-xr-x root/root usr/share/vulkan/icd.d/ --rw-r--r-- root/root usr/share/vulkan/icd.d/intel_icd.x86_64.json --rw-r--r-- root/root usr/share/vulkan/icd.d/radeon_icd.x86_64.json -drwxr-xr-x root/root usr/share/vulkan/implicit_layer.d/ --rw-r--r-- root/root usr/share/vulkan/implicit_layer.d/VkLayer_MESA_device_select.json diff --git a/mesa/.signature b/mesa/.signature index 75fb91ec..1f99af3d 100644 --- a/mesa/.signature +++ b/mesa/.signature @@ -1,5 +1,6 @@ untrusted comment: verify with /etc/ports/xorg.pub -RWTSGWF5Q7TndMZUh6CtS1yMoEogtMQajMu9S9dkm18VhfmV+wUhI7zVlgVRSTCCjcSgJU6O9EBNcqy2DmSPJOn7bzQH3QvGPQY= -SHA256 (Pkgfile) = bb3a938d94e9a807d4cb46464cf215cdf2e123f7a84a8e57a41ea318151ee8bb -SHA256 (.footprint) = 0a096e4a6066d23884d972266fbb66a32fe44c44877cebc2b82d4a9c694ece1e -SHA256 (mesa-23.1.8.tar.xz) = 45434ff91a709844130a3174d9c0ef39c6b50725b2bb0c13e736f36134db14ad +RWTSGWF5Q7TndNu1wro5Rp/Q3d9eriH0b7OG+dHAvMxdlHbKiC4oM+hukQO0JkYggC7mndzaM6eYOmoMv0rf1Q5AlncSf4DMGQ0= +SHA256 (Pkgfile) = 63172d7a4ad6e4fb377464bd7bcd1c21023ab121c55ce6f715a5f327c000f938 +SHA256 (.footprint) = 6924460d44cdb41ff53cb50c2c805ea5a8d2fa2b38127c474fa859b200f82f1c +SHA256 (mesa-23.2.1.tar.xz) = 64de0616fc2d801f929ab1ac2a4f16b3e2783c4309a724c8a259b20df8bbc1cc +SHA256 (U_clover-llvm-move-to-modern-pass-manager.patch) = 9174cd8a44d3841b2614e0386e212b0dfb56a6e26ea69c7c4415f77918d62f5d diff --git a/mesa/Pkgfile b/mesa/Pkgfile index f230ca9a..fe087b77 100644 --- a/mesa/Pkgfile +++ b/mesa/Pkgfile @@ -1,29 +1,34 @@ # Description: Mesa 3D Graphics Library # URL: https://www.mesa3d.org/ # Maintainer: CRUX Xorg Team, xorg-ports at crux dot nu -# Depends on: elfutils glslang libdrm libglvnd llvm python3-mako xorg-libxdamage xorg-libxrandr xorg-libxshmfence xorg-libxvmc xorg-libxxf86vm -# Optional: libva libvdpau wayland-protocols +# Depends on: elfutils libdrm libglvnd llvm python3-mako xorg-libxdamage xorg-libxrandr xorg-libxshmfence xorg-libxvmc xorg-libxxf86vm +# Optional: directx-headers glslang libclc libunwind libva libvdpau lm_sensors rust-bindgen spirv-llvm-translator vulkan-loader wayland-protocols name=mesa -version=23.1.8 -release=2 -source=(https://archive.mesa3d.org/$name-$version.tar.xz) +version=23.2.1 +release=1 +source=(https://archive.mesa3d.org/$name-$version.tar.xz + U_clover-llvm-move-to-modern-pass-manager.patch) build() { - prt-get isinst vulkan-loader && PKGMK_MESA_GALLIUM+='zink,' + prt-get isinst directx-headers && PKGMK_MESA_GALLIUM+='d3d12,' + prt-get isinst libclc spirv-llvm-translator && PKGMK_MESA+=' -D gallium-opencl=icd' + prt-get isinst libclc rust-bindgen spirv-llvm-translator && PKGMK_MESA+=' -D gallium-rusticl=true' + prt-get isinst glslang && PKGMK_MESA+=' -D vulkan-drivers=auto -D vulkan-layers=device-select,intel-nullhw,overlay' || PKGMK_MESA+=' -D vulkan-drivers=' + prt-get isinst libunwind && PKGMK_MESA+=' -D libunwind=enabled' + prt-get isinst libva && PKGMK_MESA+=' -D gallium-va=enabled' || PKGMK_MESA+=' -D gallium-va=disabled' prt-get isinst libvdpau && PKGMK_MESA+=' -D gallium-vdpau=enabled' || PKGMK_MESA+=' -D gallium-vdpau=disabled' + prt-get isinst lm_sensors && PKGMK_MESA+=' -D lmsensors=enabled' + prt-get isinst vulkan-loader && PKGMK_MESA_GALLIUM+='zink,' prt-get isinst wayland-protocols && PKGMK_MESA_PLATFORMS+='wayland' ## for future references #prt-get isinst xorg-libxdamage xorg-libxrandr xorg-libxshmfence xorg-libxvmc xorg-libxxf86vm && PKGMK_MESA_PLATFORMS+=',x11' PKGMK_MESA_PLATFORMS+=',x11' - CFLAGS+=' -mtls-dialect=gnu' - CXXFLAGS+=' -mtls-dialect=gnu' - - sed '/Scalar.h/d;/Utils.h/d' \ - -i mesa-$version/src/gallium/auxiliary/gallivm/lp_bld_init.c + # https://build.opensuse.org/package/show/openSUSE:Factory/Mesa + patch -Np1 -d $name-$version -i $SRC/U_clover-llvm-move-to-modern-pass-manager.patch - meson setup build mesa-$version $PKGMK_MESA \ + meson setup build $name-$version $PKGMK_MESA \ --prefix=/usr \ --sysconfdir=/etc \ --buildtype=plain \ @@ -43,8 +48,6 @@ build() { -D gallium-drivers=${PKGMK_MESA_GALLIUM}crocus,iris,nouveau,r300,r600,radeonsi,svga,swrast,virgl,i915 \ -D platforms=${PKGMK_MESA_PLATFORMS#,} \ -D shared-glapi=enabled \ - -D vulkan-drivers=amd,intel \ - -D vulkan-layers=device-select,intel-nullhw,overlay \ -D video-codecs=vc1dec,h264dec,h264enc,h265dec,h265enc \ -D glvnd=true diff --git a/mesa/README b/mesa/README deleted file mode 100644 index 123e4676..00000000 --- a/mesa/README +++ /dev/null @@ -1,6 +0,0 @@ -Install libva before building mesa to get hardware acceleration for the -following drivers: - -usr/lib/dri/nouveau_drv_video.so -usr/lib/dri/r600_drv_video.so -usr/lib/dri/radeonsi_drv_video.so diff --git a/mesa/README.md b/mesa/README.md new file mode 100644 index 00000000..dc019ac7 --- /dev/null +++ b/mesa/README.md @@ -0,0 +1,139 @@ +mesa options +============ + +Infos copied from various places*, built against current CRUX 3.7 + +*: +- [meson.build · main · Mesa / mesa · GitLab](https://gitlab.freedesktop.org/mesa/mesa/-/blob/main/meson.build?ref_type=he...) +- [meson_options.txt · main · Mesa / mesa · GitLab](https://gitlab.freedesktop.org/mesa/mesa/-/blob/main/meson_options.txt?ref_t...) +- [BLFS: Mesa-23.1.8](https://www.linuxfromscratch.org/blfs/view/svn/x/mesa.html) +- [File Mesa.spec of Package Mesa - openSUSE Build Service](https://build.opensuse.org/package/view_file/openSUSE:Factory/Mesa/Mesa.spec...) + +## directx-headers + +``` +=======> New files found: +NEW -rwxr-xr-x root/root usr/lib/dri/d3d12_dri.so +=======> Building '/home/pkgmk/packages/mesa#23.2.1-1.pkg.tar.xz' succeeded. +``` + +## glslang + +glslang (for vulkan drivers) + +``` +=======> New files found: +NEW drwxr-xr-x root/root usr/bin/ +NEW -r-xr-xr-x root/root usr/bin/mesa-overlay-control.py +NEW -rwxr-xr-x root/root usr/lib/libVkLayer_MESA_overlay.so +NEW -rwxr-xr-x root/root usr/lib/libvulkan_intel.so +NEW -rwxr-xr-x root/root usr/lib/libvulkan_radeon.so +NEW -rw-r--r-- root/root usr/share/drirc.d/00-radv-defaults.conf +NEW -rw-r--r-- root/root usr/share/vulkan/explicit_layer.d/VkLayer_MESA_overlay.json +NEW -rw-r--r-- root/root usr/share/vulkan/icd.d/intel_icd.x86_64.json +NEW -rw-r--r-- root/root usr/share/vulkan/icd.d/radeon_icd.x86_64.json +=======> Building '/home/pkgmk/packages/mesa#23.2.1-1.pkg.tar.xz' succeeded. +``` + +## libclc spirv-llvm-translator + +``` +=======> New files found: +NEW drwxr-xr-x root/root etc/ +NEW drwxr-xr-x root/root etc/OpenCL/ +NEW drwxr-xr-x root/root etc/OpenCL/vendors/ +NEW -rw-r--r-- root/root etc/OpenCL/vendors/mesa.icd +NEW drwxr-xr-x root/root usr/lib/gallium-pipe/ +NEW -rwxr-xr-x root/root usr/lib/gallium-pipe/pipe_crocus.so +NEW -rwxr-xr-x root/root usr/lib/gallium-pipe/pipe_i915.so +NEW -rwxr-xr-x root/root usr/lib/gallium-pipe/pipe_iris.so +NEW -rwxr-xr-x root/root usr/lib/gallium-pipe/pipe_nouveau.so +NEW -rwxr-xr-x root/root usr/lib/gallium-pipe/pipe_r300.so +NEW -rwxr-xr-x root/root usr/lib/gallium-pipe/pipe_r600.so +NEW -rwxr-xr-x root/root usr/lib/gallium-pipe/pipe_radeonsi.so +NEW -rwxr-xr-x root/root usr/lib/gallium-pipe/pipe_swrast.so +NEW -rwxr-xr-x root/root usr/lib/gallium-pipe/pipe_vmwgfx.so +NEW lrwxrwxrwx root/root usr/lib/libMesaOpenCL.so -> libMesaOpenCL.so.1 +NEW lrwxrwxrwx root/root usr/lib/libMesaOpenCL.so.1 -> libMesaOpenCL.so.1.0.0 +NEW -rwxr-xr-x root/root usr/lib/libMesaOpenCL.so.1.0.0 +=======> Building '/home/pkgmk/packages/mesa#23.2.1-1.pkg.tar.xz' succeeded. +``` + +## libclc rust-bindgen spirv-llvm-translator + +``` +=======> New files found: +NEW drwxr-xr-x root/root etc/ +NEW drwxr-xr-x root/root etc/OpenCL/ +NEW drwxr-xr-x root/root etc/OpenCL/vendors/ +NEW -rw-r--r-- root/root etc/OpenCL/vendors/rusticl.icd +NEW lrwxrwxrwx root/root usr/lib/libRusticlOpenCL.so -> libRusticlOpenCL.so.1 +NEW lrwxrwxrwx root/root usr/lib/libRusticlOpenCL.so.1 -> libRusticlOpenCL.so.1.0.0 +NEW -rwxr-xr-x root/root usr/lib/libRusticlOpenCL.so.1.0.0 +=======> Building '/home/pkgmk/packages/mesa#23.2.1-1.pkg.tar.xz' succeeded. +``` + +## libunwind + +[unchanged] + +## libva + +Install libva before building mesa to get hardware acceleration for the +following drivers: + +> libva-2.19.0 (to provide VA-API support for some gallium drivers, note that +> there is a circular dependency. You must build libva first without EGL and +> GLX support, install this package, and rebuild libva) +[BLFS: Mesa-23.1.8](https://www.linuxfromscratch.org/blfs/view/svn/x/mesa.html) + +``` +=======> New files found: +NEW -rwxr-xr-x root/root usr/lib/dri/nouveau_drv_video.so +NEW -rwxr-xr-x root/root usr/lib/dri/r600_drv_video.so +NEW -rwxr-xr-x root/root usr/lib/dri/radeonsi_drv_video.so +NEW -rwxr-xr-x root/root usr/lib/dri/virtio_gpu_drv_video.so +=======> Building '/home/pkgmk/packages/mesa#23.2.1-1.pkg.tar.xz' succeeded. +``` + +## libvdpau + +libvdpau-1.5 (to build VDPAU drivers) + +``` +=======> New files found: +NEW drwxr-xr-x root/root usr/lib/vdpau/ +NEW lrwxrwxrwx root/root usr/lib/vdpau/libvdpau_nouveau.so -> libvdpau_nouveau.so.1.0.0 +NEW lrwxrwxrwx root/root usr/lib/vdpau/libvdpau_nouveau.so.1 -> libvdpau_nouveau.so.1.0.0 +NEW lrwxrwxrwx root/root usr/lib/vdpau/libvdpau_nouveau.so.1.0 -> libvdpau_nouveau.so.1.0.0 +NEW -rwxr-xr-x root/root usr/lib/vdpau/libvdpau_nouveau.so.1.0.0 +NEW lrwxrwxrwx root/root usr/lib/vdpau/libvdpau_r600.so -> libvdpau_r600.so.1.0.0 +NEW lrwxrwxrwx root/root usr/lib/vdpau/libvdpau_r600.so.1 -> libvdpau_r600.so.1.0.0 +NEW lrwxrwxrwx root/root usr/lib/vdpau/libvdpau_r600.so.1.0 -> libvdpau_r600.so.1.0.0 +NEW -rwxr-xr-x root/root usr/lib/vdpau/libvdpau_r600.so.1.0.0 +NEW lrwxrwxrwx root/root usr/lib/vdpau/libvdpau_radeonsi.so -> libvdpau_radeonsi.so.1.0.0 +NEW lrwxrwxrwx root/root usr/lib/vdpau/libvdpau_radeonsi.so.1 -> libvdpau_radeonsi.so.1.0.0 +NEW lrwxrwxrwx root/root usr/lib/vdpau/libvdpau_radeonsi.so.1.0 -> libvdpau_radeonsi.so.1.0.0 +NEW -rwxr-xr-x root/root usr/lib/vdpau/libvdpau_radeonsi.so.1.0.0 +NEW lrwxrwxrwx root/root usr/lib/vdpau/libvdpau_virtio_gpu.so -> libvdpau_virtio_gpu.so.1.0.0 +NEW lrwxrwxrwx root/root usr/lib/vdpau/libvdpau_virtio_gpu.so.1 -> libvdpau_virtio_gpu.so.1.0.0 +NEW lrwxrwxrwx root/root usr/lib/vdpau/libvdpau_virtio_gpu.so.1.0 -> libvdpau_virtio_gpu.so.1.0.0 +NEW -rwxr-xr-x root/root usr/lib/vdpau/libvdpau_virtio_gpu.so.1.0.0 +=======> Building '/home/pkgmk/packages/mesa#23.2.1-1.pkg.tar.xz' succeeded. +``` + +## lm_sensors + +[unchanged] + +## vulkan-loader + +``` +=======> New files found: +NEW -rwxr-xr-x root/root usr/lib/dri/zink_dri.so +=======> Building '/home/pkgmk/packages/mesa#23.2.1-1.pkg.tar.xz' succeeded. +``` + +## wayland-protocols + +[unchanged] diff --git a/mesa/U_clover-llvm-move-to-modern-pass-manager.patch b/mesa/U_clover-llvm-move-to-modern-pass-manager.patch new file mode 100644 index 00000000..7f33ad34 --- /dev/null +++ b/mesa/U_clover-llvm-move-to-modern-pass-manager.patch @@ -0,0 +1,126 @@ +From 2d4fe5f229791fde52846b3f583c12508b5109d6 Mon Sep 17 00:00:00 2001 +From: Dave Airlie <airlied@redhat.com> +Date: Fri, 25 Aug 2023 12:43:44 +1000 +Subject: [PATCH] clover/llvm: move to modern pass manager. +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This seems like it should work, but I haven't tested it yet. + +Tested-by: Dieter Nützel <Dieter@nuetzel-hh.de> +Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24879> +--- + .../frontends/clover/llvm/invocation.cpp | 64 +++++++++++++++---- + 1 file changed, 51 insertions(+), 13 deletions(-) + +diff --git a/src/gallium/frontends/clover/llvm/invocation.cpp b/src/gallium/frontends/clover/llvm/invocation.cpp +index 7a50fea3323..43d26fe1abb 100644 +--- a/src/gallium/frontends/clover/llvm/invocation.cpp ++++ b/src/gallium/frontends/clover/llvm/invocation.cpp +@@ -27,13 +27,17 @@ + #include <llvm/IR/DiagnosticPrinter.h> + #include <llvm/IR/DiagnosticInfo.h> + #include <llvm/IR/LLVMContext.h> ++#include <llvm/IR/Module.h> + #include <llvm/Support/raw_ostream.h> +-#include <llvm/Transforms/IPO/PassManagerBuilder.h> ++#include <llvm/Transforms/IPO/Internalize.h> + #include <llvm-c/Target.h> + #ifdef HAVE_CLOVER_SPIRV + #include <LLVMSPIRVLib/LLVMSPIRVLib.h> + #endif + ++#include <llvm-c/TargetMachine.h> ++#include <llvm-c/Transforms/PassBuilder.h> ++#include <llvm/Support/CBindingWrapping.h> + #include <clang/CodeGen/CodeGenAction.h> + #include <clang/Lex/PreprocessorOptions.h> + #include <clang/Frontend/TextDiagnosticBuffer.h> +@@ -439,10 +443,10 @@ clover::llvm::compile_program(const std::string &source, + + namespace { + void +- optimize(Module &mod, unsigned optimization_level, ++ optimize(Module &mod, ++ const std::string& ir_target, ++ unsigned optimization_level, + bool internalize_symbols) { +- ::llvm::legacy::PassManager pm; +- + // By default, the function internalizer pass will look for a function + // called "main" and then mark all other functions as internal. Marking + // functions as internal enables the optimizer to perform optimizations +@@ -458,19 +462,53 @@ namespace { + if (internalize_symbols) { + std::vector<std::string> names = + map(std::mem_fn(&Function::getName), get_kernels(mod)); +- pm.add(::llvm::createInternalizePass( ++ internalizeModule(mod, + [=](const ::llvm::GlobalValue &gv) { + return std::find(names.begin(), names.end(), + gv.getName()) != names.end(); +- })); ++ }); + } + +- ::llvm::PassManagerBuilder pmb; +- pmb.OptLevel = optimization_level; +- pmb.LibraryInfo = new ::llvm::TargetLibraryInfoImpl( +- ::llvm::Triple(mod.getTargetTriple())); +- pmb.populateModulePassManager(pm); +- pm.run(mod); ++ ++ const char *opt_str = NULL; ++ LLVMCodeGenOptLevel level; ++ switch (optimization_level) { ++ case 0: ++ default: ++ opt_str = "default<O0>"; ++ level = LLVMCodeGenLevelNone; ++ break; ++ case 1: ++ opt_str = "default<O1>"; ++ level = LLVMCodeGenLevelLess; ++ break; ++ case 2: ++ opt_str = "default<O2>"; ++ level = LLVMCodeGenLevelDefault; ++ break; ++ case 3: ++ opt_str = "default<O3>"; ++ level = LLVMCodeGenLevelAggressive; ++ break; ++ } ++ ++ const target &target = ir_target; ++ LLVMTargetRef targ; ++ char *err_message; ++ ++ if (LLVMGetTargetFromTriple(target.triple.c_str(), &targ, &err_message)) ++ return; ++ LLVMTargetMachineRef tm = ++ LLVMCreateTargetMachine(targ, target.triple.c_str(), ++ target.cpu.c_str(), "", level, ++ LLVMRelocDefault, LLVMCodeModelDefault); ++ ++ if (!tm) ++ return; ++ LLVMPassBuilderOptionsRef opts = LLVMCreatePassBuilderOptions(); ++ LLVMRunPasses(wrap(&mod), opt_str, tm, opts); ++ ++ LLVMDisposeTargetMachine(tm); + } + + std::unique_ptr<Module> +@@ -500,7 +538,7 @@ clover::llvm::link_program(const std::vector<binary> &binaries, + auto c = create_compiler_instance(dev, dev.ir_target(), options, r_log); + auto mod = link(*ctx, *c, binaries, r_log); + +- optimize(*mod, c->getCodeGenOpts().OptimizationLevel, !create_library); ++ optimize(*mod, dev.ir_target(), c->getCodeGenOpts().OptimizationLevel, !create_library); + + static std::atomic_uint seq(0); + const std::string id = "." + mod->getModuleIdentifier() + "-" + +-- +2.42.0
participants (1)
-
crux@crux.nu