Linux あれこれ

Linux 関連(一部 Windows11 )の備忘録です。

「Haiku」にて「Notepadqq」の 3つのバージョンアップを実施〈H136-9〉

登録日: 2022-01-22 更新日: 2022-03-02

Haiku にて、Linux アプリをHaiku に移植するときに使われる環境 「Haikuports」を構築 しました。

前回は、テキストエディタの「Notepadqq-1.4.8-3」を最新?の「2.0.0-beta」にアップしましたが、起動が遅くて使い勝手はよくありません。

-

見た目や使える機能は同じですが、エンジンが違うことで問題が少ない「Notepadqq-OTE」の移植にトライしました。その備忘録です。

-

今まで、「Notepadqq」のいくつかのバージョンアップを行ってきました。 見た目は似ていても、アプリの中身は別物です。

使っているエンジンも、依存するパッケージも、ダウンロード元も、パッケージ名の付け方も違いました。 すぐ忘れてしまうので整理して書き直しました。

自己流ですが、Haiku にて他のアプリを移植するときの参考になるかもしれません。

-

-

VirtualBox に「nightly ビルド」の「Haiku R1/beta3」をインストール しました。システムとしては最新です。そこで作業しました。

-

-

使用したPC は「ASUS Chromebox CN60」で、 プロセッサは第4世代の「Intel Celeron 2955U 」です。

-

(注)リンクを戻るときはブラウザの左上の「←」をクリック

-

-


目次

-

Haiku での移植の関連情報 :

「レシピファイルについて」

「パッチファイルについて」

「ローカルで差分を作成」

「git で差分を作成」

「.patchset の正式な形式」

-

「アプリを移植する環境の構築」

-

今回の作業 :

A.「Notepadqq-1.4.8」のレシピファイルとパッチファイル

B.「Notepadqq-2.0.0-beta」のレシピファイルとパッチファイル

C.「Notepadqq-1.4.8-OTE」のレシピファイルとパッチファイル

「Notepadqq-1.4.8.OTE」をビルドしてインストール:

「まとめ へ」

-

「目次詳細 へ」

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - -

-

Haiku R1/beta3」のデスクトップ

-

「nightly ビルド」のデスクトップ画面:

→「nightly ビルド」は開発版になりますが、更新の回数が多いので不具合が解消されている可能性があります。

-

「nightly ビルド」のアイコン:

→立ち上げデバイス(ボリューム)には「てんとう虫」マークが付きます。

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --

-

現在のシステムのバージョン:

-

2022-01-22 現在:

~> uname -v
hrev55792 Jan 22 2022 07:56:01

→「nightly ビルド」は、頻繁に更新されています。

-

時々、デスクトップが表示しきれないことがあるので、

もし、立ち上げで背景色のまま、デスクトップが表示されないときは「ココ 」を参照

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - ---

-

1. 準備作業:

-

1). アプリを移植する環境の構築:

→以前に環境を構築してから時間が経つので、自分の把握していない、いくつかのアプリやライブラリのレシピファイル等が更新されているはずです。

なので、clone する親フォルダをリネームするか、削除して、環境をイチから構築し直します。

個人的には、VirtualBoxHaiku をインストールし直して、構築し直しました。

-

2). 「haikuports」ツリーにて、アプリの場所を確認:

> cd ~/Git/haikuporter/

> haikuporter -o notepadqq
/boot/home/Git/haikuports/app-editors/notepadqq

-

3). レシピファイル名とパッチファイル名を変更:

例:

notepadqq-1.4.8.ote.recipe  ←(「~ote」ではないことに注目)
notepadqq-1.4.8.ote.patchset  ←(「-ote」ではないことに注目)

-

4). レシピファイル名を変更:

例:

> cd ~/Git/haikuports/app-editors/notepadqq/
> cp notepadqq-1.4.8.recipe notepadqq-1.4.8.recipe-ORG
> mv notepadqq-1.4.8.recipe notepadqq-1.4.8.ote.recipe

> ls -1
additional-files
notepadqq-1.4.8.recipe-ORG
notepadqq-1.4.8.ote.recipe
patches
work-1.4.8.ote

→「notepadqq-1.4.8-ote.recipe」のファイル名にしたいけど、それにすると「パッケージ化」がうまく動きません。

-

5). パッチファイル名を変更:

例:

> cd ~/Git/haikuports/app-editors/notepadqq/patches/
> cp notepadqq-1.4.8.patchset notepadqq-1.4.8.ote.patchset

> ls
notepadqq-1.4.8.patchset
notepadqq-1.4.8.ote.patchset

→こちらもレシピ名に合わせました。

-

6). 「work-1.4.8」、「work-1.4.8.ote」、および「download」フォルダがあれば削除

例:

> ls -1 ~/Git/haikuports/app-editors/notepadqq/
additional-files
notepadqq-1.4.8.recipe-ORG
notepadqq-1.4.8.ote.recipe
patches

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - ----

-

A.「Notepadqq-1.4.8」の場合:

「Qt5WebKit」エンジン

-

→「1.4.8-3」で日本語入力できるようになりました。メニューの日本語化は一部のみで、ヘルプ表示の「閉じる」ボタンが誤表示しています。

-

1). 「Notepadqq」公式サイト:

GitHub notepadqq/notepadqq

「Notepadqq」:

  • Qt アプリ。Windows 版のnotepad++ のLinux 版です。

現在、各ディストリビューションでインストールされるバージョンです。

-

2). レシピファイル名とパッチファイル名:

notepadqq-1.4.8.recipe
patchs/notepadqq-1.4.8.patchset

-

3). レシピファイルの確認:

> cat ~/Git/haikuports/app-editors/notepadqq/notepadqq-1.4.8.recipe

SUMMARY="Multiplatform Notepad++-like editor"
DESCRIPTION="Notepadqq is designed from developers, for developers. With its \
more than 100 supported languages, it is the ideal text editor for your daily \
tasks."
HOMEPAGE="http://notepadqq.altervista.org/"
COPYRIGHT="2012-2019 Notepadqq Project"
LICENSE="GNU LGPL v3"
REVISION="3"
SOURCE_URI="https://github.com/notepadqq/notepadqq/archive/v$portVersion.tar.gz"
CHECKSUM_SHA256="13fba9abd84c59de27fbe92f74e2763b57588fcf9c88af10ec67313b0abbc9d0"
PATCHES="notepadqq-$portVersion.patchset"
ADDITIONAL_FILES="notepadqq.rdef.in"

ARCHITECTURES="all !x86_gcc2"
SECONDARY_ARCHITECTURES="x86"
PROVIDES="
    notepadqq$secondaryArchSuffix = $portVersion
    app:Notepadqq$secondaryArchSuffix = $portVersion
    "
REQUIRES="
    haiku$secondaryArchSuffix
    lib:libGL$secondaryArchSuffix
    lib:libQt5Core$secondaryArchSuffix
    lib:libQt5Gui$secondaryArchSuffix
    lib:libQt5Network$secondaryArchSuffix
    lib:libQt5PrintSupport$secondaryArchSuffix
    lib:libQt5Svg$secondaryArchSuffix
    lib:libQt5WebKit$secondaryArchSuffix
    lib:libQt5WebKitWidgets$secondaryArchSuffix
    lib:libQt5Widgets$secondaryArchSuffix
    "

BUILD_REQUIRES="
    haiku${secondaryArchSuffix}_devel
    devel:libGL$secondaryArchSuffix
    devel:libQt5Core$secondaryArchSuffix
    devel:libQt5Gui$secondaryArchSuffix
    devel:libQt5Network$secondaryArchSuffix
    devel:libQt5PrintSupport$secondaryArchSuffix
    devel:libQt5Svg$secondaryArchSuffix
    devel:libQt5WebKit$secondaryArchSuffix
    devel:libQt5WebKitWidgets$secondaryArchSuffix
    devel:libQt5Widgets$secondaryArchSuffix
    "
BUILD_PREREQUIRES="
    cmd:find
    cmd:g++$secondaryArchSuffix
    cmd:gcc$secondaryArchSuffix
    cmd:ld$secondaryArchSuffix
    cmd:lrelease$secondaryArchSuffix >= 5
    cmd:make
    cmd:pkg_config$secondaryArchSuffix
    cmd:qmake$secondaryArchSuffix >= 5
    cmd:which
    "
BUILD()
{
    ./configure --prefix "$appsDir/Notepadqq"
    make $jobArgs
}
INSTALL()
{
    mkdir -p $appsDir/Notepadqq/Resources
    make install
    mv $appsDir/Notepadqq/lib/notepadqq/notepadqq-bin \
        $appsDir/Notepadqq/Notepadqq
    mv $appsDir/Notepadqq/share/notepadqq/* \
        $appsDir/Notepadqq/Resources
    # Cleanup
    rm -rf $appsDir/Notepadqq/{bin,share,lib}
    # Icon
    local MAJOR="`echo "$portVersion" | cut -d. -f1`"
    local MIDDLE="`echo "$portVersion" | cut -d. -f2`"
    local MINOR="`echo "$portVersion" | cut -d. -f3`"

    sed \
        -e "s|@MAJOR@|$MAJOR|" \
        -e "s|@MIDDLE@|$MIDDLE|" \
        -e "s|@MINOR@|$MINOR|" \
        $portDir/additional-files/notepadqq.rdef.in > notepadqq.rdef

    addResourcesToBinaries notepadqq.rdef \
        $appsDir/Notepadqq/Notepadqq

    addAppDeskbarSymlink $appsDir/Notepadqq/Notepadqq
}

-

4). パッチファイルの確認:

> cat ~/Git/haikuports/app-editors/notepadqq/patches/notepadqq-1.4.8.patchset

From ad36c58d4ded001703a53e5cb32b1ffda333d9a8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Zolt=C3=A1n=20Mizsei?= <zmizsei@extrowerk.com>
Date: Fri, 23 Aug 2019 13:46:42 +0200
Subject: Disable root check for haiku


diff --git a/src/ui/main.cpp b/src/ui/main.cpp
index da417af..9a358e6 100644
--- a/src/ui/main.cpp
+++ b/src/ui/main.cpp
@@ -87,6 +87,7 @@ int main(int argc, char *argv[])
     // Check for "run-and-exit" options like -h or -v
     const auto parser = Notepadqq::getCommandLineArgumentsParser(QApplication::arguments());
 
+#ifndef Q_OS_HAIKU
     // Check if we're running as root
     if( getuid() == 0 && !parser->isSet("allow-root") ) {
         qWarning() << QObject::tr(
@@ -95,6 +96,7 @@ int main(int argc, char *argv[])
 
         return EXIT_SUCCESS;
     }
+#endif
 
     if (a.attachToOtherInstance()) {
         return EXIT_SUCCESS;
-- 
2.23.0


From ea2dd9ad34997684e5a76abd4aacfce014762ba7 Mon Sep 17 00:00:00 2001
From: Gerasim Troeglazov <3dEyes@gmail.com>
Date: Sat, 24 Aug 2019 11:18:35 +1000
Subject: Fix resources path


diff --git a/src/ui/notepadqq.cpp b/src/ui/notepadqq.cpp
index ae84c27..c017024 100644
--- a/src/ui/notepadqq.cpp
+++ b/src/ui/notepadqq.cpp
@@ -22,6 +22,9 @@ QString Notepadqq::appDataPath(QString fileName)
 #ifdef Q_OS_MACX
     QString def = QString("%1/../Resources/").
             arg(qApp->applicationDirPath());
+#elif defined(Q_OS_HAIKU)
+    QString def = QString("%1/Resources/").
+            arg(qApp->applicationDirPath());
 #else
     QString def = QString("%1/../appdata/").
             arg(qApp->applicationDirPath());
-- 
2.23.0

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - -----

-

B.「Notepadqq-2.0.0~beta」の場合:

「Qt5WebEngine」エンジン

-

→メニューも日本語化されて、日本語入力もできます。ヘルプ表示でのボタンの表示も正常です。

画面下のステータスバーのレイアウトが変更されています。

-

「Notepadqq-2.0.0-beta」のビルドは依存パッケージの「Qt5WebEngine」の移植待ちで中断していました。 移植されたら、事前に「qtwebengine_bin」を 項番6. の手順でビルドしてインストールしておく必要がありましたが、

すでにバイナリが準備され、自動でインストールされるので、それらの事前作業は要りません。

  • 気になるのは、起動が遅いこと、まだ安定しないこと、最近のこれ以降の更新がないこと

-

-

1). 「Notepadqq」公式サイト:

GitHub notepadqq/notepadqq

「Notepadqq」の最新版です。「1.4.8-3」以降の途中のバージョンはありません。

  • エンジンはChromium の技術である「Qt5WebEngine」に変更されました。

→今のところ Haiku では重たくて不安定です。それは「Qt5WebEngine」の改善しだいと思います。

-

2). ビルドに必要な依存 (Build dependencies:)

Qt 5.6 or higher
qtwebengine5-dev    ←(注目: 変更されました)
libqt5websockets5-dev
libqt5svg5-dev
qttools5-dev-tools
libuchardet-dev
pkg-config

-

3). 実行に必要な依存 (Dependencies:)

Qt 5.6 or higher
qtwebengine5    ←(注目: 変更されました)
libqt5websockets5
libqt5svg5
coreutils
libuchardet

-

4). レシピファイル名とパッチファイル名:

notepadqq-2.0.0~beta.recipe       ←(「~beta」です)
patches/notepadqq-2.0.0-beta.patchset    ←(「-beta」です。「~beta」ではありません)

-

5). レシピファイルの置換:

  • ファイル名が変更されていることに注意

-

> lpe ~/Git/haikuports/app-editors/notepadqq/notepadqq-2.0.0~beta.recipe

↓ すべて置換:

SUMMARY="Multiplatform Notepad++-like editor"
DESCRIPTION="Notepadqq is designed from developers, for developers. With its \
more than 100 supported languages, it is the ideal text editor for your daily \
tasks."
HOMEPAGE="http://notepadqq.altervista.org/"
COPYRIGHT="2012-2019 Notepadqq Project"
LICENSE="GNU LGPL v3"
REVISION="1"
SOURCE_URI="https://github.com/notepadqq/notepadqq/archive/refs/tags/v${portVersion/\~beta/-beta}.tar.gz"
CHECKSUM_SHA256="7dba81115438f3f44dc29ef0a81d880f6ca98b888b057247308731a39dce234a"
SOURCE_FILENAME="notepadqq-${portVersion/\~beta/-beta}.tar.gz"
SOURCE_DIR="notepadqq-${portVersion/\~beta/-beta}"
PATCHES="notepadqq-${portVersion/\~beta/-beta}.patchset"
ADDITIONAL_FILES="notepadqq.rdef.in"

ARCHITECTURES="all !x86_gcc2"
SECONDARY_ARCHITECTURES="x86"
PROVIDES="
    notepadqq$secondaryArchSuffix = $portVersion
    app:Notepadqq$secondaryArchSuffix = $portVersion
    "
REQUIRES="
    haiku$secondaryArchSuffix
    lib:libGL$secondaryArchSuffix
    lib:libQt5Core$secondaryArchSuffix
    lib:libQt5Gui$secondaryArchSuffix
    lib:libQt5Network$secondaryArchSuffix
    lib:libQt5PrintSupport$secondaryArchSuffix
    lib:libQt5Svg$secondaryArchSuffix
    lib:libqt5webengine$secondaryArchSuffix
    lib:libqt5webenginewidgets$secondaryArchSuffix
    lib:libQt5Widgets$secondaryArchSuffix
    lib:libuchardet$secondaryArchSuffix
    "
BUILD_REQUIRES="
    haiku${secondaryArchSuffix}_devel
    devel:libGL$secondaryArchSuffix
    devel:libQt5Core$secondaryArchSuffix
    devel:libQt5Gui$secondaryArchSuffix
    devel:libQt5Network$secondaryArchSuffix
    devel:libQt5PrintSupport$secondaryArchSuffix
    devel:libQt5Svg$secondaryArchSuffix
    devel:libqt5webengine$secondaryArchSuffix
    devel:libqt5webenginewidgets$secondaryArchSuffix
    devel:libQt5Widgets$secondaryArchSuffix
    devel:libuchardet$secondaryArchSuffix
    "
BUILD_PREREQUIRES="
    cmd:find
    cmd:g++$secondaryArchSuffix
    cmd:gcc$secondaryArchSuffix
    cmd:ld$secondaryArchSuffix
    cmd:lrelease$secondaryArchSuffix >= 5
    cmd:make
    cmd:pkg_config$secondaryArchSuffix
    cmd:qmake$secondaryArchSuffix >= 5
    cmd:which
    "
BUILD()
{
    ./configure --prefix "$appsDir/Notepadqq"
    make $jobArgs
}
INSTALL()
{
    mkdir -p $appsDir/Notepadqq/Resources
    make install
    mv $appsDir/Notepadqq/lib/notepadqq/notepadqq-bin \
        $appsDir/Notepadqq/Notepadqq
    mv $appsDir/Notepadqq/share/notepadqq/* \
        $appsDir/Notepadqq/Resources
    # Cleanup
    rm -rf $appsDir/Notepadqq/{bin,share,lib}
    # Icon
    local MAJOR="`echo "$portVersion" | cut -d. -f1`"
    local MIDDLE="`echo "$portVersion" | cut -d. -f2`"
    local MINOR="`echo "$portVersion" | cut -d. -f3 | cut -d~ -f1`"
    sed \
        -e "s|@MAJOR@|$MAJOR|" \
        -e "s|@MIDDLE@|$MIDDLE|" \
        -e "s|@MINOR@|$MINOR|" \
        $portDir/additional-files/notepadqq.rdef.in > notepadqq.rdef
    addResourcesToBinaries notepadqq.rdef $appsDir/Notepadqq/Notepadqq
    addAppDeskbarSymlink $appsDir/Notepadqq/Notepadqq
}

-

6). パッチファイルの置換:

  • ファイル名が変更されていることに注意

→「~beta」でなく「-beta」です。(加工前でなく加工後の名前が使われるからです)

-

> lpe ~/Git/haikuports/app-editors/notepadqq/patches/notepadqq-2.0.0-beta.patchset 

↓ すべて置換:

From f4234e9ab4d6728817a092edbde8f4b8984e902a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Zolt=C3=A1n=20Mizsei?= <zmizsei@extrowerk.com>
Date: Fri, 23 Aug 2019 13:46:42 +0200
Subject: [PATCH 1/2] Disable root check for haiku


diff --git a/src/ui/main.cpp b/src/ui/main.cpp
index be427b2..a05fe74 100644
--- a/src/ui/main.cpp
+++ b/src/ui/main.cpp
@@ -92,6 +92,7 @@ int main(int argc, char *argv[])
         return EXIT_SUCCESS;
     }

+#ifndef Q_OS_HAIKU
     // Check if we're running as root
     if( getuid() == 0 && !parser->isSet("allow-root") ) {
         qWarning() << QObject::tr(
@@ -100,6 +101,7 @@ int main(int argc, char *argv[])

         return EXIT_SUCCESS;
     }
+#endif
 
     if (a.attachToOtherInstance()) {
         return EXIT_SUCCESS;
-- 
2.30.2



From 0aabf29d20ce274506ffaed3f6039fc46b8a61f1 Mon Sep 17 00:00:00 2001
From: Gerasim Troeglazov <3dEyes@gmail.com>
Date: Sat, 24 Aug 2019 11:18:35 +1000
Subject: [PATCH 2/2] Fix resources path


diff --git a/src/ui/notepadqq.cpp b/src/ui/notepadqq.cpp
index b93c0e4..9fd994c 100644
--- a/src/ui/notepadqq.cpp
+++ b/src/ui/notepadqq.cpp
@@ -23,6 +23,9 @@ QString Notepadqq::appDataPath(QString fileName)
 #ifdef Q_OS_MACX
     QString def = QString("%1/../Resources/").
             arg(qApp->applicationDirPath());
+#elif defined(Q_OS_HAIKU)
+    QString def = QString("%1/Resources/").
+            arg(qApp->applicationDirPath());
 #else
     QString def = QString("%1/../appdata/").
             arg(qApp->applicationDirPath());
-- 
2.30.2

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - ----- -

-

C.「Notepadqq-1.4.8.OTE」の場合:

「Qt5WebKit」や「Qt5WebEngine」を使っていません。エンジンは独自のOTE コンポーネントです。

-

Haiku で起動:

-

Ubuntu で起動:

→ほとんど見た目は同じ。編集アイコンとダブのアイコンが違うくらい。

→メニューも日本語化されて、日本語入力もできます。ヘルプ表示の「閉じる」ボタンの表示も正常です。

OTE 版かを見分けるには、「software libraries:」の表示を確認します。

-

1). 「Notepadqq-OTE」公式サイト:

GitHub Notepadqq-OTE

  • 独自の「OTE」エンジンを試すためのフォークのようです。

-

2). レシピファイル名とパッチファイル名:

notepadqq-1.4.8.ote.recipe  ←(「.ote」であることに注目)
patches/notepadqq-1.4.8.ote.patchset  ←(「.ote」であることに注目)

-

3). レシピファイルの置換:

  • ファイル名が変更されていることに注意

-

> lpe ~/Git/haikuports/app-editors/notepadqq/notepadqq-1.4.8.ote.recipe

↓ すべて置換:

SUMMARY="Multiplatform Notepad++-like editor"
DESCRIPTION="Notepadqq is designed from developers, for developers. With its \
more than 100 supported languages, it is the ideal text editor for your daily \
tasks."
HOMEPAGE="http://notepadqq.altervista.org/"
COPYRIGHT="2012-2019 Notepadqq Project"
LICENSE="GNU LGPL v3"
REVISION="1"
SOURCE_URI="https://github.com/JuBan1/notepadqq/archive/ote.tar.gz"
CHECKSUM_SHA256="4528c5be728396007630ee91723a2107894611b9f7149713ad276529b7297bd6"
SOURCE_FILENAME="notepadqq-ote.tar.gz"
SOURCE_DIR="notepadqq-ote"
PATCHES="notepadqq-$portVersion.patchset"
ADDITIONAL_FILES="notepadqq.rdef.in"

ARCHITECTURES="all !x86_gcc2"
SECONDARY_ARCHITECTURES="x86"

PROVIDES="
    notepadqq$secondaryArchSuffix = $portVersion
    app:Notepadqq$secondaryArchSuffix = $portVersion
    "
REQUIRES="
    haiku$secondaryArchSuffix
    lib:libGL$secondaryArchSuffix
    lib:libQt5Core$secondaryArchSuffix
    lib:libQt5Gui$secondaryArchSuffix
    lib:libQt5Network$secondaryArchSuffix
    lib:libQt5PrintSupport$secondaryArchSuffix
    lib:libQt5Svg$secondaryArchSuffix
    lib:libQt5Widgets$secondaryArchSuffix
    lib:libuchardet$secondaryArchSuffix
    "

BUILD_REQUIRES="
    haiku${secondaryArchSuffix}_devel
    devel:libGL$secondaryArchSuffix
    devel:libQt5Core$secondaryArchSuffix
    devel:libQt5Gui$secondaryArchSuffix
    devel:libQt5Network$secondaryArchSuffix
    devel:libQt5PrintSupport$secondaryArchSuffix
    devel:libQt5Svg$secondaryArchSuffix
    devel:libQt5Widgets$secondaryArchSuffix
    devel:libuchardet$secondaryArchSuffix
    "
BUILD_PREREQUIRES="
    cmd:find
    cmd:g++$secondaryArchSuffix
    cmd:gcc$secondaryArchSuffix
    cmd:ld$secondaryArchSuffix
    cmd:lrelease$secondaryArchSuffix >= 5
    cmd:make
    cmd:pkg_config$secondaryArchSuffix
    cmd:qmake$secondaryArchSuffix >= 5
    cmd:which
    "

BUILD()
{
    ./configure --prefix "$appsDir/Notepadqq"

    make $jobArgs
}

INSTALL()
{
    mkdir -p $appsDir/Notepadqq/Resources
    make install

    mv $appsDir/Notepadqq/lib/notepadqq/notepadqq-bin \
        $appsDir/Notepadqq/Notepadqq
    mv $appsDir/Notepadqq/share/notepadqq/* \
        $appsDir/Notepadqq/Resources

    # Cleanup
    rm -rf $appsDir/Notepadqq/{bin,share,lib}

    # Icon
    local MAJOR="`echo "$portVersion" | cut -d. -f1`"
    local MIDDLE="`echo "$portVersion" | cut -d. -f2`"
    local MINOR="`echo "$portVersion" | cut -d. -f3 | cut -d~ -f1`"
    sed \
        -e "s|@MAJOR@|$MAJOR|" \
        -e "s|@MIDDLE@|$MIDDLE|" \
        -e "s|@MINOR@|$MINOR|" \
        $portDir/additional-files/notepadqq.rdef.in > notepadqq.rdef

    addResourcesToBinaries notepadqq.rdef $appsDir/Notepadqq/Notepadqq
    addAppDeskbarSymlink $appsDir/Notepadqq/Notepadqq
}

-

4). パッチファイルの置換:

  • ファイル名が変更されていることに注意

-

> lpe ~/Git/haikuports/app-editors/notepadqq/patches/notepadqq-1.4.8.ote.patchset

↓ すべて置換:

From 183f0aeec7e7b6ddc315c4da1039fb3866129d09 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Zolt=C3=A1n=20Mizsei?= <zmizsei@extrowerk.com>
Date: Fri, 23 Aug 2019 13:46:42 +0200
Subject: [PATCH 1/2] Disable root check for haiku


diff --git a/src/ui/main.cpp b/src/ui/main.cpp
index a1be0b7..d047a04 100644
--- a/src/ui/main.cpp
+++ b/src/ui/main.cpp
@@ -92,6 +92,7 @@ int main(int argc, char *argv[])
         return EXIT_SUCCESS;
     }
 
+    #ifndef Q_OS_HAIKU
     // Check if we're running as root
     if( getuid() == 0 && !parser->isSet("allow-root") ) {
         qWarning() << QObject::tr(
@@ -100,6 +101,7 @@ int main(int argc, char *argv[])
 
         return EXIT_SUCCESS;
     }
+    #endif
 
     if (a.attachToOtherInstance()) {
         return EXIT_SUCCESS;
-- 
2.30.2


From d6df9d46cab0be8f8ed4b590b7bc268acbe03896 Mon Sep 17 00:00:00 2001
From: Gerasim Troeglazov <3dEyes@gmail.com>
Date: Sat, 24 Aug 2019 11:18:35 +1000
Subject: [PATCH 2/2] Fix resources path


diff --git a/src/ui/notepadqq.cpp b/src/ui/notepadqq.cpp
index b93c0e4..fedee8f 100644
--- a/src/ui/notepadqq.cpp
+++ b/src/ui/notepadqq.cpp
@@ -23,9 +23,12 @@ QString Notepadqq::appDataPath(QString fileName)
 #ifdef Q_OS_MACX
     QString def = QString("%1/../Resources/").
             arg(qApp->applicationDirPath());
+#elif defined(Q_OS_HAIKU)
+    QString def = QString("%1/Resources/").
+        arg(qApp->applicationDirPath());
 #else
     QString def = QString("%1/../appdata/").
-            arg(qApp->applicationDirPath());
+        arg(qApp->applicationDirPath());
 #endif
 
     if(!QDir(def).exists())
-- 
2.30.2

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - ----- --

-

3. 参考: レシピファイルの修正について

-

レシピファイル名の変更をしたら、それに伴う、文字列操作が必要です

-

  • レシピファイル名を「notepadqq-2.0.0-beta.recipe」のように「-beta」を付けると、うまく認識できません。「-」が使えないみたい。「.tar.gz」の名前は変えられないので工夫が必要でした。

  • レシピファイル名を「notepadqq-2.0.0.recipe」とすることでビルドできたので、プルリクエストを送信しました。

notepadqq: bump version #6535

-

  • ベータ版の場合は、レシピファイル名を「notepadqq-2.0.0~beta.recipe」のように「~beta」を付けた方が良いという、アドバイスがありました。Haiku でのレシピファイル名の付け方にはルールがあるようです。
I think the recipe should be renamed to notepadqq-2.0.0~beta.recipe

和訳: レシピの名前を「notepadqq-2.0.0~beta.recipe」に変更する必要があると思います

-

ちなみに、「~」が使えるのはプレリリース版のときだけで、他の場合は「.」を使うようです。

the "~" suffix is only for pre-release versions. Just use one dot instead.

和訳: 「~」サフィックスは、プレリリースバージョン専用です。代わりに1つのドットを使用してください。

→プレスリリースとは、新規開始のこと。それではないので、ファイル名の「~」を「.」に変えました。

例: 今回の「notepadqq-1.4.8.ote.recipe」

-

  • 「~beta」を含む名前にして正常にビルドできるようにするには、工夫が必要です。

→重要: ダウンロードされたソースは、Haikuporter のデフォルト設定では、

<Port Name>-<Port Version> という名前のディレクトリに解凍されます。

それ以外のディレクトリにする場合は、「SOURCE_DIR=」行にてそのディレクトリ名を指定します。

-

レシピファイル名を変更:

> lpe ~/Git/haikuports/app-editors/notepadqq/notepadqq-2.0.0~beta.recipe
:
REVISION="1"
SOURCE_URI="https://github.com/notepadqq/notepadqq/archive/refs/tags/v${portVersion/\~beta/-beta}.tar.gz"
CHECKSUM_SHA256="7dba81115438f3f44dc29ef0a81d880f6ca98b888b057247308731a39dce234a"
SOURCE_FILENAME="notepadqq-${portVersion/\~beta/-beta}"
SOURCE_DIR="notepadqq-${portVersion/\~beta/-beta}"
PATCHES="notepadqq-${portVersion/\~beta/-beta}.patchset"   ←(パッチファイル名: notepadqq-2.0.0-beta.patchset)
ADDITIONAL_FILES="notepadqq.rdef.in"

→「$portVersion」の変数には、レシピファイル名の「2.0.0~beta」の部分がセットされます。 できるだけこの変数を使うのは、次のバージョンアップがあったときに変更が少くて済むようにです。

-

ダウンロードするファイル名は固定なので、文字列操作で、ファイル名の「2.0.0~beta」の「~beta」を削除、「-beta」を追加、して「2.0.0-beta」に変更しました。

→それに伴い他の行も修正。これらの修正をしましたが、パッケージ化の実行でエラーで停止しました:

rc: Error! notepadqq.rdef:7 syntax error

-

レシピの最後の2行のコマンドの最初の行にて、エラーを検出しています:

→「addResourcesToBinaries notepadqq.rdef $appsDir/Notepadqq/Notepadqq」の行でエラー:

-

この行は、「.rdef」の定義(アイコンイメージの定義等)を実行ファイルに「ファイル属性」として取り込む操作です。

-

下記のファイルを確認:

エラーする 7行目は、「minor」の行(バージョン番号の3つ目の文字列)でした。数字でない文字が含まれているとシンタックスエラーとなるようです。

> cat ~/Git/haikuports/app-editors/notepadqq/work-2.0.0~beta/sources/notepadqq-2.0.0-beta/notepadqq.rdef

抜粋:

resource app_version {
    major  = 2,
    middle = 0,
    minor  = 0~beta,

resource app_version {
    major  = 2,
    middle = 0,
    minor  = 0,

と変更する必要があります。

-

回避策: レシピファイルの後半にある定義部分にて、
 # Icon
    local MAJOR="`echo "$portVersion" | cut -d. -f1`"
    local MIDDLE="`echo "$portVersion" | cut -d. -f2`"
    local MINOR="`echo "$portVersion" | cut -d. -f3`"

↓ 以下のように修正して、文字列操作を追加します:

 # Icon
    local MAJOR="`echo "$portVersion" | cut -d. -f1`"
    local MIDDLE="`echo "$portVersion" | cut -d. -f2`"
    local MINOR="`echo "$portVersion" | cut -d. -f3 | cut -d~ -f1`"

notepadqq.rdef に設定された

「2.0.0~beta」にある「0~beta」の部分(7行目)は数字ではないので「シンタックスエラー」となります。

「0」に加工するため、上記の4行目の行末にパイプで( cut -d~ -f1 )の文字列操作の処理を追加しました。

cut -d. -f1  →バージョン番号を「.」で区切り、その 1つ目を抜き出し    →「2」
cut -d. -f2  →バージョン番号を「.」で区切り、その 2つ目を抜き出し    →「0」
cut -d. -f3  →バージョン番号を「.」で区切り、その 3つ目を抜き出し    →「0~beta」
cut -d~ -f1  →その文字列を「~」で区切り、その 1つ目を抜き出し       →「0」

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - ----- ---

-

4. 参考: パッチファイルの修正について

-

  • 改善のため、ソースが修正されることはよくあることです。パッチファイルは行番号指定なので、そのままでは使えません。ソースが修正されて行番号がズレると、パッチファイルのエラーが表示されます。また、どのバージョンからの差分かも重要です。バージョンにより、ソースの修正内容が変わり、パッチファイルも変わります。

→手動の差分と以前のパッチファイルのヘッダー部を組み合わせて、手動でパッチファイルを作成しました。(手動で作成したファイルだと、形式を統一するため、プルリクエストで受け付けてもらえません。)

→パッチファイルを作るときは、以前のヘッダー部(コミットを登録した人などの情報)を残しておくのがミソです。コミット番号とgit バージョン以外の情報(つまり、開発者名)を引き継げます。

-

  • フッター(お尻)にある番号は、使っているPC のgit のバージョン番号で、自動で付けられます:

git のバージョン:

> git --version
git version 2.30.2

-

1). 以前のバージョンで最新のパッチファイル(原本)を表示:

> cat ~/Git/haikuports/app-editors/notepadqq/patches/notepadqq-1.4.8.patchset

From ad36c58d4ded001703a53e5cb32b1ffda333d9a8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Zolt=C3=A1n=20Mizsei?= <zmizsei@extrowerk.com>   ←(残します)
Date: Fri, 23 Aug 2019 13:46:42 +0200                       ←(残します)
Subject: Disable root check for haiku    ←(パッケージ化で、パッチが当たる時に表示)

                                                       ←(2行の空行で区切り)
diff --git a/src/ui/main.cpp b/src/ui/main.cpp
index da417af..9a358e6 100644
--- a/src/ui/main.cpp
+++ b/src/ui/main.cpp
@@ -87,6 +87,7 @@ int main(int argc, char *argv[])
     // Check for "run-and-exit" options like -h or -v
     const auto parser = Notepadqq::getCommandLineArgumentsParser(QApplication::arguments());
 
+#ifndef Q_OS_HAIKU
     // Check if we're running as root
     if( getuid() == 0 && !parser->isSet("allow-root") ) {
         qWarning() << QObject::tr(
@@ -95,6 +96,7 @@ int main(int argc, char *argv[])
 
         return EXIT_SUCCESS;
     }
+#endif
 
     if (a.attachToOtherInstance()) {
         return EXIT_SUCCESS;
-- 
2.23.0
                                                   ←(2行の空行で区切り)

From ea2dd9ad34997684e5a76abd4aacfce014762ba7 Mon Sep 17 00:00:00 2001
From: Gerasim Troeglazov <3dEyes@gmail.com>               ←(残します)
Date: Sat, 24 Aug 2019 11:18:35 +1000                  ←(残します)
Subject: Fix resources path       ←(パッケージ化で、パッチが当たる時に表示)

                                                    ←(2行の空行で区切り)
diff --git a/src/ui/notepadqq.cpp b/src/ui/notepadqq.cpp
index ae84c27..c017024 100644
--- a/src/ui/notepadqq.cpp
+++ b/src/ui/notepadqq.cpp
@@ -22,6 +22,9 @@ QString Notepadqq::appDataPath(QString fileName)
 #ifdef Q_OS_MACX
     QString def = QString("%1/../Resources/").
             arg(qApp->applicationDirPath());
+#elif defined(Q_OS_HAIKU)
+    QString def = QString("%1/Resources/").
+            arg(qApp->applicationDirPath());
 #else
     QString def = QString("%1/../appdata/").
             arg(qApp->applicationDirPath());
-- 
2.23.0                                          ←(git のバージョン番号)
                                                   ←(2行の空行で区切り)

→今回は2つのコミットから出来ています。パッケージ化でソースにパッチを当てるときに、「Subject: 」の表題が表示されるので、パッケージ化のときに、ちゃんと当たったかがメッセージで確認できます。

-

  • ソースの改版がわからないので、その違いを、パッチファイルの差分とGitHub 上の最新の現在の状態のオリジナルの1.4.8 を見比べながら、修正していき、その差分ファイルを作成します。手順は以下を参照。

-

2). 差分ファイルをローカルで手動で作成して、パッケージ化するときに使える仮のパッチファイルを作成:

  • 手動で作成したパッチファイルは受け付けてもらえません

→プルリクエストのときに一緒に送れるパッチファイルを作成しました:

-

個人的な作成手順:

-

(1). ローカルでファイルを「a」と「b」のフォルダにコピー

できたらフォルダ構造は、ソースの階層構造にしておくと手直しが楽です。

新しいフォルダ
    a/src/ui/main.cpp
    a/src/ui/notepadqq.cpp

    b/src/ui/main.cpp            ←(こちらをパッチを見ながら修正) 
    b/src/ui/notepadqq.cpp            ←(こちらをパッチを見ながら修正)

-

(2). 「b」の方を手動で既存のパッチファイルを見ながら修正

-

(3). ローカルで差分ファイルを作成
$ cd 新しいフォルダ
$ diff -Naur a b > test.diff

-

(4). その差分ファイルの内容を使って、Haiku の仮のパッチファイルを手動で作成:

ヘッダー部とフッター部、は以前のものを残します。区切りは2行の空行を使います。

-

仮のパッチファイル
> lpe ~/Git/haikuports/app-editors/notepadqq/patches/notepadqq-1.4.8-ote.patchset

↓ すべて置換

From 000001 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Zolt=C3=A1n=20Mizsei?= <zmizsei@extrowerk.com>
Date: Fri, 23 Aug 2019 13:46:42 +0200
Subject: Disable root check for haiku


diff --git a/src/ui/main.cpp b/src/ui/main.cpp
--- a/src/ui/main.cpp   2022-01-15 22:15:23.000000000 +0900
+++ b/src/ui/main.cpp   2022-01-17 14:52:12.364286731 +0900
@@ -92,6 +92,7 @@
         return EXIT_SUCCESS;
     }
 
+    #ifndef Q_OS_HAIKU
     // Check if we're running as root
     if( getuid() == 0 && !parser->isSet("allow-root") ) {
         qWarning() << QObject::tr(
@@ -100,6 +101,7 @@
 
         return EXIT_SUCCESS;
     }
+    #endif
 
     if (a.attachToOtherInstance()) {
         return EXIT_SUCCESS;
-- 
2.30.2


From 000002 Mon Sep 17 00:00:00 2001
From: Gerasim Troeglazov <3dEyes@gmail.com>
Date: Sat, 24 Aug 2019 11:18:35 +1000
Subject: Fix resources path


diff --git a/src/ui/notepadqq.cpp b/src/ui/notepadqq.cpp
--- a/src/ui/notepadqq.cpp  2022-01-15 22:15:23.000000000 +0900
+++ b/src/ui/notepadqq.cpp  2022-01-17 14:57:34.173692332 +0900
@@ -23,9 +23,12 @@
 #ifdef Q_OS_MACX
     QString def = QString("%1/../Resources/").
             arg(qApp->applicationDirPath());
+#elif defined(Q_OS_HAIKU)
+    QString def = QString("%1/Resources/").
+        arg(qApp->applicationDirPath());
 #else
     QString def = QString("%1/../appdata/").
-            arg(qApp->applicationDirPath());
+        arg(qApp->applicationDirPath());
 #endif
 
     if(!QDir(def).exists())
-- 
2.30.2

→ヘッダー部のコミット番号は省略しています。

-

(5). レシピファイルを別に退避しておき、レシピファイルの後半にある「BUILD()」以降の行をすべて削除

レシピファイル:

BUILD()
{
:

→この行を含めて、以降の行をすべて削除します。

-

(6). パッケージ化を実行。ビルドをスキップするのは、他の差分で埋もれないためです

メッセージを見るとパッケージ化は成功したように見えますが、ビルドはスキップされています。

→ソースに、手動で作成したパッチが当たっています。

-

(7). git でコミットの差分を表示(コミットしないとパッチファイルを生成できません)
> git show

-

(8). パッチファイルを作成し直し
> git format-patch -2
0001-Disable-root-check-for-haiku.patch
0002-Fix-resources-path.patch

→コミットごとに、ファイルとして出力されます。

> ls
0001-Disable-root-check-for-haiku.patch  configure        doc         notepadqq.pro  src
0002-Fix-resources-path.patch            CONTRIBUTING.md  Dockerfile  README.md      support_files
build-tools                              COPYING          images      snap           TODO.txt

-

> cat 0001-Disable-root-check-for-haiku.patch
> cat 0002-Fix-resources-path.patch

→コミット番号が正規な値に変更されます。これらのファイルの内容をつなげることでパッチファイルとして使えます。

-

-

3). 実際に作成したパッチファイル:

-

  • レシピファイルの変更があり、パッチファイル名も変更されていることに注意

-

> lpe ~/Git/haikuports/app-editors/notepadqq/patches/notepadqq-1.4.8-ote.patchset

↓ すべて置換:

From ad36c58d4ded001703a53e5cb32b1ffda333d9a8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Zolt=C3=A1n=20Mizsei?= <zmizsei@extrowerk.com>
Date: Fri, 23 Aug 2019 13:46:42 +0200
Subject: Disable root check for haiku


diff --git a/src/ui/main.cpp b/src/ui/main.cpp
--- a/src/ui/main.cpp   2022-01-15 22:15:23.000000000 +0900
+++ b/src/ui/main.cpp   2022-01-17 14:52:12.364286731 +0900
@@ -92,6 +92,7 @@
         return EXIT_SUCCESS;
     }
 
+    #ifndef Q_OS_HAIKU
     // Check if we're running as root
     if( getuid() == 0 && !parser->isSet("allow-root") ) {
         qWarning() << QObject::tr(
@@ -100,6 +101,7 @@
 
         return EXIT_SUCCESS;
     }
+    #endif
 
     if (a.attachToOtherInstance()) {
         return EXIT_SUCCESS;
-- 
2.25.1


From ea2dd9ad34997684e5a76abd4aacfce014762ba7 Mon Sep 17 00:00:00 2001
From: Gerasim Troeglazov <3dEyes@gmail.com>
Date: Sat, 24 Aug 2019 11:18:35 +1000
Subject: Fix resources path


diff --git a/src/ui/notepadqq.cpp b/src/ui/notepadqq.cpp
--- a/src/ui/notepadqq.cpp  2022-01-15 22:15:23.000000000 +0900
+++ b/src/ui/notepadqq.cpp  2022-01-17 14:57:34.173692332 +0900
@@ -23,9 +23,12 @@
 #ifdef Q_OS_MACX
     QString def = QString("%1/../Resources/").
             arg(qApp->applicationDirPath());
+#elif defined(Q_OS_HAIKU)
+    QString def = QString("%1/Resources/").
+        arg(qApp->applicationDirPath());
 #else
     QString def = QString("%1/../appdata/").
-            arg(qApp->applicationDirPath());
+        arg(qApp->applicationDirPath());
 #endif
 
     if(!QDir(def).exists())
-- 
2.25.1

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - ----- ----

-

5. 問題の少ない「Notepadqq-1.4.8.OTE」 をビルド:

-

最近、「Notepadqq」の最新バージョンとして「notepadqq-1.4.8.ote」が Haiku に採用されました

2022-01-18 以降に「移植の環境を構築」したのであれば、たぶん、レシピファイルとパッチファイルに反映されています。ports ツリーだけでなく、リポジトリにバイナリとしても置かれているので、ビルドしなくても「Haikudepot」で「notepadqq」としてインストールできます。

-

こちらで実行しているのは、Haiku でのビルドについて勉強するためです。

-

ports ツリーに反映されているかは、ファイル名で判断:

notepadqq-1.4.8.ote.recipe            ←(「.ote」であることに注目)
patches/notepadqq-1.4.8.ote.patchset  ←(「.ote」であることに注目)

参考:

C.「Notepadqq-1.4.8.OTE」の場合:

-

1). レシピファイルが修正されているかの確認:

とりあえずは、下記が表示されればファイル名は合っています。

> cat ~/Git/haikuports/app-editors/notepadqq/notepadqq-1.4.8.ote.recipe

内容:

SUMMARY="Multiplatform Notepad++-like editor"
DESCRIPTION="Notepadqq is designed from developers, for developers. With its \
more than 100 supported languages, it is the ideal text editor for your daily \
tasks."
HOMEPAGE="http://notepadqq.altervista.org/"
COPYRIGHT="2012-2019 Notepadqq Project"
LICENSE="GNU LGPL v3"
REVISION="1"
SOURCE_URI="https://github.com/JuBan1/notepadqq/archive/ote.tar.gz"
CHECKSUM_SHA256="4528c5be728396007630ee91723a2107894611b9f7149713ad276529b7297bd6"
SOURCE_FILENAME="notepadqq-ote.tar.gz"
SOURCE_DIR="notepadqq-ote"
PATCHES="notepadqq-$portVersion.patchset"
ADDITIONAL_FILES="notepadqq.rdef.in"

ARCHITECTURES="all !x86_gcc2"
SECONDARY_ARCHITECTURES="x86"

PROVIDES="
    notepadqq$secondaryArchSuffix = $portVersion
    app:Notepadqq$secondaryArchSuffix = $portVersion
    "
REQUIRES="
    haiku$secondaryArchSuffix
    lib:libGL$secondaryArchSuffix
    lib:libQt5Core$secondaryArchSuffix
    lib:libQt5Gui$secondaryArchSuffix
    lib:libQt5Network$secondaryArchSuffix
    lib:libQt5PrintSupport$secondaryArchSuffix
    lib:libQt5Svg$secondaryArchSuffix
    lib:libQt5Widgets$secondaryArchSuffix
    lib:libuchardet$secondaryArchSuffix
    "

BUILD_REQUIRES="
    haiku${secondaryArchSuffix}_devel
    devel:libGL$secondaryArchSuffix
    devel:libQt5Core$secondaryArchSuffix
    devel:libQt5Gui$secondaryArchSuffix
    devel:libQt5Network$secondaryArchSuffix
    devel:libQt5PrintSupport$secondaryArchSuffix
    devel:libQt5Svg$secondaryArchSuffix
    devel:libQt5Widgets$secondaryArchSuffix
    devel:libuchardet$secondaryArchSuffix
    "
BUILD_PREREQUIRES="
    cmd:find
    cmd:g++$secondaryArchSuffix
    cmd:gcc$secondaryArchSuffix
    cmd:ld$secondaryArchSuffix
    cmd:lrelease$secondaryArchSuffix >= 5
    cmd:make
    cmd:pkg_config$secondaryArchSuffix
    cmd:qmake$secondaryArchSuffix >= 5
    cmd:which
    "

BUILD()
{
    ./configure --prefix "$appsDir/Notepadqq"

    make $jobArgs
}

INSTALL()
{
    mkdir -p $appsDir/Notepadqq/Resources
    make install

    mv $appsDir/Notepadqq/lib/notepadqq/notepadqq-bin \
        $appsDir/Notepadqq/Notepadqq
    mv $appsDir/Notepadqq/share/notepadqq/* \
        $appsDir/Notepadqq/Resources

    # Cleanup
    rm -rf $appsDir/Notepadqq/{bin,share,lib}

    # Icon
    local MAJOR="`echo "$portVersion" | cut -d. -f1`"
    local MIDDLE="`echo "$portVersion" | cut -d. -f2`"
    local MINOR="`echo "$portVersion" | cut -d. -f3 | cut -d~ -f1`"
    sed \
        -e "s|@MAJOR@|$MAJOR|" \
        -e "s|@MIDDLE@|$MIDDLE|" \
        -e "s|@MINOR@|$MINOR|" \
        $portDir/additional-files/notepadqq.rdef.in > notepadqq.rdef

    addResourcesToBinaries notepadqq.rdef $appsDir/Notepadqq/Notepadqq
    addAppDeskbarSymlink $appsDir/Notepadqq/Notepadqq
}

-

2). パッチファイルが修正されているかの確認:

とりあえずは、下記が表示されればファイル名は合っています。

> cat ~/Git/haikuports/app-editors/notepadqq/patches/notepadqq-1.4.8.ote.patchset

内容:

From 183f0aeec7e7b6ddc315c4da1039fb3866129d09 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Zolt=C3=A1n=20Mizsei?= <zmizsei@extrowerk.com>
Date: Fri, 23 Aug 2019 13:46:42 +0200
Subject: [PATCH 1/2] Disable root check for haiku


diff --git a/src/ui/main.cpp b/src/ui/main.cpp
index a1be0b7..d047a04 100644
--- a/src/ui/main.cpp
+++ b/src/ui/main.cpp
@@ -92,6 +92,7 @@ int main(int argc, char *argv[])
         return EXIT_SUCCESS;
     }
 
+    #ifndef Q_OS_HAIKU
     // Check if we're running as root
     if( getuid() == 0 && !parser->isSet("allow-root") ) {
         qWarning() << QObject::tr(
@@ -100,6 +101,7 @@ int main(int argc, char *argv[])
 
         return EXIT_SUCCESS;
     }
+    #endif
 
     if (a.attachToOtherInstance()) {
         return EXIT_SUCCESS;
-- 
2.30.2


From d6df9d46cab0be8f8ed4b590b7bc268acbe03896 Mon Sep 17 00:00:00 2001
From: Gerasim Troeglazov <3dEyes@gmail.com>
Date: Sat, 24 Aug 2019 11:18:35 +1000
Subject: [PATCH 2/2] Fix resources path


diff --git a/src/ui/notepadqq.cpp b/src/ui/notepadqq.cpp
index b93c0e4..fedee8f 100644
--- a/src/ui/notepadqq.cpp
+++ b/src/ui/notepadqq.cpp
@@ -23,9 +23,12 @@ QString Notepadqq::appDataPath(QString fileName)
 #ifdef Q_OS_MACX
     QString def = QString("%1/../Resources/").
             arg(qApp->applicationDirPath());
+#elif defined(Q_OS_HAIKU)
+    QString def = QString("%1/Resources/").
+        arg(qApp->applicationDirPath());
 #else
     QString def = QString("%1/../appdata/").
-            arg(qApp->applicationDirPath());
+        arg(qApp->applicationDirPath());
 #endif
 
     if(!QDir(def).exists())
-- 
2.30.2

-

3). 「download」フォルダと「work-x.x.x」フォルダを削除

-

4). パッケージ化を実行

> cd ~/Git/haikuporter/
> hp notepadqq
:
Applying: Disable root check for haiku  ←(ソースにパッチが当たりました)
Applying: Fix resources path           ←(ソースにパッチが当たりました)
:
name                    notepadqq
version                 1.4.8.ote-1
architecture            x86_64
summary                 "Multiplatform Notepad++-like editor"
description             "Notepadqq is designed from developers, for developers. With its more than 100 supported languages, it is the ideal text editor for your daily tasks."
packager                "FuRuYa7 <mymail@mydomain.org>"     ←(パッケージ化した人)
vendor                  "Haiku Project"
licenses {
        "GNU LGPL v3"
}
copyrights {
        "2012-2019 Notepadqq Project"
}
provides {
        notepadqq = 1.4.8.ote
        app:notepadqq = 1.4.8.ote
}
requires {
        haiku >= r1~beta3_hrev55792-1
        lib:libgl >= 1.0.0
        lib:libqt5core >= 5.15.2
        lib:libqt5gui >= 5.15.2
        lib:libqt5network >= 5.15.2
        lib:libqt5printsupport >= 5.15.2
        lib:libqt5svg >= 5.15.2
        lib:libqt5widgets >= 5.15.2
        lib:libuchardet >= 0.0.7
}
urls {
        "http://notepadqq.altervista.org/"
}
source-urls {
# Download
        "https://github.com/JuBan1/notepadqq/archive/ote.tar.gz"
# Location 2
        "https://ports-mirror.haiku-os.org/notepadqq/ote.tar.gz"  ←(そのバージョンが採用されたときに退避?)
}
mimesetting files for package notepadqq-1.4.8.ote-1-x86_64.hpkg ...
creating package notepadqq-1.4.8.ote-1-x86_64.hpkg ...
----- Package Info ----------------
header size:                     80
heap size:                  2833441
TOC size:                     58462
package attributes size:        820
total size:                 2833521
-----------------------------------
waiting for build package notepadqq-1.4.8.ote-1 to be deactivated
grabbing notepadqq-1.4.8.ote-1-x86_64.hpkg and moving it to /boot/home/Git/haikuports/packages/notepadqq-1.4.8.ote-1-x86_64.hpkg

→パッケージ化が成功しました。

パッケージ化に成功すると、最後尾にパッケージ名が表示されます。

-

ちなみに、「# Location 2」の行について:

[Index of /notepadqq/] (https://ports-mirror.haiku-os.org/notepadqq/) を確認すると:

Name↓                      Last Modified:         Size:
notepadqq-ote.tar.gz       2022-Jan-18 17:12:12   2.8M
v1.4.0.tar.gz              2018-Nov-13 15:53:20   4.1M
v1.4.8.tar.gz              2019-Aug-23 12:21:18   4.2M

→「v2.0.0-beta.tar.gz」がないところを見ると、 パッケージ化が成功した時にダウンロードファイルが退避されるのではなく、Haiku でそのバージョンが採用されたときに退避されるみたい。

-

5). 作成されたパッケージを確認:

> ls -1  /boot/home/Git/haikuports/packages/
featherpad-1.1.0-1-x86_64.hpkg
notepadqq-1.4.8.ote-1-x86_64.hpkg            ←(今回作成されたパッケージ)
qtwebengine_bin_devel-5.15.2-4-x86_64.hpkg
qtwebengine_bin-5.15.2-4-x86_64.hpkg

→今までパッケージ化を実行して、成功したパッケージです。インストール元になるだけで、インストールされているとは限りません。

-

6). インストール:

> pkgman install ~/Git/haikuports/packages/notepadqq-1.4.8.ote-1-x86_64.hpkg
:
The following changes will be made:
  in system:
    upgrade package notepadqq-1.4.8.ote-1 to 1.4.8.ote-1 from local file
Continue? [yes/no] (yes) : 
[system] Applying changes ...
*** failed to commit transaction: Failed to change the package activation in packagefs: Name in use

→以前インストールしたときのゴミ(使用中の名前があるみたい)が影響しています。

-

HaikuDepot にて、「notepadqq」をアンインストール

システムにて、下記に似た名前のファイルを削除:

/boot/system/packages/administrative/state_2022-01-22_20:20:07
/boot/system/packages/administrative/transaction-1

上記を選択して「Delete」→Shift 押しながら「move」をクリック

-

パッケージを再インストール:
> pkgman install ~/Git/haikuports/packages/notepadqq-1.4.8.ote-1-x86_64.hpkg
:
The following changes will be made:
  in system:
    install package notepadqq-1.4.8.ote-1 from local file
Continue? [yes/no] (yes) : 
[system] Applying changes ...
[system] Changes applied. Old activation state backed up in "state_2022-01-22_20:20:07"
[system] Cleaning up ...
[system] Done.

-

7). 動作の確認:

-

起動しました
  • ヘルプの誤表示が修正されています。

  • テキストファイルを右クリックしての、ファイルを開いての起動もできました。

  • 日本語入力できます。

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - ----- -----

-

6. 参考: 「移植待ち」だった依存パッケージの「qtwebengine_bin」をビルドする場合:

-

追記: こちらの作業は不要です。移植されており、バイナリが準備されました。 参考として、ご覧ください。

-

「Notepadqq-2.0.0-beta」のビルドは依存パッケージの「移植待ち」で中断していました。

「Notepadqq-2.0.0-beta」のビルドの前に、「qtwebengine_bin」をビルドしてインストールしておく必要がありました。

ただし、こちらの作業は不要になりました。すでにバイナリが準備されました。

-

1). 「qtwebengine」パッケージのport の場所を検索

> cd ~/Git/haikuporter/
~/Git/haikuporter> haikuporter -o qtwebengine
/boot/home/Git/haikuports/dev-python/pyqtwebengine5
/boot/home/Git/haikuports/dev-qt/qtwebengine
/boot/home/Git/haikuports/dev-qt/qtwebengine_bin

→複数の移植されたパッケージの登録があります。

-

2). 試しにひとつ、パッケージ化を実行

> cd ~/Git/haikuporter/
~/Git/haikuporter> hp qtwebengine
:
Checking if any dependency-infos need to be updated ...
Looking for stale dependency-infos ...
Warning: skipping qtwebengine-5.15.7, as it is untested on the target architecture.
Warning: skipping qtwebengine-5.15.2, as it is untested on the target architecture.
Error: No version of qtwebengine can be built

→2つあるレシピファイルともに、アーキテクチャでのテストが出来ていないというエラーが出ています。

-

haikuports のファイル構成を確認:

> cd ~/Git/haikuports/dev-qt/qtwebengine/

> ls -1
download
patches
qtwebengine_bin-5.15.2.recipe
qtwebengine-5.15.2.recipe
qtwebengine-5.15.7.recipe
work-5.15.2
work-5.15.7

→違うバージョンのレシピファイルが2つあります。

-

パッチを見ると:

> ls -1 patches/
qtwebengine-5.15.2.patchset
qtwebengine-5.15.7.patchset

ダウンロードを見ると:

> ls -1 download/
qtwebengine_devel-5.15.2-3-x86_64.hpkg
qtwebengine_devel-5.15.2-3-x86_64.hpkg.uri
qtwebengine-5.15.2-3-x86_64.hpkg
qtwebengine-5.15.2-3-x86_64.hpkg.uri

→パッケージ化の実行にて、2つのファイルがダウンロードされました。

-

3). 別の「qtwebengine_bin」のパッケージで、パッケージ化を実行:

> cd ~/Git/haikuporter/
~/Git/haikuporter> hp qtwebengine_bin
:
Checking if any dependency-infos need to be updated ...
Looking for stale dependency-infos ...
----------------------------------------------------------------------
dev-qt::qtwebengine_bin-5.15.2
        /boot/home/Git/haikuports/dev-qt/qtwebengine/qtwebengine_bin-5.15.2.recipe
----------------------------------------------------------------------
:
waiting for build package qtwebengine_bin-5.15.2-4 to be activated
waiting for build package qtwebengine_bin_devel-5.15.2-4 to be activated
Building ...
Collecting files to be packaged ...
/packages/qtwebengine_bin_devel-5.15.2-4/.self
name                    qtwebengine_bin
version                 5.15.2-4
architecture            x86_64
summary                 "Chromium-based rendering library for the Qt5 framework"
description             "QtWebEngine provides a Web browser engine that integrates Chromium's fast moving web capabilities into Qt."
packager                "FuRuYa7 <mymail@mydomain.org>"
vendor                  "Haiku Project"
licenses {
        "BSD (3-clause)"
        "GNU LGPL v2.1"
}
copyrights {
        "2015-2020 The Qt Company Ltd."
}
provides {
        qtwebengine_bin = 5.15.2 compat >= 5
        lib:libqt5pdf = 5.15.2 compat >= 5
        lib:libqt5pdfwidgets = 5.15.2 compat >= 5
        lib:libqt5webengine = 5.15.2 compat >= 5
        lib:libqt5webenginecore = 5.15.2 compat >= 5
        lib:libqt5webenginewidgets = 5.15.2 compat >= 5
        cmd:qwebengine_convert_dict
}
requires {
        haiku >= r1~beta3_hrev55774-1
        lib:libavcodec >= 58.54.100
        lib:libavformat >= 58.29.100
        lib:libavutil >= 56.31.100
        lib:libdbus_1
        lib:libexecinfo >= 1.1
        lib:libexpat >= 1.8.1
        lib:libfontconfig >= 1.12.0
        lib:libfreetype >= 6.18.0
        lib:libgl >= 1.0.0
        lib:libjpeg >= 62.3.0
        lib:liblcms2 >= 2.0.12
        lib:libminizip >= 1.2.11
        lib:libnspr4
        lib:libnss3
        lib:libnssutil3
        lib:libopus >= 0.7.0
        lib:libplc4
        lib:libplds4
        lib:libpng16 >= 16.37.0
        lib:libqt5core >= 5.15.2
        lib:libqt5gui >= 5.15.2
        lib:libqt5network >= 5.15.2
        lib:libqt5positioning >= 5.15.2
        lib:libqt5printsupport >= 5.15.2
        lib:libqt5qml >= 5.15.2
        lib:libqt5qmlmodels >= 5.15.2
        lib:libqt5quick >= 5.15.2
        lib:libqt5quickwidgets >= 5.15.2
        lib:libqt5webchannel >= 5.15.2
        lib:libqt5widgets >= 5.15.2
        lib:libsmime3
        lib:libsnappy >= 1.1.8
        lib:libvpx >= 6.4.0
        lib:libwebp >= 7.1.2
        lib:libwebpdemux >= 2.0.8
        lib:libwebpmux >= 3.0.7
        lib:libz >= 1.2.11
}
conflicts {
        qtwebengine
}
urls {
        "https://www.qt.io"
}
source-urls {
# Download
        "https://github.com/threedeyes/qtwebengine-haiku/releases/download/5.15.2-3/qtwebengine-5.15.2-3-x86_64.hpkg#noarchive"
# Download
        "https://github.com/threedeyes/qtwebengine-haiku/releases/download/5.15.2-3/qtwebengine_devel-5.15.2-3-x86_64.hpkg#noarchive"
}
mimesetting files for package qtwebengine_bin-5.15.2-4-x86_64.hpkg ...
creating package qtwebengine_bin-5.15.2-4-x86_64.hpkg ...
----- Package Info ----------------
header size:                     80
heap size:                 86210758
TOC size:                      7360
package attributes size:       1970
total size:                86210838
-----------------------------------
name                    qtwebengine_bin_devel
version                 5.15.2-4
architecture            x86_64
summary                 "Chromium-based rendering library for the Qt5 framework (development files)"
description             "QtWebEngine provides a Web browser engine that integrates Chromium's fast moving web capabilities into Qt."
packager                "FuRuYa7 <mymail@mydomain.org>"
vendor                  "Haiku Project"
licenses {
        "BSD (3-clause)"
        "GNU LGPL v2.1"
}
copyrights {
        "2015-2020 The Qt Company Ltd."
}
provides {
        qtwebengine_bin_devel = 5.15.2 compat >= 5
        devel:libqt5pdf = 5.15.2 compat >= 5
        devel:libqt5pdfwidgets = 5.15.2 compat >= 5
        devel:libqt5webengine = 5.15.2 compat >= 5
        devel:libqt5webenginecore = 5.15.2 compat >= 5
        devel:libqt5webenginewidgets = 5.15.2 compat >= 5
}
requires {
        haiku >= r1~beta3_hrev55774-1
        qtwebengine_bin == 5.15.2 base
}
conflicts {
        qtwebengine_devel
}
urls {
        "https://www.qt.io"
}
source-urls {
# Download
        "https://github.com/threedeyes/qtwebengine-haiku/releases/download/5.15.2-3/qtwebengine-5.15.2-3-x86_64.hpkg#noarchive"
# Location 2
        "https://ports-mirror.haiku-os.org/qtwebengine/qtwebengine-5.15.2-3-x86_64.hpkg#noarchive"
# Download
        "https://github.com/threedeyes/qtwebengine-haiku/releases/download/5.15.2-3/qtwebengine_devel-5.15.2-3-x86_64.hpkg#noarchive"
# Location 2
        "https://ports-mirror.haiku-os.org/qtwebengine/qtwebengine_devel-5.15.2-3-x86_64.hpkg#noarchive"
}
mimesetting files for package qtwebengine_bin_devel-5.15.2-4-x86_64.hpkg ...
creating package qtwebengine_bin_devel-5.15.2-4-x86_64.hpkg ...
----- Package Info ----------------
header size:                     80
heap size:                    64245
TOC size:                     15875
package attributes size:       1114
total size:                   64325
-----------------------------------
waiting for build package qtwebengine_bin-5.15.2-4 to be deactivated
waiting for build package qtwebengine_bin_devel-5.15.2-4 to be deactivated

grabbing qtwebengine_bin-5.15.2-4-x86_64.hpkg and moving it to /boot/home/Git/haikuports/packages/qtwebengine_bin-5.15.2-4-x86_64.hpkg
grabbing qtwebengine_bin_devel-5.15.2-4-x86_64.hpkg and moving it to /boot/home/Git/haikuports/packages/qtwebengine_bin_devel-5.15.2-4-x86_64.hpkg

→「qtwebengine_bin」でパッケージ化に成功しました。今回は2つのパッケージが作成されました。

-

4). 作成されたパッケージを確認:

> ls -1 ~/Git/haikuports/packages/
qtwebengine_bin_devel-5.15.2-4-x86_64.hpkg
qtwebengine_bin-5.15.2-4-x86_64.hpkg

→ノーマル版と開発版になるのかな。

-

5). 両方のパッケージをインストール:

> pkgman install ~/Git/haikuports/packages/qtwebengine_bin-5.15.2-4-x86_64.hpkg
:
[system] Done.

-

> pkgman install ~/Git/haikuports/packages/qtwebengine_bin_devel-5.15.2-4-x86_64.hpkg
:
[system] Done.

-

6). インストールされたか確認:

> pkgman search qtwebengine
Status  Name                     Description                                    
--------------------------------------------------------------------------------
        falkon                   A QtWebEngine browser                          
        falkon_debuginfo         A QtWebEngine browser (debug info)             
        falkon_source            A QtWebEngine browser (source files)           
        pyqtwebengine5           Python bindings for the Qt WebEngine framework 
        pyqtwebengine5_python38  Python bindings for the Qt WebEngine framework 
        pyqtwebengine5_source    Python bindings for the Qt WebEngine framework 
S       qtwebengine_bin          Chromium-based rendering library for the Qt5 fr
S       qtwebengine_bin_devel    Chromium-based rendering library for the Qt5 fr

→ちなみに、「falkon」ブラウザをインストールすると「QtWebEngine」がインストールされます。 ただし、「falkon」はまだ安定していないので使える状態ではありません。

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - ----- ----- -

-

7. 参考: インストールした「qtwebengine_bin」を削除:

-

追記: 上記の項番 6. を実施していなければ、こちらの作業は不要です。

-

1). 上記の項番 6. を実施後、システム更新すると、下記のパッケージの更新が来ました:

qtwebengine_bin 5.15.2-4
qtwebengine_bin_devel 5.15.2-4

→ということは、公式リポジトリにこれらのバイナリがあるということです。 なので、ビルドの必要はなかったということです。

> pkgman search qtwebengine_bin
Status  Name                   Description                                      
--------------------------------------------------------------------------------
S       qtwebengine_bin        Chromium-based rendering library for the Qt5 fram
S       qtwebengine_bin_devel  Chromium-based rendering library for the Qt5 fram

→項番 6. を実施して、パッケージ名に「_bin」が付くということがわかったのが収穫でした。

-

2). HaikuDepot を起動して、「qtweb」で検索すると、

「qtwebengine_bin 5.15.2-4」だけのインストールが確認できました。(_devel も含んだ表示みたい)

-

3). レシピファイルがちゃんと動けば、自動的にインストールされるはずです

-

4). なので、HaikuDepot で「qtwebengine_bin」をアンインストールしました

-

5). まぎらわしいので、下記のファイルは削除しておきました:

> ls -1  /boot/home/Git/haikuports/packages/
qtwebengine_bin_devel-5.15.2-4-x86_64.hpkg
qtwebengine_bin-5.15.2-4-x86_64.hpkg

→削除したのは項番 6. のビルドで作成されたパッケージです。

-

-


まとめ

前回の「Notepadqq-2.0.0-beta」のビルドは、 依存パッケージの「Qt5WebEngine 」が不足しており、Haiku への移植待ちで中断していました。

その後依存パッケージが移植され、すんなりとビルドできました。貢献された人たちに感謝です。

-

ただし、あまりに起動に時間がかかるので、もっとレスポンスの良い別フォークの「notepadqq-1.4.8-ote」の移植に切り替えました。日付の挿入ができないとか、置換に改行が含められない、など欲しい機能がありますが、普通に使うには支障ありません。

-

Haiku で使えるアプリやライブラリがさらに増えて行くと良いですね。

-

-


-

-

    目次

-

「投稿の先頭 へ」

-

-


-

「この目次 の先頭へ」

「本編の目次 に戻る」

-