📈

MacにNgraph-GTKをインストールしようとしたらなかなか大変だった件

に公開

概要

大学の講義でNgraphを使うことになりました。
指示されたのは「Windowsの人はこのリンクからダウンロード、Macの人は自分でなんとかしてね」というやつ。
現役大学生はWindowsが多いのかもしれないのですが、Webエンジニアをやっていると周りはほぼ全員Macユーザーでして、自分のように社会人になってから学び直しをしている層はMacを使ってる人も多いのかなと思います。

ネットで「ngraph mac インストール」と検索しても、QiitaやZennの記事がほとんど出てこない状況で、検索で出てきたとしても古い情報ばかりで、最新のmacOS + Xcodeの環境では同じ手順では動かない状態でした。

この記事では、実際に詰まったポイントとその解決策を記録しておきます。

ngraphとは

Ngraph(エヌグラフ)は、研究者やエンジニア向けの2次元グラフ作成ソフトウェアです。
データをプロットしてグラフを作成し、PostScript / SVG / PNG / PDF形式で出力できます。
日本の大学の理系講義でよく使われており、特に物理・化学・工学系の実験レポート作成で活躍するらしいです。

現在はGTKベースのGUIを持つ Ngraph-GTK がメインで開発されており、
リポジトリは GitHub (htrb/ngraph-gtk) に移っています。

環境

項目 バージョン
macOS 15.6.1 (Sequoia)
Xcode Command Line Tools 16.4.0
Homebrew 5.1.7
ngraph-gtk 6.09.11

詰まったポイントと解決策

1. Command Line Toolsのエラー

まず最初に以下のコマンドを実行。

brew install ngraph-gtk-launcher

すると途中でこんなエラーが出た。

Error: Xcode alone is not sufficient on Sequoia.
Install the Command Line Tools:
  xcode-select --install

言われた通りに実行してみた。

xcode-select --install

ポップアップが出るので「インストール」をクリックして完了まで待つ。大体10分くらい。
完了したら以下で確認。

xcode-select -p
pkgutil --pkg-info=com.apple.pkg.CLTools_Executables | grep version

/Applications/Xcode.app/Contents/Developer と最新バージョンが表示されればOK。

次にXcodeのライセンス同意をしていないとHomebrewが弾くことがあるので、以下も実行しておく。

sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
sudo xcodebuild -license accept

2. gmakeが見つからないエラー

再度 brew install ngraph-gtk-launcher を実行すると、今度は別のエラーが出た。

Error: Failed executing: gmake

ngraph-gtkのビルドにはGNU makeが必要なので、別途インストールする。

brew install make

インストール後、PATHを通す。

echo 'export PATH="/opt/homebrew/opt/make/libexec/gnubin:$PATH"' >> ~/.zshrc
source ~/.zshrc

3. -std=gnu23" のクォートバグ(山場)

再度実行するとまたgmakeで失敗。ログを確認すると:

error: invalid value 'gnu23"' in '-std=gnu23"'

-std=gnu23 の末尾に余分な " が混入しており、コンパイラが弾いてしまってる状態でした。
config.statuslibtool に問題があるが、gmake を実行するたびに config.status が再実行されて上書きされてしまうため、両方を修正する必要が出てきました。

まず --keep-tmp オプションでビルドし、一時ディレクトリを残す。

# 標準のHomebrewコマンドではエラーになる場合があるので開発者向けの --debug モードで停止させて確認する
brew install --keep-tmp ngraph-gtk

# もしくは環境変数を利用するケースの方が安全
HOMEBREW_KEEP_TMP=1 brew install ngraph-gtk
cd /private/tmp/ngraph-gtk-xxxxxxxxx/

config.statuslibtool を修正する。

python3 -c "
with open('config.status', 'r') as f:
    content = f.read()
content = content.replace('S[\"CC\"]=\"clang -std=gnu23\"', 'S[\"CC\"]=\"clang\"')
with open('config.status', 'w') as f:
    f.write(content)
"

python3 -c "
with open('libtool', 'r') as f:
    content = f.read()
content = content.replace('CC=\"clang -std=gnu23\"', 'CC=\"clang\"')
content = content.replace('LTCC=\"clang -std=gnu23\"', 'LTCC=\"clang\"')
with open('libtool', 'w') as f:
    f.write(content)
"

修正できたか確認。

grep -rn 'gnu23"' .

何も表示されなければOK。


4. free_history_entry が未定義エラー

クォートバグを突破すると、次は別のエラーが出た😣

error: call to undeclared function 'free_history_entry'

macOSのreadlineライブラリはBSD系のため free_history_entry が存在しない。
src/shell.c を直接修正する。

sed -i '' 's/free_history_entry(entry)/free(entry)/g' src/shell.c
grep -n 'free_history_entry' src/shell.c

grep で何も表示されなければ修正成功。

そのまま続けてビルドとインストールを実行する。

gmake
sudo gmake install

エラーなく完了すれば成功です。

結果的に正解だった手順まとめ

試行錯誤を省いて、最終的に成功した手順をまとめる。
同じ環境の人はここだけ見れば動くはず。(たぶん)

前提

  • Homebrewがインストール済みであること
  • Xcodeがインストール済みであること(App Storeから入手可能)

手順

① Command Line Toolsのインストールとライセンス同意

xcode-select --install
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
sudo xcodebuild -license accept

② gmakeのインストールとPATH設定
※既にパスがある場合は不要です

brew install make
echo 'export PATH="/opt/homebrew/opt/make/libexec/gnubin:$PATH"' >> ~/.zshrc
source ~/.zshrc

③ ngraph-gtkを一時ディレクトリを残してビルド

brew install --keep-tmp ngraph-gtk

失敗するので一時ディレクトリに移動する。
ls /private/tmp/ でディレクトリ名を確認すること)

cd /private/tmp/ngraph-gtk-xxxxxxxxx/

④ クォートバグの修正

python3 -c "
with open('config.status', 'r') as f:
    content = f.read()
content = content.replace('S[\"CC\"]=\"clang -std=gnu23\"', 'S[\"CC\"]=\"clang\"')
with open('config.status', 'w') as f:
    f.write(content)
"

python3 -c "
with open('libtool', 'r') as f:
    content = f.read()
content = content.replace('CC=\"clang -std=gnu23\"', 'CC=\"clang\"')
content = content.replace('LTCC=\"clang -std=gnu23\"', 'LTCC=\"clang\"')
with open('libtool', 'w') as f:
    f.write(content)
"

free_history_entry の修正

sed -i '' 's/free_history_entry(entry)/free(entry)/g' src/shell.c

⑥ ビルドとインストール

gmake
sudo gmake install

⑦ 起動確認

# Intelの人はこっち
/usr/local/Cellar/ngraph-gtk/6.09.11/bin/ngraph

# Apple Siliconも可能
$(brew --prefix ngraph-gtk)/bin/ngraph

GUIが起動すれば成功。

⑧ PATHを通して次回から ngraph だけで起動できるようにする

echo 'export PATH="$(brew --prefix make)/libexec/gnubin:$PATH"' >> ~/.zshrc
echo 'export PATH="$(brew --prefix ngraph-gtk)/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc

次回以降は ngraph だけで起動できるように🎉

おわりに

かなり苦労しましたが、なんとかMacでNgraphを起動させることができました。

今回のつまずきのポイントをまとめると:

  • macOS Sequoia + Xcode 16系の環境では、-std=gnu23" というクォートバグが発生する
  • macOSのreadlineライブラリはBSD系のため free_history_entry が使えない

「ngraph mac インストール」で検索してもあまり情報が出てこない中、同じ境遇のWebエンジニアや社会人学生の助けに少しでもなれれば幸いです。


後日談

Issueを立てたところ、すぐに対応してくださいました。
https://github.com/htrb/ngraph-gtk/issues/9

Discussion