|
|
| Line 1: |
Line 1: |
| = Building Inkscape on RHEL4 =
| |
|
| |
|
| This page documents the process I used to build Inkscape 0.47 on Red Hat Enterprise Linux, Version #4 (RHEL4.)
| |
|
| |
| Many consider RHEL4 to be an archaic operating system.<br>
| |
| I prefer to view it as mature, stable and predictable. <tt>:-)</tt>
| |
|
| |
| I do not believe there is much about this procedure which is specific to RHEL4.<br>
| |
| It would probably work on any good Linux installation.
| |
|
| |
| I performed this process on 19-FEB-2010 so this information is
| |
| already out of date.
| |
|
| |
| --[[User:Wcrocke|Bill Crocker]]
| |
|
| |
| = Motivation =
| |
|
| |
| The company I work for is not free to run the latest OS versions.
| |
| We are constrained by our major application vendors.
| |
| That leaves us stuck on RHEL4,
| |
| which appears to come bundled with Inkscape 0.44
| |
|
| |
| Meanwhile I'm watching all sorts of cool Inkscape tutorials on the web, but
| |
| they use later versions.
| |
|
| |
| My sys-admins would not consider an
| |
| Inkscape upgrade due to the contamination issue noted below.
| |
| The build process documented here avoids system installs
| |
| by using a local install directory.
| |
|
| |
| This is an old-school build as I download and compile source code
| |
| and do not use any RPMs.
| |
|
| |
| = List of packages =
| |
|
| |
| Following is the list of packages I used.
| |
| Compiling this list was no small feat
| |
| and took over 15 hours. I consider it a miracle I
| |
| was able to converge on a compatible set of packages and compiler.
| |
|
| |
| The packages are listed here in the order in which I built them.
| |
| Some packages, like gc6.8,
| |
| have no dependencies and could be built at any time.
| |
| The pango-1.24.5 package, on the other hand, requires cairo-1.8.8
| |
| and so must be built after the cairo package.
| |
|
| |
| Not all of the packages listed here are the latest versions
| |
| available at the time I performed the build.
| |
| In several cases I had to back off one or two years because my
| |
| compiler (gcc 3.4.4) did not like the more recent versions.
| |
|
| |
| {| class="wikitable" border="0" cellpadding="0" cellspacing="0" style="font-family:Courier"
| |
| |-
| |
| |align="right"|libpng-1.2.41||http://sourceforge.net/projects/libpng/files
| |
| |-
| |
| |align="right"|pixman-0.17.4||http://www.cairographics.org/releases
| |
| |-
| |
| |align="right"|freetype-2.3.9||http://download.savannah.gnu.org/releases-noredirect/freetype
| |
| |-
| |
| |align="right"|fontconfig-2.8.0||http://fontconfig.org/release
| |
| |-
| |
| |align="right"|cairo-1.8.8||http://www.cairographics.org/releases
| |
| |-
| |
| |align="right"|glib-2.22.3||http://www.linuxfromscratch.org/blfs/view/cvs/general/glib2.html
| |
| |-
| |
| |align="right"|pango-1.24.5||http://ftp.gnome.org/pub/GNOME/sources/pango
| |
| |-
| |
| |align="right"|jasper-1.701.0||http://www.ece.uvic.ca/~mdadams/jasper/#download
| |
| |-
| |
| |align="right"|atk-1.29.4||http://www.icewalkers.com/Linux/Software/514330/ATK.html
| |
| |-
| |
| |align="right"|libsigc++-2.2.0||http://ftp.gnome.org/pub/GNOME/sources/libsigc++
| |
| |-
| |
| |align="right"|gob2-2.0.16||http://slackbuilds.org/repository/13.0/development/gob2/
| |
| |-
| |
| |align="right"|glibmm-2.22.0||http://www.gtkmm.org/download.shtml
| |
| |-
| |
| |align="right"|cairomm-1.6.4||http://www.cairographics.org/releases
| |
| |-
| |
| |align="right"|pangomm-2.26.0||http://ftp.gnome.org/pub/gnome/sources/pangomm
| |
| |-
| |
| |align="right"|gtk+-2.18.7||http://ftp.gnome.org/pub/gnome/sources/gtk+
| |
| |-
| |
| |align="right"|gtkmm-2.18.2||http://ftp.acc.umu.se/pub/gnome/sources/gtkmm
| |
| |-
| |
| |align="right"|gsl-1.13||ftp://ftp.gnu.org/gnu/gsl
| |
| |-
| |
| |align="right"|gc6.8||http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source
| |
| |-
| |
| |align="right"|libxml2-2.7.6||ftp://xmlsoft.org/libxml2
| |
| |-
| |
| |align="right"|libxslt-1.1.26||ftp://xmlsoft.org/libxml2
| |
| |-
| |
| |align="right"|lcms-1.19||http://www.littlecms.com/downloads.htm
| |
| |-
| |
| |align="right"|inkscape-0.47||http://www.inkscape.org/download
| |
| |}
| |
|
| |
| Please do not change any of these package numbers without confirming a compatible set.
| |
|
| |
| = Do not contaminate your computer =
| |
|
| |
| I recommend that you use a local installation directory
| |
| instead of installing packages in the standard system directories.
| |
|
| |
| When you add new files (or replace existing) files
| |
| in system directories you are effectively contaminating
| |
| the computer. Programs that used to work may not work any longer
| |
| and you may not realize that harm has been not until
| |
| the trail has grown cold. (We have all had this happen,
| |
| especially on Windows; You go to run some program and it
| |
| does not work any more.)
| |
|
| |
| Certainly, if you are experimenting, this is the right move.
| |
|
| |
| Also, you do not need sudo or the root password.
| |
|
| |
| = Build directory layout =
| |
|
| |
| Pick an empty directory in which to download
| |
| and build all packages.
| |
|
| |
| In addition to a separate build directory for each package,
| |
| add one additional sub-directory to server as the
| |
| installation point.
| |
|
| |
| The package directories will be created when you de-tar the
| |
| downloads.
| |
|
| |
| = Preparing your shell environment =
| |
|
| |
| The following assumes that your root build directory
| |
| is <tt>"/home/me/inkscape"</tt> and that it has a sub-directory
| |
| named <tt>"install"</tt> which will serve as the installation point.
| |
|
| |
| <tt>
| |
| :setenv INSTDIR "/home/me/inkscape/install"
| |
| :setenv CXXFLAGS "-I${INSTDIR}/include"
| |
| :setenv CPPFLAGS "-I${INSTDIR}/include"
| |
| :setenv LDFLAGS "-L${INSTDIR}/lib -lm"
| |
| :setenv LD_LIBRARY_PATH "${INSTDIR}/lib:${LD_LIBRARY_PATH}"
| |
| :setenv PKG_CONFIG_PATH "${INSTDIR}/lib/pkgconfig"
| |
| :setenv PATH "${INSTDIR}/bin:${PATH}"
| |
| </tt>
| |
|
| |
| Why do we need these settings?
| |
|
| |
| There are package dependencies.
| |
| For example, we build <tt>pango</tt>, <tt>cairo</tt> and <tt>jasper</tt>
| |
| early in the build-order and they will be used to
| |
| build <tt>gtk+</tt> later in the build order.
| |
| That explains <tt>CXXFLAGS</tt>(compilation flags),
| |
| <tt>CPPFLAGS</tt>(more compilation flags), <tt>LDFLAGS(link flags)</tt> and
| |
| <tt>PKG_CONFIG_PATH</tt>(used at link time, I guess)
| |
|
| |
| I set <tt>PATH</tt> because some packages install programs
| |
| in the <tt>${INSTDIR}/bin</tt> directory. These programs are
| |
| used by later packages to determine version information.
| |
| Therefore, they must be found along the <tt>PATH</tt>.
| |
| That is also why I recommend a <tt>rehash</tt> after building each package.
| |
|
| |
| I set <tt>LD_LIBRARY_PATH</tt> for the same reason.
| |
| For these programs to run they must find all
| |
| required libraries, some of which were installed
| |
| in the <tt>${INSTDIR}/lib</tt> directory.
| |
|
| |
| I added the math library "-lm" to <tt>LDFLAGS</tt> to work
| |
| around the jasper library idiosyncrasy as noted below.
| |
|
| |
| = Which compiler =
| |
|
| |
| I used gcc version 3.4.4
| |
|
| |
| = How to build a package =
| |
|
| |
| The following procedure works for most packages,
| |
| but it does not work for all of them.
| |
| The exceptions are noted in sections later in this document.
| |
| So, you should not build any packages until you have read
| |
| this entire document.
| |
|
| |
| Download the compressed tar file to the root directory.
| |
|
| |
| Uncompress the file.
| |
|
| |
| :<tt>gunzip xyz-1.2.3.tar.gz</tt>
| |
|
| |
| De-tar the file. This will create a dedicated sub-directory in which to build the package.
| |
|
| |
| :<tt>tar xvf xyz-1.2.3.tar</tt>
| |
|
| |
| Change to the package directory.
| |
|
| |
| :<tt>cd xyz-1.2.3</tt>
| |
|
| |
| Configure the package.
| |
|
| |
| <tt>
| |
| :./configure -prefix ${INSTDIR}
| |
| </tt>
| |
|
| |
| Compile.
| |
|
| |
| <tt>
| |
| :make
| |
| </tt>
| |
|
| |
| Install.
| |
|
| |
| <tt>
| |
| :make install
| |
| </tt>
| |
|
| |
| Update your shells program cache.
| |
|
| |
| <tt>
| |
| :rehash
| |
| </tt>
| |
|
| |
| If you want to ''rebuild'' a component you will need
| |
| to do the following first:
| |
|
| |
| <tt>
| |
| :make clean
| |
| :make distclean
| |
| </tt>
| |
|
| |
| = Package idiosyncrasies =
| |
|
| |
| == Build order and dependencies ==
| |
|
| |
| The packages must be built and installed in the documented order.
| |
| When built in the documented order <tt>./configure</tt> should not complain (and abort) about any dependency violations.
| |
| See the section on <tt>./configure</tt> later in this document.
| |
|
| |
| == When building jasper-1.701.0 ==
| |
|
| |
| 1: By default, jasper builds to a static library, but packages which use jasper
| |
| expect a shared build so an additional argument must be added to the <tt>./configure</tt> command.
| |
|
| |
| :<tt>./configure --prefix ${INSTDIR} --enable-shared</tt>
| |
|
| |
| 2: The gtk configure script aborted the first time I tried it because the required jasper library
| |
| could not be found, but the real problem was that the
| |
| <tt>./configure</tt> test for availability failed to link because
| |
| it did not include the standard math library "-lm".
| |
| So, I added -lm to LDFLAGS and then it was happy.
| |
| The lesson here is to always check the <tt>config.log</tt> file
| |
| for the ''real'' <tt>./configure</tt> failure story.
| |
|
| |
| == When building gc4.8 ==
| |
|
| |
| ''(added by kubaraczkowski after installing into CentOS 5.5, inkscape 0.48)''
| |
|
| |
| 1: For some reasons the gc has to be compiled with --disable-shared and --enable-static given to the ./configure script.
| |
|
| |
| :<tt>./configure --prefix ${INSTDIR} --disable-shared --enable-static</tt>
| |
|
| |
| 2: Even with this set correctly you might need to tweak CPPFLAGS and LPFLAGS to point only to the gc include/lib folders. Somehow inkscape does not find the libgc even though it is installed...
| |
|
| |
| == When building libxml2-2.7.6 ==
| |
|
| |
| 1: <tt>./configure</tt> complains about this at the end, but it does not appear to have any significant consequences.
| |
|
| |
| :<tt>/bin/rm: cannot remove `libtoolT': No such file or directory</tt>
| |
|
| |
| == When building libxslt-1.1.26 ==
| |
|
| |
| 1: <tt>lbxsltv</tt> uses <tt>${INSTDIR}/bin/xml2-config</tt> to determine the version of the <tt>libxml(2)</tt>
| |
| library which is available. This is an executable which needs to be found along the PATH.
| |
| So, the bin sub-directory of the install location has to be added to the <tt>PATH</tt>. Thus the above <tt>"setenv PATH ..."</tt>
| |
|
| |
| 2: <tt>./configure</tt> complains about this at the end, but it does not appear
| |
| to have any significant consequences.
| |
|
| |
| :<tt>/bin/rm: cannot remove `libtoolT': No such file or directory</tt>
| |
|
| |
| 3: The <tt>libxsl</tt> package builds libraries '''and''' the program <tt>xsltproc</tt>.
| |
| I could not get <tt>xsltproc</tt> to link, but it is not required
| |
| to build Inkscape, so I edited the <tt>Makefile</tt>
| |
| and removed it so that the make would complete.
| |
| Note: <tt>Makefiles</tt> are made by <tt>./configure</tt>. That is what it does.
| |
|
| |
| == When building inkscape-0.47 ==
| |
|
| |
| 1: Surprising compilation error in one of the source files.
| |
|
| |
| :document.cpp:185: error: ISO C++ forbids casting between pointer-to-function and pointer-to-object
| |
|
| |
| So I hacked line 185 from this:
| |
|
| |
| :<tt>reinterpret_cast<gpointer>(sp_document_reset_key),</tt>
| |
|
| |
| to this:
| |
|
| |
| :<tt>reinterpret_cast<gpointer>((void*)sp_document_reset_key),</tt>
| |
|
| |
| = Surviving <tt>./configure</tt> =
| |
|
| |
| 1: If <tt>./configure</tt> tells you that it can't find a dependent package,
| |
| that may not be the real problem. Always check the <tt>config.log</tt> file for the real story.
| |
|
| |
| As noted above, when <tt>./configure</tt> told me that it could not find
| |
| the <tt>jasper</tt> package, a look in the <tt>config.log</tt> file revealed that
| |
| the logic used to determine the existence of the <tt>jasper</tt>
| |
| package involved building a little test program. That test program
| |
| failed to link because it could not find symbols like <tt>pow</tt> and <tt>floor</tt>.
| |
| I new these came from the math library and fixed the problem by
| |
| adding <tt>"-lm"</tt> to the <tt>LDFLAGS</tt> environment variable.
| |
|
| |
| 2: The first time I tried to build Inkscape (6 months ago) <tt>./configure</tt> said (something like) this:
| |
|
| |
| :<tt>Dependency (gmodule-2.0 >= 2.21.1) not met.</tt>
| |
|
| |
| This effort ended in frustration because I could not find the <tt>gmodule</tt>
| |
| package anywhere on the web. This time I determined that <tt>gmodule</tt>
| |
| is actually a library and it is provided by the <tt>glib-2.22.3</tt>
| |
| package. (At the end of the build process the <tt>install/lib</tt> directory
| |
| contained 38 library files (*.so), but I had only built 22 packages.)
| |
|
| |
| 3: And, um, oh yes... '''Always check the <tt>config.log</tt> file.'''
| |
|
| |
| = The final list of library dependencies =
| |
|
| |
| Following is the list of dependencies for the final Inkscape executable.
| |
| Note that the library versions listed in this table bear no correspondence
| |
| to the package from which they were built.
| |
| For example, we built libgtkmm from the package gtkmm-2.18.2, but got the library libgtkmm-2.4.so.1
| |
| This just adds to the confusion.
| |
|
| |
| <tt>
| |
| :libgtkmm-2.4.so.1
| |
| :libatkmm-1.6.so.1
| |
| :libgdkmm-2.4.so.1
| |
| :libgiomm-2.4.so.1
| |
| :libpangomm-1.4.so.1
| |
| :libglibmm-2.4.so.1
| |
| :libcairomm-1.0.so.1
| |
| :libgtk-x11-2.0.so.0
| |
| :libgdk-x11-2.0.so.0
| |
| :libatk-1.0.so.0
| |
| :libgio-2.0.so.0
| |
| :libpangoft2-1.0.so.0
| |
| :libgdk_pixbuf-2.0.so.0
| |
| :libpangocairo-1.0.so.0
| |
| :libpango-1.0.so.0
| |
| :libfreetype.so.6
| |
| :libfontconfig.so.1
| |
| :libgobject-2.0.so.0
| |
| :libgmodule-2.0.so.0
| |
| :libxslt.so.1
| |
| :libz.so.1
| |
| :libxml2.so.2
| |
| :libcairo.so.2
| |
| :libsigc-2.0.so.0
| |
| :libgthread-2.0.so.0
| |
| :librt.so.1
| |
| :libglib-2.0.so.0
| |
| :libpng12.so.0
| |
| :libgsl.so.0
| |
| :libgslcblas.so.0
| |
| :libm.so.6
| |
| :libgomp.so.1
| |
| :libpopt.so.0
| |
| :libaspell.so.15
| |
| :libgc.so.1
| |
| :libstdc++.so.6
| |
| :libgcc_s.so.1
| |
| :libpthread.so.0
| |
| :libc.so.6
| |
| :libdl.so.2
| |
| :libX11.so.6
| |
| :libresolv.so.2
| |
| :libpixman-1.so.0
| |
| :libexpat.so.0
| |
| :libXrender.so.1
| |
| :libSM.so.6
| |
| :libICE.so.6
| |
| :libXinerama.so.1
| |
| :libXext.so.6
| |
| </tt>
| |
|
| |
| = My operating system =
| |
|
| |
| <tt>
| |
| >uname -a<br>
| |
| Linux juno 2.6.9-89.0.9.ELsmp #1 SMP Wed Aug 19 08:06:10 EDT 2009 x86_64 x86_64 x86_64 GNU/Linux
| |
|
| |
| >cat /etc/issue<br>
| |
| Red Hat Enterprise Linux WS release 4 (Nahant Update 8)<br>
| |
| Kernel \r on an \m
| |
| </tt>
| |