Patchwork Add php

login
register
mail settings
Submitter Julien Lepiller
Date Oct. 30, 2016, 12:08 p.m.
Message ID <20161030130828.3797d37d@polymos.lepiller.eu>
Download mbox | patch
Permalink /patch/17021/
State New
Headers show

Comments

Julien Lepiller - Oct. 30, 2016, 12:08 p.m.
Hi,

here is a patch to add php to guix.
Efraim Flashner - Oct. 30, 2016, 2:01 p.m.
On Sun, Oct 30, 2016 at 01:08:28PM +0100, Julien Lepiller wrote:
> Hi,
> 
> here is a patch to add php to guix.

> From b20406a07e8d8c99a189f5295929ff76a53d47e7 Mon Sep 17 00:00:00 2001
> From: Julien Lepiller <julien@lepiller.eu>
> Date: Sun, 30 Oct 2016 15:05:51 +0100
> Subject: [PATCH] gnu: Add php
> 
> * gnu/packages/php.scm: New file.
> * gnu/packages/php.scm (php): New variable.
> ---
>  gnu/local.mk         |   1 +
>  gnu/packages/php.scm | 187 +++++++++++++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 188 insertions(+)
>  create mode 100644 gnu/packages/php.scm
> 
> diff --git a/gnu/local.mk b/gnu/local.mk
> index a64b7ec..6a69391 100644
> --- a/gnu/local.mk
> +++ b/gnu/local.mk
> @@ -292,6 +292,7 @@ GNU_SYSTEM_MODULES =				\
>    %D%/packages/pem.scm				\
>    %D%/packages/perl.scm				\
>    %D%/packages/photo.scm			\
> +  %D%/packages/php.scm				\
>    %D%/packages/pkg-config.scm			\
>    %D%/packages/plotutils.scm			\
>    %D%/packages/polkit.scm			\
> diff --git a/gnu/packages/php.scm b/gnu/packages/php.scm
> new file mode 100644
> index 0000000..f7fd1e0
> --- /dev/null
> +++ b/gnu/packages/php.scm
> @@ -0,0 +1,187 @@
> +;;; GNU Guix --- Functional package management for GNU
> +;;; Copyright © 2016 Julien Lepiller <julien@lepiller.eu>
> +;;;
> +;;; This file is part of GNU Guix.
> +;;;
> +;;; GNU Guix is free software; you can redistribute it and/or modify it
> +;;; under the terms of the GNU General Public License as published by
> +;;; the Free Software Foundation; either version 3 of the License, or (at
> +;;; your option) any later version.
> +;;;
> +;;; GNU Guix is distributed in the hope that it will be useful, but
> +;;; WITHOUT ANY WARRANTY; without even the implied warranty of
> +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +;;; GNU General Public License for more details.
> +;;;
> +;;; You should have received a copy of the GNU General Public License
> +;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
> +
> +(define-module (gnu packages php)
> +  #:use-module (gnu packages)
> +  #:use-module (gnu packages algebra)
> +  #:use-module (gnu packages aspell)
> +  #:use-module (gnu packages base)
> +  #:use-module (gnu packages bison)
> +  #:use-module (gnu packages compression)
> +  #:use-module (gnu packages curl)
> +  #:use-module (gnu packages cyrus-sasl)
> +  #:use-module (gnu packages databases)
> +  #:use-module (gnu packages fontutils)
> +  #:use-module (gnu packages gd)
> +  #:use-module (gnu packages gettext)
> +  #:use-module (gnu packages glib)
> +  #:use-module (gnu packages gnupg)
> +  #:use-module (gnu packages image)
> +  #:use-module (gnu packages multiprecision)
> +  #:use-module (gnu packages pcre)
> +  #:use-module (gnu packages photo)
> +  #:use-module (gnu packages pkg-config)
> +  #:use-module (gnu packages readline)
> +  #:use-module (gnu packages textutils)
> +  #:use-module (gnu packages tls)
> +  #:use-module (gnu packages web)
> +  #:use-module (gnu packages xml)
> +  #:use-module (gnu packages xorg)
> +  #:use-module (gnu packages zip)
> +  #:use-module (guix packages)
> +  #:use-module (guix download)
> +  #:use-module (guix build-system gnu)
> +  #:use-module ((guix licenses) #:prefix license:))
> +
> +(define-public php
> +  (package
> +    (name "php")
> +    (version "7.0.12")
> +    (home-page "http://www.php.net/")
> +    (source (origin
> +              (method url-fetch)
> +              (uri (string-append home-page "distributions/"
> +                                  name "-" version ".tar.xz"))
> +              (sha256
> +               (base32
> +                "1zw33fbkrschqr2yrmvcp1z34v4rvqzm0pn1vsamjbi43jgc9mpk"))))
> +    (build-system gnu-build-system)
> +    (arguments
> +      `(#:phases
> +          (modify-phases %standard-phases
> +            (add-before 'configure 'unbundle
> +              (lambda* (#:key inputs #:allow-other-keys)
> +                (chdir "ext")
> +                (for-each delete-file-recursively
> +                          '("pcre/pcrelib"
> +                            "sqlite3/libsqlite"
> +                            "gd/libgd"
> +                            "mbstring/oniguruma"
> +                            "xmlrpc/libxmlrpc"
> +                            "zip/lib"))
> +                            ;; couldn't unbundle these libraries:
> +                            ;"bcmath/libbcmath" ;; this is bc.
> +                            ;"fileinfo/libmagic"
> +                            ;"mbstring/libmbfl"
> +                (chdir ".."))))
> +        #:configure-flags
> +          (list (string-append "--with-libxml-dir="
> +                               (assoc-ref %build-inputs "libxml2"))
> +                (string-append "--with-readline="
> +                               (assoc-ref %build-inputs "readline"))
> +                (string-append "--with-sqlite3="
> +                               (assoc-ref %build-inputs "sqlite"))
> +                (string-append "--with-pdo-sqlite="
> +                               (assoc-ref %build-inputs "sqlite"))
> +                (string-append "--with-pcre-regex="
> +                               (assoc-ref %build-inputs "pcre"))
> +                (string-append "--with-pcre-dir="
> +                               (assoc-ref %build-inputs "pcre"))
> +                (string-append "--with-zlib-dir="
> +                               (assoc-ref %build-inputs "zlib"))
> +                (string-append "--with-libzip="
> +                               (assoc-ref %build-inputs "zip"))
> +                (string-append "--with-bz2="
> +                               (assoc-ref %build-inputs "bzip2"))
> +                (string-append "--with-curl="
> +                               (assoc-ref %build-inputs "curl"))
> +                (string-append "--with-gd="
> +                               (assoc-ref %build-inputs "gd"))
> +                (string-append "--with-webp-dir="
> +                               (assoc-ref %build-inputs "libwebp"))
> +                (string-append "--with-jpeg-dir="
> +                               (assoc-ref %build-inputs "libjpeg"))
> +                (string-append "--with-png-dir="
> +                               (assoc-ref %build-inputs "libpng"))
> +                (string-append "--with-xpm-dir="
> +                               (assoc-ref %build-inputs "libxpm"))
> +                (string-append "--with-freetype-dir="
> +                               (assoc-ref %build-inputs "freetype"))
> +                (string-append "--with-gettext="
> +                               (assoc-ref %build-inputs "glibc")) ; libintl.h
> +                (string-append "--with-gmp="
> +                               (assoc-ref %build-inputs "gmp"))
> +                (string-append "--with-onig="
> +                               (assoc-ref %build-inputs "oniguruma"))
> +                (string-append "--with-xsl="
> +                               (assoc-ref %build-inputs "libxslt"))
> +                (string-append "--with-ldap-sasl="
> +                               (assoc-ref %build-inputs "cyrus-sasl"))
> +                ;; PHP’s Pspell extension, while retaining its current name,
> +                ;; now uses the Aspell library.
> +                (string-append "--with-pspell="
> +                               (assoc-ref %build-inputs "aspell"))
> +                (string-append "--with-tidy="
> +                               (assoc-ref %build-inputs "tidy"))
> +                (string-append "--with-gdbm="
> +                               (assoc-ref %build-inputs "gdbm"))
> +                (string-append "--with-pgsql="
> +                               (assoc-ref %build-inputs "postgresql"))
> +                (string-append "--with-pdo-pgsql="
> +                               (assoc-ref %build-inputs "postgresql"))
> +                "--enable-fpm" "-with-openssl"
> +                "--with-zlib" "--enable-bcmath=shared"
> +                "--enable-calendar" "--enable-dba=shared"
> +                "--enable-ftp"
> +                "--enable-mbstring" "--enable-inifile" "--enable-flatfile"
> +                "--enable-exif" "--enable-mbstring"
> +                "--enable-pcntl" "--with-pdo-mysql"
> +                "--enable-sockets"
> +                "--with-iconv")
> +                ;"--with-snmp"
> +        #:test-target "test"
> +        #:tests? #f))
> +    (inputs `(("readline" ,readline)
> +              ("pcre" ,pcre)
> +              ("aspell" ,aspell)
> +              ("glibc" ,glibc)
> +              ("gmp" ,gmp)
> +              ("sqlite" ,sqlite)
> +              ("openssl" ,openssl)
> +              ("tidy" ,tidy)
> +              ("libxslt" ,libxslt)
> +              ("libexif" ,libexif)
> +              ("libwebp" ,libwebp)
> +              ("libpng" ,libpng)
> +              ("libxpm" ,libxpm)
> +              ("libx11" ,libx11)
> +              ("libjpeg" ,libjpeg)
> +              ("libgcrypt" ,libgcrypt)
> +              ("oniguruma" ,oniguruma)
> +              ("bzip2" ,bzip2)
> +              ("bc" ,bc)
> +              ("freetype" ,freetype)
> +              ("gettext" ,gnu-gettext)
> +              ("mariadb" ,mariadb)
> +              ("gdbm" ,gdbm)
> +              ("postgresql" ,postgresql)
> +              ("gd" ,gd)
> +              ("zip" ,zip)
> +              ("cyrus-sasl" ,cyrus-sasl)
> +              ("curl" ,curl)
> +              ("zlib" ,zlib)
> +              ("libxml2" ,libxml2)))
> +    (native-inputs `(("pkg-config" ,pkg-config)
> +                     ("bison" ,bison)
> +                     ("intltool" ,intltool)
> +                     ("libxml2" ,libxml2))) ; for xml2-config
> +    (synopsis "PHP programming language")
> +    (description
> +      "PHP is one of the most commonly used programming language for the web")
> +
> +    (license (license:non-copyleft "file://LICENSE")))); the php license
> -- 
> 2.10.1
> 

the resulting binary doesn't have a link to libexif, bc, gettext or
mariadb.


that said, I don't php so I don't have a lot for comments.
Tobias Geerinckx-Rice - Oct. 30, 2016, 2:03 p.m.
Julien,

On 30/10/16 13:08, Julien Lepiller wrote:
> here is a patch to add php to guix.

Excellent! I see you've broken into my machine (probably through PHP),
stolen my bitrotting PHP 7 package and greatly improved it. Thanks!

An incomplete review:

> +                (chdir "ext")
[...]
> +                (chdir ".."))))

Try with-directory-excursion.

> +                "--enable-fpm" "-with-openssl"

s/-with-openssl/--with-openssl/, although the option would seem
unnecessary if the result is the same.

> +                ;"--with-snmp"

Best add a comment explaining why this is unavailable, desirable, and,
if possible, what's needed to fix it.

+        #:tests? #f))

There are tests, but many fail. This should be explained in a comment
(or fixed ;-). I keep tests enabled on my machine because I hate PHP and
like to hear it scream.

Bonus fun fact: catastrophic test failure is non-fatal and the thing
installs fine.

> +    (synopsis "PHP programming language")
> +    (description
> +      "PHP is one of the most commonly used programming language
> the web")

s/language/languages/ and a missing full stop, but it would be nice to
add even more. For example:

  PHP (PHP Hypertext Processor) is a server-side (CGI) scripting
  language designed primarily for web development but is also used as
  a general-purpose programming language.  PHP code may be embedded into
  HTML code, or it can be used in combination with various web template
  systems, web content management systems and web frameworks.

Thanks again for working on this!

Kind regards,

T G-R
Leo Famulari - Nov. 1, 2016, 5:07 p.m.
On Sun, Oct 30, 2016 at 01:08:28PM +0100, Julien Lepiller wrote:
> Hi,
> 
> here is a patch to add php to guix.

> From b20406a07e8d8c99a189f5295929ff76a53d47e7 Mon Sep 17 00:00:00 2001
> From: Julien Lepiller <julien@lepiller.eu>
> Date: Sun, 30 Oct 2016 15:05:51 +0100
> Subject: [PATCH] gnu: Add php
> 
> * gnu/packages/php.scm: New file.
> * gnu/packages/php.scm (php): New variable.

I'm very happy to see this being worked on!

Once the package is added, I hope that some people will pay attention to
PHP security bug disclosures on php.net and the oss-security mailing
list so that we can fix bugs quickly and protect our users.

Thank you :)

Patch

From b20406a07e8d8c99a189f5295929ff76a53d47e7 Mon Sep 17 00:00:00 2001
From: Julien Lepiller <julien@lepiller.eu>
Date: Sun, 30 Oct 2016 15:05:51 +0100
Subject: [PATCH] gnu: Add php

* gnu/packages/php.scm: New file.
* gnu/packages/php.scm (php): New variable.
---
 gnu/local.mk         |   1 +
 gnu/packages/php.scm | 187 +++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 188 insertions(+)
 create mode 100644 gnu/packages/php.scm

diff --git a/gnu/local.mk b/gnu/local.mk
index a64b7ec..6a69391 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -292,6 +292,7 @@  GNU_SYSTEM_MODULES =				\
   %D%/packages/pem.scm				\
   %D%/packages/perl.scm				\
   %D%/packages/photo.scm			\
+  %D%/packages/php.scm				\
   %D%/packages/pkg-config.scm			\
   %D%/packages/plotutils.scm			\
   %D%/packages/polkit.scm			\
diff --git a/gnu/packages/php.scm b/gnu/packages/php.scm
new file mode 100644
index 0000000..f7fd1e0
--- /dev/null
+++ b/gnu/packages/php.scm
@@ -0,0 +1,187 @@ 
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2016 Julien Lepiller <julien@lepiller.eu>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages php)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages algebra)
+  #:use-module (gnu packages aspell)
+  #:use-module (gnu packages base)
+  #:use-module (gnu packages bison)
+  #:use-module (gnu packages compression)
+  #:use-module (gnu packages curl)
+  #:use-module (gnu packages cyrus-sasl)
+  #:use-module (gnu packages databases)
+  #:use-module (gnu packages fontutils)
+  #:use-module (gnu packages gd)
+  #:use-module (gnu packages gettext)
+  #:use-module (gnu packages glib)
+  #:use-module (gnu packages gnupg)
+  #:use-module (gnu packages image)
+  #:use-module (gnu packages multiprecision)
+  #:use-module (gnu packages pcre)
+  #:use-module (gnu packages photo)
+  #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages readline)
+  #:use-module (gnu packages textutils)
+  #:use-module (gnu packages tls)
+  #:use-module (gnu packages web)
+  #:use-module (gnu packages xml)
+  #:use-module (gnu packages xorg)
+  #:use-module (gnu packages zip)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu)
+  #:use-module ((guix licenses) #:prefix license:))
+
+(define-public php
+  (package
+    (name "php")
+    (version "7.0.12")
+    (home-page "http://www.php.net/")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append home-page "distributions/"
+                                  name "-" version ".tar.xz"))
+              (sha256
+               (base32
+                "1zw33fbkrschqr2yrmvcp1z34v4rvqzm0pn1vsamjbi43jgc9mpk"))))
+    (build-system gnu-build-system)
+    (arguments
+      `(#:phases
+          (modify-phases %standard-phases
+            (add-before 'configure 'unbundle
+              (lambda* (#:key inputs #:allow-other-keys)
+                (chdir "ext")
+                (for-each delete-file-recursively
+                          '("pcre/pcrelib"
+                            "sqlite3/libsqlite"
+                            "gd/libgd"
+                            "mbstring/oniguruma"
+                            "xmlrpc/libxmlrpc"
+                            "zip/lib"))
+                            ;; couldn't unbundle these libraries:
+                            ;"bcmath/libbcmath" ;; this is bc.
+                            ;"fileinfo/libmagic"
+                            ;"mbstring/libmbfl"
+                (chdir ".."))))
+        #:configure-flags
+          (list (string-append "--with-libxml-dir="
+                               (assoc-ref %build-inputs "libxml2"))
+                (string-append "--with-readline="
+                               (assoc-ref %build-inputs "readline"))
+                (string-append "--with-sqlite3="
+                               (assoc-ref %build-inputs "sqlite"))
+                (string-append "--with-pdo-sqlite="
+                               (assoc-ref %build-inputs "sqlite"))
+                (string-append "--with-pcre-regex="
+                               (assoc-ref %build-inputs "pcre"))
+                (string-append "--with-pcre-dir="
+                               (assoc-ref %build-inputs "pcre"))
+                (string-append "--with-zlib-dir="
+                               (assoc-ref %build-inputs "zlib"))
+                (string-append "--with-libzip="
+                               (assoc-ref %build-inputs "zip"))
+                (string-append "--with-bz2="
+                               (assoc-ref %build-inputs "bzip2"))
+                (string-append "--with-curl="
+                               (assoc-ref %build-inputs "curl"))
+                (string-append "--with-gd="
+                               (assoc-ref %build-inputs "gd"))
+                (string-append "--with-webp-dir="
+                               (assoc-ref %build-inputs "libwebp"))
+                (string-append "--with-jpeg-dir="
+                               (assoc-ref %build-inputs "libjpeg"))
+                (string-append "--with-png-dir="
+                               (assoc-ref %build-inputs "libpng"))
+                (string-append "--with-xpm-dir="
+                               (assoc-ref %build-inputs "libxpm"))
+                (string-append "--with-freetype-dir="
+                               (assoc-ref %build-inputs "freetype"))
+                (string-append "--with-gettext="
+                               (assoc-ref %build-inputs "glibc")) ; libintl.h
+                (string-append "--with-gmp="
+                               (assoc-ref %build-inputs "gmp"))
+                (string-append "--with-onig="
+                               (assoc-ref %build-inputs "oniguruma"))
+                (string-append "--with-xsl="
+                               (assoc-ref %build-inputs "libxslt"))
+                (string-append "--with-ldap-sasl="
+                               (assoc-ref %build-inputs "cyrus-sasl"))
+                ;; PHP’s Pspell extension, while retaining its current name,
+                ;; now uses the Aspell library.
+                (string-append "--with-pspell="
+                               (assoc-ref %build-inputs "aspell"))
+                (string-append "--with-tidy="
+                               (assoc-ref %build-inputs "tidy"))
+                (string-append "--with-gdbm="
+                               (assoc-ref %build-inputs "gdbm"))
+                (string-append "--with-pgsql="
+                               (assoc-ref %build-inputs "postgresql"))
+                (string-append "--with-pdo-pgsql="
+                               (assoc-ref %build-inputs "postgresql"))
+                "--enable-fpm" "-with-openssl"
+                "--with-zlib" "--enable-bcmath=shared"
+                "--enable-calendar" "--enable-dba=shared"
+                "--enable-ftp"
+                "--enable-mbstring" "--enable-inifile" "--enable-flatfile"
+                "--enable-exif" "--enable-mbstring"
+                "--enable-pcntl" "--with-pdo-mysql"
+                "--enable-sockets"
+                "--with-iconv")
+                ;"--with-snmp"
+        #:test-target "test"
+        #:tests? #f))
+    (inputs `(("readline" ,readline)
+              ("pcre" ,pcre)
+              ("aspell" ,aspell)
+              ("glibc" ,glibc)
+              ("gmp" ,gmp)
+              ("sqlite" ,sqlite)
+              ("openssl" ,openssl)
+              ("tidy" ,tidy)
+              ("libxslt" ,libxslt)
+              ("libexif" ,libexif)
+              ("libwebp" ,libwebp)
+              ("libpng" ,libpng)
+              ("libxpm" ,libxpm)
+              ("libx11" ,libx11)
+              ("libjpeg" ,libjpeg)
+              ("libgcrypt" ,libgcrypt)
+              ("oniguruma" ,oniguruma)
+              ("bzip2" ,bzip2)
+              ("bc" ,bc)
+              ("freetype" ,freetype)
+              ("gettext" ,gnu-gettext)
+              ("mariadb" ,mariadb)
+              ("gdbm" ,gdbm)
+              ("postgresql" ,postgresql)
+              ("gd" ,gd)
+              ("zip" ,zip)
+              ("cyrus-sasl" ,cyrus-sasl)
+              ("curl" ,curl)
+              ("zlib" ,zlib)
+              ("libxml2" ,libxml2)))
+    (native-inputs `(("pkg-config" ,pkg-config)
+                     ("bison" ,bison)
+                     ("intltool" ,intltool)
+                     ("libxml2" ,libxml2))) ; for xml2-config
+    (synopsis "PHP programming language")
+    (description
+      "PHP is one of the most commonly used programming language for the web")
+
+    (license (license:non-copyleft "file://LICENSE")))); the php license
-- 
2.10.1