aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gnu/local.mk1
-rw-r--r--gnu/packages/build-tools.scm79
-rw-r--r--gnu/packages/patches/tup-unbundle-dependencies.patch66
3 files changed, 146 insertions, 0 deletions
diff --git a/gnu/local.mk b/gnu/local.mk
index 1c96947d91..5438de4aac 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1541,6 +1541,7 @@ dist_patch_DATA = \
%D%/packages/patches/ttf2eot-cstddef.patch \
%D%/packages/patches/ttfautohint-source-date-epoch.patch \
%D%/packages/patches/tomb-fix-errors-on-open.patch \
+ %D%/packages/patches/tup-unbundle-dependencies.patch \
%D%/packages/patches/tuxpaint-stamps-path.patch \
%D%/packages/patches/twinkle-bcg729.patch \
%D%/packages/patches/u-boot-riscv64-fix-extlinux.patch \
diff --git a/gnu/packages/build-tools.scm b/gnu/packages/build-tools.scm
index 9ff32b22f9..38bd906278 100644
--- a/gnu/packages/build-tools.scm
+++ b/gnu/packages/build-tools.scm
@@ -10,6 +10,7 @@
;;; Copyright © 2019 Jonathan Brielmaier <jonathan.brielmaier@web.de>
;;; Copyright © 2020 Leo Prikler <leo.prikler@student.tugraz.at>
;;; Copyright © 2020 Yuval Kogman <nothingmuch@woobling.org>
+;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -36,12 +37,16 @@
#:use-module (gnu packages)
#:use-module (gnu packages check)
#:use-module (gnu packages compression)
+ #:use-module (gnu packages linux)
#:use-module (gnu packages lua)
#:use-module (gnu packages package-management)
+ #:use-module (gnu packages pcre)
+ #:use-module (gnu packages pkg-config)
#:use-module (gnu packages python)
#:use-module (gnu packages python-crypto)
#:use-module (gnu packages python-web)
#:use-module (gnu packages python-xyz)
+ #:use-module (gnu packages sqlite)
#:use-module (gnu packages ninja)
#:use-module (guix build-system gnu)
#:use-module (guix build-system python))
@@ -276,6 +281,80 @@ other lower-level build files.")
scripted definition of a software project and outputs @file{Makefile}s or
other lower-level build files.")))
+(define-public tup
+ (package
+ (name "tup")
+ (version "0.7.8")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "http://gittup.org/tup/releases/tup-v"
+ version ".tar.gz"))
+ (sha256
+ (base32
+ "1z8d5mmddiw3ckdvy88bi48aa5bm0hrid6g9c9hp2ynmpzywmp2h"))
+ (patches (search-patches "tup-unbundle-dependencies.patch"))
+ (modules '((guix build utils)))
+ (snippet
+ '(begin
+ ;; NOTE: Tup uses a slightly modified Lua, so it cannot be
+ ;; unbundled. See: src/lula/tup-lua.patch
+ (delete-file-recursively "src/pcre")
+ (delete-file-recursively "src/sqlite3")
+ #t))))
+ (build-system gnu-build-system)
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ ;; There is a bootstrap script, but it doesn't do what you think - it
+ ;; builds tup.
+ (delete 'bootstrap)
+ (replace 'configure
+ (lambda _
+ (substitute* "src/tup/link.sh"
+ (("`git describe`") ,version))
+ (with-output-to-file "tup.config"
+ (lambda _
+ (format #t "CONFIG_TUP_USE_SYSTEM_SQLITE=y~%")))
+ #t))
+ (delete 'check)
+ (replace 'build
+ (lambda _
+ ;; Based on bootstrap-nofuse.sh, but with a detour to patch-shebang.
+ (invoke "./build.sh")
+ (invoke "./build/tup" "init")
+ (invoke "./build/tup" "generate" "--verbose" "build-nofuse.sh")
+ (patch-shebang "build-nofuse.sh")
+ (invoke "./build-nofuse.sh")))
+ (replace 'install
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let* ((outdir (assoc-ref outputs "out"))
+ (ftdetect (string-append outdir
+ "/share/vim/vimfiles/ftdetect")))
+ (install-file "tup" (string-append outdir "/bin"))
+ (install-file "tup.1" (string-append outdir "/share/man/man1"))
+ (install-file "contrib/syntax/tup.vim"
+ (string-append outdir "/share/vim/vimfiles/syntax"))
+ (mkdir-p ftdetect)
+ (with-output-to-file (string-append ftdetect "/tup.vim")
+ (lambda _
+ (display "au BufNewFile,BufRead Tupfile,*.tup setf tup")))
+ #t))))))
+ (inputs
+ `(("fuse" ,fuse)
+ ("pcre" ,pcre)
+ ("pcre" ,pcre "bin") ; pcre-config
+ ("sqlite" ,sqlite)))
+ (native-inputs
+ `(("pkg-config" ,pkg-config)))
+ (home-page "http://gittup.org/tup/")
+ (synopsis "Fast build system that's hard to get wrong")
+ (description "Tup is a generic build system based on a directed acyclic
+graphs of commands to be executed. Tup instruments your build to detect the
+exact dependencies of the commands, allowing you to take advantage of ideal
+parallelism during incremental builds, and detecting any situations where
+a build worked by accident.")
+ (license license:gpl2)))
+
(define-public osc
(package
(name "osc")
diff --git a/gnu/packages/patches/tup-unbundle-dependencies.patch b/gnu/packages/patches/tup-unbundle-dependencies.patch
new file mode 100644
index 0000000000..6409522bd3
--- /dev/null
+++ b/gnu/packages/patches/tup-unbundle-dependencies.patch
@@ -0,0 +1,66 @@
+Allow building tup after removing some bundled sources from the source
+tree.
+
+diff --git a/build.sh b/build.sh
+index 2937116d..eab650f7 100755
+--- a/build.sh
++++ b/build.sh
+@@ -16,7 +16,7 @@ else
+ echo "Error: invalid TUP_SERVER \"$server\"" 1>&2
+ exit 1
+ fi
+-LDFLAGS="$LDFLAGS -lm"
++LDFLAGS="$LDFLAGS -lm -lsqlite3 `pcre-config --libs`"
+ : ${CC:=gcc}
+ case "$os" in
+ Linux)
+@@ -65,17 +65,15 @@ mkdir luabuiltin
+
+ CFLAGS="$CFLAGS -DTUP_SERVER=\"$server\""
+ CFLAGS="$CFLAGS -DHAVE_CONFIG_H"
++CFLAGS="$CFLAGS `pcre-config --cflags`"
+
+-for i in ../src/tup/*.c ../src/tup/tup/main.c ../src/tup/monitor/null.c ../src/tup/flock/fcntl.c ../src/inih/ini.c ../src/pcre/*.c $plat_files; do
++for i in ../src/tup/*.c ../src/tup/tup/main.c ../src/tup/monitor/null.c ../src/tup/flock/fcntl.c ../src/inih/ini.c $plat_files; do
+ echo " bootstrap CC $CFLAGS $i"
+ # Put -I. first so we find our new luabuiltin.h file, not one built
+ # by a previous 'tup upd'.
+- $CC $CFLAGS -c $i -I. -I../src -I../src/pcre $plat_cflags
++ $CC $CFLAGS -c $i -I. -I../src $plat_cflags
+ done
+
+-echo " bootstrap CC $CFLAGS ../src/sqlite3/sqlite3.c"
+-$CC $CFLAGS -c ../src/sqlite3/sqlite3.c -DSQLITE_TEMP_STORE=2 -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION $plat_cflags
+-
+ echo " bootstrap LD tup $LDFLAGS"
+ echo "const char *tup_version(void) {return \"$label\";}" | $CC -x c -c - -o tup_version.o
+ $CC *.o -o tup -lpthread $plat_ldflags $LDFLAGS
+diff --git a/src/tup/db.c b/src/tup/db.c
+index 55ee3edd..9bdf7a80 100644
+--- a/src/tup/db.c
++++ b/src/tup/db.c
+@@ -46,7 +46,7 @@
+ #include <errno.h>
+ #include <ctype.h>
+ #include <sys/stat.h>
+-#include "sqlite3/sqlite3.h"
++#include <sqlite3.h>
+
+ #define DB_VERSION 17
+ #define PARSER_VERSION 12
+diff --git a/src/tup/tupid.h b/src/tup/tupid.h
+index 7b36ae46..19aed438 100644
+--- a/src/tup/tupid.h
++++ b/src/tup/tupid.h
+@@ -21,7 +21,7 @@
+ #ifndef tup_tupid_h
+ #define tup_tupid_h
+
+-#include "sqlite3/sqlite3.h"
++#include <sqlite3.h>
+
+ typedef sqlite3_int64 tupid_t;
+
+--
+2.26.2
+