(file) Return to buildtool CVS log (file) (dir) Up to [OMI] / omi

File: [OMI] / omi / buildtool (download)
Revision: 1.4, Mon Apr 20 17:19:49 2015 UTC (9 years ago) by krisbash
Branch: MAIN
CVS Tags: OMI_1_0_8_2, OMI_1_0_8_1, HEAD
Changes since 1.3: +336 -19 lines
OMI 1.0.8-1

#!/bin/sh

##==============================================================================
##
## Extract leading arguments into $arg1 ... $arg9
## Extract options int $opts
##
##==============================================================================

n="1"
argc="0"

for i
do

    # Break on the first argument that starts with '-'
    case $i in
        -h|--help)
            help=1
            break;
            ;;
        -*)
            break;
            ;;
    esac

    # Set arguments arg1 ... arg9
    case $n in
        1)
            arg1="$i"
            shift
            ;;
        2)
            arg2="$i"
            shift
            ;;
        3)
            arg3="$i"
            shift
            ;;
        4)
            arg4="$i"
            shift
            ;;
        5)
            arg5="$i"
            shift
            ;;
        6)
            arg6="$i"
            shift
            ;;
        7)
          arg7="$i"
          shift
          ;;
        8)
            arg8="$i"
            shift
            ;;
        9)
            arg9="$i"
            shift
            ;;
    esac

    argc=`expr $argc + 1`
    n=`expr $n + 1`

done

opts=$*

#echo "help=$help"
#echo "argc=$argc"
#echo "arg1=$arg1"
#echo "arg2=$arg2"
#echo "arg3=$arg3"
#echo "arg4=$arg4"
#echo "arg5=$arg5"
#echo "arg6=$arg6"
#echo "arg7=$arg7"
#echo "arg8=$arg8"
#echo "arg9=$arg9"
#echo "opts{$opts}"

##==============================================================================
##
## Extract the --target=TARGET option up front (leave other options in 
## localopts).
##
##==============================================================================

localopts=

for opt in $opts
do
    arg=`expr "x$opt" : 'x[^=]*=\(.*\)'`
    case $opt in
        --target=*)
            target=$arg
            ;;
        *)
            if [ -z "$localopts" ]; then
                localopts="$opt"
            else
                localopts="$localopts $opt"
            fi
            ;;
    esac
done

opts=$localopts

##==============================================================================
##
## Print the help message
##
##==============================================================================

if [ "$help" = "1" ]; then

    cat<<EOF
Usage: $0 [COMMAND] [ARGUMENTS] [OPTIONS]

COMMANDS:
    platform
        Print the platform ID for this platform.
    os
        Print operating system ID for this platform.
    hostname
        Print short hostname.
    longhostname
        Print long hostname.
    username
        Print the username of the current user.
    arch
        Print architecture ID for this platform.
    compiler
        Print compiler ID for this platform.
    cc                  
        Print command name of C compiler.
    cxx                 
        Print command name of C++ compiler.
    ar
        Print command name of archive command.
    cflags [--debug --pic --errwarn --pal]
        Print C compiler flags.
    cxxflags [--debug --pic --errwarn]
        Print C++ compiler flags.
    cshlibflags [--libpath=PATH --pal]
        Print compiler flags used to create a C shared library.
    cxxshlibflags [--libpath=PATH]
        Print compiler flags used to create a C++ shared library.
    cprogflags [--libpath=PATH]
        Print compiler flags used to create a C program.
    cxxprogflags [--libpath=PATH]
        Print compiler flags used to create a C++ program.
    mkdep
        Print out command to build dependencies.
    syslibs
        Print a list of system libraries.
    libpath
        Print dynamic library path option.
    shlibname BASENAME
        Print the shared library name of the given basename.
    shlibext
        Print the shared library extension (e.g., 'so').
    openssllibdir
        Print the directory containing the OpenSSL library
    ldlibrarypath
        Print the name of the dynamic library path variable, usually LD_LIBRARY_PATH or SHLIB_PATH
EOF
    exit 0
fi

##==============================================================================
##
## Check arguments
##
##==============================================================================

if [ "$argc" = "0" ]; then
    echo "Usage: $0 [COMMAND] [ARGUMENTS] [OPTIONS]"
    echo "Try --help for help"
    exit 1
fi

##==============================================================================
##
## Get the platform ID and reject unknown platforms:
##
##==============================================================================

if [ -z "$target" ]; then

    __m=`uname -m 2>/dev/null` || __m=unknown
    __s=`uname -s 2>/dev/null`  || __s=unknown
    __r=`uname -r 2>/dev/null` || __r=unknown
    __v=`uname -v 2>/dev/null` || __v=unknown

    case "$__m:$__s:$__r:$__v" in
        i686:Linux:*:*)
            os=LINUX
            arch=IX86
            compiler=GNU
            ;;
        x86_64:Linux:*:*)
            os=LINUX
            arch=X86_64
            compiler=GNU
            ;;
        sun4*:SunOS:*:*)
            os=SUNOS
            arch=SPARC
            compiler=SUNPRO
            ;;
        i86pc:SunOS:*:*)
            os=SUNOS
            arch=I86PC
            compiler=SUNPRO
            ;;
        *:AIX:*:*)
            os=AIX
            arch=PPC
            compiler=IBM
            ;;
        ia64:HP-UX:*:*)
            os=HPUX
            arch=IA64
            compiler=HP
            ;;
        9000/800:HP-UX:*:*)
            os=HPUX
            arch=PARISC
            compiler=HP
            ;;

        i386:Darwin:*:Darwin* | x86_64:Darwin:*:Darwin*)
            os=DARWIN
            arch=IX86
            compiler=GNU
            ;;
        *)
            echo "$0: error: unsupported platform: $__m:$__s:$__r:$__v"
            exit 1
            ;;
    esac
    platform=$os"_"$arch"_"$compiler
else
    platform=$target
fi

case "$platform" in
    LINUX_IX86_GNU|LINUX_X86_64_GNU)
        ;;
    MONTAVISTA_IX86_GNU)
        ;;
    NETBSD_IX86_GNU)
        ;;
    SUNOS_I86PC_SUNPRO|SUNOS_SPARC_SUNPRO)
        ;;
    AIX_PPC_IBM)
        ;;
    HPUX_IA64_HP|HPUX_PARISC_HP)
        ;;
    DARWIN_IX86_GNU)
        ;;
    *)
        echo "$0: error: unsupported platform: $platform"
        exit 1
        ;;
esac

##==============================================================================
##
## platform command:
##
##==============================================================================

if [ "$arg1" = "platform" ]; then

    if [ "$argc" != "1" -o "$opts" != "" ]; then
        echo "Usage: $0 $arg1"
        echo
        exit 1
    fi

    echo $platform
    exit
fi

##==============================================================================
##
## os command:
##
##==============================================================================

if [ "$arg1" = "os" ]; then

    if [ "$argc" != "1" -o "$opts" != "" ]; then
        echo "Usage: $0 $arg1"
        echo
        exit 1
    fi

    case "$platform" in
        MONTAVISTA*)
            os=LINUX
            ;;
        NETBSD*)
            os=BSD
            ;;
    esac

    echo $os
    exit
fi

##==============================================================================
##
## hostname command:
##
##==============================================================================

if [ "$arg1" = "hostname" ]; then

    if [ "$argc" != "1" -o "$opts" != "" ]; then
        echo "Usage: $0 $arg1"
        echo
        exit 1
    fi

    if [ "$os" = "DARWIN" ] ; then 
        hostname -s
    else
        hostname
    fi
    exit
fi

##==============================================================================
##
## longhostname command:
##
##==============================================================================

if [ "$arg1" = "longhostname" ]; then

    if [ "$argc" != "1" -o "$opts" != "" ]; then
        echo "Usage: $0 $arg1"
        echo
        exit 1
    fi

    case "$platform" in

        LINUX*)
            ##
            ## First try hostname -f (this will fail on some Linux systems)
            ##
            hn=`hostname -f 2> /dev/null`
            if [ "$?" = "0" ]; then
                echo $hn
            else
                hostname
            fi
            ;;
        MONTAVISTA*)
            hostname
            ;;
        NETBSD*)
            hostname
            ;;
        DARWIN*)
            hostname
            ;;
        *)
	    ##
	    ## Attempt to obtain domain name from /etc/resolve.conf
	    ##
            if [ -f "/etc/resolv.conf" ]; then
              domain=`cat /etc/resolv.conf | grep '^domain' | awk '{print $2}'`

              if [ -n "$domain" ]; then
                echo `hostname`.$domain
                exit 0
              fi
            fi

	    ##
	    ## Attempt to obtain long hostname with 'nslookup' command
	    ##
            if [ -n "`which nslookup`" ]; then
		host=`hostname`
		lhs=`nslookup $host | grep '^Name:' | awk '{print $2}' | grep $host`
		if [ -n "$lhs" ]; then
		    echo $lhs
		    exit 0
		fi
	    fi

	    ##
	    ## Just print host hostname:
	    ##
            hostname
            ;;
    esac

    exit
fi

##==============================================================================
##
## username command:
##
##==============================================================================

if [ "$arg1" = "username" ]; then

    if [ "$argc" != "1" -o "$opts" != "" ]; then
        echo "Usage: $0 $arg1"
        echo
        exit 1
    fi

    case "$platform" in

        *)
            id | cut -f2 -d'(' | cut -f1 -d')'
            ;;
    esac

    exit
fi

##==============================================================================
##
## arch command:
##
##==============================================================================

if [ "$arg1" = "arch" ]; then

    if [ "$argc" != "1" -o "$opts" != "" ]; then
        echo "Usage: $0 $arg1"
        echo
        exit 1
    fi

    case "$platform" in
        MONTAVISTA*)
            arch=IX86
            ;;
        NETBSD*)
            arch=IX86
            ;;
    esac

    echo $arch
    exit
fi

##==============================================================================
##
## compiler command:
##
##==============================================================================

if [ "$arg1" = "compiler" ]; then

    if [ "$argc" != "1" -o "$opts" != "" ]; then
        echo "Usage: $0 $arg1"
        echo
        exit 1
    fi

    case "$platform" in
        MONTAVISTA*)
            compiler=GNU
            ;;
        NETBSD*)
            compiler=GNU
            ;;
    esac

    echo $compiler
    exit
fi

##==============================================================================
##
## cc command:
##
##==============================================================================

if [ "$arg1" = "cc" ]; then

    if [ "$argc" != "1" -o "$opts" != "" ]; then
        echo "Usage: $0 $arg1"
        echo
        exit 1
    fi

    case "$platform" in

        LINUX_IX86_GNU|LINUX_X86_64_GNU)
            echo gcc
            ;;
        MONTAVISTA_IX86_GNU)
            echo 586-gcc
            ;;
        NETBSD_IX86_GNU)
            echo netbsd-gcc
            ;;
        SUNOS_I86PC_SUNPRO|SUNOS_SPARC_SUNPRO)
            echo cc
            ;;
        AIX_PPC_IBM)
            echo xlc_r
            ;;
        HPUX_IA64_HP|HPUX_PARISC_HP)
            echo aCC -Ae
            ;;
        DARWIN_IX86_GNU)
            echo gcc
            ;;
    esac

    exit
fi

##==============================================================================
##
## cxx command:
##
##==============================================================================

if [ "$arg1" = "cxx" ]; then

    if [ "$argc" != "1" -o "$opts" != "" ]; then
        echo "Usage: $0 $arg1"
        echo
        exit 1
    fi

    case "$platform" in
        LINUX_IX86_GNU|LINUX_X86_64_GNU)
            echo g++
            ;;
        MONTAVISTA_IX86_GNU)
            echo 586-g++
            ;;
        NETBSD_IX86_GNU)
            echo netbsd-g++
            ;;
        SUNOS_I86PC_SUNPRO|SUNOS_SPARC_SUNPRO)
            echo CC
            ;;
        AIX_PPC_IBM)
            echo xlC_r 
            ;;
        HPUX_IA64_HP|HPUX_PARISC_HP)
            echo aCC -AA
            ;;
        DARWIN_IX86_GNU)
            echo g++
            ;;
    esac

    exit
fi

##==============================================================================
##
## ar command:
##
##==============================================================================

if [ "$arg1" = "ar" ]; then

    if [ "$argc" != "1" -o "$opts" != "" ]; then
        echo "Usage: $0 $arg1"
        echo
        exit 1
    fi

    case "$platform" in

        MONTAVISTA_IX86_GNU)
            echo 586-ar
            ;;
        NETBSD_IX86_GNU)
            echo netbsd-ar
            ;;
        *)
            echo ar
            ;;
    esac

    exit
fi

##==============================================================================
##
## 'cflags' command:
## 'cxxflags' command:
##
##==============================================================================

if [ "$arg1" = "cflags" -o "$arg1" = "cxxflags" ]; then

    if [ "$argc" != "1" ]; then
        echo "Usage: $0 $arg1"
        echo
        exit 1
    fi

    if [ "$arg1" = "cflags" ]; then
        c_opt=1
    else
        cxx_opt=1
    fi

    for opt in $opts
    do
        case $opt in
            --debug)
                debug_opt=1
                ;;
            --pic)
                pic_opt=1
                ;;
            --errwarn)
                errwarn_opt=1
                ;;
            --size)
                size_opt=1
                ;;
            --pal)
                pal_opt=1
                ;;
            *)
                echo "$arg1: unknown option: $opt"
                exit 1
                ;;
        esac
    done

    r=""

    case "$platform" in
        LINUX_IX86_GNU|LINUX_X86_64_GNU|MONTAVISTA_IX86_GNU|NETBSD_IX86_GNU)

            if test -n "$debug_opt"; then
                r="$r -g"
            else
                if test -n "$size_opt"; then
                    r="$r -Os"
                else
                    r="$r -g -O2"
                fi
            fi

            test -n "$pic_opt" && r="$r -fPIC"
            test -n "$errwarn_opt" && r="$r -Werror"
            r="$r -Wall"
            r="$r -fvisibility=hidden"
            r="$r -fno-strict-aliasing"
            r="$r -D_GNU_SOURCE"
            r="$r -D_XOPEN_SOURCE=600"
            r="$r -D_BSD_SOURCE"

            #test -n "$cxx_opt" && r="$r -fno-exceptions"
            #test -n "$cxx_opt" && r="$r -fno-enforce-eh-specs"
            #test -n "$cxx_opt" && r="$r -fno-rtti"
            ;;
        SUNOS_I86PC_SUNPRO|SUNOS_SPARC_SUNPRO)

            ## Debugger options.
            test -n "$debug_opt" && r="$r -g"

            ## Optimization options.
            if test -z "$debug_opt"; then
                test -n "$c_opt" && r="$r -g"
                test -n "$cxx_opt" && r="$r -g -O"
            fi

            ## Generate position independent code (PIC).
            test -n "$pic_opt" && r="$r -KPIC"

            ## treat warnings as errors.
            test -n "$errwarn_opt" && r="$r -errwarn"

            ## multi-threaded support.
            r="$r -mt"

            ## avoid optimizations that increase object code size.
            r="$r -xspace"

            ## specify target system.
            r="$r -xtarget=generic"

            ## specify target architecture.
            r="$r -xarch=generic"

            ## hide all library symbols by default.            
            test -z "$pal_opt" && r="$r -xldscope=hidden"
            test -n "$pal_opt" && r="$r -xldscope=symbolic"

            ## display brief message tag for each warning message.
            r="$r -errtags=yes"

            ## use standar pthread funciton declarations
            r="$r -D_POSIX_PTHREAD_SEMANTICS"

            r="$r -D_XOPEN_SOURCE=500"

            r="$r -D__EXTENSIONS__"

            ## suppress all warning messages.
            #r="$r -erroff=%all"

            ## suppress this warning message.
            test -n "$c_opt" && r="$r -erroff=E_WHITE_SPACE_IN_DIRECTIVE"
            
            ;;
        AIX_PPC_IBM)
            test -n "$debug_opt" && r="$r -g"
            test -n "$debug_opt" && r="$r -qcheck"
            test -z "$debug_opt" && r="$r -O2"
            test -z "$debug_opt" && r="$r -qcompact"
            test -n "$pic_opt" && r="$r -qpic"
            r="$r -q32"
            r="$r -Daix"

            ;;
        HPUX_IA64_HP)
            test -n "$debug_opt" && r="$r -g"
            test -z "$debug_opt" && r="$r -s +O1"
            r="$r +DD32"
            r="$r -mt"
            r="$r +Z"
            r="$r -Dhpux"
            r="$r +W4232"
            r="$r +W4275"
            r="$r -D_XOPEN_SOURCE=500"
            r="$r -D__STDC_EXT__"
            ;;
        HPUX_PARISC_HP)
            test -n "$debug_opt" && r="$r -g +noobjdebug"
            test -z "$debug_opt" && r="$r +O2 -s"
            r="$r +Z"
            r="$r +DAportable"
            r="$r -mt"
            r="$r -Dhpux"
            r="$r -D_PSTAT64"
            r="$r +W749"
            r="$r +W740"
            r="$r -Wl,+s"
            r="$r -D_INCLUDE__STDC_A1_SOURCE"
            r="$r -D__STDC_EXT__"
            r="$r -D_XOPEN_SOURCE_EXTENDED"
            ;;
        DARWIN_IX86_GNU)
            test -n "$debug_opt" && r="$r -g"
            test -z "$debug_opt" && r="$r -g -O2"
            test -n "$pic_opt" && r="$r -fPIC"
            test -n "$errwarn_opt" && r="$r -Werror"
            r="$r -Wall"
            r="$r -fvisibility=hidden"
            r="$r -bind_at_load"
            ;;
    esac

    echo $r
    exit
fi

##==============================================================================
##
## 'cshlibflags' command:
## 'cxxshlibflags' command:
##
##==============================================================================

if [ "$arg1" = "cshlibflags" -o "$arg1" = "cxxshlibflags" ]; then

    if [ "$argc" != "1" ]; then
        echo "Usage: $0 $arg1"
        echo
        exit 1
    fi

    if [ "$arg1" = "cshlibflags" ]; then
        c_opt=1
    else
        cxx_opt=1
    fi

    for opt in $opts
    do
        arg=`expr "x$opt" : 'x[^=]*=\(.*\)'`
        case $opt in
            --libpath=*)
                libpath_opt=$arg
                ;;
            --pal)
                palshlib_opt=1
                ;;
            *)
                echo "$arg1: unknown option: $opt"
                exit 1
                ;;
        esac
    done

    r=""

    case "$platform" in
        LINUX_IX86_GNU|LINUX_X86_64_GNU)
            r="$r -shared"
            test -n "$libpath_opt" && r="$r -Wl,-rpath=$libpath_opt"
            ;;
        MONTAVISTA_IX86_GNU)
            r="$r -shared"
            test -n "$libpath_opt" && r="$r -Wl,-rpath=$libpath_opt"
            ;;
        NETBSD_IX86_GNU)
            r="$r -shared"
            test -n "$libpath_opt" && r="$r -Wl,-rpath=$libpath_opt"
            ;;
        SUNOS_I86PC_SUNPRO|SUNOS_SPARC_SUNPRO)

            ## multi-threaded support.
            r="$r -mt"

            ## ignore the LD_LIBRARY_PATH variable when linking.
            r="$r -i"

            ## Build a dynamic shared library (rather than executable file).
            r="$r -G"

            ## Generate position independent code (PIC).
            r="$r -KPIC"

            ## Link with the standard C++ library.
            test -n "$cxx_opt" && r="$r -lCstd"

            ## link time library contains 'nanosleep'
            r="$r -lrt"

            ## hide all library symbols by default.
            test -z "$palshlib_opt" && r="$r -xldscope=hidden"
            test -n "$palshlib_opt" && r="$r -xldscope=symbolic"

            ## Add libpath_opt to the dynamic library path.
            test -n "$libpath_opt" && r="$r -R:$libpath_opt"

            ;;
        AIX_PPC_IBM)
            r="$r -brtl"
            r="$r -G"
            r="$r -qmkshrobj"
            r="$r -q32"
            if [ -n "$libpath_opt" ]; then
                r="$r -blibpath:$libpath_opt:/usr/lib:/lib"
            else
                r="$r -blibpath:/usr/lib:/lib"
            fi
            r="$r -bnolibpath"
            r="$r -Wl,-bnoautoexp"
            r="$r -Wl,-bnoexpall"
            ;;
        HPUX_IA64_HP)
            r="$r +DD32"
            r="$r -mt"
            r="$r +Z -Dhpux"
            r="$r +W4232"
            r="$r +W4275" 
            r="$r -D_XOPEN_SOURCE=600"
            r="$r -D__STDC_EXT__"
            r="$r -lc"
            r="$r -lrt"
            r="$r -b"
            r="$r -Wl,-Bsymbolic"
            test -n "$libpath_opt" && r="$r +b $libpath_opt"
            test -n "$cxx_opt" && r="$r -lunwind"
            test -n "$cxx_opt" && r="$r -lCsup"
            ;;
        HPUX_PARISC_HP)
            r="$r -b"
            r="$r -lrt"
            r="$r -Wl,-Bsymbolic"
            r="$r -Wl,+s"
            ;;
        DARWIN_IX86_GNU)
            r="$r -dynamiclib"
            test -n "$libpath_opt" && r="$r -R$libpath_opt"
            r="$r -bind_at_load"
            ;;
    esac

    echo $r
    exit
fi

##==============================================================================
##
## 'cprogflags' command:
## 'cxxprogflags' command:
##
##==============================================================================

if [ "$arg1" = "cprogflags" -o "$arg1" = "cxxprogflags" ]; then

    if [ "$argc" != "1" ]; then
        echo "Usage: $0 $arg1"
        echo
        exit 1
    fi

    if [ "$arg1" = "cprogflags" ]; then
        c_opt=1
    else
        cxx_opt=1
    fi

    for opt in $opts
    do
        arg=`expr "x$opt" : 'x[^=]*=\(.*\)'`
        case $opt in
            --libpath=*)
                libpath_opt=$arg
                ;;
            *)
                echo "$arg1: unknown option: $opt"
                exit 1
                ;;
        esac
    done

    r=""

    case "$platform" in
        LINUX_IX86_GNU|LINUX_X86_64_GNU)
            test -n "$libpath_opt" && r="$r -Wl,-rpath=$libpath_opt"
            ;;
        MONTAVISTA_IX86_GNU)
            test -n "$libpath_opt" && r="$r -Wl,-rpath=$libpath_opt"
            ;;
        NETBSD_IX86_GNU)
            test -n "$libpath_opt" && r="$r -Wl,-rpath=$libpath_opt"
            ;;
        SUNOS_I86PC_SUNPRO|SUNOS_SPARC_SUNPRO)

            ## multi-threaded support.
            r="$r -mt"

            ## ignore the LD_LIBRARY_PATH variable when linking.
            r="$r -i"

            ## link time library contains 'nanosleep'
            r="$r -lrt"

            ## hide all library symbols by default.
            r="$r -xldscope=hidden"

            ## Add libpath_opt to the dynamic library path.
            test -n "$libpath_opt" && r="$r -R:$libpath_opt"

            ;;

        AIX_PPC_IBM)
            r="$r -brtl"
            r="$r -q32"
            r="$r -qrtti=dyna"
            r="$r -qcpluscmt"
            if [ -n "$libpath_opt" ]; then
                r="$r -blibpath:$libpath_opt:/usr/lib:/lib"
            else
                r="$r -blibpath:/usr/lib:/lib"
            fi
            ;;
        HPUX_IA64_HP)
            r="$r +DD32"
            r="$r -mt"
            r="$r +Z -Dhpux"
            r="$r +W4232"
            r="$r +W4275" 
            r="$r -D_XOPEN_SOURCE=600"
            r="$r -D__STDC_EXT__"
            r="$r -lrt"
            r="$r -Wl,-Bsymbolic"
            test -n "$libpath_opt" && r="$r +b $libpath_opt"
            ;;
        HPUX_PARISC_HP)
            r="$r +Z"
            r="$r +DAportable"
            r="$r -mt"
            r="$r -lrt"
            r="$r -D_PSTAT64"
            ;;
        DARWIN_IX86_GNU)
            test -n "$libpath_opt" && r="$r -R$libpath_opt"
            r="$r -bind_at_load"
            ;;
    esac

    echo $r
    exit
fi

##==============================================================================
##
## mkdep command:
##
##==============================================================================

if [ "$arg1" = "mkdep" ]; then

    if [ "$argc" != "1" -o "$opts" != "" ]; then
        echo "Usage: $0 $arg1"
        echo
        exit 1
    fi

    r=""

    case "$platform" in
        LINUX_IX86_GNU|LINUX_X86_64_GNU)
            r="gcc -M"
            ;;
        MONTAVISTA_IX86_GNU)
            r="586-gcc -M"
            ;;
        NETBSD_IX86_GNU)
            r="gcc -M"
            ;;
        SUNOS_I86PC_SUNPRO|SUNOS_SPARC_SUNPRO)
            r="CC -xM1"
            ;;
        AIX_PPC_IBM)
            r="xlc++_r -E -qmakedep=gcc"
            ;;
        HPUX_IA64_HP|HPUX_PARISC_HP)
            r="aCC +make -E"
            ;;
        DARWIN_IX86_GNU)
            r="gcc -M"
            ;;
    esac

    echo "$r"
    exit
fi

##==============================================================================
##
## syslibs command:
##
##==============================================================================

if [ "$arg1" = "syslibs" ]; then

    if [ "$argc" != "1" -o "$opts" != "" ]; then
        echo "Usage: $0 $arg1"
        echo
        exit 1
    fi

    r=""

    case "$platform" in
        LINUX_IX86_GNU|LINUX_X86_64_GNU)
            r="-lpthread -ldl -lpam"
            ;;
        MONTAVISTA_IX86_GNU)
            r="-lpthread -ldl -lpam"
            ;;
        NETBSD_IX86_GNU)
            r="-lpthread -ldl -lpam"
            ;;
        SUNOS_I86PC_SUNPRO|SUNOS_SPARC_SUNPRO)
            r="-lpthread -lsocket -lnsl -ldl -lpam"
            ;;
        AIX_PPC_IBM)
            r="-lpthread -ldl -lpam"
            ;;
        HPUX_IA64_HP)
            r="-lpthread -ldl -lpam"
            ;;
        HPUX_PARISC_HP)
            r="-lpthread -lpam"
            ;;
        DARWIN_IX86_GNU)
            r="-lpthread -ldl -lpam"
            ;;
    esac

    echo "$r"
    exit
fi

##==============================================================================
##
## libpath command:
##
##==============================================================================

if [ "$arg1" = "libpath" ]; then

    if [ "$argc" -lt "2" -o "$opts" != "" ]; then
        echo "Usage: $0 $arg1 PATH"
        echo
        exit 1
    fi

    r=""
    args="$arg2 $arg3 $arg4 $arg5 $arg6 $arg7 $arg8 $arg9"

    case "$platform" in
        LINUX_IX86_GNU|LINUX_X86_64_GNU)
            for path in $args
            do
                r="$r -Wl,-rpath=$path"
            done
            ;;
        MONTAVISTA_IX86_GNU)
            for path in $args
            do
                r="$r -Wl,-rpath=$path"
            done
            ;;
        NETBSD_IX86_GNU)
            for path in $args
            do
                r="$r -Wl,-rpath=$path"
            done
            ;;
        SUNOS_I86PC_SUNPRO|SUNOS_SPARC_SUNPRO)
            for path in $args
            do
                r="$r -R:$path"
            done
            ;;
        AIX_PPC_IBM)
            r="-blibpath:/usr/lib:/lib"
            for path in $args
            do
                r="$r:$path"
            done
            ;;
        HPUX_IA64_HP)
            r="-Wl,+b,"
            first=1
            for path in $args
            do
                if [ -n "$first" ]; then
                   r="$r$path"
                   first=""
                else
                   r="$r:$path"
                fi
            done
            ;;
        HPUX_PARISC_HP)
            #r="-Wl,+cdp,"
            r="-Wl,+b,"
            first=1
            for path in $args
            do
                if [ -n "$first" ]; then
                   r="$r$path"
                   first=""
                else
                   r="$r:$path"
                fi
            done
            ;;
        DARWIN_IX86_GNU)
            for path in $args
            do
                r="$r -R$path"
            done
            ;;
    esac

    echo "$r"
    exit
fi

##==============================================================================
##
## libname command:
##
##==============================================================================

if [ "$arg1" = "libname" ]; then

    if [ "$argc" -lt "2" -o "$opts" != "" ]; then
        echo "Usage: $0 $arg1 PATH"
        echo
        exit 1
    fi

    r=""

    case "$platform" in
        LINUX_IX86_GNU|LINUX_X86_64_GNU)
            ;;
        MONTAVISTA_IX86_GNU)
            ;;
        NETBSD_IX86_GNU)
            ;;
        SUNOS_I86PC_SUNPRO|SUNOS_SPARC_SUNPRO)
            ;;
        AIX_PPC_IBM)
            ;;
        HPUX_IA64_HP)
            ;;
        HPUX_PARISC_HP)
            ;;
        DARWIN_IX86_GNU)
            r="$r -Wl,-install_name -Wl,$arg2"
            ;;
    esac

    echo "$r"
    exit
fi

##==============================================================================
##
## 'shlibname' command:
##
##==============================================================================

if [ "$arg1" = "shlibname" ]; then

    if [ "$argc" != "2" -o "$opts" != "" ]; then
        echo "Usage: $0 $arg1 LIBBASENAME"
        echo
        exit 1
    fi

    case "$platform" in
        LINUX_IX86_GNU|LINUX_X86_64_GNU)
            echo "lib$arg2.so"
            ;;
        MONTAVISTA_IX86_GNU)
            echo "lib$arg2.so"
            ;;
        NETBSD_IX86_GNU)
            echo "lib$arg2.so"
            ;;
        SUNOS_I86PC_SUNPRO|SUNOS_SPARC_SUNPRO)
            echo "lib$arg2.so"
            ;;
        AIX_PPC_IBM)
            echo "lib$arg2.so"
            ;;
        HPUX_IA64_HP)
            echo "lib$arg2.so"
            ;;
        HPUX_PARISC_HP)
            echo "lib$arg2.sl"
            ;;
        DARWIN_IX86_GNU)
            echo "lib$arg2.dylib"
            ;;
    esac

    exit
fi

##==============================================================================
##
## 'shlibext' command:
##
##==============================================================================

if [ "$arg1" = "shlibext" ]; then

    if [ "$argc" != "1" -o "$opts" != "" ]; then
        echo "Usage: $0 $arg1"
        echo
        exit 1
    fi

    case "$platform" in
        LINUX_IX86_GNU|LINUX_X86_64_GNU)
            echo "so"
            ;;
        MONTAVISTA_IX86_GNU)
            echo "so"
            ;;
        NETBSD_IX86_GNU)
            echo "so"
            ;;
        SUNOS_I86PC_SUNPRO|SUNOS_SPARC_SUNPRO)
            echo "so"
            ;;
        AIX_PPC_IBM)
            echo "so"
            ;;
        HPUX_IA64_HP)
            echo "so"
            ;;
        HPUX_PARISC_HP)
            echo "sl"
            ;;
        DARWIN_IX86_GNU)
            echo "dylib"
            ;;
        *)
            echo "so"
    esac

    exit
fi

##==============================================================================
##
## 'openssllibdir' command:
##
##==============================================================================

if [ "$arg1" = "openssllibdir" ]; then

    if [ "$argc" != "1" -o "$opts" != "" ]; then
        echo "Usage: $0 $arg1"
        echo
        exit 1
    fi

    ##
    ## (1) Locate libdir with pkg-config.
    ##

    pkgconfig=`which pkg-config 2> /dev/null`

    if [ -x "$pkgconfig" ]; then
        libdir=`$pkgconfig --variable=libdir openssl`
    fi

    ##
    ## (2) Locate libdir relative to openssl program.
    ##

    if [ -z "$libdir" ]; then
        openssl=`which openssl 2> /dev/null`

        if [ -x "$openssl" ]; then
            case "$platform" in
                HPUX_PARISC_HP)
                    shlibext="sl"
                    ;;
                DARWIN_IX86_GNU)
                    shlibext="dylib"
                    ;;
                *)
                    shlibext="so"
                    ;;
            esac
            dirname=`dirname $openssl`/..
            if [ -d "$dirname" ]; then
                dirname=`cd "$dirname"; pwd`
                if [ -f "$dirname/lib/libssl.$shlibext" ]; then
                    libdir=$dirname/lib
                elif [ -f "$dirname/ssl/lib/libssl.$shlibext" ]; then
                    libdir=$dirname/ssl/lib
                fi
            fi
        fi
    fi

    ##
    ## (3) Locate libdir based on platform identifier.
    ##

    if [ -z "$libdir" ]; then
        case "$platform" in
            LINUX_IX86_GNU|LINUX_X86_64_GNU)
                if [ -f "/usr/lib/libssl.so" ]; then
                    libdir=/usr/lib
                fi
                ;;
            SUNOS_I86PC_SUNPRO)
                if [ -f "/usr/sfw/lib/libssl.so" ]; then
                    libdir=/usr/sfw/lib
                fi
                ;;
            SUNOS_SPARC_SUNPRO)
                if [ -f "/usr/local/ssl/lib/libssl.so" ]; then
                    libdir=/usr/local/ssl/lib
                fi
                ;;
            AIX_PPC_IBM)
                if [ -f "/usr/lib/libssl.sl" ]; then
                    libdir=/usr/lib
                fi
                ;;
            HPUX_IA64_HP)
                if [ -f "/opt/openssl/lib/libssl.sl" ]; then
                    libdir=/opt/openssl/lib
                fi
                ;;
            HPUX_PARISC_HP)
                if [ -f "/usr/local/lib/libssl.sl" ]; then
                    libdir=/usr/local/lib
                fi
                ;;
            DARWIN_IX86_GNU)
                if [ -f "/usr/lib/libssl.dylib" ]; then
                    libdir=/usr/lib
                fi
                ;;
            *)
                echo "so"
        esac
    fi

    echo "$libdir"
    exit

fi

##==============================================================================
##
## 'ldlibrarypath' command:
##
##==============================================================================

if [ "$arg1" = "ldlibrarypath" ]; then

    if [ "$argc" != "1" -o "$opts" != "" ]; then
        echo "Usage: $0 $arg1"
        echo
        exit 1
    fi

    case "$platform" in
        HPUX_IA64_HP|HPUX_PARISC_HP)
            echo "SHLIB_PATH"
            ;;
        DARWIN_IX86_GNU)
            echo "DYLD_LIBRARY_PATH"
            ;;
        *)
            echo "LD_LIBRARY_PATH"
    esac

    exit
fi

##==============================================================================
##
## 'semnamelocalprefix' command (determine the prefix for a semaphore)
##
##==============================================================================

if [ "$arg1" = "semnamelocalprefix" ]; then

    if [ "$argc" != "1" -o "$opts" != "" ]; then
        echo "Usage: $0 $arg1"
        echo
        exit 1
    fi

    case "$platform" in
        HPUX_IA64_HP|HPUX_PARISC_HP)
            echo "/tmp/"
            ;;
        *)
            echo "/"
    esac

    exit
fi

##==============================================================================
##
## 'shmnamelocalprefix' command (determine the prefix for a shmaphore)
##
##==============================================================================

if [ "$arg1" = "shmnamelocalprefix" ]; then

    if [ "$argc" != "1" -o "$opts" != "" ]; then
        echo "Usage: $0 $arg1"
        echo
        exit 1
    fi

    case "$platform" in
        HPUX_IA64_HP|HPUX_PARISC_HP)
            echo "/tmp/"
            ;;
        *)
            echo "/"
    esac

    exit
fi

##==============================================================================
##
## 'semnameglobalprefix' command (determine the prefix for a semaphore)
##
##==============================================================================

if [ "$arg1" = "semnameglobalprefix" ]; then

    if [ "$argc" != "1" -o "$opts" != "" ]; then
        echo "Usage: $0 $arg1"
        echo
        exit 1
    fi

    case "$platform" in
        HPUX_IA64_HP|HPUX_PARISC_HP)
            echo "/tmp/"
            ;;
        *)
            echo "/"
    esac

    exit
fi

##==============================================================================
##
## 'shmnameglobalprefix' command (determine the prefix for a shmaphore)
##
##==============================================================================

if [ "$arg1" = "shmnameglobalprefix" ]; then

    if [ "$argc" != "1" -o "$opts" != "" ]; then
        echo "Usage: $0 $arg1"
        echo
        exit 1
    fi

    case "$platform" in
        HPUX_IA64_HP|HPUX_PARISC_HP)
            echo "/tmp/"
            ;;
        *)
            echo "/"
    esac

    exit
fi

##==============================================================================
##
## 'faultinjection' command 
##     Whether fault injection is supported (1) or not (0)
##
##==============================================================================

if [ "$arg1" = "faultinjection" ]; then

    if [ "$argc" != "1" -o "$opts" != "" ]; then
        echo "Usage: $0 $arg1"
        echo
        exit 1
    fi

    case "$os" in
        LINUX)
            # supported!
            echo "1"
            ;;
        *)
            # not-supported!
            echo "0"
    esac

    exit
fi

##==============================================================================
##
## 'vsnprintf' command 
##     Whether vsnprintf return -1 on NULL buffer or not
##
##==============================================================================

if [ "$arg1" = "vsnprintf" ]; then

    if [ "$argc" != "1" -o "$opts" != "" ]; then
        echo "Usage: $0 $arg1"
        echo
        exit 1
    fi

    case "$platform" in
        HPUX_IA64_HP|HPUX_PARISC_HP|SUNOS_SPARC_SUNPRO)
            # vsnprintf returns -1 if buffer is NULL
            echo "1"
            ;;
        *)
            # vsnprintf returns number of characters that would have been written
            # if buffer is big enough
            echo "0"
    esac

    exit
fi

##==============================================================================
##
## Unknown command:
##
##==============================================================================

echo "$0: unknown command: $arg1"
exit 1

ViewCVS 0.9.2