X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fscores.cc;h=06a65014a9419f735257d1dd2028b2d59d94bee6;hb=d199e9078b3e945b8b77715951f8cdc69165a05f;hp=81ac087765c55334b634fe70d4f5fcf6a8335d9d;hpb=fd35c1854983063501a1152c3827530e866dcde3;p=lilypond.git diff --git a/lily/scores.cc b/lily/scores.cc index 81ac087765..06a65014a9 100644 --- a/lily/scores.cc +++ b/lily/scores.cc @@ -3,53 +3,164 @@ source file of the GNU LilyPond music typesetter - (c) 1997 Han-Wen Nienhuys + (c) 1997--2001 Han-Wen Nienhuys */ +#include "config.h" +#include +#include +#if HAVE_SYS_STAT_H +#include +#endif +#include + +#include #include "main.hh" #include "score.hh" #include "string.hh" #include "paper-def.hh" -#include "header.hh" +#include "scope.hh" #include "debug.hh" #include "parray.hh" +#include "file-path.hh" +#include "file-results.hh" +#include "my-lily-parser.hh" +#include "source.hh" +#include "lily-version.hh" +#include "scm-hash.hh" + +Sources* source_global_l = 0; +Array inclusion_global_array; +Array target_str_global_array; +Link_array score_global_array; +Scheme_hash_table * global_header_p; + + +void write_dependency_file (String fn, Array targets, + Array deps) +{ + const int WRAPWIDTH = 65; + + progress_indication (_f ("dependencies output to `%s'...", fn.ch_C ())); + progress_indication ("\n"); + ofstream f (fn.ch_C ()); + if (!f) + warning (_f ("can't open file: `%s'", fn)); + + f << "# Generated automatically by: " << gnu_lilypond_version_str () << '\n'; + String out; + for (int i=0; i < targets.size (); i ++) + out += dependency_prefix_global + targets[i] + " "; + out += ": "; +#if 0 + struct stat stat_buf; +#endif + for (int i=0; i < deps.size (); i ++) + { + if (out.length_i () > WRAPWIDTH) + { + f << out << "\\\n"; + out = " "; + } + String dep = deps[i]; + if (!dependency_prefix_global.empty_b ()) + { +#if 0//thinko? + if (stat (dep.ch_C (), &stat_buf) == -1 && errno == ENOENT) + ; //make emacs happy +#else + if (dep.index_i ('/') < 0) +#endif + dep = dependency_prefix_global + dep; + } + out += " " + dep; + } + f << out << endl; +} + +void +do_deps () +{ + if (dependency_global_b) + { + Path p = split_path (output_name_global); + p.ext = "dep"; + write_dependency_file (p.str (), + target_str_global_array, + inclusion_global_array); + } +} -static Link_array global_score_array; -String default_out_fn = "lelie"; void -do_scores() +do_scores () { - for (int i=0; i < global_score_array.size(); i++) + if (!global_header_p) + global_header_p = new Scheme_hash_table; + for (int i=0; i < score_global_array.size (); i++) { - Score *&is_p = global_score_array[i]; - if (is_p->header_p_) - is_p->header_p_->lily_id_str_ = "Lily was here, " + - get_version_number_str(); + Score* is_p = score_global_array[i]; + if (is_p->errorlevel_i_) { - is_p->warning (_("Score contains errors. Will not process it. ")); - exit_status_i_ |= 1; + is_p->warning (_ ("Score contains errors; will not process it")); + exit_status_global |= 1; } else { - is_p->process(); + is_p->process (); } - delete is_p; - is_p =0; - } - global_score_array.clear(); + do_deps (); } void -add_score (Score * s) +clear_scores () { - global_score_array.push (s); + for (int i=0; i < score_global_array.size (); i++) + scm_gc_unprotect_object (score_global_array[i]->self_scm ()); + score_global_array.clear (); + + inclusion_global_array.clear (); + if (global_header_p) + scm_gc_unprotect_object (global_header_p ->self_scm ()); + global_header_p =0; } + void -set_default_output (String s) +do_one_file (String init_str, String file_str) { - default_out_fn = s; + if (init_str.length_i () && global_path.find (init_str).empty_b ()) + { + warning (_f ("can't find file: `%s'", init_str)); + warning (_f ("(search path: `%s')", global_path.str ().ch_C ())); + return; + } + if ((file_str != "-") && global_path.find (file_str).empty_b ()) + { + warning (_f ("can't find file: `%s'", file_str)); + return; + } + + Sources sources; + source_global_l = &sources; + source_global_l->set_path (&global_path); + { + My_lily_parser parser (source_global_l); + parser.set_version_check (false); + progress_indication (_f ("Now processing: `%s'", file_str.ch_C ())); + progress_indication ("\n"); + parser.parse_file (init_str, file_str); + + if (parser.error_level_i_) + { + exit_status_global = 1; + } + else + do_scores (); + clear_scores (); + } + source_global_l = 0; } +