Budgie(4) Ubuntu Budgie 20.04 にgeany のビルド環境を構築

## はじめに

Ubuntu Budgie 20.04 Daily に[Geany](https://qiita.com/FuRuYa7/items/81c2f7a1449681ea8aaf) をインストールしました。その後[「Markdown プラグイン」](https://plugins.geany.org/markdown.html) を知り、使ってみようとしたらビルドが必要でした。

ということで、ビルドできる環境の構築と学習を兼ねて、先に、Geany アプリをビルドしました。アプリの本体がビルドできれば、そのプラグインのビルドもできるはずです。また、ソースを修正してのカスタマイズにも挑戦できそうです。そのときの備忘録です。


---
#### ビルドした環境

(Ubuntu Budgie 20.04 Daily)

```
$ cat /var/log/installer/media-info
Ubuntu-Budgie 20.04 LTS "Focal Fossa" - Alpha amd64 (20191218)

$ uname -r
5.3.0-24-generic
```


---
Ubuntu のリポジトリからGeany をインストールした場合:

```
$ geany --version
geany 1.36 (Nov 20 2019 以降に次を使用してビルドGTK 3.24.12, GLib 2.63.1)
```

---
今回の、GitHub にあるソースをビルドしてインストールした場合:

```
$ ~/Git/geany/build/bin/geany --version
geany 1.37 (git >= 5cc69b3d) (Dec 22 2019 以降に次を使用してビルドGTK 3.24.13, GLib 2.63.3)
```


---
#### 試しにソースを修正して、「日付を挿入」メニューの項目を簡潔な表現にしてみます。（予定）

学習目的の一時的な修正です。

編集 →「日付を挿入」で表示されるメニュー:

```
- dd.mm.yyyy
- mm.dd.yyyy
- yyyy/mm/dd
- dd.mm.yyyy hh:mm:ss
- mm.dd.yyyy hh:mm:ss
- yyyy/mm/dd hh:mm:ss
- 任意の日付書式を使用する (Shift+Alt+D)
- 任意の日付書式を設定
```
↓簡潔な表現に修正

```
- 任意の日付書式を使う (Shift+Alt+D)
- 任意の日付書式を設定
```


---
## Geany をビルドしてインストール

参考:

[(Trying out development versions of Geany)]
(https://wiki.geany.org/howtos/testing_git) 

[GitHub geany/INSTALL]
(https://github.com/geany/geany/blob/master/INSTALL)
→「INSTALL」ファイルにある説明


---
[GitHub geany/geany]
(https://github.com/geany/geany)

zip をダウンロードしてもいいのですが、今回はgit を使ってダウンロードしました。

クーロンするときのURL:
(https://github.com/geany/geany.git)


---
#### git が使えるかの確認

```
$ git --version
Command 'git' not found, but can be installed with:
sudo apt install git
```
→インストールされていないので、インストールしました:

```
$ sudo apt update
$ sudo apt install git
:
提案パッケージ:
  git-daemon-run | git-daemon-sysvinit git-doc git-el git-email git-gui gitk gitweb git-cvs
  git-mediawiki git-svn
以下のパッケージが新たにインストールされます:
  git git-man liberror-perl

$ git --version
git version 2.24.0
```

---
#### Git を使うための前準備

Git を以前に一度も使ったことがなく、プルリクエスト（ソース管理者への訂正したソースの許可申請？）するかもしれない場合は、事前に最初に一度だけ、名前と電子メールを登録しておく必要があります。（ダウンロードだけなら不要）

$ git config --global user.name "Your Name"
$ git config --global user.email your.email@example.com 


---
### 依存関係がインストールされているかの確認:


#### たぶん、入っていますが、念の為:

```
$ sudo apt update
$ sudo apt install build-essential
:
build-essential はすでに最新バージョン (12.8ubuntu1) です。
```


---
#### gtk-3 でビルドするので:

```
$ sudo apt install libwebkit2gtk-4.0-dev
:
提案パッケージ:
  libcairo2-doc libdatrie-doc freetype2-doc libgirepository1.0-dev libglib2.0-doc libxml2-utils
  libgraphite2-utils libgtk-3-doc libice-doc icu-doc imagemagick libpango1.0-doc libsm-doc
  libsoup2.4-doc sqlite3-doc libthai-doc libwayland-doc libx11-doc libxcb-doc libxext-doc
以下のパッケージが新たにインストールされます:
  gir1.2-harfbuzz-0.0 icu-devtools libatk-bridge2.0-dev libatk1.0-dev libatspi2.0-dev libblkid-dev
  libbrotli-dev libcairo-script-interpreter2 libcairo2-dev libdatrie-dev libdbus-1-dev libdrm-dev
  libegl1-mesa-dev libepoxy-dev libexpat1-dev libffi-dev libfontconfig1-dev libfreetype-dev
  libfreetype6-dev libfribidi-dev libgdk-pixbuf2.0-dev libgl1-mesa-dev libgles1 libglib2.0-dev
  libglib2.0-dev-bin libglvnd-core-dev libglvnd-dev libgraphite2-dev libgtk-3-dev libharfbuzz-dev
  libharfbuzz-gobject0 libice-dev libicu-dev libjavascriptcoregtk-4.0-dev libmount-dev libopengl0
  libpango1.0-dev libpcre16-3 libpcre2-32-0 libpcre2-dev libpcre2-posix0 libpcre3-dev libpcre32-3
  libpcrecpp0v5 libpixman-1-dev libpng-dev libpng-tools libpsl-dev libpthread-stubs0-dev
  libselinux1-dev libsepol1-dev libsm-dev libsoup2.4-dev libsqlite3-dev libthai-dev libwayland-bin
  libwayland-dev libwebkit2gtk-4.0-dev libx11-dev libx11-xcb-dev libxau-dev libxcb-dri2-0-dev
  libxcb-dri3-dev libxcb-glx0-dev libxcb-present-dev libxcb-randr0-dev libxcb-render0-dev
  libxcb-shape0-dev libxcb-shm0-dev libxcb-sync-dev libxcb-xfixes0-dev libxcb1-dev libxcomposite-dev
  libxcursor-dev libxdamage-dev libxdmcp-dev libxext-dev libxfixes-dev libxft-dev libxi-dev
  libxinerama-dev libxkbcommon-dev libxml2-dev libxrandr-dev libxrender-dev libxshmfence-dev
  libxtst-dev libxxf86vm-dev mesa-common-dev pango1.0-tools python3-distutils python3-lib2to3 uuid-dev
  wayland-protocols x11proto-composite-dev x11proto-core-dev x11proto-damage-dev x11proto-dev
  x11proto-fixes-dev x11proto-input-dev x11proto-randr-dev x11proto-record-dev x11proto-xext-dev
  x11proto-xf86vidmode-dev x11proto-xinerama-dev xorg-sgml-doctools xtrans-dev zlib1g-dev
```

---
#### autogen.sh を使うので:

```
$ sudo apt install autoconf intltool libtool automake
:
提案パッケージ:
  autoconf-archive gnu-standards autoconf-doc gettext-doc autopoint libasprintf-dev libgettextpo-dev
  libtool-doc gfortran | fortran95-compiler gcj-jdk m4-doc
以下のパッケージが新たにインストールされます:
  autoconf automake autotools-dev gettext intltool libltdl-dev libsigsegv2 libtool m4
```


---
#### ユーザーマニュアルの作成で、Docutils (rst2html) が必要なので:

```
$ sudo apt install python3-docutils
:
提案パッケージ:
  docutils-doc fonts-linuxlibertine | ttf-linux-libertine texlive-lang-french texlive-latex-base
  texlive-latex-recommended sgml-base-doc debhelper
以下のパッケージが新たにインストールされます:
  docutils-common python3-docutils python3-roman sgml-base xml-core
:
update-alternatives: /usr/bin/rst2html (rst2html) を提供するために自動モードで /usr/share/docutils/scripts/python3/rst2html を使います
```
→autogen.sh の実行の後半で、ユーザーマニュアルを作成するための、Docutils の rst2html（HTML ドキュメントの生成ツール）がインストールされているかがチェックされます。

説明を読むと:

rst2html がない場合は配布 tarball （マニュアルのビルド済みバージョン）を使うことになりますが、Git からビルドする場合、そのビルド済みバージョンは含まれていません。なので、rst2html が必要になり、インストールされていないとエラーで停止します。

ユーザーマニュアルのビルドをスキップするには、configure フラグ「--disable-html-docs」を使います。これにより、ユーザーマニュアルのローカルバージョンはインストールされず、Geany は要求されたときに、代わりにオンラインバージョンを開きます。

---
今回は素直に、ローカルのユーザーマニュアル(html) を作成しました。

ヘルプ→ヘルプ (file:///usr/share/doc/geany/html/index.html)
→表示されるヘルプは英語ですが、ブラウザで表示されるので「Google 翻訳」が使えました。
（インストール時に作成されているので）当然ながら、最新バージョンのドキュメントです。

Date: 	2019-09-28
Version: 	1.37

参考:

[geany/geany README.rst Installation from sources]
(https://github.com/geany/geany)


---
#### Git 用のフォルダを準備します

ファイルマネージャにて、ダウンロード先にする「~/Git」フォルダ（任意）を作成しておきます。


---
#### ソースの入手

```
$ cd ~/Git/
$ git clone https://github.com/geany/geany.git
```

確認:

```
$ cd ~/Git/geany/

$ ls -a
.            COPYING             README            configure.ac        geany.nsi.in      scintilla
..           ChangeLog           README.I18N       ctags               geany.pc.in       scripts
.git         ChangeLog.pre-1-22  README.Packagers  data                geany_private.rc  src
.gitignore   HACKING             README.rst        doc                 icons             tests
.travis.yml  INSTALL             THANKS            geany.desktop.in    m4
AUTHORS      Makefile.am         TODO              geany.exe.manifest  plugins
COMMITTERS   NEWS                autogen.sh        geany.gladep        po
```
→「.git」フォルダがあるのがポイント。これがzip ダウンロードとの大きな違い。
この場所で（プルリクエストするための）git コマンドが使えます。
autogen.sh とconfigure.ac が今回は重要でした。configure はなくて、その後に作成されます。


---
#### geany ソースの手直し（個人的な修正）

試しに、メニューの項目をひとつ、簡潔な言葉使いに修正してみました。

- 任意の日付書式を使用する (Shift+Alt+D)

↓ 修正

- 任意の日付書式を使う (Shift+Alt+D)


---
ソースの修正箇所の手がかりを探します:

```
$ gedit ~/Git/geany/po/ja.po
```

「任意の日付書式を使用」で検索

```
#: ../src/ui_utils.c:726 ../src/ui_utils.c:814
msgid "_Use Custom Date Format"
msgstr "任意の日付書式を使用する(_U)"		←5346 行目
```


---
#### ~/Git/geany/po/ja.po を修正

```
$ cp  ~/Git/geany/po/ja.po ~/Git/geany/po/ja.po-ORG
$ gedit ~/Git/geany/po/ja.po
```

5346 行目を確認:

```
msgstr "任意の日付書式を使用する(_U)"
```
↓修正（簡潔な表現に修正）

```
msgstr "任意の日付書式を使う(_U)"
```
→上書き保存


---
#### ビルド 用のフォルダを準備します

```
$ cd ~/Git/geany/
$ mkdir build
$ ls -a
.            COPYING             README            build               geany.gladep      po
..           ChangeLog           README.I18N       configure.ac        geany.nsi.in      scintilla
.git         ChangeLog.pre-1-22  README.Packagers  ctags               geany.pc.in       scripts
.gitignore   HACKING             README.rst        data                geany_private.rc  src
.travis.yml  INSTALL             THANKS            doc                 icons             tests
AUTHORS      Makefile.am         TODO              geany.desktop.in    m4
COMMITTERS   NEWS                autogen.sh        geany.exe.manifest  plugins
```
→自動でフォルダは作成されました。これは要らなかったみたい。ただし、どこにインストールするかの意識付けと、指定間違いに気づくには良さそう。間違っていればmake install しても空のままです。


---
#### 構成スクリプトを実行して、システムのパッケージを設定

ドキュメントに従って、./autogen.sh を使いました。
configure が作成され、 Makefileが生成されます。

--prefix オプションで指定している、`/usr/home/USER_NAME/Git/geany/build`（絶対パス）の下にすべてのファイルがインストールされます。

うまくいけば、本番として、--prefix=/usr を指定してビルドし直すか、バージョン違いとしてそのまま置いておきます。
今回は、メニューのカスタマイズをしたので、その確認として使いました。ホームフォルダにあるので作業が楽です。


---
#### 1. 構成スクリプトを実行

注: /home/USER_NAME は各自書き換えてください。

```
$ cd ~/Git/geany/
$ ./autogen.sh --prefix=/home/USER_NAME/Git/geany/build
:
Processing configure.ac
Copying file po/Makefile.in.in
:
--------------------------------------------------------------
Install Geany in                   : /home/USER_NAME/Git/geany/build
Compiling Git revision             : 5cc69b3d
Using GTK version                  : 3.24.13
Enable binary relocation           : no
Build with plugin support          : yes
Use (UNIX domain) socket support   : yes
Use virtual terminal support (VTE) : yes
Build HTML documentation           : yes
Build PDF documentation            : no
Build API documentation            : no
Generate GtkDoc header             : no

Configuration is done OK.
Now type 'make' to compile.
```


---
#### 2. Geany をコンパイル（ソースからビルド）

```
$ cd ~/Git/geany/
$ make
```
→少し時間がかかります。


---
#### 3. プログラムとデータファイルとドキュメントをインストール

```
$ make install
```
→ホームフォルダ内にインストールするので、make install にsudo は要りません。
付けるとroot 権限になり、結果としてフォルダがシステムファイルとして書き込み保護されます。逆にホームフォルダでないときは書き込むためにsudo が必要です。


---
#### テストでビルドした geany の起動:

```
$ ~/Git/geany/build/bin/geany
```

![2tu-geany.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/489751/1c6e00f0-478e-36e3-626a-8ff953d6d524.jpeg)
→左がビルドのテスト用、右が本番用です。

→本番でインストールしているgenay で設定したテーマ（定義ファイル ~/.config/geany/geany.conf ）や、ファイルの履歴が使われて立ち上がりました。
→新旧のアプリが同じ設定を共有しています。

起動メニューに登録されていないので、今は端末から起動するしかありません。起動されたアプリのアイコンは、ちゃんとGeany のアイコンです。


テストでビルドした geany のバージョン:

```
$ ~/Git/geany/build/bin/geany --version
geany 1.37 (git >= 5cc69b3d) (Dec 22 2019 以降に次を使用してビルドGTK 3.24.13, GLib 2.63.3)
```

本番としてインストールされていた geany のバージョン:

```
$ geany --version
geany 1.36 (Nov 20 2019 以降に次を使用してビルドGTK 3.24.12, GLib 2.63.1)
```


---
ちなみに、アプリは `build/ フォルダ配下` にインストールされます。:

デスクトップファイルは、~/Git/geany/build/share/applications
アイコンは、~/Git/geany/build/share/icons/Tango/
　　および、~/Git/geany/build/share/icons/hicolor/
に置かれています。

このビルドしたgeany を使うなら、これらをシステムに配置できます。


---
#### ビルドの取り消し方法 1:

```
$ cd ~/Git/geany/
$ make clean
```
→ソースコードディレクトリ（ここでは、~/Git/geany/）から、プログラムバイナリ、オブジェクトファイルを削除できます。(./autogen.sh のみ実行した状態に戻ります。)  ビルドがうまく行かなかったときに、やり直すときに実行します。


---
#### ビルドの取り消し方法 2:

```
$ cd ~/Git/geany/
$ make distclean
```
→ソースコードディレクトリ（ここでは、~/Git/geany/）から、
プログラムバイナリ、オブジェクトファイル、「configure」で作成されたファイルを削除できます。

本番用をビルドし直すときに、事前にこれを実行しました。残骸のクリア。
でも、プログラムバイナリなどは残っているので、build フォルダを削除しておくのが良さそう。


---
#### ビルドが成功したので、テスト用のビルド結果をきれいにしました:

```
$ cd ~/Git/geany/
$ make distclean
```

もし、テストしたものを本番として再ビルドするときは、本番にインストールしているgeany をアンインストールします。
そして、下記を実行します。

今回は、ビルド環境を作るのが目的で、アプリの更新があることも必要です。なので、下記の本番用のビルドは実行しません。


#### 本番用のビルドとインストール

```
$ cd ~/Git/geany/
$ ./autogen.sh --prefix=/usr
$ make
$ sudo make install
```
→make は少し時間がかかります。


---
#### 気づいたこと

気がついたのは、geany --version とすると、GitHub からクーロンしたときの番号が表示されること。

```
$ geany --version
geany 1.37 (git >= 5cc69b3d) (Dec  9 2019 以降に次を使用してビルドGTK 3.24.12, GLib 2.63.1)

$ cd ~/Git/geany/
$ git log
commit 5cc69b3d672...85 (HEAD -> master, origin/master, origin/HEAD)
:
q
```
→品質保持をしていくためなのか、どうやってビルドしたとか、ソースの出元が追跡できます。こういうのは初めてみました。


---
### まとめ

ビルドの依存関係を調べるのに、ドキュメントの場所がわからなかったり、英語だったりで少し手間取りました。

次回は、「Markdown」プラグインのビルドにトライ。



（[次の投稿に続く]
(https://qiita.com/FuRuYa7/items/764c0ce0a2b7e6949c34)）


---

今までの**投稿一覧**は 「[ここ](https://qiita.com/FuRuYa7/items/f82312cd7670408dfa8b#%E6%8A%95%E7%A8%BF%E4%B8%80%E8%A6%A7) 」


-