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

Last change on this file since 70974 was 70974, checked in by raimue@…, 10 years ago

port1.0: Do not output unnecessary messages in quiet mode, see #25880

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