#!/bin/sh
# Make a shared library.
-# Basically do a switch/case depending on the OS and make a shared (or static)
-# library conforming to that OS.
-
-
-# Usage:
-# mklib [options] objects ...
-# Options:
-# -o LIBRARY specifies the name of resulting library
-# ("-o GL" for example, might result in "libGL.so" being made)
-# -major N specifies major version number (default is 1)
-# -minor N specifies minor version number (default is 0)
-# -patch N specifies patch version number (default is 0)
-# -lLIBRARY specifies a dependency on LIBRARY
-# -LDIR search in DIR for library dependencies
-# -linker L explicity specify the linker program to use (ex: gcc, g++)
-# Not observed on all systems at this time.
-# -cplusplus link with C++ runtime
-# -static make a static library (default is dynamic/shared)
-# -install DIR pu resulting library file(s) in DIR
-# -arch ARCH override using `uname` to determine architecture
-# -archopt OPT specify an extra achitecture-specific option OPT
-# -noprefix don't prefix library name with "lib" nor add any suffix
-# -exports FILE only export the symbols listed in FILE
+# This script should be useful for projects other than Mesa.
+# Improvements/fixes are welcome.
+
+
+# Copyright (C) 1999-2005 Brian Paul All Rights Reserved.
#
-# The library name should just be "GL" or "GLU", etc. The 'lib' prefix
-# will be added here if needed, as well as the ".so" or ".a" suffix,
-# etc (unless the -noprefix option is used).
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# the rights to use, copy, modify, merge, publish, distribute, sublicense,
+# and/or sell copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following conditions:
#
-# objects should be: foo.o bar.o etc.o
+# The above copyright notice and this permission notice shall be included
+# in all copies or substantial portions of the Software.
#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+# BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+
+function usage()
+{
+ echo 'Usage: mklib [options] objects'
+ echo 'Create a shared library from object files.'
+ echo ' -o LIBRARY specifies the name of the resulting library, without'
+ echo ' the leading "lib" or any suffix.'
+ echo ' (eg: "-o GL" might result in "libGL.so" being made)'
+ echo ' -major N specifies major version number (default is 1)'
+ echo ' -minor N specifies minor version number (default is 0)'
+ echo ' -patch N specifies patch version number (default is 0)'
+ echo ' -lLIBRARY specifies a dependency on LIBRARY'
+ echo ' -LDIR search in DIR for library dependencies'
+ echo ' -linker L explicity specify the linker program to use (eg: gcc, g++)'
+ echo ' Not observed on all systems at this time.'
+ echo ' -cplusplus link with C++ runtime'
+ echo ' -static make a static library (default is dynamic/shared)'
+ echo ' -install DIR put resulting library file(s) in DIR'
+ echo ' -arch ARCH override using `uname` to determine host system'
+ echo ' -archopt OPT specify an extra achitecture-specific option OPT'
+ echo " -noprefix don't prefix library name with 'lib' nor add any suffix"
+ echo ' -exports FILE only export the symbols listed in FILE'
+ echo ' -h, --help display this information and exit'
+}
#
while true
do
case $1 in
- '-o') shift 1; LIBNAME=$1;;
- '-major') shift 1; MAJOR=$1;;
- '-minor') shift 1; MINOR=$1;;
- '-patch') shift 1; PATCH=$1;;
- '-linker') shift 1; LINK=$1;;
- -l*) DEPS="$DEPS $1";;
- -L*) DEPS="$DEPS $1";;
- '-cplusplus') CPLUSPLUS=1;;
- '-static') STATIC=1;;
- '-install') shift 1; INSTALLDIR=$1;;
- '-arch') shift 1; ARCH=$1;;
- '-archopt') shift 1; ARCHOPT=$1;;
- '-noprefix') NOPREFIX=1;;
- '-exports') shift 1; EXPORTS=$1;;
- -*) echo "mklib: Unknown option: " $1 ; exit 1;;
- *) break
+ '-h' | '--help')
+ usage;
+ exit 1
+ ;;
+ '-o')
+ shift 1;
+ LIBNAME=$1
+ ;;
+ '-major')
+ shift 1;
+ MAJOR=$1
+ ;;
+ '-minor')
+ shift 1;
+ MINOR=$1
+ ;;
+ '-patch')
+ shift 1;
+ PATCH=$1
+ ;;
+ '-linker')
+ shift 1;
+ LINK=$1
+ ;;
+ -l*)
+ DEPS="$DEPS $1"
+ ;;
+ -L*)
+ DEPS="$DEPS $1"
+ ;;
+ '-cplusplus')
+ CPLUSPLUS=1
+ ;;
+ '-static')
+ STATIC=1
+ ;;
+ '-install')
+ shift 1;
+ INSTALLDIR=$1
+ ;;
+ '-arch')
+ shift 1;
+ ARCH=$1
+ ;;
+ '-archopt')
+ shift 1;
+ ARCHOPT=$1
+ ;;
+ '-noprefix')
+ NOPREFIX=1
+ ;;
+ '-exports')
+ shift 1;
+ EXPORTS=$1
+ ;;
+ -*)
+ echo "mklib: Unknown option: " $1 ;
+ exit 1
+ ;;
+ *)
+ # This should be the first object file, stop parsing
+ break
esac
shift 1
done
OBJECTS=$@
+
if [ ${ARCH} = "auto" ] ; then
ARCH=`uname`
fi
'icc')
# Intel C compiler
+ # This should get merged into the Linux code, above, since this isn't
+ # really a different architecture.
LIBNAME="lib${LIBNAME}" # prefix with "lib"
if [ $STATIC = 1 ] ; then
ar rv ${LIBNAME} ${OBJECTS}
FINAL_LIBS="${LIBNAME}"
else
- LIBNAME="lib${LIBNAME}.so" # prefix with "lib"
+ LIBNAME="lib${LIBNAME}.so" # prefix with "lib", suffix with ".so"
echo "mklib: Making shared library for example arch: " ${LIBNAME}
ld -o ${LIBNAME} ${OBJECTS} ${DEPS}
FINAL_LIBS="${LIBNAME}"