Difference between revisions of "CompilingMacOsX"

From Inkscape Wiki
Jump to navigation Jump to search
 
 
(244 intermediate revisions by 35 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 (assuming "fink list inkscape" shows that inkscape's latest version is installed.)
# where to install
PREFIX="$PWD/install-prefix"


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


If you build inkscape yourself, use a full 10.3 install of unstable fink.
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


You may need set the following variables to compile cvs
ninja
(taken right out of fink's .info file). This is in bash syntax.
ninja install
(I havent experimented with this list to see whats the minimum required.. but if I dont include any of the following than it breaks.)
</syntaxhighlight>
<pre>
''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.''
export ACLOCAL_FLAGS="-I /sw/share/aclocal"
<li>Run Inkscape
export CFLAGS=-I/sw/include
<syntaxhighlight lang="bash">
export LDFLAGS=-L/sw/lib
$PREFIX/bin/inkscape
export CXXFLAGS=$CFLAGS
</syntaxhighlight>
export CPPFLAGS=$CXXFLAGS
</ol>
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>


---
= Using Homebrew =


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 .
If you are using [https://brew.sh/ Homebrew] instead, you can still use the above guidelines with small modifications.


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


<syntaxhighlight lang="bash">
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
</syntaxhighlight>


If you need to run "./autogen.sh":
You may substitute <code>imagemagick</code> with <code>graphicsmagick</code>.


fink install automake1.8 autoconf2.5
<code>gtk-mac-integration</code> is not needed with latest <code>1.2-dev</code>.


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


fink install �
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.
        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


Check out the source if you haven't already:


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


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.  :(
Then <code>cd inkscape</code> 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.


Some packaging links:
<syntaxhighlight lang="bash">
http://freespace.ausgamers.com/2005/02/creating-os-x-application-bundles-step.html
# use a clean Homebrew environment (optional)
http://java.sun.com/developer/technicalArticles/JavaLP/JavaToMac3/
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"


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


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


=Packaging=


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


I have succesfully built Inkscape 0.40-1 via Fink under Mac OS X 10.3
* https://github.com/dehesselle/mibap


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


The application lauches itself with a double-click and it is available there http://niwaconcept.free.fr//x11/Inkscape.zip
=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


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.
[[Category:Developer Documentation]]
 
M-Rick
 
upload:inkscape-0.40-2.jpg
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_
 
----
 
Dose Inkscape.app work well on Tiger?
 
Ken
----
I have tried, and tried again, but I am unable to compile Fink on Tiger. I know it's early days (only been out for a week) but I find it interesting that compilation fails - what has changed? Does it involve the new compiler? (GCC 4.x) Error is:
 
  object-edit.cpp: In function `void sp_spiral_outer_set(SPItem*, const
  NR::Point&, const NR::Point&, unsigned int)':
  object-edit.cpp:842: error: `__isfinite' undeclared (first use this function)
  object-edit.cpp:842: error: (Each undeclared identifier is reported only once
  for each function it appears in.)
  make[2]: *** [object-edit.o] Error 1
  make[1]: *** [all-recursive] Error 1
 
I am busy downloading Inkscape.app with the hope that it will work.
 
Dawid Loubser
----
Help! Please help me get this to work. I need Inkscape!
 
If you need Inkscape and inkscape.app isn't working, try fink. You'll need to install the unstable branch, but this works on 10.3 and 10.4 just fine. http://fink.sourceforge.net
 
----
Problems with isnan and isfinite again. New fink package should build fine on tiger.
 
If you are compiling yourself, to save you an hour, add -D__LONG_DOUBLE_128__ to you CPPFLAGS.
 
Peter

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