#! /bin/csh
###############################################################
#  
#  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.
#  
###############################################################

# This script sets all enviroment variables, which are necessary for building 
# the examples of the Office Development Kit.
# The Script was developed for the operating systems Solaris, Linux and MacOS.

# The SDK name
setenv OO_SDK_NAME @OO_SDK_NAME@

# Installation directory of the Software Development Kit.
# Example: setenv OO_SDK_HOME /opt/openoffice.org/basis3.0/sdk
setenv OO_SDK_HOME '@OO_SDK_HOME@'

# Office installation directory.
# Example: set OFFICE_HOME=/opt/openoffice.org3
set OFFICE_HOME='@OFFICE_HOME@'
OFFICE_BASE_HOME='@OFFICE_BASE_HOME@'

# URE installation directory.
# Example: setenv OO_SDK_URE_HOME /opt/openoffice.org/ure
setenv OO_SDK_URE_HOME '@OO_SDK_URE_HOME@'

# Directory of the make command.
# Example: setenv OO_SDK_MAKE_HOME /usr/bin
setenv OO_SDK_MAKE_HOME @OO_SDK_MAKE_HOME@

# Directory of the zip command.
# Example: setenv OO_SDK_ZIP_HOME /usr/bin
setenv OO_SDK_ZIP_HOME @OO_SDK_ZIP_HOME@

# Directory of the C++ compiler.
# Example: setenv OO_SDK_CPP_HOME /usr/bin
setenv OO_SDK_CPP_HOME @OO_SDK_CPP_HOME@

# Solaris only
setenv OO_SDK_CC_55_OR_HIGHER @OO_SDK_CC_55_OR_HIGHER@

# Directory of the Java SDK.
# Example: setenv OO_SDK_JAVA_HOME "/usr/jdk/jdk1.6.0_10"
setenv OO_SDK_JAVA_HOME @OO_SDK_JAVA_HOME@

# Special output directory
# Example: setenv OO_SDK_OUTPUT_DIR "$HOME"
setenv OO_SDK_OUTPUT_DIR @OO_SDK_OUTPUT_DIR@

# Environment variable to enable auto deployment of example components
# Example: set SDK_AUTO_DEPLOYMENT=YES
setenv SDK_AUTO_DEPLOYMENT @SDK_AUTO_DEPLOYMENT@

# Get the operating system.
set sdk_platform=`${OO_SDK_HOME}/config.guess | cut -d"-" -f3,4`

# Set the directory name.
set programdir=program
set javadir=bin
switch (${sdk_platform})
  case "darwin*":
    set programdir="Contents/MacOS"
    set javacdir=Commands
    breaksw
endsw


# Set office program path.
if ( "${OFFICE_HOME}" != "" ) then
    setenv OFFICE_PROGRAM_PATH "${OFFICE_HOME}/${programdir}"
endif

# Set office base program path.
if ( "${OFFICE_BASE_HOME}" != "" ) then
    setenv OFFICE_BASE_PROGRAM_PATH "${OFFICE_BASE_HOME}/program"
endif


# Set UNO path, necessary to ensure that the cpp examples using the
# new UNO bootstrap mechanism use the configured office installation.
if ( ${?OFFICE_PROGRAM_PATH} ) then
    setenv UNO_PATH "${OFFICE_PROGRAM_PATH}"
endif

if ( "${OO_SDK_URE_HOME}" != "" ) then
    setenv OO_SDK_URE_BIN_DIR "${OO_SDK_URE_HOME}/bin"
    setenv OO_SDK_URE_LIB_DIR "${OO_SDK_URE_HOME}/lib"
    setenv OO_SDK_URE_JAVA_DIR "${OO_SDK_URE_HOME}/share/java"
else
    setenv OO_SDK_URE_BIN_DIR "${OFFICE_PROGRAM_PATH}"
    setenv OO_SDK_URE_LIB_DIR "${OFFICE_BASE_PROGRAM_PATH}"
    setenv OO_SDK_URE_JAVA_DIR "${OFFICE_BASE_PROGRAM_PATH}/classes"
endif

# Set SDK example output directory
setenv OO_SDK_OUT ${OO_SDK_HOME}
if ( $?OO_SDK_OUTPUT_DIR ) then
    setenv OO_SDK_OUT ${OO_SDK_OUTPUT_DIR}/${OO_SDK_NAME}
endif

# check platform and set appropriate variables
switch (`${OO_SDK_HOME}/config.guess | cut -d"-" -f3,4`)
  case "solaris*":
    if ( `${OO_SDK_HOME}/config.guess | cut -d"-" -f1` == "sparc" ) then
        set directoryname=solsparc
	set platform=Solaris Sparc
    else
        set directoryname=solintel
	set platform=Solaris Intel
    endif
    set comid=C52
    set pltfrm=sunpro
    set soext=so
    set exampleout=SOLARISexample.out
    set stldebug=_debug

    # set LD_LIBRARY_PATH
    if ( $?LD_LIBARY_PATH == 0) then
	setenv LD_LIBRARY_PATH ${OO_SDK_HOME}/lib:${OO_SDK_OUT}/${exampleout}/lib:${OO_SDK_URE_LIB_DIR}:.
    else
	setenv LD_LIBRARY_PATH ${OO_SDK_HOME}/lib:${OO_SDK_OUT}/${exampleout}/lib:${OO_SDK_URE_LIB_DIR}:.:${LD_LIBRARY_PATH}
    endif
  breaksw

  case "linux-gnu":
    if ( $?OO_SDK_CPP_HOME == 0) then
	set sdk_gxx_include_path=`echo "#include <cstring>" | ${OO_SDK_CPP_HOME}/g++ -E -xc++ - | sed -n '/.*1*"\(.*\)\/cstring".*/s//\1/p' | head -n 1`
	setenv SDK_GXX_INCLUDE_PATH ${sdk_gxx_include_path}
    endif

    set directoryname=linux
    set comid=gcc3
    set pltfrm=gcc
    set soext=so
    set exampleout=LINUXexample.out
    set platform=Linux
    set stldebug=_stldebug

    # set LD_LIBRARY_PATH
    if ( $?LD_LIBARY_PATH == 0) then
	setenv LD_LIBRARY_PATH ${OO_SDK_HOME}/lib:${OO_SDK_OUT}/${exampleout}/lib:${OO_SDK_URE_LIB_DIR}:.
    else
	setenv LD_LIBRARY_PATH ${OO_SDK_HOME}/lib:${OO_SDK_OUT}/${exampleout}/lib:${OO_SDK_URE_LIB_DIR}:.:${LD_LIBRARY_PATH}
    endif
  breaksw

  case "darwin*":
    if ( $?OO_SDK_CPP_HOME == 0) then
	set sdk_gxx_include_path=`echo "#include <cstring>" | ${OO_SDK_CPP_HOME}/g++ -E -xc++ - | sed -n '/.*1*"\(.*\)\/cstring".*/s//\1/p' | head -n 1`
	setenv SDK_GXX_INCLUDE_PATH ${sdk_gxx_include_path}
    endif

    set directoryname=macosx
    set comid=gcc3
    set pltfrm=gcc
    set soext=dylib
    set exampleout=MACOSXexample.out
    set platform=MacOSX
    set stldebug=_stldebug

    # set DYLD_LIBRARY_PATH
    if ( $?DYLD_LIBRARY_PATH == 0) then
	setenv DYLD_LIBRARY_PATH ${OO_SDK_OUT}/${directoryname}/lib:${OO_SDK_OUT}/${exampleout}/lib:${OO_SDK_URE_LIB_DIR}:.
    else
	setenv DYLD_LIBRARY_PATH ${OO_SDK_OUT}/${directoryname}/lib:${OO_SDK_OUT}/${exampleout}/lib:${OO_SDK_URE_LIB_DIR}:.:${DYLD_LIBRARY_PATH}
    endif
  breaksw

  case "freebsd*":
    if ( $?OO_SDK_CPP_HOME == 0) then
	set sdk_gxx_include_path=`echo "#include <cstring>" | ${OO_SDK_CPP_HOME}/g++ -E -xc++ - | sed -n '/.*1*"\(.*\)\/cstring".*/s//\1/p' | head -n 1`
	setenv SDK_GXX_INCLUDE_PATH ${sdk_gxx_include_path}
    endif

    set directoryname=freebsd
    set comid=gcc3
    set pltfrm=gcc
    set soext=so
    set exampleout=FREEBSDexample.out
    set platform=FreeBSD
    set stldebug=_stldebug

    # set LD_LIBRARY_PATH
    if ( $?LD_LIBARY_PATH == 0) then
	setenv LD_LIBRARY_PATH ${OO_SDK_HOME}/lib:${OO_SDK_OUT}/${exampleout}/lib:${OO_SDK_URE_LIB_DIR}:.
    else
	setenv LD_LIBRARY_PATH ${OO_SDK_HOME}/lib:${OO_SDK_OUT}/${exampleout}/lib:${OO_SDK_URE_LIB_DIR}:.:${LD_LIBRARY_PATH}
    endif

    if ( -e "/sbin/sysctl" ) then
	set OSVERSION=`/sbin/sysctl  -n kern.osreldate`
    else
	set OSVERSION=`/usr/sbin/sysctl  -n kern.osreldate`
    endif
    
    if ( ${OSVERSION} < 500016 ) then
	setenv PTHREAD_CFLAGS -D_THREAD_SAFE
	setenv PTHREAD_LIBS -pthread
    else if ( ${OSVERSION} < 502102 ) then
	setenv PTHREAD_CFLAGS -D_THREAD_SAFE
	setenv PTHREAD_LIBS -lc_r
    else	
	setenv PTHREAD_LIBS -pthread
    endif
  breaksw
endsw

# set PATH
if ( $?PATH == 0) then
    setenv PATH ${OO_SDK_ZIP_HOME}:${OO_SDK_MAKE_HOME}:${OO_SDK_HOME}/bin:${OO_SDK_OUT}/${exampleout}:${OO_SDK_URE_BIN_DIR}:.
else
    setenv PATH ${OO_SDK_ZIP_HOME}:${OO_SDK_MAKE_HOME}:${OO_SDK_HOME}/bin:${OO_SDK_OUT}/${exampleout}:${OO_SDK_URE_BIN_DIR}:.:${PATH}
endif

# Set CLASSPATH
if ( ${?OFFICE_PROGRAM_PATH} ) then
    if ( ${?CLASSPATH} == 0 ) then
        setenv CLASSPATH "${OFFICE_PROGRAM_PATH}/classes/unoil.jar"
    else
        setenv CLASSPATH "${OFFICE_PROGRAM_PATH}/classes/unoil.jar:${CLASSPATH}"
    endif
endif
if ( $?CLASSPATH == 0) then
    setenv CLASSPATH "${OO_SDK_URE_JAVA_DIR}/juh.jar:${OO_SDK_URE_JAVA_DIR}/jurt.jar:${OO_SDK_URE_JAVA_DIR}/ridl.jar:${OO_SDK_URE_JAVA_DIR}/unoloader.jar"
else
    setenv CLASSPATH "${OO_SDK_URE_JAVA_DIR}/juh.jar:${OO_SDK_URE_JAVA_DIR}/jurt.jar:${OO_SDK_URE_JAVA_DIR}/ridl.jar:${OO_SDK_URE_JAVA_DIR}/unoloader.jar:${CLASSPATH}"
endif

if ( $?OO_SDK_CPP_HOME == 0) then
    setenv PATH ${OO_SDK_CPP_HOME}:${PATH}
endif

if ( $?OO_SDK_JAVA_HOME == 0) then
    setenv PATH ${OO_SDK_JAVA_HOME}:${PATH}
endif

if ( -r "${OO_SDK_URE_LIB_DIR}/libstlport_${pltfrm}${stldebug}.${soext}" ) then
    setenv STLDEBUG ${stldebug}
else
    setenv STLDEBUG ""
endif


if [ "${platform}" == "MacOSX" ] then
#    For URE, prepare symbolic links for libraries:
#    Only necessary on MacOSX, on other Unix systems the links are already prepared
#    in the SDK installation.

#    cleanup potential old links first
    rm -f "${OO_SDK_OUT}/${directoryname}/lib/libuno_cppu.so" \
	"${OO_SDK_OUT}/${directoryname}/lib/libuno_cppuhelper${comid}.${soext}" \
	"${OO_SDK_OUT}/${directoryname}/lib/libuno_sal.${soext}" \
	"${OO_SDK_OUT}/${directoryname}/lib/libuno_salhelper${comid}.${soext}" \
	"${OO_SDK_OUT}/${directoryname}/lib/libuno_purpenvhelper${comid}.${soext}"

    if ( -e "${OO_SDK_OUT}/${directoryname}/lib/libstlport_${pltfrm}${STLDEBUG}.${soext}" ) then
	rm -rf "${OO_SDK_OUT}/${directoryname}/lib/libstlport_${pltfrm}${STLDEBUG}.${soext}"
    endif

    if ( "${OO_SDK_URE_HOME}" != "" ) then
	mkdir -p "${OO_SDK_OUT}/${directoryname}/lib"
	ln -s "${OO_SDK_URE_LIB_DIR}/libuno_cppu.${soext}.3" \
	    "${OO_SDK_OUT}/${directoryname}/lib/libuno_cppu.${soext}"
	ln -s "${OO_SDK_URE_LIB_DIR}/libuno_cppuhelper${comid}.${soext}.3" \
	    "${OO_SDK_OUT}/${directoryname}/lib/libuno_cppuhelper${comid}.${soext}"
	ln -s "${OO_SDK_URE_LIB_DIR}/libuno_sal.${soext}.3" \
	    "${OO_SDK_OUT}/${directoryname}/lib/libuno_sal.${soext}"
	ln -s "${OO_SDK_URE_LIB_DIR}/libuno_salhelper${comid}.${soext}.3" \
	    "${OO_SDK_OUT}/${directoryname}/lib/libuno_salhelper${comid}.${soext}"
	ln -s "${OO_SDK_URE_LIB_DIR}/libuno_purpenvhelper${comid}.${soext}.3" \
	    "${OO_SDK_OUT}/${directoryname}/lib/libuno_purpenvhelper${comid}.${soext}"

	if ( -r "${OO_SDK_URE_LIB_DIR}/libstlport_${pltfrm}${STLDEBUG}.${soext}" ) then
	    ln -s "${OO_SDK_URE_LIB_DIR}/libstlport_${pltfrm}${STLDEBUG}.${soext}" \
		"${OO_SDK_OUT}/${directoryname}/lib/libstlport_${pltfrm}${STLDEBUG}.${soext}"
	endif
    endif
endif

 
echo 
echo " ************************************************************************"
echo " *"                                                  
echo " * SDK environment is prepared for ${platform}"      
echo " *"                                                  
echo " * SDK = ${OO_SDK_HOME}"
echo " * Office = ${OFFICE_HOME}"
echo " * Office Base = ${OFFICE_BASE_HOME}"
echo " * URE = ${OO_SDK_URE_HOME}"
echo " * Make = ${OO_SDK_MAKE_HOME}"
echo " * Zip = ${OO_SDK_ZIP_HOME}"
if ( $?OO_SDK_CPP_HOME == 0) then
echo " * C++ Compiler = "
else
echo " * C++ Compiler = ${OO_SDK_CPP_HOME}"
endif
if ( $?OO_SDK_JAVA_HOME == 0) then
echo " * Java = "
else
echo " * Java = ${OO_SDK_JAVA_HOME}"
endif
if ( $?OO_SDK_OUTPUT_DIR == 0) then
echo " * Special Output directory = "
else
echo " * SDK Output directory = ${OO_SDK_OUT}"
endif
echo " * Auto deployment = ${SDK_AUTO_DEPLOYMENT}"
echo " *"
echo " ************************************************************************"

unset sdkdir
unset directoryname
unset comid
unset exampleout
unset platform

echo "]2;Shell prepared with the SDK environment"
