2005-07-19 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ * configure.in (reloc_b): add --enable-static-gxx to statically
+ link to libstdc++
+
+ * lily/GNUmakefile (static-gxx-libs): new target
+ static-gxx-libs. Create link to libstdc++.a
+
+ * lily/new-lyric-combine-music-iterator.cc: rename to Lyric_combine_music_iterator
+
+ * lily/lyric-combine-music-iterator.cc
+ (Old_lyric_combine_music_iterator): rename to Old_lyric_combine_music_iterator
+
* lily/*-engraver.cc (various): remove double use of
PRECOMPUTED_VIRTUAL function: only use
start_translation_timestep() and stop_translation_timestep(), not
when the original part takes over again, this should be marked with
the name of the original instrument.
- @c really? Are you sure about that last point? I'll check after 3.0 -gp
+@c really? Are you sure about that last point? I'll check after 3.0 -gp
@c Yes, this is good practice. Otherwise, the start of the original
@c part can only be seen from the font size. This is not good enough
@c -hwn
- any other changes introduced by the cued part should also be
+Any other changes introduced by the cued part should also be
undone. For example, if the cued instrument plays in a different clef,
the original clef should be stated once again.
YACC = @YACC@
ZIP = @ZIP@
FLEXLEXER_PATH = @FLEXLEXER_PATH@
+
+LINK_GXX_STATICALLY = @LINK_GXX_STATICALLY@
[ --enable-relocation compile with dynamic relocation. Default: off],
[reloc_b=$enableval])
+AC_SUBST(LINK_GXX_STATICALLY)
+LINK_GXX_STATICALLY=no
+AC_ARG_ENABLE(static-gxx,
+ [ --enable-static-gxx link libstdc++.a statically. Default: off],
+ [LINK_GXX_STATICALLY=$enableval])
+
# must come before any header checks
STEPMAKE_COMPILE
# New makeinfo for multi-page website docs Simply always require new
# makeinfo should avoid bug reports; if people want to build lily
# without the docs, they can find this comment and use an older
-# makeinfo -- but hopefully won't report makeinfo problems.
+# makeinfo--but hopefully won't report makeinfo problems.
STEPMAKE_PROGS(MAKEINFO, makeinfo, REQUIRED, 4.7)
if test "$optimise_b" = yes; then
\context Staff #(set-accidental-style 'modern)
\melody >>
\lyricsto "singer" \new Lyrics \firstVerse
-% \lyricsto "singer" \new Lyrics \secondVerse
+ \lyricsto "singer" \new Lyrics \secondVerse
\new PianoStaff <<
\set PianoStaff.instrument = \markup {
\bold
MODULE_LIBS= $(depth)/flower $(depth)/kpath-guile
MODULE_INCLUDES= $(depth)/flower/include
+
+# need this to convert between function pointers and member function pointers.
MODULE_CXXFLAGS= -Wno-pmf-conversions
+
HELP2MAN_EXECS = lilypond
STEPMAKE_TEMPLATES=c c++ executable po help2man
include $(depth)/make/stepmake.make
ifeq ($(HAVE_LIBKPATHSEA_SO),no)
-MODULE_LDFLAGS+= $(KPATHSEA_LIBS)
+MODULE_LDFLAGS += $(KPATHSEA_LIBS)
endif
+ifeq ($(LINK_GXX_STATICALLY),yes)
+MODULE_LDFLAGS += -L$(outdir) -static-libgcc
+endif
+
# for profiling, link guile statically:
default:
+
+$(outdir)/libstdc++.a:
+ ln -s `$(CXX) -print-file-name=libstdc++.a` $(outdir)/
+
+ifeq ($(LINK_GXX_STATICALLY),yes)
+$(outdir)/lilypond: $(outdir)/libstdc++.a
+endif
+
# force these: Make can't know these have to be generated in advance
$(outdir)/lily-parser.o: $(outdir)/parser.hh
$(outdir)/lily-lexer.o: $(outdir)/parser.hh $(outdir)/FlexLexer.h
/*
- lyric-combine-music-iterator.cc -- implement Lyric_combine_music_iterator
+ lyric-combine-music-iterator.cc -- implement Old_lyric_combine_music_iterator
source file of the GNU LilyPond music typesetter
#include "grob.hh"
#include "music-iterator.hh"
-class Lyric_combine_music_iterator : public Music_iterator
+class Old_lyric_combine_music_iterator : public Music_iterator
{
public:
- Lyric_combine_music_iterator ();
- Lyric_combine_music_iterator (Lyric_combine_music_iterator const &src);
+ Old_lyric_combine_music_iterator ();
+ Old_lyric_combine_music_iterator (Old_lyric_combine_music_iterator const &src);
DECLARE_SCHEME_CALLBACK (constructor, ());
protected:
virtual void construct_children ();
virtual void derived_mark () const;
virtual void derived_substitute (Context *, Context *);
private:
- bool get_busy_status ()const;
+ bool get_busy_status () const;
bool melisma_busy ();
Music *get_combine_lyrics () const;
Music *get_combine_music () const;
Music *busy_req;
Music *melisma_playing_req;
-Lyric_combine_music_iterator::Lyric_combine_music_iterator ()
+Old_lyric_combine_music_iterator::Old_lyric_combine_music_iterator ()
{
music_iter_ = 0;
lyric_iter_ = 0;
}
Moment
-Lyric_combine_music_iterator::pending_moment () const
+Old_lyric_combine_music_iterator::pending_moment () const
{
Moment musnext = music_iter_->pending_moment ();
return musnext;
}
bool
-Lyric_combine_music_iterator::ok () const
+Old_lyric_combine_music_iterator::ok () const
{
return music_iter_->ok ();
}
void
-Lyric_combine_music_iterator::derived_mark ()const
+Old_lyric_combine_music_iterator::derived_mark ()const
{
if (music_iter_)
scm_gc_mark (music_iter_->self_scm ());
}
void
-Lyric_combine_music_iterator::derived_substitute (Context *f, Context *t)
+Old_lyric_combine_music_iterator::derived_substitute (Context *f, Context *t)
{
if (music_iter_)
music_iter_->substitute_outlet (f, t);
}
Music *
-Lyric_combine_music_iterator::get_combine_music () const
+Old_lyric_combine_music_iterator::get_combine_music () const
{
SCM l = get_music ()->get_property ("elements");
if (!scm_is_pair (l))
}
Music *
-Lyric_combine_music_iterator::get_combine_lyrics () const
+Old_lyric_combine_music_iterator::get_combine_lyrics () const
{
SCM l = get_music ()->get_property ("elements");
if (!scm_is_pair (l))
}
void
-Lyric_combine_music_iterator::construct_children ()
+Old_lyric_combine_music_iterator::construct_children ()
{
music_iter_ = unsmob_iterator (get_iterator (get_combine_music ()));
lyric_iter_ = unsmob_iterator (get_iterator (get_combine_lyrics ()));
}
bool
-Lyric_combine_music_iterator::get_busy_status () const
+Old_lyric_combine_music_iterator::get_busy_status () const
{
/*
We have to use both the event and the busyGrobs queue. The
}
bool
-Lyric_combine_music_iterator::melisma_busy ()
+Old_lyric_combine_music_iterator::melisma_busy ()
{
/* We cannot read the property, since music_iter_->get_outlet () might
not be the context that sets the melisma properties, but rather a
}
void
-Lyric_combine_music_iterator::process (Moment m)
+Old_lyric_combine_music_iterator::process (Moment m)
{
Moment my_next = music_iter_->pending_moment ();
if (my_next > m)
}
void
-Lyric_combine_music_iterator::do_quit ()
+Old_lyric_combine_music_iterator::do_quit ()
{
if (music_iter_)
music_iter_->quit ();
}
Music_iterator *
-Lyric_combine_music_iterator::try_music_in_children (Music *m) const
+Old_lyric_combine_music_iterator::try_music_in_children (Music *m) const
{
Music_iterator *i = music_iter_->try_music (m);
if (i)
return lyric_iter_->try_music (m);
}
-IMPLEMENT_CTOR_CALLBACK (Lyric_combine_music_iterator);
+IMPLEMENT_CTOR_CALLBACK (Old_lyric_combine_music_iterator);
#include "engraver.hh"
#include "grob.hh"
#include "context.hh"
+#include "translator.icc"
/**
Signal existence of melismas.
event_ = 0;
}
-#include "translator.icc"
ADD_TRANSLATOR (Melisma_translator,
/* descr */ "This translator collects melisma information about ties, beams, and user settings (@code{melismaBusy}, and signals it to the @code{\addlyrics} code. ",
/*
- new-lyric-combine-iterator.cc -- implement New_lyric_combine_music_iterator
+ new-lyric-combine-iterator.cc -- implement Lyric_combine_music_iterator
source file of the GNU LilyPond music typesetter
#include "music-iterator.hh"
#include "input.hh"
-class New_lyric_combine_music_iterator : public Music_iterator
+class Lyric_combine_music_iterator : public Music_iterator
{
public:
- New_lyric_combine_music_iterator ();
- New_lyric_combine_music_iterator (New_lyric_combine_music_iterator const &src);
+ Lyric_combine_music_iterator ();
+ Lyric_combine_music_iterator (Lyric_combine_music_iterator const &src);
DECLARE_SCHEME_CALLBACK (constructor, ());
protected:
virtual void construct_children ();
static Music *start_ev;
static Music *melisma_playing_ev;
-New_lyric_combine_music_iterator::New_lyric_combine_music_iterator ()
+Lyric_combine_music_iterator::Lyric_combine_music_iterator ()
{
music_found_ = false;
made_association_ = false;
}
bool
-New_lyric_combine_music_iterator::start_new_syllable ()
+Lyric_combine_music_iterator::start_new_syllable ()
{
bool b = music_context_->try_music (busy_ev);
}
Moment
-New_lyric_combine_music_iterator::pending_moment () const
+Lyric_combine_music_iterator::pending_moment () const
{
Moment m;
}
bool
-New_lyric_combine_music_iterator::run_always () const
+Lyric_combine_music_iterator::run_always () const
{
return true;
}
bool
-New_lyric_combine_music_iterator::ok () const
+Lyric_combine_music_iterator::ok () const
{
return lyric_iter_ && lyric_iter_->ok ();
}
void
-New_lyric_combine_music_iterator::derived_mark ()const
+Lyric_combine_music_iterator::derived_mark ()const
{
if (lyric_iter_)
scm_gc_mark (lyric_iter_->self_scm ());
}
void
-New_lyric_combine_music_iterator::derived_substitute (Context *f, Context *t)
+Lyric_combine_music_iterator::derived_substitute (Context *f, Context *t)
{
if (lyric_iter_)
lyric_iter_->substitute_outlet (f, t);
}
void
-New_lyric_combine_music_iterator::construct_children ()
+Lyric_combine_music_iterator::construct_children ()
{
Music *m = unsmob_music (get_music ()->get_property ("element"));
lyric_iter_ = unsmob_iterator (get_iterator (m));
}
void
-New_lyric_combine_music_iterator::find_voice ()
+Lyric_combine_music_iterator::find_voice ()
{
SCM voice_name = lyricsto_voice_name_;
SCM running = lyrics_context_ ? lyrics_context_->get_property ("associatedVoice") : SCM_EOL;
}
void
-New_lyric_combine_music_iterator::process (Moment)
+Lyric_combine_music_iterator::process (Moment)
{
find_voice ();
if (!music_context_)
}
void
-New_lyric_combine_music_iterator::do_quit ()
+Lyric_combine_music_iterator::do_quit ()
{
if (!music_found_)
{
}
Music_iterator *
-New_lyric_combine_music_iterator::try_music_in_children (Music *m) const
+Lyric_combine_music_iterator::try_music_in_children (Music *m) const
{
return lyric_iter_->try_music (m);
}
-IMPLEMENT_CTOR_CALLBACK (New_lyric_combine_music_iterator);
+IMPLEMENT_CTOR_CALLBACK (Lyric_combine_music_iterator);
#include "audio-element.hh"
#include "warn.hh"
-#include "translator.icc"
-
ADD_TRANSLATOR_GROUP (Performer_group_performer,
/* descr */ "",
/* creats*/ "",
ptrs[STOP_TRANSLATION_TIMESTEP] = &recording_engraver;
}
-#include "translator.icc"
-
ADD_TRANSLATOR_GROUP (Recording_group_engraver,
"Engraver_group_engraver that records all music events "
"for this context. Calls the procedure "
return false;
}
-#include "translator.icc"
-
ADD_TRANSLATOR_GROUP (Score_engraver,
/* descr */ "Top level engraver. Takes care of generating columns and the complete system (ie. System) "
"\n\n "
# In fact, do not take out the spaces between % and { in the above comment,
# because RPM will gladly do a substitution anyway.
-./configure --without-kpathsea --disable-checking --prefix=%{_prefix} --enable-optimising
+# compile with static libstdc++ for better platform portability.
+./configure --enable-static-gxx --without-kpathsea --disable-checking --prefix=%{_prefix} --enable-optimising
make all
(types . (general-music lyric-combine-music))
(length-callback . ,Lyric_combine_music::length_callback)
(start-callback . ,Music_sequence::first_start_callback)
- (iterator-ctor . ,Lyric_combine_music_iterator::constructor)
+ (iterator-ctor . ,Old_lyric_combine_music_iterator::constructor)
))
(LyricCombineMusic
Syntax @var{\\lyricsto }@var{voicename} @var{lyrics}.")
(length . ,(ly:make-moment 0 1))
(types . (general-music lyric-combine-music))
- (iterator-ctor . ,New_lyric_combine_music_iterator::constructor)
+ (iterator-ctor . ,Lyric_combine_music_iterator::constructor)
))
(LyricEvent