shobj-conf revision 136644
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*-*|k*bsd*-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='-fno-common'
142
143	SHOBJ_LD='${CC}'
144
145	SHLIB_LIBVERSION='$(SHLIB_MAJOR)$(SHLIB_MINOR).$(SHLIB_LIBSUFF)'
146	SHLIB_LIBSUFF='dylib'
147
148	case "${host_os}" in
149	darwin7*)	SHOBJ_LDFLAGS=''
150			SHLIB_XLDFLAGS='-dynamiclib -arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v'
151			;;
152	*)		SHOBJ_LDFLAGS='-dynamic'
153			SHLIB_XLDFLAGS='-arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v'
154			;;
155	esac
156
157	SHLIB_LIBS='-lncurses'	# see if -lcurses works on MacOS X 10.1 
158	;;
159
160openbsd*)
161	SHOBJ_CFLAGS=-fPIC
162	SHOBJ_LD='${CC}'
163	SHOBJ_LDFLAGS='-shared'
164
165	SHLIB_XLDFLAGS='-R$(libdir)'
166	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)'
167	;;
168
169bsdi2*)
170	SHOBJ_CC=shlicc2
171	SHOBJ_CFLAGS=
172	SHOBJ_LD=ld
173	SHOBJ_LDFLAGS=-r
174	SHOBJ_LIBS=-lc_s.2.1.0
175
176	# BSD/OS 2.x and 3.x `shared libraries' are too much of a pain in
177	# the ass -- they require changing {/usr/lib,etc}/shlib.map on
178	# each system, and the library creation process is byzantine
179	SHLIB_STATUS=unsupported
180	;;
181
182bsdi3*)
183	SHOBJ_CC=shlicc2
184	SHOBJ_CFLAGS=
185	SHOBJ_LD=ld
186	SHOBJ_LDFLAGS=-r
187	SHOBJ_LIBS=-lc_s.3.0.0
188
189	# BSD/OS 2.x and 3.x `shared libraries' are too much of a pain in
190	# the ass -- they require changing {/usr/lib,etc}/shlib.map on
191	# each system, and the library creation process is byzantine
192	SHLIB_STATUS=unsupported
193	;;
194
195bsdi4*)
196	# BSD/OS 4.x now supports ELF and SunOS-style dynamically-linked
197	# shared libraries.  gcc 2.x is the standard compiler, and the
198	# `normal' gcc options should work as they do in Linux.
199
200	SHOBJ_CFLAGS=-fPIC
201	SHOBJ_LD='${CC}'
202	SHOBJ_LDFLAGS='-shared -Wl,-soname,$@'
203
204	SHLIB_XLDFLAGS='-Wl,-soname,`basename $@ $(SHLIB_MINOR)`'
205	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)'
206	;;
207
208osf*-*gcc*)
209	# Fix to use gcc linker driver from bfischer@TechFak.Uni-Bielefeld.DE
210	SHOBJ_LD='${CC}'
211	SHOBJ_LDFLAGS='-shared -Wl,-soname,$@'
212
213	SHLIB_XLDFLAGS='-rpath $(libdir)'
214	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
215	;;
216
217osf*)
218	SHOBJ_LD=ld
219	SHOBJ_LDFLAGS='-shared -soname $@ -expect_unresolved "*"'
220
221	SHLIB_XLDFLAGS='-rpath $(libdir)'
222	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
223	;;
224
225aix4.[2-9]*-*gcc*)		# lightly tested by jik@cisco.com
226	SHOBJ_CFLAGS=-fpic
227	SHOBJ_LD='ld'
228	SHOBJ_LDFLAGS='-bdynamic -bnoentry -bexpall'
229	SHOBJ_XLDFLAGS='-G'
230
231	SHLIB_XLDFLAGS='-bM:SRE'
232	SHLIB_LIBS='-lcurses -lc'
233	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
234	;;
235
236aix4.[2-9]*)
237	SHOBJ_CFLAGS=-K
238	SHOBJ_LD='ld'
239	SHOBJ_LDFLAGS='-bdynamic -bnoentry -bexpall'
240	SHOBJ_XLDFLAGS='-G'
241
242	SHLIB_XLDFLAGS='-bM:SRE'
243	SHLIB_LIBS='-lcurses -lc'
244	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
245	;;
246
247#
248# THE FOLLOWING ARE UNTESTED -- and some may not support the dlopen interface
249#
250irix[56]*-*gcc*)
251	SHOBJ_CFLAGS='-fpic'
252	SHOBJ_LD='${CC}'
253	SHOBJ_LDFLAGS='-shared -Wl,-soname,$@'
254
255	SHLIB_XLDFLAGS='-Wl,-rpath,$(libdir)'
256	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
257	;;
258
259irix[56]*)
260	SHOBJ_CFLAGS='-K PIC'
261	SHOBJ_LD=ld
262#	SHOBJ_LDFLAGS='-call_shared -hidden_symbol -no_unresolved -soname $@'
263#	Change from David Kaelbling <drk@sgi.com>.  If you have problems,
264#	remove the `-no_unresolved'
265	SHOBJ_LDFLAGS='-shared -no_unresolved -soname $@'
266
267	SHLIB_XLDFLAGS='-rpath $(libdir)'
268	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
269	;;
270
271hpux9*-*gcc*)
272	# must use gcc; the bundled cc cannot compile PIC code
273	SHOBJ_CFLAGS='-fpic'
274	SHOBJ_LD='${CC}'
275	SHOBJ_LDFLAGS='-shared -Wl,-b -Wl,+s'
276
277	SHLIB_XLDFLAGS='-Wl,+b,$(libdir)'
278	SHLIB_LIBSUFF='sl'
279	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
280	;;
281
282hpux9*)
283	SHOBJ_STATUS=unsupported
284	SHLIB_STATUS=unsupported
285
286	# If you are using the HP ANSI C compiler, you can uncomment and use
287	# this code (I have not tested it)
288#	SHOBJ_STATUS=supported
289#	SHLIB_STATUS=supported
290#
291#	SHOBJ_CFLAGS='+z'
292#	SHOBJ_LD='ld'
293#	SHOBJ_LDFLAGS='-b +s'
294#
295#	SHLIB_XLDFLAGS='+b $(libdir)'
296#	SHLIB_LIBSUFF='sl'
297#	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'	
298
299	;;
300
301hpux10*-*gcc*)
302	# must use gcc; the bundled cc cannot compile PIC code
303	SHOBJ_CFLAGS='-fpic'
304	SHOBJ_LD='${CC}'
305	# if you have problems linking here, moving the `-Wl,+h,$@' from
306	# SHLIB_XLDFLAGS to SHOBJ_LDFLAGS has been reported to work
307	SHOBJ_LDFLAGS='-shared -Wl,-b -Wl,+s'
308
309	SHLIB_XLDFLAGS='-Wl,+h,$@ -Wl,+b,$(libdir)'
310	SHLIB_LIBSUFF='sl'
311	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
312	;;
313
314hpux10*)
315	SHOBJ_STATUS=unsupported
316	SHLIB_STATUS=unsupported
317
318	# If you are using the HP ANSI C compiler, you can uncomment and use
319	# this code (I have not tested it)
320#	SHOBJ_STATUS=supported
321#	SHLIB_STATUS=supported
322#
323#	SHOBJ_CFLAGS='+z'
324#	SHOBJ_LD='ld'
325#	SHOBJ_LDFLAGS='-b +s +h $@'
326#
327#	SHLIB_XLDFLAGS='+b $(libdir)'
328#	SHLIB_LIBSUFF='sl'
329#	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'	
330
331	;;
332
333hpux11*-*gcc*)
334	# must use gcc; the bundled cc cannot compile PIC code
335	SHOBJ_CFLAGS='-fpic'
336	SHOBJ_LD='${CC}'
337#	SHOBJ_LDFLAGS='-shared -Wl,-b -Wl,-B,symbolic -Wl,+s -Wl,+std -Wl,+h,$@'
338	SHOBJ_LDFLAGS='-shared -fpic -Wl,-b -Wl,+s -Wl,+h,$@'
339
340	SHLIB_XLDFLAGS='-Wl,+b,$(libdir)'
341	SHLIB_LIBSUFF='sl'
342	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
343	;;
344
345hpux11*)
346	SHOBJ_STATUS=unsupported
347	SHLIB_STATUS=unsupported
348
349	# If you are using the HP ANSI C compiler, you can uncomment and use
350	# this code (I have not tested it)
351#	SHOBJ_STATUS=supported
352#	SHLIB_STATUS=supported
353#
354#	SHOBJ_CFLAGS='+z'
355#	SHOBJ_LD='ld'
356#	SHOBJ_LDFLAGS='-b +s +h $@'
357#
358#	SHLIB_XLDFLAGS='+b $(libdir)'
359#	SHLIB_LIBSUFF='sl'
360#	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'	
361
362	;;
363
364sysv4*-*gcc*)
365	SHOBJ_CFLAGS=-shared
366	SHOBJ_LDFLAGS='-shared -h $@'
367	SHOBJ_LD='${CC}'
368
369	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
370	;;
371
372sysv4*)
373	SHOBJ_CFLAGS='-K PIC'
374	SHOBJ_LD=ld
375	SHOBJ_LDFLAGS='-dy -z text -G -h $@'
376
377	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
378	;;
379
380sco3.2v5*-*gcc*)
381	SHOBJ_CFLAGS='-fpic'		# DEFAULTS TO ELF
382	SHOBJ_LD='${CC}'
383	SHOBJ_LDFLAGS='-shared'
384
385	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
386	;;
387
388sco3.2v5*)
389	SHOBJ_CFLAGS='-K pic -b elf'
390	SHOBJ_LD=ld
391	SHOBJ_LDFLAGS='-G -b elf -dy -z text -h $@'
392
393	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
394	;;
395
396sysv5uw7*-*gcc*)
397	SHOBJ_CFLAGS='-fpic'
398	SHOBJ_LD='${CC}'
399	SHOBJ_LDFLAGS='-shared'
400
401	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
402	;;
403
404sysv5uw7*)
405	SHOBJ_CFLAGS='-K PIC'
406	SHOBJ_LD=ld
407	SHOBJ_LDFLAGS='-G -dy -z text -h $@'
408
409	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
410	;;
411	
412dgux*-*gcc*)
413	SHOBJ_CFLAGS=-fpic
414	SHOBJ_LD='${CC}'
415	SHOBJ_LDFLAGS='-shared'
416
417	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
418	;;
419
420dgux*)
421	SHOBJ_CFLAGS='-K pic'
422	SHOBJ_LD=ld
423	SHOBJ_LDFLAGS='-G -dy -h $@'
424
425	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
426	;;
427
428msdos*)
429	SHOBJ_STATUS=unsupported
430	SHLIB_STATUS=unsupported
431	;;
432
433#
434# Rely on correct gcc configuration for everything else
435#
436*-*gcc*)
437	SHOBJ_CFLAGS=-fpic
438	SHOBJ_LD='${CC}'
439	SHOBJ_LDFLAGS='-shared'
440
441	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
442	;;
443
444*)
445	SHOBJ_STATUS=unsupported
446	SHLIB_STATUS=unsupported
447	;;
448
449esac
450
451echo SHOBJ_CC=\'"$SHOBJ_CC"\'
452echo SHOBJ_CFLAGS=\'"$SHOBJ_CFLAGS"\'
453echo SHOBJ_LD=\'"$SHOBJ_LD"\'
454echo SHOBJ_LDFLAGS=\'"$SHOBJ_LDFLAGS"\'
455echo SHOBJ_XLDFLAGS=\'"$SHOBJ_XLDFLAGS"\'
456echo SHOBJ_LIBS=\'"$SHOBJ_LIBS"\'
457
458echo SHLIB_XLDFLAGS=\'"$SHLIB_XLDFLAGS"\'
459echo SHLIB_LIBS=\'"$SHLIB_LIBS"\'
460echo SHLIB_LIBSUFF=\'"$SHLIB_LIBSUFF"\'
461echo SHLIB_LIBVERSION=\'"$SHLIB_LIBVERSION"\'
462
463echo SHOBJ_STATUS=\'"$SHOBJ_STATUS"\'
464echo SHLIB_STATUS=\'"$SHLIB_STATUS"\'
465
466exit 0
467