# Options specific to crosstool-NG overall behavior

comment "crosstool-NG behavior"

config OBSOLETE
    bool
    prompt "Use obsolete features"
    help
      If you set this to Y, you will be able to select obsolete features.
      
      Such obsolete features are the use of old kernel headers, old gcc
      versions, etc... for which maintaining support in crosstool-NG
      would be very costly.
      
      It does not however mean that the specific feature or version has been
      marked obsolete by the upstream team.

config EXPERIMENTAL
    bool
    prompt "Try features marked as EXPERIMENTAL"
    help
      If you set this to Y, then you will be able to try very experimental
      features.
      
      Experimental features can be one of:
        - working, in which case you should tell me it is!
        - buggy, in which case you could try patching and send me the result
        - unfinished, in which case you could try hacking it and send me the result
        - non-existant, in which case you could also try hacking it in and send me
          the result

config DEBUG_CT
    bool
    prompt "Debug crosstool-NG"
    depends on ! BACKEND
    help
      Say 'y' here to get some options regarding debugging crosstool-NG.

if DEBUG_CT

config DEBUG_PAUSE_STEPS
    bool
    prompt "Pause between every steps"
    help
      Say 'y' if you intend to attend the build, and want to investigate
      the result of each steps before running the next one.

config DEBUG_CT_SAVE_STEPS
    bool
    prompt "Save intermediate steps"
    help
      If you say 'y' here, then you will be able to restart crosstool-NG at
      any step.
      
      It is not currently possible to restart at any of the debug facilities.
      They are treated as a whole.
      
      To get the full list os steps, run: ct-ng list-steps

config DEBUG_CT_SAVE_STEPS_GZIP
    bool
    prompt "gzip saved states"
    default y
    depends on DEBUG_CT_SAVE_STEPS
    help
      If you are tight on space, then you can ask to gzip the saved states
      tarballs. On the other hand, this takes some longer time...
      
      To lose as less time as possible, the gzip process is done with a low
      compression ratio (-3), which gives roughly 70% gain in size. Going
      further doesn't gain much, and takes far more time (believe me, I've
      got figures here! :-) ).

config NO_OVERIDE_LC_MESSAGES
    bool
    prompt "Do *not* overide LC_MESSAGES (EXPERIMENTAL)"
    depends on EXPERIMENTAL
    help
      By default, crosstool-NG sets and exports LC_ALL=C so that the
      build.log file contains english messages, that can be read by
      people most likely to help interpret the logs. If you say N here,
      and your locale is not an english language, then dissecting your
      log file will be difficult for most people but you.
      
      If you say Y here, then your current locale settings will be used
      to print messages, instead of plain english.
      
      Say N, please.

endif
