# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:filetype=tcl:et:sw=4:ts=4:sts=4
# $Id$

PortSystem  1.0

name        slime
version     20080404
epoch       20080404
revision    1
categories  lang
platforms   darwin
maintainers evenson@panix.com

description An Emacs mode for unifying Common Lisp development

long_description    \
    SLIME extends Emacs with new support for interactive \
    programming in Common Lisp. The features are \
    centred around `slime-mode', an Emacs minor-mode \
    that complements the standard `lisp-mode'. While \
    `lisp-mode' supports editing Lisp source files, \
    `slime-mode' adds support for interacting with a \
    running Common Lisp process for compilation,\
    debugging, documentation lookup, and so on.

homepage        http://common-lisp.net/project/slime/
master_sites    ${homepage}
fetch.type      cvs
cvs.root        :pserver:anonymous@common-lisp.net:/project/slime/cvsroot
cvs.module      slime
cvs.password    anonymous
cvs.date        ${version}
worksrcdir      slime

use_configure   no
depends_lib     port:emacs
default_variants +sbcl

variant app description "Build SLIME against editors/emacs-app" {
    depends_run-append port:emacs-app
    depends_run-delete port:emacs
}

variant sbcl description "Require lang/sbcl for SLIME" {
    depends_run-append port:sbcl
}

variant openmcl description "Require lang/openmcl for SLIME" {
    depends_run-append port:openmcl
}

variant clisp description "Require lang/clisp for SLIME" {
    depends_run-append port:clisp
}

set slime_emacs_binary [
   if { [regexp carbon [join [registry_installed emacs]]]  || [ variant_isset app ] } {  
       list "/Applications/MacPorts/Emacs.app/Contents/MacOS/Emacs" 
   } else { 
       list "${prefix}/bin/emacs"    
   }
]
ui_msg "slime_emacs_binary is $slime_emacs_binary"

set slime_site_lisp_dir  [ 
     if {[ variant_isset app ]} {  
         list "${destroot}/Applications/MacPorts/Emacs.app/Contents/Resources/site-lisp/slime"
     } else {
         list "${destroot}${prefix}/share/emacs/site-lisp/slime"
     }
]

set slime_site_lisp_contrib_dir ${slime_site_lisp_dir}/contrib

set slime_byte_compile_p   0

post-patch {
    reinplace "s|/usr/local|${prefix}/share|g" \
        ${worksrcpath}/doc/Makefile
}

configure {
#     if {! [file executable ${slime_emacs_binary}]} {
#         set slime_byte_compile_p 0
#         ui_msg "Couldn't find an executable Emacs image so won't byte compile the Elisp files."
#     } else {
#         set slime_byte_compile_p 1
#         ui_msg "Emacs binary used for byte compilation is ${slime_emacs_binary}."
#     }
    set slime_byte_compile_p 0
}

build {
    cd ${worksrcpath}
    if {${slime_byte_compile_p}} {
         system "${slime_emacs_binary} \
               -batch  \
   --directory ${worksrcpath}  --directory ${worksrcpath}/contrib \
                 --funcall batch-byte-compile \
               contrib/*.el"
         system "${slime_emacs_binary} \
               -batch  \
   --directory ${worksrcpath}  --directory ${worksrcpath}/contrib \
                 --funcall batch-byte-compile \
               *.el"
#         system "${slime_emacs_binary} \
#               --batch  --directory $pwd  --directory contrib \
#                --funcall batch-byte-compile \
#              *.el"
#         system "${slime_emacs_binary} \
#               --batch  --directory .  --funcall batch-byte-compile \
#               slime.el \
#               slime-autoloads.el \
#               hyperspec.el"

#        cd ${worksrcpath}/contrib
#         system "${slime_emacs_binary} \
#               --batch \
#               --directory .  --directory .. \
#               --funcall batch-byte-compile  \
#               slime.el slime-autoloads.el \
#               hyperspec.el \
#               bridge.el \
#               inferior-slime.el \
#               slime-asdf.el \
#               slime-parse.el \
#               slime-autodoc.el \
#               slime-banner.el \
#               slime-c-p-c.el \
#               slime-editing-commands.el \
#               slime-fancy-inspector.el \
#               slime-fancy.el \
#               slime-fuzzy.el \
#               slime-highlight-edits.el \
#               slime-indentation.el \
#               slime-motd.el \
#               slime-parse.el \
#               slime-presentation-streams.el \
#               slime-presentations.el \
#               slime-references.el \
#               slime-scheme.el \
#               slime-scratch.el \
#               slime-tramp.el \
#               slime-typeout-frame.el \
#               slime-xref-browser.el"
    }

    cd ${worksrcpath}/doc
    system "make slime.info"
}

destroot    {
    cd ${worksrcpath}
    xinstall -m 755 -d ${slime_site_lisp_dir}

    foreach file [glob *.el *.elc *.lisp ChangeLog] {
        xinstall -m 644 ${file} ${slime_site_lisp_dir}
    }

    cd ${worksrcpath}/contrib
    xinstall -m 755 -d ${slime_site_lisp_contrib_dir}
    foreach file [glob *.el *.elc *.lisp ChangeLog] {
        xinstall -m 644 ${file} ${slime_site_lisp_contrib_dir}
    }

    xinstall -m 644 ${worksrcpath}/doc/slime.info ${destroot}${prefix}/share/info
}

post-activate   {
    ui_msg "To use SLIME, you need to have a Common Lisp installed with which"
    ui_msg "you wish to interact.  At the moment, 'openmcl', 'sbcl', and"
    ui_msg "'clisp' all work. By default, MacPorts SLIME installs 'sbcl' as a"
    ui_msg "dependency."
    ui_msg ""
    ui_msg "Then put the following in your ~/.emacs:"
    ui_msg ""
    ui_msg "(require 'slime-autoloads)"
    ui_msg "(setq slime-lisp-implementations"
    ui_msg "     \`((sbcl (\"/opt/local/bin/sbcl\"))"
    ui_msg "       (clisp (\"/opt/local/bin/clisp\"))))"
    ui_msg "(add-hook \'lisp-mode-hook"
    ui_msg "           (lambda ()"
    ui_msg "             (cond ((not (featurep \'slime))"
    ui_msg "                    (require \'slime) "
	ui_msg	"                    (normal-mode)))))"
    ui_msg ""
    ui_msg "(eval-after-load \"slime\""
    ui_msg "   \'(slime-setup '(slime-fancy slime-banner)))"
    ui_msg ""
    ui_msg "Populate the initialization list in SLIME-LISP-IMPLEMENTATIONS"
    ui_msg "with the correct paths to the Common Lisp exectuables you wish to use."
    ui_msg ""
    ui_msg "Then, 'M-x slime' from Emacs should connect you to the first"
    ui_msg "CL implementation in the list. 'C-- M-x slime' will present"
    ui_msg "an interactive chooser for additional implementations in the list."
    ui_msg ""
}


