feat(util/options): 'verbose' as a system option, add -q (quiet) option

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
This commit is contained in:
Leonardo de Moura 2014-01-09 15:31:58 -08:00
parent 8c41b4e899
commit a339a53f50
8 changed files with 25 additions and 13 deletions

View file

@ -27,7 +27,7 @@ function(add_theory_core FILE ARG EXTRA_DEPS)
get_filename_component(BASENAME ${FILE} NAME_WE) get_filename_component(BASENAME ${FILE} NAME_WE)
set(FNAME "${BASENAME}.olean") set(FNAME "${BASENAME}.olean")
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${FNAME} add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${FNAME}
COMMAND ${SHELL_DIR}/lean ${ARG} -o ${CMAKE_CURRENT_BINARY_DIR}/${FNAME} ${CMAKE_CURRENT_SOURCE_DIR}/${FILE} COMMAND ${SHELL_DIR}/lean ${ARG} -q -o ${CMAKE_CURRENT_BINARY_DIR}/${FNAME} ${CMAKE_CURRENT_SOURCE_DIR}/${FILE}
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/${FNAME} ${SHELL_DIR}/${FNAME} COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/${FNAME} ${SHELL_DIR}/${FNAME}
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/${FNAME} ${CMAKE_CURRENT_SOURCE_DIR}/obj/${FNAME} COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/${FNAME} ${CMAKE_CURRENT_SOURCE_DIR}/obj/${FNAME}
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${FILE} ${SHELL_DIR}/lean ${EXTRA_DEPS}) DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${FILE} ${SHELL_DIR}/lean ${EXTRA_DEPS})

View file

@ -16,20 +16,13 @@ Author: Leonardo de Moura
#define LEAN_DEFAULT_PARSER_SHOW_ERRORS true #define LEAN_DEFAULT_PARSER_SHOW_ERRORS true
#endif #endif
#ifndef LEAN_DEFAULT_PARSER_VERBOSE
#define LEAN_DEFAULT_PARSER_VERBOSE true
#endif
namespace lean { namespace lean {
// ========================================== // ==========================================
// Parser configuration options // Parser configuration options
static name g_parser_verbose {"lean", "parser", "verbose"};
static name g_parser_show_errors {"lean", "parser", "show_errors"}; static name g_parser_show_errors {"lean", "parser", "show_errors"};
RegisterBoolOption(g_parser_verbose, LEAN_DEFAULT_PARSER_VERBOSE, "(lean parser) disable/enable parser verbose messages");
RegisterBoolOption(g_parser_show_errors, LEAN_DEFAULT_PARSER_SHOW_ERRORS, "(lean parser) display error messages in the regular output channel"); RegisterBoolOption(g_parser_show_errors, LEAN_DEFAULT_PARSER_SHOW_ERRORS, "(lean parser) display error messages in the regular output channel");
bool get_parser_verbose(options const & opts) { return opts.get_bool(g_parser_verbose, LEAN_DEFAULT_PARSER_VERBOSE); }
bool get_parser_show_errors(options const & opts) { return opts.get_bool(g_parser_show_errors, LEAN_DEFAULT_PARSER_SHOW_ERRORS); } bool get_parser_show_errors(options const & opts) { return opts.get_bool(g_parser_show_errors, LEAN_DEFAULT_PARSER_SHOW_ERRORS); }
// ========================================== // ==========================================
@ -108,7 +101,7 @@ double parser_imp::parse_double() {
} }
void parser_imp::updt_options() { void parser_imp::updt_options() {
m_verbose = get_parser_verbose(m_io_state.get_options()); m_verbose = get_verbose(m_io_state.get_options());
m_show_errors = get_parser_show_errors(m_io_state.get_options()); m_show_errors = get_parser_show_errors(m_io_state.get_options());
} }

View file

@ -67,6 +67,7 @@ static void display_help(std::ostream & out) {
std::cout << " it is useful for interrupting non-terminating user scripts,\n"; std::cout << " it is useful for interrupting non-terminating user scripts,\n";
std::cout << " 0 means 'do not check'.\n"; std::cout << " 0 means 'do not check'.\n";
std::cout << " --trust -t trust imported modules\n"; std::cout << " --trust -t trust imported modules\n";
std::cout << " --quiet -q do not print verbose messages\n";
#if defined(LEAN_USE_BOOST) #if defined(LEAN_USE_BOOST)
std::cout << " --tstack=num -s thread stack size in Kb\n"; std::cout << " --tstack=num -s thread stack size in Kb\n";
#endif #endif
@ -98,6 +99,7 @@ static struct option g_long_options[] = {
{"githash", no_argument, 0, 'g'}, {"githash", no_argument, 0, 'g'},
{"output", required_argument, 0, 'o'}, {"output", required_argument, 0, 'o'},
{"trust", no_argument, 0, 't'}, {"trust", no_argument, 0, 't'},
{"quiet", no_argument, 0, 'q'},
#if defined(LEAN_USE_BOOST) #if defined(LEAN_USE_BOOST)
{"tstack", required_argument, 0, 's'}, {"tstack", required_argument, 0, 's'},
#endif #endif
@ -111,10 +113,11 @@ int main(int argc, char ** argv) {
bool no_kernel = false; bool no_kernel = false;
bool export_objects = false; bool export_objects = false;
bool trust_imported = false; bool trust_imported = false;
bool quiet = false;
std::string output; std::string output;
input_kind default_k = input_kind::Lean; // default input_kind default_k = input_kind::Lean; // default
while (true) { while (true) {
int c = getopt_long(argc, argv, "tnlupgvhc:012s:012o:", g_long_options, NULL); int c = getopt_long(argc, argv, "qtnlupgvhc:012s:012o:", g_long_options, NULL);
if (c == -1) if (c == -1)
break; // end of command line break; // end of command line
switch (c) { switch (c) {
@ -155,6 +158,9 @@ int main(int argc, char ** argv) {
case 't': case 't':
trust_imported = true; trust_imported = true;
break; break;
case 'q':
quiet = true;
break;
default: default:
std::cerr << "Unknown command line option\n"; std::cerr << "Unknown command line option\n";
display_help(std::cerr); display_help(std::cerr);
@ -173,6 +179,8 @@ int main(int argc, char ** argv) {
environment env; environment env;
env->set_trusted_imported(trust_imported); env->set_trusted_imported(trust_imported);
io_state ios = init_frontend(env, no_kernel); io_state ios = init_frontend(env, no_kernel);
if (quiet)
ios.set_option("verbose", false);
script_state S; script_state S;
shell sh(env, &S); shell sh(env, &S);
int status = sh() ? 0 : 1; int status = sh() ? 0 : 1;
@ -189,6 +197,8 @@ int main(int argc, char ** argv) {
environment env; environment env;
env->set_trusted_imported(trust_imported); env->set_trusted_imported(trust_imported);
io_state ios = init_frontend(env, no_kernel); io_state ios = init_frontend(env, no_kernel);
if (quiet)
ios.set_option("verbose", false);
script_state S; script_state S;
bool ok = true; bool ok = true;
for (int i = optind; i < argc; i++) { for (int i = optind; i < argc; i++) {

View file

@ -11,7 +11,15 @@ Author: Leonardo de Moura
#include "util/sexpr/option_declarations.h" #include "util/sexpr/option_declarations.h"
#include "util/sexpr/sexpr_fn.h" #include "util/sexpr/sexpr_fn.h"
#ifndef LEAN_DEFAULT_VERBOSE
#define LEAN_DEFAULT_VERBOSE true
#endif
namespace lean { namespace lean {
static name g_verbose("verbose");
RegisterBoolOption(g_verbose, LEAN_DEFAULT_VERBOSE, "disable/enable verbose messages");
bool get_verbose(options const & opts) { return opts.get_bool(g_verbose, LEAN_DEFAULT_VERBOSE); }
std::ostream & operator<<(std::ostream & out, option_kind k) { std::ostream & operator<<(std::ostream & out, option_kind k) {
switch (k) { switch (k) {
case BoolOption: out << "Bool"; break; case BoolOption: out << "Bool"; break;

View file

@ -70,6 +70,7 @@ public:
friend bool operator==(options const & a, options const & b) { return a.m_value == b.m_value; } friend bool operator==(options const & a, options const & b) { return a.m_value == b.m_value; }
}; };
bool get_verbose(options const & opts);
inline options read_options(deserializer & d) { return options(read_sexpr(d)); } inline options read_options(deserializer & d) { return options(read_sexpr(d)); }
inline deserializer & operator>>(deserializer & d, options & o) { o = read_options(d); return d; } inline deserializer & operator>>(deserializer & d, options & o) { o = read_options(d); return d; }

View file

@ -13,7 +13,7 @@ fi
NUM_ERRORS=0 NUM_ERRORS=0
for f in `ls *.lean`; do for f in `ls *.lean`; do
echo "-- testing $f" echo "-- testing $f"
$LEAN config.lean $f &> $f.produced.out $LEAN -t config.lean $f &> $f.produced.out
if test -f $f.expected.out; then if test -f $f.expected.out; then
if diff -I "executing external script" $f.produced.out $f.expected.out; then if diff -I "executing external script" $f.produced.out $f.expected.out; then
echo "-- checked" echo "-- checked"

View file

@ -1,5 +1,5 @@
import if_then_else import if_then_else
set_option lean::parser::verbose false. set_option verbose false.
notation 10 if _ then _ : implies. notation 10 if _ then _ : implies.
print environment 1. print environment 1.
print if true then false. print if true then false.

View file

@ -8,7 +8,7 @@ LEAN=$1
NUM_ERRORS=0 NUM_ERRORS=0
for f in `ls *.lua`; do for f in `ls *.lua`; do
echo "-- testing $f" echo "-- testing $f"
if $LEAN extra.lua $f > $f.produced.out; then if $LEAN -t extra.lua $f > $f.produced.out; then
echo "-- worked" echo "-- worked"
else else
echo "ERROR executing $f, produced output is at $f.produced.out" echo "ERROR executing $f, produced output is at $f.produced.out"