Difference between revisions of "CompilingMacOsX"

From Inkscape Wiki
Jump to navigation Jump to search
(intltool -> gettext)
 
(4 intermediate revisions by 3 users not shown)
Line 2: Line 2:
  
 
<ol>
 
<ol>
<li>Install [http://developer.apple.com/tools/xcode/ Xcode tools] from the App Store
 
 
<li>Download and install [http://www.macports.org/ MacPorts]
 
<li>Download and install [http://www.macports.org/ MacPorts]
 
<li>Edit the MacPorts variants config (optional).
 
<li>Edit the MacPorts variants config (optional).
Line 8: Line 7:
 
<pre>-x11 +quartz</pre>
 
<pre>-x11 +quartz</pre>
 
<li>In Terminal (Applications>Utilities>Terminal) type
 
<li>In Terminal (Applications>Utilities>Terminal) type
<syntaxhighlight lang="bash">sudo port selfupdate
+
<syntaxhighlight lang="bash">sudo port install \
sudo port install \
+
    adwaita-icon-theme \
     cmake cairo boehmgc gettext libxslt lcms2 boost \
+
     boehmgc \
     poppler gsl adwaita-icon-theme gdl3 gtkmm3 libsoup \
+
    boost \
 +
     cairo \
 +
    ccache \
 +
    cmake \
 
     double-conversion \
 
     double-conversion \
 +
    gdl3 \
 +
    gettext \
 +
    gsl \
 +
    gtkmm3 \
 
     gtk-osx-application-gtk3 \
 
     gtk-osx-application-gtk3 \
 +
    lcms2 \
 +
    libsoup \
 +
    libxslt \
 +
    ninja \
 +
    poppler \
 +
    potrace \
 +
    py-lxml \
 +
    py-numpy \
 
     -x11 +quartz
 
     -x11 +quartz
 
</syntaxhighlight>
 
</syntaxhighlight>
 
<li>In Terminal, get Inkscape
 
<li>In Terminal, get Inkscape
<syntaxhighlight lang="bash">git clone --recurse-submodules git@gitlab.com:inkscape/inkscape.git</syntaxhighlight>
+
<syntaxhighlight lang="bash">git clone --recurse-submodules https://gitlab.com/inkscape/inkscape.git</syntaxhighlight>
 
<li>And build inkscape
 
<li>And build inkscape
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Line 24: Line 38:
 
export PATH="$LIBPREFIX/bin:/usr/bin:/bin:/usr/sbin:/sbin"
 
export PATH="$LIBPREFIX/bin:/usr/bin:/bin:/usr/sbin:/sbin"
  
# where to build and install
+
# where to install
 
PREFIX="$PWD/install-prefix"
 
PREFIX="$PWD/install-prefix"
 +
 +
# where to build
 
mkdir build
 
mkdir build
 
cd build
 
cd build
  
 
cmake \
 
cmake \
 +
    -G Ninja \
 
     -DCMAKE_PREFIX_PATH="$LIBPREFIX" \
 
     -DCMAKE_PREFIX_PATH="$LIBPREFIX" \
 
     -DCMAKE_INSTALL_PREFIX="$PREFIX" \
 
     -DCMAKE_INSTALL_PREFIX="$PREFIX" \
 +
    -DCMAKE_C_COMPILER_LAUNCHER=ccache \
 +
    -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
 
     -DWITH_OPENMP=OFF \
 
     -DWITH_OPENMP=OFF \
 
     ..
 
     ..
  
make install
+
ninja
 +
ninja install
 
</syntaxhighlight>
 
</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
 
<li>Run Inkscape
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Line 43: Line 64:
 
</ol>
 
</ol>
  
== Speed up Installation ==
+
= Using Homebrew =
  
You can use <code>[https://en.wikipedia.org/wiki/Ccache ccache]</code> (<code>sudo port install ccache</code>) to speed up re-compilation.
+
If you are using [https://brew.sh/ Homebrew] instead, you can still use the above guidelines with small modifications.
Also, [https://ninja-build.org/ ninja] (<code>sudo port install ninja</code>) is a faster alternative to <code>make</code>.
 
Modify your call to <code>cmake</code> like this:
 
  
cmake \
+
List of '''packages''' to install with brew
        -DCMAKE_C_COMPILER_LAUNCHER=ccache \
 
        -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
 
        -G Ninja \
 
        # more cmake options here
 
 
ninja
 
ninja install
 
  
== Troubleshooting ==
+
<syntaxhighlight lang="bash">
 +
brew install \
 +
    adwaita-icon-theme \
 +
    bdw-gc \
 +
    boost \
 +
    cairomm \
 +
    ccache \
 +
    cmake \
 +
    double-conversion \
 +
    gdl \
 +
    gettext \
 +
    graphicsmagick \
 +
    gsl \
 +
    gtk-mac-integration \
 +
    gtkmm3 \
 +
    gtkspell3 \
 +
    imagemagick \
 +
    intltool \
 +
    lcms2 \
 +
    libsoup \
 +
    libsvg-cairo \
 +
    libxslt \
 +
    ninja \
 +
    poppler \
 +
    potrace
 +
</syntaxhighlight>
  
Linking fails with:
+
Since '''Homebrew''' only offers <code>gettext</code> as a keg (not linked to <code>/usr/local</code>) an extra option needs to be passed on to <code>cmake</code>.
  
ld: framework not found -lCocoa
+
Modify the script in step 5 by changing <code>LIBPREFIX="/usr/local"</code> and adding the following line to the cmake arguments:
  
A patch like this should help (reverts part of
+
<syntaxhighlight lang="bash">
[https://gitlab.com/inkscape/inkscape/commit/48e6c2ea4fc0245afc35cbbc6563804abf421ccd 48e6c2ea4f], see also
+
    -DIntl_INCLUDE_DIR="/usr/local/opt/gettext/include" \
[https://gitlab.com/inkscape/inkscape/merge_requests/397 !397]):
 
 
 
<syntaxhighlight lang="diff">
 
diff --git a/CMakeScripts/DefineDependsandFlags.cmake b/CMakeScripts/DefineDependsandFlags.cmake
 
index 4cb63aae80..7a0b5cbc75 100644
 
--- a/CMakeScripts/DefineDependsandFlags.cmake
 
+++ b/CMakeScripts/DefineDependsandFlags.cmake
 
@@ -253,7 +253,7 @@ pkg_check_modules(GTKSPELL3 gtkspell3-3.0)
 
if("${GTKSPELL3_FOUND}")
 
    message(STATUS "Using GtkSpell 3")
 
    list(APPEND INKSCAPE_INCS_SYS ${GTKSPELL3_INCLUDE_DIRS})
 
-    list(APPEND INKSCAPE_LIBS ${GTKSPELL3_LDFLAGS})
 
+    list(APPEND INKSCAPE_LIBS ${GTKSPELL3_LIBRARIES})
 
    set(WITH_GTKSPELL ON)
 
else()
 
    set(WITH_GTKSPELL OFF)
 
 
</syntaxhighlight>
 
</syntaxhighlight>
 
= Using Homebrew =
 
 
[https://github.com/ipatch/homebrew-us-05/blob/master/inkscape/inkscape-building-for-macOS.md See] for a collection of notes using homebrew infrastructure 🛣 to build Inkscape 1.x from master using CMake + Ninja
 
 
= Misc =
 
 
{{Needs_update}}
 
 
== Extension Python modules  ==
 
 
In case you are using a Python version installed through MacPorts do a search for both modules and install the ones suitable for the Python version activated within MacPorts.
 
<pre>port search lxml numpy</pre>
 
 
For further info refer to the [[GettingEffectsWorking#on_Mac_OS_X|Getting Effects Working]] section of this wiki.
 
 
== Creating an .app bundle ==
 
 
TODO
 
 
== Creating a disk image to distribute Inkscape ==
 
 
TODO
 
 
= Links =
 
 
== User Examples ==
 
* [github.com/ipatch] | A recent '''2019''' collection of notes about building Inkscape from master using CMake + Ninja | [https://github.com/ipatch/homebrew-us-05/blob/master/inkscape/inkscape-building-for-macOS.md Notes]
 
* Adam Strzeleki has outlined some improvements to this process on the Inkscape [http://www.nabble.com/Inkscape-native-Mac-OS-X-build---look-improvements-td14733036.html email list]. See his screenshot from January 10, 2008 [http://www.nabble.com/attachment/14733036/1/Inkscape%20OSX%20PL.gif here].
 
* JiHO has a video of his builds [http://jo.irisson.free.fr/?p=34 here] and [http://jo.irisson.free.fr/?p=62 here].
 
* Mac OS X native (aqua), PPC-only, Tiger-only build of 0.47, can be retrieved here: [http://verkehrsplanung.com/Inkscape_aqua_PPC_047.zip]. NOT FOR PRODUCTIVE USE - JUST TESTING! - (Nevertheless I'm doing quite a bit productive work on it… (-;)
 
 
== Apple Documentation ==
 
* [http://developer.apple.com/documentation/MacOSX/Conceptual/BPRuntimeConfig/BPRuntimeConfig.html Introduction to Runtime Configuration] Covers the Info.plist files, Preferences, Environment variables and has a list of the most important Properties that the Property List should contain.
 
 
== Packaging ==
 
 
* [http://www.sveinbjorn.org/platypus Sveinbjorn Thordarson's Website] The author of Platypus, the Script Exec wrapper that launches the Inkscape binary.
 
* [http://freespace.ausgamers.com/2005/02/creating-os-x-application-bundles-step.html  Creating OS X application bundles step by step] Covers the bundle concepts, copying libraries into the bundle, editing libraries with the install_name_tool, the Info.plist file and adding an icon.
 
* [http://java.sun.com/developer/technicalArticles/JavaLP/JavaToMac3/ Bringing your Java Application to Mac OS X] I would regard this a little dated, and the detail is (unsurprisingly) Java-related, but it is a gentle introduction to the role of the .app bundle and give a most clear account of how to create one.
 
* The [http://gimp-app.sourceforge.net/gimp.app.howto.txt Gimp .app Howto] This is a very bare document, and would be of little help to you if you were new to making packages. Note that it seems to refer to a more mature Clipboard technique and Online help than we currently have; and we ought to move to parity in these areas.
 
 
  
 
=See also=
 
=See also=
 +
* [[Tracking Dependencies]]
 +
* [[Extension requirements]]
 
*[[Compiling Inkscape]]
 
*[[Compiling Inkscape]]
 
*[[Notes on Packaging for OS X]]
 
*[[Notes on Packaging for OS X]]
 
* https://github.com/valerioa/Inkscape-MacOS-Curated-Build
 
* 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]]
 
[[Category:Developer Documentation]]

Latest revision as of 17:26, 18 April 2020

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

brew install \
    adwaita-icon-theme \
    bdw-gc \
    boost \
    cairomm \
    ccache \
    cmake \
    double-conversion \
    gdl \
    gettext \
    graphicsmagick \
    gsl \
    gtk-mac-integration \
    gtkmm3 \
    gtkspell3 \
    imagemagick \
    intltool \
    lcms2 \
    libsoup \
    libsvg-cairo \
    libxslt \
    ninja \
    poppler \
    potrace

Since Homebrew only offers gettext as a keg (not linked to /usr/local) an extra option needs to be passed on to cmake.

Modify the script in step 5 by changing LIBPREFIX="/usr/local" and adding the following line to the cmake arguments:

    -DIntl_INCLUDE_DIR="/usr/local/opt/gettext/include" \

See also