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= 44 45SHLIB_DOT='.' 46SHLIB_LIBPREF='lib' 47SHLIB_LIBSUFF='so' 48 49SHLIB_LIBVERSION='$(SHLIB_LIBSUFF)' 50SHLIB_DLLVERSION='$(SHLIB_MAJOR)' 51 52PROGNAME=`basename $0` 53USAGE="$PROGNAME [-C compiler] -c host_cpu -o host_os -v host_vendor" 54 55while [ $# -gt 0 ]; do 56 case "$1" in 57 -C) shift; SHOBJ_CC="$1"; shift ;; 58 -c) shift; host_cpu="$1"; shift ;; 59 -o) shift; host_os="$1"; shift ;; 60 -v) shift; host_vendor="$1"; shift ;; 61 *) echo "$USAGE" >&2 ; exit 2;; 62 esac 63done 64 65case "${host_os}-${SHOBJ_CC}" in 66sunos4*-*gcc*) 67 SHOBJ_CFLAGS=-fpic 68 SHOBJ_LD=/usr/bin/ld 69 SHOBJ_LDFLAGS='-assert pure-text' 70 71 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' 72 ;; 73 74sunos4*) 75 SHOBJ_CFLAGS=-pic 76 SHOBJ_LD=/usr/bin/ld 77 SHOBJ_LDFLAGS='-assert pure-text' 78 79 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' 80 ;; 81 82sunos5*-*gcc*|solaris2*-*gcc*) 83 SHOBJ_CFLAGS=-fpic 84 SHOBJ_LD='${CC}' 85 ld_used=`gcc -print-prog-name=ld` 86 if ${ld_used} -V 2>&1 | grep GNU >/dev/null 2>&1; then 87 # This line works for the GNU ld 88 SHOBJ_LDFLAGS='-shared -Wl,-h,$@' 89 else 90 # This line works for the Solaris linker in /usr/ccs/bin/ld 91 SHOBJ_LDFLAGS='-shared -Wl,-i -Wl,-h,$@' 92 fi 93 94# SHLIB_XLDFLAGS='-R $(libdir)' 95 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' 96 ;; 97 98sunos5*|solaris2*) 99 SHOBJ_CFLAGS='-K pic' 100 SHOBJ_LD=/usr/ccs/bin/ld 101 SHOBJ_LDFLAGS='-G -dy -z text -i -h $@' 102 103# SHLIB_XLDFLAGS='-R $(libdir)' 104 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' 105 ;; 106 107# All versions of Linux or the semi-mythical GNU Hurd. 108linux*-*|gnu*-*|k*bsd*-gnu-*) 109 SHOBJ_CFLAGS=-fPIC 110 SHOBJ_LD='${CC}' 111 SHOBJ_LDFLAGS='-shared -Wl,-soname,$@' 112 113 SHLIB_XLDFLAGS='-Wl,-rpath,$(libdir) -Wl,-soname,`basename $@ $(SHLIB_MINOR)`' 114 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' 115 ;; 116 117freebsd2* | netbsd*) 118 SHOBJ_CFLAGS=-fpic 119 SHOBJ_LD=ld 120 SHOBJ_LDFLAGS='-x -Bshareable' 121 122 SHLIB_XLDFLAGS='-R$(libdir)' 123 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' 124 ;; 125 126# FreeBSD-3.x ELF 127freebsd[3-9]*|freebsdelf[3-9]*|freebsdaout[3-9]*|dragonfly*) 128 SHOBJ_CFLAGS=-fpic 129 SHOBJ_LD='${CC}' 130 131 if [ -x /usr/bin/objformat ] && [ "`/usr/bin/objformat`" = "elf" ]; then 132 SHOBJ_LDFLAGS='-shared -Wl,-soname,$@' 133 134 SHLIB_XLDFLAGS='-Wl,-rpath,$(libdir)' 135 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' 136 else 137 SHOBJ_LDFLAGS='-shared' 138 139 SHLIB_XLDFLAGS='-R$(libdir)' 140 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' 141 fi 142 ;; 143 144# Darwin/MacOS X 145darwin*|macosx*) 146 SHOBJ_STATUS=unsupported 147 SHLIB_STATUS=supported 148 149 SHOBJ_CFLAGS='-fno-common' 150 151 SHOBJ_LD='${CC}' 152 153 SHLIB_LIBVERSION='$(SHLIB_MAJOR)$(SHLIB_MINOR).$(SHLIB_LIBSUFF)' 154 SHLIB_LIBSUFF='dylib' 155 156 case "${host_os}" in 157 darwin[78]*) SHOBJ_LDFLAGS='' 158 SHLIB_XLDFLAGS='-dynamiclib -arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v' 159 ;; 160 *) SHOBJ_LDFLAGS='-dynamic' 161 SHLIB_XLDFLAGS='-arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v' 162 ;; 163 esac 164 165 SHLIB_LIBS='-lncurses' # see if -lcurses works on MacOS X 10.1 166 ;; 167 168openbsd*) 169 SHOBJ_CFLAGS=-fPIC 170 SHOBJ_LD='${CC}' 171 SHOBJ_LDFLAGS='-shared' 172 173 SHLIB_XLDFLAGS='-R$(libdir)' 174 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' 175 ;; 176 177bsdi2*) 178 SHOBJ_CC=shlicc2 179 SHOBJ_CFLAGS= 180 SHOBJ_LD=ld 181 SHOBJ_LDFLAGS=-r 182 SHOBJ_LIBS=-lc_s.2.1.0 183 184 # BSD/OS 2.x and 3.x `shared libraries' are too much of a pain in 185 # the ass -- they require changing {/usr/lib,etc}/shlib.map on 186 # each system, and the library creation process is byzantine 187 SHLIB_STATUS=unsupported 188 ;; 189 190bsdi3*) 191 SHOBJ_CC=shlicc2 192 SHOBJ_CFLAGS= 193 SHOBJ_LD=ld 194 SHOBJ_LDFLAGS=-r 195 SHOBJ_LIBS=-lc_s.3.0.0 196 197 # BSD/OS 2.x and 3.x `shared libraries' are too much of a pain in 198 # the ass -- they require changing {/usr/lib,etc}/shlib.map on 199 # each system, and the library creation process is byzantine 200 SHLIB_STATUS=unsupported 201 ;; 202 203bsdi4*) 204 # BSD/OS 4.x now supports ELF and SunOS-style dynamically-linked 205 # shared libraries. gcc 2.x is the standard compiler, and the 206 # `normal' gcc options should work as they do in Linux. 207 208 SHOBJ_CFLAGS=-fPIC 209 SHOBJ_LD='${CC}' 210 SHOBJ_LDFLAGS='-shared -Wl,-soname,$@' 211 212 SHLIB_XLDFLAGS='-Wl,-soname,`basename $@ $(SHLIB_MINOR)`' 213 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' 214 ;; 215 216osf*-*gcc*) 217 # Fix to use gcc linker driver from bfischer@TechFak.Uni-Bielefeld.DE 218 SHOBJ_LD='${CC}' 219 SHOBJ_LDFLAGS='-shared -Wl,-soname,$@' 220 221 SHLIB_XLDFLAGS='-rpath $(libdir)' 222 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' 223 ;; 224 225osf*) 226 SHOBJ_LD=ld 227 SHOBJ_LDFLAGS='-shared -soname $@ -expect_unresolved "*"' 228 229 SHLIB_XLDFLAGS='-rpath $(libdir)' 230 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' 231 ;; 232 233aix4.[2-9]*-*gcc*) # lightly tested by jik@cisco.com 234 SHOBJ_CFLAGS=-fpic 235 SHOBJ_LD='ld' 236 SHOBJ_LDFLAGS='-bdynamic -bnoentry -bexpall' 237 SHOBJ_XLDFLAGS='-G' 238 239 SHLIB_XLDFLAGS='-bM:SRE' 240 SHLIB_LIBS='-lcurses -lc' 241 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' 242 ;; 243 244aix4.[2-9]*) 245 SHOBJ_CFLAGS=-K 246 SHOBJ_LD='ld' 247 SHOBJ_LDFLAGS='-bdynamic -bnoentry -bexpall' 248 SHOBJ_XLDFLAGS='-G' 249 250 SHLIB_XLDFLAGS='-bM:SRE' 251 SHLIB_LIBS='-lcurses -lc' 252 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' 253 ;; 254 255# 256# THE FOLLOWING ARE UNTESTED -- and some may not support the dlopen interface 257# 258irix[56]*-*gcc*) 259 SHOBJ_CFLAGS='-fpic' 260 SHOBJ_LD='${CC}' 261 SHOBJ_LDFLAGS='-shared -Wl,-soname,$@' 262 263 SHLIB_XLDFLAGS='-Wl,-rpath,$(libdir)' 264 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' 265 ;; 266 267irix[56]*) 268 SHOBJ_CFLAGS='-K PIC' 269 SHOBJ_LD=ld 270# SHOBJ_LDFLAGS='-call_shared -hidden_symbol -no_unresolved -soname $@' 271# Change from David Kaelbling <drk@sgi.com>. If you have problems, 272# remove the `-no_unresolved' 273 SHOBJ_LDFLAGS='-shared -no_unresolved -soname $@' 274 275 SHLIB_XLDFLAGS='-rpath $(libdir)' 276 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' 277 ;; 278 279hpux9*-*gcc*) 280 # must use gcc; the bundled cc cannot compile PIC code 281 SHOBJ_CFLAGS='-fpic' 282 SHOBJ_LD='${CC}' 283 SHOBJ_LDFLAGS='-shared -Wl,-b -Wl,+s' 284 285 SHLIB_XLDFLAGS='-Wl,+b,$(libdir)' 286 SHLIB_LIBSUFF='sl' 287 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' 288 ;; 289 290hpux9*) 291 SHOBJ_STATUS=unsupported 292 SHLIB_STATUS=unsupported 293 294 # If you are using the HP ANSI C compiler, you can uncomment and use 295 # this code (I have not tested it) 296# SHOBJ_STATUS=supported 297# SHLIB_STATUS=supported 298# 299# SHOBJ_CFLAGS='+z' 300# SHOBJ_LD='ld' 301# SHOBJ_LDFLAGS='-b +s' 302# 303# SHLIB_XLDFLAGS='+b $(libdir)' 304# SHLIB_LIBSUFF='sl' 305# SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' 306 307 ;; 308 309hpux10*-*gcc*) 310 # must use gcc; the bundled cc cannot compile PIC code 311 SHOBJ_CFLAGS='-fpic' 312 SHOBJ_LD='${CC}' 313 # if you have problems linking here, moving the `-Wl,+h,$@' from 314 # SHLIB_XLDFLAGS to SHOBJ_LDFLAGS has been reported to work 315 SHOBJ_LDFLAGS='-shared -Wl,-b -Wl,+s' 316 317 SHLIB_XLDFLAGS='-Wl,+h,$@ -Wl,+b,$(libdir)' 318 SHLIB_LIBSUFF='sl' 319 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' 320 ;; 321 322hpux10*) 323 SHOBJ_STATUS=unsupported 324 SHLIB_STATUS=unsupported 325 326 # If you are using the HP ANSI C compiler, you can uncomment and use 327 # this code (I have not tested it) 328# SHOBJ_STATUS=supported 329# SHLIB_STATUS=supported 330# 331# SHOBJ_CFLAGS='+z' 332# SHOBJ_LD='ld' 333# SHOBJ_LDFLAGS='-b +s +h $@' 334# 335# SHLIB_XLDFLAGS='+b $(libdir)' 336# SHLIB_LIBSUFF='sl' 337# SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' 338 339 ;; 340 341hpux11*-*gcc*) 342 # must use gcc; the bundled cc cannot compile PIC code 343 SHOBJ_CFLAGS='-fpic' 344 SHOBJ_LD='${CC}' 345# SHOBJ_LDFLAGS='-shared -Wl,-b -Wl,-B,symbolic -Wl,+s -Wl,+std -Wl,+h,$@' 346 SHOBJ_LDFLAGS='-shared -fpic -Wl,-b -Wl,+s -Wl,+h,$@' 347 348 SHLIB_XLDFLAGS='-Wl,+b,$(libdir)' 349 SHLIB_LIBSUFF='sl' 350 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' 351 ;; 352 353hpux11*) 354 SHOBJ_STATUS=unsupported 355 SHLIB_STATUS=unsupported 356 357 # If you are using the HP ANSI C compiler, you can uncomment and use 358 # this code (I have not tested it) 359# SHOBJ_STATUS=supported 360# SHLIB_STATUS=supported 361# 362# SHOBJ_CFLAGS='+z' 363# SHOBJ_LD='ld' 364# SHOBJ_LDFLAGS='-b +s +h $@' 365# 366# SHLIB_XLDFLAGS='+b $(libdir)' 367# SHLIB_LIBSUFF='sl' 368# SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' 369 370 ;; 371 372sysv4*-*gcc*) 373 SHOBJ_CFLAGS=-shared 374 SHOBJ_LDFLAGS='-shared -h $@' 375 SHOBJ_LD='${CC}' 376 377 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' 378 ;; 379 380sysv4*) 381 SHOBJ_CFLAGS='-K PIC' 382 SHOBJ_LD=ld 383 SHOBJ_LDFLAGS='-dy -z text -G -h $@' 384 385 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' 386 ;; 387 388sco3.2v5*-*gcc*) 389 SHOBJ_CFLAGS='-fpic' # DEFAULTS TO ELF 390 SHOBJ_LD='${CC}' 391 SHOBJ_LDFLAGS='-shared' 392 393 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' 394 ;; 395 396sco3.2v5*) 397 SHOBJ_CFLAGS='-K pic -b elf' 398 SHOBJ_LD=ld 399 SHOBJ_LDFLAGS='-G -b elf -dy -z text -h $@' 400 401 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' 402 ;; 403 404sysv5uw7*-*gcc*) 405 SHOBJ_CFLAGS='-fpic' 406 SHOBJ_LD='${CC}' 407 SHOBJ_LDFLAGS='-shared' 408 409 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' 410 ;; 411 412sysv5uw7*) 413 SHOBJ_CFLAGS='-K PIC' 414 SHOBJ_LD=ld 415 SHOBJ_LDFLAGS='-G -dy -z text -h $@' 416 417 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' 418 ;; 419 420sysv5UnixWare*-*gcc*) 421 SHOBJ_CFLAGS=-fpic 422 SHOBJ_LD='${CC}' 423 SHOBJ_LDFLAGS='-shared' 424 425 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' 426 ;; 427 428sysv5UnixWare*) 429 SHOBJ_CFLAGS='-K PIC' 430 SHOBJ_LD=ld 431 SHOBJ_LDFLAGS='-G -dy -z text -h $@' 432 433 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' 434 ;; 435 436sysv5OpenUNIX*-*gcc*) 437 SHOBJ_CFLAGS=-fpic 438 SHOBJ_LD='${CC}' 439 SHOBJ_LDFLAGS='-shared' 440 441 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' 442 ;; 443 444sysv5OpenUNIX*) 445 SHOBJ_CFLAGS='-K PIC' 446 SHOBJ_LD=ld 447 SHOBJ_LDFLAGS='-G -dy -z text -h $@' 448 449 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' 450 ;; 451 452dgux*-*gcc*) 453 SHOBJ_CFLAGS=-fpic 454 SHOBJ_LD='${CC}' 455 SHOBJ_LDFLAGS='-shared' 456 457 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' 458 ;; 459 460dgux*) 461 SHOBJ_CFLAGS='-K pic' 462 SHOBJ_LD=ld 463 SHOBJ_LDFLAGS='-G -dy -h $@' 464 465 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' 466 ;; 467 468msdos*) 469 SHOBJ_STATUS=unsupported 470 SHLIB_STATUS=unsupported 471 ;; 472 473cygwin*) 474 SHOBJ_LD='$(CC)' 475 SHOBJ_LDFLAGS='-shared -Wl,--enable-auto-import -Wl,--enable-auto-image-base -Wl,--export-all -Wl,--out-implib=$(@).a' 476 SHLIB_LIBPREF='cyg' 477 SHLIB_LIBSUFF='dll' 478 SHLIB_LIBVERSION='$(SHLIB_DLLVERSION).$(SHLIB_LIBSUFF)' 479 SHLIB_LIBS='$(TERMCAP_LIB)' 480 481 SHLIB_DOT= 482 # For official cygwin releases, DLLVERSION will be defined in the 483 # environment of configure, and will be incremented any time the API 484 # changes in a non-backwards compatible manner. Otherwise, it is just 485 # SHLIB_MAJOR. 486 if [ -n "$DLLVERSION" ] ; then 487 SHLIB_DLLVERSION="$DLLVERSION" 488 fi 489 ;; 490 491# 492# Rely on correct gcc configuration for everything else 493# 494*-*gcc*) 495 SHOBJ_CFLAGS=-fpic 496 SHOBJ_LD='${CC}' 497 SHOBJ_LDFLAGS='-shared' 498 499 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' 500 ;; 501 502*) 503 SHOBJ_STATUS=unsupported 504 SHLIB_STATUS=unsupported 505 ;; 506 507esac 508 509echo SHOBJ_CC=\'"$SHOBJ_CC"\' 510echo SHOBJ_CFLAGS=\'"$SHOBJ_CFLAGS"\' 511echo SHOBJ_LD=\'"$SHOBJ_LD"\' 512echo SHOBJ_LDFLAGS=\'"$SHOBJ_LDFLAGS"\' 513echo SHOBJ_XLDFLAGS=\'"$SHOBJ_XLDFLAGS"\' 514echo SHOBJ_LIBS=\'"$SHOBJ_LIBS"\' 515 516echo SHLIB_XLDFLAGS=\'"$SHLIB_XLDFLAGS"\' 517echo SHLIB_LIBS=\'"$SHLIB_LIBS"\' 518 519echo SHLIB_DOT=\'"$SHLIB_DOT"\' 520 521echo SHLIB_LIBPREF=\'"$SHLIB_LIBPREF"\' 522echo SHLIB_LIBSUFF=\'"$SHLIB_LIBSUFF"\' 523 524echo SHLIB_LIBVERSION=\'"$SHLIB_LIBVERSION"\' 525echo SHLIB_DLLVERSION=\'"$SHLIB_DLLVERSION"\' 526 527echo SHOBJ_STATUS=\'"$SHOBJ_STATUS"\' 528echo SHLIB_STATUS=\'"$SHLIB_STATUS"\' 529 530exit 0 531