From c2cba9aab10fd72a423811233c74d07997305530 Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Fri, 15 Mar 2002 02:10:39 +0100 Subject: [PATCH] release: 1.5.40 --- ChangeLog | 9 +++ Documentation/topdocs/INSTALL.texi | 5 -- Documentation/user/refman.itely | 3 +- INSTALL.txt | 14 ++-- VERSION | 4 +- buildscripts/lilypond-login.sh | 5 ++ buildscripts/lilypond-profile.sh | 3 + input/regression/beaming-ternary-metrum.ly | 1 + input/regression/spacing-ended-voice.ly | 4 +- lily/parser.yy | 11 ++- make/out/lilypond.lsm | 8 +- make/out/lilypond.mandrake.spec | 2 +- make/out/lilypond.redhat.spec | 4 +- make/out/lilypond.suse.spec | 4 +- mf/feta-banier.mf | 5 +- mf/feta-bolletjes.mf | 18 ++++- mf/feta-eindelijk.mf | 86 ++++++++++++++++------ mf/feta-generic.mf | 10 +-- mf/feta-macros.mf | 4 + mf/feta-toevallig.mf | 22 ++++-- scripts/lilypond-book.py | 23 +++--- stepmake/stepmake/c-vars.make | 2 +- stepmake/stepmake/compile-vars.make | 2 +- 23 files changed, 168 insertions(+), 81 deletions(-) diff --git a/ChangeLog b/ChangeLog index 49d63a1fe7..c34771be21 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2002-03-14 Han-Wen Nienhuys + + * mf/feta-eindelijk.mf: new 8th rest. + + * mf/feta-toevallig.mf: small fixes for the sharp symbol. Don't + stick out of staffline + + * scripts/lilypond-book.py: fixes for texi regular expressions. + 2002-03-14 Jan Nieuwenhuizen * lily/include/new-beam.hh: diff --git a/Documentation/topdocs/INSTALL.texi b/Documentation/topdocs/INSTALL.texi index afff3cc621..91cf161cce 100644 --- a/Documentation/topdocs/INSTALL.texi +++ b/Documentation/topdocs/INSTALL.texi @@ -587,11 +587,6 @@ LilyPond with gcc-3.0 you may do: Note that this is fixed in Debian/unstable for flex >= 2.5.4a-13. -@unnumberedsubsec Python-2.1[.1] - -Regular expressions are broken in Python 2.1.[.1], either upgrade or -downgrade python. - @unnumberedsubsec Linux-2.4.0, Guile-1.4 --with-threads There's a bug in certain kernels around version 2.4.0, that is diff --git a/Documentation/user/refman.itely b/Documentation/user/refman.itely index 8a6f012082..a1440e0e83 100644 --- a/Documentation/user/refman.itely +++ b/Documentation/user/refman.itely @@ -1,4 +1,5 @@ + @c Note: @c @c A menu is needed before every deeper *section nesting of @node's; run @@ -1816,7 +1817,7 @@ patterns that divide the measure length are replaced by slashes. \context Voice { \repeat "percent" 4 { c'4 } \repeat "percent" 2 { c'2 es'2 f'4 fis'4 g'4 c''4 } } -@end lilypond +@end lilypond The signs are represented by these grobs: @internalsref{RepeatSlash} and @internalsref{PercentRepeat} and @internalsref{DoublePercentRepeat}. diff --git a/INSTALL.txt b/INSTALL.txt index ff40bb05c6..d7e47a1d6e 100644 --- a/INSTALL.txt +++ b/INSTALL.txt @@ -28,7 +28,6 @@ INSTALL - compiling and installing GNU LilyPond MacOS X Problems FLex-2.5.4a and gcc-3.0 - Python-2.1[.1] Linux-2.4.0, Guile-1.4 -with-threads NetBSD Solaris: @@ -508,15 +507,18 @@ installed, run as root: fink install tetex + For more information about `apt-get' and `fink', see +fink.sourceforge.net (http://fink.sf.net). + Then, configure, patch, make and install LilyPond using these commands: CC="cc -I/sw/include" CXX="c++ -I/sw/include" LDFLAGS="-L/sw/lib" \ ./configure --prefix=/sw - make -C lily out/parser.hh out/parser.cc + make -C lily out/parser.hh out/parser.cc out/config.h patch -p0 < darwin.patch make -C lily out/parser.o - make all + make DEPENDENCIES_OUTPUT=/dev/null all make install For installing, you must be root, of course. @@ -543,12 +545,6 @@ LilyPond with gcc-3.0 you may do: Note that this is fixed in Debian/unstable for flex >= 2.5.4a-13. -Python-2.1[.1] --------------- - - Regular expressions are broken in Python 2.1.[.1], either upgrade or -downgrade python. - Linux-2.4.0, Guile-1.4 -with-threads ------------------------------------ diff --git a/VERSION b/VERSION index d9b2f019bc..2b6cecc096 100644 --- a/VERSION +++ b/VERSION @@ -1,8 +1,8 @@ PACKAGE_NAME=LilyPond MAJOR_VERSION=1 MINOR_VERSION=5 -PATCH_LEVEL=39 -MY_PATCH_LEVEL=jcn4 +PATCH_LEVEL=40 +MY_PATCH_LEVEL= # use the above to send patches: MY_PATCH_LEVEL is always empty for a # released version. diff --git a/buildscripts/lilypond-login.sh b/buildscripts/lilypond-login.sh index 3bd0e43195..4918a319bb 100755 --- a/buildscripts/lilypond-login.sh +++ b/buildscripts/lilypond-login.sh @@ -4,6 +4,11 @@ # # Red Hat-like systems should install this in /etc/profile.d/ +# If run by hand or from you .login, run as follows +# source lilypond-profile + + + # strange shell, this C set datadir="@datadir@" diff --git a/buildscripts/lilypond-profile.sh b/buildscripts/lilypond-profile.sh index 95cd90bd84..ef963d8a14 100755 --- a/buildscripts/lilypond-profile.sh +++ b/buildscripts/lilypond-profile.sh @@ -4,6 +4,9 @@ # Red Hat-like systems should install this in /etc/profile.d/ +# If run by hand or from you .profile, run as follows +# . lilypond-profile + # This is a bit of a kludge. Ideally, lilypond's tex, afm, pfa, ps # directories should be installed into their location in the texmf/gs # trees, rather than messing around with environment variables (eg, diff --git a/input/regression/beaming-ternary-metrum.ly b/input/regression/beaming-ternary-metrum.ly index a0fcb46bd2..1e29f66379 100644 --- a/input/regression/beaming-ternary-metrum.ly +++ b/input/regression/beaming-ternary-metrum.ly @@ -7,4 +7,5 @@ texidoc = "automatic beaming also works in ternary time sigs." \time 6/8 [c8. c16 c16 c16] } +\paper { linewidth = -1. } } diff --git a/input/regression/spacing-ended-voice.ly b/input/regression/spacing-ended-voice.ly index 562c8de413..27063e00d3 100644 --- a/input/regression/spacing-ended-voice.ly +++ b/input/regression/spacing-ended-voice.ly @@ -20,4 +20,6 @@ should not confuse the spacing engine." r4 fis } > c4 -}}} +}} +\paper { linewidth = -1. } +} diff --git a/lily/parser.yy b/lily/parser.yy index dab307a3bf..9459adbf57 100644 --- a/lily/parser.yy +++ b/lily/parser.yy @@ -112,7 +112,10 @@ set_music_properties (Music *p, SCM a) // needed for bison.simple's malloc () and free () + #include +#include + #ifndef NDEBUG #define YYDEBUG 1 @@ -130,6 +133,10 @@ set_music_properties (Music *p, SCM a) %} +/* We use SCMs to do strings, because it saves us the trouble of +deleting them. Let's hope that a stack overflow doesnt trigger a move +of the parse stack onto the heap. */ + %union { @@ -144,10 +151,6 @@ set_music_properties (Music *p, SCM a) Request * request; - /* We use SCMs to do strings, because it saves us the trouble of -deleting them. Let's hope that a stack overflow doesnt trigger a move -of the parse stack onto the heap. */ - SCM scm; Tempo_req *tempo; diff --git a/make/out/lilypond.lsm b/make/out/lilypond.lsm index 3dc3e419dd..b8506cce0e 100644 --- a/make/out/lilypond.lsm +++ b/make/out/lilypond.lsm @@ -1,15 +1,15 @@ Begin3 Title: LilyPond -Version: 1.5.39 -Entered-date: 13MRT02 +Version: 1.5.40 +Entered-date: 15MRT02 Description: @BLURB@ Keywords: music notation typesetting midi fonts engraving Author: hanwen@cs.uu.nl (Han-Wen Nienhuys) janneke@gnu.org (Jan Nieuwenhuizen) Maintained-by: hanwen@stack.nl (Han-Wen Nienhuys) Primary-site: sunsite.unc.edu /pub/Linux/apps/sound/convert - 1000k lilypond-1.5.39.tar.gz + 1000k lilypond-1.5.40.tar.gz Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/ - 1000k lilypond-1.5.39.tar.gz + 1000k lilypond-1.5.40.tar.gz Copying-policy: GPL End diff --git a/make/out/lilypond.mandrake.spec b/make/out/lilypond.mandrake.spec index d7ec834ed6..63f1a68167 100644 --- a/make/out/lilypond.mandrake.spec +++ b/make/out/lilypond.mandrake.spec @@ -1,5 +1,5 @@ %define name lilypond -%define version 1.5.39 +%define version 1.5.40 %define release 1mdk Name: %{name} diff --git a/make/out/lilypond.redhat.spec b/make/out/lilypond.redhat.spec index 5ebee819d0..a2ce3b5389 100644 --- a/make/out/lilypond.redhat.spec +++ b/make/out/lilypond.redhat.spec @@ -3,11 +3,11 @@ %define info yes Name: lilypond -Version: 1.5.39 +Version: 1.5.40 Release: 1 License: GPL Group: Applications/Publishing -Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.5.39.tar.gz +Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.5.40.tar.gz Summary: Create and print music notation URL: http://www.lilypond.org/ BuildRoot: /tmp/lilypond-install diff --git a/make/out/lilypond.suse.spec b/make/out/lilypond.suse.spec index 012c51fa44..b8b6aa97ea 100644 --- a/make/out/lilypond.suse.spec +++ b/make/out/lilypond.suse.spec @@ -14,11 +14,11 @@ Distribution: SuSE Linux 7.0 (i386) Name: lilypond -Version: 1.5.39 +Version: 1.5.40 Release: 2 Copyright: GPL Group: Applications/Publishing -Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.5.39.tar.gz +Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.5.40.tar.gz # music notation software for.. ? Summary: A program for printing sheet music. URL: http://www.lilypond.org/ diff --git a/mf/feta-banier.mf b/mf/feta-banier.mf index 36a4dc000d..93ab0682f1 100644 --- a/mf/feta-banier.mf +++ b/mf/feta-banier.mf @@ -55,9 +55,10 @@ def draw_flag(expr center, flare, enddef; % -% TODO: calc intersectpoint +% TODO: calc intersectpoint (see TeX book, p. 137) % TODO: calc incision_depth % + def add_flag(expr yoff, flare, hip_wid_multiplier, hip_dep_multiplier, intersectpoint, hip_thickness, foot_thickness) = @@ -116,7 +117,7 @@ fet_beginchar("8th Flag (up)", "u3", "eighthflag") hip_depth_ratio, foot_width_ratio, hip_thickness, foot_thickness); pickup pencircle scaled stemthickness; - draw (0, 0) .. (0,-2 staff_space); + draw (0, 0) .. (0,-1 staff_space); fet_endchar; fet_beginchar("16th Flag (up)", "u4", "sixteenthflag") diff --git a/mf/feta-bolletjes.mf b/mf/feta-bolletjes.mf index d59e748b5f..b44922c89b 100644 --- a/mf/feta-bolletjes.mf +++ b/mf/feta-bolletjes.mf @@ -330,17 +330,29 @@ fet_endchar; endgroup; %%% Editable values: -slope := 1.7; % slope of slash. From scm/grob-description.scm. How to auto-copy? + +slash_slope := 1.7; % slope of slash. From scm/grob-description.scm. How to auto-copy? slt# := 2/3*0.48staff_space#; % thickness of lines. quarter notes get 1.5slt width. slh# := 2staff_space#; % height of char. %%% Calculated values: sxa# := 0; % how much the char exceeds the boundingbox horizontally: -slxt# := sqrt(slt#*slt#+(slt#/slope)*(slt#/slope)); % Width of hor. pen - with thanks to Pythagoras -slw# := slh#/slope; % width of sloping part of slash: + + % Width of hor. pen - with thanks to Pythagoras +slxt# := sqrt(slt#*slt#+(slt#/slash_slope)*(slt#/slash_slope)); +slw# := slh#/slash_slope; % width of sloping part of slash: define_pixels(slt,slh,sxa,slxt,slw); + +% +% +% UUGGGH! FIXME -- get rid of those sharp corners. +% +% +% + + def draw_slash(expr hwid_hash) = wid# := slw#+2slxt#+hwid_hash; set_char_box(0,wid#-2sxa#,slh#/2,slh#/2); diff --git a/mf/feta-eindelijk.mf b/mf/feta-eindelijk.mf index 6eb476cc3f..7b15b6ae65 100644 --- a/mf/feta-eindelijk.mf +++ b/mf/feta-eindelijk.mf @@ -179,38 +179,82 @@ def rest_crook(expr a, w) = balled_crook(a, w, ball_crook_balldiam, ball_crook_stem) enddef; +% +% +% todo: document rest. +% + + def draw_eighth_rest = -% draw_staff (-2, 2, 0.0); - save yshift, ballcorrection; - ballcorrection = 0.005 staff_space; + save width, bulb_diam, thin, thick; + save ycenter, crook_thick; + save crook_dir; + pair crook_dir; - yshift# := -1.0 staff_space#; - define_pixels(yshift); + width# := 1.0 staff_space#; + bulb_diam# := 0.6 staff_space#; + thin# := 1.0 stafflinethickness#; + thick# := 2.0 stafflinethickness#; + crook_thick# := 1.6 stafflinethickness#; - set_char_box(0, 4/3staff_space#, -yshift#, yshift# + - 5/3staff_space#+7/4stafflinethickness#); + ycenter := 0.5 staff_space; - % - % The curve is like a valley causing less space between - % the curve and the lower staff line. Correct for this. - % - save x,y; + define_pixels (width, bulb_diam, thin, thick, crook_thick); + set_char_box (0, width#, + 1.0 staff_space# + 0.5 stafflinethickness#, 0.5 staff_space# + bulb_diam#/2); - x1=w-stem/6; + penpos1 (thick, 0); + penpos2 (thin, 0); - y1 = yshift + 1.5 staff_space + flare/4 + ballcorrection; - rest_crook (z1,w-stem/6); - z2-z1=whatever*dir70; - y2= yshift + stem/2; - brush(z1,2/3stem,z2,stem); -enddef; + y1 = ycenter + - 1.5 staff_space ; + y2 = y5 - 2.0 stafflinethickness; + x2r = width; + + y3 - y2l = 0.25 staff_space; + x2r - x1 = 0.5 staff_space; + + x3 = x1l ; + y3 := ycenter +floor (- bulb_diam/2); + + x4 = 1.02 bulb_diam ; + y4 = ycenter - stafflinethickness; + + x5 = 0.5 bulb_diam; + y5 = ycenter +bulb_diam/2; + + crook_dir = (z2l - z4) / length(z2l - z4); + + z6 = whatever [z1l, z2l]; + z6 = whatever [z2l, z4] + crook_thick * (crook_dir rotated -90); + + z7 = (bulb_diam/2,ycenter) + 0.26 staff_space * dir ( 35); + z8 = (0, ycenter); + + z9 = z2 + 0.46 stafflinethickness * dir (angle(z2 - z1)- 10); + + penlabels (1, 2); + labels(3, 4, 5, 6, 7, 8, 9); + + fill z2r -- z2l -- simple_serif (z1l, z1r, 40) -- cycle; + fill z2r{z2r-z1r} .. z9 .. z2l{dir(232)} .. tension 2 + .. z4{left} .. z7{dir(90 + 25)} + .. z5{left} .. z8 .. z3{right} + .. {curl 0.2}z6 -- cycle; + + + enddef; fet_beginchar("8th rest","3","eighthrest"); draw_eighth_rest; + fet_endchar; +fet_beginchar("Classical quarter rest","2classical","clasquartrest"); + draw_eighth_rest; + currentpicture := currentpicture xscaled -1 shifted (w,0); fet_endchar; + fet_beginchar("16th rest","4","sixteenthrest"); % draw_staff (-2, 2, 0.0); save yshift, ballcorrection; @@ -347,10 +391,6 @@ fet_beginchar("128th rest","7","hundredtwentyeighthrest"); fet_endchar; -fet_beginchar("Classical quarter rest","2classical","clasquartrest"); - draw_eighth_rest; - currentpicture := currentpicture xscaled -1 shifted (w,0); - fet_endchar; endgroup; diff --git a/mf/feta-generic.mf b/mf/feta-generic.mf index b323e46d71..2602e03142 100644 --- a/mf/feta-generic.mf +++ b/mf/feta-generic.mf @@ -39,15 +39,15 @@ if test = 0: input feta-solfa; else: -% input feta-bolletjes; -% input feta-banier; -% input feta-eindelijk; - input feta-klef; + input feta-bolletjes; + input feta-banier; + input feta-eindelijk; +% input feta-klef; input feta-toevallig; % input feta-schrift; % input feta-haak; % input feta-timesig; % input feta-pendaal; % input feta-accordion; - input feta-solfa; +% input feta-solfa; fi diff --git a/mf/feta-macros.mf b/mf/feta-macros.mf index 7c12709e67..61764beba1 100644 --- a/mf/feta-macros.mf +++ b/mf/feta-macros.mf @@ -125,6 +125,10 @@ def distorted_ellipse(expr a,b,err_y,err_x,super) = +% +% draw an axis aligned block making sure that edges are on pixels. +% + def draw_rounded_block (expr bottom_left, top_right, roundness) = save round; round = floor min(roundness,xpart (top_right-bottom_left), diff --git a/mf/feta-toevallig.mf b/mf/feta-toevallig.mf index accc2310ac..4d0150d02a 100644 --- a/mf/feta-toevallig.mf +++ b/mf/feta-toevallig.mf @@ -31,14 +31,15 @@ fet_beginchar("Sharp" , "1", "sharp"); 1.5 staff_space#); save interbeam, interstem, beamheight, beamwidth, - stemwidth; + stemwidth, beamslope; interbeam := 1.05 staff_space; interstem := 7/16 ; beamheight := 4 stafflinethickness; beamwidth := w; - stemwidth := 1.3 stafflinethickness; - roundness := 2blot_diameter; + stemwidth := 1.5 stafflinethickness; + roundness := 2 blot_diameter; + pair center; center := (.5 w, 0); @@ -69,14 +70,23 @@ fet_beginchar("Sharp" , "1", "sharp"); pickup pencircle scaled stemwidth; x3 = x4 = xpart center; - bot y3 = -1.5 staff_space + ypart center; - top y4 = 1.5 staff_space + ypart center; numeric xs; xs := interstem* beamwidth / 2; + + (bot y3) + -xs * beamslope = -1.5 staff_space + ypart center; + top y4 + xs * beamslope = 1.5 staff_space + ypart center; + draw_gridline (z3-(xs,xs* beamslope),z4-(xs,xs*beamslope),stemwidth); addto currentpicture also currentpicture rotated 180 shifted (w,0); labels(1,2,3,4); + + +% to check that it doesn't overshoot staffline. +% +% pickup pencircle scaled stafflinethickness; +% draw (0, 1.5 staff_space ) .. (1 staff_space, 1.5 staff_space); + fet_endchar; @@ -111,7 +121,7 @@ fet_beginchar( "Natural", "0", "natural") pickup penrazor scaled beamheight rotated 90; top y2 = staff_space - 3/2 stafflinethickness ; - slope = stafflinethickness / interstem; + slope = stafflinethickness / interstem; draw z1 .. z2; draw (xpart z1, -y2) .. (xpart z2, -y1); diff --git a/scripts/lilypond-book.py b/scripts/lilypond-book.py index 8dc047bb26..0bac7a5724 100644 --- a/scripts/lilypond-book.py +++ b/scripts/lilypond-book.py @@ -477,7 +477,9 @@ re_dict = { }, - # why do we have distinction between @mbinclude and @include? + # why do we have distinction between @mbinclude and @include? + + 'texi': { 'include': '(?m)^[^%\n]*?(?P@mbinclude[ \n\t]+(?P[^\t \n]*))', 'input': no_match, @@ -486,13 +488,9 @@ re_dict = { 'landscape': no_match, 'verbatim': r"""(?s)(?P@example\s.*?@end example\s)""", 'verb': r"""(?P@code{.*?})""", - 'lilypond-file': '(?m)^(?!@c)(?P@lilypondfile(\[(?P.*?)\])?{(?P[^}]+)})', - 'lilypond' : '(?m)^(?!@c)(?P@lilypond(\[(?P.*?)\])?{(?P.*?)})', -# pyton2.2b2 barfs on this - 'lilypond-block': r"""(?m)^(?!@c)(?P(?s)(?P@lilypond(\[(?P.*?)\])?\s(?P.*?)@end lilypond\s))""", - -# 1.5.2 barfs on this. -# 'lilypond-block': r"""(?m)^(?!@c)(?P@lilypond(\[(?P.*?)\])?\s(?P.*?)@end lilypond\s)""", + 'lilypond-file': '(?m)^(?P@lilypondfile(\[(?P[^]]*)\])?{(?P[^}]+)})', + 'lilypond' : '(?m)^(?P@lilypond(\[(?P[^]]*)\])?{(?P.*?)})', + 'lilypond-block': r"""(?ms)^(?P@lilypond(\[(?P[^]]*)\])?\s(?P.*?)@end lilypond)\s""", 'option-sep' : ',\s*', 'intertext': r',?\s*intertext=\".*?\"', 'multiline-comment': r"(?sm)^\s*(?!@c\s+)(?P@ignore\s.*?@end ignore)\s", @@ -506,7 +504,14 @@ for r in re_dict.keys (): olddict = re_dict[r] newdict = {} for k in olddict.keys (): - newdict[k] = re.compile (olddict[k]) + try: + newdict[k] = re.compile (olddict[k]) + except: + print 'invalid regexp: %s' % olddict[k] + + # we'd like to catch and reraise a more detailed error, but + # alas, the exceptions changed across the 1.5/2.1 boundary. + raise "Invalid re" re_dict[r] = newdict diff --git a/stepmake/stepmake/c-vars.make b/stepmake/stepmake/c-vars.make index d7f25cf705..2b25636bba 100644 --- a/stepmake/stepmake/c-vars.make +++ b/stepmake/stepmake/c-vars.make @@ -13,4 +13,4 @@ TAGS_FILES += $(C_FILES) $(H_FILES) ALL_C_SOURCES += $(H_FILES) $(C_FILES) $(Y_FILES) $(L_FILES) -CFLAGS = $(ICFLAGS) $(CPPFLAGS) $(DEFINES) $(addprefix -I,$(INCLUDES)) $(USER_CFLAGS) $(EXTRA_CFLAGS) $(MODULE_CFLAGS) +CFLAGS = $(ICFLAGS) $(DEFINES) $(addprefix -I,$(INCLUDES)) $(USER_CFLAGS) $(EXTRA_CFLAGS) $(MODULE_CFLAGS) diff --git a/stepmake/stepmake/compile-vars.make b/stepmake/stepmake/compile-vars.make index 6c493db8af..04725547b8 100644 --- a/stepmake/stepmake/compile-vars.make +++ b/stepmake/stepmake/compile-vars.make @@ -3,7 +3,7 @@ ARFLAGS = ru LDFLAGS = $(ILDFLAGS) $(EXTRA_LDFLAGS) $($(PACKAGE)_LDFLAGS) $(MODULE_LDFLAGS) $(USER_LDFLAGS) PIC_FLAGS = -fpic -fPIC -SHARED_FLAGS = -shared -flat_namespace -undefined suppress +SHARED_FLAGS = -shared o-dep-out = $(outdir)/$(subst .o,.dep,$(notdir $@))# DO_O_DEP = rm -f $(o-dep-out); DEPENDENCIES_OUTPUT="$(o-dep-out) $(outdir)/$(notdir $@)" -- 2.39.2