build: Install naive diff.
authorJan Nieuwenhuizen <janneke@gnu.org>
Wed, 23 May 2018 04:54:33 +0000 (06:54 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Wed, 23 May 2018 16:41:57 +0000 (18:41 +0200)
* scripts/diff.scm: Move from build-aux.
* install.sh: Install it.
* build-aux/tests.sh: Update location.

build-aux/diff.scm [deleted file]
build-aux/test.sh
install.sh
scripts/diff.scm [new file with mode: 0755]
scripts/mes [deleted symlink]

diff --git a/build-aux/diff.scm b/build-aux/diff.scm
deleted file mode 100755 (executable)
index 68acdcb..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-#! /bin/sh
-# -*-scheme-*-
-exec ${GUILE-guile} -L $(dirname 0) -e '(diff)' -s "$0" "$@"
-!#
-
-;;; Mes --- Maxwell Equations of Software
-;;; Copyright © 2016,2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
-;;;
-;;; mes-snarf.scm: This file is part of Mes.
-;;;
-;;; Mes 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.
-;;;
-;;; Mes 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
-
-(define-module (diff)
-  #:use-module (srfi srfi-1)
-  #:use-module (srfi srfi-9)
-  #:use-module (ice-9 rdelim)
-  #:export (main))
-
-(cond-expand
- (mes
-  (define %scheme "mes"))
- (guile-2
-  (define %scheme "guile")
-  (define-macro (mes-use-module . rest) #t))
- (guile
-  (use-modules (ice-9 syncase))
-  (define %scheme "guile")
-  (define-macro (mes-use-module . rest) #t)))
-
-(mes-use-module (mes guile))
-
-(format (current-error-port) "diff[~a]...\n" %scheme)
-
-(define (plus a)
-  (string-append "+" a))
-(define (minus a)
-  (string-append "-" a))
-(define (keep a)
-  (string-append " " a))
-
-(define-record-type <hunk> (make-hunk context after removed added)
-  hunk?
-  (context hunk.context)
-  (after hunk.after)
-  (removed hunk.removed)
-  (added hunk.added))
-
-(define (hunk->lines o)
-  (append `(,(format #f "@@ -~a,~a +~a,~a" (length (hunk.removed o)) (+ 3 (car (hunk.context o))) (length (hunk.added o)) (+ 3 (cadr (hunk.context o))))
-            ,@(map keep (filter identity (cddr (hunk.context o)))))
-          (map minus (hunk.removed o))
-          (map plus (hunk.added o))
-          (map keep (hunk.after o))))
-
-(define (safe-list-head lst n)
-  (list-head lst (min n (length lst))))
-
-(define (line-equal? a b)
-  (equal? (string-trim-right a) (string-trim-right b)))
-
-;; naive diff
-(define (diff a b)
-  (let ((a-lines (string-split (with-input-from-file a read-string) #\newline))
-        (b-lines (string-split (with-input-from-file b read-string) #\newline)))
-    (let loop ((context '(1 1 #f #f #f)) (a-lines a-lines) (b-lines b-lines))
-      ;;(format (current-error-port) "loop context=~s\n" context)
-      (cond ((and (null? a-lines) (null? b-lines)) '())
-            ((null? a-lines)
-             (list (make-hunk context (safe-list-head a-lines 3) '() b-lines)))
-            ((null? b-lines)
-             (list (make-hunk context (safe-list-head a-lines 3) a-lines '())))
-            ((line-equal? (car a-lines) (car b-lines))
-             (loop `(,(1+ (car context))
-                     ,(1+ (cadr context))
-                     ,@(cdddr context)
-                     ,(car a-lines))
-                   (cdr a-lines) (cdr b-lines)))
-            (else
-             (cond ((and (pair? (cdr b-lines)) (line-equal? (car a-lines) (cadr b-lines)))
-                    (cons (make-hunk context (safe-list-head a-lines 3) '() (list (car b-lines)))
-                          (loop `(,(+ 1 (car context))
-                                  ,(+ 2 (cadr context))
-                                  ,@(cdddr context)
-                                  ,(car a-lines))
-                                (cdr a-lines) (cddr b-lines))))
-                   ((and (pair? (cdr a-lines)) (line-equal? (cadr a-lines) (car b-lines)))
-                    (cons (make-hunk context (safe-list-head a-lines 3) (list (car a-lines)) '())
-                          (loop `(,(+ 2 (car context))
-                                  ,(+ 1 (cadr context))
-                                  ,@(cddddr context)
-                                  ,(car a-lines)
-                                  ,(cadr a-lines))
-                                (cddr a-lines) (cdr b-lines))))
-                   (else (cons (make-hunk context (safe-list-head a-lines 3) (list (car a-lines)) (list (car b-lines)))
-                               (loop `(,(1+ (car context))
-                                       ,(1+ (cadr context))
-                                       ,@(cdddr context)
-                                       ,(car a-lines))
-                                     (cdr a-lines) (cdr b-lines))))))))))
-
-(define (main args)
-  (let* ((files (cdr args))
-         (files (if (string-prefix? "-" (car files)) (cdr files) files))
-         (hunks (apply diff (list-head files 2))))
-    (when (pair? hunks)
-      (display (string-join (append-map hunk->lines hunks) "\n"))
-      (newline)
-      (exit 1))))
index 023a4dd01f1ca456546e31df2de649c8c4622ce8..af8bc4913bde3236a40cc60edb98d4f83f66245f 100755 (executable)
@@ -22,7 +22,7 @@ set -x
 
 GUILE=${GUILE-$MES}
 DIFF=${DIFF-$(command -v diff)}
-[ -z "$DIFF" ] && DIFF="sh build-aux/diff.scm"
+[ -z "$DIFF" ] && DIFF="sh scripts/diff.scm"
 
 t=${1-scaffold/tests/t}
 rm -f "$t".mes-out
index b3036ab0c43ca5885e63f8116c65165c14e8d501..102fc00ca63e4ec2aaee3dca1e333178ad24798f 100755 (executable)
@@ -3,6 +3,7 @@
 set -e
 
 export PREFIX
+SHELL=${SHELL-$(command -v sh)}
 PREFIX=${PREFIX-/usr/local}
 MES_PREFIX=${MES_PREFIX-$PREFIX/share/mes}
 MES_SEED=${MES_SEED-../mes-seed}
@@ -28,6 +29,7 @@ DOCDIR=${MODULEDIR-$PREFIX/share/doc/mes}
 
 chmod +w $PREFIX/bin/mescc
 sed \
+    -e "s,^#! /bin/sh,#! $SHELL/," \
     -e "s,module/,$MODULEDIR/," \
     -e "s,@DATADIR@,$DATADIR,g" \
     -e "s,@DOCDIR@,$DOCDIR,g" \
@@ -39,6 +41,7 @@ sed \
     scripts/mescc > $PREFIX/bin/mescc
 chmod +w $MODULEDIR/mes/boot-0.scm
 sed \
+    -e "s,^#! /bin/sh,#! $SHELL/," \
     -e "s,module/,$MODULEDIR/," \
     -e "s,@DATADIR@,$DATADIR,g" \
     -e "s,@DOCDIR@,$DOCDIR,g" \
@@ -48,3 +51,8 @@ sed \
     -e "s,@PREFIX@,$PREFIX,g" \
     -e "s,@VERSION@,$VERSION,g" \
     module/mes/boot-0.scm > $MODULEDIR/mes/boot-0.scm
+
+cp scripts/diff.scm $PREFIX/bin/diff.scm
+sed \
+    -e "s,^#! /bin/sh,#! $SHELL/," \
+    scripts/diff.scm > $PREFIX/bin/diff.scm
diff --git a/scripts/diff.scm b/scripts/diff.scm
new file mode 100755 (executable)
index 0000000..d8ade78
--- /dev/null
@@ -0,0 +1,123 @@
+#! /bin/sh
+# -*-scheme-*-
+mes_p=$(command -v mes)
+if [ "$mes_p" -a -z "$MES" ]; then
+    MES=guile
+fi
+exec ${MES-mes} -L $(dirname 0) -e '(diff)' -s "$0" "$@"
+!#
+
+;;; Mes --- Maxwell Equations of Software
+;;; Copyright © 2016,2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+;;;
+;;; mes-snarf.scm: This file is part of Mes.
+;;;
+;;; Mes 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.
+;;;
+;;; Mes 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (diff)
+  #:use-module (srfi srfi-1)
+  #:use-module (srfi srfi-9)
+  #:use-module (ice-9 rdelim)
+  #:export (main))
+
+(cond-expand
+ (mes
+  (define %scheme "mes"))
+ (guile-2
+  (define %scheme "guile")
+  (define-macro (mes-use-module . rest) #t))
+ (guile
+  (use-modules (ice-9 syncase))
+  (define %scheme "guile")
+  (define-macro (mes-use-module . rest) #t)))
+
+(mes-use-module (mes guile))
+
+(format (current-error-port) "diff[~a]...\n" %scheme)
+
+(define (plus a)
+  (string-append "+" a))
+(define (minus a)
+  (string-append "-" a))
+(define (keep a)
+  (string-append " " a))
+
+(define-record-type <hunk> (make-hunk context after removed added)
+  hunk?
+  (context hunk.context)
+  (after hunk.after)
+  (removed hunk.removed)
+  (added hunk.added))
+
+(define (hunk->lines o)
+  (append `(,(format #f "@@ -~a,~a +~a,~a" (length (hunk.removed o)) (+ 3 (car (hunk.context o))) (length (hunk.added o)) (+ 3 (cadr (hunk.context o))))
+            ,@(map keep (filter identity (cddr (hunk.context o)))))
+          (map minus (hunk.removed o))
+          (map plus (hunk.added o))
+          (map keep (hunk.after o))))
+
+(define (safe-list-head lst n)
+  (list-head lst (min n (length lst))))
+
+(define (line-equal? a b)
+  (equal? (string-trim-right a) (string-trim-right b)))
+
+;; naive diff
+(define (diff a b)
+  (let ((a-lines (string-split (with-input-from-file a read-string) #\newline))
+        (b-lines (string-split (with-input-from-file b read-string) #\newline)))
+    (let loop ((context '(1 1 #f #f #f)) (a-lines a-lines) (b-lines b-lines))
+      ;;(format (current-error-port) "loop context=~s\n" context)
+      (cond ((and (null? a-lines) (null? b-lines)) '())
+            ((null? a-lines)
+             (list (make-hunk context (safe-list-head a-lines 3) '() b-lines)))
+            ((null? b-lines)
+             (list (make-hunk context (safe-list-head a-lines 3) a-lines '())))
+            ((line-equal? (car a-lines) (car b-lines))
+             (loop `(,(1+ (car context))
+                     ,(1+ (cadr context))
+                     ,@(cdddr context)
+                     ,(car a-lines))
+                   (cdr a-lines) (cdr b-lines)))
+            (else
+             (cond ((and (pair? (cdr b-lines)) (line-equal? (car a-lines) (cadr b-lines)))
+                    (cons (make-hunk context (safe-list-head a-lines 3) '() (list (car b-lines)))
+                          (loop `(,(+ 1 (car context))
+                                  ,(+ 2 (cadr context))
+                                  ,@(cdddr context)
+                                  ,(car a-lines))
+                                (cdr a-lines) (cddr b-lines))))
+                   ((and (pair? (cdr a-lines)) (line-equal? (cadr a-lines) (car b-lines)))
+                    (cons (make-hunk context (safe-list-head a-lines 3) (list (car a-lines)) '())
+                          (loop `(,(+ 2 (car context))
+                                  ,(+ 1 (cadr context))
+                                  ,@(cddddr context)
+                                  ,(car a-lines)
+                                  ,(cadr a-lines))
+                                (cddr a-lines) (cdr b-lines))))
+                   (else (cons (make-hunk context (safe-list-head a-lines 3) (list (car a-lines)) (list (car b-lines)))
+                               (loop `(,(1+ (car context))
+                                       ,(1+ (cadr context))
+                                       ,@(cdddr context)
+                                       ,(car a-lines))
+                                     (cdr a-lines) (cdr b-lines))))))))))
+
+(define (main args)
+  (let* ((files (cdr args))
+         (files (if (string-prefix? "-" (car files)) (cdr files) files))
+         (hunks (apply diff (list-head files 2))))
+    (when (pair? hunks)
+      (display (string-join (append-map hunk->lines hunks) "\n"))
+      (newline)
+      (exit 1))))
diff --git a/scripts/mes b/scripts/mes
deleted file mode 120000 (symlink)
index 2e8dd05..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../src/mes.gcc
\ No newline at end of file