# -*- 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 67650 2010-05-15 12:41:55Z vince@macports.org $

PortSystem			1.0
PortGroup			cmake	1.0
name				qgis
version				1.4.0
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://download.osgeo.org/qgis/src/

checksums			md5     47710e7aa14c2a672c7f28457b0c956f \
					sha1    105f353f36e9625d1eb15f1a315882f214dbe026 \
					rmd160  47486732c8fe37aa6864d09c7420be22de5ea802

worksrcdir			${name}-${version}

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

patchfiles			patch-spatialite_c.diff \
					patch-cmake_Python_cmake.diff \
					patch-python_configure_py_in.diff

depends_build		port:cmake
									
depends_lib			port:libiconv \
					port:expat \
					port:openssl \
					port:proj \
					port:geos \
					port:gdal \
					port:sqlite3 \
					port:gsl

# Python related stuff
# Checks if Python framework is not buggy
set Python_FRM		"${frameworks_dir}/Python.framework"
set Pyver 			[exec python -V |& awk "{print \$2}"]

# Eliminates minor (could also be done with strsed)
set Pyversion		[join [lrange [split ${Pyver} "."] 0 1] ""]
set Pyverpath		[join [lrange [split ${Pyver}	"."] 0 1] "."]
		
depends_lib-append	port:py${Pyversion}-pyqt4

# Overrides default
configure.dir		${worksrcpath}/build									
configure.cmd		cmake ..

variant postgis				description "Build postgis support" {
	
	depends_lib-append		port:postgis
	
	# Always choose latest installed postgresql version

	set	PGSQL_DIR			\
			[lindex [lsort -dec [glob -d ${prefix}/lib postgresql*]] 0]
	configure.args-append	"-DPOSTGRESQL_PREFIX=${PGSQL_DIR}"
	configure.args-append	"-DPOSTGRES_CONFIG=${PGSQL_DIR}/bin/pg_config"
}


variant	grass63				description "Build the grass (6.3) plugin" {

	depends_lib-append		port:grass
	
	if {[file exists ${applications_dir}/GRASS-6.3.app]} {
		configure.args-append \
			"-DGRASS_PREFIX=${applications_dir}/GRASS-6.3.app/Contents/MacOS"
	} else {
		configure.args-append	"-DGRASS_PREFIX=${prefix}"
	}
}


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

	depends_lib-append		port:grass64
	
	if {[file exists ${applications_dir}/GRASS-6.4.app]} {
		configure.args-append \
			"-DGRASS_PREFIX=${applications_dir}/GRASS-6.4.app/Contents/MacOS"
	} else {
		configure.args-append	"-DGRASS_PREFIX=${prefix}"
	}
}

# LLVM cannot be used (Seg. faults in spatialite.c)

#if {[string first llvm ${configure.cc}] != -1 || \
#		[string first llvm ${configure.cxx}] != -1} {

#	ui_msg "Warning: Qgis cannot be compiled with LLVM, switching to GCC\n"
#	set configure.cc		gcc
#	set configure.cxx		g++
#}

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"
configure.args-append		"-DGEOS_LIBRARY=${prefix}/lib/libgeos_c.dylib"
configure.args-append		"-DGEOS_LIB_NAME_WITH_PREFIX=-lgeos_c"
configure.args-append		"-DGSL_CONFIG=${prefix}/bin/gsl-config"
configure.args-append		"-DICONV_INCLUDE_DIR=${prefix}/include"
configure.args-append		"-DICONV_LIBRARY=${prefix}/lib/libiconv.dylib"
configure.args-append		"-DPROJ_INCLUDE_DIR=${prefix}/include"
configure.args-append		"-DPROJ_LIBRARY=${prefix}/lib/libproj.dylib"
configure.args-append		"-DOPENSSL_INCLUDE_DIR=${prefix}/include"
configure.args-append		"-DOPENSSL_LIBRARIES=${prefix}/lib/libssl.dylib"
configure.args-append		"-DPYTHON_INCLUDE_PATH=${Python_FRM}/Headers"
configure.args-append		"-DPYUIC4_PROGRAM=${prefix}/bin/pyuic4-${Pyverpath}"
configure.args-append		"-DPYRCC4_PROGRAM=${prefix}/bin/pyrcc4-${Pyverpath}"
configure.args-append		\
				"-DSIP_BINARY_PATH=${Python_FRM}/Versions/${Pyverpath}/bin/sip"
configure.args-append		"-DSIP_INCLUDE_DIR=${Python_FRM}/Headers"
configure.args-append		"-DQT_QMAKE_EXECUTABLE=${prefix}/bin/qmake-mac"
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"

pre-extract {
	if {![file exists ${Python_FRM}]} {
		ui_error		"Qgis requires python" 
	}
}

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

# Setup Python stuff in order to gracefully link against -framework Python
pre-build {
	if {! [file exists ${Python_FRM}/Headers]} {
		ui_msg				"Patching (temporarily) the Python framework\
							(See http://trac.macports.org/ticket/21614)"
		
		if {[variant_isset universal] && ${Pyversion} < 26} {
			ui_error		"Universal build requires Python > 2.5"
		}
												 
		system	"cd ${Python_FRM} ; \
			ln -s Versions/${Pyverpath}/include/python${Pyverpath} Headers ; \
			ln -s Versions/${Pyverpath}/Python . ; \
			ln -s Versions/${Pyverpath}/Resources . ; \
			touch /private/tmp/qgis_pypatch"
	} else {
		# Checks for inconsistencies and set dependencies accordingly
	
		if {${Pyver} !=	[exec cat ${Python_FRM}/Headers/patchlevel.h | \
						grep "PY_VERSION " | awk "{print \$3}" | \
						sed "s/\\\"//g"]} {	
			ui_error 	"Inconsistent Python framework installation."
		}
	}
}

use_parallel_build			yes
build.dir					${worksrcpath}/build

post-destroot {
	if {[file exists /private/tmp/qgis_pypatch]} {
		ui_msg				"Removing patched Framework"
		system 				"cd ${Python_FRM} ; \
							rm -f Headers Python Resources ; \
							rm -f /private/tmp/qgis_pypatch"
	}
}

destroot.target				install
