#**************************************************************
#  
#  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.
#  
#**************************************************************



UDK_3.1 {
    global:
        # jvmaccess/virtualmachine.hxx:
        _ZN9jvmaccess14VirtualMachine11AttachGuard17CreationExceptionC1Ev; # jvmaccess::VirtualMachine::AttachGuard::CreationException::CreationException()
        _ZN9jvmaccess14VirtualMachine11AttachGuard17CreationExceptionC1ERKS2_; # jvmaccess::VirtualMachine::AttachGuard::CreationException::CreationException(CreationException const &)
        _ZN9jvmaccess14VirtualMachine11AttachGuard17CreationExceptionD0Ev; # jvmaccess::VirtualMachine::AttachGuard::CreationException::~CreationException()
        _ZN9jvmaccess14VirtualMachine11AttachGuard17CreationExceptionaSERKS2_; # jvmaccess::VirtualMachine::AttachGuard::CreationException::operator =(CreationException const &)
        # _ZTIN9jvmaccess14VirtualMachine11AttachGuard17CreationExceptionE; # typeinfo for jvmaccess::VirtualMachine::AttachGuard::CreationException
        # _ZTSN9jvmaccess14VirtualMachine11AttachGuard17CreationExceptionE; # typeinfo name for jvmaccess::VirtualMachine::AttachGuard::CreationException
        _ZN9jvmaccess14VirtualMachine11AttachGuardC1ERKN3rtl9ReferenceIS0_EE; # jvmaccess::VirtualMachine::AttachGuard::AttachGuard(rtl::Reference< VirtualMachine > const &)
        _ZN9jvmaccess14VirtualMachine11AttachGuardC2ERKN3rtl9ReferenceIS0_EE; # jvmaccess::VirtualMachine::AttachGuard::AttachGuard(rtl::Reference< VirtualMachine > const &)
        _ZN9jvmaccess14VirtualMachine11AttachGuardD1Ev; # jvmaccess::VirtualMachine::AttachGuard::~AttachGuard()
        _ZN9jvmaccess14VirtualMachine11AttachGuardD2Ev; # jvmaccess::VirtualMachine::AttachGuard::~AttachGuard()
        _ZN9jvmaccess14VirtualMachineC1EP7JavaVM_ibP7JNIEnv_; # jvmaccess::VirtualMachine::VirtualMachine(JavaVM *, int, bool, JNIEnv *)

    local:
        *;
};

UDK_3.2 {
    global:
        # initially forgotten jvmaccess/virtualmachine.hxx:
        _ZN9jvmaccess14VirtualMachine11AttachGuard17CreationExceptionC2Ev; # jvmaccess::VirtualMachine::AttachGuard::CreationException::CreationException()
        _ZN9jvmaccess14VirtualMachine11AttachGuard17CreationExceptionC2ERKS2_; # jvmaccess::VirtualMachine::AttachGuard::CreationException::CreationException(CreationException const &)
        _ZN9jvmaccess14VirtualMachine11AttachGuard17CreationExceptionD1Ev; # jvmaccess::VirtualMachine::AttachGuard::CreationException::~CreationException()
        _ZN9jvmaccess14VirtualMachine11AttachGuard17CreationExceptionD2Ev; # jvmaccess::VirtualMachine::AttachGuard::CreationException::~CreationException()
        _ZN9jvmaccess14VirtualMachineC2EP7JavaVM_ibP7JNIEnv_; # jvmaccess::VirtualMachine::VirtualMachine(JavaVM *, int, bool, JNIEnv *)

	# We prefix the next two symbols with a wildcard sign because they will only be generated by gcj. The Mac OS X linker doesn't support
	# "Treat not existing symbols as warning" under certain circumstances and thus ends with an error when trying to find these symbols
	# (see man ld on Mac OS X). For further details see also #i69351#. By using the wildcard the symbols will be filtered out before.
	# We put the '*' at the beginning because its unlikely that these symbols will ever be a postfix of another symbol.
        _*ZN9jvmaccess14VirtualMachineC1EP10_Jv_JavaVMibP10_Jv_JNIEnv; # jvmaccess::VirtualMachine::VirtualMachine(JavaVM *, int, bool, JNIEnv *)
        _*ZN9jvmaccess14VirtualMachineC2EP10_Jv_JavaVMibP10_Jv_JNIEnv; # jvmaccess::VirtualMachine::VirtualMachine(JavaVM *, int, bool, JNIEnv *)
} UDK_3.1;

UDK_3.3 {
    global:
        # jvmaccess/unovirtualmachine.hxx:
        _ZN9jvmaccess17UnoVirtualMachine17CreationExceptionC1Ev; # jvmaccess::UnoVirtualMachine::CreationException::CreationException()
        _ZN9jvmaccess17UnoVirtualMachine17CreationExceptionC2Ev; # jvmaccess::UnoVirtualMachine::CreationException::CreationException()
        _ZN9jvmaccess17UnoVirtualMachine17CreationExceptionC1ERKS1_; # jvmaccess::UnoVirtualMachine::CreationException::CreationException(CreationException const &)
        _ZN9jvmaccess17UnoVirtualMachine17CreationExceptionC2ERKS1_; # jvmaccess::UnoVirtualMachine::CreationException::CreationException(CreationException const &)
        _ZN9jvmaccess17UnoVirtualMachine17CreationExceptionD0Ev; # jvmaccess::UnoVirtualMachine::CreationException::~CreationException()
        _ZN9jvmaccess17UnoVirtualMachine17CreationExceptionD1Ev; # jvmaccess::UnoVirtualMachine::CreationException::~CreationException()
        _ZN9jvmaccess17UnoVirtualMachine17CreationExceptionD2Ev; # jvmaccess::UnoVirtualMachine::CreationException::~CreationException()
        _ZN9jvmaccess17UnoVirtualMachine17CreationExceptionaSERKS1_; # jvmaccess::UnoVirtualMachine::CreationException::operator =(CreationException const &)
        # _ZTIN9jvmaccess17UnoVirtualMachine17CreationExceptionE; # typeinfo for jvmaccess::UnoVirtualMachine::CreationException
        # _ZTSN9jvmaccess17UnoVirtualMachine17CreationExceptionE; # typeinfo name for jvmaccess::UnoVirtualMachine::CreationException
        _ZN9jvmaccess17UnoVirtualMachineC1ERKN3rtl9ReferenceINS_14VirtualMachineEEEPv; # jvmaccess::UnoVirtualMachine::UnoVirtualMachine(rtl::Reference< jvmaccess::VirtualMachine > const &, void *)
        _ZN9jvmaccess17UnoVirtualMachineC2ERKN3rtl9ReferenceINS_14VirtualMachineEEEPv; # jvmaccess::UnoVirtualMachine::UnoVirtualMachine(rtl::Reference< jvmaccess::VirtualMachine > const &, void *)
        _ZNK9jvmaccess17UnoVirtualMachine17getVirtualMachineEv; # jvmaccess::UnoVirtualMachine::getVirtualMachine() const
        _ZNK9jvmaccess17UnoVirtualMachine14getClassLoaderEv; # jvmaccess::UnoVirtualMachine::getClassLoader() const
} UDK_3.2;

UDK_3.4 { # OOo 2.3
    global:
        # jvmaccess/classpath.hxx:
        _ZN9jvmaccess9ClassPath11doLoadClassERKN3com3sun4star3uno9ReferenceINS4_17XComponentContextEEEPvRKN3rtl8OUStringESE_; # jvmaccess::ClassPath::doLoadClass(com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext > const &, void *, rtl::OUString const &, rtl::OUString const &)
        _ZN9jvmaccess9ClassPath17doTranslateToUrlsERKN3com3sun4star3uno9ReferenceINS4_17XComponentContextEEEPvRKN3rtl8OUStringE; # jvmaccess::ClassPath::doTranslateToUrls(com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext > const &, void *, rtl::OUString const &)
} UDK_3.3;
