Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package abcm2ps for openSUSE:Factory checked 
in at 2026-03-30 18:30:21
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/abcm2ps (Old)
 and      /work/SRC/openSUSE:Factory/.abcm2ps.new.1999 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "abcm2ps"

Mon Mar 30 18:30:21 2026 rev:21 rq:1343431 version:8.14.18

Changes:
--------
--- /work/SRC/openSUSE:Factory/abcm2ps/abcm2ps.changes  2025-05-07 
19:20:03.336134802 +0200
+++ /work/SRC/openSUSE:Factory/.abcm2ps.new.1999/abcm2ps.changes        
2026-03-30 18:32:13.865395492 +0200
@@ -1,0 +2,7 @@
+Sun Mar 29 12:16:33 UTC 2026 - Edgar Aichinger <[email protected]>
+
+- Update to 8.14.18
+- removed abcm2ps-gcc15.patch (fixed upstream)
+- removed compiler_flags.patch (handled in specfile)
+
+-------------------------------------------------------------------

Old:
----
  abcm2ps-8.14.15.tar.gz
  abcm2ps-gcc15.patch
  compiler_flags.patch

New:
----
  abcm2ps-8.14.18.tar.gz

----------(Old B)----------
  Old:- Update to 8.14.18
- removed abcm2ps-gcc15.patch (fixed upstream)
- removed compiler_flags.patch (handled in specfile)
  Old:- removed abcm2ps-gcc15.patch (fixed upstream)
- removed compiler_flags.patch (handled in specfile)
----------(Old E)----------

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ abcm2ps.spec ++++++
--- /var/tmp/diff_new_pack.X00dTK/_old  2026-03-30 18:32:14.633427602 +0200
+++ /var/tmp/diff_new_pack.X00dTK/_new  2026-03-30 18:32:14.641427937 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package abcm2ps
 #
-# Copyright (c) 2025 SUSE LLC
+# Copyright (c) 2026 SUSE LLC and contributors
 # Copyright (c) 2007 by Edgar Aichinger
 #
 # All modifications and additions to the file contributed by third parties
@@ -18,7 +18,7 @@
 
 
 Name:           abcm2ps
-Version:        8.14.15
+Version:        8.14.18
 Release:        0
 Summary:        A program to typeset abc tunes into Postscript
 License:        LGPL-3.0-or-later
@@ -32,15 +32,14 @@
 Source4:        renaissance.fmt
 Source5:        thinlines.fmt
 # PATCH-FIX-OPENSUSE compiler_flags.patch -- [email protected]
-Patch0:         compiler_flags.patch
-# build with gcc15
-Patch1:         abcm2ps-gcc15.patch
+# Patch0:         compiler_flags.patch
 BuildRequires:  pkgconfig
 # for rst2man
 BuildRequires:  python3-docutils
 # for rendering non-latin characters in Postscript output
 BuildRequires:  pkgconfig(cairo)
 BuildRequires:  pkgconfig(freetype2)
+BuildRequires:  pkgconfig(libpcre2-8)
 BuildRequires:  pkgconfig(pangocairo)
 
 %description
@@ -56,7 +55,24 @@
 sed "s/\/\/#define A4_FORMAT/#define A4_FORMAT/" config.h.sed > config.h.in
 
 %build
-%configure
+LDLIBS="$LDLIBS `pkg-config pangocairo pangoft2 gobject-2.0 freetype2 
libpcre2-8 --libs`" \
+./configure \
+        --prefix=/usr \
+        --bindir=/usr/bin \
+        --sbindir=/usr/sbin \
+        --sysconfdir=/etc \
+        --datadir=/usr/share \
+        --includedir=/usr/include \
+        --libdir=/usr/lib64 \
+        --libexecdir=/usr/libexec \
+        --localstatedir=/var \
+        --sharedstatedir=/var/lib \
+        --mandir=/usr/share/man \
+        --infodir=/usr/share/info
+
+CFLAGS="$RPM_OPT_FLAGS -pipe" \
+CPPFLAGS="$CPPFLAGS -DHAVE_PANGO=1 `pkg-config pango cairo gobject-2.0 
freetype2 --cflags`" \
+LDLIBS="$LDLIBS `pkg-config pangocairo pangoft2 gobject-2.0 freetype2 
libpcre2-8 --libs`" \
 make %{?_smp_mflags}
 
 %install
@@ -67,7 +83,7 @@
 %files
 %license COPYING
 %doc README.md *.abc sample3.eps
-%{_bindir}/*
+%{_bindir}/%{name}
 %{_datadir}/%{name}
 %{_mandir}/man1/%{name}*
 

++++++ abcm2ps-8.14.15.tar.gz -> abcm2ps-8.14.18.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/abcm2ps-8.14.15/.gitignore 
new/abcm2ps-8.14.18/.gitignore
--- old/abcm2ps-8.14.15/.gitignore      2024-01-08 08:15:18.000000000 +0100
+++ new/abcm2ps-8.14.18/.gitignore      1970-01-01 01:00:00.000000000 +0100
@@ -1,13 +0,0 @@
-# gitignore
-# important!
-!.gitignore
-!.travis.yml
-.*
-*.o
-*.gz
-*~
-Out*
-abcm2ps
-abcm2ps.1
-config.h
-Makefile
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/abcm2ps-8.14.15/.travis.yml 
new/abcm2ps-8.14.18/.travis.yml
--- old/abcm2ps-8.14.15/.travis.yml     2024-01-08 08:15:18.000000000 +0100
+++ new/abcm2ps-8.14.18/.travis.yml     1970-01-01 01:00:00.000000000 +0100
@@ -1,37 +0,0 @@
-language: c
-sudo: false
-# addons:
-#   apt:
-#     sources:
-#       - extras-precise
-#       - lucid
-#       - partner-precise
-#     packages:
-#       - pkg-config
-#       - libpango-1.0-0
-#       - libcairo2
-#       - libcairo2-dev
-#       - libpangocairo-1.0-0
-#       - libfreetype6
-#       - libfreetype6-dev
-#       - libpangoft2-1.0-0
-branches:
-  only:
-  - master
-  - /^abcm2ps-\\d+\\.\\d+(\\.\\d+)?(-\\S*)?$/
-notifications:
-  slack:
-    secure: 
RCTAGKXARo6MkEXigVVZp4Oc6B0AejbTYZp4YJ155DBp8Ygt42WuLlCxJZ60Ruzyjh5ymAOV1rsAKXPS+UJMWO7+pLJuqZEeWK08hGSL/DpIfa3IMYYSQYHCYDTpKiyqBC0ytEpd077Pv3b3ZVvZO2Tjo3F9806M5fTCFuwWgTxxt45302LiHCSOk4q/d8MT1cSK6k6ZvRarK0LG9cnudqcV6+Y8yDlJUz+ixxmSAg3j0jXwXisdyOFmI9hRc0DtNhkJHMORBigm0Cis5ipWRV9XH13MXgT3Vd61jG816mLUipht88PVcGzSfLUPcXlT0vMADy47WmVnUNqNosNyYXO9YHmNNj7wVIR79U7wrPXL6g3zXYBzs6JQwECPl1eGfnhZeOQ3drY+Pc+Sz+W8XT7q1SefzLhIws6vMM3i9UGQhOb74mMH5mrHaQTPaz6P4pOUQ9QaUOwK0ud6z6rC5uLD5GkQmdTuLpTiC2vvER46DxgzHghdqgeJXSwCkQEgBjTrs+ffc4kfeakFFW73B7x1sCz9katxHpzlajb03YYnPDhpODMazUx1AKmDHSJhsKv8mRm5L/7z24GIFs7m0xDmS4YMo1AqeLpAGu0zdhVE+0jN2s9QDo8pHrmikCdkhbaUKwXHZZY4d0ykK2rovROfBiZOld1TqbbaPOOBEck=
-install: ./configure && make clean && make && make test
-before_deploy: make dist && make zip-dist
-# deploy:
-#   - provider: releases
-#     api-key:
-#       secure: 
hVfF6MJJuqH9TkOqqyLdPtfERv9YyozoLHX3YaQbUuLcsvAVF2GBZvDAFIyInV4VWqbtVu7faOpZyrOvd3TMHJMNzWGwBjWxAUJmM2gVugjpxAv6G+11ReeF8okqOIQGWdigZ9lb29utwrGb3R1hC2I6qcdlziw2JXMdl2GTBr6/zn0cFnAtfJqzT3REgog2g9HBorzNC+DqQXWI5skz6N4tWEvUfEwKERJkjyz3Lqen86MGHv+wEpqqCSmVbsSpiIkSwvbSm1PIsHhMg2zMbuJoqNsvlhz6Muyk6B5vRxXkJMstS5hAuIYAdWwu+3r42ZxK+TB3QWOO5fWRRBS7r2buvI63b+TvUDgCvHIr4cA1qMvyOCd5Xbv5HdRiZRqiJrUubfm6L1gXZ2Wo7KZVN7NVI9YJRqY9yZi59BZOXI6eDzb5AsjmpqSWBwXKhLUhCNwdqL52DPfL9pOjk9HY1i27BpoyL3X3NI0OJ+fUf6Q/utlv/wTiSbwHjiN+7dpnIlbAe09JQRXi7ApqtO0gV5tCBucBSydv6aAO3h5T0dRWFIB90bo6f1t0qeBO/YicP3qrM2OryhJNlZwFoJYPy2XDAzQ8Q5ubCKCp+C7U97vJwqGiXprKKDz9rGVuPWeIV/tLkcVn2TQt8hNyOqkcn4nv8x0j+ukw1p/Svtb3z54=
-#     name: $TRAVIS_TAG
-#     body: $TRAVIS_COMMIT_MESSAGE build $TRAVIS_BUILD_NUMBER
-#     file_glob: true
-#     file: abcm2ps-*.zip
-#     skip_cleanup: true
-#     on:
-#       branch: release
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/abcm2ps-8.14.15/Makefile.in 
new/abcm2ps-8.14.18/Makefile.in
--- old/abcm2ps-8.14.15/Makefile.in     2024-01-08 08:15:18.000000000 +0100
+++ new/abcm2ps-8.14.18/Makefile.in     2026-03-14 17:59:15.000000000 +0100
@@ -42,7 +42,6 @@
        mkdir -p $(bindir)
        $(INSTALL_PROGRAM) abcm2ps $(bindir)
        mkdir -p $(datadir)/abcm2ps
-       $(INSTALL_DATA) $(srcdir)/abc2svg.ttf $(datadir)/abcm2ps
        $(INSTALL_DATA) $(srcdir)/*.fmt       $(datadir)/abcm2ps
        mkdir -p $(docdir)/abcm2ps/examples
        $(INSTALL_DATA) $(srcdir)/README.md $(docdir)/abcm2ps
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/abcm2ps-8.14.15/README.md 
new/abcm2ps-8.14.18/README.md
--- old/abcm2ps-8.14.15/README.md       2024-01-08 08:15:18.000000000 +0100
+++ new/abcm2ps-8.14.18/README.md       2026-01-28 09:16:09.000000000 +0100
@@ -1,7 +1,10 @@
+<style>
+p{margin-left:.5cm;max-width:21cm}
+li{margin-left:.5cm;max-width:18cm}
+li p{margin-left:0}
+</style>
 # abcm2ps
 
-[![Build 
Status](https://travis-ci.org/leesavide/abcm2ps.svg?branch=master)](https://travis-ci.org/leesavide/abcm2ps)
-
 ### Overview
 
 abcm2ps is a C program which converts music tunes from the ABC music notation
@@ -9,10 +12,10 @@
 
 Based on [abc2ps](https://github.com/methf/abc2ps),
 the Postscript generator for ABC music notation by Michael Methfessel,
-it was first developped to print barock organ scores that have independant
+abcm2ps was first developped to print barock organ scores that have independant
 voices played on one or many keyboards and a pedal-board
 (the 'm' of abcm2ps stands for many or multi staves/voices).
-Since this time, it has evolved so it can render many more music kinds.
+Since this time, it has evolved so it can render many more music types.
 
 Note that this program is at end of life. Its successor is
 [abc2svg](https://chiselapp.com/user/moinejf/repository/abc2svg).
@@ -39,24 +42,25 @@
     abcm2ps [options] file1 [file1_options] file2 [file2_options] ...
 
 where file1, file2, .. are the ABC input files.
-This will generate a Postscript file (default name: `Out.ps`).
+This generates a Postscript file (default name: `Out.ps`).
+
 Run `abcm2ps -h` to know the list of the command line options.
 
 ### Documentation
 
-- abcm2ps.rst describes all command-line options.
+- The file abcm2ps.rst describes all command-line options.
 
-  When `abcm2ps` is installed, it may be read by `man abcm2ps`.
+  When `abcm2ps` is installed, this file may be displayed by `man abcm2ps`.
 
-- the features and format parameters are described in
-    http://moinejf.free.fr/abcm2ps-doc/index.html
+- The features and format parameters are described in
+    [abcm2ps-doc](http://moinejf.free.fr/abcm2ps-doc/index.html).
 
 ### Links
 
-Author's page: http://moinejf.free.fr/
+Author's page: [http://moinejf.free.fr/](http://moinejf.free.fr/)
 
 To know more about the ABC music notation, have a look at
-    http://abcnotation.com/
+    [abcnotation](https://abcnotation.com/).
 
 Guido Gonzato maintains many abcm2ps binaries and more documentation at
-    http://abcplus.sourceforge.net/
+    [abcplus](https://abcplus.sourceforge.net/).
Binary files old/abcm2ps-8.14.15/abc2svg.ttf and 
new/abcm2ps-8.14.18/abc2svg.ttf differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/abcm2ps-8.14.15/abcm2ps.h 
new/abcm2ps-8.14.18/abcm2ps.h
--- old/abcm2ps-8.14.15/abcm2ps.h       2024-01-08 08:15:18.000000000 +0100
+++ new/abcm2ps-8.14.18/abcm2ps.h       2026-01-28 09:16:09.000000000 +0100
@@ -64,6 +64,7 @@
 #endif
 
 #define CM             * 37.8  /* factor to transform cm to pt */
+#define MM             * 3.78  /* factor to transform mm to pt */
 #define PT                     /* factor to transform pt to pt */
 #define IN             * 96.0  /* factor to transform inch to pt */
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/abcm2ps-8.14.15/abcparse.c 
new/abcm2ps-8.14.18/abcparse.c
--- old/abcm2ps-8.14.15/abcparse.c      2024-01-08 08:15:18.000000000 +0100
+++ new/abcm2ps-8.14.18/abcparse.c      2026-01-28 09:16:09.000000000 +0100
@@ -3,7 +3,7 @@
  *
  * This file is part of abcm2ps.
  *
- * Copyright (C) 1998-2021 Jean-François Moine (http://moinejf.free.fr)
+ * Copyright (C) 1998-2025 Jean-François Moine (http://moinejf.free.fr)
  * Adapted from abc2ps, Copyright (C) 1996-1998 Michael Methfessel
  *
  * This program is free software; you can redistribute it and/or modify it
@@ -1583,6 +1583,8 @@
                                d = strtol(p, &q, 10);
                                p = q;
                        }
+               } else {
+                       d = 256;                // assume a temperament equal
                }
                if (microscale == 0) {
                        d--;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/abcm2ps-8.14.15/build.ninja 
new/abcm2ps-8.14.18/build.ninja
--- old/abcm2ps-8.14.15/build.ninja     2024-01-08 08:15:18.000000000 +0100
+++ new/abcm2ps-8.14.18/build.ninja     2026-01-28 09:16:09.000000000 +0100
@@ -33,26 +33,24 @@
 
 default abcm2ps
 
-# GitHub releases
+# fossil releases
 rule version
-  command = tag=`grep VERSION= configure|cut -d'=' -f2`;$
-       if [ $out = minor ]; then$
-               m=$${tag#*.};$
-               m=$${m%%.*};$
-               m=$$((m + 1));$
-               newtag="$${tag%%.*}.$$m.0";$
-       else$
-               p=$${tag##*.};$
-               p=$$((p + 1));$
-               newtag="$${tag%.*}.$$p";$
+  command = v=`fossil changes|wc -l`;$
+       if [ $$v -ne 0 ]; then $
+               echo "!! There are changes !!";$
+               exit 1;$
+       fi;$
+       v=`fossil describe`;$
+       if [ "$$out"="patch" ]; then $
+               v=`echo $$v|awk -F. -v OFS=. '{$$3 += 1; print}'`;$
+       else $
+               v=`echo $$v|awk -F. -v OFS=. '{$$2 += 1; $$3=0; print}'`;$
        fi;$
-       p=`grep VDATE= configure|cut -d'=' -f2`;$
        m=`date +%F`;$
        mv configure configure~;$
-       sed -e "s/$$tag/$$newtag/;s/$$p/$$m/" configure~ > configure;$
+       sed -e "s/^VERSION.*/VERSION=$${v#v}/;s/^VDATE.*/VDATE=$$m/" configure~ 
> configure;$
        chmod +x configure;$
-       echo "New release v$$newtag" | git commit -F- configure;$
-       git tag -a v$$newtag;$
-       echo "Don't forget: git push --follow-tags; ./configure"
+       fossil commit -m "New release $$v" -tag $$v;$
+       echo "Don't forget: ./configure"
 build minor: version
 build patch: version
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/abcm2ps-8.14.15/config.h.in 
new/abcm2ps-8.14.18/config.h.in
--- old/abcm2ps-8.14.15/config.h.in     2024-01-08 08:15:18.000000000 +0100
+++ new/abcm2ps-8.14.18/config.h.in     2026-01-28 09:16:09.000000000 +0100
@@ -10,7 +10,7 @@
 #define HAVE_MMAP 1
 
 /* default directory to search for format files */
-#define DEFAULT_FDIR xxx
+#define DEFAULT_FDIR "@DEFAULT_FDIR@"
 
-#define VERSION xxx
-#define VDATE xxx
+#define VERSION "@VERSION@"
+#define VDATE "@VDATE@"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/abcm2ps-8.14.15/configure 
new/abcm2ps-8.14.18/configure
--- old/abcm2ps-8.14.15/configure       2024-01-08 08:15:18.000000000 +0100
+++ new/abcm2ps-8.14.18/configure       2026-03-14 18:02:59.000000000 +0100
@@ -1,17 +1,14 @@
 #! /bin/sh
+set -e -f -u
 
 # (automatic update)
-VERSION=8.14.15
-VDATE=2024-01-08
+VERSION=8.14.18
+VDATE=2026-03-14
 
-: "${CC:=gcc}"
-: "${PKG_CONFIG:=pkg-config}"
-CFLAGS="-g -O2 -Wall -pipe $CFLAGS"
-
-srcdir=.
-: "${prefix=/usr/local}"
-
-: "${INSTALL:=/usr/bin/install -c}"
+# Variables may be set, by order of precedence:
+# * in the environment,
+# * in ./custom if it exists,
+# * or on the command line.
 
 if test -f ./custom; then
        . ./custom
@@ -23,75 +20,57 @@
                c="${c#--}"
                eval "${c%%=*}='${c#*=}'"
                ;;
+       *)
+               echo "$0: unknown argument: $c"
+               ;;
  esac
 done
 
+# Most variables are just passed to sed, but the following ones are
+# also expanded by the shell and need a default value.
+: "${PKG_CONFIG=${host+$host-}pkg-config}"
+: "${prefix=/usr/local}"
+: "${srcdir=$(realpath --relative-to=. $(dirname $0))}"
+
 case "$srcdir" in
     *\ *)
         echo "srcpath cannot contain spaces"
         exit 1
 esac
 
-if test "x$INSTALL_DATA" = x; then
-       INSTALL_DATA='${INSTALL} -m 644'
-fi
-if test "x$INSTALL_PROGRAM" = x; then
-       INSTALL_PROGRAM='${INSTALL}'
-fi
-
-if test "x$exec_prefix" = x; then
-       exec_prefix='${prefix}'
-fi
-if test "x$bindir" = x; then
-       bindir='${exec_prefix}/bin'
-fi
-if test "x$datarootdir" = x; then
-       datarootdir='${prefix}/share'
-fi
-if test "x$docdir" = x; then
-       docdir='${prefix}/share/doc'
-fi
-if test "x$mandir" = x; then
-       mandir='${prefix}/share/man'
-fi
-if test "x$DEFAULT_FDIR" = x; then
-       DEFAULT_FDIR="$prefix/share/abcm2ps"
-fi
-
 if ! $PKG_CONFIG --exists freetype2 ; then
        echo "pkg-config/freetype2 not found - no pango support"
 elif ! $PKG_CONFIG --exists pangocairo ; then
        echo "pangocairo not found - no pango support"
 else
-       CPPFLAGS="$CPPFLAGS -DHAVE_PANGO=1 `$PKG_CONFIG pango cairo freetype2 
--cflags`"
-       LDLIBS="`$PKG_CONFIG pangocairo pangoft2 freetype2 --libs` $LDLIBS"
+       pango_cflags="-DHAVE_PANGO=1 `$PKG_CONFIG pango cairo freetype2 
--cflags`"
+       pango_libs="`$PKG_CONFIG pangocairo pangoft2 freetype2 --libs`"
 fi
 
-CPPFLAGS="$CPPFLAGS -I."
-# ./config.h will not be found in srcdir.
-
-LDLIBS="$LDLIBS -lm"
-# Useful on some architectures.
-
-sed "s+@CC@+$CC+
-s+@CPPFLAGS@+$CPPFLAGS+
-s+@CFLAGS@+$CFLAGS+
-s+@LDFLAGS@+$LDFLAGS+
-s+@LDLIBS@+$LDLIBS+
-s+@INSTALL@+$INSTALL+
-s+@INSTALL_DATA@+$INSTALL_DATA+
-s+@INSTALL_PROGRAM@+$INSTALL_PROGRAM+
+sed "
+s+@CC@+${CC-${host+$host-}gcc}+
+# -I.: ./config.h will not be found in srcdir.
+s+@CPPFLAGS@+${CPPFLAGS-} ${pango_cflags-} -I.+
+s+@CFLAGS@+-g -O2 -Wall -pipe ${CFLAGS-}+
+s+@LDFLAGS@+${LDFLAGS-}+
+# -lm: useful on some architectures.
+s+@LDLIBS@+${pango_libs-} ${LDLIBS-} -lm+
+s+@INSTALL@+${INSTALL-/usr/bin/install -c}+
+s+@INSTALL_DATA@+${INSTALL_DATA-\$(INSTALL) -m 644}+
+s+@INSTALL_PROGRAM@+${INSTALL_PROGRAM-\$(INSTALL)}+
 s+@prefix@+$prefix+
-s+@exec_prefix@+$exec_prefix+
+s+@exec_prefix@+${exec_prefix-\$(prefix)}+
 s+@srcdir@+$srcdir+
-s+@bindir@+$bindir+
-s+@datarootdir@+$datarootdir+
-s+@mandir@+$mandir+
-s+@docdir@+$docdir+" "$srcdir/Makefile.in" > Makefile
+s+@bindir@+${bindir-\$(exec_prefix)/bin}+
+s+@datarootdir@+${datarootdir-\$(prefix)/share}+
+s+@mandir@+${mandir-\$(prefix)/share/man}+
+s+@docdir@+${docdir-\$(prefix)/share/doc}+
+" "$srcdir/Makefile.in" > Makefile
 echo "Makefile created"
 
-sed "s/define VERSION xxx/\define VERSION \"$VERSION\"/
-s/define VDATE xxx/define VDATE \"$VDATE\"/
-s+define DEFAULT_FDIR xxx+define DEFAULT_FDIR \"$DEFAULT_FDIR\"+
+sed "
+s/@VERSION@/$VERSION/
+s/@VDATE@/$VDATE/
+s+@DEFAULT_FDIR@+${DEFAULT_FDIR-$prefix/share/abcm2ps}+
 " "$srcdir/config.h.in" > config.h
 echo "config.h created"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/abcm2ps-8.14.15/draw.c new/abcm2ps-8.14.18/draw.c
--- old/abcm2ps-8.14.15/draw.c  2024-01-08 08:15:18.000000000 +0100
+++ new/abcm2ps-8.14.18/draw.c  2026-01-28 09:16:09.000000000 +0100
@@ -3,7 +3,7 @@
  *
  * This file is part of abcm2ps.
  *
- * Copyright (C) 1998-2020 Jean-François Moine (http://moinejf.free.fr)
+ * Copyright (C) 1998-2025 Jean-François Moine (http://moinejf.free.fr)
  * Adapted from abc2ps, Copyright (C) 1996-1998 Michael Methfessel
  *
  * This program is free software; you can redistribute it and/or modify it
@@ -984,7 +984,8 @@
                a2b("%d %s%d ", n, acc_tb[acc & 0x07], d);
        } else {
                if (acc >> 3 != 0
-                && cfmt.nedo)          // %%MIDI temperamentequal <nedo>
+                && cfmt.nedo           // %%MIDI temperamentequal <nedo>
+                && (n & 255) == 255)   // short accidental: "|" | "^" n (d == 
nedo)
                        n = ((((n >> 8) + 1) * 12) - 1) * 256 + cfmt.nedo - 1;
                a2b("%s%d ", acc_tb[acc & 0x07], n);
        }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/abcm2ps-8.14.15/format.c new/abcm2ps-8.14.18/format.c
--- old/abcm2ps-8.14.15/format.c        2024-01-08 08:15:18.000000000 +0100
+++ new/abcm2ps-8.14.18/format.c        2026-01-28 09:16:09.000000000 +0100
@@ -13,6 +13,7 @@
  */
 
 #include <stdlib.h>
+#include <stdbool.h>
 #include <string.h>
 #include <ctype.h>
 
@@ -622,6 +623,8 @@
                }
                if (!strncasecmp(str, "pt", 2))
                        return a PT;
+               if (!strncasecmp(str, "mm", 2))
+                       return type ? a MM : a * 2.835;
                if (!strncasecmp(str, "cm", 2))
                        return type ? a CM : a * 28.35;
                if (!strncasecmp(str, "in", 2))
@@ -1158,13 +1161,13 @@
                }
                if (strcmp(w, "writehistory") == 0) {   /* compatibility */
                        struct SYMBOL *s;
-                       int bool;
+                       bool boolv;
                        unsigned u;
 
-                       bool = get_bool(p);
+                       boolv = get_bool(p);
                        for (s = info['I' - 'A']; s != 0; s = s->next) {
                                u = s->text[0] - 'A';
-                               if (bool)
+                               if (boolv)
                                        cfmt.fields[0] |= (1 << u);
                                else
                                        cfmt.fields[0] &= ~(1 << u);
@@ -1215,7 +1218,7 @@
                        }
                        break;
                case 1: {                       /* %%writefields */
-                       int bool;
+                       bool boolv;
                        unsigned u;
 
                        q = p;
@@ -1223,7 +1226,7 @@
                                p++;
                        while (isspace((unsigned char) *p))
                                p++;
-                       bool = get_bool(p);
+                       boolv = get_bool(p);
                        while (*q != '\0' && !isspace((unsigned char) *q)) {
                                u = *q - 'A';
                                if (u < 26) {
@@ -1235,7 +1238,7 @@
                                        else
                                                break;  /*fixme: error */
                                }
-                               if (bool)
+                               if (boolv)
                                        cfmt.fields[i] |= (1 << u);
                                else
                                        cfmt.fields[i] &= ~(1 << u);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/abcm2ps-8.14.15/glyph.c new/abcm2ps-8.14.18/glyph.c
--- old/abcm2ps-8.14.15/glyph.c 2024-01-08 08:15:18.000000000 +0100
+++ new/abcm2ps-8.14.18/glyph.c 2026-01-28 09:16:09.000000000 +0100
@@ -223,7 +223,7 @@
        while (isspace(*p))
                p++;
        i3 = i4 = -1;
-       if (val < 0x0400) {
+       if (val < 0x0800) {
                i1 = (val >> 6) - 2;
                i2 = val & 0x3f;
        } else if (val < 0x10000) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/abcm2ps-8.14.15/gscanf.c new/abcm2ps-8.14.18/gscanf.c
--- old/abcm2ps-8.14.15/gscanf.c        1970-01-01 01:00:00.000000000 +0100
+++ new/abcm2ps-8.14.18/gscanf.c        2026-03-14 18:07:34.000000000 +0100
@@ -0,0 +1,371 @@
+#include <stdarg.h>
+
+/* ------------------------------------------------------------------ *
+ *  Utilities interne                                                   *
+ * ------------------------------------------------------------------ */
+
+static int b_isspace(char c) {
+    return c == ' ' || c == '\t' || c == '\n' ||
+           c == '\r' || c == '\f' || c == '\v';
+}
+
+static int b_isdigit(char c) { return c >= '0' && c <= '9'; }
+
+static int b_isxdigit(char c) {
+    return (c >= '0' && c <= '9') ||
+           (c >= 'a' && c <= 'f') ||
+           (c >= 'A' && c <= 'F');
+}
+
+static int b_tolower(char c) {
+    return (c >= 'A' && c <= 'Z') ? c + 32 : c;
+}
+
+/* Salta spazi bianchi, restituisce il numero di caratteri saltati */
+static int skip_whitespace(const char *s) {
+    int n = 0;
+    while (b_isspace(s[n])) n++;
+    return n;
+}
+
+/* ------------------------------------------------------------------ *
+ *  Parser per i singoli tipi                                           *
+ * ------------------------------------------------------------------ */
+
+/* Legge un intero con segno in base `base` (8, 10, 16).
+   Restituisce il numero di caratteri consumati, 0 se fallisce. */
+static int parse_long(const char *s, int width, int base,
+                      long *out, int *negative_out) {
+    int i = 0;
+    int neg = 0;
+    long val = 0;
+
+    if (s[i] == '+') { i++; }
+    else if (s[i] == '-') { neg = 1; i++; }
+
+    /* Prefisso automatico 0x / 0 */
+    if (base == 16 && s[i] == '0' &&
+        (s[i+1] == 'x' || s[i+1] == 'X')) {
+        i += 2;
+    } else if (base == 8 && s[i] == '0') {
+        i++;
+    }
+
+    int digits = 0;
+    while ((width == 0 || i < width) && s[i] != '\0') {
+        int d;
+        if (base == 16 && b_isxdigit(s[i])) {
+            char lc = b_tolower(s[i]);
+            d = (lc >= 'a') ? lc - 'a' + 10 : lc - '0';
+        } else if (b_isdigit(s[i]) && (s[i] - '0') < base) {
+            d = s[i] - '0';
+        } else {
+            break;
+        }
+        val = val * base + d;
+        digits++;
+        i++;
+    }
+    if (digits == 0) return 0;
+    *out = neg ? -val : val;
+    if (negative_out) *negative_out = neg;
+    return i;
+}
+
+/* Legge un unsigned long */
+static int parse_ulong(const char *s, int width, int base,
+                       unsigned long *out) {
+    long tmp = 0;
+    int n = parse_long(s, width, base, &tmp, 0);
+    if (n) *out = (unsigned long)tmp;
+    return n;
+}
+
+/* Legge un double (formato: [±] cifre [. cifre] [e/E [±] cifre]) */
+static int parse_double(const char *s, int width, double *out) {
+    int i = 0;
+    double val = 0.0;
+    int neg = 0;
+
+    if (s[i] == '+') { i++; }
+    else if (s[i] == '-') { neg = 1; i++; }
+
+    int digits = 0;
+    while ((width == 0 || i < width) && b_isdigit(s[i])) {
+        val = val * 10.0 + (s[i] - '0');
+        digits++; i++;
+    }
+
+    /* Parte frazionaria */
+    if ((width == 0 || i < width) && s[i] == '.') {
+        i++;
+        double frac = 0.1;
+        while ((width == 0 || i < width) && b_isdigit(s[i])) {
+            val += (s[i] - '0') * frac;
+            frac *= 0.1;
+            digits++; i++;
+        }
+    }
+    if (digits == 0) return 0;
+
+    /* Esponente */
+    if ((width == 0 || i < width) &&
+        (s[i] == 'e' || s[i] == 'E')) {
+        i++;
+        int eneg = 0;
+        if (s[i] == '+') { i++; }
+        else if (s[i] == '-') { eneg = 1; i++; }
+        int exp = 0;
+        while ((width == 0 || i < width) && b_isdigit(s[i])) {
+            exp = exp * 10 + (s[i] - '0');
+            i++;
+        }
+        /* Applica esponente tramite moltiplicazione iterativa */
+        double factor = 1.0;
+        for (int e = 0; e < exp; e++) factor *= 10.0;
+        val = eneg ? val / factor : val * factor;
+    }
+
+    *out = neg ? -val : val;
+    return i;
+}
+
+/* ------------------------------------------------------------------ *
+ *  gscanf()                                                            *
+ * ------------------------------------------------------------------ */
+
+/**
+ * gscanf() — equivalente a sscanf(), senza dipendenze.
+ *
+ * Specificatori supportati:
+ *   %d  %i  %u  %o  %x/%X  %f/%e/%g  %s  %c  %[...]  %n  %%
+ * Modificatori: h  l  (width numerico)
+ * Flag:         * (soppressione assegnamento)
+ */
+int gscanf(const char *buf, const char *fmt, ...) {
+    va_list ap;
+    va_start(ap, fmt);
+
+    const char *b  = buf;   /* cursore sul buffer */
+    const char *f  = fmt;   /* cursore sul formato */
+    int assigned   = 0;     /* numero di assegnamenti riusciti */
+
+    while (*f != '\0') {
+
+        /* --- Spazio nel formato: salta whitespace nel buffer --- */
+        if (b_isspace(*f)) {
+            b += skip_whitespace(b);
+            while (b_isspace(*f)) f++;
+            continue;
+        }
+
+        /* --- Carattere letterale --- */
+        if (*f != '%') {
+            if (*b != *f) break;   /* mismatch → stop */
+            b++; f++;
+            continue;
+        }
+
+        /* --- Specifier '%' --- */
+        f++;   /* salta '%' */
+
+        /* Flag di soppressione */
+        int suppress = 0;
+        if (*f == '*') { suppress = 1; f++; }
+
+        /* Larghezza massima */
+        int width = 0;
+        while (b_isdigit(*f)) { width = width * 10 + (*f - '0'); f++; }
+
+        /* Modificatore di lunghezza */
+        int mod_l = 0, mod_h = 0;
+        if (*f == 'l')      { mod_l = 1; f++; }
+        else if (*f == 'h') { mod_h = 1; f++; }
+
+        char spec = *f++;
+
+        /* %% */
+        if (spec == '%') {
+            if (*b != '%') break;
+            b++;
+            continue;
+        }
+
+        /* Tutti gli specificatori numerici/stringa saltano whitespace */
+        if (spec != 'c' && spec != '[' && spec != 'n') {
+            b += skip_whitespace(b);
+        }
+
+        if (*b == '\0' && spec != 'n') break;  /* EOF */
+
+        /* -------------------------------------------------------- */
+        if (spec == 'n') {
+            /* Numero di caratteri letti finora */
+            if (!suppress) {
+                int *p = va_arg(ap, int *);
+                *p = (int)(b - buf);
+            }
+            continue;   /* %n non conta come assegnamento */
+        }
+
+        /* -------------------------------------------------------- */
+        if (spec == 'c') {
+            int cnt = (width == 0) ? 1 : width;
+            if (!suppress) {
+                char *p = va_arg(ap, char *);
+                for (int i = 0; i < cnt && *b != '\0'; i++) *p++ = *b++;
+                assigned++;
+            } else {
+                for (int i = 0; i < cnt && *b != '\0'; i++) b++;
+            }
+            continue;
+        }
+
+        /* -------------------------------------------------------- */
+        if (spec == 's') {
+            int cnt = 0;
+            char *p = suppress ? 0 : va_arg(ap, char *);
+            while (*b != '\0' && !b_isspace(*b) &&
+                   (width == 0 || cnt < width)) {
+                if (!suppress) *p++ = *b;
+                b++; cnt++;
+            }
+            if (cnt == 0) break;
+            if (!suppress) { *p = '\0'; assigned++; }
+            continue;
+        }
+
+        /* -------------------------------------------------------- */
+        if (spec == '[') {
+            /* Costruisce il set di caratteri accettati */
+            int negate = 0;
+           char set[256];
+            int  in_set[256];
+            /* Azzera il set */
+            for (int i = 0; i < 256; i++) in_set[i] = 0;
+
+            if (*f == '^') { negate = 1; f++; }
+
+            int si = 0;
+            /* ']' come primo carattere è letterale */
+            if (*f == ']') { set[si++] = ']'; in_set[(unsigned char)']'] = 1; 
f++; }
+            while (*f != ']' && *f != '\0') {
+                /* Range a-z */
+                if (*(f+1) == '-' && *(f+2) != ']' && *(f+2) != '\0') {
+                    for (char c = *f; c <= *(f+2); c++) {
+                        set[si++] = c;
+                        in_set[(unsigned char)c] = 1;
+                    }
+                    f += 3;
+                } else {
+                    set[si++] = *f;
+                    in_set[(unsigned char)*f] = 1;
+                    f++;
+                }
+            }
+            if (*f == ']') f++;
+
+            char *p = suppress ? 0 : va_arg(ap, char *);
+            int cnt = 0;
+            while (*b != '\0' && (width == 0 || cnt < width)) {
+                int match = in_set[(unsigned char)*b];
+                if (negate) match = !match;
+                if (!match) break;
+                if (!suppress) *p++ = *b;
+                b++; cnt++;
+            }
+            if (cnt == 0) break;
+            if (!suppress) { *p = '\0'; assigned++; }
+            continue;
+        }
+
+        /* -------------------------------------------------------- */
+        if (spec == 'd' || spec == 'i') {
+            int base = 10;
+            if (spec == 'i') {
+                /* Determina la base dal prefisso */
+                if (*b == '0') {
+                    if (b[1] == 'x' || b[1] == 'X') base = 16;
+                    else base = 8;
+                }
+            }
+            long val = 0;
+            int n = parse_long(b, width, base, &val, 0);
+            if (n == 0) break;
+            b += n;
+            if (!suppress) {
+                if (mod_l)       { *va_arg(ap, long *)  = val; }
+                else if (mod_h)  { *va_arg(ap, short *) = (short)val; }
+                else             { *va_arg(ap, int *)   = (int)val; }
+                assigned++;
+            }
+            continue;
+        }
+
+        /* -------------------------------------------------------- */
+        if (spec == 'u') {
+            unsigned long val = 0;
+            int n = parse_ulong(b, width, 10, &val);
+            if (n == 0) break;
+            b += n;
+            if (!suppress) {
+                if (mod_l)       { *va_arg(ap, unsigned long *)  = val; }
+                else if (mod_h)  { *va_arg(ap, unsigned short *) = (unsigned 
short)val; }
+                else             { *va_arg(ap, unsigned int *)   = (unsigned 
int)val; }
+                assigned++;
+            }
+            continue;
+        }
+
+        /* -------------------------------------------------------- */
+        if (spec == 'o') {
+            unsigned long val = 0;
+            int n = parse_ulong(b, width, 8, &val);
+            if (n == 0) break;
+            b += n;
+            if (!suppress) {
+                if (mod_l)       { *va_arg(ap, unsigned long *)  = val; }
+                else if (mod_h)  { *va_arg(ap, unsigned short *) = (unsigned 
short)val; }
+                else             { *va_arg(ap, unsigned int *)   = (unsigned 
int)val; }
+                assigned++;
+            }
+            continue;
+        }
+
+        /* -------------------------------------------------------- */
+        if (spec == 'x' || spec == 'X') {
+            unsigned long val = 0;
+            int n = parse_ulong(b, width, 16, &val);
+            if (n == 0) break;
+            b += n;
+            if (!suppress) {
+                if (mod_l)       { *va_arg(ap, unsigned long *)  = val; }
+                else if (mod_h)  { *va_arg(ap, unsigned short *) = (unsigned 
short)val; }
+                else             { *va_arg(ap, unsigned int *)   = (unsigned 
int)val; }
+                assigned++;
+            }
+            continue;
+        }
+
+        /* -------------------------------------------------------- */
+        if (spec == 'f' || spec == 'e' || spec == 'E' ||
+            spec == 'g' || spec == 'G') {
+            double val = 0.0;
+            int n = parse_double(b, width, &val);
+            if (n == 0) break;
+            b += n;
+            if (!suppress) {
+                if (mod_l) { *va_arg(ap, double *) = val; }
+                else       { *va_arg(ap, float *)  = (float)val; }
+                assigned++;
+            }
+            continue;
+        }
+
+        /* Specificatore sconosciuto: stop */
+        break;
+    }
+
+    va_end(ap);
+    return assigned;
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/abcm2ps-8.14.15/music.c new/abcm2ps-8.14.18/music.c
--- old/abcm2ps-8.14.15/music.c 2024-01-08 08:15:18.000000000 +0100
+++ new/abcm2ps-8.14.18/music.c 2026-01-28 09:16:09.000000000 +0100
@@ -3,7 +3,7 @@
  *
  * This file is part of abcm2ps.
  *
- * Copyright (C) 1998-2021 Jean-François Moine (http://moinejf.free.fr)
+ * Copyright (C) 1998-2024 Jean-François Moine (http://moinejf.free.fr)
  * Adapted from abc2ps, Copyright (C) 1996-1998 Michael Methfessel
  *
  * This program is free software; you can redistribute it and/or modify it
@@ -516,8 +516,7 @@
 /* -- try to combine voices */
 static void combine_voices(void)
 {
-       struct SYMBOL *s, *s2, *g;
-       int i, r;
+       struct SYMBOL *s, *s2;
 
        for (s = tsfirst; s->ts_next; s = s->ts_next) {
                if (s->combine < 0)
@@ -525,41 +524,7 @@
 //             if (s->combine == 0
 //              && s->abc_type != ABC_T_REST)
 //                     continue;
-               if (s->sflags & S_IN_TUPLET) {
-                       g = s->extra;
-                       if (!g)
-                               continue;       /* tuplet already treated */
-                       r = 0;
-                       for ( ; g; g = g->next) {
-                               if (g->type == TUPLET
-                                && g->u.tuplet.r_plet > r)
-                                       r = g->u.tuplet.r_plet;
-                       }
-                       if (r == 0)
-                               continue;
-                       i = r;
-                       for (s2 = s; s2; s2 = s2->next) {
-                               if (!s2->ts_next)
-                                       break;
-                               if (s2->type != NOTEREST)
-                                       continue;
-                               if (!may_combine(s2))
-                                       break;
-                               if (--i <= 0)
-                                       break;
-                       }
-                       if (i > 0)
-                               continue;
-                       for (s2 = s; /*s2*/; s2 = s2->next) {
-                               if (s2->type != NOTEREST)
-                                       continue;
-                               do_combine(s2);
-                               if (--r <= 0)
-                                       break;
-                       }
-                       continue;
-                       
-               }
+
                if (s->type != NOTEREST)
                        continue;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/abcm2ps-8.14.15/parse.c new/abcm2ps-8.14.18/parse.c
--- old/abcm2ps-8.14.15/parse.c 2024-01-08 08:15:18.000000000 +0100
+++ new/abcm2ps-8.14.18/parse.c 2026-03-14 17:58:09.000000000 +0100
@@ -20,6 +20,7 @@
 #include <regex.h>
 
 #include "abcm2ps.h"
+#include "gscanf.c"
 
 /* options = external formatting */
 struct symsel_s {                      /* symbol selection */
@@ -1503,8 +1504,8 @@
                        if (antype == '@') {
                                int n;
                                float xo, yo;
-
-                               if (sscanf(p, "%f,%f%n", &xo, &yo, &n) != 2) {
+                               // !!! MODIFIED
+                               if (gscanf(p, "%f,%f%n", &xo, &yo, &n) != 2) {
                                        error(1, s, "Error in annotation 
\"@\"");
                                } else {
                                        p += n;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/abcm2ps-8.14.15/subs.c new/abcm2ps-8.14.18/subs.c
--- old/abcm2ps-8.14.15/subs.c  2024-01-08 08:15:18.000000000 +0100
+++ new/abcm2ps-8.14.18/subs.c  2026-01-28 09:16:09.000000000 +0100
@@ -3,7 +3,7 @@
  *
  * This file is part of abcm2ps.
  *
- * Copyright (C) 1998-2019 Jean-François Moine (http://moinejf.free.fr)
+ * Copyright (C) 1998-2025 Jean-François Moine (http://moinejf.free.fr)
  * Adapted from abc2ps, Copyright (C) 1996-1998 Michael Methfessel
  *
  * This program is free software; you can redistribute it and/or modify it
@@ -353,6 +353,8 @@
        if (!desc_tb[fnum]) {
                p = font_name;
                q = fontnames[fnum];
+          if(0)                        // don't change the font names
+                                       // because other font when only ASCII
                for (i = 0; i < sizeof bad_tb / sizeof bad_tb[0]; i++) {
                        if (strncmp(q, bad_tb[i], strlen(bad_tb[i])) == 0) {
                                p += sprintf(p, "%s", good_tb[i]);

Reply via email to