# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4
# $Id: Portfile 92466 2012-04-29 11:48:40Z vince@macports.org $

PortSystem			1.0
PortGroup			cmake	1.0
PortGroup           qt4     1.0

name				qgis
version				1.7.4
categories			gis
maintainers			vince
description			QGIS is a user-friendly GIS based on Qt 4
long_description	QGIS is a GIS. It can visualize, inject data into \
					PostGres/PostGIS, or serve as a Qt front-end to Grass. \
					Extended with Python plugins, it can become a quite \
					powerful GIS on its own.

platforms			darwin
license				GPL

use_parallel_build	no
homepage			http://www.qgis.org/

distname			${name}-${version}
master_sites		http://qgis.org/downloads/
use_bzip2			yes

checksums           md5     ad6e2bd8c5eb0c486939c420af5d8c44 \
                    sha1    0dae5cb933d1ce621e5fe30c1937887d813a2098 \
                    rmd160  dae51556b09a57ce9537ca4ed75830f15e3be5a4

worksrcdir			${name}-${version}

patchfiles			patch-spatialite_c.diff \
					patch-conversions_sip.diff \
					patch-CMakeLists_txt.diff \
					patch-src_core_spatialindex_include_tools_h.diff

depends_lib-append 	port:libiconv \
					port:expat \
					port:openssl \
					port:proj \
					port:geos \
					port:gdal \
					port:sqlite3 \
					port:gsl \
					port:qwt52 \
					port:fcgi

post-extract {
	system "cd ${worksrcpath} && mkdir build && mkdir Python.framework"
}

set Py_own_FRM	${worksrcpath}/Python.framework

# Python related stuff

variant python25	conflicts universal python26 python27 \
					description use Python 2.5 {	

	depends_lib-append		port:py25-pyqt4
	depends_build-append	port:py25-sip
	
	configure.args-append "-DPYTHON_EXECUTABLE=${prefix}/bin/python2.5"
	configure.args-append "-DPYUIC4_PROGRAM=${prefix}/bin/pyuic4-2.5"
	configure.args-append "-DPYRCC4_PROGRAM=${prefix}/bin/pyrcc4-2.5"
	configure.args-append \
				"-DSIP_BINARY_PATH=${Py_own_FRM}/Versions/2.5/bin/sip"
}

variant python26	conflicts python25 python27 \
					description use Python 2.6 {
	
	depends_lib-append		port:py26-pyqt4
	depends_build-append	port:py26-sip
	
	configure.args-append "-DPYTHON_EXECUTABLE=${prefix}/bin/python2.6"
	configure.args-append "-DPYUIC4_PROGRAM=${prefix}/bin/pyuic4-2.6"
	configure.args-append "-DPYRCC4_PROGRAM=${prefix}/bin/pyrcc4-2.6"
	configure.args-append \
				"-DSIP_BINARY_PATH=${Py_own_FRM}/Versions/2.6/bin/sip"

}

variant python27 	conflicts python25 python26 \
					description use Python 2.7 {
					
	depends_lib-append		port:py27-pyqt4
	depends_build-append	port:py27-sip
	
	configure.args-append "-DPYTHON_EXECUTABLE=${prefix}/bin/python2.7"
	configure.args-append "-DPYUIC4_PROGRAM=${prefix}/bin/pyuic4-2.7"
	configure.args-append "-DPYRCC4_PROGRAM=${prefix}/bin/pyrcc4-2.7"
	configure.args-append \
				"-DSIP_BINARY_PATH=${Py_own_FRM}/Versions/2.7/bin/sip"

}

variant postgresql90	conflicts postgresql91 \
						description "Use postgresql 9.0" {
						
	depends_lib-append		port:postgresql90
	set PGSQL_DIR			${prefix}/lib/postgresql90
	configure.args-append	"-DPOSTGRES_CONFIG=${PGSQL_DIR}/bin/pg_config"
}

variant postgresql91	conflicts postgresql90 \
						description "Use postgresql 9.1" {
						
	depends_lib-append		port:postgresql91
	set PGSQL_DIR			${prefix}/lib/postgresql91
	configure.args-append	"-DPOSTGRES_CONFIG=${PGSQL_DIR}/bin/pg_config"
}

variant postgis			description "Build postgis 1.x support" \
                        conflicts postgis2 {
	
	depends_lib-append		port:postgis
	
	if {![variant_isset postgresql90] &&
		![variant_isset postgresql91] } {
		return -code error "Please also select a postgresql variant"
	}
}

variant postgis2			description "Build postgis 2.x support" \
                            conflicts postgis {
	
	depends_lib-append		port:postgis2
	
	if {![variant_isset postgresql90] &&
		![variant_isset postgresql91] } {
		return -code error "Please also select a postgresql variant"
	}
}

variant	grass				description "Build the grass (6.4) plugin" {

	depends_lib-append		port:grass
	configure.args-append	"-DGRASS_PREFIX=${prefix}/share/grass-6.4.0"
}

# Overrides default

default_variants			+postgis

if {![variant_isset python25] && ![variant_isset python26] &&
	![variant_isset python27]} {
	
	default_variants		+python27
}

if {[variant_isset postgis] && ![variant_isset postgresql90] &&
	![variant_isset postgresql91]} {
	
	default_variants		+postgresql91
}

configure.dir				${worksrcpath}/build									
configure.cmd				cmake ..

configure.args-append		"-DCMAKE_CXX_COMPILER=${configure.cxx}"
configure.args-append		"-DCMAKE_C_COMPILER=${configure.cc}"
configure.args-append		"-DEXPAT_INCLUDE_DIR=${prefix}/include"
configure.args-append		"-DEXPAT_LIBRARY=${prefix}/lib/libexpat.dylib"
configure.args-append		"-DCMAKE_INSTALL_PREFIX=${applications_dir}"
configure.args-append		"-DGDAL_CONFIG=${prefix}/bin/gdal-config"
configure.args-append		"-DGDAL_INCLUDE_DIR=${prefix}/include"
configure.args-append		"-DGDAL_LIBRARY=${prefix}/lib/libgdal.dylib"
configure.args-append		"-DGEOS_CONFIG=${prefix}/bin/geos-config"
configure.args-append		"-DGEOS_INCLUDE_DIR=${prefix}/include/geos"
configure.args-append		"-DGEOS_LIBRARY=${prefix}/lib/libgeos_c.dylib"
configure.args-append		"-DGSL_CONFIG=${prefix}/bin/gsl-config"
configure.args-append		"-DPROJ_INCLUDE_DIR=${prefix}/include"
configure.args-append		"-DPROJ_LIBRARY=${prefix}/lib/libproj.dylib"
configure.args-append		"-DWITH_SPATIALITE:BOOL=NO"
configure.args-append		"-DPYTHON_INCLUDE_PATH=${Py_own_FRM}/Headers"
configure.args-append		"-DSIP_INCLUDE_DIR=${Py_own_FRM}/Headers"
configure.args-append		"-DCMAKE_BUILD_TYPE=Release"
	
# This is a fake but don't ask me why it is needed
configure.args-append		"-DSVN_MARKER=/usr/bin/svnversion"


# Patch for proper linking of our own Python framework
post-configure {
	reinplace -E "s|(^\[^ \]*)|\\1 -F${worksrcpath}|" \
		${worksrcpath}/build/src/python/CMakeFiles/qgispython.dir/link.txt


	# Setup Python stuff in order to gracefully link 
	# against -framework Python

	set variantlist [split ${portvariants} "+"]
	set Pyversion	[string replace [lindex ${variantlist} \
						[lsearch $variantlist "python*"]] 0 5]
	set Pyverpath	[join [split ${Pyversion} ""] .]

	# Set up a fake framework in ${worksrcpath}/Python.framework
	set Py_sys_FRM	"${frameworks_dir}/Python.framework/Versions/${Pyverpath}"

	system \
		"cd ${worksrcpath}/build/python/CMakeFiles ; \
		 cd python_module_qgis_core.dir ; \
		 cp ${filespath}/ed-build.make . ; \
		 sed -i '' \"s|WRK|${worksrcpath}|\" ed-build.make ; \
		 sed -i '' \"s|FLS|${filespath}|\" ed-build.make; \
		 ed build.make < ed-build.make"
		 	
	system \
		"cd ${Py_own_FRM} ; \
		 rm -f Headers Python Resources ; \
		 ln -s ${Py_sys_FRM}/include/python${Pyverpath} Headers ; \
		 ln -s ${Py_sys_FRM}/Python . ; \
		 ln -s ${Py_sys_FRM}/Resources . ;"
}

use_parallel_build			yes
build.dir					${worksrcpath}/build
destroot.target				install
