]>
Commit | Line | Data |
---|---|---|
1 | #!/bin/sh | |
2 | # Configuration script for the PCI library | |
3 | # (c) 1998--2013 Martin Mares <mj@ucw.cz> | |
4 | ||
5 | LC_ALL=C | |
6 | export LC_ALL | |
7 | ||
8 | echo_n() { | |
9 | printf '%s' "$*" | |
10 | } | |
11 | ||
12 | if [ -z "$VERSION" ] ; then | |
13 | echo >&2 "Please run the configure script from the top-level Makefile" | |
14 | exit 1 | |
15 | fi | |
16 | ||
17 | echo_n "Configuring libpci for your system..." | |
18 | if [ -z "$HOST" ] ; then | |
19 | sys=`uname -s` | |
20 | rel=`uname -r` | |
21 | realsys="$sys" | |
22 | if [ "$sys" = "AIX" -a -x /usr/bin/oslevel -a -x /usr/sbin/lsattr ] | |
23 | then | |
24 | rel=`/usr/bin/oslevel` | |
25 | proc=`/usr/sbin/lsdev -C -c processor -S available -F name | head -1` | |
26 | cpu=`/usr/sbin/lsattr -F value -l $proc -a type | sed 's/_.*//'` | |
27 | else | |
28 | cpu=`uname -m | sed 's/^i.86-AT386/i386/;s/^i.86$/i386/;s/^sun4u$/sparc64/;s/^i86pc$/i386/;s/^BePC$/i386/;s/^BeMac$/powerpc/;s/^BeBox$/powerpc/'` | |
29 | fi | |
30 | if [ "$sys" = "DragonFly" ] | |
31 | then | |
32 | sys=freebsd | |
33 | fi | |
34 | if [ "$sys" = "GNU/kFreeBSD" ] | |
35 | then | |
36 | sys=kfreebsd | |
37 | fi | |
38 | if [ "$sys" = "GNU" ] | |
39 | then | |
40 | sys=gnu | |
41 | fi | |
42 | if [ "$sys" = "CYGWIN_NT-5.1" -o "$sys" = "CYGWIN_NT-6.0" ] | |
43 | then | |
44 | sys=cygwin | |
45 | fi | |
46 | HOST=${3:-$cpu-$sys} | |
47 | fi | |
48 | [ -n "$RELEASE" ] && rel="${RELEASE}" | |
49 | # CAVEAT: tr on Solaris is a bit weird and the extra [] is otherwise harmless. | |
50 | host=`echo $HOST | sed -e 's/^\([^-]*\)-\([^-]*\)-\([^-]*\)-\([^-]*\)$/\1-\3/' -e 's/^\([^-]*\)-\([^-]*\)-\([^-]*\)$/\1-\2/' -e 's/^\([^-]*\)-\([^-]*\)$/\1--\2/' | tr '[A-Z]' '[a-z]'` | |
51 | cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` | |
52 | sys=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` | |
53 | echo " $host $rel $cpu $sys" | |
54 | ||
55 | c=config.h | |
56 | m=config.mk | |
57 | echo >$c '#define PCI_CONFIG_H' | |
58 | echo >>$c "#define PCI_ARCH_`echo $cpu | tr '[a-z]' '[A-Z]'`" | |
59 | echo >>$c "#define PCI_OS_`echo $sys | tr '[a-z]' '[A-Z]'`" | |
60 | echo >$m 'WITH_LIBS=' | |
61 | ||
62 | echo_n "Looking for access methods..." | |
63 | LIBRESOLV=-lresolv | |
64 | LIBEXT=so | |
65 | EXEEXT= | |
66 | SYSINCLUDE=/usr/include | |
67 | LSPCIDIR=SBINDIR | |
68 | ||
69 | case $sys in | |
70 | linux*) | |
71 | echo_n " sysfs proc mem-ports ecam" | |
72 | echo >>$c '#define PCI_HAVE_PM_LINUX_SYSFS' | |
73 | echo >>$c '#define PCI_HAVE_PM_LINUX_PROC' | |
74 | echo >>$c '#define PCI_HAVE_PM_MMIO_CONF' | |
75 | echo >>$c '#define PCI_HAVE_PM_ECAM' | |
76 | echo >>$c '#define PCI_HAVE_LINUX_BYTEORDER_H' | |
77 | echo >>$c '#define PCI_PATH_PROC_BUS_PCI "/proc/bus/pci"' | |
78 | echo >>$c '#define PCI_PATH_SYS_BUS_PCI "/sys/bus/pci"' | |
79 | echo >>$c '#define PCI_PATH_DEVMEM_DEVICE "/dev/mem"' | |
80 | echo >>$c '#define PCI_PATH_ACPI_MCFG "/sys/firmware/acpi/tables/MCFG"' | |
81 | echo >>$c '#define PCI_PATH_EFI_SYSTAB "/sys/firmware/efi/systab"' | |
82 | case $cpu in | |
83 | i?86|x86_64) echo_n " i386-ports" | |
84 | echo >>$c '#define PCI_HAVE_PM_INTEL_CONF' | |
85 | ;; | |
86 | esac | |
87 | echo >>$c '#define PCI_HAVE_64BIT_ADDRESS' | |
88 | LSPCIDIR=BINDIR | |
89 | ;; | |
90 | sunos) | |
91 | echo_n " mem-ports ecam" | |
92 | case $cpu in | |
93 | i?86) echo_n " i386-ports" | |
94 | echo >>$c "#define PCI_HAVE_PM_INTEL_CONF" | |
95 | ;; | |
96 | esac | |
97 | echo >>$c '#define PCI_HAVE_PM_MMIO_CONF' | |
98 | echo >>$c '#define PCI_HAVE_PM_ECAM' | |
99 | echo >>$c '#define PCI_PATH_DEVMEM_DEVICE "/dev/xsvc"' | |
100 | echo >>$c '#define PCI_PATH_ACPI_MCFG ""' | |
101 | echo >>$c '#define PCI_PATH_EFI_SYSTAB ""' | |
102 | ;; | |
103 | freebsd*|kfreebsd*) | |
104 | echo_n " fbsd-device mem-ports ecam" | |
105 | echo >>$c '#define PCI_HAVE_PM_FBSD_DEVICE' | |
106 | echo >>$c '#define PCI_HAVE_PM_MMIO_CONF' | |
107 | echo >>$c '#define PCI_HAVE_PM_ECAM' | |
108 | echo >>$c '#define PCI_PATH_FBSD_DEVICE "/dev/pci"' | |
109 | echo >>$c '#define PCI_PATH_DEVMEM_DEVICE "/dev/mem"' | |
110 | echo >>$c '#define PCI_PATH_ACPI_MCFG ""' | |
111 | echo >>$c '#define PCI_PATH_EFI_SYSTAB ""' | |
112 | if [ "$sys" != "kfreebsd" ] ; then | |
113 | LIBRESOLV= | |
114 | fi | |
115 | ;; | |
116 | openbsd) | |
117 | echo_n " obsd-device mem-ports ecam" | |
118 | echo >>$c '#define PCI_HAVE_PM_OBSD_DEVICE' | |
119 | echo >>$c '#define PCI_HAVE_PM_MMIO_CONF' | |
120 | echo >>$c '#define PCI_HAVE_PM_ECAM' | |
121 | echo >>$c '#define PCI_PATH_OBSD_DEVICE "/dev/pci"' | |
122 | echo >>$c '#define PCI_PATH_DEVMEM_DEVICE "/dev/mem"' | |
123 | echo >>$c '#define PCI_PATH_ACPI_MCFG "/var/db/acpi/MCFG.*"' | |
124 | echo >>$c '#define PCI_PATH_EFI_SYSTAB ""' | |
125 | case $cpu in | |
126 | i386|amd64) echo_n " i386-ports" | |
127 | echo >>$c '#define PCI_HAVE_PM_INTEL_CONF' | |
128 | echo >>$m 'WITH_LIBS+=-l'$cpu | |
129 | ;; | |
130 | esac | |
131 | LIBRESOLV= | |
132 | ;; | |
133 | ||
134 | darwin*) | |
135 | echo_n " darwin" | |
136 | echo >>$c '#define PCI_HAVE_PM_DARWIN_DEVICE' | |
137 | echo >>$m 'WITH_LIBS+=-lresolv -framework CoreFoundation -framework IOKit' | |
138 | echo >>$c '#define PCI_HAVE_64BIT_ADDRESS' | |
139 | LIBRESOLV= | |
140 | LIBEXT=dylib | |
141 | SYSINCLUDE=$(xcrun --sdk macosx --show-sdk-path)/usr/include | |
142 | ;; | |
143 | aix) | |
144 | echo_n " aix-device" | |
145 | echo >>$c '#define PCI_HAVE_PM_AIX_DEVICE' | |
146 | echo >>$m 'CFLAGS=-g' | |
147 | echo >>$m 'INSTALL=installbsd' | |
148 | echo >>$m 'DIRINSTALL=mkdir -p' | |
149 | ;; | |
150 | netbsd) | |
151 | echo_n " nbsd-libpci mem-ports ecam" | |
152 | echo >>$c '#define PCI_HAVE_PM_NBSD_LIBPCI' | |
153 | echo >>$c '#define PCI_HAVE_PM_MMIO_CONF' | |
154 | echo >>$c '#define PCI_HAVE_PM_ECAM' | |
155 | echo >>$c '#define PCI_PATH_NBSD_DEVICE "/dev/pci0"' | |
156 | echo >>$c '#define PCI_PATH_DEVMEM_DEVICE "/dev/mem"' | |
157 | echo >>$c '#define PCI_PATH_ACPI_MCFG ""' | |
158 | echo >>$c '#define PCI_PATH_EFI_SYSTAB ""' | |
159 | echo >>$c '#define PCI_HAVE_64BIT_ADDRESS' | |
160 | echo >>$m 'LIBNAME=libpciutils' | |
161 | echo >>$m 'WITH_LIBS+=-lpci' | |
162 | LIBRESOLV= | |
163 | ;; | |
164 | gnu) | |
165 | echo_n " hurd i386-ports" | |
166 | echo >>$c '#define PCI_HAVE_PM_HURD_CONF' | |
167 | echo >>$c '#define PCI_HAVE_PM_INTEL_CONF' | |
168 | ;; | |
169 | djgpp) | |
170 | echo_n " i386-ports mem-ports ecam" | |
171 | echo >>$c '#define PCI_HAVE_PM_INTEL_CONF' | |
172 | echo >>$c '#define PCI_HAVE_PM_MMIO_CONF' | |
173 | echo >>$c '#define PCI_HAVE_PM_ECAM' | |
174 | echo >>$c '#define PCI_PATH_ACPI_MCFG ""' | |
175 | echo >>$c '#define PCI_PATH_EFI_SYSTAB ""' | |
176 | EXEEXT=.exe | |
177 | ;; | |
178 | cygwin|windows) | |
179 | echo_n " win32-cfgmgr32 win32-kldbg win32-sysdbg mem-ports ecam" | |
180 | echo >>$c '#define PCI_HAVE_64BIT_ADDRESS' | |
181 | echo >>$c '#define PCI_HAVE_PM_WIN32_CFGMGR32' | |
182 | echo >>$c '#define PCI_HAVE_PM_WIN32_KLDBG' | |
183 | echo >>$c '#define PCI_HAVE_PM_WIN32_SYSDBG' | |
184 | echo >>$c '#define PCI_HAVE_PM_MMIO_CONF' | |
185 | echo >>$c '#define PCI_HAVE_PM_ECAM' | |
186 | echo >>$c '#define PCI_PATH_DEVMEM_DEVICE "\\\\Device\\\\PhysicalMemory"' | |
187 | echo >>$c '#define PCI_PATH_ACPI_MCFG "GetSystemFirmwareTable()"' | |
188 | echo >>$c '#define PCI_PATH_EFI_SYSTAB ""' | |
189 | # Warning: MinGW-w64 (incorrectly) provides cfgmgr32 functions | |
190 | # also in other import libraries, not only in libcfgmgr32.a. | |
191 | # So always set -lcfgmgr32 as a first library parameter which | |
192 | # instruct linker to prefer symbols from cfgmgr32.dll. | |
193 | echo >>$m 'WITH_LIBS+=-lcfgmgr32' | |
194 | case $cpu in i?86|x86_64) | |
195 | echo_n " i386-ports" | |
196 | echo >>$c '#define PCI_HAVE_PM_INTEL_CONF' | |
197 | if [ "$sys" = "cygwin" ] ; then | |
198 | # ioperm is cygwin specific library and used only by lib/i386-io-cygwin.h | |
199 | echo >>$m 'WITH_LIBS+=-lioperm' | |
200 | elif [ "$sys" = "windows" ] ; then | |
201 | # advapi32 is windows system library and used only by lib/i386-io-windows.h | |
202 | echo >>$m 'WITH_LIBS+=-ladvapi32' | |
203 | fi | |
204 | ;; esac | |
205 | EXEEXT=.exe | |
206 | LIBEXT=dll | |
207 | ;; | |
208 | beos|haiku) | |
209 | echo_n " mem-ports ecam" | |
210 | case $cpu in | |
211 | i?86|x86_64) echo_n " i386-ports" | |
212 | echo >>$c '#define PCI_HAVE_PM_INTEL_CONF' | |
213 | ;; | |
214 | esac | |
215 | echo >>$c '#define PCI_HAVE_PM_MMIO_CONF' | |
216 | echo >>$c '#define PCI_HAVE_PM_ECAM' | |
217 | echo >>$c '#define PCI_PATH_DEVMEM_DEVICE "/dev/misc/mem"' | |
218 | echo >>$c '#define PCI_PATH_ACPI_MCFG ""' | |
219 | echo >>$c '#define PCI_PATH_EFI_SYSTAB ""' | |
220 | if [ "$sys" != "beos" ] ; then | |
221 | LIBRESOLV=-lnetwork | |
222 | fi | |
223 | ;; | |
224 | sylixos) | |
225 | echo >>$c '#define PCI_PATH_SYLIXOS_DEVICE "/proc/pci"' | |
226 | echo >>$c '#define PCI_HAVE_64BIT_ADDRESS' | |
227 | echo >>$c '#define PCI_HAVE_PM_SYLIXOS_DEVICE' | |
228 | IDSDIR="/etc/pci" | |
229 | LIBRESOLV= | |
230 | ;; | |
231 | amigaos) | |
232 | echo_n " aos-expansion" | |
233 | echo >>$c '#define PCI_HAVE_STDINT_H' | |
234 | echo >>$c '#define PCI_HAVE_PM_AOS_EXPANSION' | |
235 | IDSDIR="DEVS:" | |
236 | echo >>$m 'CC=gcc' | |
237 | ;; | |
238 | rt_thread_smart) | |
239 | echo >>$c '#define PCI_PATH_RT_THREAD_SMART_DM "/proc/pci"' | |
240 | echo >>$c '#define PCI_HAVE_64BIT_ADDRESS' | |
241 | echo >>$c '#define PCI_HAVE_PM_RT_THREAD_SMART_DM' | |
242 | IDSDIR="/etc/pci" | |
243 | LIBRESOLV= | |
244 | ;; | |
245 | *) | |
246 | echo " Unfortunately, your OS is not supported by the PCI Library" | |
247 | exit 1 | |
248 | ;; | |
249 | esac | |
250 | ||
251 | echo >>$m "LIBEXT="$LIBEXT | |
252 | echo >>$m "EXEEXT="$EXEEXT | |
253 | echo >>$m "LSPCIDIR=\$($LSPCIDIR)" | |
254 | echo >>$c '#define PCI_HAVE_PM_DUMP' | |
255 | echo " dump" | |
256 | ||
257 | echo_n "Checking for zlib support... " | |
258 | if [ "$ZLIB" = yes -o "$ZLIB" = no ] ; then | |
259 | echo "$ZLIB (set manually)" | |
260 | else | |
261 | if [ -f "$SYSINCLUDE/zlib.h" -o -f /usr/local/include/zlib.h ] ; then | |
262 | ZLIB=yes | |
263 | else | |
264 | ZLIB=no | |
265 | fi | |
266 | echo "$ZLIB (auto-detected)" | |
267 | fi | |
268 | if [ "$ZLIB" = yes ] ; then | |
269 | echo >>$c '#define PCI_COMPRESSED_IDS' | |
270 | echo >>$c '#define PCI_IDS "pci.ids.gz"' | |
271 | echo >>$m 'LIBZ=-lz' | |
272 | echo >>$m 'WITH_LIBS+=$(LIBZ)' | |
273 | else | |
274 | echo >>$c '#define PCI_IDS "pci.ids"' | |
275 | fi | |
276 | echo >>$c "#define PCI_PATH_IDS_DIR \"$IDSDIR\"" | |
277 | ||
278 | echo_n "Checking for DNS support... " | |
279 | if [ "$DNS" = yes -o "$DNS" = no ] ; then | |
280 | echo "$DNS (set manually)" | |
281 | else | |
282 | if [ "$sys" != "windows" -a -f "$SYSINCLUDE/resolv.h" ] ; then | |
283 | DNS=yes | |
284 | else | |
285 | DNS=no | |
286 | fi | |
287 | echo "$DNS (auto-detected)" | |
288 | fi | |
289 | if [ "$DNS" = yes ] ; then | |
290 | echo >>$c "#define PCI_USE_DNS" | |
291 | echo >>$c "#define PCI_ID_DOMAIN \"pci.id.ucw.cz\"" | |
292 | echo >>$m "WITH_LIBS+=$LIBRESOLV" | |
293 | fi | |
294 | ||
295 | if [ "$sys" = linux ] ; then | |
296 | echo_n "Checking for libkmod... " | |
297 | LIBKMOD_DETECTED= | |
298 | if [ -z "$PKG_CONFIG" ] ; then | |
299 | PKG_CONFIG=pkg-config | |
300 | fi | |
301 | if [ "$LIBKMOD" != no ] ; then | |
302 | if ! command -v $PKG_CONFIG >/dev/null ; then | |
303 | echo_n "($PKG_CONFIG not found) " | |
304 | elif $PKG_CONFIG libkmod ; then | |
305 | LIBKMOD_DETECTED=1 | |
306 | fi | |
307 | fi | |
308 | if [ "$LIBKMOD" = yes -o "$LIBKMOD" = no ] ; then | |
309 | echo "$LIBKMOD (set manually)" | |
310 | if [ "$LIBKMOD" = yes -a -z "$LIBKMOD_DETECTED" ] ; then | |
311 | echo "Requested use of libkmod, but it is not available. Giving up." | |
312 | exit 1 | |
313 | fi | |
314 | else | |
315 | if [ -n "$LIBKMOD_DETECTED" ] ; then | |
316 | LIBKMOD=yes | |
317 | else | |
318 | LIBKMOD=no | |
319 | fi | |
320 | echo "$LIBKMOD (auto-detected)" | |
321 | fi | |
322 | if [ "$LIBKMOD" = yes ] ; then | |
323 | echo >>$c "#define PCI_USE_LIBKMOD" | |
324 | echo >>$m "LIBKMOD_CFLAGS=$($PKG_CONFIG --cflags libkmod)" | |
325 | echo >>$m "LIBKMOD_LIBS=$($PKG_CONFIG --libs libkmod)" | |
326 | fi | |
327 | ||
328 | echo_n "Checking for udev hwdb support... " | |
329 | if [ "$HWDB" = yes -o "$HWDB" = no ] ; then | |
330 | echo "$HWDB (set manually)" | |
331 | else | |
332 | if `command -v $PKG_CONFIG >/dev/null && $PKG_CONFIG --atleast-version=196 libudev` ; then | |
333 | HWDB=yes | |
334 | else | |
335 | HWDB=no | |
336 | fi | |
337 | echo "$HWDB (auto-detected)" | |
338 | fi | |
339 | if [ "$HWDB" = yes ] ; then | |
340 | echo >>$c '#define PCI_HAVE_HWDB' | |
341 | echo >>$m 'LIBUDEV=-ludev' | |
342 | echo >>$m 'WITH_LIBS+=$(LIBUDEV)' | |
343 | fi | |
344 | fi | |
345 | ||
346 | echo "Checking whether to build a shared library... $SHARED (set manually)" | |
347 | if [ "$SHARED" = no ] ; then | |
348 | echo >>$m 'PCILIB=$(LIBNAME).a' | |
349 | echo >>$m 'LDLIBS=$(WITH_LIBS)' | |
350 | echo >>$m 'LIB_LDLIBS=' | |
351 | else | |
352 | if [ "$LIBEXT" = so ]; then | |
353 | echo >>$m 'PCILIB=$(LIBNAME).$(LIBEXT).$(VERSION)' | |
354 | elif [ "$LIBEXT" = dll ]; then | |
355 | echo >>$m 'PCILIB=$(LIBNAME)$(ABI_VERSION).$(LIBEXT)' | |
356 | else | |
357 | echo >>$m 'PCILIB=$(LIBNAME).$(VERSION).$(LIBEXT)' | |
358 | fi | |
359 | # We link the dependencies _to_ the library, so we do not need explicit deps in .pc | |
360 | echo >>$m 'LDLIBS=' | |
361 | echo >>$m 'LIB_LDLIBS=$(WITH_LIBS)' | |
362 | echo >>$c '#define PCI_SHARED_LIB' | |
363 | if [ "$LIBEXT" = so ]; then | |
364 | echo >>$m 'PCILIB_LDFLAGS+=-Wl,-soname,$(LIBNAME).$(LIBEXT).$(ABI_VERSION)' | |
365 | echo >>$m 'PCILIB_LDFLAGS+=-Wl,--version-script=libpci.ver' | |
366 | elif [ "$LIBEXT" = dylib ]; then | |
367 | echo >>$m 'PCILIB_LDFLAGS+=-Wl,-install_name,$(LIBDIR)/$(PCILIB)' | |
368 | elif [ "$LIBEXT" = dll ]; then | |
369 | echo >>$m 'PCIIMPDEF=$(LIBNAME)$(ABI_VERSION).def' | |
370 | # GCC's -fvisibility=hidden is broken for Windows targets, use -Wl,--exclude-all-symbols instead (supported since GNU LD 2.21) | |
371 | echo >>$m 'PCILIB_LDFLAGS+=-Wl,--exclude-all-symbols' | |
372 | fi | |
373 | fi | |
374 | echo >>$m 'PCILIBPC=$(LIBNAME).pc' | |
375 | ||
376 | if [ "$SHARED" != no ] && [ "$LIBEXT" = dll ]; then | |
377 | echo >>$m 'PCIIMPLIB=$(PCILIB).a' | |
378 | else | |
379 | echo >>$m 'PCIIMPLIB=$(PCILIB)' | |
380 | fi | |
381 | ||
382 | echo >>$c "#define PCILIB_VERSION \"$VERSION\"" | |
383 | echo >>$c "#define PCILIB_DATE_AMIGAOS \"`echo $DATE | sed 's/\(....\)-\(..\)-\(..\)/\3.\2.\1/'`\"" | |
384 | sed '/"/{s/^#define \([^ ]*\) "\(.*\)"$/\1=\2/;p;d;};s/^#define \(.*\)/\1=1/' <$c >>$m |