gnu: Add firebird.
* gnu/packages/databases.scm (firebird): New public variable.
This commit is contained in:
		
							parent
							
								
									501b325b7e
								
							
						
					
					
						commit
						3f8158d6f0
					
				
					 1 changed files with 180 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -87,13 +87,16 @@
 | 
			
		|||
  #:use-module (gnu packages guile)
 | 
			
		||||
  #:use-module (gnu packages time)
 | 
			
		||||
  #:use-module (gnu packages golang)
 | 
			
		||||
  #:use-module (gnu packages icu4c)
 | 
			
		||||
  #:use-module (gnu packages jemalloc)
 | 
			
		||||
  #:use-module (gnu packages language)
 | 
			
		||||
  #:use-module (gnu packages libedit)
 | 
			
		||||
  #:use-module (gnu packages libevent)
 | 
			
		||||
  #:use-module (gnu packages linux)
 | 
			
		||||
  #:use-module (gnu packages logging)
 | 
			
		||||
  #:use-module (gnu packages man)
 | 
			
		||||
  #:use-module (gnu packages maths)
 | 
			
		||||
  #:use-module (gnu packages multiprecision)
 | 
			
		||||
  #:use-module (gnu packages ncurses)
 | 
			
		||||
  #:use-module (gnu packages onc-rpc)
 | 
			
		||||
  #:use-module (gnu packages parallel)
 | 
			
		||||
| 
						 | 
				
			
			@ -308,6 +311,183 @@ ElasticSearch server")
 | 
			
		|||
    (home-page "https://github.com/patientslikeme/es_dump_restore")
 | 
			
		||||
    (license license:expat)))
 | 
			
		||||
 | 
			
		||||
(define-public firebird
 | 
			
		||||
  (package
 | 
			
		||||
    (name "firebird")
 | 
			
		||||
    (version "3.0.7")
 | 
			
		||||
    (source
 | 
			
		||||
     (let ((revision "33374-0"))
 | 
			
		||||
       (origin
 | 
			
		||||
         (method url-fetch)
 | 
			
		||||
         (uri (string-append "https://github.com/FirebirdSQL/"
 | 
			
		||||
                             "firebird/releases/download/R"
 | 
			
		||||
                             (string-replace-substring version "." "_") "/"
 | 
			
		||||
                             "Firebird-" version "." revision ".tar.bz2"))
 | 
			
		||||
         (sha256
 | 
			
		||||
          (base32 "0xpy1bncz36c6n28y7kllm1dkrdkn4vb4gw2n43f2351mznmrf5c"))
 | 
			
		||||
         (modules '((guix build utils)))
 | 
			
		||||
         (snippet
 | 
			
		||||
          `(begin
 | 
			
		||||
             (for-each
 | 
			
		||||
              delete-file-recursively
 | 
			
		||||
              (list "extern/btyacc/test" ; TODO: package and remove entirely
 | 
			
		||||
                    "extern/editline"
 | 
			
		||||
                    "extern/icu"
 | 
			
		||||
                    "extern/libtommath"
 | 
			
		||||
                    "extern/zlib"
 | 
			
		||||
                    "src/include/firebird/impl/boost"
 | 
			
		||||
 | 
			
		||||
                    ;; Missing licence.
 | 
			
		||||
                    "builds/install/arch-specific/solaris"
 | 
			
		||||
                    "extern/SfIO"
 | 
			
		||||
                    "src/msgs/templates.sql"
 | 
			
		||||
 | 
			
		||||
                    ;; Generated files missing sources.
 | 
			
		||||
                    "doc/Firebird-3-QuickStart.pdf"
 | 
			
		||||
                    (string-append "doc/Firebird-" ,version
 | 
			
		||||
                                   "-ReleaseNotes.pdf")
 | 
			
		||||
                    "doc/README.SecureRemotePassword.html"))
 | 
			
		||||
             #t)))))
 | 
			
		||||
    (build-system gnu-build-system)
 | 
			
		||||
    (outputs (list "debug" "out"))
 | 
			
		||||
    (arguments
 | 
			
		||||
     `(#:configure-flags
 | 
			
		||||
       (let ((out (assoc-ref %outputs "out")))
 | 
			
		||||
         (list (string-append "--with-fbsbin=" out "/sbin")
 | 
			
		||||
               (string-append "--with-fbdoc=" out "/share/doc/"
 | 
			
		||||
                              ,name "-" ,version)
 | 
			
		||||
               (string-append "--with-fbconf=" out "/lib/firebird")
 | 
			
		||||
               (string-append "--with-fbintl=" out "/lib/firebird/intl")
 | 
			
		||||
               (string-append "--with-fbmisc=" out "/lib/firebird/misc")
 | 
			
		||||
               (string-append "--with-fbmsg=" out "/lib/firebird")
 | 
			
		||||
               (string-append "--with-fbplugins=" out "/lib/firebird/plugins")
 | 
			
		||||
               (string-append "--with-fbudf=" out "/lib/firebird/UDF")
 | 
			
		||||
               "--with-fbglock=/run/firebird"
 | 
			
		||||
               "--with-fblog=/var/log/firebird"
 | 
			
		||||
               "--with-fbhelp=/var/lib/firebird/system"
 | 
			
		||||
               "--with-fbsecure-db=/var/lib/firebird/secure"
 | 
			
		||||
               "--without-fbsample"
 | 
			
		||||
               "--without-fbsample-db"
 | 
			
		||||
               "--with-system-editline"))
 | 
			
		||||
       #:make-flags
 | 
			
		||||
       (list (string-append "CC=" ,(cc-for-target))
 | 
			
		||||
             ;; The plugins/ can't find libfbclient otherwise.
 | 
			
		||||
             (string-append "LDFLAGS=-Wl,-rpath="
 | 
			
		||||
                            (assoc-ref %outputs "out") "/lib"))
 | 
			
		||||
       #:tests? #f                      ; no test suite
 | 
			
		||||
       #:modules ((guix build gnu-build-system)
 | 
			
		||||
                  (guix build utils)
 | 
			
		||||
                  (srfi srfi-26))
 | 
			
		||||
       #:phases
 | 
			
		||||
       (modify-phases %standard-phases
 | 
			
		||||
         (add-after 'unpack 'use-system-boost
 | 
			
		||||
           (lambda _
 | 
			
		||||
             (substitute* "src/include/firebird/Message.h"
 | 
			
		||||
               (("\"\\./impl/boost/preprocessor/seq/for_each_i\\.hpp\"")
 | 
			
		||||
                "<boost/preprocessor/seq/for_each_i.hpp>")
 | 
			
		||||
               (("FB_BOOST_") "BOOST_"))
 | 
			
		||||
             #t))
 | 
			
		||||
         (add-after 'unpack 'patch-installation
 | 
			
		||||
           (lambda _
 | 
			
		||||
             (substitute*
 | 
			
		||||
                 "builds/install/arch-specific/linux/makeInstallImage.sh.in"
 | 
			
		||||
               (("/bin/sh") (which "bash"))
 | 
			
		||||
               ;; Remove shell script helpers from $PATH.
 | 
			
		||||
               (("(addLibs|cp) .*\\.sh .*@FB_SBINDIR@") ":")
 | 
			
		||||
               ;; Put files where Guix users expect them.
 | 
			
		||||
               (("(License\\.txt.*)@FB_CONFDIR" match)
 | 
			
		||||
                (string-append match "@FB_DOCDIR@"))
 | 
			
		||||
               (("@FB_CONFDIR@(.*License\\.txt.*)" match)
 | 
			
		||||
                (string-append "@FB_DOCDIR@" match))
 | 
			
		||||
               (("(cp .*/doc/.*)@FB_CONFDIR@(.*)" _ head tail)
 | 
			
		||||
                (string-append head "@FB_DOCDIR@" tail "\n")))
 | 
			
		||||
             (substitute*
 | 
			
		||||
                 (list "builds/install/posix-common/changeServerMode.sh.in"
 | 
			
		||||
                       "builds/install/posix-common/install.sh.in")
 | 
			
		||||
               ;; Skip phases that (could) cause problems in Guix.
 | 
			
		||||
               (("check(InstallUser|IfServerRunning|Libraries)|addFirebirdUser")
 | 
			
		||||
                ":")
 | 
			
		||||
               ;; Skip phases that are merely pointless on Guix.
 | 
			
		||||
               (("buildUninstallFile|installInitdScript|startFirebird") ":")
 | 
			
		||||
               ;; Omit randomly generated password with bonus timestamp.
 | 
			
		||||
               (("setDBAPassword") ":"))
 | 
			
		||||
 | 
			
		||||
             ;; These promote proprietary workflows not relevant on Guix.
 | 
			
		||||
             (for-each delete-file-recursively
 | 
			
		||||
                       (find-files "doc" "README\\.(build\\.msvc|NT|Win)"))
 | 
			
		||||
             #t))
 | 
			
		||||
         (add-after 'configure 'delete-init-scripts
 | 
			
		||||
           (lambda _
 | 
			
		||||
             (delete-file-recursively "gen/install/misc")
 | 
			
		||||
             #t))
 | 
			
		||||
         (add-before 'build 'set-build-environment-variables
 | 
			
		||||
           (lambda _
 | 
			
		||||
             ;; ‘isql’ needs to run & find libfbclient.so during the build.
 | 
			
		||||
             ;; This doubles as a rudimentary test in lieu of a test suite.
 | 
			
		||||
             (setenv "LD_LIBRARY_PATH"
 | 
			
		||||
                     (string-append (assoc-ref %build-inputs "icu4c") "/lib"))
 | 
			
		||||
             #t))
 | 
			
		||||
         (add-before 'install 'keep-embedded-debug-symbols
 | 
			
		||||
           (lambda _
 | 
			
		||||
             ;; Let the gnu-build-system separate & deal with them later.
 | 
			
		||||
             ;; XXX Upstream would use ‘--strip-unneeded’, shaving a whole
 | 
			
		||||
             ;; megabyte off Guix's 7.7M libEngine12.so, for example.
 | 
			
		||||
             (substitute* "gen/Makefile.install"
 | 
			
		||||
               (("readelf") "false"))
 | 
			
		||||
             #t))
 | 
			
		||||
         (add-after 'install 'prune-undesirable-files
 | 
			
		||||
           (lambda* (#:key outputs #:allow-other-keys)
 | 
			
		||||
             (let ((out (assoc-ref outputs "out")))
 | 
			
		||||
               (with-directory-excursion out
 | 
			
		||||
                 ;; Remove example binaries.
 | 
			
		||||
                 (for-each delete-file-recursively
 | 
			
		||||
                           (find-files "." "example"))
 | 
			
		||||
                 ;; Delete (now-)empty directories.
 | 
			
		||||
                 (for-each rmdir
 | 
			
		||||
                           (list "include/firebird/impl"
 | 
			
		||||
                                 "lib/firebird/plugins/udr"))
 | 
			
		||||
                 #t)))))))
 | 
			
		||||
    (inputs
 | 
			
		||||
     `(("boost" ,boost)
 | 
			
		||||
       ("editline" ,editline)
 | 
			
		||||
       ("icu4c" ,icu4c-67)
 | 
			
		||||
       ("libtommath" ,libtommath)
 | 
			
		||||
       ("ncurses" ,ncurses)
 | 
			
		||||
       ("zlib" ,zlib)))
 | 
			
		||||
    (home-page "https://www.firebirdsql.org")
 | 
			
		||||
    (synopsis "Relational database with many ANSI SQL standard features")
 | 
			
		||||
    (description
 | 
			
		||||
     "Firebird is an SQL @acronym{RDBMS, relational database management system}
 | 
			
		||||
with rich support for ANSI SQL (e.g., @code{INSERT...RETURNING}), PSQL stored
 | 
			
		||||
procedures, cursors, and triggers, @acronym{UDFs, user-defined functions}, and
 | 
			
		||||
more.  Transactions provide full ACID-compliant referential integrity.
 | 
			
		||||
 | 
			
		||||
The database requires very little manual maintenance once set up, making it
 | 
			
		||||
ideal for small business or embedded use.
 | 
			
		||||
 | 
			
		||||
When installed as a traditional local or remote (network) database server,
 | 
			
		||||
Firebird can grow to terabyte scale with proper tuning---although PostgreSQL
 | 
			
		||||
may be a better choice for such very large environments.
 | 
			
		||||
 | 
			
		||||
Firebird can also be embedded into stand-alone applications that don't want or
 | 
			
		||||
need a full client & server.  Used in this manner, it offers richer SQL support
 | 
			
		||||
than SQLite as well as the option to seamlessly migrate to a client/server
 | 
			
		||||
database later.")
 | 
			
		||||
    (properties
 | 
			
		||||
     `((lint-hidden-cve . ("CVE-2017-6369"))))
 | 
			
		||||
    (license
 | 
			
		||||
     ;; See doc/license/README.license.usage.txt for rationale & details.
 | 
			
		||||
     (list license:bsd-3                ; src/common/sha2/
 | 
			
		||||
           license:bsd-4                ; src/common/enc.cpp
 | 
			
		||||
           license:gpl2+                ; builds/posix/make.defaults
 | 
			
		||||
           (license:non-copyleft "file:///builds/install/misc/IPLicense.txt"
 | 
			
		||||
                                 "InterBase Public License v1.0")
 | 
			
		||||
           (license:non-copyleft "file:///builds/install/misc/IDPLicense.txt"
 | 
			
		||||
                                 "Initial Developer's Public License v1.0")
 | 
			
		||||
           license:lgpl2.1           ; exception for OSI-compatible licences
 | 
			
		||||
           license:mpl1.1            ; examples/interfaces/0{6,8}*.cpp
 | 
			
		||||
           license:public-domain)))) ; including files without explicit licence
 | 
			
		||||
 | 
			
		||||
(define-public leveldb
 | 
			
		||||
  (package
 | 
			
		||||
    (name "leveldb")
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Reference in a new issue