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