How did I manage to compile openoffice under win32 with 
hungarian language included?

First of all, what did I use: 641d source file

outlang-034/sorted.txt.gz from
for the hungarian language

Microsoft Visual C++ (Visual Studio 6, egyetemi licensz) + SP3
(Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8804 for

Windows XP Professional (egyetemi licensz!)

Cygnus Cygwin corretly installed.

bison 1.34-1
flex 2.5.4-1

not interesting versions:
unzip 5.41-1
zip 2.3-1
bash 2.05a-3
gawk 3.0.4-1
fileutils 4.1
cygwin 1.3.10-1
tar 1.13.19-1
autoconf 2.53
automake 1.6a
binutils 20011002
gcc 2.95.3
make 3.79
perl 5.6.1-2
cygutils 1.0.0

Other programs:
unz550xN.exe (unzip) (zip)

(msi installer from office xp)

(4NT shell)


microsoft macro assembler:
ml 6.11d
64baaed47692834cc7ba9fbb2cc44393 *98SETUP.EXE
de12f1caec6550b14d0ccb4e7c0e9f6a *BINS_DDK.EXE

Base documents:

1.) Adding new language

To add new language, follow the document:
My changes:

To insert hungarian dictionary I tried (not working!):

To add language resources to .src files, use the following command:
localize -m -i hu-HU -l 36 -f outlang-hun...
(I tell You later, how to make 'localize.exe', see below)
This patch had errors on the following files:


There are repaired by hand.

The compilation begins with unpacking the source code after successfully 
installing  all the other required softwares.
unpacking is easy, simply "tar xfvz oo_641d_src.tar.gz".
Under windows this puts errors with uid problems, this is because the tar
file contains definitions about user rights on files. This should be ok.

Compiling openoffice is done by running build or dmake command. This commands 
read the neccessary makefiles, and run the compiler, linking and other 

Dmake is a utility which can be compilied alone, but it is included in the
source. But first of all: to compile the whole stuff, You will need some
customization about directories in the enviromnemt variables.
cd oo_641d_src/config_office
(this will be the SRC_ROOT directory!!)
copy makefile.rc ../
copy winenvsample.bat ../winenv.bat 
(You can download my (sample) modified winenv.bat too).

This step can be substituted by running 
"bash configure" in config_office directory. I do not prefer this one: 
It did not make a working winenv.bat, so modify winenv manually!

Important remarks in winenv.bat:
winenv.bat contains:
rem     STLPORT4   - Absolute path to your STLport 4.0 installation
rem                  directory, for example C:\STLport-4.0
rem                  if set to NO_STLPORT, then the stlport version
rem                  provided with the source is build

STLport is a library which is also included in the openoffice source, but 
You can download and compile Your own too. 
1. I had problems with stlport 4.5 which was compiled by me outside the
openoffice project. I think I've seen somewhere a variable "stlport_version",
maybe this helps, but You should use 4.0. 
On the other hand, stlport 4.0 is included in the source code, BUT
STLPORT4=NO_STLPORT (as described above) is NOT working, You should set
it to NO_STLPORT4. This also do _not_ work. If You set this variable to
no_stlport, then the system does _not_ compile stlport and it won't find it.
If you set it to no_stlport4, then during the dmake process, You'll see
compilation errors. It is because it appends -INO_STLPORT4/... compilation 
options. This is bad, It should have been something like 
-Ic:\oo_641_src\stlport\something. So, prefer building Your own stlport!

Building stlport:
tar xfvz stlport.....tgz
cd stlport  (This will be the "STLPORT4" directory!)
(read INSTALL)
cd src
copy vc6.mak makefile
nmake all
(nmake is part of visual studio)
You don't need to install it.
( Remark: STLport 4.5 (which is unusable!) made stlport_vc645.dll 
in the stlport\lib directory, but openoffice searches for stlport_vc6.dll. )

OK, You have STLport, let's go on. You will need dmake to build anything.
dmake can be found in $SRC_ROOT/dmake directory, but as source code, not
as dmake.exe, so You have to compile it. If You set correct values in
winenv.bat, then (You will see later) winenv.bat compiles dmake.exe when
You start it. I found that this has some problems, so prefer compiling it
by yourself.

cd dmake
make.bat win95-vpp40

If everything went o.k. , You will be able to find a dmake.exe 
( 7a8077332a935bcd483df9cb5fd6fd80 *dmake.exe, 143360 bytes) in the directory
I do not remember, maybe this command should be run in the 4nt shell!
If You do _not_ find dmake.exe after compilation , try this make.bat command
from bash or 4nt shell!

The other program which is used while compiling is build.
This is an alias of perl %SOLARENV\bin\ product=full

Perl is set in winenv.bat, I used the activeperl, not the cygnus perl.
(set PERL_PATH=i:\perl\bin)

Let's see the beginning of winenv.bat:
set SRC_ROOT=g:\openoffice\source\oo_641d_src
set JAVA_HOME=i:\jdk1.3.1_01
set PERL_PATH=i:\perl\bin
set STLPORT4=g:\openoffice\stlport
set ASM_PATH=i:\util
set UNZIP_PATH=i:\util
set COMPATH=I:\progra~1\micros~3\vc98
set CYGWIN=i:\cygwin\bin

COMPATH is the path for visual studio. It should be set in 8.3 dos format,
as You can see. (How do You know which "micros~?" is the right? Download a 
free Volkov commander, this is working in 16 bit mode, so search for the
 right directory and You will know the "16bit" name ...) had problems with my sp3 visual studio, it did not 
recognize my cl version. 
Changes should be done in th_compv.patch (solenv/inc/
 .IF "$(COM)"=="MSC"
-.IF "$(CCNUMVER)">="001200000000"
+#.IF "$(CCNUMVER)">="001200000000"

So You now have a working dmake.exe, an installed stlport, a configured
winenv.bat, what else?
You have to set 4NT shell variables.
Tells You should set

CommandSep = ^
EscapeChar = Ctrl-X
ParameterChar = &
LocalAliases = Yes

in the 4nt.ini file. It is not fully correct. This variables can be set
in eighter the 4nt.ini file, but You can also set in the menu of 4NT, 
run 4nt, and type "option" (enter).

The problem with these settings is "CommandSep". If You set 
CommandSep to "^" then the system cannot unpack some files.
dmake tries to run something like:
"cd directory && gunzip -c something && tar -xvf - && cd .."
To run this correctly You should set CommandSep to "&".
(One sample to check if it is ok: echo a && echo b | cat && echo c
 will give You "a(\n)b(\n)c", but setting CommandSep to "^" will lead to
errors (cat does not finds file " && echo c" )) 

Ok, let's set CommandSep to "^". This is also not workable: 
winenv.bat contains:

if not exist %SRC_ROOT\dmake\dmake.exe (cd %SRC_ROOT\dmake ^ call make.bat
 win95-vpp40 ^ cd %SRC_ROOT)

This won't work if You set CommandSep to "^".
If You build dmake.exe manually as I described above, then CommandSep "&" 
will be o.k., if not, then You should run winenv.bat with commandset ^ and
then change it to & and run winenv.bat again.

The whole build process is done by typing "dmake" in $SRC_ROOT.
If the dmake process stops somewhere, You should do the followings:
For example You had problems in "scp" directory. 
Type "cd scp"
In this directory You will find a directory "". This directory
is where the build process puts the output file. You can simply delete this
whole directory if You feel that it might contain bad files, build will
remake this directory (structure).
After building files in directory, the dmake process copies the
neccessary files to $SRC_ROOT/solver/641/,idl...) 
After dmake successfully builds all sub-projects in the different 
directories, it will build the install files in the directory
instsetoo/ directory. The hungarian version will be found in
the directory instsetoo/ (exactly 36/normal)
To make this You should also set "set RES_HUNG=TRUE" in the winenv.bat file.
(Or use my winenv.bat ... )

Okay, You have the right utilities and You know something about the build 
process, but You cannot insert the hungarian language tags in the code. 
How to make localize.exe? Localize.exe will be built in transex3 directory
Run 4NT shell.
cd transex3
This will make $SRC_ROOT/transex3/
Finally this will be copied to 
Running a right 4nt shell it might find this binary, but You can simply copy
localize.exe in the $SRC_ROOT directory. Now You can now run localize.exe:
localize -m -i hu-HU -l 36 -f outlang...txt

(I used the outlang-034-sorted.txt file, which contains
references to hungarian tags as '99' (external) language. I wanted to
use this file as '36' resources, so I converted them to the '36' format
by a simple perl script:
while ($sor=<>)
#print $s[9]."\n";
print $sor2;
(then perl outlang-034-sorted >outlang-034-sorted_99.txt)

Now You have everything to start compilation, but the source tree has
some problems...

STLport and visual c++ header files (#include windows.h) are incompatible
in min() and max() functions. You should insert 
#ifndef NOMINMAX
#define NOMINMAX        // Prevent Windows from #defining min/max
#endif // NOMINMAX
in the file 
(You can find the diff files ...)

bison 1.34 did not run correctly in solenv/inc should be changed. My sample change is:
@@ -3,10 +3,14 @@
        @echo ------------------------------
        @echo Making: $@
-# removing -f switch - avoid getting nothing when copying a file to itself
-       @+-$(COPY:s/-f//) $@.h $(INCCOM)$/$(@:b).hxx >& $(NULLDEV)
+        $(BISON) -d -y $(YACCFILES)
+        mv $(YACCTARGET)
+       @+-$(COPY:s/-f//) $(INCCOM)$/$(@:b).hxx >& $(NULLDEV)
        @+-$(COPY:s/-f//) $(@:d)$/$(@:b).hxx $(INCCOM)$/$(@:b).hxx >& $(NULLDEV)
-       +$(TYPE) $(INCCOM)$/$(@:b).hxx >& $(NULLDEV)
+# removing -f switch - avoid getting nothing when copying a file to itself
+#      @+-$(COPY:s/-f//) $@.h $(INCCOM)$/$(@:b).hxx >& $(NULLDEV)
+#      @+-$(COPY:s/-f//) $(@:d)$/$(@:b).hxx $(INCCOM)$/$(@:b).hxx >& $(NULLDEV)
+#      +$(TYPE) $(INCCOM)$/$(@:b).hxx >& $(NULLDEV)

Why? bison -d -o outfile.hxx infile.yy tries to make a ".c" and a ".c.h" file.
It does not recognize .hxx, so it simply tries to make a ".hxx" and another
".hxx" file, but these should be different. My changes simply drop 
-o option, and put -y option instead. No bison makes and,
which should be moved to the appropiate target.

Other changes in idlc/source/ (also bison problem):

                        $(OBJ)$/scanner.obj     \
@@ -137,6 +135,10 @@
+$(MISC)$/parser.cxx: parser.yy
+        +bison -v -d -o$(MISC)$/parser.cxx parser.yy
+        +$(COPY) $(MISC)$/parser.hxx $(OUT)$/inc$/parser.hxx
 $(MISC)$/stripped_scanner.ll : scanner.ll
 .IF "$(GUI)"=="WNT"

Another bison problem connectivity/source/parse/
(I do not include this here, but you can download it as diff file)

Okay, bison problems solved, what else?
4NT is not cygnus bash, I had problems with some symlinks.
"awk.exe" is a symlink under cygnus to gawk.exe
"gunzip.exe" is a symlink under cygnus to gzip.exe
These files cannot be run correctly from 4NT shell.
The trivial solution (workaround) is to overwrite awk.exe (symlink) 
witch gawk.exe, and gunzip.exe with gzip.exe.
(not doing this will lead to compilation errors in sablot directory)

If the build is successfully done, You might find that the hungarian
version can be easily installed, but the openoffice (soffice.exe) hangs
at start. The reason is a missing resource file in the
oo/program/resource directory, the missing file is iso64136.res.
Why is it missing? The installer has some definitions about what should
be copied and to where. This is done by some code in the $SRC_ROOT/scp

There are problems with player.scp and This files do not
contain references to tags with number '36' (hungarian), so the whole
build process does not work, only for the english version. If You
correctly insert the tags in these files, then the build will be o.k.,
but the system does not copy the iso... resource file.
The bug is in the scp/source/office/basic.scp:
-    countrynumber = 19
+    countrynumber = 20

     dim countrystrings(countrynumber) as String

@@ -473,6 +473,7 @@
     countrystrings(17) = "90"
     countrystrings(18) = "96"
     countrystrings(19) = "99"
+    countrystrings(20) = "36"

After changing this, the system will copy the iso resource file to the
right place. Some info about the structure of the installer: All the
installer files (f_0001 and so on) are simple .zip files, so You can
easily check what's inside with 
bash for i in * ; do unzip -v $i; done