# ltrace

## depends on ! BACKEND
##
## select LIBELF_TARGET
##
## help ltrace is a program that simply runs the specified command until it exits.
## help It intercepts and records the dynamic library calls which are called by
## help the executed process and the signals which are received by that process.
## help It can also intercept and print the system calls executed by the program.

choice
    bool
    prompt "ltrace version"
# Don't remove next line
# CT_INSERT_VERSION_BELOW

config LTRACE_V_0_5_3
    bool
    prompt "0.5.3"
    select LTRACE_0_5_3_or_later

config LTRACE_V_0_5_2
    bool
    prompt "0.5.2"

config LTRACE_V_0_5
    bool
    prompt "0.5 (OBSOLETE)"
    depends on OBSOLETE

config LTRACE_V_0_4
    bool
    prompt "0.4 (OBSOLETE)"
    depends on OBSOLETE

endchoice

config LTRACE_VERSION
    string
# Don't remove next line
# CT_INSERT_VERSION_STRING_BELOW
    default "0.5.3" if LTRACE_V_0_5_3
    default "0.5.2" if LTRACE_V_0_5_2
    default "0.5.1" if LTRACE_V_0_5_1
    default "0.5" if LTRACE_V_0_5
    default "0.4" if LTRACE_V_0_4

config LTRACE_0_5_3_or_later
    bool
