source: trunk/base/src/port1.0/portconfigure.tcl @ 86210

Last change on this file since 86210 was 86210, checked in by ryandesign@…, 6 years ago

portconfigure.tcl: remove apple-gcc-3.3 compiler option; the apple-gcc33 port was deleted in r83470

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 28.5 KB
Line 
1# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:filetype=tcl:et:sw=4:ts=4:sts=4
2# portconfigure.tcl
3# $Id: portconfigure.tcl 86210 2011-10-21 22:05:02Z ryandesign@macports.org $
4#
5# Copyright (c) 2007 - 2011 The MacPorts Project
6# Copyright (c) 2007 Markus W. Weissmann <mww@macports.org>
7# Copyright (c) 2002 - 2003 Apple Inc.
8# All rights reserved.
9#
10# Redistribution and use in source and binary forms, with or without
11# modification, are permitted provided that the following conditions
12# are met:
13# 1. Redistributions of source code must retain the above copyright
14#    notice, this list of conditions and the following disclaimer.
15# 2. Redistributions in binary form must reproduce the above copyright
16#    notice, this list of conditions and the following disclaimer in the
17#    documentation and/or other materials provided with the distribution.
18# 3. Neither the name of Apple Inc. nor the names of its contributors
19#    may be used to endorse or promote products derived from this software
20#    without specific prior written permission.
21#
22# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
23# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
26# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
27# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
28# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
29# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
30# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
31# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32# POSSIBILITY OF SUCH DAMAGE.
33#
34
35package provide portconfigure 1.0
36package require portutil 1.0
37
38set org.macports.configure [target_new org.macports.configure portconfigure::configure_main]
39target_provides ${org.macports.configure} configure
40target_requires ${org.macports.configure} main fetch checksum extract patch
41target_prerun ${org.macports.configure} portconfigure::configure_start
42
43namespace eval portconfigure {
44}
45
46# define options
47commands configure autoreconf automake autoconf xmkmf
48# defaults
49default configure.env       ""
50default configure.pre_args  {--prefix=${prefix}}
51default configure.cmd       ./configure
52default configure.nice      {${buildnicevalue}}
53default configure.dir       {${worksrcpath}}
54default autoreconf.dir      {${worksrcpath}}
55default autoreconf.pre_args {--install}
56default autoconf.dir        {${worksrcpath}}
57default automake.dir        {${worksrcpath}}
58default xmkmf.cmd           xmkmf
59default xmkmf.dir           {${worksrcpath}}
60default use_configure       yes
61
62option_proc use_autoreconf  portconfigure::set_configure_type
63option_proc use_automake    portconfigure::set_configure_type
64option_proc use_autoconf    portconfigure::set_configure_type
65option_proc use_xmkmf       portconfigure::set_configure_type
66
67option_proc autoreconf.cmd  portconfigure::set_configure_type
68option_proc automake.cmd    portconfigure::set_configure_type
69option_proc autoconf.cmd    portconfigure::set_configure_type
70option_proc xmkmf.cmd       portconfigure::set_configure_type
71
72##
73# Local helper proc
74proc portconfigure::add_build_dep { type dep } {
75    global ${type}.cmd option_defaults
76
77    if {![info exists ${type}.cmd] || (
78        ([info exists option_defaults(${type}.cmd)] && [set ${type}.cmd] == $option_defaults(${type}.cmd)) ||
79        (![info exists option_defaults(${type}.cmd)] && [set ${type}.cmd] == "${type}")
80        )} {
81            eval depends_build-append $dep
82    }
83}
84
85##
86# Adds dependencies for the binaries which will be called, but only if it is
87# the default. If .cmd was overwritten the port has to care for deps itself.
88proc portconfigure::set_configure_type {option action args} {
89    global autoreconf.cmd automake.cmd autoconf.cmd xmkmf.cmd
90
91    array set configure_map {
92        autoconf    {port:autoconf port:automake port:libtool}
93        xmkmf       port:imake
94    }
95
96    if {[string equal ${action} "set"]} {
97        switch $option {
98            autoreconf.cmd  -
99            automake.cmd    -
100            autoconf.cmd {
101                eval depends_build-delete $configure_map(autoconf)
102            }
103            xmkmf.cmd {
104                depends_build-delete $configure_map(xmkmf)
105            }
106            use_xmkmf {
107                if {[tbool args]} {
108                    depends_build-append $configure_map(xmkmf)
109                }
110            }
111            default {
112                # strip "use_"
113                set type [string range $option 4 end]
114                if {[tbool args]} {
115                    add_build_dep $type $configure_map(autoconf)
116                }
117            }
118        }
119    }
120}
121
122options configure.asroot
123default configure.asroot no
124
125# Configure special environment variables.
126# We could have m32/m64/march/mtune be global configurable at some point.
127options configure.m32 configure.m64 configure.march configure.mtune
128default configure.march     {}
129default configure.mtune     {}
130# We could have debug/optimizations be global configurable at some point.
131options configure.optflags configure.cflags configure.cppflags configure.cxxflags configure.objcflags configure.ldflags configure.libs configure.fflags configure.f90flags configure.fcflags configure.classpath
132default configure.optflags  {-O2}
133# compiler flags section
134default configure.cflags    {${configure.optflags}}
135default configure.cppflags  {-I${prefix}/include}
136default configure.cxxflags  {${configure.optflags}}
137default configure.objcflags {${configure.optflags}}
138default configure.ldflags   {-L${prefix}/lib}
139default configure.libs      {}
140default configure.fflags    {${configure.optflags}}
141default configure.f90flags  {${configure.optflags}}
142default configure.fcflags   {${configure.optflags}}
143default configure.classpath {}
144
145# tools section
146options configure.perl configure.python configure.ruby configure.install configure.awk configure.bison configure.pkg_config configure.pkg_config_path
147default configure.perl              {}
148default configure.python            {}
149default configure.ruby              {}
150default configure.install           {${portutil::autoconf::install_command}}
151default configure.awk               {}
152default configure.bison             {}
153default configure.pkg_config        {}
154default configure.pkg_config_path   {}
155
156options configure.build_arch configure.ld_archflags configure.sdkroot
157default configure.build_arch {[portconfigure::choose_supported_archs ${build_arch}]}
158default configure.ld_archflags {[portconfigure::configure_get_ld_archflags]}
159default configure.sdkroot {[portconfigure::configure_get_sdkroot]}
160foreach tool {cc cxx objc f77 f90 fc} {
161    options configure.${tool}_archflags
162    default configure.${tool}_archflags  "\[portconfigure::configure_get_archflags $tool\]"
163}
164
165options configure.universal_archs configure.universal_args configure.universal_cflags configure.universal_cppflags configure.universal_cxxflags configure.universal_ldflags
166default configure.universal_archs       {[portconfigure::choose_supported_archs ${universal_archs}]}
167default configure.universal_args        {--disable-dependency-tracking}
168default configure.universal_cflags      {[portconfigure::configure_get_universal_cflags]}
169default configure.universal_cppflags    {}
170default configure.universal_cxxflags    {[portconfigure::configure_get_universal_cflags]}
171default configure.universal_ldflags     {[portconfigure::configure_get_universal_ldflags]}
172
173# Select a distinct compiler (C, C preprocessor, C++)
174options configure.ccache configure.distcc configure.pipe configure.cc configure.cxx configure.cpp configure.objc configure.f77 configure.f90 configure.fc configure.javac configure.compiler
175default configure.ccache        {${configureccache}}
176default configure.distcc        {${configuredistcc}}
177default configure.pipe          {${configurepipe}}
178default configure.cc            {[portconfigure::configure_get_compiler cc]}
179default configure.cxx           {[portconfigure::configure_get_compiler cxx]}
180default configure.cpp           {[portconfigure::configure_get_compiler cpp]}
181default configure.objc          {[portconfigure::configure_get_compiler objc]}
182default configure.f77           {[portconfigure::configure_get_compiler f77]}
183default configure.f90           {[portconfigure::configure_get_compiler f90]}
184default configure.fc            {[portconfigure::configure_get_compiler fc]}
185default configure.javac         {[portconfigure::configure_get_compiler javac]}
186default configure.compiler      {[portconfigure::configure_get_default_compiler]}
187
188set_ui_prefix
189
190proc portconfigure::configure_start {args} {
191    global UI_PREFIX configure.compiler
192   
193    ui_notice "$UI_PREFIX [format [msgcat::mc "Configuring %s"] [option subport]]"
194
195    set name ""
196    switch -exact ${configure.compiler} {
197        cc { set name "System cc" }
198        gcc { set name "System gcc" }
199        gcc-3.3 { set name "Mac OS X gcc 3.3" }
200        gcc-4.0 { set name "Mac OS X gcc 4.0" }
201        gcc-4.2 { set name "Mac OS X gcc 4.2" }
202        llvm-gcc-4.2 { set name "Mac OS X llvm-gcc 4.2" }
203        clang { set name "Mac OS X clang" }
204        apple-gcc-4.0 { set name "MacPorts Apple gcc 4.0" }
205        apple-gcc-4.2 { set name "MacPorts Apple gcc 4.2" }
206        macports-gcc-4.0 { set name "MacPorts gcc 4.0" }
207        macports-gcc-4.1 { set name "MacPorts gcc 4.1" }
208        macports-gcc-4.2 { set name "MacPorts gcc 4.2" }
209        macports-gcc-4.3 { set name "MacPorts gcc 4.3" }
210        macports-gcc-4.4 { set name "MacPorts gcc 4.4" }
211        macports-gcc-4.5 { set name "MacPorts gcc 4.5" }
212        macports-gcc-4.6 { set name "MacPorts gcc 4.6" }
213        macports-llvm-gcc-4.2 { set name "MacPorts llvm-gcc 4.2" }
214        macports-clang { set name "MacPorts clang" }
215        default { return -code error "Invalid value for configure.compiler" }
216    }
217    ui_debug "Using compiler '$name'"
218
219    # Additional ccache directory setup
220    global configureccache ccache_dir ccache_size macportsuser
221    if {${configureccache}} {
222        elevateToRoot "configure ccache"
223        if [catch {
224                file mkdir ${ccache_dir}
225                file attributes ${ccache_dir} -owner ${macportsuser} -permissions 0755
226                exec ccache -M ${ccache_size} >/dev/null
227            } result] {
228            ui_warn "ccache_dir ${ccache_dir} could not be initialized; disabling ccache: $result"
229            set configureccache no
230        }
231        dropPrivileges
232    }
233}
234
235# internal function to choose the default configure.build_arch and
236# configure.universal_archs based on supported_archs and build_arch or
237# universal_archs
238proc portconfigure::choose_supported_archs {archs} {
239    global supported_archs
240    if {$supported_archs == ""} {
241        return $archs
242    }
243    set ret {}
244    foreach arch $archs {
245        if {[lsearch -exact $supported_archs $arch] != -1} {
246            set add_arch $arch
247        } elseif {$arch == "x86_64" && [lsearch -exact $supported_archs "i386"] != -1} {
248            set add_arch "i386"
249        } elseif {$arch == "ppc64" && [lsearch -exact $supported_archs "ppc"] != -1} {
250            set add_arch "ppc"
251        } else {
252            continue
253        }
254        if {[lsearch -exact $ret $add_arch] == -1} {
255            lappend ret $add_arch
256        }
257    }
258    return $ret
259}
260
261# internal function to determine the compiler flags to select an arch
262proc portconfigure::configure_get_archflags {tool} {
263    global configure.build_arch configure.m32 configure.m64 configure.compiler
264    set flags ""
265    if {[tbool configure.m64]} {
266        set flags "-m64"
267    } elseif {[tbool configure.m32]} {
268        set flags "-m32"
269    } elseif {${configure.build_arch} != ""} {
270        if {[arch_flag_supported] && ($tool == "cc" || $tool == "cxx" || $tool == "objc")} {
271            set flags "-arch ${configure.build_arch}"
272        } elseif {${configure.build_arch} == "x86_64" || ${configure.build_arch} == "ppc64"} {
273            set flags "-m64"
274        } elseif {${configure.compiler} != "gcc-3.3"} {
275            set flags "-m32"
276        }
277    }
278    return $flags
279}
280
281# internal function to determine the ld flags to select an arch
282# Unfortunately there's no consistent way to do this when the compiler
283# doesn't support -arch, because it could be used to link rather than using
284# ld directly. So we punt and let portfiles deal with that case.
285proc portconfigure::configure_get_ld_archflags {args} {
286    global configure.build_arch
287    if {${configure.build_arch} != "" && [arch_flag_supported]} {
288        return "-arch ${configure.build_arch}"
289    } else {
290        return ""
291    }
292}
293
294proc portconfigure::configure_get_sdkroot {} {
295    global developer_dir macosx_deployment_target macosx_version os.arch os.platform
296    if {${os.platform} == "darwin" && ($macosx_deployment_target != $macosx_version
297        || (${os.arch} == "powerpc" && $macosx_version == "10.4" && [variant_exists universal] && [variant_isset universal]))} {
298        if {$macosx_deployment_target == "10.4"} {
299            set sdk "${developer_dir}/SDKs/MacOSX10.4u.sdk"
300        } else {
301            set sdk "${developer_dir}/SDKs/MacOSX${macosx_deployment_target}.sdk"
302        }
303        if {[file exists $sdk]} {
304            return $sdk
305        }
306    }
307    return ""
308}
309
310# internal function to determine the "-arch xy" flags for the compiler
311proc portconfigure::configure_get_universal_archflags {args} {
312    global configure.universal_archs
313    set flags ""
314    foreach arch ${configure.universal_archs} {
315        if {$flags == ""} {
316            set flags "-arch $arch"
317        } else {
318            append flags " -arch $arch"
319        }
320    }
321    return $flags
322}
323
324# internal function to determine the CFLAGS for the compiler
325proc portconfigure::configure_get_universal_cflags {args} {
326    return [configure_get_universal_archflags]
327}
328
329# internal function to determine the LDFLAGS for the compiler
330proc portconfigure::configure_get_universal_ldflags {args} {
331    return [configure_get_universal_archflags]
332}
333
334# internal proc to determine if the compiler supports -arch
335proc portconfigure::arch_flag_supported {args} {
336    global configure.compiler
337    switch -exact ${configure.compiler} {
338        gcc-4.0 -
339        gcc-4.2 -
340        llvm-gcc-4.2 -
341        clang -
342        apple-gcc-4.0 -
343        apple-gcc-4.2 -
344        macports-clang {
345            return yes
346        }
347        default {
348            return no
349        }
350    }
351}
352
353# internal function to determine the default compiler
354proc portconfigure::configure_get_default_compiler {args} {
355    global xcodeversion macosx_deployment_target
356    if {$xcodeversion == "none" || $xcodeversion == ""} {
357        return cc
358    } elseif {[vercmp $xcodeversion 4.2] >= 0} {
359        return clang
360    } elseif {[vercmp $xcodeversion 4.0] >= 0} {
361        return llvm-gcc-4.2
362    } elseif {[vercmp $xcodeversion 3.2] >= 0 && $macosx_deployment_target != "10.4"} {
363        return gcc-4.2
364    } else {
365        return gcc-4.0
366    }
367}
368
369# internal function to find correct compilers
370proc portconfigure::configure_get_compiler {type} {
371    global configure.compiler prefix developer_dir
372    set ret ""
373    switch -exact ${configure.compiler} {
374        cc {
375            switch -exact ${type} {
376                cc   { set ret /usr/bin/cc }
377                objc { set ret /usr/bin/cc }
378                cxx  { set ret /usr/bin/c++ }
379                cpp  { set ret /usr/bin/cpp }
380            }
381        }
382        gcc {
383            switch -exact ${type} {
384                cc   { set ret /usr/bin/gcc }
385                objc { set ret /usr/bin/gcc }
386                cxx  { set ret /usr/bin/g++ }
387                cpp  { set ret /usr/bin/cpp }
388            }
389        }
390        gcc-3.3 {
391            switch -exact ${type} {
392                cc   { set ret /usr/bin/gcc-3.3 }
393                objc { set ret /usr/bin/gcc-3.3 }
394                cxx  { set ret /usr/bin/g++-3.3 }
395                cpp  { set ret /usr/bin/cpp-3.3 }
396            }
397        }
398        gcc-4.0 {
399            switch -exact ${type} {
400                cc   { set ret /usr/bin/gcc-4.0 }
401                objc { set ret /usr/bin/gcc-4.0 }
402                cxx  { set ret /usr/bin/g++-4.0 }
403                cpp  { set ret /usr/bin/cpp-4.0 }
404            }
405        }
406        gcc-4.2 {
407            switch -exact ${type} {
408                cc   { set ret /usr/bin/gcc-4.2 }
409                objc { set ret /usr/bin/gcc-4.2 }
410                cxx  { set ret /usr/bin/g++-4.2 }
411                cpp  { set ret /usr/bin/cpp-4.2 }
412            }
413        }
414        llvm-gcc-4.2 {
415            switch -exact ${type} {
416                cc   { set ret ${developer_dir}/usr/bin/llvm-gcc-4.2 }
417                objc { set ret ${developer_dir}/usr/bin/llvm-gcc-4.2 }
418                cxx  { set ret ${developer_dir}/usr/bin/llvm-g++-4.2 }
419                cpp  { set ret ${developer_dir}/usr/bin/llvm-cpp-4.2 }
420            }
421        }
422        clang {
423            switch -exact ${type} {
424                cc   { set ret ${developer_dir}/usr/bin/clang }
425                objc { set ret ${developer_dir}/usr/bin/clang }
426                cxx  {
427                    if {[file executable ${developer_dir}/usr/bin/clang++]} {
428                        set ret ${developer_dir}/usr/bin/clang++
429                    } else {
430                        set ret ${developer_dir}/usr/bin/llvm-g++-4.2
431                    }
432                }
433            }
434        }
435        apple-gcc-4.0 {
436            switch -exact ${type} {
437                cc   { set ret ${prefix}/bin/gcc-apple-4.0 }
438                objc { set ret ${prefix}/bin/gcc-apple-4.0 }
439                cpp  { set ret ${prefix}/bin/cpp-apple-4.0 }
440            }
441        }
442        apple-gcc-4.2 {
443            switch -exact ${type} {
444                cc   { set ret ${prefix}/bin/gcc-apple-4.2 }
445                objc { set ret ${prefix}/bin/gcc-apple-4.2 }
446                cpp  { set ret ${prefix}/bin/cpp-apple-4.2 }
447                cxx  { set ret ${prefix}/bin/g++-apple-4.2 }
448            }
449        }
450        macports-gcc-4.0 {
451            switch -exact ${type} {
452                cc   { set ret ${prefix}/bin/gcc-mp-4.0 }
453                objc { set ret ${prefix}/bin/gcc-mp-4.0 }
454                cxx  { set ret ${prefix}/bin/g++-mp-4.0 }
455                cpp  { set ret ${prefix}/bin/cpp-mp-4.0 }
456                fc   { set ret ${prefix}/bin/gfortran-mp-4.0 }
457                f77  { set ret ${prefix}/bin/gfortran-mp-4.0 }
458                f90  { set ret ${prefix}/bin/gfortran-mp-4.0 }
459            }
460        }
461        macports-gcc-4.1 {
462            switch -exact ${type} {
463                cc   { set ret ${prefix}/bin/gcc-mp-4.1 }
464                objc { set ret ${prefix}/bin/gcc-mp-4.1 }
465                cxx  { set ret ${prefix}/bin/g++-mp-4.1 }
466                cpp  { set ret ${prefix}/bin/cpp-mp-4.1 }
467                fc   { set ret ${prefix}/bin/gfortran-mp-4.1 }
468                f77  { set ret ${prefix}/bin/gfortran-mp-4.1 }
469                f90  { set ret ${prefix}/bin/gfortran-mp-4.1 }
470            }
471        }
472        macports-gcc-4.2 {
473            switch -exact ${type} {
474                cc   { set ret ${prefix}/bin/gcc-mp-4.2 }
475                objc { set ret ${prefix}/bin/gcc-mp-4.2 }
476                cxx  { set ret ${prefix}/bin/g++-mp-4.2 }
477                cpp  { set ret ${prefix}/bin/cpp-mp-4.2 }
478                fc   { set ret ${prefix}/bin/gfortran-mp-4.2 }
479                f77  { set ret ${prefix}/bin/gfortran-mp-4.2 }
480                f90  { set ret ${prefix}/bin/gfortran-mp-4.2 }
481            }
482        }
483        macports-gcc-4.3 {
484            switch -exact ${type} {
485                cc   { set ret ${prefix}/bin/gcc-mp-4.3 }
486                objc { set ret ${prefix}/bin/gcc-mp-4.3 }
487                cxx  { set ret ${prefix}/bin/g++-mp-4.3 }
488                cpp  { set ret ${prefix}/bin/cpp-mp-4.3 }
489                fc   { set ret ${prefix}/bin/gfortran-mp-4.3 }
490                f77  { set ret ${prefix}/bin/gfortran-mp-4.3 }
491                f90  { set ret ${prefix}/bin/gfortran-mp-4.3 }
492            }
493        }
494        macports-gcc-4.4 {
495            switch -exact ${type} {
496                cc   { set ret ${prefix}/bin/gcc-mp-4.4 }
497                objc { set ret ${prefix}/bin/gcc-mp-4.4 }
498                cxx  { set ret ${prefix}/bin/g++-mp-4.4 }
499                cpp  { set ret ${prefix}/bin/cpp-mp-4.4 }
500                fc   { set ret ${prefix}/bin/gfortran-mp-4.4 }
501                f77  { set ret ${prefix}/bin/gfortran-mp-4.4 }
502                f90  { set ret ${prefix}/bin/gfortran-mp-4.4 }
503            }
504        }
505        macports-gcc-4.5 {
506            switch -exact ${type} {
507                cc   { set ret ${prefix}/bin/gcc-mp-4.5 }
508                objc { set ret ${prefix}/bin/gcc-mp-4.5 }
509                cxx  { set ret ${prefix}/bin/g++-mp-4.5 }
510                cpp  { set ret ${prefix}/bin/cpp-mp-4.5 }
511                fc   { set ret ${prefix}/bin/gfortran-mp-4.5 }
512                f77  { set ret ${prefix}/bin/gfortran-mp-4.5 }
513                f90  { set ret ${prefix}/bin/gfortran-mp-4.5 }
514            }
515        }
516        macports-gcc-4.6 {
517            switch -exact ${type} {
518                cc   { set ret ${prefix}/bin/gcc-mp-4.6 }
519                objc { set ret ${prefix}/bin/gcc-mp-4.6 }
520                cxx  { set ret ${prefix}/bin/g++-mp-4.6 }
521                cpp  { set ret ${prefix}/bin/cpp-mp-4.6 }
522                fc   { set ret ${prefix}/bin/gfortran-mp-4.6 }
523                f77  { set ret ${prefix}/bin/gfortran-mp-4.6 }
524                f90  { set ret ${prefix}/bin/gfortran-mp-4.6 }
525            }
526        }
527        macports-llvm-gcc-4.2 {
528            switch -exact ${type} {
529                cc   { set ret ${prefix}/bin/llvm-gcc-4.2 }
530                objc { set ret ${prefix}/bin/llvm-gcc-4.2 }
531                cxx  { set ret ${prefix}/bin/llvm-g++-4.2 }
532                cpp  { set ret ${prefix}/bin/llvm-cpp-4.2 }
533                fc   { set ret ${prefix}/bin/llvm-gfortran-4.2 }
534                f77  { set ret ${prefix}/bin/llvm-gfortran-4.2 }
535                f90  { set ret ${prefix}/bin/llvm-gfortran-4.2 }
536            }
537        }
538        macports-clang {
539            switch -exact ${type} {
540                cc   { set ret ${prefix}/bin/clang }
541                objc { set ret ${prefix}/bin/clang }
542                cxx  { set ret ${prefix}/bin/clang++ }
543            }
544        }
545    }
546    return $ret
547}
548
549proc portconfigure::configure_main {args} {
550    global [info globals]
551    global worksrcpath use_configure use_autoreconf use_autoconf use_automake use_xmkmf
552    global configure.env configure.pipe configure.libs configure.classpath configure.universal_args
553    global configure.perl configure.python configure.ruby configure.install configure.awk configure.bison configure.pkg_config configure.pkg_config_path
554    global configure.ccache configure.distcc configure.cpp configure.javac configure.march configure.mtune configure.sdkroot
555    foreach tool {cc cxx objc f77 f90 fc ld} {
556        global configure.${tool} configure.${tool}_archflags
557    }
558    foreach flags {cflags cppflags cxxflags objcflags ldflags fflags f90flags fcflags} {
559        global configure.${flags} configure.universal_${flags}
560    }
561   
562    if {[tbool use_autoreconf]} {
563        if {[catch {command_exec autoreconf} result]} {
564            return -code error "[format [msgcat::mc "%s failure: %s"] autoreconf $result]"
565        }
566    }
567   
568    if {[tbool use_automake]} {
569        if {[catch {command_exec automake} result]} {
570            return -code error "[format [msgcat::mc "%s failure: %s"] automake $result]"
571        }
572    }
573   
574    if {[tbool use_autoconf]} {
575        if {[catch {command_exec autoconf} result]} {
576            return -code error "[format [msgcat::mc "%s failure: %s"] autoconf $result]"
577        }
578    }
579
580    if {[tbool use_xmkmf]} {
581        if {[catch {command_exec xmkmf} result]} {
582            return -code error "[format [msgcat::mc "%s failure: %s"] xmkmf $result]"
583        } else {
584            # XXX should probably use make command abstraction but we know that
585            # X11 will already set things up so that "make Makefiles" always works.
586            system "cd ${worksrcpath} && make Makefiles"
587        }
588    } elseif {[tbool use_configure]} {
589        # Merge (ld|c|cpp|cxx)flags into the environment variable.
590        parse_environment configure
591
592        # Set pre-compiler filter to use (ccache/distcc), if any.
593        if {[tbool configure.ccache] && [tbool configure.distcc]} {
594            set filter "ccache "
595            append_list_to_environment_value configure "CCACHE_PREFIX" "distcc"
596        } elseif {[tbool configure.ccache]} {
597            set filter "ccache "
598        } elseif {[tbool configure.distcc]} {
599            set filter "distcc "
600        } else {
601            set filter ""
602        }
603       
604        # Set flags controlling the kind of compiler output.
605        if {[tbool configure.pipe]} {
606            set output "-pipe "
607        } else {
608            set output ""
609        }
610
611        # Append configure flags.
612        append_list_to_environment_value configure "CC" ${filter}${configure.cc}
613        append_list_to_environment_value configure "CXX" ${filter}${configure.cxx}
614        append_list_to_environment_value configure "OBJC" ${filter}${configure.objc}
615        append_list_to_environment_value configure "FC" ${configure.fc}
616        append_list_to_environment_value configure "F77" ${configure.f77}
617        append_list_to_environment_value configure "F90" ${configure.f90}
618        append_list_to_environment_value configure "JAVAC" ${configure.javac}
619        append_list_to_environment_value configure "CFLAGS" ${output}${configure.cflags}
620        append_list_to_environment_value configure "CPPFLAGS" ${configure.cppflags}
621        append_list_to_environment_value configure "CXXFLAGS" ${output}${configure.cxxflags}
622        append_list_to_environment_value configure "OBJCFLAGS" ${output}${configure.objcflags}
623        append_list_to_environment_value configure "LDFLAGS" ${configure.ldflags}
624        append_list_to_environment_value configure "LIBS" ${configure.libs}
625        append_list_to_environment_value configure "FFLAGS" ${output}${configure.fflags}
626        append_list_to_environment_value configure "F90FLAGS" ${output}${configure.f90flags}
627        append_list_to_environment_value configure "FCFLAGS" ${output}${configure.fcflags}
628        append_list_to_environment_value configure "CLASSPATH" ${configure.classpath}
629        append_list_to_environment_value configure "PERL" ${configure.perl}
630        append_list_to_environment_value configure "PYTHON" ${configure.python}
631        append_list_to_environment_value configure "RUBY" ${configure.ruby}
632        append_list_to_environment_value configure "INSTALL" ${configure.install}
633        append_list_to_environment_value configure "AWK" ${configure.awk}
634        append_list_to_environment_value configure "BISON" ${configure.bison}
635        append_list_to_environment_value configure "PKG_CONFIG" ${configure.pkg_config}
636        append_list_to_environment_value configure "PKG_CONFIG_PATH" ${configure.pkg_config_path}
637
638        # add SDK flags if cross-compiling (or universal on ppc tiger)
639        if {${configure.sdkroot} != ""} {
640            foreach flags {CPPFLAGS CFLAGS CXXFLAGS OBJCFLAGS} {
641                append_list_to_environment_value configure $flags "-isysroot ${configure.sdkroot}"
642            }
643            append_list_to_environment_value configure "LDFLAGS" "-Wl,-syslibroot,${configure.sdkroot}"
644        }
645
646        # add extra flags that are conditional on whether we're building universal
647        if {[variant_exists universal] && [variant_isset universal]} {
648            foreach flags {CFLAGS OBJCFLAGS} {
649                append_list_to_environment_value configure $flags ${configure.universal_cflags}
650            }
651            append_list_to_environment_value configure "CXXFLAGS" ${configure.universal_cxxflags}
652            append_list_to_environment_value configure "CPPFLAGS" ${configure.universal_cppflags}
653            append_list_to_environment_value configure "LDFLAGS" ${configure.universal_ldflags}
654            eval configure.pre_args-append ${configure.universal_args}
655        } else {
656            foreach {tool flags} {cc CFLAGS cxx CXXFLAGS objc OBJCFLAGS f77 FFLAGS f90 F90FLAGS fc FCFLAGS ld LDFLAGS} {
657                append_list_to_environment_value configure $flags [set configure.${tool}_archflags]
658                if {${configure.march} != {}} {
659                    append_list_to_environment_value configure $flags "-march=${configure.march}"
660                }
661                if {${configure.mtune} != {}} {
662                    append_list_to_environment_value configure $flags "-mtune=${configure.mtune}"
663                }
664            }
665        }
666
667        # Execute the command (with the new environment).
668        if {[catch {command_exec configure} result]} {
669            return -code error "[format [msgcat::mc "%s failure: %s"] configure $result]"
670        }
671    }
672    return 0
673}
Note: See TracBrowser for help on using the repository browser.