source: trunk/dports/aqua/qt5-mac/Portfile @ 139229

Last change on this file since 139229 was 139229, checked in by jeremyhu@…, 4 years ago

misc: Change port:openssl dependency to path:lib/libssl.dylib:openssl

This should allow usage of libressl as a replacement for openssl in relevant
ports. Not all ports have been tested, but libressl aims for API
compatibility with OpenSSL, so it is expected to work.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 18.3 KB
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: Portfile 139229 2015-08-08 03:10:35Z jeremyhu@macports.org $
3
4PortSystem          1.0
5
6name                qt5-mac
7version             5.4.2
8revision            1
9set branch          [join [lrange [split ${version} .] 0 1] .]
10
11categories          aqua
12platforms           macosx
13maintainers         mcalhoun openmaintainer
14license             {LGPL-2.1 GPL-3}
15
16homepage            http://qt.io
17description         Qt Tool Kit ${branch}
18long_description    Qt Tool Kit: A cross-platform framework \
19    (headers, data, and libraries) for writing \
20    cross-platform GUI-based applications.
21
22distname            qt-everywhere-opensource-src-${version}
23
24master_sites        http://download.qt.io/official_releases/qt/${branch}/${version}/single/
25
26checksums           rmd160  3382c482a99e114560f56a9fe9501b8cabf334a9 \
27                    sha256  cfc768c55f0a0cd232bed914a9022528f8f2e50cb010bf0e4f3f62db3dfa17bd
28
29if { ${os.major} < 11 } {
30    pre-fetch {
31        ui_error "OS X prior to 10.8 (Mountain Lion) is not a Reference Configuration for Qt."
32        ui_error "OS X prior to 10.7 (Lion) is not even tested."
33        ui_error "See http://doc.qt.io/qt-5/supported-platforms.html#reference-configurations"
34        return -code error "unsupported OS"
35    }
36} elseif { ${os.major} > 14 } {
37    pre-fetch {
38        ui_warn "OS X subsequent to 10.10 (Yosemite) is not a Reference Configuration for Qt."
39        ui_warn "See http://doc.qt.io/qt-5/supported-platforms.html#reference-configurations"
40    }
41} else {
42    # 11 <= ${os.major} <= 14
43    if { [variant_isset universal] } {
44        pre-fetch {
45            ui_warn "Multiple architectures is not a Reference Configuration for Qt."
46            ui_warn "See http://doc.qt.io/qt-5/supported-platforms.html#reference-configurations"
47        }
48    } else {
49        if { ${build_arch} eq "i386" } {
50            pre-fetch {
51                ui_warn "32-bit mode is not a Reference Configuration for Qt."
52                ui_warn "See http://doc.qt.io/qt-5/supported-platforms.html#reference-configurations"
53            }
54        }
55    }
56}
57
58if { ${subport} eq "${name}-docs"  } {
59    universal_variant no
60}
61
62if { ${subport} eq ${name} || ${subport} eq "${name}-docs" } {
63    # use the qt5 group; set 'building_qt5' so that the portgroup
64    # does not include certain parts
65    set building_qt5    1
66    PortGroup           conflicts_build 1.0
67    PortGroup           qt5 1.0
68    PortGroup           xcodeversion 1.0
69
70    conflicts           qt3 qt3-mac qt4-mac
71
72    minimum_xcodeversions   {11 4.1}
73
74    # See https://bugreports.qt.io/browse/QTBUG-34902
75    conflicts_build-append  qt4-mac
76
77    # Kuba states in https://trac.macports.org/ticket/44207#comment:7
78    #  "There's no reason to have parallel building disabled. Really."
79    #use_parallel_build no
80
81    # qtwebengine/src/core/gyp_run.pro buils an executable using g++
82    # This causes an error if UsingTheRightCompiler (https://trac.macports.org/wiki/UsingTheRightCompiler)
83    # Quick fix is to use full path to g++ (should use ${configure.cxx} instead?)
84    # N.B. that the python executable is found from the configuration environment
85    #patchfiles-append patch-ninja-compiler.diff
86
87    #needed? qtwebengine/src/3rdparty/chromium/build/gyp_helper.py
88
89    # qtwebengine/src/core/gyp_run.pro
90    #    calls
91    #   qtwebengine/tools/buildscripts/gyp_qtwebengine
92    # gyp_qtwebengine insists on x64 and libcpp ?
93
94    # qtwebengine/src/3rdparty/ninja/bootstrap.py calls g++ (must set CXX)
95
96    if { [variant_isset tests] } {
97        # header file QtCore/private/qmachparser_p.h is included only if "defined(QT_BUILD_INTERNAL) && defined(Q_OF_MACH_O)"
98        #     code from header is used only "ifdef Q_OF_MACH_O"
99        #     the two must be consistent
100        #     assume the header include code is correct
101        patchfiles-append patch-tst_qpluginloader.diff
102
103        # see http://stackoverflow.com/questions/14506151/invalid-symbol-redefinition-in-inline-asm-on-llvm
104        patchfiles-append patch-tst_benchlibcallgrind.diff
105
106        # When testing, ensure that a universal object file is not inadvertently created.
107        patchfiles-append patch-machtest.diff
108
109        # On testing of 32-bit systems,
110        #  Pre-patch: QCOMPARE(unsigned long const&, unsigned int const&
111        # Post-patch: QCOMPARE(unsigned int  const&, unsigned int const&
112        # Function template is only instantiated for same first and second arguments.
113        patchfiles-append patch-tst_qarraydata.diff
114
115        # During testing, NSStringFromRect requires NSRect.
116        patchfiles-append patch-tst_qaccessibilitymac_helpers.diff
117    }
118
119    # see #44934 (and #35067 for the qt4-mac version)
120    if { true } {
121        set framework_list [split ${qt_frameworks_dir} '/']
122        set qt_list        [split ${qt_dir} '/']
123
124        while {[llength ${qt_list}] && [llength ${framework_list}]} {
125            set var_qt        [lindex $qt_list        0]
126            set var_framework [lindex $framework_list 0]
127
128            if { ${var_qt} ne ${var_framework} } {
129                break
130            }
131
132            # remove first element from list
133            set qt_list        [lreplace ${qt_list}        0 0]
134            set framework_list [lreplace ${framework_list} 0 0]
135        }
136        set libreplace [string repeat ../ [llength ${qt_list}]][join ${framework_list} /]
137        if { ${libreplace} ne "lib" } {
138            patchfiles-append patch-shared.diff
139            post-patch {
140                reinplace "s|__MACPORTS_FRAMWORK_DIR__|${libreplace}|g" ${worksrcpath}/qttools/src/macdeployqt/shared/shared.cpp
141            }
142        }
143    }
144
145    # --prefix is not recognized.
146    configure.pre_args-delete       --prefix=${prefix}
147
148    # --disable-dependency-tracking is not recognized.
149    configure.universal_args-delete --disable-dependency-tracking
150
151    # Installation options:
152    #-extprefix     SYSROOT/PREFIX
153    #-hostprefix    EXTPREFIX
154    #-libexecdir    ARCHDATADIR/libexec
155    #-hostbindir    HOSTPREFIX/bin
156    #-hostlibdir    HOSTPREFIX/lib
157    configure.args-append                      \
158        -prefix         ${qt_dir}              \
159        -bindir         ${qt_bins_dir}         \
160        -headerdir      ${qt_includes_dir}     \
161        -libdir         ${qt_libs_dir}         \
162        -archdatadir    ${qt_archdata_dir}     \
163        -plugindir      ${qt_plugins_dir}      \
164        -importdir      ${qt_imports_dir}      \
165        -qmldir         ${qt_qml_dir}          \
166        -datadir        ${qt_data_dir}         \
167        -docdir         ${qt_docs_dir}         \
168        -translationdir ${qt_translations_dir} \
169        -sysconfdir     ${qt_sysconf_dir}      \
170        -examplesdir    ${qt_examples_dir}     \
171        -testsdir       ${qt_tests_dir}        \
172        -hostdatadir    ${qt_host_data_dir}
173
174    # Configure options:
175    configure.args-append \
176        -release          \
177        -opensource       \
178        -confirm-license  \
179        -shared           \
180        -largefile        \
181        -accessibility
182   
183    foreach driver { db2 ibase mysql oci odbc psql sqlite sqlite2 tds } {
184        configure.args-append -no-sql-${driver}
185    }
186
187    if { ![variant_isset universal] } {
188        configure.args-append "-platform ${qt_qmake_spec}"
189    } else {
190        set merger_configure_args(i386)   "-platform ${qt_qmake_spec_32}"
191        set merger_configure_args(x86_64) "-platform ${qt_qmake_spec_64}"
192    }
193
194    configure.args-append \
195        -force-pkg-config
196
197    # Third Party Libraries:
198    configure.args-append   \
199        -system-zlib        \
200        -no-mtdev           \
201        -no-journald        \
202        -system-libpng      \
203        -system-libjpeg     \
204        -system-freetype    \
205        -system-harfbuzz    \
206        -openssl-linked     \
207        -system-pcre        \
208        --disable-xcb       \
209        --disable-xkbcommon \
210        -no-xinput2         \
211        -no-xcb-xlib        \
212        -glib               \
213        -no-pulseaudio      \
214        -no-alsa            \
215        -no-gtkstyle
216
217    # Additional options:
218    configure.args-append       \
219        {-make libs}            \
220        {-make tools}           \
221        {-nomake examples}      \
222        {-nomake tests}         \
223        -gui                    \
224        -widgets                \
225        -rpath                  \
226        -verbose                \
227        -no-optimized-qmake     \
228        -nis                    \
229        -cups                   \
230        -iconv                  \
231        -no-evdev               \
232        -icu                    \
233        -fontconfig             \
234        -strip                  \
235        -no-pch                 \
236        -dbus-linked            \
237        -no-use-gold-linker     \
238        -no-separate-debug-info \
239        -no-xcb                 \
240        -no-eglfs               \
241        -no-directfb            \
242        -no-linuxfb             \
243        -no-kms                 \
244        -no-system-proxies
245   
246    # MacOS/iOS options:
247    configure.args-append    \
248        -framework
249
250    if {${configure.sdkroot} ne ""} {
251        configure.args-append \
252            -sdk [string tolower [join [lrange [split [lindex [split ${configure.sdkroot} "/"] end] "."] 0 end-1] "."]]
253    }
254   
255    # configure options that don't show up in configure --help
256    configure.args-append \
257        -no-libudev       \
258        -no-egl           \
259        -no-openvg
260
261    # Qt builds part of the system using environment provided my MacPorts.
262    # It builds the rest using its own internal environment.
263    # For consistency, clear MacPorts environment.
264    configure.cxx_stdlib
265    configure.sdkroot
266    configure.cc_archflags
267    configure.cxx_archflags
268    configure.objc_archflags
269    configure.objcxx_archflags
270    configure.ld_archflags
271    configure.cppflags
272    configure.cflags
273    configure.cxxflags
274    configure.objcflags
275    configure.objcxxflags
276    configure.ldflags
277    configure.pipe  no
278    if { [variant_isset universal] } {
279        set merger_arch_flag no
280    }
281    configure.march
282    configure.mtune
283    configure.universal_ldflags
284    configure.universal_cflags
285    configure.universal_cxxflags
286    configure.universal_cppflags
287}
288
289if { ${subport} eq ${name} } {
290    depends_lib                              \
291        port:zlib                            \
292        port:libpng                          \
293        port:jpeg                            \
294        port:freetype                        \
295        path:bin/dbus-daemon:dbus            \
296        path:lib/libssl.dylib:openssl                         \
297        port:tiff                            \
298        port:libmng                          \
299        path:lib/pkgconfig/glib-2.0.pc:glib2 \
300        port:icu                             \
301        port:pcre                            \
302        port:libiconv                        \
303        port:harfbuzz
304
305    # see https://bugreports.qt.io/browse/QTBUG-35514
306    build.target
307
308    if { [variant_isset universal] } {
309        merger-post-destroot {
310            foreach arch ${universal_archs_to_use} {
311                set dir ${destroot}-${arch}
312
313                # Libs.private contains the value of ${worksrcpath}-${arch}, which prevents merging
314                reinplace "s|${worksrcpath}-${arch}|${worksrcpath}|g" ${dir}${qt_libs_dir}/pkgconfig/Qt5WebKit.pc
315
316                foreach prlfl [glob ${dir}${qt_libs_dir}/*.framework/*.prl] {
317                    reinplace "s|${worksrcpath}-${arch}|${worksrcpath}|g" ${prlfl}
318                }
319
320                foreach prlfl [glob ${dir}${qt_libs_dir}/*.prl] {
321                    reinplace "s|${worksrcpath}-${arch}|${worksrcpath}|g" ${prlfl}
322                }
323
324                reinplace "s|${worksrcpath}-${arch}|${worksrcpath}|g" ${dir}${qt_mkspecs_dir}/modules/qt_lib_bootstrap_private.pri
325                reinplace "s|macx-clang-32|macx-clang|g"              ${dir}${qt_libs_dir}/cmake/Qt5Core/Qt5CoreConfigExtrasMkspecDir.cmake
326               
327               
328                if { [variant_isset examples] } {
329                    reinplace "s|${worksrcpath}-${arch}|${worksrcpath}|g" ${dir}${qt_examples_dir}/declarative/tutorials/gettingStarted/parts/part5/filedialog/Makefile
330                    reinplace -E "/\\w*-arch \\\\/d"                      ${dir}${qt_examples_dir}/declarative/tutorials/gettingStarted/parts/part5/filedialog/Makefile
331                    reinplace -E "/\\w*${arch} \\\\/d"                    ${dir}${qt_examples_dir}/declarative/tutorials/gettingStarted/parts/part5/filedialog/Makefile
332                    reinplace -E {s:-arch +[^ ]+::g}                      ${dir}${qt_examples_dir}/declarative/tutorials/gettingStarted/parts/part5/filedialog/Makefile
333                    reinplace "s|macx-clang-32|macx-clang|g"              ${dir}${qt_examples_dir}/declarative/tutorials/gettingStarted/parts/part5/filedialog/Makefile
334
335                    reinplace "s|${worksrcpath}-${arch}|${worksrcpath}|g" ${dir}${qt_examples_dir}/multimedia/spectrum/fftreal.framework/fftreal.prl
336                    reinplace "s|${worksrcpath}-${arch}|${worksrcpath}|g" ${dir}${qt_examples_dir}/multimedia/spectrum/spectrum.app/Contents/Frameworks/fftreal.framework/fftreal.prl
337                    reinplace "s|${worksrcpath}-${arch}|${worksrcpath}|g" ${dir}${qt_examples_dir}/sensors/grue/libgruesensor.prl
338                    reinplace "s|${worksrcpath}-${arch}|${worksrcpath}|g" ${dir}${qt_examples_dir}/declarative/tutorials/gettingStarted/parts/part5/filedialog/Makefile
339                    if { [variant_isset debug] } {
340                        reinplace "s|${worksrcpath}-${arch}|${worksrcpath}|g" ${dir}${qt_examples_dir}/widgets/tools/plugandpaint/plugins/libpnp_basictools_debug.prl
341                    }
342                }
343            }
344        }
345
346        post-destroot {
347            # delete preprocessor comments surrounding QT_CPU_FEATURES.i386 and QT_CPU_FEATURES.x86_64
348            reinplace "/^#ifndef.*$/d" ${destroot}${qt_mkspecs_dir}/qmodule.pri
349            reinplace "/^#else.*$/d"   ${destroot}${qt_mkspecs_dir}/qmodule.pri
350            reinplace "/^#endif.*$/d"  ${destroot}${qt_mkspecs_dir}/qmodule.pri
351        }
352
353        # The file ${prefix}/share/qt5/mkspecs/qconfig.pri is still not properly merged
354        # The solution is ???.
355    }
356
357    post-destroot {
358        # see #44204
359        foreach f [glob -nocomplain -tails -directory ${destroot}${qt_libs_dir} *.framework] {
360            set framework [file rootname ${f}]
361
362            set include_list   [split ${qt_includes_dir}   '/']
363            set framework_list [split ${qt_libs_dir} '/']
364
365            while {[llength ${include_list}] && [llength ${framework_list}]} {
366                set var_include   [lindex $include_list   0]
367                set var_framework [lindex $framework_list 0]
368
369                if { ${var_include} ne ${var_framework} } {
370                    break
371                }
372
373                # remove first element from list
374                set include_list   [lreplace ${include_list} 0 0]
375                set framework_list [lreplace ${framework_list} 0 0]
376            }
377
378            ln -s [string repeat ../ [llength ${include_list}]][join ${framework_list} /]/${f}/Headers ${destroot}${qt_includes_dir}/${framework}
379        }
380    }
381
382    variant tests description {Enable tests} {
383        configure.args-replace {-nomake tests} {-make tests}
384    }
385
386    variant examples description {Build examples} {
387        configure.args-replace {-nomake examples} {-make examples}
388    }
389
390    variant debug description {Build both release and debug library} {
391        configure.args-replace -release -debug-and-release
392    }
393
394    variant pulseaudio description {Compile PulseAudio support} {
395        depends_lib-append port:pulseaudio
396        configure.args-replace -no-pulseaudio -pulseaudio
397    }
398}
399
400subport ${name}-docs {
401    depends_lib-append \
402        path:${qt_bins_dir}/qdoc:${name} \
403        path:${qt_plugins_dir}/sqldrivers/libqsqlite.dylib:${name}-sqlite3-plugin
404
405    supported_archs   noarch
406
407    build.target      docs
408    destroot.target   install_docs
409
410    post-extract {
411        # For the most part, generated makefiles use ${prefix}/bin/qdoc.
412        ln -s ${qt_bins_dir}/qdoc ${worksrcpath}/qtbase/bin
413
414        # Similarly, location of qhelpgenerator is expected in ${worksrcpath}
415        xinstall -d -m 755 ${worksrcpath}/qttools/bin/
416        ln -s ${qt_bins_dir}/qhelpgenerator ${worksrcpath}/qttools/bin/
417
418        # Without this file, the makefile ${worksrcpath}/qtwebkit/Source/WebCore/Makefile.WebCore.Target
419        #    keeps generating itself over and over again.
420        # This file is only created when the library is being built, however.
421        xinstall -d -m 755 ${worksrcpath}/qtwebkit/Source/WebCore/generated
422        touch ${worksrcpath}/qtwebkit/Source/WebCore/generated/InspectorBackendCommands.qrc
423    }
424}
425
426# See http://doc.qt.io/qt-5/sql-driver.html for info on building SQL Database Drivers
427
428subport ${name}-sqlite3-plugin {
429    PortGroup           qmake5 1.0
430
431    depends_lib-append port:sqlite3
432
433    # for single architecture, easier to use
434    #    worksrcdir ${worksrcdir}/qtbase/src/plugins/sqldrivers/sqlite,
435    #    but doesn't work for universal build
436    configure.dir ${worksrcpath}/qtbase/src/plugins/sqldrivers/sqlite
437    build.dir     ${configure.dir}
438    destroot.dir  ${configure.dir}
439
440    configure.args-append "INCLUDEPATH+=${prefix}/include" "LIBS+=\"-L${prefix}/lib -lsqlite3\""
441}
442
443subport ${name}-psql84-plugin {
444    PortGroup           qmake5 1.0
445
446    depends_lib-append port:postgresql84
447
448    # for single architecture, easier to use
449    #    worksrcdir ${worksrcdir}/qtbase/src/plugins/sqldrivers/psql,
450    #    but doesn't work for universal build
451    configure.dir ${worksrcpath}/qtbase/src/plugins/sqldrivers/psql
452    build.dir     ${configure.dir}
453    destroot.dir  ${configure.dir}
454
455    configure.args-append "INCLUDEPATH+=${prefix}/include/postgresql84" "LIBS+=\"-L${prefix}/lib/postgresql84 -lpq\""
456}
457
458subport ${name}-mysql56-plugin {
459    PortGroup           qmake5 1.0
460
461    depends_lib-append port:mysql56
462
463    # for single architecture, easier to use
464    #    worksrcdir ${worksrcdir}/qtbase/src/plugins/sqldrivers/mysql,
465    #    but doesn't work for universal build
466    configure.dir ${worksrcpath}/qtbase/src/plugins/sqldrivers/mysql
467    build.dir     ${configure.dir}
468    destroot.dir  ${configure.dir}
469
470    configure.args-append "INCLUDEPATH+=${prefix}/include/mysql56/mysql" "LIBS+=\"-L${prefix}/lib/mysql56/mysql -lmysqlclient_r\""
471}
472
473livecheck.type      regex
474livecheck.url       http://download.qt.io/archive/qt/${branch}/
475livecheck.regex     (\\d+(\\.\\d+)+)
Note: See TracBrowser for help on using the repository browser.