#!/bin/sh exec guile -q -s "$0" "$@" !# ;; The use of certain identifiers as variable or parameter names has ;; been found to cause build problems on particular platforms. The ;; aim of this test is to cause "make check" to fail (on GNU/Linux, ;; which most Guile developers use) if we accidentally add new code ;; that uses those identifiers. (define bad-identifiers '( ;; On AIX 5.2 and 5.3, /usr/include/sys/timer.h includes: ;; #ifndef _LINUX_SOURCE_COMPAT ;; #define func_data t_union.data ;; #endif ;; So we want to avoid using func_data in Guile source code. "func_data" ;; More troublesome identifiers can be added into the list here. )) (use-modules (ice-9 regex) (ice-9 rdelim)) (define bad-id-regexp (make-regexp (string-append "\\<(" (string-join (map regexp-quote bad-identifiers) "|") ")\\>"))) (define exit-status 0) ;; Non-exported code from (ice-9 ftw). (define (directory-files dir) (let ((dir-stream (opendir dir))) (let loop ((new (readdir dir-stream)) (acc '())) (if (eof-object? new) (begin (closedir dir-stream) acc) (loop (readdir dir-stream) (if (or (string=? "." new) ;;; ignore (string=? ".." new)) ;;; ignore acc (cons (in-vicinity dir new) acc))))))) (define (directory-files-matching dir pattern) (let ((file-name-regexp (make-regexp pattern))) (filter (lambda (fn) (regexp-exec file-name-regexp fn)) (directory-files dir)))) (let loop ((file-names (directory-files-matching "../../libguile" "\\.[ch]$"))) (or (null? file-names) (begin (with-input-from-file (car file-names) (lambda () (let loop ((linenum 1) (line (read-line))) (or (eof-object? line) (begin (if (regexp-exec bad-id-regexp line) (begin (set! exit-status 1) (format (current-error-port) "~a:~a: ~a\n" (car file-names) linenum line))) (loop (+ linenum 1) (read-line))))))) (loop (cdr file-names))))) (exit exit-status) ;; Local Variables: ;; mode: scheme ;; End: