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# 14# defaults 15# 16SHOBJ_STATUS=supported 17SHLIB_STATUS=supported 18 19SHOBJ_CC=cc 20SHOBJ_CFLAGS= 21SHOBJ_LD= 22SHOBJ_LDFLAGS= 23SHOBJ_XLDFLAGS= 24SHOBJ_LIBS= 25 26SHLIB_XLDFLAGS= 27SHLIB_LIBS= 28SHLIB_LIBSUFF='so' 29 30SHLIB_LIBVERSION='$(SHLIB_LIBSUFF)' 31 32PROGNAME=`basename $0` 33USAGE="$PROGNAME [-C compiler] -c host_cpu -o host_os -v host_vendor" 34 35while [ $# -gt 0 ]; do 36 case "$1" in 37 -C) shift; SHOBJ_CC="$1"; shift ;; 38 -c) shift; host_cpu="$1"; shift ;; 39 -o) shift; host_os="$1"; shift ;; 40 -v) shift; host_vendor="$1"; shift ;; 41 *) echo "$USAGE" >&2 ; exit 2;; 42 esac 43done 44 45case "${host_os}-${SHOBJ_CC}" in 46sunos4*-gcc*) 47 SHOBJ_CFLAGS=-fpic 48 SHOBJ_LD=/usr/bin/ld 49 SHOBJ_LDFLAGS='-assert pure-text' 50 51 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' 52 ;; 53 54sunos4*) 55 SHOBJ_CFLAGS=-pic 56 SHOBJ_LD=/usr/bin/ld 57 SHOBJ_LDFLAGS='-assert pure-text' 58 59 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' 60 ;; 61 62sunos5*-gcc*|solaris2*-gcc*) 63 SHOBJ_CFLAGS=-fpic 64 SHOBJ_LD='${CC}' 65 SHOBJ_LDFLAGS='-shared -Wl,-i -Wl,-h,$@' 66 67# SHLIB_XLDFLAGS='-R $(libdir)' 68 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' 69 ;; 70 71sunos5*|solaris2*) 72 SHOBJ_CFLAGS='-K pic' 73 SHOBJ_LD=/usr/ccs/bin/ld 74 SHOBJ_LDFLAGS='-G -dy -z text -i -h $@' 75 76# SHLIB_XLDFLAGS='-R $(libdir)' 77 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' 78 ;; 79 80freebsd2* | netbsd* | openbsd*) 81 SHOBJ_CFLAGS=-fpic 82 SHOBJ_LD=ld 83 SHOBJ_LDFLAGS='-x -Bshareable' 84 85 SHLIB_XLDFLAGS='-R$(libdir)' 86 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' 87 ;; 88 89# FreeBSD-3.x can have either a.out or ELF object files 90#freebsd3*) 91# SHOBJ_CFLAGS=-fpic 92# SHOBJ_LD='${CC}' 93# SHOBJ_LDFLAGS='-shared' 94# 95# SHLIB_XLDFLAGS='-R$(libdir)' 96# SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' 97# ;; 98 99# FreeBSD-3.x ELF 100freebsd3*) 101 SHOBJ_CFLAGS=-fpic 102 SHOBJ_LD='${CC}' 103 104 if [ -x /usr/bin/objformat ] && [ "`/usr/bin/objformat`" = "elf" ]; then 105 SHOBJ_LDFLAGS='-shared -Wl,-soname,$@' 106 107 SHLIB_XLDFLAGS='-Wl,-rpath,$(libdir)' 108 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' 109 else 110 SHOBJ_LDFLAGS='-shared' 111 112 SHLIB_XLDFLAGS='-R$(libdir)' 113 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' 114 fi 115 ;; 116 117linux*) 118 SHOBJ_CFLAGS=-fPIC 119 SHOBJ_LD='${CC}' 120 SHOBJ_LDFLAGS='-shared -Wl,-soname,$@' 121 122 SHLIB_XLDFLAGS='-Wl,-rpath,$(libdir)' 123 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' 124 ;; 125 126bsdi2*) 127 SHOBJ_CC=shlicc2 128 SHOBJ_CFLAGS= 129 SHOBJ_LD=ld 130 SHOBJ_LDFLAGS=-r 131 SHOBJ_LIBS=-lc_s.2.1.0 132 133 # BSD/OS 2.x and 3.x `shared libraries' are too much of a pain in 134 # the ass -- they require changing {/usr/lib,etc}/shlib.map on 135 # each system, and the library creation process is byzantine 136 SHLIB_STATUS=unsupported 137 ;; 138 139bsdi3*) 140 SHOBJ_CC=shlicc2 141 SHOBJ_CFLAGS= 142 SHOBJ_LD=ld 143 SHOBJ_LDFLAGS=-r 144 SHOBJ_LIBS=-lc_s.3.0.0 145 146 # BSD/OS 2.x and 3.x `shared libraries' are too much of a pain in 147 # the ass -- they require changing {/usr/lib,etc}/shlib.map on 148 # each system, and the library creation process is byzantine 149 SHLIB_STATUS=unsupported 150 ;; 151 152bsdi4*) 153 # BSD/OS 4.x now supports ELF and SunOS-style dynamically-linked 154 # shared libraries. gcc 2.x is the standard compiler, and the 155 # `normal' gcc options should work as they do in Linux. 156 157 SHOBJ_CFLAGS=-fPIC 158 SHOBJ_LD='${CC}' 159 SHOBJ_LDFLAGS='-shared -Wl,-soname,$@' 160 161 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' 162 ;; 163 164osf*-gcc*) 165 # Fix to use gcc linker driver from bfischer@TechFak.Uni-Bielefeld.DE 166 SHOBJ_LD='${CC}' 167 SHOBJ_LDFLAGS='-shared -Wl,-soname,$@' 168 169 SHLIB_XLDFLAGS='-rpath $(libdir)' 170 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' 171 ;; 172 173osf*) 174 SHOBJ_LD=ld 175 SHOBJ_LDFLAGS='-shared -soname $@ -expect_unresolved "*"' 176 177 SHLIB_XLDFLAGS='-rpath $(libdir)' 178 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' 179 ;; 180 181aix4.[2-9]*-gcc*) # lightly tested by jik@cisco.com 182 SHOBJ_CFLAGS=-fpic 183 SHOBJ_LD='ld' 184 SHOBJ_LDFLAGS='-bdynamic -bnoentry -bexpall' 185 SHOBJ_XLDFLAGS='-G' 186 187 SHLIB_XLDFLAGS='-bM:SRE' 188 SHLIB_LIBS='-lcurses -lc' 189 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' 190 ;; 191 192aix4.[2-9]*) 193 SHOBJ_CFLAGS=-K 194 SHOBJ_LD='ld' 195 SHOBJ_LDFLAGS='-bdynamic -bnoentry -bexpall' 196 SHOBJ_XLDFLAGS='-G' 197 198 SHLIB_XLDFLAGS='-bM:SRE' 199 SHLIB_LIBS='-lcurses -lc' 200 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' 201 ;; 202 203# 204# THE FOLLOWING ARE UNTESTED -- and some may not support the dlopen interface 205# 206irix[56]*-gcc*) 207 SHOBJ_CFLAGS='-fpic' 208 SHOBJ_LD='${CC}' 209 SHOBJ_LDFLAGS='-shared -Wl,-soname,$@' 210 211 SHLIB_XLDFLAGS='-Wl,-rpath,$(libdir)' 212 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' 213 ;; 214 215irix[56]*) 216 SHOBJ_CFLAGS='-K PIC' 217 SHOBJ_LD=ld 218# SHOBJ_LDFLAGS='-call_shared -hidden_symbol -no_unresolved -soname $@' 219# Change from David Kaelbling <drk@sgi.com> 220 SHOBJ_LDFLAGS='-shared -no_unresolved -soname $@' 221 222 SHLIB_XLDFLAGS='-rpath $(libdir)' 223 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' 224 ;; 225 226hpux9*-gcc*) 227 # must use gcc; the bundled cc cannot compile PIC code 228 SHOBJ_CFLAGS='-fpic' 229 SHOBJ_LD='${CC}' 230 SHOBJ_LDFLAGS='-shared -Wl,-b -Wl,+s' 231 232 SHLIB_XLDFLAGS='-Wl,+b,$(libdir)' 233 SHLIB_LIBSUFF='sl' 234 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' 235 ;; 236 237hpux9*) 238 SHOBJ_STATUS=unsupported 239 SHLIB_STATUS=unsupported 240 ;; 241 242hpux10*-gcc*) 243 # must use gcc; the bundled cc cannot compile PIC code 244 SHOBJ_CFLAGS='-fpic' 245 SHOBJ_LD='${CC}' 246 SHOBJ_LDFLAGS='-shared -Wl,-b -Wl,+s' 247 248 SHLIB_XLDFLAGS='-Wl,+h,$@ -Wl,+b,$(libdir)' 249 SHLIB_LIBSUFF='sl' 250 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' 251 ;; 252 253hpux10*) 254 SHOBJ_STATUS=unsupported 255 SHLIB_STATUS=unsupported 256 ;; 257 258hpux11*-gcc*) 259 # must use gcc; the bundled cc cannot compile PIC code 260 SHOBJ_CFLAGS='-fpic' 261 SHOBJ_LD='${CC}' 262# SHOBJ_LDFLAGS='-shared -Wl,-b -Wl,-B,symbolic -Wl,+s -Wl,+std -Wl,+h,$@' 263 SHOBJ_LDFLAGS='-shared -Wl,-b -Wl,+s -Wl,+h,$@' 264 265 SHLIB_XLDFLAGS='-Wl,+b,$(libdir)' 266 SHLIB_LIBSUFF='sl' 267 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' 268 ;; 269 270hpux11*) 271 SHOBJ_STATUS=unsupported 272 SHLIB_STATUS=unsupported 273 ;; 274 275sysv4*-gcc*) 276 SHOBJ_CFLAGS=-shared 277 SHOBJ_LDFLAGS='-shared -h $@' 278 SHOBJ_LD='${CC}' 279 280 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' 281 ;; 282 283sysv4*) 284 SHOBJ_CFLAGS='-K PIC' 285 SHOBJ_LD=ld 286 SHOBJ_LDFLAGS='-dy -z text -G -h $@' 287 288 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' 289 ;; 290 291sco3.2v5*-gcc*) 292 SHOBJ_CFLAGS='-fpic' # DEFAULTS TO ELF 293 SHOBJ_LD='${CC}' 294 SHOBJ_LDFLAGS='-shared' 295 296 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' 297 ;; 298 299sco3.2v5*) 300 SHOBJ_CFLAGS='-K pic -b elf' 301 SHOBJ_LD=ld 302 SHOBJ_LDFLAGS='-G -b elf -dy -z text -h $@' 303 304 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' 305 ;; 306 307sysv5uw7*-gcc*) 308 SHOBJ_CFLAGS='-fpic' 309 SHOBJ_LD='${CC}' 310 SHOBJ_LDFLAGS='-shared' 311 312 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' 313 ;; 314 315sysv5uw7*) 316 SHOBJ_CFLAGS='-K PIC' 317 SHOBJ_LD=ld 318 SHOBJ_LDFLAGS='-G -dy -z text -h $@' 319 320 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' 321 ;; 322 323dgux*-gcc*) 324 SHOBJ_CFLAGS=-fpic 325 SHOBJ_LD='${CC}' 326 SHOBJ_LDFLAGS='-shared' 327 328 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' 329 ;; 330 331dgux*) 332 SHOBJ_CFLAGS='-K pic' 333 SHOBJ_LD=ld 334 SHOBJ_LDFLAGS='-G -dy -h $@' 335 336 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' 337 ;; 338 339msdos*) 340 SHOBJ_STATUS=unsupported 341 SHLIB_STATUS=unsupported 342 ;; 343 344# 345# Rely on correct gcc configuration for everything else 346# 347*-gcc*) 348 SHOBJ_CFLAGS=-fpic 349 SHOBJ_LD='${CC}' 350 SHOBJ_LDFLAGS='-shared' 351 352 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' 353 ;; 354 355*) 356 SHOBJ_STATUS=unsupported 357 SHLIB_STATUS=unsupported 358 ;; 359 360esac 361 362echo SHOBJ_CC=\'"$SHOBJ_CC"\' 363echo SHOBJ_CFLAGS=\'"$SHOBJ_CFLAGS"\' 364echo SHOBJ_LD=\'"$SHOBJ_LD"\' 365echo SHOBJ_LDFLAGS=\'"$SHOBJ_LDFLAGS"\' 366echo SHOBJ_XLDFLAGS=\'"$SHOBJ_XLDFLAGS"\' 367echo SHOBJ_LIBS=\'"$SHOBJ_LIBS"\' 368 369echo SHLIB_XLDFLAGS=\'"$SHLIB_XLDFLAGS"\' 370echo SHLIB_LIBS=\'"$SHLIB_LIBS"\' 371echo SHLIB_LIBSUFF=\'"$SHLIB_LIBSUFF"\' 372echo SHLIB_LIBVERSION=\'"$SHLIB_LIBVERSION"\' 373 374echo SHOBJ_STATUS=\'"$SHOBJ_STATUS"\' 375echo SHLIB_STATUS=\'"$SHLIB_STATUS"\' 376 377exit 0 378