Followup-For: Bug #985066

New version of the patch is attached.

Andreas
diff -Nru mono-6.8.0.105+dfsg/debian/changelog 
mono-6.8.0.105+dfsg/debian/changelog
--- mono-6.8.0.105+dfsg/debian/changelog        2020-04-08 15:11:12.000000000 
+0200
+++ mono-6.8.0.105+dfsg/debian/changelog        2021-03-31 13:38:34.000000000 
+0200
@@ -1,3 +1,25 @@
+mono (6.8.0.105+dfsg-4) UNRELEASED; urgency=medium
+
+  * mono-gac: Add Pre-Depends: mono-runtime-common (>= 5.20) and stop messing
+    with /etc/mono/config manually. gacutil is used from hooks called by
+    maintainer scripts and must stay functional even if unpacked and not yet
+    configured.  (Closes: #985066)
+  * Move mono-gac dependency from mono-runtime-common to mono-runtime-sgen and
+    mono-runtime-boehm to avoid introducing a new dependency cycle.
+  * libmono-system4.0-cil, libmono-system-configuration4.0-cil: Drop
+    mono-runtime dependency, all their rdepends also depend on
+    libmono-corlib4.5-cil which already has the mono-runtime dependency.
+  * Move the actual library from libmono-corlib4.5-cil to
+    libmono-corlib4.5-dll and redirect the circular libmono-*-cil
+    dependencies there to break the dependency cycle between mono-runtime and
+    libmono-*-cil.  (Closes: #940301, #528090, #656895, #986275, #986293)
+  * Move 'cli' binfmt registration to mono-runtime which ships the files.
+  * mono-mcs: Clean up obsolete alternatives.  (Closes: #801789)
+  * Ship /etc/mono/registry/LocalMachine/.
+  * Clean up empty /usr/lib/mono/aot-cache/${MONOARCH}/.
+
+ -- Andreas Beckmann <[email protected]>  Wed, 31 Mar 2021 13:38:34 +0200
+
 mono (6.8.0.105+dfsg-3) unstable; urgency=high
 
   * [2501df4] Workaround for gacutil System.Native mapping dependency 
diff -Nru mono-6.8.0.105+dfsg/debian/control mono-6.8.0.105+dfsg/debian/control
--- mono-6.8.0.105+dfsg/debian/control  2020-02-25 22:34:26.000000000 +0100
+++ mono-6.8.0.105+dfsg/debian/control  2021-03-31 13:38:34.000000000 +0200
@@ -36,11 +36,9 @@
            mono-2.0-runtime (<< 2.4),
            mono-runtime (<< 3.2.1)
 Suggests: xdg-utils | libgnome2-0 | konqueror
-Recommends: binfmt-support (>= 1.1.2)
 Depends: ${shlibs:Depends},
          ${misc:Depends},
          binutils,
-         mono-gac (= ${source:Version})
 Description: Mono runtime - common files
  Mono is a platform for running and developing applications based on the
  ECMA/ISO Standards. Mono is an open source effort led by Xamarin.
@@ -59,6 +57,7 @@
 Depends: ${shlibs:Depends},
          ${misc:Depends},
          mono-runtime-sgen (= ${binary:Version})
+Recommends: binfmt-support (>= 1.1.2)
 Description: Mono runtime - default version
  Mono is a platform for running and developing applications based on the
  ECMA/ISO Standards. Mono is an open source effort led by Xamarin.
@@ -78,6 +77,7 @@
 Architecture: amd64 armel arm64 armhf i386 mipsel kfreebsd-amd64 kfreebsd-i386 
powerpc ppc64 ppc64el s390x
 Depends: ${shlibs:Depends},
          ${misc:Depends},
+         mono-gac (= ${source:Version}),
          mono-runtime-common (= ${binary:Version})
 Homepage: http://www.mono-project.com/Compacting_GC
 Description: Mono runtime - SGen
@@ -100,6 +100,7 @@
 Architecture: amd64 armel armhf i386 mipsel kfreebsd-amd64 kfreebsd-i386 
powerpc ppc64 ppc64el s390x
 Depends: ${shlibs:Depends},
          ${misc:Depends},
+         mono-gac (= ${source:Version}),
          mono-runtime-common (= ${binary:Version})
 Description: Mono runtime - Boehm
  Mono is a platform for running and developing applications based on the
@@ -663,7 +664,8 @@
 
 Package: libmono-corlib4.5-cil
 Architecture: all
-Depends: ${misc:Depends}, tzdata,
+Depends: ${misc:Depends},
+         libmono-corlib4.5-dll (= ${source:Version}),
          mono-runtime (>= ${mono:upversion}), mono-runtime (<< 
${mono:next-upversion})
 Recommends: libmono-i18n-west4.0-cil
 Suggests: libmono-i18n4.0-all
@@ -682,6 +684,26 @@
  US-ASCII, ISO 8859-1 (Latin 1) and UTF-8 users don't need any extra I18N
  packages.
 
+Package: libmono-corlib4.5-dll
+Architecture: all
+Depends: ${misc:Depends}, tzdata,
+Breaks: libmono-corlib4.5-cil (<< 6.8.0.105+dfsg-3.1~)
+Replaces: libmono-corlib4.5-cil (<< 6.8.0.105+dfsg-3.1~)
+Description: Mono core library (for CLI 4.5)
+ Mono is a platform for running and developing applications based on the
+ ECMA/ISO Standards. Mono is an open source effort led by Xamarin.
+ Mono provides a complete CLR (Common Language Runtime) including compiler and
+ runtime, which can produce and execute CIL (Common Intermediate Language)
+ bytecode (aka assemblies), and a class library.
+ .
+ This package contains the Core Library (mscorlib.dll) of Mono for CLI 4.5,
+ which is the glue between the BCL (Base Class Libraries) and the JIT.
+ .
+ You should install libmono-i18n-west4.0-cil if you are using
+ ISO 8859-15 (Latin 9) or other common Western European code pages.
+ US-ASCII, ISO 8859-1 (Latin 1) and UTF-8 users don't need any extra I18N
+ packages.
+
 Package: libmono-i18n4.0-all
 Architecture: all
 Depends: ${misc:Depends},
@@ -802,7 +824,7 @@
 Recommends: ca-certificates-mono (= ${source:Version})
 Depends: ${misc:Depends},
          ${cli:Depends},
-         mono-runtime (>= ${mono:upversion}), mono-runtime (<< 
${mono:next-upversion})
+#        mono-runtime (>= ${mono:upversion}), mono-runtime (<< 
${mono:next-upversion})
 Description: Mono System libraries (for CLI 4.0)
  Mono is a platform for running and developing applications based on the
  ECMA/ISO Standards. Mono is an open source effort led by Xamarin.
@@ -844,7 +866,7 @@
 Architecture: all
 Depends: ${misc:Depends},
          ${cli:Depends},
-         mono-runtime (>= ${mono:upversion}), mono-runtime (<< 
${mono:next-upversion})
+#        mono-runtime (>= ${mono:upversion}), mono-runtime (<< 
${mono:next-upversion})
 Description: Mono System.Configuration library (for CLI 4.0)
  Mono is a platform for running and developing applications based on the
  ECMA/ISO Standards. Mono is an open source effort led by Xamarin.
@@ -2970,6 +2992,7 @@
 
 Package: mono-gac
 Architecture: all
+Pre-Depends: mono-runtime-common (>= 5.20),
 Depends: ${misc:Depends},
          mono-4.0-gac (= ${source:Version})
 Provides: global-assembly-cache-tool
diff -Nru mono-6.8.0.105+dfsg/debian/mono-gac.postinst 
mono-6.8.0.105+dfsg/debian/mono-gac.postinst
--- mono-6.8.0.105+dfsg/debian/mono-gac.postinst        2020-02-25 
20:06:42.000000000 +0100
+++ mono-6.8.0.105+dfsg/debian/mono-gac.postinst        2021-03-31 
13:38:31.000000000 +0200
@@ -1,10 +1,5 @@
 #!/bin/sh -e
 
-# Work around for gacutil needing /etc/mono/config >= 5.20
-if [ -e /etc/mono/config.dpkg-new ]; then
-       mv /etc/mono/config.dpkg-new /etc/mono/config
-fi
-
 # On upgrades we need to repopulate the GAC and framework paths
 # to accomodate any changes in layout
 #
diff -Nru mono-6.8.0.105+dfsg/debian/mono-mcs.postinst 
mono-6.8.0.105+dfsg/debian/mono-mcs.postinst
--- mono-6.8.0.105+dfsg/debian/mono-mcs.postinst        1970-01-01 
01:00:00.000000000 +0100
+++ mono-6.8.0.105+dfsg/debian/mono-mcs.postinst        2021-03-31 
13:38:34.000000000 +0200
@@ -0,0 +1,9 @@
+#!/bin/sh
+set -e
+
+if [ "$1" = "configure" ]; then
+       # clean up obsolete alternatives, can be removed after bullseye
+       update-alternatives --remove c-sharp-compiler /usr/bin/mcs
+fi
+
+#DEBHELPER#
diff -Nru mono-6.8.0.105+dfsg/debian/mono-runtime-common.dirs 
mono-6.8.0.105+dfsg/debian/mono-runtime-common.dirs
--- mono-6.8.0.105+dfsg/debian/mono-runtime-common.dirs 2020-02-25 
20:06:42.000000000 +0100
+++ mono-6.8.0.105+dfsg/debian/mono-runtime-common.dirs 2021-03-31 
13:38:34.000000000 +0200
@@ -1,2 +1,2 @@
-usr/share/binfmts
+etc/mono/registry/LocalMachine
 usr/share/dotnet
diff -Nru mono-6.8.0.105+dfsg/debian/mono-runtime-common.postinst 
mono-6.8.0.105+dfsg/debian/mono-runtime-common.postinst
--- mono-6.8.0.105+dfsg/debian/mono-runtime-common.postinst     2020-02-25 
20:06:42.000000000 +0100
+++ mono-6.8.0.105+dfsg/debian/mono-runtime-common.postinst     2021-03-31 
13:38:34.000000000 +0200
@@ -1,8 +1,5 @@
-#!/bin/sh -e
-
-if [ configure = "$1" ] && [ -x /usr/sbin/update-binfmts ]; then
-       update-binfmts --import cli
-fi
+#!/bin/sh
+set -e
 
 if [ configure = "$1" ] && [ -d /usr/share/dotnet/mono/ ] && [ -L 
/usr/share/dotnet/mono ]; then
        # it's a symlink
@@ -13,5 +10,4 @@
        ldconfig
 fi
         
-mkdir -p /etc/mono/registry/LocalMachine/
 #DEBHELPER#
diff -Nru mono-6.8.0.105+dfsg/debian/mono-runtime-common.prerm 
mono-6.8.0.105+dfsg/debian/mono-runtime-common.prerm
--- mono-6.8.0.105+dfsg/debian/mono-runtime-common.prerm        2020-02-25 
20:06:42.000000000 +0100
+++ mono-6.8.0.105+dfsg/debian/mono-runtime-common.prerm        2021-03-31 
13:38:34.000000000 +0200
@@ -1,7 +1,3 @@
 #!/bin/sh -e
 
-if [ "$1" = remove ] && [ -x /usr/sbin/update-binfmts ]; then
-       update-binfmts --package mono-runtime --remove cli /usr/bin/cli
-fi
-
 #DEBHELPER#
diff -Nru mono-6.8.0.105+dfsg/debian/mono-runtime.postinst 
mono-6.8.0.105+dfsg/debian/mono-runtime.postinst
--- mono-6.8.0.105+dfsg/debian/mono-runtime.postinst    2020-02-25 
20:06:42.000000000 +0100
+++ mono-6.8.0.105+dfsg/debian/mono-runtime.postinst    2021-03-31 
13:38:34.000000000 +0200
@@ -1,7 +1,12 @@
-#!/bin/sh -e
+#!/bin/sh
+set -e
 
 update-alternatives \
        --install /usr/bin/cli cli /usr/bin/mono 10 \
        --slave /usr/share/man/man1/cli.1.gz cli.1.gz 
/usr/share/man/man1/mono.1.gz
 
+if [ configure = "$1" ] && [ -x /usr/sbin/update-binfmts ]; then
+       update-binfmts --import cli
+fi
+
 #DEBHELPER#
diff -Nru mono-6.8.0.105+dfsg/debian/mono-runtime.prerm 
mono-6.8.0.105+dfsg/debian/mono-runtime.prerm
--- mono-6.8.0.105+dfsg/debian/mono-runtime.prerm       2020-02-25 
20:06:42.000000000 +0100
+++ mono-6.8.0.105+dfsg/debian/mono-runtime.prerm       2021-03-31 
13:38:34.000000000 +0200
@@ -1,4 +1,9 @@
-#!/bin/sh -e
+#!/bin/sh
+set -e
+
+if [ "$1" = remove ] && [ -x /usr/sbin/update-binfmts ]; then
+       update-binfmts --package mono-runtime --remove cli /usr/bin/cli
+fi
 
 if [ "$1" = remove ]; then
        update-alternatives --remove cli /usr/bin/mono
diff -Nru mono-6.8.0.105+dfsg/debian/prerm-monoaot 
mono-6.8.0.105+dfsg/debian/prerm-monoaot
--- mono-6.8.0.105+dfsg/debian/prerm-monoaot    2020-02-25 20:06:42.000000000 
+0100
+++ mono-6.8.0.105+dfsg/debian/prerm-monoaot    2021-03-31 13:38:34.000000000 
+0200
@@ -1 +1,4 @@
-rm -f /usr/lib/mono/aot-cache/`mono --version | grep Architecture | sed 's/.*: 
 //' | sed 's/el,.*//'`/`basename #FILE#`
+MONOARCH=`mono --version | grep Architecture | sed 's/.*:  //' | sed 
's/el,.*//'`
+rm -f /usr/lib/mono/aot-cache/${MONOARCH}/`basename #FILE#`
+test ! -d /usr/lib/mono/aot-cache/${MONOARCH} || rmdir 
--ignore-fail-on-non-empty /usr/lib/mono/aot-cache/${MONOARCH}
+test ! -d /usr/lib/mono/aot-cache || rmdir --ignore-fail-on-non-empty 
/usr/lib/mono/aot-cache
diff -Nru mono-6.8.0.105+dfsg/debian/rules mono-6.8.0.105+dfsg/debian/rules
--- mono-6.8.0.105+dfsg/debian/rules    2020-02-25 20:06:42.000000000 +0100
+++ mono-6.8.0.105+dfsg/debian/rules    2021-03-31 13:38:34.000000000 +0200
@@ -371,6 +371,21 @@
        #DH_VERBOSE=1 debian/dh_clideps -i -l debian/tmp 
$(DH_INTERNAL_MONO_PARAM)
        # mono-1.0/2.0-gac needs special runtime dep, to prevent circular dep 
(mono-runtime <-> mono-1.0/2.0-gac)
        debian/dh_clideps -p mono-4.0-gac -r $(DH_INTERNAL_MONO_PARAM)
+       # HACK to break the dependency cycle between runtime and libmono*
+       debian/dh_clideps -p libmono-system4.0-cil -r $(DH_INTERNAL_MONO_PARAM)
+       sed -r -i '/cli:Depends/s/mono-runtime \([^,]*\)//' 
debian/libmono-system4.0-cil.substvars
+       debian/dh_clideps -p libmono-system-core4.0-cil -r 
$(DH_INTERNAL_MONO_PARAM)
+       mv debian/libmono-corlib4.5-cil/usr/lib 
debian/libmono-corlib4.5-dll/usr/
+       mv debian/libmono-corlib4.5-cil/DEBIAN/clilibs 
debian/libmono-corlib4.5-dll/DEBIAN/
+       sed -i s/libmono-corlib4.5-cil/libmono-corlib4.5-dll/ \
+               debian/libmono-system4.0-cil.substvars \
+               debian/libmono-system-configuration4.0-cil.substvars \
+               debian/libmono-system-core4.0-cil.substvars \
+               debian/libmono-system-numerics4.0-cil.substvars \
+               debian/libmono-system-security4.0-cil.substvars \
+               debian/libmono-system-xml4.0-cil.substvars \
+               debian/libmono-security4.0-cil.substvars \
+               debian/mono-4.0-gac.substvars
        dh_gencontrol -i -- -Vmono:upversion=$(UPVERSION) 
-Vmono:next-upversion=$(NEXT_UPVERSION)
        dh_md5sums -i
        dh_builddeb -i

Reply via email to