@echo ' grep sourcefilename `grep -L systems.texi out/lybook-testdb/*/*log|sed s/log/ly/g`'
@echo
$(MAKE) -C input/regression out=test local-test
+ $(MAKE) -C input/regression/midi out=test local-test
$(MAKE) -C input/regression/musicxml out=test local-test
$(MAKE) -C input/regression/abc2ly out=test local-test
$(MAKE) -C input/regression/lilypond-book out=test local-test
$(MAKE)
$(MAKE) test
$(MAKE) out=test -C input/regression local-test-baseline
+ $(MAKE) out=test -C input/regression/midi local-test-baseline
$(MAKE) out=test -C input/regression/musicxml local-test-baseline
$(MAKE) out=test -C input/regression/abc2ly local-test-baseline
$(MAKE) out=test -C input/regression/lilypond-book local-test-baseline
include $(depth)/make/stepmake.make
TITLE=LilyPond Regression Tests
-SUBDIRS=musicxml abc2ly lilypond-book
+SUBDIRS=midi musicxml abc2ly lilypond-book
--- /dev/null
+depth = ../../..
+
+STEPMAKE_TEMPLATES=documentation texinfo tex
+LOCALSTEPMAKE_TEMPLATES=lilypond ly lysdoc midi
+
+TEXI2HTML_FLAGS += --nomenu
+
+TMP = $(sort $(LY_FILES) $(TEXINFO_SOURCES) )
+COLLATED_FILES = ${TMP:%.ly=$(outdir)/%-midi.ly}
+
+include $(depth)/make/stepmake.make
+
+TITLE=MIDI test suite
--- /dev/null
+% Lily was here -- automatically converted by ../../../scripts/midi2ly.py from out/initial-key.midi
+\version "2.13.53"
+
+\layout {
+ \context {
+ \Voice
+ \remove "Note_heads_engraver"
+ \consists "Completion_heads_engraver"
+ \remove "Rest_engraver"
+ \consists "Completion_rest_engraver"
+ }
+}
+
+% included from ./out/initial-key.header
+\header {
+texidoc="keys work in MIDI, this is a-minor"
+options=""
+}
+% end
+
+trackAchannelA = {
+
+
+ \key a \minor
+
+ % [SEQUENCE_TRACK_NAME] control track
+
+ % [TEXT_EVENT] creator:
+
+ % [TEXT_EVENT] GNU LilyPond 2.13.54
+
+ \time 4/4
+
+ \tempo 4 = 60
+
+}
+
+trackA = <<
+ \context Voice = voiceA \trackAchannelA
+>>
+
+
+trackBchannelA = \relative c {
+
+ \set Staff.instrumentName = "trackB:voiceA"
+ a'4 b c d
+ | % 2
+ e f gis a
+ | % 3
+
+}
+
+trackB = <<
+ \context Voice = voiceA \trackBchannelA
+>>
+
+
+trackCchannelA = {
+
+ \set Staff.instrumentName = "trackB:"
+
+
+ \key a \minor
+
+}
+
+trackC = <<
+ \context Voice = voiceA \trackCchannelA
+>>
+
+
+\score {
+ <<
+ \context Staff=trackB \trackA
+ \context Staff=trackB \trackB
+ >>
+ \layout {}
+ \midi {}
+}
--- /dev/null
+% Lily was here -- automatically converted by ../../../scripts/midi2ly.py from out-www/option-key.midi
+\version "2.13.53"
+
+\layout {
+ \context {
+ \Voice
+ \remove "Note_heads_engraver"
+ \consists "Completion_heads_engraver"
+ \remove "Rest_engraver"
+ \consists "Completion_rest_engraver"
+ }
+}
+
+% included from ./out-www/option-key.header
+\header {
+texidoc="--key works in midi2ly this is F major"
+options="--key=-1"
+}
+% end
+
+trackAchannelA = {
+
+
+ % [SEQUENCE_TRACK_NAME] control track
+
+ % [TEXT_EVENT] creator:
+
+ % [TEXT_EVENT] GNU LilyPond 2.13.54
+
+ \time 4/4
+
+ \tempo 4 = 60
+
+}
+
+trackA = <<
+ \context Voice = voiceA \trackAchannelA
+>>
+
+
+trackBchannelA = \relative c {
+
+ \set Staff.instrumentName = "trackB:voiceA"
+ f'4 g a bes
+ | % 2
+ c d e f
+ | % 3
+
+}
+
+trackB = <<
+ \context Voice = voiceA \trackBchannelA
+>>
+
+
+trackCchannelA = {
+
+ \set Staff.instrumentName = "trackB:"
+
+
+}
+
+trackC = <<
+ \context Voice = voiceA \trackCchannelA
+>>
+
+
+\score {
+ <<
+ \context Staff=trackB \trackA
+ \context Staff=trackB \trackB
+ >>
+ \layout {}
+ \midi {}
+}
--- /dev/null
+% Lily was here -- automatically converted by ../../../scripts/midi2ly.py from out-www/rest.midi
+\version "2.13.53"
+
+\layout {
+ \context {
+ \Voice
+ \remove "Note_heads_engraver"
+ \consists "Completion_heads_engraver"
+ \remove "Rest_engraver"
+ \consists "Completion_rest_engraver"
+ }
+}
+
+% included from ./out-www/rest.header
+\header {
+texidoc="midi2ly identifies rests"
+options=""
+}
+% end
+
+trackAchannelA = {
+
+ % [SEQUENCE_TRACK_NAME] control track
+
+ % [TEXT_EVENT] creator:
+
+ % [TEXT_EVENT] GNU LilyPond 2.13.54
+
+ \time 4/4
+
+ \tempo 4 = 60
+
+}
+
+trackA = <<
+ \context Voice = voiceA \trackAchannelA
+>>
+
+
+trackBchannelA = \relative c {
+ r4
+ \set Staff.instrumentName = "trackB:voiceA"
+ a r4 a
+ | % 2
+
+}
+
+trackB = <<
+
+ \clef bass
+
+ \context Voice = voiceA \trackBchannelA
+>>
+
+
+\score {
+ <<
+ \context Staff=trackB \trackA
+ \context Staff=trackB \trackB
+ >>
+ \layout {}
+ \midi {}
+}
--- /dev/null
+% Lily was here -- automatically converted by ../../../scripts/midi2ly.py from out-www/voice-2.midi
+\version "2.13.53"
+
+\layout {
+ \context {
+ \Voice
+ \remove "Note_heads_engraver"
+ \consists "Completion_heads_engraver"
+ \remove "Rest_engraver"
+ \consists "Completion_rest_engraver"
+ }
+}
+
+% included from ./out-www/voice-2.header
+\header {
+texidoc="midi2ly maps two voices nicely on once staff as \voiceOne, \voiceTwo"
+options=""
+}
+% end
+
+trackAchannelA = {
+
+ % [SEQUENCE_TRACK_NAME] control track
+
+ % [TEXT_EVENT] creator:
+
+ % [TEXT_EVENT] GNU LilyPond 2.13.54
+
+ \time 4/4
+
+ \tempo 4 = 60
+
+}
+
+trackA = <<
+ \context Voice = voiceA \trackAchannelA
+>>
+
+
+trackBchannelA = \relative c {
+ \voiceOne
+
+ \set Staff.instrumentName = ":1"
+ e''4 e e e
+ | % 2
+
+}
+
+trackBchannelB = \relative c {
+ \voiceTwo
+ f' f f f
+ | % 2
+
+}
+
+trackB = <<
+ \context Voice = voiceA \trackBchannelA
+ \context Voice = voiceB \trackBchannelB
+>>
+
+
+\score {
+ <<
+ \set Score.midiChannelMapping = #'voice
+ \context Staff=trackB \trackA
+ \context Staff=trackB \trackB
+ >>
+ \layout {}
+ \midi {}
+}
--- /dev/null
+% Lily was here -- automatically converted by ../../../scripts/midi2ly.py from out-www/voice-4.midi
+\version "2.13.53"
+
+\layout {
+ \context {
+ \Voice
+ \remove "Note_heads_engraver"
+ \consists "Completion_heads_engraver"
+ \remove "Rest_engraver"
+ \consists "Completion_rest_engraver"
+ }
+}
+
+% included from ./out-www/voice-4.header
+\header {
+texidoc="midi2ly maps four voices nicely on once staff as \voiceOne, \voiceTwo, \voiceThree, \voiceFour"
+options=""
+}
+% end
+
+trackAchannelA = {
+
+ % [SEQUENCE_TRACK_NAME] control track
+
+ % [TEXT_EVENT] creator:
+
+ % [TEXT_EVENT] GNU LilyPond 2.13.54
+
+ \time 4/4
+
+ \tempo 4 = 60
+
+}
+
+trackA = <<
+ \context Voice = voiceA \trackAchannelA
+>>
+
+
+trackBchannelA = \relative c {
+ \voiceOne
+
+ \set Staff.instrumentName = ":1"
+ <c''' a >2 b
+ | % 2
+
+}
+
+trackBchannelB = \relative c {
+ \voiceThree
+ c''4. d8 e4 f
+ | % 2
+
+}
+
+trackBchannelC = \relative c {
+ \voiceFour
+ d'1
+ | % 2
+
+}
+
+trackBchannelD = \relative c {
+ \voiceTwo
+ c'4 c2 c4
+ | % 2
+
+}
+
+trackB = <<
+ \context Voice = voiceA \trackBchannelA
+ \context Voice = voiceB \trackBchannelB
+ \context Voice = voiceC \trackBchannelC
+ \context Voice = voiceD \trackBchannelD
+>>
+
+
+\score {
+ <<
+ \set Score.midiChannelMapping = #'voice
+ \context Staff=trackB \trackA
+ \context Staff=trackB \trackB
+ >>
+ \layout {}
+ \midi {}
+}
the-script-dir=$(wildcard $(script-dir))
ABC2LY = $(script-dir)/abc2ly.py
+MIDI2LY = $(script-dir)/midi2ly.py
MUSICXML2LY = $(script-dir)/musicxml2ly.py
CONVERT_LY = $(script-dir)/convert-ly.py
LILYPOND_BOOK = $(script-dir)/lilypond-book.py
--- /dev/null
+.SUFFIXES: .midi
+
+$(outdir)/%.ly: %.midi
+ $(PYTHON) $(MIDI2LY) -o $(outdir) $<
+
+$(outdir)/%.midi: %.ly $(LILYPOND_BINARY)
+ touch $(foreach f, $(HEADER_FIELDS), $(outdir)/$*.$f)
+ $(LILYPOND_BINARY) $(HEADER_FIELDS:%=-H %) -o $(outdir) $<
+
+$(outdir)/%-midi.ly: $(outdir)/%.midi $(MIDI2LY)
+ (echo '\header {'; for f in $(HEADER_FIELDS); do echo -n $$f'="'; cat $(outdir)/$*.$$f; echo '"'; done; echo '}') > $(outdir)/$*.header
+ $(PYTHON) $(MIDI2LY) $(shell cat $(outdir)/$*.options) --include-header=$(outdir)/$*.header -o $(outdir) $<
+
+$(outdir)/%.diff: %.ly $(outdir)/%-midi.ly
+ $(DIFF) -puN $(MIDI2LY_IGNORE_RES) $^ > $@ || cat $@
+
+$(outdir)/midi.diff: $(OUT_DIFF_FILES)
+ cat $(OUT_DIFF_FILES) > $@
--- /dev/null
+default:
+
+##local-test: $(outdir)/midi.diff
+
+check: $(outdir)/midi.diff local-WWW-1 local-WWW-2
+
+test: check
--- /dev/null
+MIDI_FILES = $(call src-wildcard,*.midi)
+HEADER_FILES = $(call src-wildcard,*.header)
+OUT_LY_FILES = $(sort ${MIDI_FILES:%.midi=$(outdir)/%.ly} ${LY_FILES:%.ly=$(outdir)/%-midi.ly} )
+OUT_FILES = $(OUT_LY_FILES)
+HEADER_FIELDS = texidoc options
+OUT_DIFF_FILES = ${LY_FILES:%.ly=$(outdir)/%.diff}
+MIDI2LY_IGNORE_RES = -I 'Lily was here' -I '^\\version ' -I 'TEXT_EVENT.*GNU LilyPond' -I '^% included from'
+DIFF = diff
+
+EXTRA_DIST_FILES += $(MIDI_FILES) $(HEADER_FILES)