Difference between revisions of "CompilingSunSolaris"

From Inkscape Wiki
Jump to navigation Jump to search
m (Link fixed)
(removed - outdated)
 
Line 1: Line 1:
= Compiling on Oracle/Sun Solaris =
 
  
==Compiling version 0.48.1==
 
 
here you can find how to build inkscape 0.48.1 on Solaris 10 (x86) 64 bit.
 
 
* Chose a prefix path where to install independent of Solaris' own libraries. In my example --prefix=/usr/local is used for all tools
 
* build GNU make and install it into /usr/local/bin
 
* Build one of the newest versions of gcc (I built 4.5.1). Before that install the needed libraries gmp, mpfr, mpc also with --prefix=/usr/local. Build gcc. Re-build the gmp/mpfr/mpc. Re-build gcc. After that you should have no further dependencies to /usr/sfw/lib which is important
 
* Edit the gcc specs to get a clean compilation independent if you use -m64 or -m32. To achieve this have a look at the *link_arch section where to put in additional -R/usr/local/lib and -R/usr/local/lib/64 (gcc configured to use Sun's ld).
 
* build pkg-config with --prefix=/usr/local --libdir=/usr/local/lib/64 for the following packages
 
 
For further installations I used a few environment variables:
 
<pre>
 
export PATH="/usr/local/bin:/usr/bin:/usr/ccs/bin"
 
export MAKE=/usr/local/bin/make
 
export CC="gcc -m64"
 
export CXX="g++ -m64"
 
</pre>
 
 
Build and install the following packages with
 
''./configure --prefix=/usr/local --libdir=/usr/local/lib/64 --sysconfdir=/usr/local/etc/64 --enable-shared''
 
<pre>
 
zlib-1.2.5
 
jpeg-6.2
 
gettext-0.17
 
libiconv-1.12
 
fontconfig-2.8.0
 
t1lib-5.1.0
 
freetype-2.4.4
 
render-0.8
 
libxrender-0.8.4
 
libpng-1.4.4 (cave: 1.5.x does not work with Inkscape!)
 
gsl-1.14
 
pixman-0.21.6
 
glib-2.28.3
 
glibmm-2.24.2
 
atk-1.32.0
 
pango-1.28.3
 
cairo-1.10.2 (rebuild pango after building cairo!!)
 
gtk+-2.24.3 (I avoided the very new version 3.....)
 
gdk-pixbuf-2.22.1
 
poppler-0.16.3 (use the additional flag --enable-xpdf-headers)
 
</pre>
 
 
Then make three small changes to inkscape's source:
 
<pre>
 
src/color-profile.cpp, line 8: Change "#include <sys/fcntl.h>" into "#include <fcntl.h>"
 
 
src/2geom/isnan.h, line 57: The mentioned "#include <cmath>" must be set
 
 
src/2geom/convex-cover.cpp, line 36: include these two lines (ok, quick and dirty....):
 
#undef INFINITY
 
#define INFINITY (__builtin_inff())
 
</pre>
 
 
Now configure inkscape as described above. You should get a clean compile. --[[User:Reinhard|Reinhard]]
 
 
==Compiling version 0.44==
 
 
This documents the changes that I needed to make Inkscape compile with gcc 3.3.2 on Solaris 8.
 
 
* install all hard dependencies
 
* provide a definition of ngettext (thread: http://thread.gmane.org/gmane.comp.graphics.inkscape.devel/15747/focus=15828)
 
* patch isfinite() like described here: http://opensolaris-br.org/osbr/index.php?option=com_content&task=view&id=34&Itemid=56
 
* src/dom/io/socket.cpp - FIONREAD undeclared: http://opendx.npaci.edu/mail/opendx-general/1999.06/msg00425.html (#include <sys/filio.h>)
 
* src/widgets/desktop-widget.cpp: replace round with rint
 
* src/trace/potrace/inkscape-potrace.cpp:288: error: `log2' undeclared (first use of this function)
 
:Add the following function to the file:
 
<pre>
 
// from http://groups.google.de/group/comp.lang.c/msg/8ae70d02495768f5?dmode=source&hl=de
 
double log2(double x)
 
{
 
        static double ln2;
 
        if (ln2 == 0.0)
 
                ln2 = log (2.0);
 
 
        return log (x) / ln2;
 
}
 
</pre>
 
 
* Now stuck here (gc6.7, gcc version 3.3.2):
 
<pre>
 
gc.cpp: In function `void Inkscape::GC::<unnamed>::do_init()':
 
gc.cpp:32: error: parse error before string constant
 
gc.cpp:32: error: `GC_noop1' undeclared (first use this function)
 
gc.cpp:32: error: (Each undeclared identifier is reported only once for each
 
  function it appears in.)
 
gmake[2]: *** [gc.o] Error 1
 
gmake[2]: Leaving directory `/home/marquardt/Tools/inkscape-0.44/src'
 
gmake[1]: *** [all-recursive] Error 1
 
gmake[1]: Leaving directory `/home/marquardt/Tools/inkscape-0.44'
 
gmake: *** [all] Error 2
 
</pre>
 
 
See also http://sourceforge.net/tracker/index.php?func=detail&aid=1516476&group_id=93438&atid=604306
 
 
I got the following patch for "gc6.7/include/gc.h" from Hans Boehm which fixes these problems with gc6.7:
 
 
<pre>
 
947a948
 
>    extern int _end[], _etext[];
 
949,952c950
 
< #    define GC_INIT() { extern int _end[], _etext[]; \
 
<         extern "C" void GC_noop1(GC_word); \
 
<         GC_noop1((GC_word)_end); \
 
< GC_noop1((GC_word)_etext); }
 
---
 
>      extern "C" void GC_noop1(GC_word);
 
954,956c952
 
< #    define GC_INIT() { extern int _end[], _etext[]; \
 
<         extern void GC_noop(); \
 
<         GC_noop(_end, _etext); }
 
---
 
>      void GC_noop1();
 
957a954,955
 
> #  define GC_INIT() { GC_noop1((GC_word)_end); \
 
>       GC_noop1((GC_word)_etext); }
 
</pre>
 
 
With these changes, I got Inkscape running fine.
 
--[[User:Colin Marquardt|Colin Marquardt]]
 
 
==Compiling a 0.39 snapshot==
 
 
When trying to compile the CVS snapshot from 2004-05-27 with
 
gcc 3.3.2 on a
 
<nowiki>SunOS foo 5.8 Generic_108528-22 sun4u sparc SUNW,Sun-Fire-V240</nowiki>
 
machine, I had to fix a few things.
 
 
First, I installed the following packages:
 
<pre>
 
autoconf-2.59
 
automake-1.8.3
 
intltool-0.30
 
expat-1.95.7
 
libpng-1.2.5
 
libsigc++-2.0.3
 
glib-2.4.2
 
glibmm-2.4.2
 
atk-1.7.0
 
render-0.8
 
xrender-0.8.3
 
xft-2.1.2
 
pango-1.4.0
 
gtk+-2.4.2
 
gtkmm-2.4.2
 
</pre>
 
 
I configured Inkscape with the following switches:
 
<pre>
 
./configure --prefix=/home/foo/Tools/ --includedir=/home/foo/Tools/include CPPFLAGS=-I/home/foo/Tools/include
 
</pre>
 
 
Then "fix" stuff in the inkscape sources:
 
 
Uncomment "@INTLTOOL_DESKTOP_RULE@" in Makefile.
 
 
Use <inttypes.h>, not <stdint.h> in
 
<pre>
 
src/display/sp-canvas.h,
 
src/livarot/DblLinked.h,
 
src/livarot/LivarotDefs.h,
 
src/livarot/AVL.h,
 
src/livarot/Shape.h,
 
src/livarot/ShapeUtils.h,
 
src/livarot/Ligne.h
 
src/livarot/AlphaLigne.h
 
src/livarot/BitLigne.h
 
src/livarot/MyMath.h
 
</pre>
 
(see
 
http://www.lns.cornell.edu/public/COMP/info/autoconf/Header-Portability.html)
 
 
 
Replace round() with rint() according to
 
http://news.gw.com/freebsd.gnome/1237 in
 
</pre>
 
src/object-edit.cpp,
 
src/spiral-context.cpp
 
src/star-context.cpp
 
</pre>
 
 
fabsf() was undeclared (I just put in "fabs()", not sure if this is
 
correct) in
 
<pre>
 
src/sp-shape.cpp
 
</pre>
 
(see
 
http://gcc.gnu.org/ml/java/2001-01/msg00465.html).
 
 
Replaced fabsf(), floorf() and ceilf() with fabs(), floor() and ceil() in
 
<pre>
 
src/display/nr-arena-shape.cpp
 
src/display/canvas-bpath.cpp
 
src/display/sp-ctrlline.cpp
 
src/libnrtype/nr-rasterfont.cpp
 
src/livarot/AlphaLigne.cpp
 
src/livarot/BitLigne.cpp
 
src/livarot/Ligne.cpp
 
src/livarot/PathOutline.cpp
 
src/livarot/ShapeMisc.cpp
 
</pre>
 
 
isfinite() is undeclared,  use
 
<pre>
 
#include <ieeefp.h>
 
</pre>
 
and finite() (see http://devrsrc1.external.hp.com/STKS/impacts/i61.html) in
 
<pre>
 
src/display/bezier-utils.cpp
 
</pre>
 
 
Need to include
 
<pre>
 
#include <ieeefp.h>
 
</pre>
 
in
 
<pre>
 
src/libnr/nr-svp.cpp
 
</pre>
 
 
Missing strcasestr() used in libnrtype/nr-type-directory.cpp. I just
 
use the internal version for WIN32 given in the file.
 
 
<pre>
 
In file included from /home/foo/Tools/include/X11/extensions/Xrender.h:33,
 
                from /home/foo/Tools/include/X11/Xft/Xft.h:47,
 
                from libnrtype/nr-type-xft.cpp:16:
 
/usr/openwin/include/X11/Xutil.h:56: warning: ignoring #pragma ident
 
/usr/openwin/include/X11/Xutil.h:117: error: 'Bool' is used as a type, but is
 
  not defined as a type.
 
/usr/openwin/include/X11/Xutil.h:120: error: 'Pixmap' is used as a type, but is
 
  not defined as a type.
 
/usr/openwin/include/X11/Xutil.h:121: error: 'Window' is used as a type, but is
 
  not defined as a type.
 
[...]
 
</pre>
 
etc. Fixed this by adding #include <X11/Xlib.h>
 
before including Xft.h in src/libnrtype/nr-type-xft.cpp.
 
 
`bind_textdomain_codeset' undeclared in src/main.cpp and src/inkscape.cpp. Just copied the definition in that
 
file outside the ifdef.
 
 
`fpresetsticky' undeclared (autoconf seems to have checks for it. Solaris has fpsetsticky() when ieeefp.h is included.)
 
 
No rule for target inkscape.desktop - just created an empty rule.
 
 
DONE! It runs on Solaris! Yay! :)
 
--Colin Marquardt
 
 
=See also=
 
*[[Compiling Inkscape]]
 
 
[[Category:Developer Documentation]]
 

Latest revision as of 14:51, 28 May 2019