diff --git a/src/script_opt/ScriptOpt.cc b/src/script_opt/ScriptOpt.cc index 05ef655016..57abebda1a 100644 --- a/src/script_opt/ScriptOpt.cc +++ b/src/script_opt/ScriptOpt.cc @@ -286,9 +286,6 @@ static void init_options() if ( analysis_options.use_CPP && generating_CPP ) reporter->FatalError("generating C++ incompatible with using C++"); - if ( analysis_options.use_CPP && ! CPP_init_hook ) - reporter->FatalError("no C++ functions available to use"); - auto usage = getenv("ZEEK_USAGE_ISSUES"); if ( usage ) @@ -336,10 +333,7 @@ static void init_options() static void report_CPP() { if ( ! CPP_init_hook ) - { - printf("no C++ script bodies available\n"); - exit(0); - } + reporter->FatalError("no C++ script bodies available"); printf("C++ script bodies available that match loaded scripts:\n"); @@ -373,6 +367,9 @@ static void report_CPP() static void use_CPP() { + if ( ! CPP_init_hook ) + reporter->FatalError("no C++ functions available to use"); + for ( auto& f : funcs ) { auto hash = f.Profile()->HashVal(); @@ -553,7 +550,14 @@ void analyze_scripts() auto pfs = std::make_unique(funcs, is_CPP_compilable, false); if ( CPP_init_hook ) + { (*CPP_init_hook)(); + if ( compiled_scripts.empty() ) + // The initialization failed to produce any + // script bodies. Make this easily available + // to subsequent checks. + CPP_init_hook = nullptr; + } if ( analysis_options.report_CPP ) {