Add libtool support
[openafs.git] / src / config / lwptool
1 #!/bin/sh
2
3 # This is a little helper script to build LWP static, and pthread shared and static
4 # objects from a single source file. We use libtool to do the heavy lifting for
5 # the pthreaded builds, but build the LWP objects here ourselves.
6
7 lwpcc=
8 mtcc=
9 linker=
10 ranlib=
11 mode=
12 object=
13 done=
14
15 while [ -z "$done" ] && [ $# -gt 0 ] ; do
16     case "$1" in
17     --lwpcc)
18         shift
19         lwpcc="$1"
20         shift
21         ;;
22     --mtcc)
23         shift
24         mtcc="$1"
25         shift
26         ;;
27     --linker)
28         shift
29         linker="$1"
30         shift
31         ;;
32     --mode)
33         shift
34         mode="$1"
35         shift
36         ;;
37     --ranlib)
38         shift
39         ranlib="$1"
40         shift
41         ;;
42     -o)
43         shift
44         object="$1"
45         shift
46         ;;
47     --)
48         shift;
49         done=yes
50         ;;
51     *)
52         echo "Usage: lwptool --mode compile|link -o <object> --lwpcc <lwp compiler> --mtcc <pthread compiler> -- ..." >&2;
53         exit 1;
54         ;;
55     esac
56 done
57
58 case "$mode" in
59 compile)
60     if [ -z "$object" ] || [ -z "$lwpcc" ] || \
61        [ -z "$mtcc" ] || [ -z "$mode" ] ; then
62         echo "Usage: lwptool --mode compile -o <object>" >&2;
63         echo "               --lwpcc <lwp compiler>" >&2;
64         echo "               --mtcc <pthread compiler> blah -- ..." >&2;
65         exit 1
66     fi
67
68     lwpobj=`echo $object | sed -e 's/.lo$/.o/'`
69     lwpobj=".lwp/$lwpobj"
70
71     mkdir .lwp 2>/dev/null
72     echo $lwpcc -o $lwpobj "$@"
73     $lwpcc -o $lwpobj "$@" || exit 1
74     echo $mtcc -o $object "$@"
75     $mtcc -o $object "$@" || exit 1
76     ;;
77 link)
78     if [ -z "$object" ] || [ -z "$linker" ] || \
79        [ -z "$ranlib" ] ; then
80         echo "Usage: l§wptool --mode linker -o <object>" >&2;
81         echo "               --linker <linker and options>" >&2;
82         echo "               --ranlib <ranlib>" >&2;
83         exit 1
84     fi
85
86     # This will go horribly wrong if we ever have objects with shell
87     # special characters in their names
88
89     objects=
90     while [ $# -gt 0 ] ; do
91        arg=$1;
92        realobject=`echo $arg | sed -e 's/\(.*\).lo/.lwp\/\1.o/'`
93        objects="$objects $realobject"
94        shift
95     done
96
97     rm -f $object 2>/dev/null
98     echo $linker $object $objects
99     $linker $object $objects
100     echo $ranlib $object
101     $ranlib $object
102     ;;
103 esac