From patchwork Fri Jun 24 13:55:29 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Manolis Ragkousis X-Patchwork-Id: 13358 Received: (qmail 43408 invoked by uid 89); 24 Jun 2016 14:12:13 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Checked: by ClamAV 0.99.1 on sourceware.org X-Virus-Found: No X-Spam-SWARE-Status: No, score=-3.3 required=5.0 tests=BAYES_00, FREEMAIL_FROM, RP_MATCHES_RCVD, SPF_PASS autolearn=ham version=3.3.2 spammy=commencement, 2718, circular, car X-Spam-Status: No, score=-3.3 required=5.0 tests=BAYES_00, FREEMAIL_FROM, RP_MATCHES_RCVD, SPF_PASS autolearn=ham version=3.3.2 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on sourceware.org X-Spam-Level: X-HELO: lists.gnu.org Received: from lists.gnu.org (HELO lists.gnu.org) (208.118.235.17) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-SHA encrypted) ESMTPS; Fri, 24 Jun 2016 14:12:11 +0000 Received: from localhost ([::1]:43798 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bGRq3-0001Jt-8Y for patchwork@sourceware.org; Fri, 24 Jun 2016 10:12:07 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55436) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bGRaB-0007ks-0Z for guix-devel@gnu.org; Fri, 24 Jun 2016 09:55:44 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bGRa8-0007Un-6N for guix-devel@gnu.org; Fri, 24 Jun 2016 09:55:41 -0400 Received: from mail-wm0-x22b.google.com ([2a00:1450:400c:c09::22b]:37369) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bGRa0-0007UL-Kb; Fri, 24 Jun 2016 09:55:33 -0400 Received: by mail-wm0-x22b.google.com with SMTP id a66so26659207wme.0; Fri, 24 Jun 2016 06:55:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:subject:to:cc:message-id:date:user-agent:mime-version; bh=3aSVEuCwQB0nswGABUFKKf6uBTJITVKE+H37GG0cE/E=; b=C2X0+k3IN4oLzNdFzRIiGqMItTFFarhMK20fSwJcO3Op+9BTKAloEhoKpC4xZ2/mA0 f2xUtCho5tkOp89H8gZIJGxUqKvBE+jGasA/Jxb1j+btnuUl0kFTFbl9B7ocKN9HM3oz igm5Ngy8gqUg8joq7E4f3SmoA54dAXs06fLfqrRloJR3oqpmf0F22eEry34+lapkPI5/ cFgU+WGW8862cWBA1rz1s19SUybRUWA2UDkTUJT4FO2ffIVSgjFot6eYjh7pITzUn34w PQTwJaVuENZKovdISY6PmmXSxjiQrBbplDBBYuWvpyzUCZTKYda7RXvEFoDzRAWfFMHw 8HnA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:subject:to:cc:message-id:date:user-agent :mime-version; bh=3aSVEuCwQB0nswGABUFKKf6uBTJITVKE+H37GG0cE/E=; b=HrmgY7LT++3cVhNTQLvybVk5CZwa5f7+YLapxGDkiL5z8H5xnFIVg8PjI5z4xwhuD5 bJz9Kff+iFN7SDt9akz4OblwJUCzRlqaKOaFgq3jgStAEHQhchEvsENqRmAB7IC/4eu3 MEWQGTvaPLgtsoY9kSHj3Q4GLofFcw9d7WBZ5u1UN0T0NfLB9aldcBk3mKDAfYNkrWoF g6FHHadRdkwCBCQpQz3MTiufo2L3FYx4zPI3J8TH3qoW9v5fyzZq9Zz7GO16TwmXVRlY NbRTKqO4QijrdsLQ91MZnu0rsChjCyAEtm6g/RLYjWWGmfcVcMnFN/S6kQIQJoKDxsKe AbAQ== X-Gm-Message-State: ALyK8tI6zC21LyK8u+i1r++REcm47qwwS4viW82GFpY6LWYU20D/EHfHlUdOpSIdUo70PQ== X-Received: by 10.28.195.135 with SMTP id t129mr18991297wmf.78.1466776531809; Fri, 24 Jun 2016 06:55:31 -0700 (PDT) Received: from [192.168.2.110] (athedsl-4368891.home.otenet.gr. [79.130.25.235]) by smtp.gmail.com with ESMTPSA id jf3sm5236624wjb.41.2016.06.24.06.55.30 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 24 Jun 2016 06:55:30 -0700 (PDT) From: Manolis Ragkousis Subject: [PATCH] gnu: commencement: Add support for a native GNU/Hurd system. To: guix-devel@gnu.org Message-ID: <73d9a0c2-15df-2064-f17a-4f23780e8e06@gmail.com> Date: Fri, 24 Jun 2016 16:55:29 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.1.1 MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 2a00:1450:400c:c09::22b X-BeenThere: guix-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "Development of GNU Guix and the GNU System distribution." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-devel-bounces+patchwork=sourceware.org@gnu.org Sender: "Guix-devel" Hello everyone, This patch is from wip-hurd modified to apply to core-udpates. If it's okay I will push it to core-updates-next. Thank you, Manolis From 151868431cf3faafbf388dd2815745b3760ac12f Mon Sep 17 00:00:00 2001 From: Manolis Ragkousis Date: Fri, 24 Jun 2016 16:10:15 +0300 Subject: [PATCH] gnu: commencement: Add support for a native GNU/Hurd system. * gnu/packages/commencement.scm (kernel-headers-boot0, ld-wrapper-boot0, bison-boot0, flex-boot0, gnumach-headers-boot0, mig-boot0, hurd-headers-boot0, hurd-minimal-boot0, hurd-kernel-headers-boot0): New variables. (bison-boot1): Remove. (%boot1-inputs): Add ld-wrapper-boot0. (glibc-final-with-bootstrap-bash)[arguments]: Allow libpthread to find libihash. [propagated-inputs]: Use kernel-headers-boot0. [inputs]: Add "mig". (glibc-final)[arguments]: Use kernel-headers-boot0. (static-bash-for-glibc, bash-final)[native-inputs]: Use bison-boot0. --- gnu/packages/commencement.scm | 158 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 128 insertions(+), 30 deletions(-) diff --git a/gnu/packages/commencement.scm b/gnu/packages/commencement.scm index 8c82644..8866ab0 100644 --- a/gnu/packages/commencement.scm +++ b/gnu/packages/commencement.scm @@ -27,15 +27,18 @@ #:use-module (gnu packages bash) #:use-module (gnu packages gcc) #:use-module (gnu packages m4) + #:use-module (gnu packages indent) #:use-module (gnu packages file) #:use-module (gnu packages gawk) #:use-module (gnu packages bison) + #:use-module (gnu packages flex) #:use-module (gnu packages guile) #:use-module (gnu packages gettext) #:use-module (gnu packages multiprecision) #:use-module (gnu packages compression) #:use-module (gnu packages perl) #:use-module (gnu packages linux) + #:use-module (gnu packages hurd) #:use-module (gnu packages texinfo) #:use-module (gnu packages pkg-config) #:use-module (guix packages) @@ -46,7 +49,8 @@ #:use-module (srfi srfi-1) #:use-module (srfi srfi-26) #:use-module (ice-9 vlist) - #:use-module (ice-9 match)) + #:use-module (ice-9 match) + #:use-module (ice-9 regex)) ;;; Commentary: ;;; @@ -289,6 +293,44 @@ (current-source-location) #:guile %bootstrap-guile)))) +(define bison-boot0 + ;; This Bison is needed to build MiG so we need it early in the process. + ;; It is also needed to rebuild Bash's parser, which is modified by + ;; its CVE patches. Remove it when it's no longer needed. + (let* ((m4 (package-with-bootstrap-guile + (package-with-explicit-inputs m4 %boot0-inputs + (current-source-location) + #:guile %bootstrap-guile))) + (bison (package (inherit bison) + (propagated-inputs `(("m4" ,m4))) + (inputs '()) ;remove Flex... + (arguments + '(#:tests? #f ;... and thus disable tests + + ;; Zero timestamps in liby.a; this must be done + ;; explicitly here because the bootstrap Binutils don't + ;; do that (default is "cru".) + #:make-flags '("ARFLAGS=crD" "RANLIB=ranlib -D" + "V=1")))))) + (package + (inherit (package-with-bootstrap-guile + (package-with-explicit-inputs bison %boot0-inputs + (current-source-location) + #:guile %bootstrap-guile))) + (native-inputs `(("perl" ,perl-boot0)))))) + +(define flex-boot0 + ;; This Flex is needed to build MiG. + (let* ((flex (package (inherit flex) + (native-inputs `(("bison" ,bison-boot0))) + (propagated-inputs `(("m4" ,m4))) + (inputs `(("indent" ,indent))) + (arguments '(#:tests? #f))))) + (package-with-bootstrap-guile + (package-with-explicit-inputs flex %boot0-inputs + (current-source-location) + #:guile %bootstrap-guile)))) + (define (linux-libre-headers-boot0) "Return Linux-Libre header files for the bootstrap environment." ;; Note: this is wrapped in a thunk to nicely handle circular dependencies @@ -302,6 +344,63 @@ `(("perl" ,perl-boot0) ,@%boot0-inputs))))) +(define gnumach-headers-boot0 + (package-with-bootstrap-guile + (package-with-explicit-inputs gnumach-headers + %boot0-inputs + (current-source-location) + #:guile %bootstrap-guile))) + +(define mig-boot0 + (let* ((mig (package (inherit mig) + (native-inputs `(("bison" ,bison-boot0) + ("flex" ,flex-boot0))) + (inputs `(("flex" ,flex-boot0))) + (arguments + `(#:configure-flags + `(,(string-append "LDFLAGS=-Wl,-rpath=" + (assoc-ref %build-inputs "flex") "/lib/"))))))) + (package-with-bootstrap-guile + (package-with-explicit-inputs mig %boot0-inputs + (current-source-location) + #:guile %bootstrap-guile)))) + +(define hurd-headers-boot0 + (let ((hurd-headers (package (inherit hurd-headers) + (native-inputs `(("mig" ,mig-boot0))) + (inputs '())))) + (package-with-bootstrap-guile + (package-with-explicit-inputs hurd-headers %boot0-inputs + (current-source-location) + #:guile %bootstrap-guile)))) + +(define hurd-minimal-boot0 + (let ((hurd-minimal (package (inherit hurd-minimal) + (native-inputs `(("mig" ,mig-boot0))) + (inputs '())))) + (package-with-bootstrap-guile + (package-with-explicit-inputs hurd-minimal %boot0-inputs + (current-source-location) + #:guile %bootstrap-guile)))) + +(define (hurd-core-headers-boot0) + "Return the Hurd and Mach headers as well as initial Hurd libraries for +the bootstrap environment." + (package-with-bootstrap-guile + (package (inherit hurd-core-headers) + (arguments `(#:guile ,%bootstrap-guile + ,@(package-arguments hurd-core-headers))) + (inputs + `(("gnumach-headers" ,gnumach-headers-boot0) + ("hurd-headers" ,hurd-headers-boot0) + ("hurd-minimal" ,hurd-minimal-boot0) + ,@%boot0-inputs))))) + +(define* (kernel-headers-boot0 #:optional (system (%current-system))) + (match system + ("i586-gnu" (hurd-core-headers-boot0)) + (_ (linux-libre-headers-boot0)))) + (define texinfo-boot0 ;; Texinfo used to build libc's manual. ;; We build without ncurses because it fails to build at this stage, and @@ -320,9 +419,19 @@ (current-source-location) #:guile %bootstrap-guile)))) +(define ld-wrapper-boot0 + ;; We need this so binaries on Hurd will have libmachuser and libhurduser + ;; in their RUNPATH, otherwise validate-runpath will fail. + (make-ld-wrapper (string-append "ld-wrapper-" (boot-triplet)) + #:target (boot-triplet) + #:binutils binutils-boot0 + #:guile %bootstrap-guile + #:bash (car (assoc-ref %boot0-inputs "bash")))) + (define %boot1-inputs ;; 2nd stage inputs. `(("gcc" ,gcc-boot0) + ("ld-wrapper-cross" ,ld-wrapper-boot0) ("binutils-cross" ,binutils-boot0) ,@(alist-delete "binutils" %boot0-inputs))) @@ -356,6 +465,15 @@ (setenv "NATIVE_CPATH" (getenv "CPATH")) (unsetenv "CPATH") + ;; Tell 'libpthread' where to find 'libihash' on Hurd systems. + ,@(if (string-match "i586-gnu" (%current-system)) + `((substitute* "libpthread/Makefile" + (("LDLIBS-pthread.so =.*") + (string-append "LDLIBS-pthread.so = " + (assoc-ref %build-inputs "kernel-headers") + "/lib/libihash.a\n")))) + '()) + ;; 'rpcgen' needs native libc headers to be built. (substitute* "sunrpc/Makefile" (("sunrpc-CPPFLAGS =.*" all) @@ -363,7 +481,7 @@ "export CPATH\n" all "\n")))) ,phases))))) - (propagated-inputs `(("kernel-headers" ,(linux-libre-headers-boot0)))) + (propagated-inputs `(("kernel-headers" ,(kernel-headers-boot0)))) (native-inputs `(("texinfo" ,texinfo-boot0) ("perl" ,perl-boot0))) @@ -372,6 +490,11 @@ ;; it in $CPATH, hence the 'pre-configure' phase above. ,@%boot1-inputs + ;; A native MiG is needed to build Glibc on Hurd. + ,@(if (string-match "i586-gnu" (%current-system)) + `(("mig" ,mig-boot0)) + '()) + ;; A native GCC is needed to build `cross-rpcgen'. ("native-gcc" ,@(assoc-ref %boot0-inputs "gcc")) @@ -430,31 +553,6 @@ exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%" ("bash" ,bash))) (inputs '()))) -(define bison-boot1 - ;; XXX: This Bison is needed to rebuild Bash's parser, which is modified by - ;; its CVE patches. Remove it when it's no longer needed. - (let* ((m4 (package-with-bootstrap-guile - (package-with-explicit-inputs m4 %boot0-inputs - (current-source-location) - #:guile %bootstrap-guile))) - (bison (package (inherit bison) - (propagated-inputs `(("m4" ,m4))) - (inputs '()) ;remove Flex... - (arguments - '(#:tests? #f ;... and thus disable tests - - ;; Zero timestamps in liby.a; this must be done - ;; explicitly here because the bootstrap Binutils don't - ;; do that (default is "cru".) - #:make-flags '("ARFLAGS=crD" "RANLIB=ranlib -D" - "V=1")))))) - (package - (inherit (package-with-bootstrap-guile - (package-with-explicit-inputs bison %boot0-inputs - (current-source-location) - #:guile %bootstrap-guile))) - (native-inputs `(("perl" ,perl-boot0)))))) - (define static-bash-for-glibc ;; A statically-linked Bash to be used by GLIBC-FINAL in system(3) & co. (let* ((gcc (cross-gcc-wrapper gcc-boot0 binutils-boot0 @@ -473,7 +571,7 @@ exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%" (package-with-explicit-inputs bash inputs (current-source-location) #:guile %bootstrap-guile))) - (native-inputs `(("bison" ,bison-boot1)))))) + (native-inputs `(("bison" ,bison-boot0)))))) (define gettext-boot0 ;; A minimal gettext used during bootstrap. @@ -527,7 +625,7 @@ exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%" ;; if 'allowed-references' were per-output. (arguments `(#:allowed-references - ,(cons* `(,gcc-boot0 "lib") (linux-libre-headers-boot0) + ,(cons* `(,gcc-boot0 "lib") (kernel-headers-boot0) static-bash-for-glibc (package-outputs glibc-final-with-bootstrap-bash)) @@ -685,7 +783,7 @@ exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%" %boot3-inputs (current-source-location) #:guile %bootstrap-guile))) - (native-inputs `(("bison" ,bison-boot1))))) + (native-inputs `(("bison" ,bison-boot0))))) (define %boot4-inputs ;; Now use the final Bash. -- 2.8.3