2023/11/12
Inkscape ビルド苦闘記
東大 eeic 3A の実験の一つに『大規模ソフトウェアを手探る』というものがあります。
ざっくり言うと、任意の OSS のコードを読んで、機能を(勝手に)拡張したり、 Issue を直したりしようという実験です。
この実験で、我々の班は Inkscape という描画ソフトの機能拡張をしました。
本当は Chromium をやりたかったのですが、実験でやるにはビルドに時間がかかりすぎるなどの障壁があったので……(そのうち commit してみ たいですね)
という訳で、実験レポート(ブログ)その 1 、 Inkscape を macOS でビルドしようと苦闘した挙句、上手く行かなかったという話です。
0. 作業の前に
公式ドキュメント
公式ドキュメントは ↓ です。ほぼほぼこの手順に従いました。
https://wiki.inkscape.org/wiki/index.php?title=CompilingMacOsX
Homebrew or MacPorts ?
Inkscape では、依存しているパッケージのインストールに用いるパッケージマネージャーとして、 MacPorts あるいは Homebrew を選ぶことができます。
今回は、普段開発で Homebrew を使っているので、(共存させないほうが良いらしいですし) Homebrew を使うことにしました。
環境
要は Intel の CPU がのっている MacBook Pro に、 Homebrew が入っています。
1$ system_profiler SPHardwareDataType 2Hardware: 3 4 Hardware Overview: 5 6 Model Name: MacBook Pro 7 Model Identifier: MacBookPro16,2 8 Processor Name: Quad-Core Intel Core i7 9(略) 10$ sw_vers 11ProductName: macOS 12ProductVersion: 13.6 13BuildVersion: 22G120 14$ brew -v 15Homebrew 4.1.16
1. brew install
必要なパッケージをインストールします。
1$ brew install \ 2 adwaita-icon-theme \ 3 bdw-gc \ 4 boost \ 5 cairomm \ 6 ccache \ 7 cmake \ 8 double-conversion \ 9 gettext \ 10 gsl \ 11 gspell \ 12 gtk-mac-integration \ 13 gtkmm3 \ 14 imagemagick \ 15 intltool \ 16 lcms2 \ 17 libomp \ 18 libsoup@2 \ 19 libxslt \ 20 ninja \ 21 poppler \ 22 potrace
💡 path が通っていない
command が見つからないというエラー ( -bash: brew: command not found
) が出たので、 path を通しました。
1$ which brew 2/usr/local/bin/brew 3$ export PATH="/usr/local/bin:$PATH"
2. clone
データを置きたいところに移動した上で GitLab からレポジトリを clone してきます。
1$ git clone https://gitlab.com/inkscape/inkscape.git 2$ cd inkscape/ 3$ git submodule init && git submodule update
3. cmake
ここの手順は公式ページの記載通りに行うと、 Intel の CPU を使っている場合、詰まってしまうので注意が必要です。公式の手順から変更が必要な点はコメントに書いてある通りです。
1$ LIBPREFIX="/opt/homebrew" # LIBPREFIX="/usr/local/" for intel CPU 2$ export PATH="$LIBPREFIX/bin:/usr/bin:/bin:/usr/sbin:/sbin" 3$ export PKG_CONFIG_PATH="$LIBPREFIX/opt/icu4c/lib/pkgconfig" 4$ export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$LIBPREFIX/opt/libsoup@2/lib/pkgconfig" 5$ export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$LIBPREFIX/opt/libxslt/lib/pkgconfig" 6$ export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$LIBPREFIX/opt/libxml2/lib/pkgconfig" 7$ PREFIX="$PWD/install-prefix" 8$ mkdir -p build 9$ cd build 10$ cmake \ 11 -G Ninja \ 12 -DCMAKE_SHARED_LINKER_FLAGS="-L$LIBPREFIX/lib" \ 13 -DCMAKE_EXE_LINKER_FLAGS="-L$LIBPREFIX/lib" \ 14 -DCMAKE_INSTALL_PREFIX=$PREFIX \ 15 -DCMAKE_C_COMPILER_LAUNCHER=ccache \ 16 -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ 17 -DWITH_DBUS=OFF \ 18 ..
💡 "libsoup-2.4" というパッケージが見つからない
メッセージ
上記の手順を公式通りにやった場合は、以下のようなエラーが出ます。(以下、パスの一部を <Path>
と表記しています。)
1$ cmake \ 2 -G Ninja \ 3 -DCMAKE_SHARED_LINKER_FLAGS="-L$LIBPREFIX/lib" \ 4 -DCMAKE_EXE_LINKER_FLAGS="-L$LIBPREFIX/lib" \ 5 -DCMAKE_INSTALL_PREFIX=$PREFIX \ 6 -DCMAKE_C_COMPILER_LAUNCHER=ccache \ 7 -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ 8 -DWITH_DBUS=OFF \ 9 .. 10CMake Deprecation Warning at CMakeLists.txt:2 (cmake_minimum_required): 11 Compatibility with CMake < 3.5 will be removed from a future version of 12 CMake. 13 14 Update the VERSION argument <min> value or use a ...<max> suffix to tell 15 CMake that the project does not need compatibility with older versions. 16 17 18------------------------------ 19Building Makefile for Inkscape 20------------------------------ 21Source Dir: <Path> 22Binary Dir: <Path> 23-- Mac OS X build detected, setting default features 24CMake Warning at /usr/local/Cellar/cmake/3.27.7/share/cmake/Modules/Platform/Darwin-Initialize.cmake:306 (message): 25 Ignoring CMAKE_OSX_SYSROOT value: 26 27 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX12.1.sdk 28 29 because the directory does not exist. 30Call Stack (most recent call first): 31 /usr/local/Cellar/cmake/3.27.7/share/cmake/Modules/CMakeSystemSpecificInitialize.cmake:34 (include) 32 CMakeLists.txt:35 (project) 33 34 35-- Creating build files in: <Path> 36-- Checking for modules 'harfbuzz;pangocairo>=1.44;pangoft2;fontconfig;gsl;gmodule-2.0;libsoup-2.4>=2.42;bdw-gc;lcms2' 37-- No package 'libsoup-2.4' found 38CMake Error at /usr/local/Cellar/cmake/3.27.7/share/cmake/Modules/FindPkgConfig.cmake:607 (message): 39 A required package was not found 40Call Stack (most recent call first): 41 /usr/local/Cellar/cmake/3.27.7/share/cmake/Modules/FindPkgConfig.cmake:829 (_pkg_check_modules_internal) 42 CMakeScripts/DefineDependsandFlags.cmake:122 (pkg_check_modules) 43 CMakeLists.txt:147 (include)
状況の確認
1$ brew list # パッケージがインストールされているかの確認 2==> Formulae 3...(略) 4libsoup 5libsoup@2 6...(