#**************************************************************
#  
#  Licensed to the Apache Software Foundation (ASF) under one
#  or more contributor license agreements.  See the NOTICE file
#  distributed with this work for additional information
#  regarding copyright ownership.  The ASF licenses this file
#  to you under the Apache License, Version 2.0 (the
#  "License"); you may not use this file except in compliance
#  with the License.  You may obtain a copy of the License at
#  
#    http://www.apache.org/licenses/LICENSE-2.0
#  
#  Unless required by applicable law or agreed to in writing,
#  software distributed under the License is distributed on an
#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
#  KIND, either express or implied.  See the License for the
#  specific language governing permissions and limitations
#  under the License.
#  
#**************************************************************


Overview of URE installation
-----------------------------

Linux x86, Solaris x86, and Solaris SPARC:

/opt/openoffice.org/ure/LICENSE
/opt/openoffice.org/ure/THIRDPARTYLICENSEREADME.html
/opt/openoffice.org/ure/README
/opt/openoffice.org/ure/bin/uno
/opt/openoffice.org/ure/bin/regcomp
/opt/openoffice.org/ure/bin/regmerge
/opt/openoffice.org/ure/bin/regview
/opt/openoffice.org/ure/bin/javaldx
/opt/openoffice.org/ure/lib/libuno_cppu.so.3
/opt/openoffice.org/ure/lib/libuno_cppuhelpergcc3.so.3  [Linux x86 only]
/opt/openoffice.org/ure/lib/libuno_cppuhelperC52.so.3  [Solaris only]
/opt/openoffice.org/ure/lib/libuno_purpenvhelpergcc3.so.3  [Linux x86 only]
/opt/openoffice.org/ure/lib/libuno_purpenvhelperC52.so.3  [Solaris only]
/opt/openoffice.org/ure/lib/libuno_sal.so.3
/opt/openoffice.org/ure/lib/libuno_salhelpergcc3.so.3  [Linux x86 only]
/opt/openoffice.org/ure/lib/libuno_salhelperC52.so.3  [Solaris only]
/opt/openoffice.org/ure/lib/libstlport_gcc.so  [Linux x86 only]
/opt/openoffice.org/ure/lib/libstlport_sunpro.so  [Solaris only]
/opt/openoffice.org/ure/share/java/unoloader.jar
/opt/openoffice.org/ure/share/java/juh.jar
/opt/openoffice.org/ure/share/java/jurt.jar
/opt/openoffice.org/ure/share/java/ridl.jar
/opt/openoffice.org/ure/share/misc/types.rdb
/opt/openoffice.org/ure/share/misc/services.rdb
/opt/openoffice.org/ure/lib/libxml2.so.2  [external]
/opt/openoffice.org/ure/bin/startup.sh  [private]
/opt/openoffice.org/ure/bin/uno.bin  [private]
/opt/openoffice.org/ure/bin/regcomp.bin  [private]
/opt/openoffice.org/ure/lib/unorc  [private]
/opt/openoffice.org/ure/lib/libreg.so.3  [private]
/opt/openoffice.org/ure/lib/libstore.so.3  [private]
/opt/openoffice.org/ure/lib/libxmlreader.so  [private]
/opt/openoffice.org/ure/lib/libjvmaccessgcc3.so.3  [private; Linux x86 only]
/opt/openoffice.org/ure/lib/libjvmaccessC52.so.3  [private; Solaris only]
/opt/openoffice.org/ure/lib/libjvmfwk.so.3  [private]
/opt/openoffice.org/ure/lib/sunjavaplugin.so  [private]
/opt/openoffice.org/ure/lib/JREProperties.class  [private]
/opt/openoffice.org/ure/lib/jvmfwk3rc  [private]
/opt/openoffice.org/ure/lib/libgcc3_uno.so  [private; Linux x86 only]
/opt/openoffice.org/ure/lib/libsunpro5_uno.so  [private; Solaris only]
/opt/openoffice.org/ure/lib/libjava_uno.so  [private]
/opt/openoffice.org/ure/lib/libunsafe_uno_uno.so  [private]
/opt/openoffice.org/ure/lib/libaffine_uno_uno.so  [private]
/opt/openoffice.org/ure/lib/liblog_uno_uno.so  [private]
/opt/openoffice.org/ure/lib/libjpipe.so  [private]
/opt/openoffice.org/ure/lib/libjuh.so  [private]
/opt/openoffice.org/ure/lib/libjuhx.so  [private]
/opt/openoffice.org/ure/lib/acceptor.uno.so  [private]
/opt/openoffice.org/ure/lib/binaryurp.uno.so  [private]
/opt/openoffice.org/ure/lib/bootstrap.uno.so  [private]
/opt/openoffice.org/ure/lib/connector.uno.so  [private]
/opt/openoffice.org/ure/lib/introspection.uno.so  [private]
/opt/openoffice.org/ure/lib/invocadapt.uno.so  [private]
/opt/openoffice.org/ure/lib/invocation.uno.so  [private]
/opt/openoffice.org/ure/lib/javaloader.uno.so  [private]
/opt/openoffice.org/ure/lib/javavm.uno.so  [private]
/opt/openoffice.org/ure/lib/namingservice.uno.so  [private]
/opt/openoffice.org/ure/lib/proxyfac.uno.so  [private]
/opt/openoffice.org/ure/lib/reflection.uno.so  [private]
/opt/openoffice.org/ure/lib/streams.uno.so  [private]
/opt/openoffice.org/ure/lib/textinstream.uno.so  [private]
/opt/openoffice.org/ure/lib/textoutstream.uno.so  [private]
/opt/openoffice.org/ure/lib/stocservices.uno.so  [private]
/opt/openoffice.org/ure/lib/uuresolver.uno.so  [private]
/opt/openoffice.org/ure/share/java/java_uno.jar  [private]
/opt/openoffice.org/ure/share/misc/javavendors.xml  [private]

Windows:

Program Files\URE\LICENSE
Program Files\URE\THIRDPARTYLICENSEREADME.html
Program Files\URE\README
Program Files\URE\bin\uno.exe
Program Files\URE\bin\regcomp.exe
Program Files\URE\bin\regmerge.exe
Program Files\URE\bin\regview.exe
Program Files\URE\bin\cppu3.dll
Program Files\URE\bin\cppuhelper3MSC.dll
Program Files\URE\bin\purpenvhelper3MSC.dll
Program Files\URE\bin\sal3.dll
Program Files\URE\bin\salhelper3MSC.dll
Program Files\URE\bin\stlport_vc7145.dll
Program Files\URE\java\unoloader.jar
Program Files\URE\java\juh.jar
Program Files\URE\java\jurt.jar
Program Files\URE\java\ridl.jar
Program Files\URE\misc\types.rdb
Program Files\URE\misc\services.rdb
Program Files\URE\bin\libxml2.dll  [external]
Program Files\URE\bin\uno.ini  [private]
Program Files\URE\bin\reg3.dll  [private]
Program Files\URE\bin\store3.dll  [private]
Program Files\URE\bin\xmlreader.dll  [private]
Program Files\URE\bin\jvmaccess3MSC.dll  [private]
Program Files\URE\bin\jvmfwk3.dll  [private]
Program Files\URE\bin\sunjavaplugin.dll  [private]
Program Files\URE\bin\JREProperties.class  [private]
Program Files\URE\bin\jvmfwk3.ini  [private]
Program Files\URE\bin\msci_uno.dll  [private]
Program Files\URE\bin\java_uno.dll  [private]
Program Files\URE\bin\cli_uno.dll [private]
Program Files\URE\bin\unsafe_uno_uno.dll  [private]
Program Files\URE\bin\affine_uno_uno.dll  [private]
Program Files\URE\bin\log_uno_uno.dll  [private]
Program Files\URE\bin\jpipe.dll  [private]
Program Files\URE\bin\jpipx.dll  [private]
Program Files\URE\bin\juh.dll  [private]
Program Files\URE\bin\juhx.dll  [private]
Program Files\URE\bin\acceptor.uno.dll  [private]
Program Files\URE\bin\binaryurp.uno.dll  [private]
Program Files\URE\bin\bootstrap.uno.dll  [private]
Program Files\URE\bin\connector.uno.dll  [private]
Program Files\URE\bin\introspection.uno.dll  [private]
Program Files\URE\bin\invocadapt.uno.dll  [private]
Program Files\URE\bin\invocation.uno.dll  [private]
Program Files\URE\bin\javaloader.uno.dll  [private]
Program Files\URE\bin\javavm.uno.dll  [private]
Program Files\URE\bin\namingservice.uno.dll  [private]
Program Files\URE\bin\proxyfac.uno.dll  [private]
Program Files\URE\bin\reflection.uno.dll  [private]
Program Files\URE\bin\streams.uno.dll  [private]
Program Files\URE\bin\textinstream.uno.dll  [private]
Program Files\URE\bin\textoutstream.uno.dll  [private]
Program Files\URE\bin\stocservices.uno.dll  [private]
Program Files\URE\bin\uuresolver.uno.dll  [private]
Program Files\URE\bin\uwinapi.dll  [private]
Program Files\URE\java\java_uno.jar  [private]
Program Files\URE\misc\javavendors.xml  [private]

%windir%\assembly\cli_basetypes.dll [GAC]
%windir%\assembly\cli_ure.dll [GAC]
%windir%\assembly\cli_uretypes.dll [GAC]
%windir%\assembly\cli_cppuhelper.dll [GAC]
%windir%\assembly\policy.1.0.cli_basetypes.dll [GAC]
%windir%\assembly\policy.1.0.cli_ure.dll [GAC]
%windir%\assembly\policy.1.0.cli_uretypes.dll [GAC]
%windir%\assembly\policy.1.0.cli_cppuhelper.dll [GAC]

Files marked as [external] are included in the URE installation because the URE
needs them and it cannot be guaranteed that they are available on a given
system.  Applications using the URE may need those files too, so they are made
available as non-private files of the URE installation.  However, in an ideal
world, those files would not need to be included in the URE installation.

Files marked as [private] are private to the URE installation.  To avoid
stability issues, applications that use the URE should not access the
functionality of these files.

Files marked as [GAC] are installed in the Global Assembly Cache on Windows. The 
file path reflects the path as seen in the Explorer with the Assembly 
Cache Viewer Tool (Shfusion.dll) installed. The actual paths are different.


Public Files in a URE Installation
----------------------------------

A URE installation contains the following public files:

- uno is the executable file that runs UNO components.  For more details, see
the SDK Developer's Guide.

- regcomp, regmerge, and regview are tools that work with binary registries that
contain UNO type or UNO service information.  For more details, see the SDK
Developer's Guide.

- javaldx is a helper program on Linux x86, Solaris x86, and Solaris SPARC that
enables Java executables to use a Java VM, such as the Sun JDK/JRE.  Executables
such as uno and regcomp run this helper automatically.

- cppu, cppuhelper, purpenvhelper, sal, and salhelper are the public C++ UNO
runtime dynamic libraries that client code can call.  For details on the
functionality that these libraries offer, see the "C++ Reference" section of the
SDK HTML documentation.  The corresponding C++ header files are not in the URE,
but rather in the SDK.

-  stlport is the dynamic library of STLport 4.5, which is used in the public
interface of cppuhelper and salhelper, and thus also has to be part of the
public interface of the URE.  The corresponding C++ header files are not in the
URE, but rather in the SDK.

- unoloader.jar, juh.jar, jurt.jar, and ridl.jar are the public Java UNO runtime
Java[tm] Archives (JARs) that client code can call.  For details on the
functionality that these files offer, see the "Java UNO Runtime Reference"
section of the SDK HTML documentation.

- types.rdb and services.rdb are preconfigured UNO type and service registries.
For more details, see the "Deploying a URE" section of this README.


Deploying a URE
---------------

By default, the URE is installed in /opt/openoffice.org/ure on Linux x86,
Solaris x86, and Solaris SPARC, and in Program Files\URE on Windows. If you
want, you can override this location when you install the URE, for example, with
rpm --relocate on Linux.  The URE is designed so that multiple instances of the
URE can coexist on a single system in different locations.

On Windows, the path to the installed URE is stored in the registry under the
path "HKEY_CLASSES_ROOT\Software\OpenOffice.org\URE" and key "Path".


UNO Deployment Variables
------------------------

The URE installation is preconfigured with several UNO types and UNO services.
The available types and services are listed in the types.rdb and services.rdb
files respectively.  The location of these files is stored by two UNO deployment
variables, namely UNO_TYPES and UNO_SERVICES.  These variables are set up by a
unorc or uno.ini that is private to the URE installation.  This private file
also contains the private deployment variables URE_INTERNAL_LIB_DIR,
URE_INTERNAL_JAVA_DIR, and URE_INTERNAL_JAVA_CLASSPATH, which are required by
the URE.

The UNO_TYPES and UNO_SERVICES variables automatically search the following
locations for types.rdb and services.rdb files:

Linux x86, Solaris x86, and Solaris SPARC:

- <URE installation>/share/misc/ types.rdb and services.rdb, respectively
- /etc/opt/ure/ types.rdb and services.rdb, respectively
- ~/.ure/ types.rdb and services.rdb, respectively
- any URLs listed in the public deployment variables URE_MORE_TYPES and
  URE_MORE_SERVICES, respectively

Windows:

- <URE installation>\misc\ types.rdb and services.rdb, respectively
- Documents and Settings\<User Name>\Application Data\URE\ types.rdb and
  services.rdb, respectively
- any URLs listed in the public deployment variables URE_MORE_TYPES and
  URE_MORE_SERVICES, respectively

NOTE: The URE on Windows does not support a system-wide deployment of additional
types.rdb and services.rdb files.  That is, you cannot store additional
types.rdb and services.rdb files in a Documents and Settings\All
Users\Application Data\URE directory.

The Java UNO environment needs type information in the form of Java class files
instead of rdb files.  Additional types are searched for in any URLs listed in
the public deployment variable URE_MORE_JAVA_TYPES.

For details on how to override the UNO deployment variables, see the SDK
Developer's Guide or go to http://udk.openoffice.org/common/man/concept/
micro_deployment.html.

If you want to deploy additional UNO types and services, use regcomp.

CAUTION: Do not deploy these types and services to the types.rdb and
services.rdb in the URE installation.


URE Java Framework
------------------

When a URE executable, such as uno, starts a Java VM, the URE Java Framework
searches for a suitable JDK/JRE installation.  For more information on the URE
Java Framework, go to http://udk.openoffice.org/common/man/spec/
javavendorextension.sxw.  The private javavendors.xml file in a URE installation
provides preconfigured support for various JDK/JRE versions.  The private
jvmfwk3rc or jvmfwk3.ini file specifies the location of a suitable JDK/JRE
installation.  When an executable tries to start a Java VM, the URE searches the
relevant Java settings file for information on a suitable JDK/JRE version.

NOTE: On any platform, you can delete the javasettings_${_OS}_${_ARCH}.xml file
if the file contains problematic stale data.

By default, the URE searches for a Java settings file in the following
locations:

Linux x86, Solaris x86, and Solaris SPARC:

- /etc/opt/ure/javasettings_${_OS}_${_ARCH}.xml
- ~/.ure/javasettings_${_OS}_${_ARCH}.xml

NOTE: If these files do not contain information about a JDK/JRE, the URE
searches for a suitable JDK/JRE installation and stores the relevant information
in the ~/.ure/javasettings_${_OS}_${_ARCH}.xml file.  If you want all users to
access the same JDK/JRE, log on as root and copy an existing
~/.ure/javasettings_${_OS}_${_ARCH}.xml to
/etc/opt/ure/javasettings_${_OS}_${_ARCH}.xml.

Windows:

- Documents and Settings\<User Name>\Application
  Data\URE\javasettings_${_OS}_${_ARCH}.xml

NOTE: If this file does not contain information about a JDK/JRE, the URE
searches for a suitable JDK/JRE installation and stores the relevant information
in the Documents and Settings\<User Name>\Application
Data\URE\javasettings_${_OS}_${_ARCH}.xml file.  The URE on Windows does not
by default support a system-wide deployment of the Java settings file.  That is,
you cannot store the file in a Documents and Settings\All Users\Application
Data\URE directory.

You can override these paths by setting the URE_OVERRIDE_JAVA_JFW_SHARED_DATA
and URE_OVERRIDE_JAVA_JFW_USER_DATA deployment variables.  You can also use the
UNO_JAVA_JFW_JREHOME deployment variable to specify the location of a JDK/JRE
installation.  For more information on this variable, see
http://udk.openoffice.org/common/man/spec/javavendorextension.sxw.

The URE allows clients to extend the content of UNO_JAVA_JFW_CLASSPATH_URLS (see
http://udk.openoffice.org/common/man/spec/javavendorextension.sxw):  The content
of the public deployment variable URE_MORE_JAVA_CLASSPATH_URLS, if set, is
added to the end of the URE's UNO_JAVA_JFW_CLASSPATH_URLS list.

You might experience problems in an SDK environment that uses different JDK/JRE
versions for the SDK and the URE.  This problem arises when the OO_SDK_JAVA_HOME
SDK environment variable specifies a different Java VM than the Java VM that is
used in the URE Java Framework.  See the "Installation Guide" section of the SDK
HTML documentation to find out how to set the  OO_SDK_JAVA_HOME environment
variable.


GNU Compiler Collection on Linux x86
------------------------------------

On Linux x86, the URE uses libgcc_s.so.1 to run binary UNO components that were
compiled with the GNU Compiler Collection (GCC), to GCC 3.4.1 as
built on a glibc 2.2.4 system.  To avoid GCC compatibility issues, use the same
GCC version (or later) when you compile the UNO binaries.
Otherwise, use LD_PRELOAD to replace the libgcc_s.so.1 in URE with a matching
version.


C++ and Java UNO Components
---------------------------

C++ UNO components run from within the uno executable can depend on an
environment in which the public C++ UNO runtime dynamic libraries (cppu,
cppuhelper, purpenvhelper, sal, salhelper, stlport) and the external dynamic
libraries (libxml2 etc.) are already available (that is, on Linux x86, Solaris
x86, and Solaris SPARC, a component dynamic library need not make sure that the
UNO runtime dynamic libraries it needs can be found on its RPATH).

Similarly, Java UNO components can depend on an environment in which the public
Java UNO runtime JARs are already available (that is, a component JAR need not
list in its manifest Class-Path the UNO runtime JARs it needs).

If a Java UNO component requires additional UNO types, use the UNO-Type-Path
manifest entry to specify the location of the UNO types.  The UNO-Type-Path is
similar to the Class-Path manifest entry and can contain URLs of JARs and
directories that contain the Java classes that represent additional UNO types.
The UnoClassLoader evaluates the UNO-Type-Path manifest entry to ensure that the
additional UNO types are available to the Java UNO environment.

The UNO-Type-Path can have the following entries:

- UNO-Type-Path:
Current JAR does not contain UNO types.

- UNO-Type-Path: <>
Current JAR contains UNO types.

- UNO-Type-Path: any/other/jar.jar yet/another/jar.jar
Current JAR brings other JARs that contain UNO types.

- UNO-Type-Path: any/other/jar.jar <> yet/another/jar.jar
Current JAR and other JARs that the current JARs uses contain UNO types.

NOTE: If you do not include the UNO-Type-Path manifest entry, the URE assumes
that the current JAR contains UNO types.

If a Java application requires the Java UNO environment, the UnoClassLoader must
be set up to load the relevant Java classes.  For example, Runner.java in the
uretest bundle is packed as runner.jar, which the makefiles use to launch the
javaclient.jar application.  For more information, see
com.sun.star.lib.unoloader.UnoClassLoader and
com.sun.star.lib.unoloader.UnoLoader in the "Java UNO Runtime Reference" section
of the SDK HTML documentation.
