Development Environment with solver
Contents
Introduction
This document describes how to set up an OpenOffice.org development environment with solver in a few hours.
Target readers
Software engineers who want or need to fix a bug or to enhance OpenOffice.org.
Two ways to set up an environment
There are at least two ways to set up a development environment: entire build and use of solver.
Method Steps Merits Drawbacks Entire build 1. Download source tar-balls of OpenOffice.org.
2. Extract them.
3. Build OpenOffice.org entirely from scratch.
No need to take care of distribution. Need to wait until build process is finished. It might be for more than one day.
Impossible to provide your customers with patch files. You will have to deliver an installer of OpenOffice.org and your customers will need to uninstall an official OpenOffice.org built by the community and then install your own OpenOffice.org. You might be responsible for the whole OpenOffice.org.
Use of solver 1. Download both source tar-balls and solver of OpenOffice.org.
2. Extract them.No need to wait.
Possible to provide your customers with patch files. All your customers need is to replace some files already installed in their PC with the patch files. You would not be responsible for the whole OpenOffice.org but only part of OpenOffice.org.
Need to carefully choose a distribution that meets an environment used for the community builds. This document will explain the latter one, use of solver.
solver
Solver is a name of folder that holds all the necessary files created during a process of building OpenOffice.org.
The OpenOffice.org community normally delivers an installer of OpenOffice.org along with the corresponding solver.
Further information on solver can be found at http://www.openoffice.org/dev_docs/source/solver.html
Conventions
- In this document it is assumed that you are using bash.
- To make it easy to copy some example command lines in this document and paste them into your terminal emulator, a shell prompt is intensionally omitted. Please differentiate which line is a command that you will type and which line is an output that is produced by the command.
- When invoking a UNIX command, you should be an appropriate user, a super user or normal user.
For example, the following example cited in this document
./configure make make installimplies
(normal user)$ script (normal user)$ ./configure (normal user)$ make (normal user)$ exit (normal user)$ /bin/su (super user)# script -a (super user)# make install (super user)# exit (super user)# exit
Development Environment on Linux
Prerequisites
Firstly, it would be meaningful to know the System Requirements for OpenOffice.org 2 released by the community. It says that
Linux kernel version 2.2.13 or higher, glibc2 version 2.2.0 or higherThe Linux kernel-2.2.13 became available late in 1999. Looking for similar distributions, you would find some:
- Red Hat Linux 6.1 released in October, 2000 comes with kernel-2.2.12.
- Red Hat Linux 6.2 released in April, 2000 comes with kernel-2.2.14.
- Turbolinux Workstation 6.0 released in June, 2000 comes with kernel-2.2.13 and glibc-2.1.2.
Nowadays it is relatively difficult to get such a somewhat antique distribution. So we will need to find an alternative.
Choosing a Linux distribution
Secondarily, choose a Linux distribution. There are many distributions currently available. Since the 'solver' seems to be created on the environment firstly prepared in the year of around 2000, some of the distributions can work with it, but others can not.
Fedora Core Distributions
Fedora Core and Fedora distributions are freely available and widely used in the world.
Versions of the packages bundled in the Fedora Core and Fedora distributions
Package FC1 FC2 FC3 FC4 FC5 FC6 Fedora 7 Fedora 8 kernel 2.6.5 2.6.9 2.6.11 2.6.15 2.6.18 2.6.21 2.6.23 glibc 2.3.3 2.3.3 2.3.5 2.4 2.5 2.6 2.7 gcc 3.3.3 3.4.2 4.0.0 4.1.0 4.1.1 4.1.2 4.1.2 binutils 2.15.90 2.15.92 2.15.94 2.16.91 2.17.50 2.17.50 2.17.50 ant 1.5.2 n/a 1.6.2 1.6.5 1.6.5 n/a 1.7.0 scim n/a n/a n/a 1.4.4 1.4.4 1.4.5 1.4.7 n/a: Not Available
Dependencies
- extended/2.3.0rc3/OOo_2.3.0_LinuxIntel_solver.tar.gz seems to be built with gcc-3.4.1. See http://wiki.services.openoffice.org/wiki/Compiler_versions_used_by_port_maintainers_and_release_engineers
- gcc-3.4.x series does not work with binutils-2.16.x due to gcc's bug http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33938 . See http://www.google.com/search?q=defined+in+discarded+section
- configure of OpenOffice.org 2.3.0 requires ant-1.6.0 or later.
Choice
Fedora Core 4 plus gcc-3.4.1 seems to be the better choice among the Fedora distributions.
Setting up development environment
Setting up a Fedora Core 4 box
- Visit http://fedoraproject.org/
- Follow links to find a list of mirror servers.
- Download core/4/i386/iso/FC4-i386-DVD.iso
- Install it.
- Additionally install necessary packages, if needed.
To use yum, you will need to create a directory 'repodata' since FC4-i386-DVD.iso does not have it while an iso image of Fedora 8 does.
mount -o /dev/cdrom /mnt mkdir /var/tmp/RPMS cd /var/tmp/RPMS ln -s /mnt/Fedora/RPMS/* . createrepo .To use the repodata, specify a path of the directory in which repodata is.
cd /etc/yum.repos.d mkdir disabled mv *.repo disabled cat > dvd.repo [dvd] name=Fedora 4 Install DVD baseurl=file:///var/tmp/RPMS gpgcheck=0 ^D yum list yum install name_of_package mv disabled/* . mv dvd.repo disabled umount /mntInstalling gcc-3.4.1
- Visit http://gcc.gnu.org/
- Follow links to find a list of mirror servers.
- Download releases/gcc-3.4.1/gcc-3.4.1.tar.gz
- Apply two patches following an article [porting-dev] OOo Linux builds: Hamburg RE switches over to gcc-3.4.1 by Jens-Heiner Rechtien.
- enum patch - http://gcc.gnu.org/ml/gcc-patches/2004-07/msg00968.html by Jakub Jelinek
- visibility patch - http://www.nedprod.com/programs/gccvisibility.html by Niall Douglas
- Install it following instructions at gcc-3.4.1/INSTALL/index.html
bunzip2 -dc gcc-3.4.1.tar.bz2 | tar zxf - cd gcc-3.4.1 patch -p0 < ../Fix_C++_enums_handling_in_build_range_check.patch patch -p1 < ../GCC3.4.0VisibilityPatch2.diff mkdir -p build/object cd build/object ../../configure '--enable-languages=c,c++' make bootstrap make installHere is an example file Fix_C++_enums_handling_in_build_range_check.patch
This example is cited from http://gcc.gnu.org/ml/gcc-patches/2004-07/msg00968.html
and then a portion "--- gcc/fold-const.c.jj" in the first line is intentionally replaced with "--- gcc.original/fold-const"--- gcc.original/fold-const 2004-07-09 13:50:54.000000000 +0200 +++ gcc/fold-const.c 2004-07-09 18:10:52.945905468 +0200 @@ -3844,7 +3844,13 @@ build_range_check (tree type, tree exp, HOST_WIDE_INT hi; int prec; - prec = TYPE_PRECISION (etype); + /* For enums the comparison will be done in the underlying type, + so using enum's precision is wrong here. + Consider e.g. enum { A, B, C, D, E }, low == B and high == D. */ + if (TREE_CODE (etype) == ENUMERAL_TYPE) + prec = GET_MODE_BITSIZE (TYPE_MODE (etype)); + else + prec = TYPE_PRECISION (etype); if (prec <= HOST_BITS_PER_WIDE_INT) { hi = 0;Installing JDK
- Visit http://java.sun.com/
- Follow a link 'Java SE' to find a JDK 6.
- Download and install it.
/bin/sh jdk-6u3-linux-i586-rpm.binTweaking pre-installed ant
Since the pre-installed ant bundled in Fedora Core 4 does not work with JDK released by Sun, clear an environment variable JAVA_HOME which will be assigned by LinuxX86Env.Set.sh .
- Backup /etc/ant.conf
- Edit /etc/ant.conf to append a line 'JAVA_HOME=' at the end of file.
cp -p /etc/ant.conf{,-original} vi /etc/ant.conf diff /etc/ant.conf{-original,} 22a23 > JAVA_HOME=Downloading files
Getting files of OpenOffice.org
You will need an installer, source tar-balls, and solver of OpenOffice.org.
- Visit http://download.openoffice.org/ .
- For 2.3.0, download the following files:
- stable/2.3.0/OOo_2.3.0_LinuxIntel_install_wJRE_en-US.tar.gz or localized/your_preferable_language/2.3.0/OOo_2.3.0_LinuxIntel_install_wJRE_xxxxx.tar.gz
- stable/2.3.0/OOo_2.3.0_src_binfilter.tar.bz2
- stable/2.3.0/OOo_2.3.0_src_core.tar.bz2
- stable/2.3.0/OOo_2.3.0_src_l10n.tar.bz2
- stable/2.3.0/OOo_2.3.0_src_sdk.tar.bz2
- stable/2.3.0/OOo_2.3.0_src_system.tar.bz2
- extended/2.3.0rc3/OOo_2.3.0_LinuxIntel_solver.tar.gz
- Install OOo_2.3.0_LinuxIntel_install_wJRE.xxx following instructions http://download.openoffice.org/common/instructions.html
- Expand the source tar-balls.
- Expand the solver tar-balls.
fox x in /where_downloaded/stable/2.3.0/OOo_2.3.0_src_*.tar.bz2; do bunzip2 -dc $x | tar -xf -; done tar -zxf /where_downloaded/extended/2.3.0rc3/OOo_2.3.0_LinuxIntel_solver.tar.gz cd OOG680_m5 ln -s ../solver .Getting extra files
You will need some extra files.
unowinreg.dll
cp -p solver/680/unxlngi6.pro/bin/unowinreg.dll external/unowinregmoz/download
cd moz/download wget -nd -r http://releases.mozilla.org/pub/mozilla.org/mozilla/releases/mozilla1.7.5/source/mozilla-source-1.7.5.tar.bz2 cd ../..Configuration
Running configure
- Run the shell script configure .
cd config_office sh -xv LinuxConfig.shHere is a sample shell script LinuxConfig.sh for the configure .
#!/bin/bash --norc export LANG=C export PATH=/bin:/usr/bin:/usr/X11R6/bin export CC=/usr/local/bin/gcc export CXX=/usr/local/bin/g++ ./configure \ --with-jdk-home=/usr/java/defaultMaking dmake
- Make dmake using a shell script bootstrap created by the configure .
cd .. ./bootstrap
- Documentation: http://tools.openoffice.org/dmake/
Building a module
Preparation
You will need to set up certain environment variables.
- Run the shell script LinuxX86Env.Set.sh
. LinuxX86Env.Set.shBuilding a module
- Run an alias command build to build a module
cd sw buildOptions of build
To add an option -g to gcc, give an option debug=1 to the alias command build.
build debug=1To add a CFLAGS,
build debug=1 envcflagscxx=-DHDU_DEBUGTo add more than one options,
build debug=1 'envcflagscxx="-DHDU_DEBUG -DTORA_DEBUG"'Known error messages
If you encounter the following error messages that prevent building process, try some solutions described here.
version `CXXABI_1.3.1' not found
Checking DLL ../unxlngi6.pro/lib/check_libsw680li.so ...: ERROR: /xxx/2.3.0/OOG680_m5/solver/680/unxlngi6.pro/lib/libstdc++.so.6: version `CXXABI_1.3.1' not found (required by ../unxlngi6.pro/lib/check_libsw680li.so)
- Solution: Use gcc-3.4.x instead of gcc-4.x.x
referenced in section `.rodata' of ... defined in discarded section `.gnu.linkonce.t. ...
`.L125' referenced in section `.rodata' of ../unxlngi6.pro/slo/grfatr.o: defined in discarded section `.gnu.linkonce.t._ZN3com3sun4star3unorSERKNS2_3AnyERd' of ../unxlngi6.pro/slo/grfatr.o
- Solution: Use gcc-3.4.x with binutils-2.15.x instead of binutils-2.16.x
- References: http://www.openoffice.org/servlets/BrowseList?list=dev&by=thread&from=1308946
undefined reference to `__ctype_b'
/xxx/2.3.0/OOG680_m5/solver/680/unxlngi6.pro/lib/libaudio.a(ConnSvr.o)(.text+0x1be): In function `MakeTCPConnection': ConnSvr.c: undefined reference to `__ctype_b' /xxx/2.3.0/OOG680_m5/solver/680/unxlngi6.pro/lib/libaudio.a(ConnSvr.o)(.text+0x5a8): In function `_AuConnectServer': ConnSvr.c: undefined reference to `__ctype_b' /xxx/2.3.0/OOG680_m5/solver/680/unxlngi6.pro/lib/libaudio.a(ConnSvr.o)(.text+0x5b1):ConnSvr.c: undefined reference to `__ctype_tolower' /xxx/2.3.0/OOG680_m5/solver/680/unxlngi6.pro/lib/libaudio.a(ConnSvr.o)(.text+0x755):ConnSvr.c: undefined reference to `__ctype_b' collect2: ld returned 1 exit status
- Solution: Run "build" with LINKFLAGSDEFS= that is normally specified as "LINKFLAGSDEFS*=-Wl,-z,defs" in solenv/inc/unxlngi6.mk
- References: an option "-z defs" of ld
LINKFLAGSDEFS= buildDebugging your source code
Now that you have your own shared files (.so) in your development environment.
To debug your code, you will need to replace shared files in the installation set of OpenOffice.org with your shared files that have been just made from your source code.
- Backup original shared files.
- Create symbolic link files addressing to your own shared files.
cd /opt/openoffice.org2.3/program mkdir original-sw mv libsw*.so original-sw ln -s /your_development_environment/sw/unxlngi6.pro/lib/libsw*.so .Debugging with gdb or ddd
- Start your OpenOffice.org with a sample document file to test your source code.
- Use a function in OpenOffice.org in order to load relevant shared library files that you want to debug. E.g. if you want to debug one dialog window in Writer, you would need to start Writer to load shared library files of Writer and then choose a certain entry in the menu or click on a certain button on the tool bar to load UI related shared file of Writer. Otherwise, your dbg would not load any symbol in the target shared library files at its startup. For more details, see help about the the following commands of gdb: info sharedlibrary, add-symbol-file.
- Find a process id of soffice.bin with pgrep .
- Start gdb or ddd givinning the process id to attach to the process of OpenOffice.org
/opt/openoffice.org2.3/program/soffice sample.odt & pgrep soffice.bin nnnnn gdb /opt/openoffice.org2.3/program/soffice.bin nnnnnor, more simply,
/opt/openoffice.org2.3/program/soffice sample.odt & gdb /opt/openoffice.org2.3/program/soffice.bin `pgrep soffice.bin`Tips of gdb and ddd
Since OpenOffice.org is written in two languages, c and c++, the debugger sometime mistakenly chose a type of language. If you encounter an error message like this,
break xxx::yyy Can't find member of namespace, class, struct, or union named "xxx::yyy"try to explicitly specify a type of language.
set language c++