1#! /bin/sh
2#
3# shobj-conf -- output a series of variable assignments to be substituted
4#		into a Makefile by configure which specify system-dependent
5#		information for creating shared objects that may be loaded
6#		into bash with `enable -f'
7#
8# usage: shobj-conf [-C compiler] -c host_cpu -o host_os -v host_vendor
9#
10# Chet Ramey
11# chet@po.cwru.edu
12
13# Copyright (C) 1996-2002 Free Software Foundation, Inc.
14#
15# This program is free software; you can redistribute it and/or modify
16# it under the terms of the GNU General Public License as published by
17# the Free Software Foundation; either version 2, or (at your option)
18# any later version.
19#
20# This program is distributed in the hope that it will be useful,
21# but WITHOUT ANY WARRANTY; without even the implied warranty of
22# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23# GNU General Public License for more details.
24#
25# You should have received a copy of the GNU General Public License
26# along with this program; if not, write to the Free Software
27# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA.
28
29#
30# defaults
31#
32SHOBJ_STATUS=supported
33SHLIB_STATUS=supported
34
35SHOBJ_CC=cc
36SHOBJ_CFLAGS=
37SHOBJ_LD=
38SHOBJ_LDFLAGS=
39SHOBJ_XLDFLAGS=
40SHOBJ_LIBS=
41
42SHLIB_XLDFLAGS=
43SHLIB_LIBS=
44SHLIB_LIBSUFF='so'
45
46SHLIB_LIBVERSION='$(SHLIB_LIBSUFF)'
47
48PROGNAME=`basename $0`
49USAGE="$PROGNAME [-C compiler] -c host_cpu -o host_os -v host_vendor"
50
51while [ $# -gt 0 ]; do
52	case "$1" in
53	-C)	shift; SHOBJ_CC="$1"; shift ;;
54	-c)	shift; host_cpu="$1"; shift ;;
55	-o)	shift; host_os="$1"; shift ;;
56	-v)	shift; host_vendor="$1"; shift ;;
57	*)	echo "$USAGE" >&2 ; exit 2;;
58	esac
59done
60
61case "${host_os}-${SHOBJ_CC}" in
62sunos4*-*gcc*)
63	SHOBJ_CFLAGS=-fpic
64	SHOBJ_LD=/usr/bin/ld
65	SHOBJ_LDFLAGS='-assert pure-text'
66
67	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)'
68	;;
69
70sunos4*)
71	SHOBJ_CFLAGS=-pic
72	SHOBJ_LD=/usr/bin/ld
73	SHOBJ_LDFLAGS='-assert pure-text'
74
75	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)'
76	;;
77
78sunos5*-*gcc*|solaris2*-*gcc*)
79	SHOBJ_CFLAGS=-fpic
80	SHOBJ_LD='${CC}'
81	# This line works for the Solaris linker in /usr/ccs/bin/ld
82	SHOBJ_LDFLAGS='-shared -Wl,-i -Wl,-h,$@'
83	# This line works for the GNU ld
84#	SHOBJ_LDFLAGS='-shared -Wl,-h,$@'
85
86#	SHLIB_XLDFLAGS='-R $(libdir)'
87	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
88	;;
89
90sunos5*|solaris2*)
91	SHOBJ_CFLAGS='-K pic'
92	SHOBJ_LD=/usr/ccs/bin/ld
93	SHOBJ_LDFLAGS='-G -dy -z text -i -h $@'
94
95#	SHLIB_XLDFLAGS='-R $(libdir)'
96	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
97	;;
98
99# All versions of Linux or the semi-mythical GNU Hurd.
100linux*|gnu*)
101	SHOBJ_CFLAGS=-fPIC
102	SHOBJ_LD='${CC}'
103	SHOBJ_LDFLAGS='-shared -Wl,-soname,$@'
104
105	SHLIB_XLDFLAGS='-Wl,-rpath,$(libdir) -Wl,-soname,`basename $@ $(SHLIB_MINOR)`'
106	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)'
107	;;
108
109freebsd2* | netbsd*)
110	SHOBJ_CFLAGS=-fpic
111	SHOBJ_LD=ld
112	SHOBJ_LDFLAGS='-x -Bshareable'
113
114	SHLIB_XLDFLAGS='-R$(libdir)'
115	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)'
116	;;
117
118# FreeBSD-3.x ELF
119freebsd[3-9]*|freebsdelf[3-9]*|freebsdaout[3-9]*)
120	SHOBJ_CFLAGS=-fpic
121	SHOBJ_LD='${CC}'
122
123	if [ -x /usr/bin/objformat ] && [ "`/usr/bin/objformat`" = "elf" ]; then
124		SHOBJ_LDFLAGS='-shared -Wl,-soname,$@'
125
126		SHLIB_XLDFLAGS='-Wl,-rpath,$(libdir)'
127		SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
128	else
129		SHOBJ_LDFLAGS='-shared'
130
131		SHLIB_XLDFLAGS='-R$(libdir)'
132		SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)'
133	fi
134	;;
135
136# Darwin/MacOS X
137darwin*|macosx*)
138	SHOBJ_STATUS=unsupported
139	SHLIB_STATUS=supported
140
141	SHOBJ_CFLAGS='-dynamic -fno-common'
142
143	SHOBJ_LD=/usr/bin/libtool
144
145	SHLIB_LIBVERSION='$(SHLIB_MAJOR)$(SHLIB_MINOR).$(SHLIB_LIBSUFF)'
146	SHLIB_LIBSUFF='dylib'
147
148	SHOBJ_LDFLAGS='-dynamic'
149	SHLIB_XLDFLAGS='-arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v'
150
151	SHLIB_LIBS='-lSystem'
152	;;
153
154openbsd*)
155	SHOBJ_CFLAGS=-fPIC
156	SHOBJ_LD='${CC}'
157	SHOBJ_LDFLAGS='-shared'
158
159	SHLIB_XLDFLAGS='-R$(libdir)'
160	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)'
161	;;
162
163bsdi2*)
164	SHOBJ_CC=shlicc2
165	SHOBJ_CFLAGS=
166	SHOBJ_LD=ld
167	SHOBJ_LDFLAGS=-r
168	SHOBJ_LIBS=-lc_s.2.1.0
169
170	# BSD/OS 2.x and 3.x `shared libraries' are too much of a pain in
171	# the ass -- they require changing {/usr/lib,etc}/shlib.map on
172	# each system, and the library creation process is byzantine
173	SHLIB_STATUS=unsupported
174	;;
175
176bsdi3*)
177	SHOBJ_CC=shlicc2
178	SHOBJ_CFLAGS=
179	SHOBJ_LD=ld
180	SHOBJ_LDFLAGS=-r
181	SHOBJ_LIBS=-lc_s.3.0.0
182
183	# BSD/OS 2.x and 3.x `shared libraries' are too much of a pain in
184	# the ass -- they require changing {/usr/lib,etc}/shlib.map on
185	# each system, and the library creation process is byzantine
186	SHLIB_STATUS=unsupported
187	;;
188
189bsdi4*)
190	# BSD/OS 4.x now supports ELF and SunOS-style dynamically-linked
191	# shared libraries.  gcc 2.x is the standard compiler, and the
192	# `normal' gcc options should work as they do in Linux.
193
194	SHOBJ_CFLAGS=-fPIC
195	SHOBJ_LD='${CC}'
196	SHOBJ_LDFLAGS='-shared -Wl,-soname,$@'
197
198	SHLIB_XLDFLAGS='-Wl,-soname,`basename $@ $(SHLIB_MINOR)`'
199	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)'
200	;;
201
202osf*-*gcc*)
203	# Fix to use gcc linker driver from bfischer@TechFak.Uni-Bielefeld.DE
204	SHOBJ_LD='${CC}'
205	SHOBJ_LDFLAGS='-shared -Wl,-soname,$@'
206
207	SHLIB_XLDFLAGS='-rpath $(libdir)'
208	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
209	;;
210
211osf*)
212	SHOBJ_LD=ld
213	SHOBJ_LDFLAGS='-shared -soname $@ -expect_unresolved "*"'
214
215	SHLIB_XLDFLAGS='-rpath $(libdir)'
216	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
217	;;
218
219aix4.[2-9]*-*gcc*)		# lightly tested by jik@cisco.com
220	SHOBJ_CFLAGS=-fpic
221	SHOBJ_LD='ld'
222	SHOBJ_LDFLAGS='-bdynamic -bnoentry -bexpall'
223	SHOBJ_XLDFLAGS='-G'
224
225	SHLIB_XLDFLAGS='-bM:SRE'
226	SHLIB_LIBS='-lcurses -lc'
227	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
228	;;
229
230aix4.[2-9]*)
231	SHOBJ_CFLAGS=-K
232	SHOBJ_LD='ld'
233	SHOBJ_LDFLAGS='-bdynamic -bnoentry -bexpall'
234	SHOBJ_XLDFLAGS='-G'
235
236	SHLIB_XLDFLAGS='-bM:SRE'
237	SHLIB_LIBS='-lcurses -lc'
238	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
239	;;
240
241#
242# THE FOLLOWING ARE UNTESTED -- and some may not support the dlopen interface
243#
244irix[56]*-*gcc*)
245	SHOBJ_CFLAGS='-fpic'
246	SHOBJ_LD='${CC}'
247	SHOBJ_LDFLAGS='-shared -Wl,-soname,$@'
248
249	SHLIB_XLDFLAGS='-Wl,-rpath,$(libdir)'
250	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
251	;;
252
253irix[56]*)
254	SHOBJ_CFLAGS='-K PIC'
255	SHOBJ_LD=ld
256#	SHOBJ_LDFLAGS='-call_shared -hidden_symbol -no_unresolved -soname $@'
257#	Change from David Kaelbling <drk@sgi.com>.  If you have problems,
258#	remove the `-no_unresolved'
259	SHOBJ_LDFLAGS='-shared -no_unresolved -soname $@'
260
261	SHLIB_XLDFLAGS='-rpath $(libdir)'
262	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
263	;;
264
265hpux9*-*gcc*)
266	# must use gcc; the bundled cc cannot compile PIC code
267	SHOBJ_CFLAGS='-fpic'
268	SHOBJ_LD='${CC}'
269	SHOBJ_LDFLAGS='-shared -Wl,-b -Wl,+s'
270
271	SHLIB_XLDFLAGS='-Wl,+b,$(libdir)'
272	SHLIB_LIBSUFF='sl'
273	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
274	;;
275
276hpux9*)
277	SHOBJ_STATUS=unsupported
278	SHLIB_STATUS=unsupported
279
280	# If you are using the HP ANSI C compiler, you can uncomment and use
281	# this code (I have not tested it)
282#	SHOBJ_STATUS=supported
283#	SHLIB_STATUS=supported
284#
285#	SHOBJ_CFLAGS='+z'
286#	SHOBJ_LD='ld'
287#	SHOBJ_LDFLAGS='-b +s'
288#
289#	SHLIB_XLDFLAGS='+b $(libdir)'
290#	SHLIB_LIBSUFF='sl'
291#	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'	
292
293	;;
294
295hpux10*-*gcc*)
296	# must use gcc; the bundled cc cannot compile PIC code
297	SHOBJ_CFLAGS='-fpic'
298	SHOBJ_LD='${CC}'
299	SHOBJ_LDFLAGS='-shared -Wl,-b -Wl,+s'
300
301	SHLIB_XLDFLAGS='-Wl,+h,$@ -Wl,+b,$(libdir)'
302	SHLIB_LIBSUFF='sl'
303	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
304	;;
305
306hpux10*)
307	SHOBJ_STATUS=unsupported
308	SHLIB_STATUS=unsupported
309
310	# If you are using the HP ANSI C compiler, you can uncomment and use
311	# this code (I have not tested it)
312#	SHOBJ_STATUS=supported
313#	SHLIB_STATUS=supported
314#
315#	SHOBJ_CFLAGS='+z'
316#	SHOBJ_LD='ld'
317#	SHOBJ_LDFLAGS='-b +s +h $@'
318#
319#	SHLIB_XLDFLAGS='+b $(libdir)'
320#	SHLIB_LIBSUFF='sl'
321#	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'	
322
323	;;
324
325hpux11*-*gcc*)
326	# must use gcc; the bundled cc cannot compile PIC code
327	SHOBJ_CFLAGS='-fpic'
328	SHOBJ_LD='${CC}'
329#	SHOBJ_LDFLAGS='-shared -Wl,-b -Wl,-B,symbolic -Wl,+s -Wl,+std -Wl,+h,$@'
330	SHOBJ_LDFLAGS='-shared -fpic -Wl,-b -Wl,+s -Wl,+h,$@'
331
332	SHLIB_XLDFLAGS='-Wl,+b,$(libdir)'
333	SHLIB_LIBSUFF='sl'
334	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
335	;;
336
337hpux11*)
338	SHOBJ_STATUS=unsupported
339	SHLIB_STATUS=unsupported
340
341	# If you are using the HP ANSI C compiler, you can uncomment and use
342	# this code (I have not tested it)
343#	SHOBJ_STATUS=supported
344#	SHLIB_STATUS=supported
345#
346#	SHOBJ_CFLAGS='+z'
347#	SHOBJ_LD='ld'
348#	SHOBJ_LDFLAGS='-b +s +h $@'
349#
350#	SHLIB_XLDFLAGS='+b $(libdir)'
351#	SHLIB_LIBSUFF='sl'
352#	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'	
353
354	;;
355
356sysv4*-*gcc*)
357	SHOBJ_CFLAGS=-shared
358	SHOBJ_LDFLAGS='-shared -h $@'
359	SHOBJ_LD='${CC}'
360
361	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
362	;;
363
364sysv4*)
365	SHOBJ_CFLAGS='-K PIC'
366	SHOBJ_LD=ld
367	SHOBJ_LDFLAGS='-dy -z text -G -h $@'
368
369	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
370	;;
371
372sco3.2v5*-*gcc*)
373	SHOBJ_CFLAGS='-fpic'		# DEFAULTS TO ELF
374	SHOBJ_LD='${CC}'
375	SHOBJ_LDFLAGS='-shared'
376
377	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
378	;;
379
380sco3.2v5*)
381	SHOBJ_CFLAGS='-K pic -b elf'
382	SHOBJ_LD=ld
383	SHOBJ_LDFLAGS='-G -b elf -dy -z text -h $@'
384
385	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
386	;;
387
388sysv5uw7*-*gcc*)
389	SHOBJ_CFLAGS='-fpic'
390	SHOBJ_LD='${CC}'
391	SHOBJ_LDFLAGS='-shared'
392
393	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
394	;;
395
396sysv5uw7*)
397	SHOBJ_CFLAGS='-K PIC'
398	SHOBJ_LD=ld
399	SHOBJ_LDFLAGS='-G -dy -z text -h $@'
400
401	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
402	;;
403	
404dgux*-*gcc*)
405	SHOBJ_CFLAGS=-fpic
406	SHOBJ_LD='${CC}'
407	SHOBJ_LDFLAGS='-shared'
408
409	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
410	;;
411
412dgux*)
413	SHOBJ_CFLAGS='-K pic'
414	SHOBJ_LD=ld
415	SHOBJ_LDFLAGS='-G -dy -h $@'
416
417	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
418	;;
419
420msdos*)
421	SHOBJ_STATUS=unsupported
422	SHLIB_STATUS=unsupported
423	;;
424
425#
426# Rely on correct gcc configuration for everything else
427#
428*-*gcc*)
429	SHOBJ_CFLAGS=-fpic
430	SHOBJ_LD='${CC}'
431	SHOBJ_LDFLAGS='-shared'
432
433	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
434	;;
435
436*)
437	SHOBJ_STATUS=unsupported
438	SHLIB_STATUS=unsupported
439	;;
440
441esac
442
443echo SHOBJ_CC=\'"$SHOBJ_CC"\'
444echo SHOBJ_CFLAGS=\'"$SHOBJ_CFLAGS"\'
445echo SHOBJ_LD=\'"$SHOBJ_LD"\'
446echo SHOBJ_LDFLAGS=\'"$SHOBJ_LDFLAGS"\'
447echo SHOBJ_XLDFLAGS=\'"$SHOBJ_XLDFLAGS"\'
448echo SHOBJ_LIBS=\'"$SHOBJ_LIBS"\'
449
450echo SHLIB_XLDFLAGS=\'"$SHLIB_XLDFLAGS"\'
451echo SHLIB_LIBS=\'"$SHLIB_LIBS"\'
452echo SHLIB_LIBSUFF=\'"$SHLIB_LIBSUFF"\'
453echo SHLIB_LIBVERSION=\'"$SHLIB_LIBVERSION"\'
454
455echo SHOBJ_STATUS=\'"$SHOBJ_STATUS"\'
456echo SHLIB_STATUS=\'"$SHLIB_STATUS"\'
457
458exit 0
459