(define-package "ldap" (0 1 0) ((install-lib-version (1 0)) (options (ldap-prefix "Use LDAP library with prefix" "" #t #f #f))) (define (display-bold text) (display "\033[1m") (display text) (display "\033[m")) (newline) (display-bold "Generating Scheme stub code") (newline) (run (scsh -lel ffi-tools/load.scm -lm scheme/ldap-constants.scm -o ldap-constants -c "(make-scm-files command-line-arguments)" scheme)) (newline) (display-bold "Generating C stub code") (newline) (run (scsh -lel ffi-tools/load.scm -lm scheme/ldap-constants.scm -o ldap-constants -c "(make-c-files command-line-arguments)" c)) (newline) (display-bold "Configuring, compiling and installing C-stubs") (newline) (let* ((scsh-includes (include-dir)) (build-host (get-option-value 'build)) (prefix (string-append (get-directory 'lib #f) "/" build-host)) (ffi-tools-path (run/string (scsh -lel ffi-tools/load.scm -o ffi-tools-path -c "(display (ffi-tools-lib-path))"))) (configure (append (list "./configure" (string-append "--prefix=" prefix) (string-append "--with-scsh-includes=" scsh-includes) (string-append "--with-ffi-tools=" ffi-tools-path) (string-append "--enable-static=no") (string-append "--build=" build-host)) (cond ((get-option-value 'ldap-prefix) => (lambda (prefix) (list (string-append "--with-ldap-prefix=" prefix)))) (else '())))) (make `(make install ,(string-append "DESTDIR=" (get-option-value 'dest-dir))))) (if (get-option-value 'dry-run) (begin (display configure) (newline) (display make) (newline)) (if (not (and (zero? (run ,configure)) (zero? (run ,make)))) (exit)))) (newline) (display-bold "Creating load.scm") (newline) (let ((schemedir (get-directory 'scheme #f)) (libdir (get-directory 'lib #f))) (write-to-load-script `((user) (load-package 'dynamic-externals) (load-package 'ffi-tools-rts) (load-package 'exceptions) (open 'dynamic-externals) (open 'external-calls) (open 'configure) (open 'signals) ,@(map (lambda (x) `(run ',x)) tmpl-libtool-la-reader) (run '(let* ((lib-dir (string-append ,libdir "/" (host))) (la-file-name (string-append lib-dir "/libscshldap.la")) (initializer-name "scsh_init_ldap_bindings")) (let ((la-alist (read-libtool-la la-file-name))) (cond ((assoc 'dlname la-alist) => (lambda (p) (let ((module-file (string-append lib-dir "/" (cdr p)))) (dynamic-load module-file) (call-external (get-external initializer-name))))) (else (error "Could not figure out libscshldap's name" la-file-name)))))) (config) (load ,(string-append schemedir "/interfaces.scm")) (load ,(string-append schemedir "/packages.scm")) (user)))) (newline) (display-bold "Installing Scheme files") (newline) (install-directory-contents "scheme" 'scheme) )