gnu: Add firebird.

* gnu/packages/databases.scm (firebird): New public variable.
This commit is contained in:
Tobias Geerinckx-Rice 2020-10-29 15:17:35 +01:00
parent 501b325b7e
commit 3f8158d6f0
No known key found for this signature in database
GPG key ID: 0DB0FF884F556D79

View file

@ -87,13 +87,16 @@ (define-module (gnu packages databases)
#: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 @@ (define-public es-dump-restore
(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")