Difference between revisions of "CompilingMacOsX"

From Inkscape Wiki
Jump to navigation Jump to search
m (* I forgot to sign ^^)
(Update homebrew instructions for gtk4)
 
(254 intermediate revisions by 38 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
<span style="color:darkred;font-weight:bold">Section about MacPorts IS OUTDATED AND UNMAINTAINED!</span>
<span style="color:darkgreen;font-weight:bold">Section about HomeBrew IS UP TO DATE as of Oct 30, 2024</span>


It's as simple as: #fink -y install inkscape
= Using MacPorts =


Fink will get all the dependencies and install them (assuming "fink list inkscape" shows that inkscape's latest version is installed.)
If you can build successfully with MacPorts, please update this file and remove above comment.


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


If you build inkscape yourself, use a full 10.3 install of unstable fink.
# where to install
PREFIX="$PWD/install-prefix"


You may need set the following variables to compile cvs
# where to build
(taken right out of fink's .info file). This is in bash syntax.
mkdir build
(I havent experimented with this list to see whats the minimum required.. but if I dont include any of the following than it breaks.)
cd build
<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>


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


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


-- Spundun
= Using Homebrew =


Prerequisites:
* Xcode (AppStore)
* Xcode command line tools (<code>xcode-select --install</code>)
* HomeBrew


If you need to run "./autogen.sh":
If you are using [https://brew.sh/ Homebrew] instead, you can still use the above guidelines with small modifications.
(Make sure you don't have any MacPorts stuff in your PATH.)


fink install automake1.8 autoconf2.5
List of '''packages''' to install with brew
(for Inkscape on master branch using GTK4):


Otherwise:
<syntaxhighlight lang="bash">
brew install \
    adwaita-icon-theme \
    bdw-gc \
    boost \
    cairomm \
    ccache \
    cmake \
    double-conversion \
    gettext \
    gsl \
    gspell \
    gtkmm4 \
    gtksourceview5 \
    imagemagick \
    intltool \
    lcms2 \
    libomp \
    libsoup@2 \
    libxslt \
    ninja \
    pkg-config \
    poppler \
    potrace
</syntaxhighlight>


fink install �
You may substitute <code>imagemagick</code> with <code>graphicsmagick</code>.
        intltool �
        glib2 glib2-dev glib2-shlibs �
        gtk+2 gtk+2-shlibs gtk+2-dev �
        libpng3 libpng3-shlibs �
        libsigc++2 libsigc++2-shlibs �
        gtkmm2.4 gtkmm2.4-dev gtkmm2.4-shlibs �
        libtool14 libtool14-shlibs �
        libxml2 libxml2-shlibs �
        libsigc++2 libsigc++2-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
make
make install


Some keg-only libraries need to be added to <code>$PKG_CONFIG_PATH</code>


-- Kees Cook
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.


Since gc 6.4 is needed, once fink is updated, you can install: "fink install gc gc-shlibs", but until then, you'll need to compile it yourself.  :(
Check out the source if you haven't already:


<syntaxhighlight lang="bash">git clone --recurse-submodules https://gitlab.com/inkscape/inkscape.git</syntaxhighlight>


Some packaging links:
Then <code>cd inkscape</code> and follow the steps below.
http://freespace.ausgamers.com/2005/02/creating-os-x-application-bundles-step.html
http://java.sun.com/developer/technicalArticles/JavaLP/JavaToMac3/


---
Tested with:
* M1 MacBook Air with macOS 11.6 and Inkscape 1.2-dev
* M2 MacBook Air with macOS 13.0.1 and Inkscape 1.2.1, 1.2.x from git.
* M2 Mac Mini with macOS 14.2 and Inkscape 1.4-dev. (After adding pkg-config.)
* VM with macOS 15.1 and Inkscape 1.5-dev (master branch)


See the new Info.plist.in file in CVS, as well as packaging/osx-app.sh for building a .app directory.  I have no idea what I'm doing, and I'm doing it blind, so any help is appreciated.  I'm guessing at appropriate paths in src/path-prefix.h, which get activated with configure's --enable-osxapp now.
<syntaxhighlight lang="bash">
# use a clean Homebrew environment (optional)
LIBPREFIX="/opt/homebrew"
export PATH="$LIBPREFIX/bin:/usr/bin:/bin:/usr/sbin:/sbin"


Also, we probably need to do all this stuff too:
# keg-only libraries
http://gimp-app.sourceforge.net/gimp.app.howto.txt
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
</syntaxhighlight>


I have succesfully built Inkscape 0.40-1 via Fink under Mac OS X 10.3
=Packaging=


After I have moved to "~/Desktop/Inkscape.app/Contents" following the way explained for the Gimp.app
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:


The application lauches itself with a double-click and it is available there http://niwaconcept.free.fr//x11/Inkscape.zip
* https://github.com/dehesselle/mibap


But if it can be stored there that would be better. The file is 60 Mb do dwnload, and then 280 Mb for the software itself.
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>.


M-Rick
=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


upload:inkscape-0.40-2.jpg
[[Category:Developer Documentation]]
upload:inkscape-0.40-1.jpg
 
----
 
I've downloaded the zip and copied the resulting .app to /Applications.
 
Running it gives the following errors:
 
<pre>/Applications/Inkscape.app/Contents/MacOS robmyers$ ./Inkscape
dyld: ./Inkscape can't open library: /Volumes/Utilisateurs/Users/aymeric/Desktop/Gimp/ScriptExec/build/ScriptExec.build/ScriptExec.build/Objects-normal/ppc/libstdc++_ZeroLink.dylib 
(No such file or directory, errno = 2)
Trace/BPT trap</pre>
 
- robmyers .
 
 
 
----
 
Strange ....
And it puts all the path of my computer ...
 
And scriptExec is the script used by gimp.app, once compiled it is said to change the name.
 
When I ran inkscape from my computer, I did from many locations and no problems, I will see I have errors feedbacks.
 
I am not specialized in programming so if someone wants to help no problem.
 
M-Rick
 
----
 
Ok it's done.
 
 
Anyway, there are a few bugs, also present in Fink :
 
Some menus appear behind the windows.
 
Impossible to export as bitmap, there is an error message "The chosen area to be exported is invalid" and I have it even if I change the path.
 
I made a DMG, you can download and test it there http://niwaconcept.free.fr//x11/Inkscape.zip
 
M-Rick
 
----
 
That works perfectly. And the .dmg window looks very good, it's a perfect Mac installer.
 
Thanks!
 
- robmyers .
 
----
 
Erk! But when I try it on a machine without Fink installed, I get the following error:
<pre>
dyld: /Applications/Inkscape.app/Contents/Resources/bin/inkscape can't open library: /sw/lib/libgtkmm-2.4.1.dylib  (No such file or directory, errno = 2)
</pre>
 
This despite the fact that libgtkmm is present in the Inkscape.app/Contents/Resources/lib/ directory.
 
- robmyers .
 
 
----
 
Yes, I just made an update for it. I tricked it, because it is looking for a sw folder, so i made a link to the software, just double-click it and and it will create it automatically for you, until I find the way to not have to do this.
 
M-Rick
 
----
 
Does Gimp.app do this? What happens if someone uses Fink and /sw already exists?
 
Downloading, running and installing, this now works after a couple of runs. Don't know if I was being impatient. :-)
 
- Inkscape MacOSX Testing Team (i.e. robmyers :-) ).
 
 
----
 
No Gimp.app doesn't do that. Inkscape does that because I haven't found yet the way it tries to find the share folder.
If you already have Fink installed, well, it will not erase it just add the link.
 
Inkscape.app has a problem with the GTK pixmaps location, so I have made a script inside the software that will create a link automatically. So for the first launch, it is better to launch under an admin session.
But if you have Fink already installed, it won't work unless you are root, so if you don't want to login as root, you can change the settings of the folders /sw and /sw/share to Group/Admin and Acces/Read and Write.
 
If someone finds the way to correct this, we won't have to do this trick anymore.
 
M-Rick
 
----
 
I think the program will need to add the pixmap location dynamically to $GTK_PATH on startup using setenv before starting Inkscape proper?
 
- robmyers .
 
----
 
I've installed inkscape.app. It works quite well on Japanese environment. "KANJI" can be used!
 
Ken
 
upload:japanese.jpg
 
-----
 
I've installed it and it works. Very nice. The background image in the DMG is a nice touch, though you could maybe add the standard 'drag this icon to your applications folder' text to that. I still find Inkscape rather slow -- with the Windows version I assumed it was just a porting issue. Is the same true here? I have an SVG document with about 1000 objects. BTW, curious bug -- tooltips for floating palettes appear ''below'' them!
 
-----
 
Damn, I'm at work and don't have my mac with me! Can't wait to get home and install this!!! I'll see what I can do about some of these problems, too.
 
-----
 
I gave the DMG a try on my PowerBook running 10.3, with Fink and Gimp.app installed.  It seems to work ok, except most of the tool icons don't show up.  When I hover over them I get a blue Aqua-lozenge background and the tooltip, but the icon never shows up.  The only ones that do are New File, Open File, Save, Print, Undo, Redo, Copy, Cut, and Paste.  FYI.
 
-Ken-ichi
 
 
-----
 
A note about the icons: the app icon is fantastic, as is the inkscape SVG document icon. The other document icons are good too, but the file extension badge shouldn't stick out from the page image (see [http://developer.apple.com/documentation/UserExperience/Conceptual/OSXHIGuidelines/XHIGIcons/chapter_5_section_2.html#//apple_ref/doc/uid/20000967/TPXREF117]).
 
------
 
Has anyone besides me noticed that inkscape loads VERY slowly (>1.5 minutes)?  Is this normal?
 
Marcus Collins
 
------
 
On my PowerBookG4 12in 867MHz, loading time of Inkscape(fink): 20 sec, Inkscape.app: 135 sec. VERY slowly.(v_v)
 
Ken
 
----
 
Well yes it is very slow. Even via Fink, the delay in launch time is due to library checking .... I ond't know how to solve it, so if someone is ready to check the sources it's OK. I don't know the exact command it uses to check them. Once this corrected, it will launch fast as in Fink.
 
For the pixmaps, it's because of the problem just above, since I don't know how it checks the lib paths, the pixmaps checking is wrong, so you must make a link from Inkscape.app/Contents/Resources/lib/libgtkmm-2.4.1.dylib to /sw/lib
 
M-Rick
 
----
 
I've added Inkscape to FreeSMUG (Free Software Mac User Group) directory:
http://www.freesmug.org/review/inkscape
 
Happy MhACking.
 
Gand.
 
----
 
About freesmug.org you talk about menus that appears behind windows. It appears only if you use quartz-wm. For people who have for example kde, it works fine, but it's slower to launch/use.
 
Darwinports has the 0.41 package now. It still has awfull dependencies (why compiling ALL gnome just to get inkscape?). But it works fine. I didn't try your .dmg file thou.
 
iznogoud_

Latest revision as of 02:45, 31 October 2024

Section about MacPorts IS OUTDATED AND UNMAINTAINED! Section about HomeBrew IS UP TO DATE as of Oct 30, 2024

Using MacPorts

If you can build successfully with MacPorts, please update this file and remove above comment.

  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

Prerequisites:

  • Xcode (AppStore)
  • Xcode command line tools (xcode-select --install)
  • HomeBrew

If you are using Homebrew instead, you can still use the above guidelines with small modifications. (Make sure you don't have any MacPorts stuff in your PATH.)

List of packages to install with brew (for Inkscape on master branch using GTK4):

brew install \
    adwaita-icon-theme \
    bdw-gc \
    boost \
    cairomm \
    ccache \
    cmake \
    double-conversion \
    gettext \
    gsl \
    gspell \
    gtkmm4 \
    gtksourceview5 \
    imagemagick \
    intltool \
    lcms2 \
    libomp \
    libsoup@2 \
    libxslt \
    ninja \
    pkg-config \
    poppler \
    potrace

You may substitute imagemagick with graphicsmagick.

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.

Tested with:

  • M1 MacBook Air with macOS 11.6 and Inkscape 1.2-dev
  • M2 MacBook Air with macOS 13.0.1 and Inkscape 1.2.1, 1.2.x from git.
  • M2 Mac Mini with macOS 14.2 and Inkscape 1.4-dev. (After adding pkg-config.)
  • VM with macOS 15.1 and Inkscape 1.5-dev (master branch)
# 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