Control: reopen -1
Control: reassign -1 src:gcc-8

Hi Matthias,

you requested that I send my unfinished work and here it goes. I've seen
that you have quickly applied my previous patches towards this matter
and would like to thank you. The attached patch was last tested on
8-20180402-1.  I performed the following test methods thus far:
 * native build (reduced using nolang=...)
 * lintian
 * piuparts
 * looking at package contents
 * manually installing and testing the resulting packages (thus
   discovering #891289)

Caveats:
 * The patch still contains temporary Breaks/Replaces versions. You'll
   find them by searching for /0TODO/ in debian/control.m4. These need
   to be updated before uploading (as we are moving files to new
   packages).
 * You'll go through NEW of course.
 * I did not perform cross builds or cross compiler builds.
 * I did not perform non-dfsg builds.
 * I did not perform gcc-snapshot builds.

I had to make a number of bike coloring decision during the
implementation. If you want something different, I'm happy to change
that and will try to update the patch in a timely manner.
 * "arch_gnutype_map" gets passed to control.m4 as "ARCH_GNUTYPE_MAP".
 * The target suffix of the new packages is passed as a substvar called
   "target:suffix".
 * The make variables for these packages are called "p_${tool}n" and
   "d_${tool}n".
 * The new targets are called "$(binary_stamp)-$(tool)-nat".

I would like to thank James Clarke his advice during the planning stage
and for reviewing an earlier version of this patch.

I'd also be interested in learning which test build configurations are
particularly relevant to you.

I'v Cced d-cross@l.d.o to have more eyeballs on this difficult piece of
code.

Helmut
--- a/debian/control.m4
+++ b/debian/control.m4
@@ -35,6 +35,13 @@
 '))
 define(`TARGET_PACKAGE',`X-DH-Build-For-Type: target
 ')
+define(`_for_each',`ifelse(`$3',`',`',`pushdef(`$1',`$3')$2`'popdef(`$1')`'$0(`$1',`$2',shift(shift(shift($@))))')')
+define(`for_each_arch',`_for_each(`_arch',`dnl
+pushdef(`arch_deb',`patsubst(_arch,`=.*',`')')dnl
+pushdef(`arch_gnu',`patsubst(_arch,`.*=',`')')dnl
+pushdef(`arch_gnusuffix',`-patsubst(arch_gnu,`_',`-')')dnl
+$1`'popdef(`arch_gnusuffix')popdef(`arch_gnu')popdef(`arch_deb')',dnl
+patsubst(ARCH_GNUTYPE_MAP,`\s+',`,'))')
 
 divert`'dnl
 dnl --------------------------------------------------------------------------
@@ -700,21 +707,22 @@
 ')`'dnl x32dev
 ')`'dnl cdev
 
-ifenabled(`cdev',`
-Package: gcc`'PV`'TS
-Architecture: any
-ifdef(`TARGET',`Multi-Arch: foreign
-')dnl
+ifenabled(`cdev',`dnl
+for_each_arch(`
+Package: gcc`'PV`'arch_gnusuffix
+Architecture: ifdef(`TARGET',`any',arch_deb)
+Multi-Arch: foreign
 Section: devel
 Priority: optional
-Depends: cpp`'PV`'TS (= ${gcc:Version}),ifenabled(`gccbase',` BASEDEP,')
+Depends: cpp`'PV`'arch_gnusuffix (= ${gcc:Version}),ifenabled(`gccbase',` BASEDEP,')
   ifenabled(`gccxbase',` BASEDEP,')
   ${dep:libcc1},
-  binutils`'TS (>= ${binutils:Version}),
+  binutils`'arch_gnusuffix (>= ${binutils:Version}),
   ${dep:libgccdev}, ${shlibs:Depends}, ${misc:Depends}
 Recommends: ${dep:libcdev}
-Replaces: gccgo-8 (<< ${gcc:Version}), cpp`'PV`'TS (<< 7.1.1-8)
-Suggests: ${gcc:multilib}, gcc`'PV-doc (>= ${gcc:SoftVersion}),
+Replaces: gccgo-8 (<< ${gcc:Version}), cpp`'PV`'arch_gnusuffix (<< 7.1.1-8), gcc`'PV (<< 999:0TODO)
+Breaks: cpp`'PV (<< 0TODO)
+Suggests: gcc`'PV-doc (>= ${gcc:SoftVersion}),
  gcc`'PV-locales (>= ${gcc:SoftVersion}),
  libdbgdep(gcc`'GCC_SO-dbg,,>=,${libgcc:Version}),
  libdbgdep(gomp`'GOMP_SO-dbg,),
@@ -729,15 +737,44 @@
 ')`'dnl
  libdbgdep(mpx`'MPX_SO-dbg,),
  libdbgdep(quadmath`'QMATH_SO-dbg,)
-Provides: c-compiler`'TS
+Provides: c-compiler`'arch_gnusuffix
 ifdef(`TARGET',`Conflicts: gcc-multilib
 ')`'dnl
 BUILT_USING`'dnl
-Description: GNU C compiler`'ifdef(`TARGET)',` (cross compiler for TARGET architecture)', `')
+Description: GNU C compiler for the arch_gnu architecture
+ This is the GNU C compiler for the arch_gnu architecture, a fairly portable
+ optimizing compiler for C.
+')`'dnl for_each_arch
+ifdef(`TARGET',`',`
+Package: gcc`'PV
+Architecture: any
+Section: devel
+Priority: optional
+Depends: gcc`'PV`'${target:suffix} (= ${gcc:Version}),ifenabled(`gccbase',` BASEDEP,')
+  ifenabled(`gccxbase',` BASEDEP,')
+  binutils (>= ${binutils:Version}),
+  ${misc:Depends}
+Recommends: ${dep:libcdev}
+Replaces: gccgo-8 (<< ${gcc:Version}), cpp`'PV (<< 7.1.1-8)
+Suggests: ${gcc:multilib}, gcc`'PV-doc (>= ${gcc:SoftVersion}),
+ gcc`'PV-locales (>= ${gcc:SoftVersion}),
+ libdbgdep(gcc`'GCC_SO-dbg,,>=,${libgcc:Version}),
+ libdbgdep(gomp`'GOMP_SO-dbg,),
+ libdbgdep(itm`'ITM_SO-dbg,),
+ libdbgdep(atomic`'ATOMIC_SO-dbg,),
+ libdbgdep(asan`'ASAN_SO-dbg,),
+ libdbgdep(lsan`'LSAN_SO-dbg,),
+ libdbgdep(tsan`'TSAN_SO-dbg,),
+ libdbgdep(ubsan`'UBSAN_SO-dbg,),
+ifenabled(`libvtv',`',`
+ libdbgdep(vtv`'VTV_SO-dbg,),
+')`'dnl
+ libdbgdep(mpx`'MPX_SO-dbg,),
+ libdbgdep(quadmath`'QMATH_SO-dbg,)
+Provides: c-compiler
+BUILT_USING`'dnl
+Description: GNU C compiler
  This is the GNU C compiler, a fairly portable optimizing compiler for C.
-ifdef(`TARGET', `dnl
- .
- This package contains C cross-compiler for TARGET architecture.
 ')`'dnl
 
 ifenabled(`multilib',`
@@ -800,17 +837,35 @@
  This is the GNU C compiler, a fairly portable optimizing compiler for C.
 ')`'dnl cdev
 
-ifenabled(`cdev',`
-Package: cpp`'PV`'TS
-Architecture: any
-ifdef(`TARGET',`Multi-Arch: foreign
-')dnl
+ifenabled(`cdev',`dnl
+for_each_arch(`
+Package: cpp`'PV`'arch_gnusuffix
+Architecture: ifdef(`TARGET',`any',arch_deb)
+Multi-Arch: foreign
 Section: ifdef(`TARGET',`devel',`interpreters')
 Priority: optional
 Depends: BASEDEP, ${shlibs:Depends}, ${misc:Depends}
 Suggests: gcc`'PV-locales (>= ${gcc:SoftVersion})
+Replaces: gccgo-8 (<< ${gcc:Version}), cpp`'PV (<< 999:0TODO)
+Breaks: libmagics++-dev (<< 2.28.0-4), hardening-wrapper (<< 2.8+nmu3), cpp`'PV (<< 0TODO)
+BUILT_USING`'dnl
+Description: GNU C preprocessor for arch_gnu
+ A macro processor that is used automatically by the GNU C compiler
+ to transform programs before actual compilation.
+ .
+ This package has been separated from gcc for the benefit of those who
+ require the preprocessor configured for arch_gnu architecture but not
+ the compiler.
+')`'dnl for_each_arch
+ifdef(`TARGET',`',`
+Package: cpp`'PV
+Architecture: any
+Section: interpreters
+Priority: optional
+Depends: BASEDEP, cpp`'PV`'${target:suffix} (= ${gcc:Version}), ${misc:Depends}
+Suggests: gcc`'PV-locales (>= ${gcc:SoftVersion})
 Replaces: gccgo-8 (<< ${gcc:Version})
-Breaks: libmagics++-dev (<< 2.28.0-4)ifdef(`TARGET',`',`, hardening-wrapper (<< 2.8+nmu3)')
+Breaks: libmagics++-dev (<< 2.28.0-4), hardening-wrapper (<< 2.8+nmu3)
 BUILT_USING`'dnl
 Description: GNU C preprocessor
  A macro processor that is used automatically by the GNU C compiler
@@ -818,9 +873,6 @@
  .
  This package has been separated from gcc for the benefit of those who
  require the preprocessor but not the compiler.
-ifdef(`TARGET', `dnl
- .
- This package contains preprocessor configured for TARGET architecture.
 ')`'dnl
 
 ifdef(`TARGET', `', `
@@ -852,22 +904,33 @@
 ')`'dnl cdev
 
 ifenabled(`c++',`
-ifenabled(`c++dev',`
-Package: g++`'PV`'TS
+ifenabled(`c++dev',`dnl
+for_each_arch(`
+Package: g++`'PV`'arch_gnusuffix
+Architecture: ifdef(`TARGET',`any',arch_deb)
+Multi-Arch: foreign
+Section: devel
+Priority: optional
+Depends: BASEDEP, gcc`'PV`'arch_gnusuffix (= ${gcc:Version}), libidevdep(stdc++`'PV-dev,,=), ${shlibs:Depends}, ${misc:Depends}
+Suggests: ${gxx:multilib}, gcc`'PV-doc (>= ${gcc:SoftVersion}), libdbgdep(stdc++CXX_SO`'PV-dbg,)
+Breaks: g++`'PV (<< 0TODO)
+Replaces: g++`'PV (<< 999:0TODO)
+BUILT_USING`'dnl
+Description: GNU C++ compiler for arch_gnu
+ This is the GNU C++ compiler, a fairly portable optimizing compiler for C++.
+ .
+ This compiler produces binaries for arch_gnu.
+')`'dnl for_each_arch
+ifdef(`TARGET',`',`
+Package: g++`'PV
 Architecture: any
-ifdef(`TARGET',`Multi-Arch: foreign
-')dnl
 Section: devel
 Priority: optional
-Depends: BASEDEP, gcc`'PV`'TS (= ${gcc:Version}), libidevdep(stdc++`'PV-dev,,=), ${shlibs:Depends}, ${misc:Depends}
+Depends: BASEDEP, g++`'PV`'${target:suffix} (= ${gcc:Version}), gcc`'PV (= ${gcc:Version}), ${misc:Depends}
 Provides: c++-compiler`'TS`'ifdef(`TARGET)',`',`, c++abi2-dev')
 Suggests: ${gxx:multilib}, gcc`'PV-doc (>= ${gcc:SoftVersion}), libdbgdep(stdc++CXX_SO`'PV-dbg,)
-BUILT_USING`'dnl
 Description: GNU C++ compiler`'ifdef(`TARGET)',` (cross compiler for TARGET architecture)', `')
  This is the GNU C++ compiler, a fairly portable optimizing compiler for C++.
-ifdef(`TARGET', `dnl
- .
- This package contains C++ cross-compiler for TARGET architecture.
 ')`'dnl
 
 ifenabled(`multilib',`
--- a/debian/rules.conf
+++ b/debian/rules.conf
@@ -634,6 +634,7 @@
 	-DTARGET_TOOL_BUILD_DEP='$(TARGET_TOOL_BUILD_DEP)' \
 	-DPHOBOS_BUILD_DEP="$(PHOBOS_BUILD_DEP)" \
 	-DOFFLOAD_BUILD_DEP="$(OFFLOAD_BUILD_DEP)" \
+	-DARCH_GNUTYPE_MAP="$(arch_gnutype_map)" \
 	-DMULTILIB_ARCHS="$(multilib_archs)" \
 	-DNEON_ARCHS="$(neon_archs)" \
 	-DTP=$(TP) \
@@ -1020,6 +1021,7 @@
 		echo 'dep:libcxxbiarchdbg=$(libstdc++biarchdbg)'; \
 		echo 'dep:libgnat=$(LIBGNAT_DEP)'; \
 		echo 'base:Breaks=$(BASE_BREAKS)'; \
+		echo 'target:suffix=-$(subst _,-,$(TARGET_ALIAS))'; \
 	) > debian/substvars.local.tmp
 ifneq (,$(filter $(DEB_TARGET_ARCH), $(multilib_archs)))
 	( \
--- a/debian/rules.d/binary-cpp.mk
+++ b/debian/rules.d/binary-cpp.mk
@@ -1,5 +1,8 @@
 ifneq ($(DEB_STAGE),rtlibs)
-  arch_binaries  := $(arch_binaries) cpp
+  ifeq ($(unprefixed_names),yes)
+    arch_binaries  := $(arch_binaries) cpp
+  endif
+  arch_binaries  := $(arch_binaries) cpp-nat
   ifneq ($(DEB_CROSS),yes)
     ifneq ($(GFDL_INVARIANT_FREE),yes)
       indep_binaries := $(indep_binaries) cpp-doc
@@ -7,22 +10,59 @@
   endif
 endif
 
+dirs_cppn = \
+	$(docdir) \
+	$(PF)/share/man/man1 \
+	$(PF)/bin \
+	$(gcc_lexec_dir) \
+	usr/share/lintian/overrides
+
 dirs_cpp = \
 	$(docdir) \
 	$(PF)/share/man/man1 \
 	$(PF)/bin \
-	$(gcc_lexec_dir)
+	usr/share/lintian/overrides
 
-files_cpp = \
+files_cppn = \
 	$(PF)/bin/$(cmd_prefix)cpp$(pkg_ver) \
 	$(gcc_lexec_dir)/cc1
 
 ifneq ($(GFDL_INVARIANT_FREE),yes)
-  files_cpp += \
+  files_cppn += \
 	$(PF)/share/man/man1/$(cmd_prefix)cpp$(pkg_ver).1
 endif
 
 # ----------------------------------------------------------------------
+$(binary_stamp)-cpp-nat: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_cppn)
+	dh_installdirs -p$(p_cppn) $(dirs_cppn)
+	$(dh_compat2) dh_movefiles -p$(p_cppn) $(files_cppn)
+
+	echo '$(p_cppn) binary: hardening-no-pie' \
+	  > $(d_cppn)/usr/share/lintian/overrides/$(p_cppn)
+ifeq ($(GFDL_INVARIANT_FREE),yes)
+	echo '$(p_cppn) binary: binary-without-manpage' \
+	  >> $(d_cppn)/usr/share/lintian/overrides/$(p_cppn)
+endif
+
+	debian/dh_doclink -p$(p_cppn) $(p_xbase)
+	debian/dh_rmemptydirs -p$(p_cppn)
+
+ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTONS)))
+	dwz $(d_cppn)/$(gcc_lexec_dir)/cc1
+endif
+	dh_strip -p$(p_cppn) \
+	  $(if $(unstripped_exe),-X/cc1)
+	dh_shlibdeps -p$(p_cppn)
+
+	echo $(p_cppn) >> debian/arch_binaries
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
 $(binary_stamp)-cpp: $(install_stamp)
 	dh_testdir
 	dh_testroot
@@ -30,21 +70,13 @@
 
 	rm -rf $(d_cpp)
 	dh_installdirs -p$(p_cpp) $(dirs_cpp)
-	$(dh_compat2) dh_movefiles -p$(p_cpp) $(files_cpp)
 
-ifeq ($(unprefixed_names),yes)
 	ln -sf $(cmd_prefix)cpp$(pkg_ver) \
 	    $(d_cpp)/$(PF)/bin/cpp$(pkg_ver)
-  ifneq ($(GFDL_INVARIANT_FREE),yes)
+ifneq ($(GFDL_INVARIANT_FREE),yes)
 	ln -sf $(cmd_prefix)cpp$(pkg_ver).1 \
 	    $(d_cpp)/$(PF)/share/man/man1/cpp$(pkg_ver).1
-  endif
-endif
-
-	mkdir -p $(d_cpp)/usr/share/lintian/overrides
-	echo '$(p_cpp) binary: hardening-no-pie' \
-	  > $(d_cpp)/usr/share/lintian/overrides/$(p_cpp)
-ifeq ($(GFDL_INVARIANT_FREE),yes)
+else
 	echo '$(p_cpp) binary: binary-without-manpage' \
 	  >> $(d_cpp)/usr/share/lintian/overrides/$(p_cpp)
 endif
@@ -52,13 +84,6 @@
 	debian/dh_doclink -p$(p_cpp) $(p_xbase)
 	debian/dh_rmemptydirs -p$(p_cpp)
 
-ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTONS)))
-	dwz $(d_cpp)/$(gcc_lexec_dir)/cc1
-endif
-	dh_strip -p$(p_cpp) \
-	  $(if $(unstripped_exe),-X/cc1)
-	dh_shlibdeps -p$(p_cpp)
-
 	echo $(p_cpp) >> debian/arch_binaries
 
 	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
--- a/debian/rules.d/binary-cxx.mk
+++ b/debian/rules.d/binary-cxx.mk
@@ -2,21 +2,32 @@
   ifneq (,$(filter yes, $(biarch64) $(biarch32) $(biarchn32) $(biarchx32) $(biarchhf) $(biarchsf)))
     arch_binaries  := $(arch_binaries) cxx-multi
   endif
-  arch_binaries  := $(arch_binaries) cxx
+  ifeq ($(unprefixed_names),yes)
+    arch_binaries := $(arch_binaries) cxx
+  endif
+  arch_binaries  := $(arch_binaries) cxx-nat
 endif
 
+dirs_cxxn = \
+	$(PF)/bin \
+	$(gcc_lexec_dir) \
+	$(PF)/share/man/man1 \
+	usr/share/lintian/overrides
+
 dirs_cxx = \
 	$(docdir)/$(p_xbase)/C++ \
 	$(PF)/bin \
 	$(PF)/share/info \
 	$(gcc_lexec_dir) \
-	$(PF)/share/man/man1
-files_cxx = \
+	$(PF)/share/man/man1 \
+	usr/share/lintian/overrides
+
+files_cxxn = \
 	$(PF)/bin/$(cmd_prefix)g++$(pkg_ver) \
 	$(gcc_lexec_dir)/cc1plus
 
 ifneq ($(GFDL_INVARIANT_FREE),yes)
-  files_cxx += \
+  files_cxxn += \
 	$(PF)/share/man/man1/$(cmd_prefix)g++$(pkg_ver).1
 endif
 
@@ -24,6 +35,35 @@
 d_cxx_m	= debian/$(p_cxx_m)
 
 # ----------------------------------------------------------------------
+$(binary_stamp)-cxx-nat: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_cxxn)
+	dh_installdirs -p$(p_cxxn) $(dirs_cxxn)
+	$(dh_compat2) dh_movefiles -p$(p_cxxn) $(files_cxxn)
+
+	echo '$(p_cxxn) binary: hardening-no-pie' \
+	  > $(d_cxxn)/usr/share/lintian/overrides/$(p_cxxn)
+ifeq ($(GFDL_INVARIANT_FREE),yes)
+	echo '$(p_cxxn) binary: binary-without-manpage' \
+	  >> $(d_cxxn)/usr/share/lintian/overrides/$(p_cxxn)
+endif
+
+	debian/dh_doclink -p$(p_cxxn) $(p_xbase)
+	debian/dh_rmemptydirs -p$(p_cxxn)
+
+	dh_shlibdeps -p$(p_cxxn)
+ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTONS)))
+	dwz \
+	  $(d_cxxn)/$(gcc_lexec_dir)/cc1plus
+endif
+	dh_strip -p$(p_cxxn) $(if $(unstripped_exe),-X/cc1plus)
+	echo $(p_cxxn) >> debian/arch_binaries
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
 $(binary_stamp)-cxx: $(install_stamp)
 	dh_testdir
 	dh_testroot
@@ -31,21 +71,13 @@
 
 	rm -rf $(d_cxx)
 	dh_installdirs -p$(p_cxx) $(dirs_cxx)
-	$(dh_compat2) dh_movefiles -p$(p_cxx) $(files_cxx)
 
-ifeq ($(unprefixed_names),yes)
 	ln -sf $(cmd_prefix)g++$(pkg_ver) \
 	    $(d_cxx)/$(PF)/bin/g++$(pkg_ver)
-  ifneq ($(GFDL_INVARIANT_FREE),yes)
+ifneq ($(GFDL_INVARIANT_FREE),yes)
 	ln -sf $(cmd_prefix)g++$(pkg_ver).1.gz \
 	    $(d_cxx)/$(PF)/share/man/man1/g++$(pkg_ver).1.gz
-  endif
-endif
-
-	mkdir -p $(d_cxx)/usr/share/lintian/overrides
-	echo '$(p_cxx) binary: hardening-no-pie' \
-	  > $(d_cxx)/usr/share/lintian/overrides/$(p_cxx)
-ifeq ($(GFDL_INVARIANT_FREE),yes)
+else
 	echo '$(p_cxx) binary: binary-without-manpage' \
 	  >> $(d_cxx)/usr/share/lintian/overrides/$(p_cxx)
 endif
@@ -56,12 +88,6 @@
 		$(d_cxx)/$(docdir)/$(p_xbase)/C++/changelog
 	debian/dh_rmemptydirs -p$(p_cxx)
 
-	dh_shlibdeps -p$(p_cxx)
-ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTONS)))
-	dwz \
-	  $(d_cxx)/$(gcc_lexec_dir)/cc1plus
-endif
-	dh_strip -p$(p_cxx) $(if $(unstripped_exe),-X/cc1plus)
 	echo $(p_cxx) >> debian/arch_binaries
 
 	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
--- a/debian/rules.d/binary-gcc.mk
+++ b/debian/rules.d/binary-gcc.mk
@@ -6,7 +6,10 @@
     arch_binaries  := $(arch_binaries) gcc-plugindev
   endif
 
-  arch_binaries  := $(arch_binaries) gcc
+  ifeq ($(unprefixed_names),yes)
+    arch_binaries  := $(arch_binaries) gcc
+  endif
+  arch_binaries  := $(arch_binaries) gcc-nat
 
   ifneq ($(DEB_CROSS),yes)
     ifneq ($(GFDL_INVARIANT_FREE),yes)
@@ -26,15 +29,21 @@
 # not all files $(PF)/include/*.h are part of gcc,
 # but it becomes difficult to name all these files ...
 
-dirs_gcc = \
-	$(docdir)/$(p_xbase)/{gcc,libssp,gomp,itm,quadmath,sanitizer,mpx} \
+dirs_gccn = \
 	$(PF)/bin \
 	$(gcc_lexec_dir) \
 	$(gcc_lib_dir)/{include,include-fixed} \
-	$(PF)/share/man/man1 $(libgcc_dir)
+	$(PF)/share/man/man1 $(libgcc_dir) \
+	usr/share/lintian/overrides
+
+dirs_gcc = \
+	$(docdir)/$(p_xbase)/{gcc,libssp,gomp,itm,quadmath,sanitizer,mpx} \
+	$(PF)/bin \
+	$(PF)/share/man/man1 \
+	usr/share/lintian/overrides
 
 # XXX: what about triarch mapping?
-files_gcc = \
+files_gccn = \
 	$(PF)/bin/$(cmd_prefix){gcc,gcov,gcov-tool,gcov-dump}$(pkg_ver) \
 	$(PF)/bin/$(cmd_prefix)gcc-{ar,ranlib,nm}$(pkg_ver) \
 	$(PF)/share/man/man1/$(cmd_prefix)gcc-{ar,nm,ranlib}$(pkg_ver).1 \
@@ -43,15 +52,15 @@
 		&& echo $(gcc_lib_dir)/SYSCALLS.c.X)
 
 ifeq ($(with_libcc1_plugin),yes)
-    files_gcc += \
+    files_gccn += \
 	$(gcc_lib_dir)/plugin/libc[cp]1plugin.so{,.0,.0.0.0}
 endif
 
-files_gcc += \
+files_gccn += \
 	$(gcc_lexec_dir)/liblto_plugin.so{,.0,.0.0.0}
 
 ifeq ($(DEB_STAGE),stage1)
-    files_gcc += \
+    files_gccn += \
 	$(gcc_lib_dir)/include \
 	$(shell for h in \
 		  README limits.h syslimits.h; \
@@ -62,7 +71,7 @@
 endif
 
 ifneq ($(GFDL_INVARIANT_FREE),yes)
-    files_gcc += \
+    files_gccn += \
 	$(PF)/share/man/man1/$(cmd_prefix){gcc,gcov}$(pkg_ver).1 \
 	$(PF)/share/man/man1/$(cmd_prefix)gcov-{dump,tool}$(pkg_ver).1
 endif
@@ -83,6 +92,59 @@
 d_tst	= debian/$(p_tst)
 
 # ----------------------------------------------------------------------
+$(binary_stamp)-gcc-nat: $(install_dependencies)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_gccn)
+	dh_installdirs -p$(p_gccn) $(dirs_gccn)
+
+ifeq ($(with_gomp),yes)
+	mv $(d)/$(usr_lib)/libgomp*.spec $(d_gccn)/$(gcc_lib_dir)/
+endif
+ifeq ($(with_itm),yes)
+	mv $(d)/$(usr_lib)/libitm*.spec $(d_gccn)/$(gcc_lib_dir)/
+endif
+ifeq ($(with_asan),yes)
+	mv $(d)/$(usr_lib)/libsanitizer*.spec $(d_gccn)/$(gcc_lib_dir)/
+endif
+ifeq ($(with_mpx),yes)
+	mv $(d)/$(usr_lib)/libmpx.spec $(d_gccn)/$(gcc_lib_dir)/
+endif
+ifeq ($(with_cc1),yes)
+	rm -f $(d)/$(PF)/lib/$(DEB_HOST_MULTIARCH)/libcc1.so
+	dh_link -p$(p_gccn) \
+	    /$(PF)/lib/$(DEB_HOST_MULTIARCH)/libcc1.so.$(CC1_SONAME) \
+	    /$(gcc_lib_dir)/libcc1.so
+endif
+
+	$(dh_compat2) dh_movefiles -p$(p_gccn) $(files_gccn)
+
+#	dh_installdebconf
+	debian/dh_doclink -p$(p_gccn) $(p_xbase)
+
+	echo '$(p_gccn) binary: hardening-no-pie' \
+	  > $(d_gccn)/usr/share/lintian/overrides/$(p_gccn)
+ifeq ($(GFDL_INVARIANT_FREE),yes)
+	echo '$(p_gccn) binary: binary-without-manpage' \
+	  >> $(d_gccn)/usr/share/lintian/overrides/$(p_gccn)
+endif
+
+	debian/dh_rmemptydirs -p$(p_gccn)
+ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTONS)))
+	dwz \
+	  $(d_gccn)/$(gcc_lexec_dir)/lto1 \
+	  $(d_gccn)/$(gcc_lexec_dir)/lto-wrapper \
+	  $(d_gccn)/$(gcc_lexec_dir)/collect2
+endif
+	dh_strip -p$(p_gccn) \
+	  $(if $(unstripped_exe),-X/lto1)
+	dh_shlibdeps -p$(p_gccn)
+	echo $(p_gccn) >> debian/arch_binaries
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
 $(binary_stamp)-gcc: $(install_dependencies)
 	dh_testdir
 	dh_testroot
@@ -102,12 +164,10 @@
 		$(d_gcc)/$(docdir)/$(p_xbase)/libssp/changelog
 endif
 ifeq ($(with_gomp),yes)
-	mv $(d)/$(usr_lib)/libgomp*.spec $(d_gcc)/$(gcc_lib_dir)/
 	cp -p $(srcdir)/libgomp/ChangeLog \
 		$(d_gcc)/$(docdir)/$(p_xbase)/gomp/changelog
 endif
 ifeq ($(with_itm),yes)
-	mv $(d)/$(usr_lib)/libitm*.spec $(d_gcc)/$(gcc_lib_dir)/
 	cp -p $(srcdir)/libitm/ChangeLog \
 		$(d_gcc)/$(docdir)/$(p_xbase)/itm/changelog
 endif
@@ -116,40 +176,31 @@
 		$(d_gcc)/$(docdir)/$(p_xbase)/quadmath/changelog
 endif
 ifeq ($(with_asan),yes)
-	mv $(d)/$(usr_lib)/libsanitizer*.spec $(d_gcc)/$(gcc_lib_dir)/
 	cp -p $(srcdir)/libsanitizer/ChangeLog \
 		$(d_gcc)/$(docdir)/$(p_xbase)/sanitizer/changelog
 endif
 ifeq ($(with_mpx),yes)
-	mv $(d)/$(usr_lib)/libmpx.spec $(d_gcc)/$(gcc_lib_dir)/
 	cp -p $(srcdir)/libmpx/ChangeLog \
 		$(d_gcc)/$(docdir)/$(p_xbase)/mpx/changelog
 endif
-ifeq ($(with_cc1),yes)
-	rm -f $(d)/$(PF)/lib/$(DEB_HOST_MULTIARCH)/libcc1.so
-	dh_link -p$(p_gcc) \
-	    /$(PF)/lib/$(DEB_HOST_MULTIARCH)/libcc1.so.$(CC1_SONAME) \
-	    /$(gcc_lib_dir)/libcc1.so
-endif
 
-	$(dh_compat2) dh_movefiles -p$(p_gcc) $(files_gcc)
-
-ifeq ($(unprefixed_names),yes)
 	for i in gcc gcov gcov-dump gcov-tool gcc-ar gcc-nm gcc-ranlib; do \
 	  ln -sf $(cmd_prefix)$$i$(pkg_ver) \
 	    $(d_gcc)/$(PF)/bin/$$i$(pkg_ver); \
 	done
-  ifneq ($(GFDL_INVARIANT_FREE),yes)
+ifneq ($(GFDL_INVARIANT_FREE),yes)
 	for i in gcc gcov gcov-dump gcov-tool; do \
 	  ln -sf $(cmd_prefix)$$i$(pkg_ver).1.gz \
 	    $(d_gcc)/$(PF)/share/man/man1/$$i$(pkg_ver).1.gz; \
 	done
-  endif
+else
+	echo '$(p_gcc) binary: binary-without-manpage' \
+	  >> $(d_gcc)/usr/share/lintian/overrides/$(p_gcc)
+endif
 	for i in gcc-ar gcc-nm gcc-ranlib; do \
 	  ln -sf $(cmd_prefix)$$i$(pkg_ver).1.gz \
 	    $(d_gcc)/$(PF)/share/man/man1/$$i$(pkg_ver).1.gz; \
 	done
-endif
 
 #	dh_installdebconf
 	debian/dh_doclink -p$(p_gcc) $(p_xbase)
@@ -169,28 +220,9 @@
 	    echo ""; \
 	    cat $(builddir)/gcc/.bad_compare; \
 	  ) > $(d_gcc)/$(docdir)/$(p_xbase)/BOOTSTRAP_COMPARISION_FAILURE; \
-	else \
-	  true; \
 	fi
 
-	mkdir -p $(d_gcc)/usr/share/lintian/overrides
-	echo '$(p_gcc) binary: hardening-no-pie' \
-	  > $(d_gcc)/usr/share/lintian/overrides/$(p_gcc)
-ifeq ($(GFDL_INVARIANT_FREE),yes)
-	echo '$(p_gcc) binary: binary-without-manpage' \
-	  >> $(d_gcc)/usr/share/lintian/overrides/$(p_gcc)
-endif
-
 	debian/dh_rmemptydirs -p$(p_gcc)
-ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTONS)))
-	dwz \
-	  $(d_gcc)/$(gcc_lexec_dir)/lto1 \
-	  $(d_gcc)/$(gcc_lexec_dir)/lto-wrapper \
-	  $(d_gcc)/$(gcc_lexec_dir)/collect2
-endif
-	dh_strip -p$(p_gcc) \
-	  $(if $(unstripped_exe),-X/lto1)
-	dh_shlibdeps -p$(p_gcc)
 	echo $(p_gcc) >> debian/arch_binaries
 
 	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
--- a/debian/rules2
+++ b/debian/rules2
@@ -1821,6 +1823,10 @@
   pkg_ver := -$(BASE_VERSION)
 endif
 
+p_gccn = gcc$(pkg_ver)-$(subst _,-,$(TARGET_ALIAS))
+p_cppn = cpp$(pkg_ver)-$(subst _,-,$(TARGET_ALIAS))
+p_cxxn = g++$(pkg_ver)-$(subst _,-,$(TARGET_ALIAS))
+
 # if native or rtlibs build
 ifeq ($(if $(filter yes,$(DEB_CROSS)),$(if $(filter rtlibs,$(DEB_STAGE)),native,cross),native),native)
   p_base = gcc$(pkg_ver)-base
@@ -1854,9 +1860,12 @@
 d_base	= debian/$(p_base)
 d_xbase = debian/$(p_xbase)
 d_gcc	= debian/$(p_gcc)
+d_gccn  = debian/$(p_gccn)
 d_cpp	= debian/$(p_cpp)
+d_cppn  = debian/$(p_cppn)
 d_cppd	= debian/$(p_cppd)
 d_cxx	= debian/$(p_cxx)
+d_cxxn  = debian/$(p_cxxn)
 d_doc	= debian/$(p_doc)
 d_lgcc	= debian/$(p_lgcc)
 d_hppa64= debian/$(p_hppa64)

Reply via email to