Difference between revisions of "CompilingMacOsX"

From Inkscape Wiki
Jump to navigation Jump to search
m (link fix)
 
 
(215 intermediate revisions by 33 users not shown)
Line 1: Line 1:
= Compiling and Packaging Inkscape under Mac OS X =
__TOC__


== Before you start ==
= Using MacPorts =
If you want an Official Release, note that from version 0.42 of Inkscape a Mac OS X package (in .dmg form) will be available. In addition, regular Development Versions will be build. Both can be downloaded from Inkscape's downloads page:


:http://www.inkscape.org/download.php
<ol>
<li>Download and install [http://www.macports.org/ MacPorts]
<li>Edit the MacPorts variants config (optional).
<br>Add this line to <code>/opt/local/etc/macports/variants.conf</code>
<pre>-x11 +quartz</pre>
<li>In Terminal (Applications>Utilities>Terminal) type
<syntaxhighlight lang="bash">sudo port install \
    adwaita-icon-theme \
    boehmgc \
    boost \
    cairo \
    ccache \
    cmake \
    double-conversion \
    gdl3 \
    gettext \
    gsl \
    gtkmm3 \
    gtk-osx-application-gtk3 \
    lcms2 \
    libsoup \
    libxslt \
    ninja \
    poppler \
    potrace \
    py-lxml \
    py-numpy \
    -x11 +quartz
</syntaxhighlight>
<li>In Terminal, get Inkscape
<syntaxhighlight lang="bash">git clone --recurse-submodules https://gitlab.com/inkscape/inkscape.git</syntaxhighlight>
<li>And build inkscape
<syntaxhighlight lang="bash">
# use a clean MacPorts environment (optional)
LIBPREFIX="/opt/local"
export PATH="$LIBPREFIX/bin:/usr/bin:/bin:/usr/sbin:/sbin"


Inkscape for Mac OS X is an X client: it runs under the [http://en.wikipedia.org/wiki/X_Window_System X Windows System]. You will need an X Windows Server installed for it to work. For 10.4.x users, X11 can be installed from your installation DVD.  For 10.3.x users, you can get Apple's X Server here:
# where to install
PREFIX="$PWD/install-prefix"


:http://www.apple.com/downloads/macosx/apple/x11formacosx.html
# where to build
mkdir build
cd build


----
cmake \
    -G Ninja \
    -DCMAKE_PREFIX_PATH="$LIBPREFIX" \
    -DCMAKE_INSTALL_PREFIX="$PREFIX" \
    -DCMAKE_C_COMPILER_LAUNCHER=ccache \
    -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
    -DWITH_OPENMP=OFF \
    ../inkscape


== Compiling How To ==
ninja
ninja install
</syntaxhighlight>
''Note: Using [https://en.wikipedia.org/wiki/Ccache ccache] and [https://ninja-build.org/ ninja] is not required, but very common because it speeds up compilation.''
<li>Run Inkscape
<syntaxhighlight lang="bash">
$PREFIX/bin/inkscape
</syntaxhighlight>
</ol>


'''Note''': You could use the [http://fink.sourceforge.net/pdb/package.php/inkscape Inkscape package] from the [http://fink.sourceforge.net Fink project] to install Inkscape from source but this package is usally older that the precompiled Development Versions and even that the Official Release so this does not seem useful.
= Using Homebrew =


'''Requirements''':
If you are using [https://brew.sh/ Homebrew] instead, you can still use the above guidelines with small modifications.
#Mac OS X 10.3 of higher
#A full [http://fink.sourceforge.net/faq/usage-fink.php?phpLang=en#unstable unstable fink] installation
#Inkscape's source code. You can get the [http://www.inkscape.org/download.php official release source code], a [http://www.inkscape.org/cvs-snap/ CVS snapshot] or a copy of the [http://sourceforge.net/cvs/?group_id=93438 cvs repository] (the module name is "inkscape")


'''Installing dependencies''':
List of '''packages''' to install with brew
(for Inkscape 1.1):


In a Terminal type:
<syntaxhighlight lang="bash">
<pre>
brew install \
fink install
    adwaita-icon-theme \
        intltool �
    bdw-gc \
        glib2 glib2-dev glib2-shlibs �
    boost \
        gtk+2 gtk+2-shlibs gtk+2-dev �
    cairomm \
        libpng3 libpng3-shlibs �
    ccache \
        libsigc++2 libsigc++2-shlibs �
    cmake \
        gtkmm2.4 gtkmm2.4-dev gtkmm2.4-shlibs �
    double-conversion \
        libtool14 libtool14-shlibs �
    gettext \
        libxml2 libxml2-shlibs �
    gsl \
        popt popt-shlibs �
    gspell \
        gc gc-shlibs automake1.8
    gtk-mac-integration \
</pre>
    gtkmm3 \
    imagemagick \
    intltool \
    lcms2 \
    libomp \
    libsoup@2 \
    libxslt \
    ninja \
    poppler \
    potrace
</syntaxhighlight>


You need automake 1.8 and not the latest in fink (1.9.6-1). Fink installs many packages from source so this is usually long.
You may substitute <code>imagemagick</code> with <code>graphicsmagick</code>.


'''Setting the build environment''':
<code>gtk-mac-integration</code> is not needed with latest <code>1.2-dev</code>.


You need set the following environment variables (taken right out of fink's <code>.info</code> file) for the compilation to work. They are in bash syntax. You can create a file named <code>set_variables</code> for example and copy/paste this inside:
Some keg-only libraries need to be added to <code>$PKG_CONFIG_PATH</code>
<pre>
#!/bin/bash
FINK="/sw"
export [[LIBRARY_PATH]]="/usr[[/X11R6/lib]]:$FINK/lib"
export CPATH="$FINK/include"
export PATH="/usr[[/X11R6/bin]]:$PATH"
export CC="gcc"
export CXX="g++"
export CPPFLAGS="-I$FINK/include"
export LDFLAGS="-L$FINK/lib"
export CFLAGS="-O3 -Wall"
export CXXFLAGS="$CFLAGS"
</pre>


Optionaly, to speed up the compilation a bit you could use <code>ccache</code> if you have it installed:
Some libraries can cause trouble if they are picked up from the SDK instead of Homebrew (observed with <code>libxslt</code> and <code>libxml2</code>). Adding them to <code>$PKG_CONFIG_PATH</code> should fix this.
<pre>
export CC="ccache gcc"
export CXX="ccache g++"
</pre>


'''Note''': Inkscape won't link properly on OS X 10.4.x using gcc 4 (the default) since many of the libraries it needs in fink are still built with gcc-3.3.  Thus, Tiger users will probably want to modify a couple of lines:
Check out the source if you haven't already:
<pre>
export CC="gcc-3.3"
export CXX="g++-3.3"
</pre>


Then, open a Terminal and, in the directory where you created the file <code>set_variables</code>, type:
<syntaxhighlight lang="bash">git clone --recurse-submodules https://gitlab.com/inkscape/inkscape.git</syntaxhighlight>
<pre>
bash
source set_variables
</pre>


Then you need to build the configure script. Cd to Inkscape's source directory and run:
Then <code>cd inkscape</code> and follow the steps below.
<pre>
autogen.sh
</pre>


'''Configuring''':
This was tested on an M1 MacBook Air with macOS 11.6 and Inkscape 1.2-dev, and an M2 MacBook Air with macOS 13.0.1 and Inkscape 1.2.1, 1.2.x from git.


Cd to Inkscape's sources directory and type
<syntaxhighlight lang="bash">
<pre>
# use a clean Homebrew environment (optional)
./configure --prefix=/path/to/build/products/ --enable-osxapp
LIBPREFIX="/opt/homebrew"
</pre>
export PATH="$LIBPREFIX/bin:/usr/bin:/bin:/usr/sbin:/sbin"
The <code>--prefix</code> option sets the directory where the build products are placed. It must be somewhere you have write access to. The option <code>--enable-osxapp</code> allows you to package Inkscape into an <code>.app</code> bundle in order to access it like a regular OS X application. Remove this option if you only want to build Inskscape, not to package it afterwards.


'''Building''':
# keg-only libraries
<pre>
export PKG_CONFIG_PATH="$LIBPREFIX/opt/icu4c/lib/pkgconfig"
make
export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$LIBPREFIX/opt/libsoup@2/lib/pkgconfig"
make install
</pre>


'''Packaging''':
# prevent picking up libxslt and libxml2 from the (wrong) SDK
export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$LIBPREFIX/opt/libxslt/lib/pkgconfig"
export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$LIBPREFIX/opt/libxml2/lib/pkgconfig"


Assuming that you have used the <code>--enable-osxapp</code> option during <code>configure</code>, the process is fully automatized. You just have to open a Terminal, cd to Inkscape's sources directory and type:
# where to install
<pre>
PREFIX="$PWD/install-prefix"
cd packaging
./osx-app.sh /path/to/build/products/bin/inkscape ..[[/Info]].plist macosx
</pre>


You will end up with two files in current directory: Inkscape.app that you can copy to your Applications directory and Inkscape.dmg for distribution.
mkdir -p build
cd build


-- Kees Cook, Michael Wybrow, Jean-Olivier Irisson
cmake \
    -G Ninja \
    -DCMAKE_SHARED_LINKER_FLAGS="-L$LIBPREFIX/lib" \
    -DCMAKE_EXE_LINKER_FLAGS="-L$LIBPREFIX/lib" \
    -DCMAKE_INSTALL_PREFIX=$PREFIX \
    -DCMAKE_C_COMPILER_LAUNCHER=ccache \
    -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
    -DWITH_DBUS=OFF \
    ..


----
ninja
ninja install
</syntaxhighlight>


== Enabling python effects ==
=Packaging=


Many "effects" in the Effect menu of Inkscape use python as a scripting language. Mac OS X ships with python but not with pyXML which is needed by Inkscape effects. To install it you need to
If <code>$PREFIX/bin/inkscape</code> works when executed and you want to turn it into an app or a DMG, have a look at the files inside the <code>inkscape/packaging/macos</code> directory. More info can be found on upstream mibap:
# download the source code from [http://sourceforge.net/project/showfiles.php?group_id=6473 sourceforge]
# unpack the <code>.tar.gz</code> file
# cd into the newly created directory
# set the variable <code>[[MACOSX_DEPLOYMENT_TARGET]]</code> to the number of your operating system (10.3 for Panther, 10.4 for Tiger. It probably won't work on previous systems). In bash syntax this means typing:<pre>[[MACOSX_DEPLOYMENT_TARGET]]=10.?
export [[MACOSX_DEPLOYMENT_TARGET]]</pre>
# move the python files and build C extensions<pre>python setup.py build</pre>
# install (the install is system wide so you need administrator rights)<pre>sudo python setup.py install</pre> and type your password.


* https://github.com/dehesselle/mibap


----
Follow the steps to install the toolset, package the app, and create a DMG. In case you use upstream mibap, you will get the app under <code>/Users/Shared/work/mibap-*/</code> and you will get a DMG file in the same place you ran <code>./build_inkscape.sh</code>.


== Interesting links ==
=See also=
* [[Tracking Dependencies]]
* [[Extension requirements]]
*[[Compiling Inkscape]]
*[[Notes on Packaging for OS X]]
* https://github.com/valerioa/Inkscape-MacOS-Curated-Build
* [https://github.com/ipatch/homebrew-us-05/blob/master/inkscape/inkscape-building-for-macOS.md ipatch's collection of notes] about building Inkscape using Homebrew


Some packaging links:
[[Category:Developer Documentation]]
 
http://freespace.ausgamers.com/2005/02/creating-os-x-application-bundles-step.html
 
http://java.sun.com/developer/technicalArticles/JavaLP/JavaToMac3/
 
http://gimp-app.sourceforge.net/gimp.app.howto.txt

Latest revision as of 02:51, 6 December 2022

Using MacPorts

  1. Download and install MacPorts
  2. Edit the MacPorts variants config (optional).
    Add this line to /opt/local/etc/macports/variants.conf
    -x11 +quartz
  3. In Terminal (Applications>Utilities>Terminal) type
    sudo port install \
         adwaita-icon-theme \
         boehmgc \
         boost \
         cairo \
         ccache \
         cmake \
         double-conversion \
         gdl3 \
         gettext \
         gsl \
         gtkmm3 \
         gtk-osx-application-gtk3 \
         lcms2 \
         libsoup \
         libxslt \
         ninja \
         poppler \
         potrace \
         py-lxml \
         py-numpy \
         -x11 +quartz
    
  4. In Terminal, get Inkscape
    git clone --recurse-submodules https://gitlab.com/inkscape/inkscape.git
    
  5. And build inkscape
    # use a clean MacPorts environment (optional)
    LIBPREFIX="/opt/local"
    export PATH="$LIBPREFIX/bin:/usr/bin:/bin:/usr/sbin:/sbin"
    
    # where to install
    PREFIX="$PWD/install-prefix"
    
    # where to build
    mkdir build
    cd build
    
    cmake \
        -G Ninja \
        -DCMAKE_PREFIX_PATH="$LIBPREFIX" \
        -DCMAKE_INSTALL_PREFIX="$PREFIX" \
        -DCMAKE_C_COMPILER_LAUNCHER=ccache \
        -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
        -DWITH_OPENMP=OFF \
        ../inkscape
    
    ninja
    ninja install
    

    Note: Using ccache and ninja is not required, but very common because it speeds up compilation.

  6. Run Inkscape
    $PREFIX/bin/inkscape
    

Using Homebrew

If you are using Homebrew instead, you can still use the above guidelines with small modifications.

List of packages to install with brew (for Inkscape 1.1):

brew install \
    adwaita-icon-theme \
    bdw-gc \
    boost \
    cairomm \
    ccache \
    cmake \
    double-conversion \
    gettext \
    gsl \
    gspell \
    gtk-mac-integration \
    gtkmm3 \
    imagemagick \
    intltool \
    lcms2 \
    libomp \
    libsoup@2 \
    libxslt \
    ninja \
    poppler \
    potrace

You may substitute imagemagick with graphicsmagick.

gtk-mac-integration is not needed with latest 1.2-dev.

Some keg-only libraries need to be added to $PKG_CONFIG_PATH

Some libraries can cause trouble if they are picked up from the SDK instead of Homebrew (observed with libxslt and libxml2). Adding them to $PKG_CONFIG_PATH should fix this.

Check out the source if you haven't already:

git clone --recurse-submodules https://gitlab.com/inkscape/inkscape.git

Then cd inkscape and follow the steps below.

This was tested on an M1 MacBook Air with macOS 11.6 and Inkscape 1.2-dev, and an M2 MacBook Air with macOS 13.0.1 and Inkscape 1.2.1, 1.2.x from git.

# use a clean Homebrew environment (optional)
LIBPREFIX="/opt/homebrew"
export PATH="$LIBPREFIX/bin:/usr/bin:/bin:/usr/sbin:/sbin"

# keg-only libraries
export PKG_CONFIG_PATH="$LIBPREFIX/opt/icu4c/lib/pkgconfig"
export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$LIBPREFIX/opt/libsoup@2/lib/pkgconfig"

# prevent picking up libxslt and libxml2 from the (wrong) SDK
export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$LIBPREFIX/opt/libxslt/lib/pkgconfig"
export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$LIBPREFIX/opt/libxml2/lib/pkgconfig"

# where to install
PREFIX="$PWD/install-prefix"

mkdir -p build
cd build

cmake \
    -G Ninja \
    -DCMAKE_SHARED_LINKER_FLAGS="-L$LIBPREFIX/lib" \
    -DCMAKE_EXE_LINKER_FLAGS="-L$LIBPREFIX/lib" \
    -DCMAKE_INSTALL_PREFIX=$PREFIX \
    -DCMAKE_C_COMPILER_LAUNCHER=ccache \
    -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
    -DWITH_DBUS=OFF \
    ..

ninja
ninja install

Packaging

If $PREFIX/bin/inkscape works when executed and you want to turn it into an app or a DMG, have a look at the files inside the inkscape/packaging/macos directory. More info can be found on upstream mibap:

Follow the steps to install the toolset, package the app, and create a DMG. In case you use upstream mibap, you will get the app under /Users/Shared/work/mibap-*/ and you will get a DMG file in the same place you ran ./build_inkscape.sh.

See also