Blame m4/ldd.m4

Packit Service 4684c1
# ldd.m4 serial 1
Packit Service 4684c1
dnl Copyright (C) 2006, 2009-2020 Free Software Foundation, Inc.
Packit Service 4684c1
dnl This file is free software; the Free Software Foundation
Packit Service 4684c1
dnl gives unlimited permission to copy and/or distribute it,
Packit Service 4684c1
dnl with or without modifications, as long as this notice is preserved.
Packit Service 4684c1
Packit Service 4684c1
# Sets LDDPROG to a command and LDDPOSTPROC to a filter command, such that
Packit Service 4684c1
#   $LDDPROG program $LDDPOSTPROC
Packit Service 4684c1
# outputs a whitespace-separated list of the dynamically linked dependencies
Packit Service 4684c1
# of the program, as library names (no full pathnames), or nothing if the
Packit Service 4684c1
# program is statically linked or if the service is not supported on the given
Packit Service 4684c1
# system.
Packit Service 4684c1
Packit Service 4684c1
dnl From Bruno Haible.
Packit Service 4684c1
Packit Service 4684c1
AC_DEFUN([gl_LDD],
Packit Service 4684c1
[
Packit Service 4684c1
  AC_REQUIRE([AC_CANONICAL_HOST])
Packit Service 4684c1
  AC_REQUIRE([AC_PROG_CC])
Packit Service 4684c1
  dnl Default values.
Packit Service 4684c1
  LDDPROG=':'
Packit Service 4684c1
  LDDPOSTPROC=
Packit Service 4684c1
  dnl First try objdump, since it works when cross-compiling.
Packit Service 4684c1
  AC_CHECK_TOOL([OBJDUMP], [objdump], [false])
Packit Service 4684c1
changequote(,)dnl
Packit Service 4684c1
  if test "$OBJDUMP" != "false"; then
Packit Service 4684c1
    LDDPROG="$OBJDUMP -p"
Packit Service 4684c1
    dnl The output of "LC_ALL=C objdump -p program" of a program or library
Packit Service 4684c1
    dnl looks like this:
Packit Service 4684c1
    dnl
Packit Service 4684c1
    dnl libnet.so:     file format elf32-i386
Packit Service 4684c1
    dnl
Packit Service 4684c1
    dnl Program Header:
Packit Service 4684c1
    dnl     LOAD off    0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**12
Packit Service 4684c1
    dnl          filesz 0x0001391d memsz 0x0001391d flags r-x
Packit Service 4684c1
    dnl     LOAD off    0x00013920 vaddr 0x00014920 paddr 0x00014920 align 2**12
Packit Service 4684c1
    dnl          filesz 0x00001874 memsz 0x0001b020 flags rw-
Packit Service 4684c1
    dnl  DYNAMIC off    0x00015104 vaddr 0x00016104 paddr 0x00016104 align 2**2
Packit Service 4684c1
    dnl          filesz 0x00000090 memsz 0x00000090 flags rw-
Packit Service 4684c1
    dnl
Packit Service 4684c1
    dnl Dynamic Section:
Packit Service 4684c1
    dnl   NEEDED      libroot.so
Packit Service 4684c1
    dnl   SONAME      libnet.so
Packit Service 4684c1
    dnl   SYMBOLIC    0x0
Packit Service 4684c1
    dnl   INIT        0x2aec
Packit Service 4684c1
    dnl   FINI        0x12a2c
Packit Service 4684c1
    dnl   HASH        0x94
Packit Service 4684c1
    dnl   STRTAB      0x1684
Packit Service 4684c1
    dnl   SYMTAB      0x774
Packit Service 4684c1
    dnl   STRSZ       0xbd5
Packit Service 4684c1
    dnl   SYMENT      0x10
Packit Service 4684c1
    dnl   PLTGOT      0x15f20
Packit Service 4684c1
    dnl   PLTRELSZ    0x320
Packit Service 4684c1
    dnl   PLTREL      0x11
Packit Service 4684c1
    dnl   JMPREL      0x27cc
Packit Service 4684c1
    dnl   REL         0x225c
Packit Service 4684c1
    dnl   RELSZ       0x570
Packit Service 4684c1
    dnl   RELENT      0x8
Packit Service 4684c1
    LDDPOSTPROC="2>/dev/null | sed -n -e 's,^  NEEDED *\\([^ ].*\\)\$,\\1,p'"
Packit Service 4684c1
  else
Packit Service 4684c1
    if test "$cross_compiling" = no; then
Packit Service 4684c1
      dnl Not cross-compiling. Try system dependent vendor tools.
Packit Service 4684c1
      case "$host_os" in
Packit Service 4684c1
        aix*)
Packit Service 4684c1
          LDDPROG="dump -H"
Packit Service 4684c1
          dnl The output of "LC_ALL=C dump -H program" looks like this:
Packit Service 4684c1
          dnl
Packit Service 4684c1
          dnl program:
Packit Service 4684c1
          dnl
Packit Service 4684c1
          dnl                         ***Loader Section***
Packit Service 4684c1
          dnl                       Loader Header Information
Packit Service 4684c1
          dnl VERSION#         #SYMtableENT     #RELOCent        LENidSTR
Packit Service 4684c1
          dnl 0x00000001       0x00000005       0x0000000d       0x0000001e
Packit Service 4684c1
          dnl
Packit Service 4684c1
          dnl #IMPfilID        OFFidSTR         LENstrTBL        OFFstrTBL
Packit Service 4684c1
          dnl 0x00000002       0x00000134       0x0000000d       0x00000152
Packit Service 4684c1
          dnl
Packit Service 4684c1
          dnl
Packit Service 4684c1
          dnl                         ***Import File Strings***
Packit Service 4684c1
          dnl INDEX  PATH                          BASE                MEMBER
Packit Service 4684c1
          dnl 0      /usr/lib:/lib
Packit Service 4684c1
          dnl 1                                    libc.a              shr.o
Packit Service 4684c1
          dnl
Packit Service 4684c1
          LDDPOSTPROC="2>/dev/null | sed -e '/^[^0-9]/d' -e '/^0x/d' | sed -n -e 's,^[0-9]*         *\\([^ 	]*\\).*\$,\\1,p' | sed -e 's,^.*/,,'"
Packit Service 4684c1
          ;;
Packit Service 4684c1
        darwin*)
Packit Service 4684c1
          LDDPROG="otool -L"
Packit Service 4684c1
          dnl The output of "otool -L program" looks like this:
Packit Service 4684c1
          dnl program:
Packit Service 4684c1
          dnl         /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 71.1.4)
Packit Service 4684c1
          LDDPOSTPROC="2>/dev/null | sed -n -e 's,^	\\([^ 	]*\\).*\$,\\1,p' | sed -e 's,^.*/,,'"
Packit Service 4684c1
          ;;
Packit Service 4684c1
        hpux*)
Packit Service 4684c1
          LDDPROG="chatr"
Packit Service 4684c1
          dnl The output of "LC_ALL=C chatr program" looks like this:
Packit Service 4684c1
          dnl program:
Packit Service 4684c1
          dnl          shared executable
Packit Service 4684c1
          dnl          shared library dynamic path search:
Packit Service 4684c1
          dnl              SHLIB_PATH     disabled  second
Packit Service 4684c1
          dnl              embedded path  disabled  first  Not Defined
Packit Service 4684c1
          dnl          shared library list:
Packit Service 4684c1
          dnl              dynamic   /usr/lib/libc.2
Packit Service 4684c1
          dnl          shared library binding:
Packit Service 4684c1
          dnl              deferred
Packit Service 4684c1
          dnl          global hash table disabled
Packit Service 4684c1
          dnl          plabel caching disabled
Packit Service 4684c1
          dnl          global hash array size:1103
Packit Service 4684c1
          dnl          global hash array nbuckets:3
Packit Service 4684c1
          dnl          shared vtable support disabled
Packit Service 4684c1
          dnl          static branch prediction disabled
Packit Service 4684c1
          dnl          executable from stack: D (default)
Packit Service 4684c1
          dnl          kernel assisted branch prediction enabled
Packit Service 4684c1
          dnl          lazy swap allocation disabled
Packit Service 4684c1
          dnl          text segment locking disabled
Packit Service 4684c1
          dnl          data segment locking disabled
Packit Service 4684c1
          dnl          third quadrant private data space disabled
Packit Service 4684c1
          dnl          fourth quadrant private data space disabled
Packit Service 4684c1
          dnl          third quadrant global data space disabled
Packit Service 4684c1
          dnl          data page size: D (default)
Packit Service 4684c1
          dnl          instruction page size: D (default)
Packit Service 4684c1
          dnl          nulptr references disabled
Packit Service 4684c1
          dnl          shared library private mapping disabled
Packit Service 4684c1
          dnl          shared library text merging disabled
Packit Service 4684c1
          dnl
Packit Service 4684c1
          dnl or like this:
Packit Service 4684c1
          dnl a.out:
Packit Service 4684c1
          dnl          32-bit ELF executable
Packit Service 4684c1
          dnl          shared library dynamic path search:
Packit Service 4684c1
          dnl              LD_LIBRARY_PATH    enabled  first
Packit Service 4684c1
          dnl              SHLIB_PATH         enabled  second
Packit Service 4684c1
          dnl              embedded path      enabled  third  /usr/lib/hpux32:/opt/langtools/lib/hpux32
Packit Service 4684c1
          dnl          shared library list:
Packit Service 4684c1
          dnl              libc.so.1
Packit Service 4684c1
          dnl          shared library binding:
Packit Service 4684c1
          dnl              deferred
Packit Service 4684c1
          dnl          global hash table disabled
Packit Service 4684c1
          dnl          global hash table size 1103
Packit Service 4684c1
          dnl          shared library mapped private disabled
Packit Service 4684c1
          dnl          shared library segment merging disabled
Packit Service 4684c1
          dnl          shared vtable support disabled
Packit Service 4684c1
          dnl          explicit unloading disabled
Packit Service 4684c1
          dnl          segments:
Packit Service 4684c1
          dnl              index type     address      flags size
Packit Service 4684c1
          dnl                  7 text     04000000     z---c-    D (default)
Packit Service 4684c1
          dnl                  8 data     40000000     ---m--    D (default)
Packit Service 4684c1
          dnl          executable from stack: D (default)
Packit Service 4684c1
          dnl          kernel assisted branch prediction enabled
Packit Service 4684c1
          dnl          lazy swap allocation for dynamic segments disabled
Packit Service 4684c1
          dnl          nulptr references disabled
Packit Service 4684c1
          dnl          address space model: default
Packit Service 4684c1
          dnl          caliper dynamic instrumentation disabled
Packit Service 4684c1
          dnl
Packit Service 4684c1
          LDDPOSTPROC="2>/dev/null | sed -e '1,/shared library list:/d' -e '/shared library binding:/,\$d' | sed -e 's,^.*[ 	]\\([^ 	][^ 	]*\\)\$,\\1,' | sed -e 's,^.*/,,'"
Packit Service 4684c1
          ;;
Packit Service 4684c1
        irix*)
Packit Service 4684c1
          LDDPROG="elfdump -Dl"
Packit Service 4684c1
          dnl The output of "elfdump -Dl program" looks like this:
Packit Service 4684c1
          dnl
Packit Service 4684c1
          dnl program:
Packit Service 4684c1
          dnl
Packit Service 4684c1
          dnl                    **** MIPS LIBLIST INFORMATION ****
Packit Service 4684c1
          dnl .liblist :
Packit Service 4684c1
          dnl [INDEX] Timestamp               Checksum        Flags   Name            Version
Packit Service 4684c1
          dnl [1]     Oct  2 05:19:12 1999    0x867bf7a8      -----   libc.so.1       sgi1.0
Packit Service 4684c1
          dnl
Packit Service 4684c1
          LDDPOSTPROC="2>/dev/null | sed -n -e 's,^[[][0-9]*[]].*	0x[^	]*	[^	][^	]*	\\([^	][^	]*\\).*\$,\\1,p' | sed -e 's,^.*/,,'"
Packit Service 4684c1
          ;;
Packit Service 4684c1
        linux* | gnu* | kfreebsd*-gnu | knetbsd*-gnu) # glibc-based systems
Packit Service 4684c1
          LDDPROG="ldd"
Packit Service 4684c1
          dnl The output of "ldd program" looks like this:
Packit Service 4684c1
          dnl         libc.so.6 => /lib/libc.so.6 (0x4002d000)
Packit Service 4684c1
          dnl         /lib/ld-linux.so.2 (0x40000000)
Packit Service 4684c1
          LDDPOSTPROC="2>/dev/null | sed -n -e 's,^	\\([^ 	][^ 	]*\\).*\$,\\1,p' | sed -e 's,^.*/,,'"
Packit Service 4684c1
          ;;
Packit Service 4684c1
        osf*)
Packit Service 4684c1
          LDDPROG="odump -Dl"
Packit Service 4684c1
          dnl The output of "odump -Dl program" looks like this:
Packit Service 4684c1
          dnl
Packit Service 4684c1
          dnl                         ***LIBRARY LIST SECTION***
Packit Service 4684c1
          dnl         Name             Time-Stamp        CheckSum   Flags Version
Packit Service 4684c1
          dnl program:
Packit Service 4684c1
          dnl         libc.so      Dec 30 00:09:30 1997 0x5e955f9b     0 osf.1
Packit Service 4684c1
          dnl
Packit Service 4684c1
          LDDPOSTPROC="2>/dev/null | sed -n -e 's,^	\\([^ 	][^ 	]*\\).*,\\1,p' | sed -e '/^Name\$/d' | sed -e 's,^.*/,,'"
Packit Service 4684c1
          ;;
Packit Service 4684c1
        solaris*)
Packit Service 4684c1
          LDDPROG="ldd"
Packit Service 4684c1
          dnl The output of "ldd program" looks like this:
Packit Service 4684c1
          dnl         libc.so.1 =>     /usr/lib/libc.so.1
Packit Service 4684c1
          dnl         libdl.so.1 =>    /usr/lib/libdl.so.1
Packit Service 4684c1
          dnl         /usr/platform/SUNW,Ultra-5_10/lib/libc_psr.so.1
Packit Service 4684c1
          dnl The first sed collects the indented lines.
Packit Service 4684c1
          dnl The second sed extracts the left-hand part.
Packit Service 4684c1
          dnl The third sed removes directory specifications.
Packit Service 4684c1
          LDDPOSTPROC="2>/dev/null | sed -n -e 's,^	\\([^ ].*\\)\$,\\1,p' | sed -e 's, =>.*\$,,' | sed -e 's,^.*/,,'"
Packit Service 4684c1
          ;;
Packit Service 4684c1
      esac
Packit Service 4684c1
    fi
Packit Service 4684c1
  fi
Packit Service 4684c1
  dnl Avoid locale dependencies.
Packit Service 4684c1
  if test "$LDDPROG" != ":"; then
Packit Service 4684c1
    LDDPROG="LC_ALL=C $LDDPROG"
Packit Service 4684c1
  fi
Packit Service 4684c1
changequote([,])dnl
Packit Service 4684c1
  AC_SUBST([LDDPROG])
Packit Service 4684c1
  AC_SUBST([LDDPOSTPROC])
Packit Service 4684c1
])