Difference between revisions of "Hacking:Building/Windows"
Lillolollo (Talk | contribs) |
Lillolollo (Talk | contribs) (→If you want to build gimp master) |
||
(33 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
− | + | The main GIMP building instructions are at [[Hacking:Building]]. This page is for Windows-specific additions to that page. | |
− | Note: the instructions are not always kept up to date | + | Note: the instructions are not always kept up to date. The primary development platform is the Debian Testing GNU/Linux distribution, so the very latest code from Git might not always build on other platforms. |
== Building GIMP natively under Windows using MSYS2 == | == Building GIMP natively under Windows using MSYS2 == | ||
− | + | Msys2 is a POSIX environment with basically everything you would find on a Linux system (shell, package manager, GCC…). It allows to use POSIX tools to build Windows softwares. | |
− | === Setting up | + | === Setting up the environment === |
− | First, '''follow the installation instructions''' for msys2 available at [https://msys2.github.io | + | First, '''follow the installation instructions''' for msys2 available at [https://msys2.github.io msys2.github.io]. |
− | + | To open a terminal, you need to execute <code>msys2.exe</code> or <code>mingw64.exe</code> | |
− | + | ||
− | + | Update the system : | |
− | + | pacman -Syyuu | |
− | + | ||
− | + | ||
− | + | If the shell tells you to close the terminal, close MSYS2 and run it again. That is a normal procedure. | |
− | + | === Install the dependencies === | |
− | + | ||
− | + | ==== If you want to build gimp 2.10 ==== | |
− | + | If you have Windows 64bits: | |
+ | pacman -S --needed \ | ||
+ | base-devel \ | ||
+ | git \ | ||
+ | mingw-w64-x86_64-toolchain \ | ||
+ | mingw-w64-x86_64-asciidoc \ | ||
+ | mingw-w64-x86_64-drmingw \ | ||
+ | mingw-w64-x86_64-gexiv2 \ | ||
+ | mingw-w64-x86_64-ghostscript \ | ||
+ | mingw-w64-x86_64-glib-networking \ | ||
+ | mingw-w64-x86_64-graphviz \ | ||
+ | mingw-w64-x86_64-gtk2 \ | ||
+ | mingw-w64-x86_64-gobject-introspection \ | ||
+ | mingw-w64-x86_64-iso-codes \ | ||
+ | mingw-w64-x86_64-json-c \ | ||
+ | mingw-w64-x86_64-json-glib \ | ||
+ | mingw-w64-x86_64-lcms2 \ | ||
+ | mingw-w64-x86_64-lensfun \ | ||
+ | mingw-w64-x86_64-libheif \ | ||
+ | mingw-w64-x86_64-libraw \ | ||
+ | mingw-w64-x86_64-libspiro \ | ||
+ | mingw-w64-x86_64-libwebp \ | ||
+ | mingw-w64-x86_64-libwmf \ | ||
+ | mingw-w64-x86_64-meson \ | ||
+ | mingw-w64-x86_64-mypaint-brushes \ | ||
+ | mingw-w64-x86_64-openexr \ | ||
+ | mingw-w64-x86_64-poppler \ | ||
+ | mingw-w64-x86_64-python2-pygtk \ | ||
+ | mingw-w64-x86_64-SDL2 \ | ||
+ | mingw-w64-x86_64-suitesparse \ | ||
+ | mingw-w64-x86_64-xpm-nox | ||
− | + | If you have Windows 32 bit: | |
− | + | pacman -S --needed \ | |
+ | base-devel \ | ||
+ | git \ | ||
+ | mingw-w64-i686-toolchain \ | ||
+ | mingw-w64-i686-asciidoc \ | ||
+ | mingw-w64-i686-drmingw \ | ||
+ | mingw-w64-i686-gexiv2 \ | ||
+ | mingw-w64-i686-ghostscript \ | ||
+ | mingw-w64-i686-glib-networking \ | ||
+ | mingw-w64-i686-graphviz \ | ||
+ | mingw-w64-i686-gtk2 \ | ||
+ | mingw-w64-i686-gobject-introspection \ | ||
+ | mingw-w64-i686-iso-codes \ | ||
+ | mingw-w64-i686-json-c \ | ||
+ | mingw-w64-i686-json-glib \ | ||
+ | mingw-w64-i686-lcms2 \ | ||
+ | mingw-w64-i686-lensfun \ | ||
+ | mingw-w64-i686-libheif \ | ||
+ | mingw-w64-i686-libraw \ | ||
+ | mingw-w64-i686-libspiro \ | ||
+ | mingw-w64-i686-libwebp \ | ||
+ | mingw-w64-i686-libwmf \ | ||
+ | mingw-w64-i686-meson \ | ||
+ | mingw-w64-i686-mypaint-brushes \ | ||
+ | mingw-w64-i686-openexr \ | ||
+ | mingw-w64-i686-poppler \ | ||
+ | mingw-w64-i686-python2-pygtk \ | ||
+ | mingw-w64-i686-SDL2 \ | ||
+ | mingw-w64-i686-suitesparse \ | ||
+ | mingw-w64-i686-xpm-nox | ||
− | + | ==== If you want to build gimp master ==== | |
− | + | If you have Windows 64bits: | |
+ | pacman -S --needed \ | ||
+ | base-devel \ | ||
+ | git \ | ||
+ | mingw-w64-x86_64-toolchain \ | ||
+ | mingw-w64-x86_64-appstream-glib \ | ||
+ | mingw-w64-x86_64-asciidoc \ | ||
+ | mingw-w64-x86_64-drmingw \ | ||
+ | mingw-w64-x86_64-gexiv2 \ | ||
+ | mingw-w64-x86_64-ghostscript \ | ||
+ | mingw-w64-x86_64-glib-networking \ | ||
+ | mingw-w64-x86_64-graphviz \ | ||
+ | mingw-w64-x86_64-gtk3 \ | ||
+ | mingw-w64-x86_64-gobject-introspection \ | ||
+ | mingw-w64-x86_64-iso-codes \ | ||
+ | mingw-w64-x86_64-json-c \ | ||
+ | mingw-w64-x86_64-json-glib \ | ||
+ | mingw-w64-x86_64-lcms2 \ | ||
+ | mingw-w64-x86_64-lensfun \ | ||
+ | mingw-w64-x86_64-libarchive \ | ||
+ | mingw-w64-x86_64-libheif \ | ||
+ | mingw-w64-x86_64-libraw \ | ||
+ | mingw-w64-x86_64-libspiro \ | ||
+ | mingw-w64-x86_64-libwebp \ | ||
+ | mingw-w64-x86_64-libwmf \ | ||
+ | mingw-w64-x86_64-luajit \ | ||
+ | mingw-w64-x86_64-maxflow \ | ||
+ | mingw-w64-x86_64-meson \ | ||
+ | mingw-w64-x86_64-mypaint-brushes \ | ||
+ | mingw-w64-x86_64-openexr \ | ||
+ | mingw-w64-x86_64-poppler \ | ||
+ | mingw-w64-x86_64-python3-gobject \ | ||
+ | mingw-w64-x86_64-SDL2 \ | ||
+ | mingw-w64-x86_64-suitesparse \ | ||
+ | mingw-w64-x86_64-vala \ | ||
+ | mingw-w64-x86_64-xpm-nox | ||
− | + | If you have Windows 32bits: | |
− | + | pacman -S --needed \ | |
− | + | base-devel \ | |
− | + | git \ | |
− | + | mingw-w64-i686-toolchain \ | |
− | If you have Windows | + | mingw-w64-i686-appstream-glib \ |
− | + | mingw-w64-i686-asciidoc \ | |
− | pacman -S | + | mingw-w64-i686-drmingw \ |
− | + | mingw-w64-i686-gexiv2 \ | |
− | git \ | + | mingw-w64-i686-ghostscript \ |
− | mingw-w64- | + | mingw-w64-i686-glib-networking \ |
− | mingw-w64- | + | mingw-w64-i686-graphviz \ |
− | + | mingw-w64-i686-gtk3 \ | |
− | + | mingw-w64-i686-gobject-introspection \ | |
− | + | mingw-w64-i686-iso-codes \ | |
− | + | mingw-w64-i686-json-c \ | |
− | + | mingw-w64-i686-json-glib \ | |
− | + | mingw-w64-i686-lcms2 \ | |
− | + | mingw-w64-i686-lensfun \ | |
− | + | mingw-w64-i686-libarchive \ | |
− | + | mingw-w64-i686-libheif \ | |
− | + | mingw-w64-i686-libraw \ | |
− | + | mingw-w64-i686-libspiro \ | |
− | + | mingw-w64-i686-libwebp \ | |
− | + | mingw-w64-i686-libwmf \ | |
− | + | mingw-w64-i686-luajit \ | |
− | + | mingw-w64-i686-maxflow \ | |
− | + | mingw-w64-i686-meson \ | |
− | + | mingw-w64-i686-mypaint-brushes \ | |
− | + | mingw-w64-i686-openexr \ | |
− | + | mingw-w64-i686-poppler \ | |
− | + | mingw-w64-i686-python3-gobject \ | |
− | + | mingw-w64-i686-SDL2 \ | |
− | + | mingw-w64-i686-suitesparse \ | |
− | + | mingw-w64-i686-vala \ | |
− | + | mingw-w64-i686-xpm-nox | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | mingw-w64-i686-asciidoc \ | + | |
− | mingw-w64-i686-drmingw \ | + | |
− | mingw-w64-i686-gexiv2 \ | + | |
− | mingw-w64-i686-ghostscript \ | + | |
− | mingw-w64-i686-glib-networking \ | + | |
− | mingw-w64-i686-graphviz \ | + | |
− | mingw-w64-i686- | + | |
− | mingw-w64-i686 | + | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | mingw-w64- | + | |
− | + | ||
− | + | ||
− | mingw-w64- | + | |
− | mingw-w64- | + | |
− | mingw-w64- | + | |
− | mingw-w64- | + | |
− | mingw-w64- | + | |
− | mingw-w64- | + | |
− | mingw-w64- | + | |
− | mingw-w64- | + | |
− | mingw-w64- | + | |
− | mingw-w64- | + | |
− | mingw-w64- | + | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | mingw-w64-i686- | + | |
− | + | ||
− | mingw-w64-i686- | + | |
− | mingw-w64-i686- | + | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | mingw-w64-i686-openexr \ | + | |
− | mingw-w64-i686-poppler \ | + | |
− | mingw-w64-i686-python3-gobject \ | + | |
− | mingw-w64-i686-SDL2 \ | + | |
− | mingw-w64-i686-suitesparse \ | + | |
− | mingw-w64-i686-vala \ | + | |
− | mingw-w64-i686-xpm-nox | + | |
Simply hit enter at the prompts for which packages to install (default=all). This step will download a ton of packages, and may take a while. | Simply hit enter at the prompts for which packages to install (default=all). This step will download a ton of packages, and may take a while. | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
=== Building the software === | === Building the software === | ||
− | + | You can now just follow the instruction on the main page [[Hacking:Building]]. Just be careful of the following changes : | |
− | + | export GIMP_PREFIX=`realpath ~/gimp_prefix` | |
− | + | export PATH="$GIMP_PREFIX/bin:$PATH" | |
− | + | export PKG_CONFIG_PATH="$GIMP_PREFIX/lib/pkgconfig:$PKG_CONFIG_PATH" | |
− | + | export PKG_CONFIG_PATH="$GIMP_PREFIXshare/pkgconfig:$PKG_CONFIG_PATH" | |
− | + | export LD_LIBRARY_PATH="$GIMP_PREFIX/lib:$LD_LIBRARY_PATH" | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | * If you are on Windows 64bits, you need to add mingw64 on 32bits mingw32 | |
+ | #environment variable for Autotools | ||
+ | export ACLOCAL_FLAGS="-I/c/msys64/mingw64/share/aclocal" | ||
+ | #environment variable for introspection | ||
+ | export XDG_DATA_DIRS="$XDG_DATA_DIRS:$GIMP_PREFIX/share:/usr/local/share/:/usr/share/:/mingw64/share/" | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | You can add all the environment variable on C:\msys64_or_msys32\home\{USERNAME}\.bash_profile then run | |
− | + | . .bash_profile | |
− | + | ||
− | + | ||
− | + | * Disable docs for Babl : <code>-Dwith-docs=false</code> while calling Meson. | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | * Disable docs for Gegl : <code>-Ddocs=false</code> while calling Meson. | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | You may want to disable the docs while building Gimp : | |
− | + | * Meson build : <code>-Dgtk-doc=false -Dgtk-doc-app=false</code> | |
− | + | * Autotools build : <code>--disable-docs</code> | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | == Cross-Compiling GIMP under UNIX using crossroad == | |
− | + | A tool named [https://pypi.python.org/pypi/crossroad crossroad] has been developed to cross-build for Windows under Linux (it was even originally started to crossbuild GIMP specifically). | |
− | + | See the [http://girinstud.io/news/2016/05/crossroad-0-6-released-cross-building-gimp-as-an-example/ tutorial explaining how to build GIMP with it]. | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
Condensed, here is the process: | Condensed, here is the process: | ||
− | + | crossroad w64 gimp-build | |
− | crossroad w64 gimp-build | + | |
− | + | crossroad install \ | |
− | crossroad install glib2-devel libexiv2-devel json-glib-devel libjpeg8-devel | + | glib2-devel \ |
− | libpng-devel cairo-devel libtiff-devel librsvg-2-2 librsvg-devel pango-devel | + | libexiv2-devel \ |
− | libwebp5 libwebp-devel libjasper-devel gdk-pixbuf-devel libSDL-devel libjson-c2 | + | json-glib-devel \ |
− | libjson-c-devel atk-devel gtk2-devel libbz2-1 libbz2-devel liblzma-devel | + | libjpeg8-devel \ |
− | liblcms2-2 liblcms2-devel libgs8 libgs-devel libmng1 libmng-devel | + | libpng-devel \ |
− | libpoppler-glib8 libpoppler-glib-devel poppler-data xpm-nox-devel headers | + | cairo-devel \ |
− | iso-codes-devel libwmf-devel libgexiv2-devel headers | + | libtiff-devel \ |
− | + | librsvg-2-2 \ | |
− | wget http://prdownloads.sourceforge.net/libpng/libpng-1.6.29.tar.xz | + | librsvg-devel \ |
− | + | pango-devel \ | |
− | tar xf libpng-1.6.29.tar.xz | + | libwebp5 \ |
− | + | libwebp-devel \ | |
− | git clone git://git.gnome.org/babl | + | libjasper-devel \ |
− | + | gdk-pixbuf-devel \ | |
− | + | libSDL-devel \ | |
− | + | libjson-c2 \ | |
− | git clone git://git.gnome.org/gegl | + | libjson-c-devel \ |
− | + | atk-devel \ | |
− | + | gtk2-devel \ | |
− | + | libbz2-1 \ | |
− | git clone https://github.com/mypaint/libmypaint.git | + | libbz2-devel \ |
− | + | liblzma-devel \ | |
− | cd libmypaint | + | liblcms2-2 \ |
− | + | liblcms2-devel \ | |
− | git clone git://git.gnome.org/gimp | + | libgs8 \ |
− | + | libgs-devel \ | |
− | + | libmng1 \ | |
− | + | libmng-devel \ | |
+ | libpoppler-glib8 \ | ||
+ | libpoppler-glib-devel \ | ||
+ | poppler-data \ | ||
+ | xpm-nox-devel headers \ | ||
+ | iso-codes-devel \ | ||
+ | libwmf-devel \ | ||
+ | libgexiv2-devel headers | ||
+ | |||
+ | wget http://prdownloads.sourceforge.net/libpng/libpng-1.6.29.tar.xz | ||
+ | tar xf libpng-1.6.29.tar.xz | ||
+ | pushd libpng-1.6.29 | ||
+ | crossroad configure | ||
+ | make && make install | ||
+ | popd | ||
+ | |||
+ | git clone git://git.gnome.org/babl | ||
+ | pushd babl | ||
+ | crossroad configure | ||
+ | make && make install | ||
+ | popd | ||
+ | |||
+ | git clone git://git.gnome.org/gegl | ||
+ | pushd gegl | ||
+ | crossroad configure | ||
+ | make && make install | ||
+ | popd | ||
+ | |||
+ | git clone https://github.com/mypaint/libmypaint.git | ||
+ | cd libmypaint | ||
+ | crossroad configure | ||
+ | make && make install | ||
+ | popd | ||
+ | |||
+ | git clone git://git.gnome.org/gimp | ||
+ | crossroad configure --disable-python | ||
+ | make && make install | ||
+ | popd | ||
Check out the full tutorial for more details. | Check out the full tutorial for more details. | ||
− | Note: this is basically the same thing as the | + | Note: this is basically the same thing as the Mingw64 cross build, simply crossroad wraps all the complicated parts! |
− | wraps all the complicated parts! | + | |
− | == Cross-Compiling GIMP under | + | == Cross-Compiling GIMP under Linux using MinGW-w64 == |
− | Experience shows that working with the MinGW environment on a | + | Experience shows that working with the MinGW environment on a Linux machine provides a much faster compilation, and you are still able to compile for any Windows target (32 and 64 bits). |
NOTE: the following procedure should be distribution-independent and does not rely on your package management system, even though it uses some OpenSuse packages. It would probably work on OSX or any other UNIX as well (add a note on the list below if you know this procedure works on another OS). | NOTE: the following procedure should be distribution-independent and does not rely on your package management system, even though it uses some OpenSuse packages. It would probably work on OSX or any other UNIX as well (add a note on the list below if you know this procedure works on another OS). | ||
Line 373: | Line 286: | ||
''Source of the original procedure from an [https://mail.gnome.org/archives/gimp-developer-list/2012-May/msg00067.html email by Victor Oliveira].'' | ''Source of the original procedure from an [https://mail.gnome.org/archives/gimp-developer-list/2012-May/msg00067.html email by Victor Oliveira].'' | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
=== Install mingw-w64 === | === Install mingw-w64 === | ||
+ | This procedure relies on the newer [http://mingw-w64.sourceforge.net/ MinGW-w64] project. | ||
− | + | If your distribution provides the <code>mingw-w64</code> tools, you may install them with your package manager. | |
− | + | ||
− | If your distribution provides the mingw-w64 tools, you may install them with your package manager | + | |
− | + | ||
− | + | ||
− | + | ||
− | + | Otherwise, download directly the last release [https://sourceforge.net/projects/mingw-w64/files/mingw-w64/mingw-w64-release on Sourceforge]. | |
− | + | The archive contains a prefix tree, that you can consider as read-only (just like your linux system). | |
=== Install GIMP Dependencies === | === Install GIMP Dependencies === | ||
The default environment provided by MinGW does not have the huge list of dependencies that GIMP requires. | The default environment provided by MinGW does not have the huge list of dependencies that GIMP requires. | ||
+ | |||
Fortunately the [https://mail.gnome.org/archives/gimp-developer-list/2012-May/msg00067.html email] linked above has bash script named '''grab-stuff.sh''' (which calls itself a python3 script named "download-mingw-rpm.py", so you have to download both and have python3), which downloads pre-compiled version of all needed dependencies for cross-compiling (it uses OpenSuse repositories as source, but it does not mean at all you need rpm support). | Fortunately the [https://mail.gnome.org/archives/gimp-developer-list/2012-May/msg00067.html email] linked above has bash script named '''grab-stuff.sh''' (which calls itself a python3 script named "download-mingw-rpm.py", so you have to download both and have python3), which downloads pre-compiled version of all needed dependencies for cross-compiling (it uses OpenSuse repositories as source, but it does not mean at all you need rpm support). | ||
From the root of your cross-compiling prefix ($HOME/w64) run: | From the root of your cross-compiling prefix ($HOME/w64) run: | ||
− | + | bash grab-stuff.sh | |
− | + | ||
You will notice in particular a new usr/ folder, and inside i686-w64-mingw32/ and x86_64-w64-mingw32/ sub-folders. | You will notice in particular a new usr/ folder, and inside i686-w64-mingw32/ and x86_64-w64-mingw32/ sub-folders. | ||
+ | |||
+ | TODO : Make a proper dependency list. | ||
=== Set your cross-compiling environment === | === Set your cross-compiling environment === | ||
− | + | Define the environment variables as described in [[Hacking:Building]]. You may also need to reset pkg-config: | |
− | + | export PKG_CONFIG_LIBDIR= | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
=== Build BABL === | === Build BABL === | ||
− | + | git clone git://git.gnome.org/babl | |
− | + | cd babl | |
− | + | ./autogen.sh --prefix=$PREFIX --host=$HOST --enable-introspection=no | |
− | + | make | |
− | + | make install | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
=== Build GEGL === | === Build GEGL === | ||
− | + | git clone git://git.gnome.org/gegl | |
− | + | cd gegl | |
− | + | ./autogen.sh --prefix=$PREFIX --host=$HOST --enable-introspection=no --disable-docs --disable-glibtest | |
− | + | make | |
− | + | make install | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
=== Build any optional dependency === | === Build any optional dependency === | ||
Line 520: | Line 337: | ||
In my case xz-5.0.4 worked well. | In my case xz-5.0.4 worked well. | ||
− | + | cd .. | |
− | + | wget http://tukaani.org/xz/xz-5.0.4.tar.xz | |
− | + | tar xf xz-5.0.4.tar.xz | |
− | + | rm xz-5.0.4.tar.xz | |
− | + | cd xz-5.0.4 | |
− | + | ./configure --prefix=$PREFIX --host=$HOST | |
− | + | make | |
− | + | make install | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
Finally obviously in the GIMP configure step, remove the ''--without-liblzma'' option on the autogen.sh command line before compiling GIMP. | Finally obviously in the GIMP configure step, remove the ''--without-liblzma'' option on the autogen.sh command line before compiling GIMP. | ||
Line 557: | Line 365: | ||
=== Build GIMP === | === Build GIMP === | ||
− | + | cd .. | |
− | + | git clone git://git.gnome.org/gimp | |
− | + | cd gimp | |
− | + | ./autogen.sh --prefix=$PREFIX --host=$HOST \ | |
− | + | --enable-introspection=no \ | |
− | + | --disable-glibtest \ | |
− | + | --disable-gtktest \ | |
− | + | --disable-docs \ | |
− | + | --without-libjpeg \ | |
− | + | --disable-python \ | |
− | + | --without-xmc \ | |
− | + | --without-dbus \ | |
− | + | --without-libzma \ | |
+ | make | ||
+ | make install | ||
=== Install On Windows === | === Install On Windows === | ||
Line 620: | Line 430: | ||
3. Restart GIMP. | 3. Restart GIMP. | ||
− | == | + | == Troubleshooting == |
− | + | ==== Running gimp-2.x.exe on Windows fails. Error messages about a missing entry point in libglib-2.0-0.dll or a missing bzip2.dll are shown.==== | |
− | + | '''Cause:''' | |
+ | |||
+ | The missing dll files are in the MinGW binary folder, which is separate from the GIMP folders. | ||
+ | |||
+ | '''Solution:''' | ||
+ | |||
+ | To export the GIMP build to Windows properly, use the following steps: | ||
+ | |||
+ | 1. On Windows create a folder for the GIMP build, like GIMP-Master. | ||
+ | |||
+ | 2. Copy all files from $HOME/w64/$HOST/sys-root/mingw to the newly created folder. | ||
+ | |||
+ | 3. Copy all files from your $PREFIX folder to the newly created folder. There are duplicate subfolders, for instance bin, share etc., in both directories. If your filemanager asks you to overwrite them, then confirm. | ||
+ | |||
+ | It's important to keep this order to ensure you overwrite older BABL and GEGL from the grab-stuff.sh script by the newer ones from your build. | ||
+ | |||
+ | At the end you have merged your MinGW installation and the GIMP build to a running GIMP on Windows build. | ||
+ | (It also contains the unnecessary MinGW binaries, which are not needed anymore to run GIMP. But for testing purposes you have a running GIMP installation.) | ||
+ | |||
+ | ==== Some fonts, like Sans, are shown improperly ==== | ||
+ | See also [https://bugzilla.gnome.org/show_bug.cgi?id=688593 the Bugzilla report]. | ||
+ | |||
+ | '''Cause:''' | ||
+ | |||
+ | The fontconfig package installation writes absolute paths of the building system to fonts.conf and conf.d/*.conf. When GIMP is installed on the Windows target system, these absolute paths become invalid. | ||
+ | |||
+ | '''Solution:''' | ||
+ | |||
+ | The bug should be reported to the Fontconfig developers. Meanwhile do on the Windows target system: | ||
+ | |||
+ | 1. Close GIMP. | ||
+ | |||
+ | 2. Edit the file ''<GIMP installation folder>\etc\fonts\fonts.conf'': | ||
+ | |||
+ | Replace the line <code><include ignore_missing="yes">$a_directory/conf.d</include></code> by <code><include ignore_missing="yes">..\..\share\fontconfig\conf.avail</include></code> | ||
+ | |||
+ | 3. Restart GIMP. | ||
== Building GIMP using Microsoft tools == | == Building GIMP using Microsoft tools == |
Latest revision as of 21:39, 3 January 2021
The main GIMP building instructions are at Hacking:Building. This page is for Windows-specific additions to that page.
Note: the instructions are not always kept up to date. The primary development platform is the Debian Testing GNU/Linux distribution, so the very latest code from Git might not always build on other platforms.
Contents
- 1 Building GIMP natively under Windows using MSYS2
- 2 Cross-Compiling GIMP under UNIX using crossroad
- 3 Cross-Compiling GIMP under Linux using MinGW-w64
- 4 Troubleshooting
- 5 Building GIMP using Microsoft tools
- 6 Building GIMP plug-ins using Microsoft tools
- 7 Packaging third-party GIMP plug-ins for Windows
Building GIMP natively under Windows using MSYS2
Msys2 is a POSIX environment with basically everything you would find on a Linux system (shell, package manager, GCC…). It allows to use POSIX tools to build Windows softwares.
Setting up the environment
First, follow the installation instructions for msys2 available at msys2.github.io.
To open a terminal, you need to execute msys2.exe
or mingw64.exe
Update the system :
pacman -Syyuu
If the shell tells you to close the terminal, close MSYS2 and run it again. That is a normal procedure.
Install the dependencies
If you want to build gimp 2.10
If you have Windows 64bits:
pacman -S --needed \ base-devel \ git \ mingw-w64-x86_64-toolchain \ mingw-w64-x86_64-asciidoc \ mingw-w64-x86_64-drmingw \ mingw-w64-x86_64-gexiv2 \ mingw-w64-x86_64-ghostscript \ mingw-w64-x86_64-glib-networking \ mingw-w64-x86_64-graphviz \ mingw-w64-x86_64-gtk2 \ mingw-w64-x86_64-gobject-introspection \ mingw-w64-x86_64-iso-codes \ mingw-w64-x86_64-json-c \ mingw-w64-x86_64-json-glib \ mingw-w64-x86_64-lcms2 \ mingw-w64-x86_64-lensfun \ mingw-w64-x86_64-libheif \ mingw-w64-x86_64-libraw \ mingw-w64-x86_64-libspiro \ mingw-w64-x86_64-libwebp \ mingw-w64-x86_64-libwmf \ mingw-w64-x86_64-meson \ mingw-w64-x86_64-mypaint-brushes \ mingw-w64-x86_64-openexr \ mingw-w64-x86_64-poppler \ mingw-w64-x86_64-python2-pygtk \ mingw-w64-x86_64-SDL2 \ mingw-w64-x86_64-suitesparse \ mingw-w64-x86_64-xpm-nox
If you have Windows 32 bit:
pacman -S --needed \ base-devel \ git \ mingw-w64-i686-toolchain \ mingw-w64-i686-asciidoc \ mingw-w64-i686-drmingw \ mingw-w64-i686-gexiv2 \ mingw-w64-i686-ghostscript \ mingw-w64-i686-glib-networking \ mingw-w64-i686-graphviz \ mingw-w64-i686-gtk2 \ mingw-w64-i686-gobject-introspection \ mingw-w64-i686-iso-codes \ mingw-w64-i686-json-c \ mingw-w64-i686-json-glib \ mingw-w64-i686-lcms2 \ mingw-w64-i686-lensfun \ mingw-w64-i686-libheif \ mingw-w64-i686-libraw \ mingw-w64-i686-libspiro \ mingw-w64-i686-libwebp \ mingw-w64-i686-libwmf \ mingw-w64-i686-meson \ mingw-w64-i686-mypaint-brushes \ mingw-w64-i686-openexr \ mingw-w64-i686-poppler \ mingw-w64-i686-python2-pygtk \ mingw-w64-i686-SDL2 \ mingw-w64-i686-suitesparse \ mingw-w64-i686-xpm-nox
If you want to build gimp master
If you have Windows 64bits:
pacman -S --needed \ base-devel \ git \ mingw-w64-x86_64-toolchain \ mingw-w64-x86_64-appstream-glib \ mingw-w64-x86_64-asciidoc \ mingw-w64-x86_64-drmingw \ mingw-w64-x86_64-gexiv2 \ mingw-w64-x86_64-ghostscript \ mingw-w64-x86_64-glib-networking \ mingw-w64-x86_64-graphviz \ mingw-w64-x86_64-gtk3 \ mingw-w64-x86_64-gobject-introspection \ mingw-w64-x86_64-iso-codes \ mingw-w64-x86_64-json-c \ mingw-w64-x86_64-json-glib \ mingw-w64-x86_64-lcms2 \ mingw-w64-x86_64-lensfun \ mingw-w64-x86_64-libarchive \ mingw-w64-x86_64-libheif \ mingw-w64-x86_64-libraw \ mingw-w64-x86_64-libspiro \ mingw-w64-x86_64-libwebp \ mingw-w64-x86_64-libwmf \ mingw-w64-x86_64-luajit \ mingw-w64-x86_64-maxflow \ mingw-w64-x86_64-meson \ mingw-w64-x86_64-mypaint-brushes \ mingw-w64-x86_64-openexr \ mingw-w64-x86_64-poppler \ mingw-w64-x86_64-python3-gobject \ mingw-w64-x86_64-SDL2 \ mingw-w64-x86_64-suitesparse \ mingw-w64-x86_64-vala \ mingw-w64-x86_64-xpm-nox
If you have Windows 32bits:
pacman -S --needed \ base-devel \ git \ mingw-w64-i686-toolchain \ mingw-w64-i686-appstream-glib \ mingw-w64-i686-asciidoc \ mingw-w64-i686-drmingw \ mingw-w64-i686-gexiv2 \ mingw-w64-i686-ghostscript \ mingw-w64-i686-glib-networking \ mingw-w64-i686-graphviz \ mingw-w64-i686-gtk3 \ mingw-w64-i686-gobject-introspection \ mingw-w64-i686-iso-codes \ mingw-w64-i686-json-c \ mingw-w64-i686-json-glib \ mingw-w64-i686-lcms2 \ mingw-w64-i686-lensfun \ mingw-w64-i686-libarchive \ mingw-w64-i686-libheif \ mingw-w64-i686-libraw \ mingw-w64-i686-libspiro \ mingw-w64-i686-libwebp \ mingw-w64-i686-libwmf \ mingw-w64-i686-luajit \ mingw-w64-i686-maxflow \ mingw-w64-i686-meson \ mingw-w64-i686-mypaint-brushes \ mingw-w64-i686-openexr \ mingw-w64-i686-poppler \ mingw-w64-i686-python3-gobject \ mingw-w64-i686-SDL2 \ mingw-w64-i686-suitesparse \ mingw-w64-i686-vala \ mingw-w64-i686-xpm-nox
Simply hit enter at the prompts for which packages to install (default=all). This step will download a ton of packages, and may take a while.
Building the software
You can now just follow the instruction on the main page Hacking:Building. Just be careful of the following changes :
export GIMP_PREFIX=`realpath ~/gimp_prefix` export PATH="$GIMP_PREFIX/bin:$PATH" export PKG_CONFIG_PATH="$GIMP_PREFIX/lib/pkgconfig:$PKG_CONFIG_PATH" export PKG_CONFIG_PATH="$GIMP_PREFIXshare/pkgconfig:$PKG_CONFIG_PATH" export LD_LIBRARY_PATH="$GIMP_PREFIX/lib:$LD_LIBRARY_PATH"
- If you are on Windows 64bits, you need to add mingw64 on 32bits mingw32
#environment variable for Autotools export ACLOCAL_FLAGS="-I/c/msys64/mingw64/share/aclocal" #environment variable for introspection export XDG_DATA_DIRS="$XDG_DATA_DIRS:$GIMP_PREFIX/share:/usr/local/share/:/usr/share/:/mingw64/share/"
You can add all the environment variable on C:\msys64_or_msys32\home\{USERNAME}\.bash_profile then run
. .bash_profile
- Disable docs for Babl :
-Dwith-docs=false
while calling Meson.
- Disable docs for Gegl :
-Ddocs=false
while calling Meson.
You may want to disable the docs while building Gimp :
- Meson build :
-Dgtk-doc=false -Dgtk-doc-app=false
- Autotools build :
--disable-docs
Cross-Compiling GIMP under UNIX using crossroad
A tool named crossroad has been developed to cross-build for Windows under Linux (it was even originally started to crossbuild GIMP specifically).
See the tutorial explaining how to build GIMP with it.
Condensed, here is the process:
crossroad w64 gimp-build crossroad install \ glib2-devel \ libexiv2-devel \ json-glib-devel \ libjpeg8-devel \ libpng-devel \ cairo-devel \ libtiff-devel \ librsvg-2-2 \ librsvg-devel \ pango-devel \ libwebp5 \ libwebp-devel \ libjasper-devel \ gdk-pixbuf-devel \ libSDL-devel \ libjson-c2 \ libjson-c-devel \ atk-devel \ gtk2-devel \ libbz2-1 \ libbz2-devel \ liblzma-devel \ liblcms2-2 \ liblcms2-devel \ libgs8 \ libgs-devel \ libmng1 \ libmng-devel \ libpoppler-glib8 \ libpoppler-glib-devel \ poppler-data \ xpm-nox-devel headers \ iso-codes-devel \ libwmf-devel \ libgexiv2-devel headers wget http://prdownloads.sourceforge.net/libpng/libpng-1.6.29.tar.xz tar xf libpng-1.6.29.tar.xz pushd libpng-1.6.29 crossroad configure make && make install popd git clone git://git.gnome.org/babl pushd babl crossroad configure make && make install popd git clone git://git.gnome.org/gegl pushd gegl crossroad configure make && make install popd git clone https://github.com/mypaint/libmypaint.git cd libmypaint crossroad configure make && make install popd git clone git://git.gnome.org/gimp crossroad configure --disable-python make && make install popd
Check out the full tutorial for more details.
Note: this is basically the same thing as the Mingw64 cross build, simply crossroad wraps all the complicated parts!
Cross-Compiling GIMP under Linux using MinGW-w64
Experience shows that working with the MinGW environment on a Linux machine provides a much faster compilation, and you are still able to compile for any Windows target (32 and 64 bits).
NOTE: the following procedure should be distribution-independent and does not rely on your package management system, even though it uses some OpenSuse packages. It would probably work on OSX or any other UNIX as well (add a note on the list below if you know this procedure works on another OS).
Has been known to work on at least: Linux Mint 15, Ubuntu 12.04LST and Mageia 2 distributions.
Source of the original procedure from an email by Victor Oliveira.
Install mingw-w64
This procedure relies on the newer MinGW-w64 project.
If your distribution provides the mingw-w64
tools, you may install them with your package manager.
Otherwise, download directly the last release on Sourceforge.
The archive contains a prefix tree, that you can consider as read-only (just like your linux system).
Install GIMP Dependencies
The default environment provided by MinGW does not have the huge list of dependencies that GIMP requires.
Fortunately the email linked above has bash script named grab-stuff.sh (which calls itself a python3 script named "download-mingw-rpm.py", so you have to download both and have python3), which downloads pre-compiled version of all needed dependencies for cross-compiling (it uses OpenSuse repositories as source, but it does not mean at all you need rpm support).
From the root of your cross-compiling prefix ($HOME/w64) run:
bash grab-stuff.sh
You will notice in particular a new usr/ folder, and inside i686-w64-mingw32/ and x86_64-w64-mingw32/ sub-folders.
TODO : Make a proper dependency list.
Set your cross-compiling environment
Define the environment variables as described in Hacking:Building. You may also need to reset pkg-config:
export PKG_CONFIG_LIBDIR=
Build BABL
git clone git://git.gnome.org/babl cd babl ./autogen.sh --prefix=$PREFIX --host=$HOST --enable-introspection=no make make install
Build GEGL
git clone git://git.gnome.org/gegl cd gegl ./autogen.sh --prefix=$PREFIX --host=$HOST --enable-introspection=no --disable-docs --disable-glibtest make make install
Build any optional dependency
This step is not necessary if you compile GIMP with the minimum set of dependency as indicated at the next section.
Compression support
Nevertheless if for instance, you needed compression support (hence be able to load and save your images in various compressed format), you would need zlib,libbzip2 and liblzma installed. In particular the cross-compilation environment described on this page has no pre-compiled liblzma. You would need to cross-compile it first yourself.
In my case xz-5.0.4 worked well.
cd .. wget http://tukaani.org/xz/xz-5.0.4.tar.xz tar xf xz-5.0.4.tar.xz rm xz-5.0.4.tar.xz cd xz-5.0.4 ./configure --prefix=$PREFIX --host=$HOST make make install
Finally obviously in the GIMP configure step, remove the --without-liblzma option on the autogen.sh command line before compiling GIMP.
You should be able to do similar things for other optional features that you would want on your cross-compiled GIMP.
Alternatively there exists a patch to get compression support working in 32 bit builds.
Multi-Language support
Multi-Language support is installed with the grab-stuff.sh script. Due to a bug in the package mingw32-iso-codes-devel the pkgconfig program can't find the iso-codes package. In this case you will notice, that GIMPs autogen.sh reports
Language selection: no
and the finished GIMP build has no language selector listbox in Edit/Preferences/Interface. To solve this, copy $HOME/w64/usr/$HOST/sys-root/mingw/share/pkgconfig/iso-codes.pc to $HOME/w64/usr/$HOST/sys-root/mingw/lib/pkgconfig before executing autogen.sh or configure for GIMP. Note you have to do this for every value of $HOST you want to build (e.g. i686 and x86_64 architecture). Also merge the MinGW and GIMP build folders when installing it on Windows (see the Troubleshooting section).
Build GIMP
cd .. git clone git://git.gnome.org/gimp cd gimp ./autogen.sh --prefix=$PREFIX --host=$HOST \ --enable-introspection=no \ --disable-glibtest \ --disable-gtktest \ --disable-docs \ --without-libjpeg \ --disable-python \ --without-xmc \ --without-dbus \ --without-libzma \ make make install
Install On Windows
To test your compiled installation, I found nothing better than moving the whole tree (in my case $HOME/w64) into Windows, because libraries are dynamically linked, then run $HOME/w64/bin/gimp-2.9.exe under Windows.
If you really want to build a self contained GIMP, you should compile everything as static libraries. GIMP will probably still rely on some external files though, for instance what you find under $HOME/w64/share/gimp/2.0/. Maybe other things. But this will have to be tested if needed.
Troubleshooting
Running gimp-2.x.exe on Windows fails. Error messages about a missing entry point in libglib-2.0-0.dll or a missing bzip2.dll are shown.
Cause:
The missing dll files are in the MinGW binary folder, which is separate from the GIMP folders.
Solution:
To export the GIMP build to Windows properly, use the following steps:
1. On Windows create a folder for the GIMP build, like GIMP-Master.
2. Copy all files from $HOME/w64/$HOST/sys-root/mingw to the newly created folder.
3. Copy all files from your $PREFIX folder to the newly created folder. There are duplicate subfolders, for instance bin, share etc., in both directories. If your filemanager asks you to overwrite them, then confirm.
It's important to keep this order to ensure you overwrite older BABL and GEGL from the grab-stuff.sh script by the newer ones from your build.
At the end you have merged your MinGW installation and the GIMP build to a running GIMP on Windows build. (It also contains the unnecessary MinGW binaries, which are not needed anymore to run GIMP. But for testing purposes you have a running GIMP installation.)
Some fonts, like Sans, are shown improperly
See also the Bugzilla report.
Cause:
The fontconfig package installation writes absolute paths of the building system to fonts.conf and conf.d/*.conf. When GIMP is installed on the Windows target system, these absolute paths become invalid.
Solution:
The bug should be reported to the Fontconfig developers. Meanwhile do on the Windows target system:
1. Close GIMP.
2. Edit the file <GIMP installation folder>\etc\fonts\fonts.conf:
Replace the line <include ignore_missing="yes">$a_directory/conf.d</include>
by <include ignore_missing="yes">..\..\share\fontconfig\conf.avail</include>
3. Restart GIMP.
Troubleshooting
Running gimp-2.x.exe on Windows fails. Error messages about a missing entry point in libglib-2.0-0.dll or a missing bzip2.dll are shown.
Cause:
The missing dll files are in the MinGW binary folder, which is separate from the GIMP folders.
Solution:
To export the GIMP build to Windows properly, use the following steps:
1. On Windows create a folder for the GIMP build, like GIMP-Master.
2. Copy all files from $HOME/w64/$HOST/sys-root/mingw to the newly created folder.
3. Copy all files from your $PREFIX folder to the newly created folder. There are duplicate subfolders, for instance bin, share etc., in both directories. If your filemanager asks you to overwrite them, then confirm.
It's important to keep this order to ensure you overwrite older BABL and GEGL from the grab-stuff.sh script by the newer ones from your build.
At the end you have merged your MinGW installation and the GIMP build to a running GIMP on Windows build. (It also contains the unnecessary MinGW binaries, which are not needed anymore to run GIMP. But for testing purposes you have a running GIMP installation.)
Some fonts, like Sans, are shown improperly
See also the Bugzilla report.
Cause:
The fontconfig package installation writes absolute paths of the building system to fonts.conf and conf.d/*.conf. When GIMP is installed on the Windows target system, these absolute paths become invalid.
Solution:
The bug should be reported to the Fontconfig developers. Meanwhile do on the Windows target system:
1. Close GIMP.
2. Edit the file <GIMP installation folder>\etc\fonts\fonts.conf:
Replace the line <include ignore_missing="yes">$a_directory/conf.d</include>
by <include ignore_missing="yes">..\..\share\fontconfig\conf.avail</include>
3. Restart GIMP.
Building GIMP using Microsoft tools
Microsoft Visual Studio comes with its own C compiler. Most of GIMP development is done with the GCC and its MinGW Windows port.
Unfortunately both are not fully compatible, so integrating GCC into the Visual Studio build chain has its flaws, even while it might work in some points.
Because of this you are recommended to use MinGW for building GIMP on Windows.
Building GIMP plug-ins using Microsoft tools
How to build a GIMP plug-in with Visual Studio (archive.org link salvaged, original link, now broken, was: http://registry.gimp.org/node/24883)
Packaging third-party GIMP plug-ins for Windows
Users on the Windows and Mac OSX platforms expect software to be packaged in a self-installing file (an installer). Even though GIMP plugins (whether scripts in Python or Scheme, or executables in the C language) are relatively easy to install, you might want to package them using an installer such as Inno Setup.