Difference between revisions of "CompilingMacOsX"

From Inkscape Wiki
Jump to navigation Jump to search
 
 
(288 intermediate revisions by 39 users not shown)
Line 1: Line 1:
== Compiling Inkscape under Mac OS X ==
__TOC__


You can run Inkscape by compiling by using Fink.  http://fink.sourceforge.net
= Using MacPorts =


It's as simple as: #fink -y install inkscape  
<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"


Fink will get all the dependencies and install them.
# where to install
PREFIX="$PWD/install-prefix"


----
# where to build
mkdir build
cd build


To get autogen to run I had to perform the following ( Assuming users have fink installed )
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


sudo fink install gtk+ ( which installs gtk+ and gtk+2 )
ninja
sudo fink install libtool14 ( replacing apple's glibtoolize )
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>


These entries are all to be put in your ~/.cshrc ( or applicable shell startup )
= Using Homebrew =


setenv ACLOCAL_FLAGS "-I /sw/share/aclocal"
If you are using [https://brew.sh/ Homebrew] instead, you can still use the above guidelines with small modifications.
setenv CFLAGS -I/sw/include


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


setenv LDFLAGS -L/sw/lib
<syntaxhighlight lang="bash">
setenv CXXFLAGS $CFLAGS
brew install \
setenv CPPFLAGS $CXXFLAGS
    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
</syntaxhighlight>


--
You may substitute <code>imagemagick</code> with <code>graphicsmagick</code>.


For a clean 10.3 installation with a brand new Fink, I had to add the following:
<code>gtk-mac-integration</code> is not needed with latest <code>1.2-dev</code>.


* intltool
Some keg-only libraries need to be added to <code>$PKG_CONFIG_PATH</code>
* glib2
* glib2-dev
* libpng3
* libart2
* libxml2
* gtk+2
* gtk+2-dev


In theory you can just list all those on one install command.
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.
-- JonCruz


Apart from the above env variables I had to set the following variables to compile cvs
Check out the source if you haven't already:
(taken right out of fink's .info file). This is in bash syntax, above is tcsh syntax.
(I havent experimented with this list to see whats the minimum required.. but if I dont include any of the following than it breaks.)
<pre>
export ACLOCAL_FLAGS="-I /sw/share/aclocal"
export CFLAGS=-I/sw/include
export LDFLAGS=-L/sw/lib
export CXXFLAGS=$CFLAGS
export CPPFLAGS=$CXXFLAGS
export LIBRARY_PATH=/usr/X11R6/lib:/sw/lib
export CPATH=/sw/include
export PATH="/usr/X11R6/bin:"$PATH
export LIBS="-L/sw/lib -lintl "$LIBS
</pre>


Update: There is a problem with rendering cursors on mac due to a gcc bug. At this point fink is maintaining an inkscape package and they are going to use a patch to fix it for 0.38.1 so I recommend fink package. If you are interested in patching yourself, visit tracker item 932944 at https://sourceforge.net/tracker/index.php?func=detail&aid=932944&group_id=93438&atid=604306 .
<syntaxhighlight lang="bash">git clone --recurse-submodules https://gitlab.com/inkscape/inkscape.git</syntaxhighlight>


-- Spundun
Then <code>cd inkscape</code> and follow the steps below.


since gtkmm-2.0 has been added as a requirement, you may need to install it thru darwinports; to use it along whatever you installed with fink prior to that, the flags are:
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.


<pre>
<syntaxhighlight lang="bash">
export ACLOCAL_FLAGS="-I /sw/share/aclocal"
# use a clean Homebrew environment (optional)
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/local/lib/pkgconfig/
LIBPREFIX="/opt/homebrew"
export LDFLAGS="-lintl -L/sw/lib -L/opt/local/lib"
export PATH="$LIBPREFIX/bin:/usr/bin:/bin:/usr/sbin:/sbin"
export CFLAGS="-I/sw/include -I/opt/local/include"
export CPPFLAGS=$CFLAGS
export CXXFLAGS=$CFLAGS
</pre>


-- yafosf
# 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"


If you need to run "./autogen.sh":
# 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"


fink install automake1.8 autoconf2.5
# where to install
PREFIX="$PWD/install-prefix"


mkdir -p build
cd build


Otherwise:
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 \
    ..


fink install
ninja
        intltool �
ninja install
        glib2 glib2-dev glib2-shlibs �
</syntaxhighlight>
        gtk+2 gtk+2-shlibs gtk+2-dev �
        libpng3 libpng3-shlibs �
        libtool14 libtool14-shlibs �
        libpng-shlibs �
        libsigc++12 libsigc++12-shlibs �
        popt popt-shlibs
export CPPFLAGS=-I/sw/include
export LDFLAGS=-L/sw/lib
# Run ./autogen.sh here if things break below...
./configure --prefix=/sw
echo "#define ENABLE_NLS" >> config.h
make
make install


=Packaging=


-- Kees Cook
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:
 
* 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>.
 
=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
 
[[Category:Developer Documentation]]

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