Blame libdwarf/configure.cmake

Packit cdaae3
include(AutoconfHelper)
Packit cdaae3
Packit cdaae3
ac_init()
Packit cdaae3
ac_check_headers(alloca.h elf.h elfaccess.h libelf.h libelf/libelf.h  sys/types.h sys/elf_386.h sys/elf_amd64.h sys/elf_sparc.h sys/ia64/elf.h)
Packit cdaae3
Packit cdaae3
#  The default libdwarf is the one with struct Elf
Packit cdaae3
message(STATUS "Assuming struct Elf for the default libdwarf.h")
Packit cdaae3
configure_file(libdwarf.h.in libdwarf.h COPYONLY)
Packit cdaae3
Packit cdaae3
ac_check_lib(${LIBELF_LIBRARIES} elf elf64_getehdr)
Packit cdaae3
ac_check_lib(${LIBELF_LIBRARIES} elf elf64_getshdr)
Packit cdaae3
Packit cdaae3
# Find out where the elf header is.
Packit cdaae3
if(HAVE_ELF_H)
Packit cdaae3
    set(HAVE_LOCATION_OF_LIBELFHEADER "<elf.h>")
Packit cdaae3
elseif(HAVE_LIBELF_H)
Packit cdaae3
    set(HAVE_LOCATION_OF_LIBELFHEADER "<libelf.h>")
Packit cdaae3
elseif(HAVE_LIBELF_LIBELF_H)
Packit cdaae3
    set(HAVE_LOCATION_OF_LIBELFHEADER "<libelf/libelf.h>")
Packit cdaae3
endif()
Packit cdaae3
Packit cdaae3
ac_try_compile("
Packit cdaae3
int main()
Packit cdaae3
{
Packit cdaae3
    __uint32_t p; 
Packit cdaae3
    p = 3;
Packit cdaae3
    return 0;
Packit cdaae3
}" 
Packit cdaae3
HAVE___UINT32_T)
Packit cdaae3
Packit cdaae3
ac_try_compile("
Packit cdaae3
int main()
Packit cdaae3
{
Packit cdaae3
    __uint64_t p; 
Packit cdaae3
    p = 3;
Packit cdaae3
    return 0;
Packit cdaae3
}" 
Packit cdaae3
HAVE___UINT64_T)
Packit cdaae3
Packit cdaae3
ac_try_compile("
Packit cdaae3
#include <sys/types.h>
Packit cdaae3
int main()
Packit cdaae3
{
Packit cdaae3
    __uint32_t p; 
Packit cdaae3
    p = 3;
Packit cdaae3
    return 0;
Packit cdaae3
}" 
Packit cdaae3
HAVE___UINT32_T_IN_SYS_TYPES_H)
Packit cdaae3
ac_try_compile("
Packit cdaae3
#include <sys/types.h>
Packit cdaae3
int main()
Packit cdaae3
{
Packit cdaae3
    __uint64_t p; 
Packit cdaae3
    p = 3;
Packit cdaae3
    return 0;
Packit cdaae3
}" 
Packit cdaae3
HAVE___UINT64_T_IN_SYS_TYPES_H)
Packit cdaae3
Packit cdaae3
check_c_source_runs("
Packit cdaae3
static unsigned foo( unsigned x, __attribute__ ((unused)) int y)
Packit cdaae3
{  
Packit cdaae3
    unsigned x2 = x + 1;
Packit cdaae3
    return x2;
Packit cdaae3
}
Packit cdaae3
Packit cdaae3
int main(void) {
Packit cdaae3
    unsigned y = 0;
Packit cdaae3
    y = foo(12,y);
Packit cdaae3
    return 0;
Packit cdaae3
}"
Packit cdaae3
HAVE_UNUSED_ATTRIBUTE)
Packit cdaae3
message(STATUS "Checking compiler supports __attribute__ unused... ${HAVE_UNUSED_ATTRIBUTE}")
Packit cdaae3
Packit cdaae3
ac_try_compile([=[
Packit cdaae3
#include "zlib.h"
Packit cdaae3
int main()
Packit cdaae3
{
Packit cdaae3
    Bytef dest[100]; 
Packit cdaae3
    uLongf destlen = 100; 
Packit cdaae3
    Bytef *src = 0;
Packit cdaae3
    uLong srclen = 3;
Packit cdaae3
    int res = uncompress(dest,&destlen,src,srclen);
Packit cdaae3
    if (res == Z_OK) {
Packit cdaae3
         /* ALL IS WELL */
Packit cdaae3
    }
Packit cdaae3
    return 0;
Packit cdaae3
}]=]
Packit cdaae3
HAVE_ZLIB)
Packit cdaae3
message(STATUS "Checking zlib.h usability... ${HAVE_ZLIB}")
Packit cdaae3
set(dwfzlib $<$<BOOL:${HAVE_ZIB}>:"z")
Packit cdaae3
Packit cdaae3
#  The following are for FreeBSD and others which
Packit cdaae3
#  use struct _Elf as the actual struct type.
Packit cdaae3
if(HAVE_LIBELF_H)
Packit cdaae3
    set(_Elf_HEADER "<libelf.h>")
Packit cdaae3
else()
Packit cdaae3
    set(_Elf_HEADER "<libelf/libelf.h>")
Packit cdaae3
endif()
Packit cdaae3
Packit cdaae3
ac_try_compile("
Packit cdaae3
#include ${_Elf_HEADER}
Packit cdaae3
struct _Elf; 
Packit cdaae3
typedef struct _Elf Elf;
Packit cdaae3
int main()
Packit cdaae3
{
Packit cdaae3
    struct _Elf *a = 0;
Packit cdaae3
    return 0;
Packit cdaae3
}"
Packit cdaae3
_Elf_found)
Packit cdaae3
Packit cdaae3
if(_Elf_found)
Packit cdaae3
   message(STATUS "Found struct _Elf in ${_ELF_HEADER}, using it in libdwarf.h")
Packit cdaae3
   file(READ libdwarf.h.in CONTENT)
Packit cdaae3
   string(REPLACE "struct Elf" "struct _Elf" CONTENT ${CONTENT})
Packit cdaae3
   file(WRITE libdwarf.h ${CONTENT})
Packit cdaae3
else()
Packit cdaae3
   message(STATUS "${_ELF_HEADER} does not have struct _Elf")
Packit cdaae3
endif()
Packit cdaae3
#  checking for ia 64 types, which might be enums, using HAVE_R_IA_64_DIR32LSB
Packit cdaae3
#  to stand in for a small set.
Packit cdaae3
ac_try_compile("
Packit cdaae3
#include ${HAVE_LOCATION_OF_LIBELFHEADER}
Packit cdaae3
int main()
Packit cdaae3
{
Packit cdaae3
    int p; p = R_IA_64_DIR32LSB;
Packit cdaae3
    return 0;
Packit cdaae3
}" 
Packit cdaae3
HAVE_R_IA_64_DIR32LSB)
Packit cdaae3
Packit cdaae3
ac_try_compile("
Packit cdaae3
#include ${LOCATION_OF_LIBELFHEADER}
Packit cdaae3
int main()
Packit cdaae3
{
Packit cdaae3
    struct _Elf a; int i; i = 0;
Packit cdaae3
    return 0;
Packit cdaae3
}" 
Packit cdaae3
HAVE_STRUCT_UNDERSCORE_ELF)
Packit cdaae3
message(STATUS "Checking  libelf defines struct _Elf... ${HAVE_STRUCT_UNDERSCORE_ELF}")
Packit cdaae3
Packit cdaae3
ac_try_compile("
Packit cdaae3
#include ${LOCATION_OF_LIBELFHEADER}
Packit cdaae3
int main()
Packit cdaae3
{
Packit cdaae3
    int p; p = 0;
Packit cdaae3
    return 0;
Packit cdaae3
}" 
Packit cdaae3
HAVE_RAW_LIBELF_OK)
Packit cdaae3
message(STATUS "Checking  some libelf found ... ${HAVE_RAW_LIBELF_OK}")
Packit cdaae3
Packit cdaae3
ac_try_compile("
Packit cdaae3
#define _GNU_SOURCE
Packit cdaae3
#include ${LOCATION_OF_LIBELFHEADER}
Packit cdaae3
int main()
Packit cdaae3
{
Packit cdaae3
    off64_t  p; p = 0;
Packit cdaae3
    return 0;
Packit cdaae3
}" 
Packit cdaae3
HAVE_LIBELF_OFF64_OK)
Packit cdaae3
message(STATUS "Checking  off64_t ok ... ${HAVE_LIBELF_OFF64_OK}")
Packit cdaae3
Packit cdaae3
Packit cdaae3
#  the existence of sgidefs.h does not prove it's truly SGI, nor
Packit cdaae3
#  prove that __uint32_t or __uint64_t is defined therein.
Packit cdaae3
Packit cdaae3
ac_try_compile("
Packit cdaae3
#include <sgidefs.h>
Packit cdaae3
int main()
Packit cdaae3
{
Packit cdaae3
    __uint32_t p; p = 27;
Packit cdaae3
    return 0;
Packit cdaae3
}" 
Packit cdaae3
HAVE___UINT32_T_IN_SGIDEFS_H)
Packit cdaae3
Packit cdaae3
Packit cdaae3
ac_try_compile("
Packit cdaae3
#include <sgidefs.h>
Packit cdaae3
int main()
Packit cdaae3
{
Packit cdaae3
    __uint64_t p; p = 27;
Packit cdaae3
    return 0;
Packit cdaae3
}" 
Packit cdaae3
HAVE___UINT64_T_IN_SGIDEFS_H)
Packit cdaae3
Packit cdaae3
ac_try_compile("
Packit cdaae3
#include  ${HAVE_LOCATION_OF_LIBELF_HEADER}
Packit cdaae3
int main()
Packit cdaae3
{
Packit cdaae3
    Elf64_Rela p; p.r_offset = 1;
Packit cdaae3
    return 0;
Packit cdaae3
}" 
Packit cdaae3
HAVE_ELF64_RELA)
Packit cdaae3
Packit cdaae3
ac_try_compile("
Packit cdaae3
#include ${HAVE_LOCATION_OF_LIBELF_HEADER}
Packit cdaae3
int main()
Packit cdaae3
{
Packit cdaae3
    Elf64_Sym p; p.st_info = 1;
Packit cdaae3
    return 0;
Packit cdaae3
}" 
Packit cdaae3
HAVE_ELF64_SYM)
Packit cdaae3
Packit cdaae3
#   This changes the gennames option from -s  to -t
Packit cdaae3
option(namestable "string functions implemented as binary search (default is with C switch)" TRUE)
Packit cdaae3
if(namestable)
Packit cdaae3
    set(dwarf_namestable "-s")
Packit cdaae3
else()
Packit cdaae3
    set(dwarf_namestable "-t")
Packit cdaae3
endif()
Packit cdaae3
Packit cdaae3
option(windowspath "Detect certain Windows paths as full paths (default is NO)" FALSE)
Packit cdaae3
set(HAVE_WINDOWS_PATH ${windowspath})
Packit cdaae3
message(STATUS "Checking enable  windowspath... ${HAVE_WINDOWS_PATH}")
Packit cdaae3
Packit cdaae3
option(oldframecol "Use HAVE_OLD_FRAME_CFA_COL (default is to use new DW_FRAME_CFA_COL3)" FALSE)
Packit cdaae3
set(HAVE_OLD_FRAME_CFA_COL ${oldframecol})
Packit cdaae3
message(STATUS "Checking enable old frame columns... ${HAVE_OLD_FRAME_CFA_COL}")
Packit cdaae3
Packit cdaae3
ac_try_compile([=[
Packit cdaae3
#include "stdafx.h"
Packit cdaae3
int main()
Packit cdaae3
{
Packit cdaae3
    int p; p = 27;
Packit cdaae3
    return 0;
Packit cdaae3
}]=]
Packit cdaae3
HAVE_STDAFX_H)
Packit cdaae3
message(STATUS "Checking have windows stdafx.h... ${HAVE_STDAFX_H}")
Packit cdaae3
Packit cdaae3
#  See pro_init(), HAVE_DWARF2_99_EXTENSION also generates
Packit cdaae3
#  32bit offset dwarf unless DW_DLC_OFFSET_SIZE_64 flag passed to
Packit cdaae3
#  pro_init.
Packit cdaae3
option(dwarf_format_sgi_irix "Force producer to SGI IRIX offset dwarf" FALSE)
Packit cdaae3
set(HAVE_SGI_IRIX_OFFSETS ${dwarf_format_sgi_irix})
Packit cdaae3
message(STATUS "Checking  producer generates SGI IRIX output... ${HAVE_SGI_IRIX_OFFSETS}")
Packit cdaae3
Packit cdaae3
option(dwarf_format_strict_32bit "Force producer to generate only DWARF format 32bit" FALSE)
Packit cdaae3
set(HAVE_STRICT_DWARF2_32BIT_OFFSET ${dwarf_format_strict_32bit})
Packit cdaae3
set(HAVE_DWARF2_99_EXTENSION NOT ${dwarf_format_strict_32bit})
Packit cdaae3
message(STATUS "Checking producer generates only 32bit... ${HAVE_STRICT_DWARF2_32BIT_OFFSET}")
Packit cdaae3
Packit cdaae3
configure_file(config.h.in.cmake config.h)