#!/usr/bin/env scheme-srfi-0
; -*- scheme -*-

(require 'extras)

(define (help)
  (with-output-to-port (current-error-port)
    (lambda ()
      (for-each (lambda (line) (apply print line))
		`(("Usage: configure [<option> ...]")
		  ()
		  ("	--help		This message")
		  ("	--prefix	Base directory - eg. /usr/local - defaults to the")
		  ("			output of 'chicken-config -prefix'")
		  ("	--bindir	Where to install user binaries - default PREFIX/bin")
		  ("	--libdir	Where to install library code - default PREFIX/share")
		  ("	--datadir	Where to install data files - default PREFIX/share")
		  ("	--pkglibdir	Where to install package libs - default LIBDIR/chicken")
		  ("	--pkgdatadir	Where to install package data - default DATADIR/chicken")
		  ()
		  )))))

(define (main argv)
  (let ((prefix (call-with-input-pipe "chicken-config -prefix" read-line))
	(bindir #f)
	(libdir #f)
	(datadir #f)
	(pkglibdir #f)
	(pkgdatadir #f))
    (call-with-values
	(lambda ()
	  (args-fold (cdr argv)
		     (list (option '("help") #f #f
				   (lambda (opt name arg . seeds)
				     (help)
				     (exit 1)))
			   (option '("prefix") #t #f
				   (lambda (opt name arg . seeds)
				     (set! prefix arg)))
			   (option '("bindir") #t #f
				   (lambda (opt name arg . seeds)
				     (set! bindir arg)))
			   (option '("libdir") #t #f
				   (lambda (opt name arg . seeds)
				     (set! libdir arg)))
			   (option '("datadir") #t #f
				   (lambda (opt name arg . seeds)
				     (set! datadir arg)))
			   (option '("pkglibdir") #t #f
				   (lambda (opt name arg . seeds)
				     (set! pkglibdir arg)))
			   (option '("pkgdatadir") #t #f
				   (lambda (opt name arg . seeds)
				     (set! pkgdatadir arg))))
		     (lambda (opt name arg . seeds)
		       (help)
		       (error "Unrecognised option:" name))
		     (lambda (param . seeds)
		       (help)
		       (error "Unrecognised parameter:" param))))
      (lambda ignore ignore))

    (if (not bindir) (set! bindir (string-append prefix "/bin")))
    (if (not libdir) (set! libdir (string-append prefix "/share")))
    (if (not datadir) (set! datadir (string-append prefix "/share")))

    (if (not pkglibdir) (set! pkglibdir (string-append libdir "/chicken")))
    (if (not pkgdatadir) (set! pkgdatadir (string-append datadir "/chicken")))

    (system* "rm -f Build.rules")
    (system* "sed -e 's,@CONFIG_PATH@,'`pwd`/config.scm',' < Build.rules.in > Build.rules")
    (system* "chmod a-w Build.rules")

    (with-output-to-file "config.scm"
      (lambda ()
	(for-each pretty-print
		  `((define $prefix ,prefix)
		    (define $bindir ,bindir)
		    (define $libdir ,libdir)
		    (define $datadir ,datadir)
		    (define $pkglibdir ,pkglibdir)
		    (define $pkgdatadir ,pkgdatadir)
		    ))))

    (exit 0)))
