Ticket #34777: Portfile

File Portfile, 7.9 KB (added by bpanulla (Brian Panulla), 12 years ago)

Updated Portfile

Line 
1# -*- 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
2# $Id$
3
4PortSystem                  1.0
5
6name                        mapnik2
7version                     2.0.1
8categories                  gis
9platforms                   darwin
10license                     LGPL-2.1
11maintainers                 gmail.com:larry.velazquez
12description                 Open Source C++/Python mapping toolkit.
13long_description            Mapnik is a Open Source tookit for developing mapping \
14                            applications. It is written in C++ and there are \
15                            Python bindings to facilitate fast-paced agile \
16                            development. It can comfortably be used for both \
17                            desktop and web development. \
18                            \
19                            Mapnik is about making beautiful maps. It uses the \
20                            AGG library and offers world class anti-aliasing \
21                            rendering with subpixel accuracy for geographic \
22                            data. It is written from scratch in modern C++ and \
23                            does not suffer from design decisions made a decade \
24                            ago. When it comes to handling common software tasks \
25                            such as memory management, filesystem access, \
26                            regular expressions, parsing and so on, Mapnik \
27                            does not re-invent the wheel, but utilises best of \
28                            breed industry standard libraries from boost.org.
29homepage                    http://mapnik.org/
30
31conflicts                   py26-mapnik
32
33master_sites                http://cloud.github.com/downloads/mapnik/mapnik/ \
34                            http://download.berlios.de/mapnik/ \
35                            http://download2.berlios.de/mapnik/
36distname                    mapnik-v${version}
37worksrcdir                  mapnik-v${version}
38checksums                   md5     e3dd09991340e2568b99f46bac34b0a8 \
39                            sha1    0ae6a338e3ddb480b53fb7bbc984c4b0479aef88 \
40                            rmd160  f001bb31f5f9b0c210f9800ed02832ecf993ec05
41
42use_bzip2                   yes
43
44depends_lib-append          port:boost \
45                            port:libpng \
46                            port:jpeg \
47                            port:tiff \
48                            port:icu \
49                            port:zlib \
50                            port:freetype \
51                            port:proj \
52                            port:libxml2
53
54patchfiles                  build.py.patch
55
56set python_suffixes {25 26 27}
57set python_ports {}
58foreach s ${python_suffixes} {
59    lappend python_ports python${s}
60}
61foreach s ${python_suffixes} {
62    set p python${s}
63    set v [string index ${s} 0].[string index ${s} 1]
64    set i [lsearch -exact ${python_ports} ${p}]
65    set c [lreplace ${python_ports} ${i} ${i}]
66    eval [subst {
67        variant ${p} conflicts ${c} description {Build Python bindings} {
68            depends_lib-append      port:${p}
69            configure.args-delete   BINDINGS=none
70            configure.args-append   BINDINGS=python
71            configure.args-append   PYTHON=${prefix}/bin/python${v}
72        }
73    }]
74}
75
76proc python_branch {} {
77    global python_suffixes
78    foreach s ${python_suffixes} {
79        if {[variant_isset python${s}]} { return ${s} }
80    }
81    error "Python support not enabled."
82}
83
84variant cairo description {Enable Cairo support for PDF, PostScript, and SVG} {
85    configure.args-delete   CAIRO=False
86    configure.args-append   CAIRO=True
87    depends_build-append    port:pkgconfig
88    depends_lib-append      path:lib/pkgconfig/cairomm-1.0.pc:cairomm
89    if {![catch {set s [python_branch]}]} {
90        set pf Python.framework/Versions/[string index ${s} 0].[string index ${s} 1]
91        depends_lib-append      port:py[expr {${s} == 24 ? {} : ${s}}]-cairo
92        configure.args-append   PKG_CONFIG_PATH=${frameworks_dir}/${pf}/lib/pkgconfig
93    }
94}
95
96set input_plugins {shape raster}
97
98variant geos description {Build GEOS plugin} {
99    depends_lib-append      port:geos
100    lappend input_plugins geos
101}
102
103variant gdal description {Build GDAL/OGR plugin} {
104    depends_lib-append      port:gdal
105    lappend input_plugins gdal ogr
106}
107
108variant osm description {Build OpenStreetMap plugin} {
109    depends_lib-append      port:curl
110    lappend input_plugins osm
111}
112
113variant postgis description {Build PostGIS plugin} {
114    depends_lib-append      path:lib/libpq.dylib:postgresql91
115    lappend input_plugins postgis
116}
117
118variant sqlite description {Build SQLite plugin} {
119    depends_lib-append      port:sqlite3
120    lappend input_plugins sqlite
121}
122
123default_variants            +python27
124universal_variant           no
125
126configure.python            /usr/bin/python
127build.cmd                   ${configure.python} scons/scons.py
128build.pre_args
129use_parallel_build          yes
130
131configure.cmd               ${build.cmd}
132configure.pre_args          configure --help
133configure.args              CXX=${configure.cxx} \
134                            CC=${configure.cc} \
135                            PREFIX=${prefix} \
136                            DESTDIR=${destroot} \
137                            CAIRO=False \
138                            FRAMEWORK_PYTHON=False \
139                            BINDINGS=none \
140                            JOBS=${build.jobs}
141foreach lib {BOOST ICU PNG JPEG TIFF PROJ CAIRO SQLITE} {
142    configure.args-append   ${lib}_INCLUDES=${prefix}/include
143    configure.args-append   ${lib}_LIBS=${prefix}/lib
144}
145
146destroot.destdir
147
148pre-configure {
149    # Hack to check for correct boost variant
150    if {![catch {set pys [python_branch]}]} {
151        set boost_py ${prefix}/lib/libboost_python-mt.dylib
152        if {![file exists ${boost_py}]} {
153            ui_error "
154****
155**** Your current boost does not have Python support. Please reinstall
156**** boost before trying ${name} +python${pys} again:
157****
158****     sudo port install boost +python${pys}
159****
160"
161            return -code error "Boost.Python missing"
162        }
163        regexp {Python\.framework/Versions/([[:digit:]]\.[[:digit:]])} \
164          [exec /usr/bin/otool -L ${boost_py}] foo bpv
165        if {[set bps [string replace ${bpv} 1 1]] != ${pys}} {
166            if {${bps} ni ${python_suffixes}} {
167                ui_error "
168****
169**** Your current boost is incompatible with ${name} +python${pys}.
170**** Please install the boost variant that matches ${name}:
171****
172****     sudo port install boost +python${pys}
173****
174"
175                return -code error "Incompatible Boost.Python"
176            }
177            ui_error "
178****
179**** ${name} +python${pys} is incompatible with your current boost.
180**** Please install the ${name} variant that matches boost +python${bps}:
181****
182****     sudo port install ${name} +python${bps}
183****
184**** or install the boost variant that matches ${name} +python${pys}:
185****
186****     sudo port install boost +python${pys}
187****
188"
189            return -code error "Incompatible Boost.Python"
190        }
191    }
192   
193    # Must be evaluated after the variants
194    configure.args-append           INPUT_PLUGINS=[join ${input_plugins} ","]
195    if {[variant_isset postgis]} {
196        regexp {postgresql[[:digit:]]+} [glob ${prefix}/lib/postgresql*/libpq.*] pg
197        configure.args-append       PG_CONFIG=${prefix}/lib/${pg}/bin/pg_config
198        if {[variant_isset sqlite]} {
199            configure.args-append   PGSQL2SQLITE=True
200        }
201    }
202}
203
204post-destroot {
205    xinstall -d -m 755 ${destroot}${prefix}/share/doc/${name}
206    eval xinstall -m 640 [glob ${worksrcpath}/docs/*] \
207        ${destroot}${prefix}/share/doc/${name}
208    xinstall -m 644 -W ${worksrcpath} AUTHORS.md CHANGELOG COPYING README.md \
209        ${destroot}${prefix}/share/doc/${name}
210    xinstall -d -m 755 ${destroot}${prefix}/share/${name}
211    copy ${worksrcpath}/demo ${destroot}${prefix}/share/${name}
212}