Nothin' but Slackware

バイクとLinuxに戯れる日々

2021年04月

xscreensaver GL-Text on slackware64-current

まさしく、ただのメモ書き(忘れないように)

いつの頃から不明だがつ上使用している xscreensaver (GL-Text)の表示が
デフォルトでシステム情報表示になっていて、個人的に好みではないことから修正。

{HOME]/.xscreensaver ファイルの該当行を以下のように修正。

GL:                 gltext -root -text "`cat /etc/slackware-version && uname -r -o`"        \n\

NVIDIA Legacy (390.141)用 linux-5.12.patch

テスト用PC の NVIDIA GPU が NVIDIA ドライバ・バージョン 390.141 までしか
サポートされていないため、祭祀カーネル linux-5.12.0 でコンパイルするためには
パッチをあてる必要がある。

必要なパッチと使い方のメモ:

                ・ linux-5.11.patch
                ・ linux-5.12.patch
     両方必要。

patchのあて方とインストール手順:
Step-1) Extract NVIDIA driver
        # sh NVIDIA-Linux-x86_64-390.141.run --extract-only

Step-2) Apply patches (linux-5.11.patch, linux-5.12.patc)
        # cd NVIDIA-Linux-x86_64-390.141
        # patch -p1 < {PATH_TO]/linux-5.11.patch
        # patch -p1 < [PATH_TO]/linux-5.12.patch


Step-3) Install
        # ./nvidia-installer

======================
<CODE> linux-5.11.patch
diff --git a/kernel/common/inc/nv-linux.h b/kernel/common/inc/nv-linux.h
index 0d7e516..dae9c09 100644
--- a/kernel/common/inc/nv-linux.h
+++ b/kernel/common/inc/nv-linux.h
@@ -115,7 +115,9 @@

 #include <linux/moduleparam.h>      /* module_param()                   */
 #include <asm/tlbflush.h>           /* flush_tlb(), flush_tlb_all()     */
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 11, 0))
 #include <asm/kmap_types.h>         /* page table entry lookup          */
+#endif

 #include <linux/pci.h>              /* pci_find_class, etc              */
 #include <linux/interrupt.h>        /* tasklets, interrupt helpers      */
diff --git a/kernel/conftest.sh b/kernel/conftest.sh
index 23aca36..cc9543b 100755
--- a/kernel/conftest.sh
+++ b/kernel/conftest.sh
@@ -1729,6 +1729,8 @@ compile_test() {
             # Determine if the DRM subsystem is usable
             #
             CODE="
+            #include <linux/version.h>
+
             #if defined(NV_DRM_DRMP_H_PRESENT)
             #include <drm/drmP.h>
             #endif
@@ -1737,6 +1739,10 @@ compile_test() {
             #include <drm/drm_drv.h>
             #endif

+            #if defined(NV_DRM_DRM_GEM_H_PRESENT)
+            #include <drm/drm_gem.h>
+            #endif
+
             #if defined(NV_DRM_DRM_PRIME_H_PRESENT)
             #include <drm/drm_prime.h>
             #endif
@@ -1746,13 +1752,22 @@ compile_test() {
             #endif

             void conftest_drm_available(void) {
-                struct drm_driver drv;

                 /* 2013-01-15 89177644a7b6306e6084a89eab7e290f4bfef397 */
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 11, 0))
+                // Avoid failure due to all the changes in torvalds/linux commit d693def4fd1c23f1ca5aed1afb9993b3a2069ad2
+                struct drm_driver drv;
                 drv.gem_prime_pin = 0;
                 drv.gem_prime_get_sg_table = 0;
                 drv.gem_prime_vmap = 0;
                 drv.gem_prime_vunmap = 0;
+#else
+                struct drm_gem_object_funcs gem;
+                gem.pin = 0;
+                gem.get_sg_table = 0;
+                gem.vmap = 0;
+                gem.vunmap = 0;
+#endif
                 (void)drm_gem_prime_import;
                 (void)drm_gem_prime_export;

diff --git a/kernel/nvidia-drm/nvidia-drm-crtc.c b/kernel/nvidia-drm/nvidia-drm-crtc.c
index 780df0e..35eb1e4 100644
--- a/kernel/nvidia-drm/nvidia-drm-crtc.c
+++ b/kernel/nvidia-drm/nvidia-drm-crtc.c
@@ -20,6 +20,7 @@
  * DEALINGS IN THE SOFTWARE.
  */

+#include <linux/version.h>
 #include "nvidia-drm-conftest.h" /* NV_DRM_ATOMIC_MODESET_AVAILABLE */

 #if defined(NV_DRM_ATOMIC_MODESET_AVAILABLE)
@@ -336,9 +337,19 @@ static int head_modeset_config_attach_connector(
  * the 'nv_drm_crtc_state::req_config', that is fine becase 'nv_drm_crtc_state'
  * will be discarded if ->atomic_check() fails.
  */
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 11, 0))
 static int nv_drm_crtc_atomic_check(struct drm_crtc *crtc,
                                     struct drm_crtc_state *crtc_state)
+#else
+// Changes in torvalds/linux commit d693def4fd1c23f1ca5aed1afb9993b3a2069ad2
+static int nv_drm_crtc_atomic_check(struct drm_crtc *crtc,
+                                    struct drm_atomic_state *atomic_state)
+#endif
 {
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 11, 0))
+    // Changes in torvalds/linux commit d693def4fd1c23f1ca5aed1afb9993b3a2069ad2
+    struct drm_crtc_state *crtc_state = drm_atomic_get_new_crtc_state(atomic_state, crtc);
+#endif
     struct nv_drm_crtc_state *nv_crtc_state = to_nv_crtc_state(crtc_state);
     struct NvKmsKapiHeadRequestedConfig *req_config =
         &nv_crtc_state->req_config;
@@ -408,8 +419,14 @@ static void nv_drm_crtc_disable(struct drm_crtc *crtc)
 }

 #ifdef NV_DRM_CRTC_HELPER_FUNCS_HAS_ATOMIC_ENABLE
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 11, 0))
 static void nv_drm_crtc_atomic_enable(struct drm_crtc *crtc,
                                       struct drm_crtc_state *old_crtc_state)
+#else
+// Changes in torvalds/linux commit d693def4fd1c23f1ca5aed1afb9993b3a2069ad2
+static void nv_drm_crtc_atomic_enable(struct drm_crtc *crtc,
+                                      struct drm_atomic_state *old_atomic_state)
+#endif
 {

 }
diff --git a/kernel/nvidia-drm/nvidia-drm-drv.c b/kernel/nvidia-drm/nvidia-drm-drv.c
index 1b4cc6d..0c26646 100644
--- a/kernel/nvidia-drm/nvidia-drm-drv.c
+++ b/kernel/nvidia-drm/nvidia-drm-drv.c
@@ -20,6 +20,7 @@
  * DEALINGS IN THE SOFTWARE.
  */

+#include <linux/version.h>
 #include "nvidia-drm-conftest.h" /* NV_DRM_AVAILABLE and NV_DRM_DRM_GEM_H_PRESENT */

 #include "nvidia-drm-priv.h"
@@ -700,10 +701,13 @@ static struct drm_driver nv_drm_driver = {
     .num_ioctls             = ARRAY_SIZE(nv_drm_ioctls),

     .prime_handle_to_fd     = drm_gem_prime_handle_to_fd,
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 11, 0))
+    // Deprecated in favour of equivalent in drm_get_object in torvalds/linux commit d693def4fd1c23f1ca5aed1afb9993b3a2069ad2
     .gem_prime_export       = nv_drm_gem_prime_export,
     .gem_prime_get_sg_table = nv_drm_gem_prime_get_sg_table,
     .gem_prime_vmap         = nv_drm_gem_prime_vmap,
     .gem_prime_vunmap       = nv_drm_gem_prime_vunmap,
+#endif

 #if defined(NV_DRM_DRIVER_HAS_GEM_PRIME_RES_OBJ)
     .gem_prime_res_obj      = nv_drm_gem_prime_res_obj,
@@ -727,11 +731,14 @@ static struct drm_driver nv_drm_driver = {
     .desc                   = "NVIDIA DRM driver",
     .date                   = "20160202",

+#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 11, 0))
+    // This is now behind a CONFIG_DRM_LEGACY Kconfig flag.(torvalds/linux commit 57bb1ee6034046be70aed33fd6d447bb2b7261fa)
 #if defined(NV_DRM_DRIVER_HAS_LEGACY_DEV_LIST)
     .legacy_dev_list        = LIST_HEAD_INIT(nv_drm_driver.legacy_dev_list),
 #else
     .device_list            = LIST_HEAD_INIT(nv_drm_driver.device_list),
 #endif
+#endif
 };


@@ -758,8 +765,6 @@ static void nv_drm_update_drm_driver_features(void)
     nv_drm_driver.dumb_create      = nv_drm_dumb_create;
     nv_drm_driver.dumb_map_offset  = nv_drm_dumb_map_offset;
     nv_drm_driver.dumb_destroy     = drm_gem_dumb_destroy;
-
-    nv_drm_driver.gem_vm_ops       = &nv_drm_gem_vma_ops;
 #endif /* NV_DRM_ATOMIC_MODESET_AVAILABLE */
 }

diff --git a/kernel/nvidia-drm/nvidia-drm-gem-user-memory.c b/kernel/nvidia-drm/nvidia-drm-gem-user-memory.c
index 4ac4559..28ef84c 100644
--- a/kernel/nvidia-drm/nvidia-drm-gem-user-memory.c
+++ b/kernel/nvidia-drm/nvidia-drm-gem-user-memory.c
@@ -20,6 +20,7 @@
  * DEALINGS IN THE SOFTWARE.
  */

+#include <linux/version.h>
 #include "nvidia-drm-conftest.h"

 #if defined(NV_DRM_AVAILABLE)
@@ -32,6 +33,8 @@
 #include "nvidia-drm-helper.h"
 #include "nvidia-drm-ioctl.h"

+#include "linux/dma-buf.h"
+
 static inline
 void __nv_drm_gem_user_memory_free(struct nv_drm_gem_object *nv_gem)
 {
@@ -54,6 +57,7 @@ static struct sg_table *__nv_drm_gem_user_memory_prime_get_sg_table(
                                     nv_user_memory->pages_count);
 }

+#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 11, 0))
 static void *__nv_drm_gem_user_memory_prime_vmap(
     struct nv_drm_gem_object *nv_gem)
 {
@@ -69,6 +73,28 @@ static void __nv_drm_gem_user_memory_prime_vunmap(
 {
     nv_drm_vunmap(address);
 }
+#else
+// Updated vmap/vunmap operations to use struct dma_buf_map instead of raw pointers
+// See torvalds/linux commits ccc22d41bd9acec58cdc7c3b012e1887aba40af4, 6619ccf1bb1d0ebb071f758111efa83918b216fc
+static int __nv_drm_gem_user_memory_prime_vmap(
+    struct nv_drm_gem_object *nv_gem,
+    struct dma_buf_map *map)
+{
+    struct nv_drm_gem_user_memory *nv_user_memory = to_nv_user_memory(nv_gem);
+
+    map->vaddr = nv_drm_vmap(nv_user_memory->pages,
+                           nv_user_memory->pages_count);
+    map->is_iomem = false;
+    return 0;
+}
+
+static void __nv_drm_gem_user_memory_prime_vunmap(
+    struct nv_drm_gem_object *gem,
+    struct dma_buf_map *map)
+{
+    nv_drm_vunmap(map->vaddr);
+}
+#endif

 static struct nv_drm_gem_object_funcs __nv_gem_user_memory_ops = {
     .free = __nv_drm_gem_user_memory_free,
diff --git a/kernel/nvidia-drm/nvidia-drm-gem.c b/kernel/nvidia-drm/nvidia-drm-gem.c
index 4ab8b36..9556993 100644
--- a/kernel/nvidia-drm/nvidia-drm-gem.c
+++ b/kernel/nvidia-drm/nvidia-drm-gem.c
@@ -20,6 +20,7 @@
  * DEALINGS IN THE SOFTWARE.
  */

+#include <linux/version.h>
 #include "nvidia-drm-conftest.h"

 #if defined(NV_DRM_AVAILABLE)
@@ -29,6 +30,7 @@
 #include "nvidia-drm-prime-fence.h"
 #include "nvidia-drm-gem.h"
 #include "nvidia-dma-resv-helper.h"
+#include "nvidia-drm-gem-nvkms-memory.h"

 #if defined(NV_DRM_DRM_PRIME_H_PRESENT)
 #include <drm/drm_prime.h>
@@ -56,6 +58,13 @@ void nv_drm_gem_free(struct drm_gem_object *gem)
 static struct drm_gem_object_funcs nv_drm_gem_funcs = {
     .free = nv_drm_gem_free,
     .get_sg_table = nv_drm_gem_prime_get_sg_table,
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 11, 0))
+    // New functions moved from drm_driver because of torvalds/linux commit d693def4fd1c23f1ca5aed1afb9993b3a2069ad2
+    .export       = drm_gem_prime_export,
+    .vmap         = nv_drm_gem_prime_vmap,
+    .vunmap       = nv_drm_gem_prime_vunmap,
+    .vm_ops       = &nv_drm_gem_vma_ops,
+#endif
 };
 #endif

@@ -124,6 +133,7 @@ struct sg_table *nv_drm_gem_prime_get_sg_table(struct drm_gem_object *gem)
     return ERR_PTR(-ENOTSUPP);
 }

+#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 11, 0))
 void *nv_drm_gem_prime_vmap(struct drm_gem_object *gem)
 {
     struct nv_drm_gem_object *nv_gem = to_nv_gem_object(gem);
@@ -143,6 +153,29 @@ void nv_drm_gem_prime_vunmap(struct drm_gem_object *gem, void *address)
         nv_gem->ops->prime_vunmap(nv_gem, address);
     }
 }
+#else
+// Updated vmap/vunmap operations to use struct dma_buf_map instead of raw pointers
+// See torvalds/linux commits ccc22d41bd9acec58cdc7c3b012e1887aba40af4, 6619ccf1bb1d0ebb071f758111efa83918b216fc
+int nv_drm_gem_prime_vmap(struct drm_gem_object *gem, struct dma_buf_map *map)
+{
+    struct nv_drm_gem_object *nv_gem = to_nv_gem_object(gem);
+
+    if (nv_gem->ops->prime_vmap != NULL) {
+        return nv_gem->ops->prime_vmap(nv_gem, map);
+    }
+
+    return -ENOTSUPP;
+}
+
+void nv_drm_gem_prime_vunmap(struct drm_gem_object *gem, struct dma_buf_map *map)
+{
+    struct nv_drm_gem_object *nv_gem = to_nv_gem_object(gem);
+
+    if (nv_gem->ops->prime_vunmap != NULL) {
+        nv_gem->ops->prime_vunmap(nv_gem, map);
+    }
+}
+#endif

 #if defined(NV_DRM_DRIVER_HAS_GEM_PRIME_RES_OBJ)
 nv_dma_resv_t* nv_drm_gem_prime_res_obj(struct drm_gem_object *obj)
diff --git a/kernel/nvidia-drm/nvidia-drm-gem.h b/kernel/nvidia-drm/nvidia-drm-gem.h
index fd64b2d..e12fafb 100644
--- a/kernel/nvidia-drm/nvidia-drm-gem.h
+++ b/kernel/nvidia-drm/nvidia-drm-gem.h
@@ -23,6 +23,7 @@
 #ifndef __NVIDIA_DRM_GEM_H__
 #define __NVIDIA_DRM_GEM_H__

+#include <linux/version.h>
 #include "nvidia-drm-conftest.h"

 #if defined(NV_DRM_AVAILABLE)
@@ -44,13 +45,22 @@
 #include "nvidia-dma-resv-helper.h"
 #endif

+#include "linux/dma-buf.h"
+
 struct nv_drm_gem_object;

 struct nv_drm_gem_object_funcs {
     void (*free)(struct nv_drm_gem_object *nv_gem);
     struct sg_table *(*prime_get_sg_table)(struct nv_drm_gem_object *nv_gem);
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 11, 0))
     void *(*prime_vmap)(struct nv_drm_gem_object *nv_gem);
     void (*prime_vunmap)(struct nv_drm_gem_object *nv_gem, void *address);
+#else
+    // Updated vmap/vunmap operations to use struct dma_buf_map instead of raw pointers
+    // See torvalds/linux commits ccc22d41bd9acec58cdc7c3b012e1887aba40af4, 6619ccf1bb1d0ebb071f758111efa83918b216fc
+    int (*prime_vmap)(struct nv_drm_gem_object *nv_gem, struct dma_buf_map *map);
+    void (*prime_vunmap)(struct nv_drm_gem_object *nv_gem, struct dma_buf_map *map);
+#endif
 };

 struct nv_drm_gem_object {
@@ -185,9 +195,17 @@ void nv_drm_gem_object_init(struct nv_drm_device *nv_dev,

 struct sg_table *nv_drm_gem_prime_get_sg_table(struct drm_gem_object *gem);

+#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 11, 0))
 void *nv_drm_gem_prime_vmap(struct drm_gem_object *gem);

 void nv_drm_gem_prime_vunmap(struct drm_gem_object *gem, void *address);
+#else
+// Updated vmap/vunmap operations to use struct dma_buf_map instead of raw pointers
+// See torvalds/linux commits ccc22d41bd9acec58cdc7c3b012e1887aba40af4, 6619ccf1bb1d0ebb071f758111efa83918b216fc
+int nv_drm_gem_prime_vmap(struct drm_gem_object *gem, struct dma_buf_map *map);
+
+void nv_drm_gem_prime_vunmap(struct drm_gem_object *gem, struct dma_buf_map *map);
+#endif

 #if defined(NV_DRM_DRIVER_HAS_GEM_PRIME_RES_OBJ)
 nv_dma_resv_t* nv_drm_gem_prime_res_obj(struct drm_gem_object *obj);


<CODE> linux-5.12.patch
Index: NVIDIA-Linux-x86_64-390.141-no-compat32/kernel/nvidia-drm/nvidia-drm-drv.c
===================================================================
--- NVIDIA-Linux-x86_64-390.141-no-compat32.orig/kernel/nvidia-drm/nvidia-drm-drv.c
+++ NVIDIA-Linux-x86_64-390.141-no-compat32/kernel/nvidia-drm/nvidia-drm-drv.c
@@ -741,6 +741,17 @@ static struct drm_driver nv_drm_driver =
 #endif
 };
 
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 12, 0)
+/* Starting with kernel 5.12, drm_gem_dumb_destroy() is no longer exported.
+ * For that reason, we need to supply a replacement version.
+ */
+int replace_dumb_destroy(struct drm_file *file,
+             struct drm_device *dev,
+             u32 handle)
+{
+    return drm_gem_handle_delete(file, handle);
+}
+#endif
 
 /*
  * Update the global nv_drm_driver for the intended features.
@@ -764,7 +775,11 @@ static void nv_drm_update_drm_driver_fea
 
     nv_drm_driver.dumb_create      = nv_drm_dumb_create;
     nv_drm_driver.dumb_map_offset  = nv_drm_dumb_map_offset;
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 12, 0)
     nv_drm_driver.dumb_destroy     = drm_gem_dumb_destroy;
+#else
+    nv_drm_driver.dumb_destroy     = replace_dumb_destroy;
+#endif
 #endif /* NV_DRM_ATOMIC_MODESET_AVAILABLE */
 }
 

libjpeg-turbo with static-lib

忘れないようにメモ:

何だったか忘れたが(笑)、何かの自前ビルドしたアプリケーションの要求から
libjpeg-turbostatic library が必要になり、slackware64オフィシャルのSlackBuildに
追加オプション "-DENABLE_STATIC=ON" を付加してコンパイル&インストールしている。

※ slackpkg upgrade-all 時に上書きされないように /etc/slackpkg/blacklist に以下を記入する
 # sub-version に jw がある自前パッケージを blacklist化
 [0-9]+jw 

*** libjpeg-turbo with static-lib SlackBuild ***
#!/bin/bash

# Copyright 2015, 2016, 2018  Patrick J. Volkerding, Sebeka, Minnesota, USA
# All rights reserved.
#
# Redistribution and use of this script, with or without modification, is
# permitted provided that the following conditions are met:
#
# 1. Redistributions of this script must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
#
#  THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
#  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
#  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO
#  EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
#  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
#  OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
#  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
#  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
#  ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

cd $(dirname $0) ; CWD=$(pwd)

PKGNAM=libjpeg-turbo
VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z | rev | cut -f 3- -d . | cut -f 1 -d - | rev)}
BUILD=${BUILD:-1jw}

# Automatically determine the architecture we're building on:
if [ -z "$ARCH" ]; then
  case "$(uname -m)" in
    i?86) ARCH=i586 ;;
    arm*) readelf /usr/bin/file -A | egrep -q "Tag_CPU.*[4,5]" && ARCH=arm || ARCH=armv7hl ;;
    # Unless $ARCH is already set, use uname -m for all other archs:
    *) ARCH=$(uname -m) ;;
  esac
  export ARCH
fi

# If the variable PRINT_PACKAGE_NAME is set, then this script will report what
# the name of the created package would be, and then exit. This information
# could be useful to other scripts.
if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
  echo "$PKGNAM-$VERSION-$ARCH-$BUILD.txz"
  exit 0
fi

NUMJOBS=${NUMJOBS:-" -j$(expr $(nproc) + 1) "}

if [ "$ARCH" = "i386" ]; then
  SLKCFLAGS="-O2 -march=i386 -mcpu=i686"
  LIBDIRSUFFIX=""
elif [ "$ARCH" = "i486" ]; then
  SLKCFLAGS="-O2 -march=i486 -mtune=i686"
  LIBDIRSUFFIX=""
elif [ "$ARCH" = "i586" ]; then
  SLKCFLAGS="-O2 -march=i586 -mtune=i686"
  LIBDIRSUFFIX=""
elif [ "$ARCH" = "i686" ]; then
  SLKCFLAGS="-O2 -march=i686"
  LIBDIRSUFFIX=""
elif [ "$ARCH" = "s390" ]; then
  SLKCFLAGS="-O2"
  LIBDIRSUFFIX=""
elif [ "$ARCH" = "x86_64" ]; then
  SLKCFLAGS="-O2 -fPIC"
  LIBDIRSUFFIX="64"
elif [ "$ARCH" = "armv7hl" ]; then
  SLKCFLAGS="-O3 -march=armv7-a -mfpu=vfpv3-d16"
  LIBDIRSUFFIX=""
else
  SLKCFLAGS="-O2"
  LIBDIRSUFFIX=""
fi

TMP=${TMP:-/tmp}
PKG=$TMP/package-$PKGNAM

rm -rf $PKG
mkdir -p $TMP $PKG

cd $TMP
rm -rf $PKGNAM-$VERSION
tar xvf $CWD/$PKGNAM-$VERSION.tar.?z || exit 1
cd $PKGNAM-$VERSION || exit 1

chown -R root:root .
find . \
  \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \
  -exec chmod 755 {} \; -o \
  \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
  -exec chmod 644 {} \;

# Configure, build, and install:
mkdir build
cd build
  cmake \
    -DCMAKE_C_FLAGS="$SLKCFLAGS" \
    -DCMAKE_CXX_FLAGS="$SLKCFLAGS" \
    -DCMAKE_INSTALL_PREFIX=/usr \
    -DLIB_SUFFIX="$LIBDIRSUFFIX" \
    -DCMAKE_INSTALL_DOCDIR=/usr/doc/libjpeg-turbo-${VERSION} \
    -DCMAKE_INSTALL_MANDIR=/usr/man \
    -DENABLE_STATIC=ON \
    .. || exit 1
  make $NUMJOBS || make || exit 1
  make install DESTDIR=$PKG || exit 1
cd ..

# Don't ship .la files:
rm -f $PKG/{,usr/}lib${LIBDIRSUFFIX}/*.la

# Strip binaries:
( cd $PKG
  find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null
  find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null
)

# Add a documentation directory:
mkdir -p $PKG/usr/doc/${PKGNAM}-$VERSION
cp -a \
  BUILDING.md ChangeLog.md LICENSE.md README* \
  example.c libjpeg.txt structure.txt usage.txt wizard.txt \
  $PKG/usr/doc/${PKGNAM}-$VERSION
chmod 644 $PKG/usr/doc/${PKGNAM}-$VERSION/*

# Compress and if needed symlink the man pages:
if [ -d $PKG/usr/man ]; then
  ( cd $PKG/usr/man
    for manpagedir in $(find . -type d -name "man*") ; do
      ( cd $manpagedir
        for eachpage in $( find . -type l -maxdepth 1) ; do
          ln -s $( readlink $eachpage ).gz $eachpage.gz
          rm $eachpage
        done
        gzip -9 *.?
      )
    done
  )
fi

# If there's a ChangeLog, installing at least part of the recent history
# is useful, but don't let it get totally out of control:
if [ -r ChangeLog.md ]; then
  DOCSDIR=$(echo $PKG/usr/doc/${PKGNAM}-$VERSION)
  cat ChangeLog.md | head -n 1000 > $DOCSDIR/ChangeLog.md
  touch -r ChangeLog.md $DOCSDIR/ChangeLog.md
fi

cp $CWD/${PKGNAM}.SlackBuild $PKG/usr/doc/${PKGNAM}-$VERSION/

mkdir -p $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc

cd $PKG
/sbin/makepkg -l y -c n $TMP/$PKGNAM-$VERSION-$ARCH-$BUILD.txz



Recoll (desktop full-text search tool) for slackware64-current

これまで全文検索ツールとして namazu をコンソールツールとして使ってきた。
namazuでも十分役立っているが、GUIで使用できる namazu並みの全文検索能力のあるツールってないのかな
と思い調べてみたところ recoll が目に止まった次第。
自分が知らなかっただけで前からあったんですね。


SlackBuilds.org にもちゃんとスクリプトがあるが、バージョンが古い。
https://slackbuilds.org/repository/14.2/desktop/recoll/

..で、試しに recoll-1.30.0 を関連パッケージとともにコンパイルして使ってみたところ、
(失礼ながら)予想以上に使えるツールだった。
ざっくりとした感想として
・namazuとほぼ同等の全文検索能力だった
 (テキスト、PS、PDF、LateX、マルチメディアファイル、E-Mail、HTML、MS-Word、Excel、PPT等の全文検索が可能)
・検索結果リストをクリックすれば、プレビューや関連付けしたアプリケーションで開くことが可能
・検索用インデックスをCRONでスケジューリングしてアップデート可能(試してませんが m(_ _)m )
・その他、まだ試していない機能が盛り沢山

ただ、そのとき試した最新バージョンの 1.30.0 ではメニューやポップアップメッセージが日本語表示されず英語表示でした。
ソースを覗いたら、i18nファイルに日本語用ファイルが無い。(中国語、韓国語はあるのに。。。)

ちょっと悔しいので、自分用として日本語化できないものかと思い、i18n英語ソースをベースに日本語訳をしてみた。
試しに数箇所だけ日本語訳してリコンパイルしてみたら、そこだけちゃんと日本語化できていたので、地道にやれば なんとかなりそうだという感触を得た次第。

一通り(というか7〜8割)翻訳して、いちおう日本語メニューらしくなったので、
せっかくだから翻訳ファイルをRecoll upstream に送ったところ、すぐに反応があり
日本語版 i18n (recoll_ja.ts, recoll_ja.qm) がコミットされました。
Recoll開発担当者(jf)によると、「次期バージョンから取り込むよ」とのことで一息ついてたところ、
翌日に日本語メニューサポート有りのバージョン 1.30.1 がリリースされてました。 
開発者(jf)、フットワーク良過ぎ(笑)。

recoll-1.30.1 : https://www.lesbonscomptes.com/recoll/recoll-1.30.1.tar.gz

そんでもって、こっちが
slackwareパッケージ作って日本語メニューがちゃんと表示できてること確認したよ
と感謝の報告したらば 
(jf)「reecollのsklackware用パッケージなんでググっても見つからん。持ってるならどっかにアップしてリンク教えてくれ
ということになり、本家にslackware64-current用の拙作パッケージリンクを載せてもらいました。

Slackware パッケージ: (ここの下の方です)
https://www.lesbonscomptes.com/recoll/pages/download.html

Recoll 本体:
recoll-1.30.1-x86_64-1_jw.txz

Other required packages for slackware64-current:
antiword-0.37-x86_64-1_jw.txz
exiftool-12.23-x86_64-1_jw.txz
mutagen-1.45.1-x86_64-1_jw.txz
unrtf-0.21.10-x86_64-1_jw.txz
untex-1.3-x86_64-1_jw.txz

 
Xfceデスクトップの場合は、アプリケーション -> アクセサリ 以下に Recoll が入る。

recoll-1.30.1_ja-02

mpv-0.33.1 for slackware64-current

mpv-0.33.1 for slackware64-current (2021-04-22)

required : libplacebo-3.120 --- せっかくなので最新版にアップデート

PRGNAM="libplacebo"
VERSION="3.120"
HOMEPAGE="https://code.videolan.org/videolan/libplacebo"
DOWNLOAD="https://code.videolan.org/videolan/libplacebo/-/archive/v3.120/libplacebo-v3.120.tar.gz"
MD5SUM="c1924f7339971a7863d89e4448faaa9d"

mpv-0.33.1 オリジナルソースはコンパイルエラーになるため、Arch情報を参考にさせてもらい、
以下のパッチを作成し適用することでパッケージ作成可能。

mpv-0.33.1_vo_gpu-placebo_fix.patch
--- mpv-0.33.1/video/out/placebo/ra_pl.c 2021-04-06 01:45:41.000000000 +0900
+++ mpv-0.33.1.new/video/out/placebo/ra_pl.c 2021-04-21 23:37:11.084000636 +0900
@@ -22,9 +22,7 @@
     return ra->fns == &ra_fns_pl ? get_gpu(ra) : NULL;
}

-#if PL_API_VER >= 60
static struct pl_timer *get_active_timer(const struct ra *ra);
-#endif

struct ra *ra_create_pl(const struct pl_gpu *gpu, struct mp_log *log)
{
@@ -144,8 +142,14 @@
             .blit_dst = pltex->params.blit_dst,
             .host_mutable = pltex->params.host_writable,
             .downloadable = pltex->params.host_readable,
+#if PL_API_VER >= 103
+            // These don't exist upstream, so just pick something reasonable
+            .src_linear = pltex->params.format->caps & PL_FMT_CAP_LINEAR,
+            .src_repeat = false,
+#else
             .src_linear = pltex->params.sample_mode == PL_TEX_SAMPLE_LINEAR,
             .src_repeat = pltex->params.address_mode == PL_TEX_ADDRESS_REPEAT,
+#endif
         },
         .priv = (void *) pltex,
     };
@@ -157,32 +161,6 @@
                                     const struct ra_tex_params *params)
{
     const struct pl_gpu *gpu = get_gpu(ra);
-
-    // Check size limits
-    bool ok = false;
-    switch (params->dimensions) {
-    case 1:
-        ok = params->w <= gpu->limits.max_tex_1d_dim;
-        break;
-
-    case 2:
-        ok = params->w <= gpu->limits.max_tex_2d_dim &&
-             params->h <= gpu->limits.max_tex_2d_dim;
-        break;
-
-    case 3:
-        ok = params->w <= gpu->limits.max_tex_2d_dim &&
-             params->h <= gpu->limits.max_tex_2d_dim &&
-             params->d <= gpu->limits.max_tex_2d_dim;
-        break;
-    };
-
-    if (!ok) {
-        MP_ERR(ra, "Texture size %dx%dx%d exceeds dimension limits!\n",
-               params->w, params->h, params->d);
-        return NULL;
-    }
-
     const struct pl_tex *pltex = pl_tex_create(gpu, &(struct pl_tex_params) {
         .w = params->w,
         .h = params->dimensions >= 2 ? params->h : 0,
@@ -195,10 +173,12 @@
         .blit_dst = params->blit_dst || params->render_dst,
         .host_writable = params->host_mutable,
         .host_readable = params->downloadable,
+#if PL_API_VER < 103
         .sample_mode = params->src_linear ? PL_TEX_SAMPLE_LINEAR
                                           : PL_TEX_SAMPLE_NEAREST,
         .address_mode = params->src_repeat ? PL_TEX_ADDRESS_REPEAT
                                            : PL_TEX_ADDRESS_CLAMP,
+#endif
         .initial_data = params->initial_data,
     });

@@ -209,6 +189,10 @@
         return NULL;
     }

+    // Keep track of these, so we can correctly bind them later
+    ratex->params.src_repeat = params->src_repeat;
+    ratex->params.src_linear = params->src_linear;
+
     return ratex;
}

@@ -230,9 +214,7 @@
         .buf = params->buf ? params->buf->priv : NULL,
         .buf_offset = params->buf_offset,
         .ptr = (void *) params->src,
-#if PL_API_VER >= 60
         .timer = get_active_timer(ra),
-#endif
     };

     const struct pl_buf *staging = NULL;
@@ -285,9 +267,7 @@
         .tex = tex,
         .ptr = params->dst,
         .stride_w = params->stride / texel_size,
-#if PL_API_VER >= 60
         .timer = get_active_timer(ra),
-#endif
     };

     uint8_t *staging = NULL;
@@ -320,19 +300,7 @@
         [RA_BUF_TYPE_SHARED_MEMORY]  = 0,
     };

-    const struct pl_gpu *gpu = get_gpu(ra);
-    size_t max_size[] = {
-        [PL_BUF_TEX_TRANSFER] = gpu->limits.max_xfer_size,
-        [PL_BUF_UNIFORM]      = gpu->limits.max_ubo_size,
-        [PL_BUF_STORAGE]      = gpu->limits.max_ssbo_size,
-    };
-
-    if (params->size > max_size[buf_type[params->type]]) {
-        MP_ERR(ra, "Buffer size %zu exceeds size limits!\n", params->size);
-        return NULL;
-    }
-
-    const struct pl_buf *plbuf = pl_buf_create(gpu, &(struct pl_buf_params) {
+    const struct pl_buf *plbuf = pl_buf_create(get_gpu(ra), &(struct pl_buf_params) {
         .type = buf_type[params->type],
         .size = params->size,
         .host_mapped = params->host_mapped,
@@ -399,7 +367,18 @@
         pldst.y1 = MPMIN(MPMAX(dst_rc->y1, 0), dst->params.h);
     }

+#if PL_API_VER >= 103
+    pl_tex_blit(get_gpu(ra), &(struct pl_tex_blit_params) {
+        .src = src->priv,
+        .dst = dst->priv,
+        .src_rc = plsrc,
+        .dst_rc = pldst,
+        .sample_mode = src->params.src_linear ? PL_TEX_SAMPLE_LINEAR
+                                              : PL_TEX_SAMPLE_NEAREST,
+    });
+#else
     pl_tex_blit(get_gpu(ra), dst->priv, src->priv, pldst, plsrc);
+#endif
}

static const enum pl_var_type var_type[RA_VARTYPE_COUNT] = {
@@ -627,9 +606,17 @@
             struct pl_desc_binding bind;
             switch (inp->type) {
             case RA_VARTYPE_TEX:
-            case RA_VARTYPE_IMG_W:
-                bind.object = (* (struct ra_tex **) val->data)->priv;
+            case RA_VARTYPE_IMG_W: {
+                struct ra_tex *tex = *((struct ra_tex **) val->data);
+                bind.object = tex->priv;
+#if PL_API_VER >= 103
+                bind.sample_mode = tex->params.src_linear ? PL_TEX_SAMPLE_LINEAR
+                                                          : PL_TEX_SAMPLE_NEAREST;
+                bind.address_mode = tex->params.src_repeat ? PL_TEX_ADDRESS_REPEAT
+                                                           : PL_TEX_ADDRESS_CLAMP;
+#endif
                 break;
+            }
             case RA_VARTYPE_BUF_RO:
             case RA_VARTYPE_BUF_RW:
                 bind.object = (* (struct ra_buf **) val->data)->priv;
@@ -666,8 +653,6 @@
     pl_pass_run(get_gpu(ra), &pl_params);
}

-#if PL_API_VER >= 60
-
struct ra_timer_pl {
     // Because libpplacebo only supports one operation per timer, we need
     // to use multiple pl_timers to sum up multiple passes/transfers
@@ -739,8 +724,6 @@
     return t->timers[t->idx_timers++];
}

-#endif // PL_API_VER >= 60
-
static struct ra_fns ra_fns_pl = {
     .destroy                = destroy_ra_pl,
     .tex_create             = tex_create_pl,
@@ -759,11 +742,9 @@
     .renderpass_create      = renderpass_create_pl,
     .renderpass_destroy     = renderpass_destroy_pl,
     .renderpass_run         = renderpass_run_pl,
-#if PL_API_VER >= 60
     .timer_create           = timer_create_pl,
     .timer_destroy          = timer_destroy_pl,
     .timer_start            = timer_start_pl,
     .timer_stop             = timer_stop_pl,
-#endif
};


MPlayer GUIメニューの日本語版

MPlayer GUIメニューの日本語版です。

Slackware64-current officialのMPlayerは Blue skinによるGUI表示できますが
残念ながら日本語表示はできないので、最新ソースと Blue-multilingual skinを使用して
日本語表示されるようにした。

・MPlayer source : mplayer-export-snapshot 2021-04-18
・Skin : Blue-multilingual-1.13.6
・SlackBuildの $LANGUAGES 指定を LANGUAGES="en,de,es,fr" から LANGUAGES="all" に変更

これだけ。日本語翻訳などは必要なし。

MPlayer-with-Japanese-GUI-menu


参考)
GUIメニューから BluRay再生
 MakeMKV等がインストール済みでBluRay可能な環境になっていれば GUIメニューから
 BluRay disc再生ができる。

 メニュー > 開く > URL 再生
 入力ボックスに br:////dev/sr0 を指定(bluray drive が /dev/sr0 の場合)

mplayer-20210418_play-bluray_from-gui-01

mplayer-20210418_play-bluray_from-gui-02
 ※ この設定は {HOME}/,mplayer/gui.url に保存される。

  $ cat ~/.mplayer/gui.url
     br:////dev/sr0

slackware64-current (2021-04-02)向け MEGAsync, MEGAcmd

MEGAsync-4.4.0.0

クラウドドライブ MEGAのGUIファイル同期ツールの最新バージョン
MNEGA (URL:  https://mega.nz/ )は無料アカウントでも利用可能なクラウドオンラインストレージです。
 無料アカウントでも容量 50GB 利用可能(お試しには十分)
 自分は Pro Lite 400GB を契約して利用中。

 MEGAsync-4.4.0.0-x86_64-1jw を以下にアプロードしました。
    使用するには当然ながらMEGAアカウント登録が必要。
 
    MEGAsync 本体 : MEGAsync-4.4.0.0-x86_64-1jw
    要求パッケージ:

3. MEGAcmd-1.4.0_Linux
 コマンドラインでMEGAとファイル操作できるアプリケーション。
 個人的にはこっちのほうが好み。


使い方の例)
 MEGAsyncの使い方はネット検索すればいろいろ出てきますし、GUI表示される画面を見ても分かると思いますので割愛。
MEGAcmdの使用例は以下のような感じです。
・仮想コンソール起動
・$ mega-cmd で対話形式の表示になります。
mega-cmd_001 ・MEGA CMD > help で使用できるコマンドが表示されます。
mega-cmd_002 ・MEGAにログイン  MEGA CMD > login [登録したメールアドレス] [パスワード] ・ローカルドライブのファイルをアップロードするには put [PATH/TO/アップロードしたいファイル] [MEGAドライブの転送先ディレクトリ] ・MEGAからファイルをダウンロードするには getコマンドを使います。  例えば MEGAドライブに Videosディレクトリがあったとして、そこの test.mp4 ファイルをローカルの  /home/foo/Videos/ にダウンロードする場合、 get Videos/test.mp4 /home/foo/Videos/ ・ログアウトするには logout ・MEGAcmdを終了するには quit MEGAcmdはブラウザを起動しなくてもファイル操作でき、slackware的で個人的には気に入ってます。

slackware64-current (2021-04-02)向け fcitx-mozc , MEGAsync, MEGAcmd

--- 編集中 ---

最近いろいろあって全く記事更新、追加してないな。
久しぶりに、備忘録的メモ。

おそらくあまり需要はないと思われるが、以下のパッケージを作成し動作確認できているので公開しまする。

1. fcitx-mozc-2.26.4220.102.1
 SlackBuild.orgにある同パッケージはバージョンが古いので、Archの情報を参考にして
 バージョン 2.26.4220.102.1 を自作。
 ・新元号「令和」に対応済み
  例)「ことし」を変換すると変換候補に「令和三年」とか出てきます。
 ・郵便番号データが最新にアップデートされれてるはず
  例)「100ー0001」-> 変換「東京都千代田区千代


2. MEGAsync-4.4.0.0
 クラウドドライブ MEGAのGUIファイル同期ツールの最新バージョン
 MNEGA (URL:  https://mega.nz/ )は無料アカウントでも利用可能なクラウドオンラインストレージです。
 無料アカウントでも容量 50GB 利用可能(お試しには十分)
 わたしは Pro Lite 400GB を契約して利用してます。

 MEGAsync-4.4.0.0-x86_64-1jw を以下にアプロードしました。
    使用するには当然ながらMEGAアカウント登録が必要です。
 
3. MEGAcmd-1.4.0_Linux
 コマンドラインでMEGAとファイル操作できるアプリケーション。
 個人的にはこっちのほうが好きです。

   使い方の例)
 
ギャラリー
  • deepl-clip.sh で簡単翻訳 [更新:2025-04-29]
  • Avidemux 2.8.2_20250323_7cf15b3
  • Avidemux 2.8.2_20250323_7cf15b3
  • Avidemux 2.8.x with Qt6 GUI
  • Avidemux 2.8.x with Qt6 GUI
  • MEGAcmd-2.0.0_Linux
  • gcolor3 with Japanese menu and LC_MESSAGES
  • avidemux2 TEST package from the latest git source (on jul.23.2024)
  • fcitx5-mozc-2.29.5135.102.1 (15jw) -- Added "merge-ut-dictionaries"