Github messages for voidlinux
 help / color / mirror / Atom feed
From: sgn <sgn@users.noreply.github.com>
To: ml@inbox.vuxu.org
Subject: Re: [PR PATCH] [Updated] xbps-src: bootstrap from foreign distro fix
Date: Mon, 24 Aug 2020 16:17:38 +0200	[thread overview]
Message-ID: <20200824141738.zMJQHKTd6t41Y4Q1HH3YJjpON6ve8NyCdcDNDMRlJXI@z> (raw)
In-Reply-To: <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-24343@inbox.vuxu.org>

[-- Attachment #1: Type: text/plain, Size: 483 bytes --]

There is an updated pull request by sgn against master on the void-packages repository

https://github.com/sgn/void-packages xbps-src-bootstrap-foreign
https://github.com/void-linux/void-packages/pull/24343

xbps-src: bootstrap from foreign distro fix
Trying to binary-bootstrap from Ubuntu 20.04 today.
This is a preliminary fix.

---
Still have problems with `binutils` on Ubuntu 20.04

A patch file from https://github.com/void-linux/void-packages/pull/24343.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-xbps-src-bootstrap-foreign-24343.patch --]
[-- Type: text/x-diff, Size: 8553 bytes --]

From 75bd3aefdce9e95f686da124b9d5ca6380d71663 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=C4=90o=C3=A0n=20Tr=E1=BA=A7n=20C=C3=B4ng=20Danh?=
 <congdanhqx@gmail.com>
Date: Tue, 18 Aug 2020 20:42:51 +0700
Subject: [PATCH 1/6] xbps-src: environment: keep LD_LIBRARY_PATH outside of
 chroot

Using self-built xbps in non-standard location requires setting
LD_LIBRARY_PATH.  Thus, bootstrapping from foreign distribution
with those binaries failed.
---
 common/environment/setup/sourcepkg.sh | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/common/environment/setup/sourcepkg.sh b/common/environment/setup/sourcepkg.sh
index bc06f745b78..d7253459be3 100644
--- a/common/environment/setup/sourcepkg.sh
+++ b/common/environment/setup/sourcepkg.sh
@@ -16,9 +16,13 @@ unset -v go_import_path go_package go_mod_mode
 unset -v patch_args disable_parallel_build keep_libtool_archives make_use_env
 unset -v reverts subpackages makedepends hostmakedepends checkdepends depends restricted
 unset -v nopie build_options build_options_default bootstrap repository reverts
-unset -v CFLAGS CXXFLAGS FFLAGS CPPFLAGS LDFLAGS LD_LIBRARY_PATH
+unset -v CFLAGS CXXFLAGS FFLAGS CPPFLAGS LDFLAGS
 unset -v CC CXX CPP GCC LD AR AS RANLIB NM OBJDUMP OBJCOPY STRIP READELF PKG_CONFIG
 
+if [ "$IN_CHROOT" ]; then
+	unset -v LD_LIBRARY_PATH
+fi
+
 # hooks/do-extract/00-distfiles
 unset -v skip_extraction
 

From 83985815cb94ae58c436f6855307c3f0b8a19e70 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=C4=90o=C3=A0n=20Tr=E1=BA=A7n=20C=C3=B4ng=20Danh?=
 <congdanhqx@gmail.com>
Date: Thu, 20 Aug 2020 20:24:52 +0700
Subject: [PATCH 2/6] glibc: fix bootstrap with gcc -fcf-protection

Some distros ship gcc that implicitly enables the "-fcf-protection".
Upstream GCC does not do that, so the glibc configure logic is not
prepared for that. Hence, bootstrapping glibc on such system will
result in error:

	elf/ld.so.new: hidden symbol `_dl_cet_open_check' isn't defined

We must --enable-cet to fix it.
Future glibc will --enable-cet automatically if -fcf-protection.

Reference:
1: https://stackoverflow.com/a/59006638
2: https://sourceware.org/bugzilla/show_bug.cgi?id=25225
---
 srcpkgs/glibc/template | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/srcpkgs/glibc/template b/srcpkgs/glibc/template
index 4ea327aa1fa..5f0868ceb77 100644
--- a/srcpkgs/glibc/template
+++ b/srcpkgs/glibc/template
@@ -88,8 +88,11 @@ do_configure() {
 		configure_args+=" --host=${XBPS_CROSS_TRIPLET}"
 		configure_args+=" --with-sysroot=${XBPS_CROSS_BASE}"
 		configure_args+=" --with-headers=${XBPS_CROSS_BASE}/usr/include"
-	else
+	elif [ ! "$CHROOT_READY" ]; then
 		configure_args+=" --with-headers=${XBPS_MASTERDIR}/usr/include"
+		# TODO: remove when upgrade to newer version
+		configure_args+=" --enable-cet"
+		CPPFLAGS+=" -isystem ${XBPS_MASTERDIR}/usr/include"
 	fi
 
 	# Disable SSP from CFLAGS (enabled below)

From 88f8f55dcd60b393085a3cdcb7de7fc825092ea6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=C4=90o=C3=A0n=20Tr=E1=BA=A7n=20C=C3=B4ng=20Danh?=
 <congdanhqx@gmail.com>
Date: Mon, 24 Aug 2020 19:51:23 +0700
Subject: [PATCH 3/6] xbps-src: bootstrap: link with our newly built libc

On source bootstrapping, libc's development files haven't been installed
into $XBPS_MASTERDIR yet. Hence, compiler and linker will work with
bootstrap host's files instead of our files.

The symptom can be seen easier on either system that don't have libc's
development files installed, or on Ubuntu (or Debian-derivatives), where
libc's developments not installed into "/usr/lib".

Fix this by adding new build-helper for bootstrap packages, which will
add libc's development files into "makedepends" when bootstrapping.
---
 common/build-helper/bootstrap.sh  | 7 +++++++
 common/xbps-src/shutils/common.sh | 4 ++++
 2 files changed, 11 insertions(+)
 create mode 100644 common/build-helper/bootstrap.sh

diff --git a/common/build-helper/bootstrap.sh b/common/build-helper/bootstrap.sh
new file mode 100644
index 00000000000..c4e7175e640
--- /dev/null
+++ b/common/build-helper/bootstrap.sh
@@ -0,0 +1,7 @@
+if [ ! "$CHROOT_READY" ]; then
+	case "$sourcepkg,$XBPS_TARGET_LIBC" in
+	kernel-libc-headers,*|glibc,*|musl,*) ;;
+	*,musl)	makedepends+=" musl-devel" ;;
+	*,*)	makedepends+=" glibc-devel" ;;
+	esac
+fi
diff --git a/common/xbps-src/shutils/common.sh b/common/xbps-src/shutils/common.sh
index e8bcf577c6b..4096378cb7a 100644
--- a/common/xbps-src/shutils/common.sh
+++ b/common/xbps-src/shutils/common.sh
@@ -649,6 +649,10 @@ setup_pkg() {
 
     source_file $XBPS_COMMONDIR/environment/build-style/${build_style}.sh
 
+    # Need libc-devel on bootstrap since base-chroot not installed
+    if [ "$bootstrap" ]; then
+        . $XBPS_BUILDHELPERDIR/bootstrap.sh
+    fi
     # Source all build-helper files that are defined
     for f in $build_helper; do
         if [ ! -r $XBPS_BUILDHELPERDIR/${f}.sh ];  then

From 6ab20216a94a20772f1b66773ddd3fa697b6da03 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=C4=90o=C3=A0n=20Tr=E1=BA=A7n=20C=C3=B4ng=20Danh?=
 <congdanhqx@gmail.com>
Date: Mon, 24 Aug 2020 20:49:22 +0700
Subject: [PATCH 4/6] xbps-src: bootstrap: link with our newly built libc

On source bootstrapping, without --sysroot, ld will find dynamic linker
in "/usr/lib" instead of "$XBPS_MASTERDIR/usr/lib".  The sympton can be
seen when bootstrap from Ubuntu 20.04 amd64, where host's dynamic linker
is located in "/lib/x86_64-linux-gnu/" and symlinked to "/lib64".

Pass "--sysroot" to "ld".
---
 common/environment/configure/bootstrap.sh | 1 +
 1 file changed, 1 insertion(+)

diff --git a/common/environment/configure/bootstrap.sh b/common/environment/configure/bootstrap.sh
index f5ba5f442c7..4598a6e1496 100644
--- a/common/environment/configure/bootstrap.sh
+++ b/common/environment/configure/bootstrap.sh
@@ -1,4 +1,5 @@
 if [ -z "$CHROOT_READY" ]; then
 	CFLAGS+=" -isystem ${XBPS_MASTERDIR}/usr/include"
 	LDFLAGS+=" -L${XBPS_MASTERDIR}/usr/lib -Wl,-rpath-link=${XBPS_MASTERDIR}/usr/lib"
+	LDFLAGS+=" -Wl,--sysroot=${XBPS_MASTERDIR}"
 fi

From 82e346da1a5e6069c6edb4e8c28a1f503e80f720 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=C4=90o=C3=A0n=20Tr=E1=BA=A7n=20C=C3=B4ng=20Danh?=
 <congdanhqx@gmail.com>
Date: Mon, 24 Aug 2020 21:14:41 +0700
Subject: [PATCH 5/6] gcc: only change LD_LIBRARY_PATH if applicable

There're cases that host's libc is newer than our libc, thus, anything
linked with host's libc doesn't work with our libraries.

Check if LD_LIBRARY_PATH works before attempt to export.
---
 srcpkgs/gcc/template | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/srcpkgs/gcc/template b/srcpkgs/gcc/template
index ead6f05a498..a0bcb2f1961 100644
--- a/srcpkgs/gcc/template
+++ b/srcpkgs/gcc/template
@@ -145,6 +145,14 @@ if [ "$CROSS_BUILD" ]; then
 	fi
 fi
 
+_setup_ld_library_path() {
+	local _llp="${XBPS_MASTERDIR}/usr/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
+	if LD_LIBRARY_PATH="$_llp" sh -c true
+	then
+		export LD_LIBRARY_PATH="$_llp"
+	fi
+}
+
 post_extract() {
 	mkdir -p ${wrksrc}/{gmp,mpfr,mpc,isl}
 	cp -ar ${XBPS_BUILDDIR}/gmp-${_gmp_version}/* ${wrksrc}/gmp/
@@ -240,7 +248,7 @@ do_configure() {
 		_args+=" --enable-sjlj-exceptions=no"
 		_langs+=",objc,obj-c++,fortran"
 	elif [ -z "$CHROOT_READY" ]; then
-		export LD_LIBRARY_PATH="${XBPS_MASTERDIR}/usr/lib"
+		_setup_ld_library_path
 		_args+=" --build=${_triplet}"
 	else
 		_langs="c,c++,objc,obj-c++,fortran,lto"
@@ -324,7 +332,7 @@ do_configure() {
 }
 do_build() {
 	if [ -z "$CHROOT_READY" ]; then
-		export LD_LIBRARY_PATH="${XBPS_MASTERDIR}/usr/lib"
+		_setup_ld_library_path
 	fi
 	cd build
 	if [ "$build_option_gnatboot" ]; then

From 8289ecc6bbef23eb983336fadec03d2001ec1cea Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=C4=90o=C3=A0n=20Tr=E1=BA=A7n=20C=C3=B4ng=20Danh?=
 <congdanhqx@gmail.com>
Date: Mon, 24 Aug 2020 21:06:57 +0700
Subject: [PATCH 6/6] m4: disable makeinfo unconditionally on bootstrap

---
 srcpkgs/m4/template | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/srcpkgs/m4/template b/srcpkgs/m4/template
index 111dc6a6b07..6db163696da 100644
--- a/srcpkgs/m4/template
+++ b/srcpkgs/m4/template
@@ -14,6 +14,11 @@ maintainer="Enno Boland <gottox@voidlinux.org>"
 distfiles="${GNU_SITE}/${pkgname}/${pkgname}-${version}.tar.xz"
 checksum=f2c1e86ca0a404ff281631bdc8377638992744b175afb806e25871a24a934e07
 
+# Ubuntu 20.04 makeinfo breaks the build with ISO-8859-1 characters
+if [ ! "$CHROOT_READY" ]; then
+	export MAKEINFO=true
+fi
+
 pre_check() {
 	case "$XBPS_TARGET_MACHINE" in
 		*-musl* )

  parent reply	other threads:[~2020-08-24 14:17 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-08-18 13:54 [PR PATCH] " sgn
2020-08-20 13:36 ` [PR PATCH] [Updated] " sgn
2020-08-22  1:11 ` sgn
2020-08-24 14:17 ` sgn [this message]
2020-08-24 14:22 ` sgn
2020-08-25 12:25 ` [PR PATCH] [Updated] " sgn
2020-09-19  3:42 ` [PR PATCH] [Closed]: " sgn
2020-12-07  0:04 ` sgn

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200824141738.zMJQHKTd6t41Y4Q1HH3YJjpON6ve8NyCdcDNDMRlJXI@z \
    --to=sgn@users.noreply.github.com \
    --cc=ml@inbox.vuxu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).