# $Id: Portfile 55750 2009-08-18 09:45:25Z jann@macports.org $
PortSystem        1.0

name              eiffelstudio65
set minor_version 80294
version           6.5.${minor_version}
set branch        [join [lrange [split ${version} .] 0 1] ""]
categories        lang
platforms         darwin
maintainers       student.ethz.ch:roederja \
                  ethz.ch:dfurrer
description       The ISE Eiffel Compiler and IDE
long_description  EiffelStudio is a development environment for the \
                  Eiffel programming language developed by Eiffel Software. \
                  EiffelStudio includes a combination of tools integrated under \
                  a single user interface: compiler, interpreter, debugger, \
                  browser, metrics tool, profiler, diagram tool. \
                  The user interface rests on a number of specific UI paradigms, \
                  in particular "pick-and-drop" for effective browsing.
homepage          http://www.eiffel.com
master_sites      sourceforge:eiffelstudio:source \
                  http://download.origo.ethz.ch/eiffelstudio/1348/:source \
                  http://n.ethz.ch/student/roederja/download/:launcher
depends_lib       port:gtk2
depends_build     bin:bzip2:bzip2
extract.suffix    .tar
extract.cmd       tar
extract.post_args
extract.pre_args  -xf
distname          PorterPackage_${branch}_${minor_version}
set eiffel_launch eiffel_launcher_20081101.tar.bz2
distfiles         ${distname}${extract.suffix}:source \
                  ${eiffel_launch}:launcher
extract.only      ${distname}${extract.suffix}
worksrcdir        PorterPackage

checksums         ${distname}${extract.suffix} rmd160 8b871a4da5eef26845110691f0eca3b98ae19891 \
                  ${eiffel_launch} rmd160 9a6ffe7f1bbc302b60b72197c84ad3a93d31cc0c

use_configure     no

platform i386     {
                    set env(ISE_PLATFORM) macosx-x86
                  }

platform powerpc  {
                    set env(ISE_PLATFORM) macosx-ppc
                  }

build             {
                    set env(ISE_EIFFEL) ${worksrcpath}/Eiffel${branch}
                    set env(GOBO) $env(ISE_EIFFEL)/library/gobo
                    set env(PATH) $env(ISE_EIFFEL)/studio/spec/$env(ISE_PLATFORM)/bin:$env(PATH)

                    system "cd ${worksrcpath} && ${worksrcpath}/compile_exes $env(ISE_PLATFORM)"
                    file attributes ${worksrcpath}/Eiffel${branch}/studio/spec/$env(ISE_PLATFORM)/bin/ec -permissions 0755

                    # Extract Eiffel Launcher
                    system "tar -xjf ${distpath}/${eiffel_launch} -C ${worksrcpath}/Eiffel${branch}/"
                  }

destroot          {
                    xinstall -m 755 -d ${destroot}/${applications_dir}
                    file copy ${worksrcpath}/Eiffel${branch} ${destroot}/${applications_dir}/

                    # Run ranlib on the libraries
                    system "ranlib ${destroot}/${applications_dir}/Eiffel${branch}/studio/spec/$env(ISE_PLATFORM)/lib/*.a"

                    if {[variant_isset precompile]} {
                      # Build the precompiles
                      set env(ISE_EIFFEL) ${destroot}/${applications_dir}/Eiffel${branch}
                      set compiler $env(ISE_EIFFEL)/studio/spec/$env(ISE_PLATFORM)/bin/ec
                      ui_msg "--->  Precompiling EiffelBase"
                      system "cd $env(ISE_EIFFEL)/precomp/spec/$env(ISE_PLATFORM) && ${compiler} -precompile -config base.ecf -c_compile -clean"
                      system "cd $env(ISE_EIFFEL)/precomp/spec/$env(ISE_PLATFORM) && ${compiler} -precompile -config base-safe.ecf -c_compile -clean"
                      system "cd $env(ISE_EIFFEL)/precomp/spec/$env(ISE_PLATFORM) && ${compiler} -precompile -config base-mt.ecf -c_compile -clean"
                      system "cd $env(ISE_EIFFEL)/precomp/spec/$env(ISE_PLATFORM) && ${compiler} -precompile -config base-mt-safe.ecf -c_compile -clean"

                      ui_msg "--->  Precompiling EiffelVision"
                      system "cd $env(ISE_EIFFEL)/precomp/spec/$env(ISE_PLATFORM) && ${compiler} -precompile -config vision2.ecf -c_compile -clean"
                      #system "cd $env(ISE_EIFFEL)/precomp/spec/$env(ISE_PLATFORM) && ${compiler} -precompile -config vision2-safe.ecf -c_compile -clean"
                      system "cd $env(ISE_EIFFEL)/precomp/spec/$env(ISE_PLATFORM) && ${compiler} -precompile -config vision2-mt.ecf -c_compile -clean"
                      #system "cd $env(ISE_EIFFEL)/precomp/spec/$env(ISE_PLATFORM) && ${compiler} -precompile -config vision2-mt-safe.ecf -c_compile -clean"

                      # Build the precompiles
                      set env(ISE_EIFFEL) ${applications_dir}/Eiffel${branch}
                      set compiler $env(ISE_EIFFEL)/studio/spec/$env(ISE_PLATFORM)/bin/ec
                      # Build the precompiles for -experimental
                      ui_msg "--->  Precompiling EiffelBase for experimental"
                      system "cd $env(ISE_EIFFEL)/experimental/precomp/spec/$env(ISE_PLATFORM) && ${compiler} -experiment -precompile -config base.ecf -c_compile -clean"
                      system "cd $env(ISE_EIFFEL)/experimental/precomp/spec/$env(ISE_PLATFORM) && ${compiler} -experiment -precompile -config base-safe.ecf -c_compile -clean"
                      system "cd $env(ISE_EIFFEL)/experimental/precomp/spec/$env(ISE_PLATFORM) && ${compiler} -experiment -precompile -config base-mt.ecf -c_compile -clean"
                      system "cd $env(ISE_EIFFEL)/experimental/precomp/spec/$env(ISE_PLATFORM) && ${compiler} -experiment -precompile -config base-mt-safe.ecf -c_compile -clean"

                      ui_msg "--->  Precompiling EiffelVision for experimental"
                      system "cd $env(ISE_EIFFEL)/experimental/precomp/spec/$env(ISE_PLATFORM) && ${compiler} -experiment -precompile -config vision2.ecf -c_compile -clean"
                      #system "cd $env(ISE_EIFFEL)/experimental/precomp/spec/$env(ISE_PLATFORM) && ${compiler} -experiment -precompile -config vision2-safe.ecf -c_compile -clean"
                      system "cd $env(ISE_EIFFEL)/experimental/precomp/spec/$env(ISE_PLATFORM) && ${compiler} -experiment -precompile -config vision2-mt.ecf -c_compile -clean"
                      #system "cd $env(ISE_EIFFEL)/experimental/precomp/spec/$env(ISE_PLATFORM) && ${compiler} -experiment -precompile -config vision2-mt-safe.ecf -c_compile -clean"
	                }
                    if {[variant_isset fixpermissions]} {
                      set env(ISE_EIFFEL) ${destroot}/${applications_dir}/Eiffel${branch}
                      system "cd $env(ISE_EIFFEL)/precomp/spec/$env(ISE_PLATFORM) && chmod -R 777 ."
                      system "cd $env(ISE_EIFFEL)/experimental/precomp/spec/$env(ISE_PLATFORM) && chmod -R 777 ."
                    }
	              }

post-install      {
                    ui_msg " ################################################################################## \n\
                        To complete the installation you have to add the following to your .bashrc file : \n\
                        export ISE_PLATFORM=$env(ISE_PLATFORM) \n\
                        export ISE_EIFFEL=${applications_dir}/Eiffel${branch} \n\
                        export GOBO=\$ISE_EIFFEL/library/gobo/svn \n\
                        export PATH=\$PATH:\$ISE_EIFFEL/studio/spec/\$ISE_PLATFORM/bin:\$GOBO/../spec/\$ISE_PLATFORM/bin \n\
                        ################################################################################## \n"
                  }
                 
variant precompile description {Build the precompiles for EiffelBase and EiffelVision} {
                  # Build the precompiles in the destroot phase.
}

variant fixpermissions description {Makes the precompile directory shared and writable by all users.} {
                  # This fixes the issue with users being unable to build precompiles but
                  # it is a potential security risk on multi-user systems
}