From be73ea496657099603cce7e20413b9c6ee993c94 Mon Sep 17 00:00:00 2001
From: Mohammad Akhlaghi <mohammad@akhlaghi.org>
Date: Sun, 19 Jan 2020 21:15:37 +0000
Subject: LIBRARY_PATH is set accordingly based on the host

Until now, GCC wouldn't build properly on Debian-based operating systems
because `ld' needed to link with several necessary C library features like
`crti.o' and `crtn.o' (this is an `ld' issue, not GCC). The solution is to
add the directory containing them to `LIBRARY_PATH'. In the previous
commit, I actually searched for these files, but while testing on another
system, I noticed that it can be problematic (other architectures may
exist).

With this commit, we are actually finding the build architecture of the
running GCC (which is the same as the `ld') and using that to fix a fixed
directory to `LIBRARY_PATH'.
---
 reproduce/software/bash/configure.sh | 56 +++++++++++++++++++++++++-----------
 1 file changed, 40 insertions(+), 16 deletions(-)

(limited to 'reproduce/software/bash')

diff --git a/reproduce/software/bash/configure.sh b/reproduce/software/bash/configure.sh
index 0bb0917..c0f8025 100755
--- a/reproduce/software/bash/configure.sh
+++ b/reproduce/software/bash/configure.sh
@@ -848,21 +848,26 @@ fi
 # and necessary headers in a non-standard place, and we can't build GCC. So
 # we need to find them first. The `sys/cdefs.h' header is also in a
 # similarly different location.
-if [ x"$$on_mac_os" = xyes ]; then
-    sys_libc_ldflags=;
-else
-    sys_libc_ldflags=$(find /lib* /usr/lib*/* -name "libc.a" \
-                           | sed -e's|/libc\.a||g' \
-                           | tr ' ' '\n' \
-                           | awk '{printf "-L%s ", $1}' );
-    sys_libc_cppflags=$(echo $sys_libc_ldflags \
-                            | tr ' ' '\n' \
-                            | sed -e's|-L|-I|' -e's|/lib/|/include/|' \
-                            | awk '!/\/lib/{printf "%s ", $1}' );
-    #echo "sys_libc_ldflags: $sys_libc_ldflags"
-    #echo "sys_libc_cppflags: $sys_libc_cppflags"
-    export LDFLAGS="$LDFLAGS $sys_libc_ldflags"
-    export CPPFLAGS="$CPPFLAGS $sys_libc_cppflags"
+sys_cppflags=""
+sys_library_path=""
+if [ x"$$on_mac_os" != xyes ]; then
+
+    # Get the GCC target name of the compiler, when its given, special
+    # C libraries and headers are in a sub-directory of the host.
+    gcctarget=$(gcc -v 2>&1 \
+                    | tr ' ' '\n' \
+                    | awk '/\-\-target/' \
+                    | sed -e's/\-\-target=//')
+    if [ x"$gcctarget" != x ]; then
+        if [ -f /usr/lib/$gcctarget/libc.a ]; then
+            export sys_library_path=/usr/lib/$gcctarget
+            export sys_cppflags=-I/usr/include/$gcctarget
+        fi
+    fi
+
+    # For a check:
+    #echo "sys_library_path: $sys_library_path"
+    #echo "sys_cppflags: $sys_cppflags"
 fi
 
 
@@ -1149,6 +1154,24 @@ fi
 
 
 
+# library_path (ONLY FOR BASIC)
+# -----------------------------
+#
+# During the basic build, we need to include possibly existing special C
+# compiler targets (if they exist).
+export CPPFLAGS="$CPPFLAGS $sys_cppflags"
+if [ x"$sys_library_path" != x ]; then
+    if [ x"$LIBRARY_PATH" = x ]; then
+        export LIBRARY_PATH="$sys_library_path"
+    else
+        export LIBRARY_PATH="$LIBRARY_PATH:$sys_library_path"
+    fi
+fi
+
+
+
+
+
 # Build basic software
 # --------------------
 #
@@ -1160,9 +1183,9 @@ make -f reproduce/software/make/basic.mk \
      good_static_libc=$good_static_libc \
      rpath_command=$rpath_command \
      static_build=$static_build \
+     numthreads=$numthreads \
      needs_ldl=$needs_ldl \
      on_mac_os=$on_mac_os \
-     numthreads=$numthreads \
      host_cc=$host_cc \
      -j$numthreads
 
@@ -1184,6 +1207,7 @@ else
 fi
 .local/bin/env -i HOME=$bdir \
     .local/bin/make -f reproduce/software/make/high-level.mk \
+                    sys_library_path=$sys_library_path
                     rpath_command=$rpath_command \
                     static_build=$static_build \
                     numthreads=$numthreads \
-- 
cgit v1.2.1