source: trunk/dports/math/atlas/Portfile @ 111754

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

Fix a typo (non-breakable space -> space)

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 25.7 KB
Line 
1# $Id: Portfile 111754 2013-09-30 17:07:25Z vince@macports.org $
2
3PortSystem              1.0
4PortGroup               muniversal 1.0
5
6categories              math
7license                 BSD
8name                    atlas
9version                 3.10.1
10revision                5
11
12# additional versions
13set lapackversion       3.4.2
14set lapackname          lapack
15set atlasdist           ${name}${version}.tar.bz2
16set lapackdist          ${lapackname}-${lapackversion}.tgz
17
18maintainers             vince
19platforms               darwin
20
21description             Portable optimal linear algebra software
22long_description        Provides a complete BLAS and LAPACK API.\nATLAS\
23                        achieves performance on par\
24                        with machine-specific tuned libraries.
25
26# No precompiled binaries
27#archive_sites
28
29homepage                http://math-atlas.sourceforge.net/
30
31master_sites            sourceforge:math-atlas:atlas \
32                        http://www.netlib.org/lapack:lapack
33
34distfiles               ${atlasdist}:atlas \
35                        ${lapackdist}:lapack
36
37patchfiles              patch-emit_mm_c.diff \
38                        patch-ATL_cmm4x4x128_av_c.diff
39#                        patch-archinfo_x86_c.diff\
40#                        patch-tfc_c.diff
41
42checksums               atlas3.10.1.tar.bz2 \
43                        rmd160  67f928ad900caa300b23e2f824b8a495f416c8d6 \
44                        sha256  a215b492204aae0205f4028e7c4076492a5d6a564f8f859ff062fd79587bcc86 \
45                        lapack-3.4.2.tgz \
46                        rmd160  8740c35c9a85b71424fe1ffeed192256aebeb431 \
47                        sha256  60a65daaf16ec315034675942618a2230521ea7adf85eea788ee54841072faf0
48
49compiler.blacklist       macports-clang-3.1 macports-clang-3.0 \
50                         macports-clang-2.9
51
52set     gcc_version      0
53set     use_clang        ""
54
55variant gcc48            conflicts   gcc46 gcc47 clang mpclang33 perf \
56                         description {build using macports-gcc-4.8} {
57
58    configure.compiler      macports-gcc-4.8
59}
60
61if {[variant_isset gcc48]} {
62
63    set gcc_version         48
64    set use_clang           ""
65}
66
67variant gcc47           conflicts   gcc46 gcc48 clang mpclang33 perf \
68                        description {build using macports-gcc-4.7} {
69
70    configure.compiler      macports-gcc-4.7
71}
72
73if {[variant_isset gcc47]} {
74
75    set gcc_version         47
76    set use_clang           ""
77}
78
79variant gcc46           conflicts   gcc47 gcc48 clang mpclang33 perf\
80                        description {build using macports-gcc-4.6} {
81
82    configure.compiler      macports-gcc-4.6
83}
84
85if {[variant_isset gcc46]} {
86
87    set gcc_version         46
88    set use_clang           ""
89
90}
91
92variant clang           conflicts   gcc46 gcc47 gcc48 mpclang33 \
93                        description {use XCode clang and gfortran} {
94
95    pre-fetch {
96        return -code error        "Use of clang is temporarily disabled.\
97                                   Please choose gcc47 instead."
98    }
99
100    configure.compiler      clang
101}
102
103if {[variant_isset clang]} {
104
105    set use_clang           "XCode"
106    set gcc_version         0
107}
108
109variant mpclang33       conflicts   gcc46 gcc47 gcc48 clang perf\
110                        description {use mp-clang-3.3 and gfortran} {
111
112    configure.compiler      macports-clang-3.3
113}
114
115if {[variant_isset mpclang33]} {
116
117    set use_clang           "33"
118    set gcc_version         0
119}
120
121variant perf conflicts gcc46 gcc47 gcc48 mpclang33 clang \
122             description {Uses clang-mp-3.3 for C and dragonegg-3.3 for Fortran} {
123
124    configure.compiler      macports-clang-3.3
125    depends_build-append    port:dragonegg-3.3-gcc-4.8
126    configure.f77           ${prefix}/bin/dragonegg-3.3-gfortran-mp-4.8
127
128    set clang_flags         "-O3 -fPIC -fomit-frame-pointer"
129    set gcc_flags           "${clang_flags} \
130                            -specs=${prefix}/libexec/dragonegg/llvm33gcc48-integrated-as.specs"
131}
132
133if {[variant_isset perf]} {
134
135    set use_clang           "33"
136    set gcc_version         48
137}
138
139variant nofortran       description {Forgo use of fortran compiler} {
140}
141
142# AVX or higher?
143
144if {(${os.major} > 11 && \
145        (![catch {sysctl hw.optional.fma} result1] && $result1 == 1)) ||
146        (![catch {sysctl hw.cpufamily} result2] && $result2 == 280134364)} {
147
148    set has_fma "yes"
149} else {
150
151    set has_fma "no"
152}
153
154if {(${os.major} > 11 && \
155        (![catch {sysctl hw.optional.avx2_0} result1] && $result1 == 1)) ||
156        (![catch {sysctl hw.cpufamily} result2] && $result2 == 280134364)} {
157
158    set has_avx2 "yes"
159} else {
160
161    set has_avx2 "no"
162}
163
164if {(${os.major} > 10 && \
165        (![catch {sysctl hw.optional.avx1_0} result1] && $result1 == 1)) ||
166        (![catch {sysctl hw.cpufamily} result2] && $result2 == 1418770316)} {
167
168    set has_avx "yes"
169} else {
170
171    set has_avx "no"
172}
173
174# If none of the above variants is chosen, make gcc47 the default for
175# up to SSE4.2 (Core i1) capable processors, and mp-clang-3.3 for newer
176
177if {![variant_isset gcc46] && ![variant_isset gcc47] && \
178    ![variant_isset gcc48] && ![variant_isset clang] && \
179    ![variant_isset perf] && ![variant_isset mpclang33]} {
180
181    if {${has_avx} == "no"} {
182   
183        # Defaults to gcc47
184        default_variants    +gcc47
185        set gcc_version     47
186        set use_clang       ""
187    } else {
188   
189        # Defaults to clang-mp-3.3
190        default_variants    +mpclang33
191        set gcc_version     0
192        set use_clang       "33"
193    }
194}
195
196set universal           [variant_isset universal]
197
198# Finds the type of CPU we are running on
199set native_arch ${build_arch}
200
201if {${os.arch} == "i386"} {
202
203    set universal_archs_supported {i386 x86_64}
204    if {![catch {exec sysctl -n hw.machine} result]} {
205        set native_arch ${result}
206    }
207} elseif {${os.arch} == "powerpc"} {
208
209    set universal_archs_supported {ppc  ppc64}
210    if {![catch {exec sysctl -n hw.cpusubtype} result] && $result == 100} {
211        set native_arch "ppc64"
212    } else {
213   
214        set native_arch "ppc"
215    }
216}
217
218configure.args \
219    --with-netlib-lapack-tarfile=${distpath}/${lapackdist} \
220    -O 12 \
221    -v 5 \
222    --dylibs
223
224# Chose the right flags for GCC and Clang compilers
225
226if {${build_arch} == "i386" || ${build_arch} == "x86_64"} {
227
228    # General flags
229    # GCC
230    set gcc_flags   "-fomit-frame-pointer -mfpmath=sse -O3\
231                     -fno-schedule-insns2 -fPIC"
232
233    # Clang
234    if {${use_clang} == "XCode" } {
235
236        pre-fetch {       
237            ui_warn "Compiling Atlas with this version of clang is\
238                    likely *NOT* to work. Please use clang-3.3 or\
239                    higher."
240        }
241        set clang_flags "-O3 -fomit-frame-pointer -fPIC"
242    } else {
243
244        # Clang 3.3 – Use loop and straight vectorizer
245        set clang_flags "-O3 -fomit-frame-pointer -fPIC"
246
247    }
248
249    # Vectorizing unit flags
250    if {${has_fma} == "yes"} {
251   
252        # Only Clang handles AVX+ correctly
253        set gvct_flag   "-msse4.2"
254        # downgrade FMA to AVX for the time being
255        set cvct_flag   "-mavx"
256        if {${use_clang} != ""} {
257
258            configure.args-append   -A 26 -V 480
259        } else {
260
261            # No AVX when using GCC 4.x
262            configure.args-append   -A 26 -V 448
263        }
264    } elseif  {${has_avx2} == "yes"} {
265   
266        set gvct_flag   "-msse4.2"
267        set cvct_flag   "-mavx"
268    } elseif {${has_avx} == "yes"} {
269
270        set gvct_flag   "-msse4.2"
271        set cvct_flag   "-mavx"
272    } elseif {${os.major} > 9 && \
273            ![catch {sysctl hw.optional.sse4_2} result1] && $result1 == 1} {
274
275        set gvct_flag   "-msse4.2"
276        set cvct_flag   "-msse4.2"
277    } elseif {${os.major} > 9 && \
278            ![catch {sysctl hw.optional.sse4_1} result1] && $result1 == 1} {
279
280        set gvct_flag   "-msse4.1"
281        set cvct_flag   "-msse4.1"
282    } elseif {${os.major} > 8 && \
283    ![catch {sysctl hw.optional.supplementalsse3} result1] && $result1 == 1} {
284
285        set gvct_flag   "-mssse3"
286        set cvct_flag   "-mssse3"
287    } else {
288
289        # Default vectorization flag is sse3 (CoreSolo / CoreDuo)
290        set gvct_flag   "-msse3"
291        set cvct_flag   "-msse3"
292    }
293} elseif {${build_arch} == "ppc"} {
294
295    # PPC
296    set gcc_flags           "-O3 -mcpu=7400 -mtune=7400\
297                            -fno-schedule-insns -fschedule-insns2 -fPIC \
298                            -force_cpusubtype_ALL"
299    set clang_flags         "-O3 -arch ppc -fPIC"
300
301    set gvct_flag           "-maltivec -mabi=altivec"
302    set cvct_flag           "-maltivec"
303   
304    configure.args-append   -A 4
305
306    # On Leopard, we may warn the user that ppc
307    # is not as efficient as ppc64
308    pre-fetch {
309        if {${native_arch} == "ppc64"} {
310
311                ui_msg "Compiling for ppc on a G5 machine.\
312                        This could lead to reduced performance."
313        }
314    }
315
316} else {
317
318    # PPC64
319    set gcc_flags           "-mcpu=970 -mtune=970 -mvrsave -mpowerpc64\
320                            -fno-schedule-insns -fschedule-insns2 -fPIC \
321                            -force_cpusubtype_ALL"
322    # Clang has no PPC64 target so compile for PPC
323    set clang_flags         "-O3 -arch ppc -fPIC"
324
325    set gvct_flag           "-maltivec -mabi=altivec"
326    set cvct_flag           "-maltivec"
327}
328
329# Basic universal config
330# Advanced config (flags) is done during pre-configure phase
331
332if {${universal} == 1} {
333
334    configure.universal_args-delete         --disable-dependency-tracking
335
336    lappend merger_configure_args(ppc)      --cflags=-m32 \
337                                            -b 32 \
338                                            -A 4 \
339                                            -V 4 \
340                                            -s gas_ppc \
341                                            -Fa alg -force_cpusubtype_ALL
342
343    lappend merger_configure_args(ppc64)    --cflags=-m64 \
344                                            -b 64 \
345                                            -A 5 \
346                                            -V 4 \
347                                            -s gas_ppc \
348                                            -Fa alg -force_cpusubtype_ALL
349
350    lappend merger_configure_args(i386)     --cflags=-m32 \
351                                            -b 32 \
352                                            -A 22 \
353                                            -V 448 \
354                                            -t 2 \
355                                            -s gas_x86_32
356
357    lappend merger_configure_args(x86_64)   --cflags=-m64 \
358                                            -b 64 \
359                                            -s gas_x86_64
360}
361
362# Threading
363# If we run on a mono-processor machine (PPC), then disable threading
364
365if {![catch {sysctl hw.logicalcpu} result] && $result == 1} {
366
367    configure.args-append    -t 0
368    set no_threads  1
369} else {
370
371    set no_threads  0
372
373    # Threading relies on OpenMP if gcc compilers are selected
374    # Does not seem to work reliably. Disabled.
375    #if {${gcc_version} != 0} {
376
377        configure.args-append   -Si omp 0
378    #}
379}
380
381# Phases (moonlike)
382
383extract {
384    # extract Atlas and move to a consistent working directory name
385    system -W ${workpath}   "bunzip2 -dc ${distpath}/${atlasdist} | \
386                             gnutar --no-same-owner -xf -"
387    system  "mv ${workpath}/ATLAS ${workpath}/${name}-${version}"
388}
389
390post-patch {
391    if {${build_arch} == "ppc" || ${build_arch} == "ppc64"} {
392   
393        reinplace \
394        "s|cMVFLAGS=\\\\\"%s\\\\\"|cMVFLAGS=\\\\\"-force_cpusubtype_ALL\ %s\\\\\"|" \
395         ${worksrcpath}/include/atlas_mvtesttime.h
396    }
397
398    if {${no_threads} == 1} {
399        exec sed -i bak -E "/.*threads.*/d" ${worksrcpath}/Make.top
400    }
401}
402
403# Change the default compilers
404pre-configure {
405
406    # Inform user of selected C compiler
407    ui_msg "Selected C compiler: ${configure.cc}"
408
409    # Fortran stuff
410    set fortran [expr ! [variant_isset nofortran]]
411
412    # If we use clang, we must grasp a gfortran compiler to build
413    # Fortran sources (do not impact overall Atlas performance)
414
415    if {${use_clang} != "" && ${fortran} == 1} {
416
417        if {![variant_isset perf]} {
418            set gflist  [glob -noc ${prefix}/bin/gfortran-mp-4.*]
419            if {[llength ${gflist}] == 0} {
420
421                # No fortran compiler found, bail out
422                return -code error "Atlas could not detect any fortran compiler.\
423                                    If you really don’t need the fortran interface\
424                                    to be built, please use the +nofortran option,\
425                                    else install a fortran compiler (e.g. gcc4X)\
426                                    before building Atlas."
427            } else {
428
429                # Select most recent gfortran
430                global gcc_version
431
432                configure.f77   [lindex [lsort -dec ${gflist}] 0]
433                set gcc_version   \
434                [join [split [string range ${configure.f77} end-2 end] "."] ""]           
435            }
436        }
437    }
438
439    if {${fortran} == 1} {
440
441        # Output the F77 selected compiler
442        if {[variant_isset perf]} {
443            ui_msg "Using dragonegg-3.3-gfortran-mp-4.8 as Fortran compiler."
444        } else {
445            ui_msg "Selected F77 compiler: gfortran${gcc_version}"
446        }
447    } else {
448
449        # No Fortran
450        configure.args-append   --nof77
451    }
452   
453    # Now set the flags according to the compiler family chosen
454    # Also set “width” of the processor (32 or 64-bit)
455
456    if {${gcc_version} != 0} {
457        set libgccpath                  ${prefix}/lib/gcc${gcc_version}
458    }
459
460    # Some tweaks on the original source before universal build
461    # duplicates it
462    # Overrides goodgcc
463    reinplace -E "s|GOODGCC =.*|GOODGCC = ${configure.cc}\");|" \
464        ${worksrcpath}/CONFIG/src/SpewMakeInc.c
465
466    # Some further tweaks
467    reinplace    "s|cc=gcc|cc=${configure.cc}|g" \
468                    ${worksrcpath}/configure
469    reinplace    "s|-no-cpp-precomp||g" \
470                    ${worksrcpath}/CONFIG/src/atlcomp.txt
471               
472    # Non-universal builds
473    if {${universal} == 0} {
474
475        configure.args-append   -C acg ${configure.cc}
476       
477        # If we build for the CPU of the machine, use
478        # machine arch tuning (except on ppc)
479        # -march=natives supersedes -msse4.2 so disable it on AVX
480        # capable machines
481        if {${has_avx} == "no" && ${build_arch} != "ppc"} {
482
483            append gcc_flags    " -march=native"
484        }
485        append clang_flags  " -march=native"
486       
487        # AVX stuff. GCC compilers cannot use AVX instruction set because the
488        # system as(1) is outdated
489        # Clang 3.3 is fine
490
491        if {${has_avx} == "yes" && ${use_clang} == ""} {
492
493            # Force Core i1 arch for ASM kernels
494            ui_warn "GCC compilers on MacOS do not support AVX:\
495                    downgrading."
496            configure.args-append   -A 25
497        }
498       
499        if {${build_arch} == "ppc"} {
500       
501            # ppc uses altivec vectorizing unit
502            configure.args-append       -V 4
503        }
504
505        if {${use_clang} == ""} {
506
507            # GCC
508            configure.args-append       -F acg "'${gcc_flags} ${gvct_flag}'"
509
510            if {${fortran} == 1} {
511
512                configure.args-append   -C if ${configure.f77}
513                configure.args-append   -F if "'${gcc_flags} ${gvct_flag}'"
514                configure.args-append   -Ss f77lib \
515                                            ${libgccpath}/libgfortran.dylib
516            }
517            if {${build_arch} == "x86_64" || ${build_arch} == "ppc64"} {
518
519                configure.args-append   -b 64
520            } else {
521
522                configure.args-append   -b 32
523            }
524        } else {
525
526            # clang
527            if {[variant_isset perf]} {
528
529                append cvct_flag       " -march=native"
530                set gvct_flag           ${cvct_flag}
531            }
532            configure.args-append   -F acg  "'${clang_flags} ${cvct_flag}'"
533
534            if {${fortran} == 1} {
535
536                configure.args-append   -C if ${configure.f77}           
537                configure.args-append   -F if "'${gcc_flags} ${gvct_flag}'"
538                configure.args-append   -Ss f77lib \
539                                            ${libgccpath}/libgfortran.dylib
540            }
541
542            if {${build_arch} == "x86_64"} {
543
544                configure.args-append   -b 64
545            } else {
546
547                # Clang has no ppc64 target so ppc64 ➸ regular ppc (32 bit)
548                configure.args-append   -b 32
549            }
550        }
551       
552        # Create build directory
553        file mkdir ${worksrcpath}/build
554    } else {
555   
556        # Universal builds
557        foreach arch ${universal_archs_to_use} {
558           
559            # Init ‘universal’ flags
560            set gcc_univ_flags          ${gcc_flags}
561            set gvct_univ_flag          ${gvct_flag}
562            set clang_univ_flags        ${clang_flags}
563            set cvct_univ_flag          ${cvct_flag}
564            set gcc_supp_flags          ""
565            set clang_supp_flags        ""
566           
567            # We build for the native architecture
568            if {${arch} == ${native_arch} && ${build_arch} != "ppc"} {
569               
570                # Don’t add -march=native to a GCC build on an AVX
571                # machine because this flag overrides -msse4.2
572                if {${has_avx} == "no"} {
573               
574                    append gcc_supp_flags   "-march=native "
575                }
576                append clang_supp_flags     "-march=native "
577            }
578           
579            # Non-native targets. Apply a priori flags.
580
581            # Clamp i386 optimization to -sse3 in universal builds and
582            # forces clang/gcc to use -m32 flag
583            if {${arch} == "i386" && ${native_arch} != "i386"} {
584
585                set gvct_univ_flag      "-msse3"
586                set cvct_univ_flag      "-msse3"
587       
588                append gcc_supp_flags   "-m32"
589                append clang_supp_flags "-m32"
590            }
591           
592            # For x86_64 builds, be conservative and use only -ssse3
593            # Core2 CPU and SSE3 ASM kernels
594            if {${arch} == "x86_64" && ${native_arch} != "x86_64"} {
595           
596                set gvct_univ_flag      "-mssse3"
597                set cvct_univ_flag      "-mssse3"
598               
599                append gcc_supp_flags   "-m64"
600                append clang_supp_flags "-m64"
601               
602                lappend merger_configure_args("x86_64") -A 25 -V 448
603            }
604           
605            # ppc (on Intel or ppc64 machines)
606            if {${arch} == "ppc" && ${native_arch} != "ppc"} {
607           
608                set gcc_univ_flags      "-O3 -mcpu=7400 -mtune=7400\
609                                         -fno-schedule-insns -fschedule-insns2\
610                                         -fPIC"
611                set clang_univ_flags    "-O3 -arch ppc -fPIC"
612
613                set gvct_univ_flag      "-maltivec -mabi=altivec"
614                set cvct_univ_flag      "-maltivec"
615
616                append gcc_supp_flags   "-m32"
617                append clang_supp_flags "-m32"
618            }
619           
620            # ppc64 (only for gcc, for clang this is taken to be the
621            # same target as ppc)
622            if {${arch} == "ppc64" && ${native_arch} != "ppc64"} {
623           
624                set gcc_univ_flags      "-mcpu=970 -mtune=970 -mvrsave \
625                                         -mpowerpc64 -fno-schedule-insns\
626                                         -fschedule-insns2 -fPIC"
627                set clang_univ_flags    "-O3 -arch ppc -fPIC"
628
629                set gvct_univ_flag      "-maltivec -mabi=altivec"
630                set cvct_univ_flag      "-maltivec"
631
632                append gcc_supp_flags   "-m64"
633                append clang_supp_flags "-m64"
634            }
635           
636            # Now add the flags to merger_configure_args(${arch})
637            # Same code as the non-universal case
638            lappend merger_configure_args(${arch})  -C acg ${configure.cc}
639            if {${use_clang} == ""} {
640       
641                # GCC
642                lappend merger_configure_args(${arch}) \
643                    -F acg "'${gcc_univ_flags} ${gcc_supp_flags}\
644                             ${gvct_univ_flag}'"
645           
646                if {${fortran} == 1} {
647           
648                    lappend merger_configure_args(${arch}) \
649                        -C if ${configure.f77} \
650                        -F if "'${gcc_univ_flags} ${gcc_supp_flags}\
651                                ${gvct_univ_flag}'"
652               
653                    set libgccarchpath    ${libgccpath}/${arch}
654                    if {[file exists ${libgccarchpath}/libgfortran.dylib]} {
655
656                        lappend merger_configure_args(${arch}) \
657                            -Ss f77lib ${libgccarchpath}/libgfortran.dylib
658                    } else {
659
660                        lappend merger_configure_args(${arch}) \
661                            -Ss f77lib ${libgccpath}/libgfortran.dylib
662                    }
663                }
664            } else {
665
666                # clang
667                lappend merger_configure_args(${arch}) \
668                    -F acg "'${clang_univ_flags} ${clang_supp_flags}\
669                             ${cvct_univ_flag}'"
670           
671                if {${fortran} == 1} {
672           
673                    lappend merger_configure_args(${arch}) \
674                        -C if ${configure.f77} \
675                        -F if "'${gcc_univ_flags} ${gcc_supp_flags}\
676                                ${gvct_univ_flag}'"
677               
678                    set libgccarchpath    ${libgccpath}/${arch}
679                    if {[file exists ${libgccarchpath}/libgfortran.dylib]} {
680
681                        lappend merger_configure_args(${arch}) \
682                            -Ss f77lib ${libgccarchpath}/libgfortran.dylib
683                    } else {
684
685                        lappend merger_configure_args(${arch}) \
686                            -Ss f77lib ${libgccpath}/libgfortran.dylib
687                    }
688                }
689            }
690           
691            # Remove spurious { } from arguments list
692            set merger_configure_args(${arch}) \
693                [join [split $merger_configure_args(${arch}) "{}"]]
694               
695            # Create ${arch} build tree
696            copy ${workpath}/${name}-${version} \
697                ${workpath}/${name}-${version}-${arch}
698            file mkdir ${workpath}/${name}-${version}-${arch}/build
699        }
700    }
701   
702    # On PPC64 we need extra flags for configuring
703    if {${native_arch} == "ppc64"} {
704        configure.args-append   --cc="\"${configure.cc} -m32 \
705                                 -force_cpusubtype_ALL\""
706    }
707
708    # Get some system specific variables for maximum optimization
709    set cpufreq [expr {[sysctl hw.cpufrequency] / 1000000}]
710
711    if {${os.arch} == "powerpc"} {
712
713        configure.args-append    -D c -DWALL
714    } else {
715
716        configure.args-append    -D c -DPentiumCPS=${cpufreq}
717    }   
718}
719
720# We configure from the build directory
721configure.dir            ${worksrcpath}/build
722configure.cmd            ../configure
723
724post-configure {
725
726    # Store in ${atlas_paths} the ${worksrcpath}s corresponding to the
727    # archs Atlas is being built for.
728    set     atlas_paths {}
729    if {${universal} == 1} {
730
731        foreach arch ${universal_archs_to_use} {
732
733            lappend atlas_paths ${workpath}/${name}-${version}-${arch}
734        }
735    } else {
736
737        lappend atlas_paths ${worksrcpath}
738    }
739
740    foreach path ${atlas_paths} {
741
742        # Recursively remove directories
743        ui_debug    "Patch to recursively remove directories on clean."
744        reinplace   "s|rm -f|rm -rf|g" ${path}/build/Makefile
745
746        # Threading — ensure libgomp is correctly pulled in during link
747        #if {${gcc_version} != 0 && ${no_threads} == 0} {
748
749        #   set gmpfx    ${prefix}/lib/gcc${gcc_version}
750        #   set arch     [lindex [split [lindex [split $path "/"] end] "-"] 2]
751        #   if {${arch} != "" && \
752        #       [file exists ${gmpfx}/${arch}/libgomp.dylib]} {
753
754        #      reinplace -E \
755        #          "s|(LIBS =.*)|\\1 ${gmpfx}/${arch}/libgomp.dylib|" \
756        #          ${path}/build/Make.inc
757        #  } else {
758
759        #     reinplace -E \
760        #         "s|(LIBS =.*)|\\1 ${gmpfx}/libgomp.dylib|" \
761        #         ${path}/build/Make.inc
762        # }
763        #}
764    }
765}
766
767build.env-append        "CC=${configure.cc} CXX=${configure.cxx}"
768use_parallel_build      no
769build.target            build
770build.dir               ${worksrcpath}/build
771
772post-build {
773    if {${universal} == 0} {
774
775        set libdir ${build.dir}/lib
776        reinplace "s|^LIBTOOL=.*$|LIBTOOL=\$\(GCC\) \$\(GCCFLAGS\)|" \
777            ${libdir}/Makefile
778        reinplace "s|-dynamic|-dynamiclib|g" ${libdir}/Makefile
779
780        # On mono-processors machines, build libsatlas.dylib only
781        if {${no_threads} == 1} {
782
783            system -W ${libdir} "${build.cmd} dylib"
784        } else {
785
786            system -W ${libdir} "${build.cmd} shared_all"
787        }
788    } else {
789
790        foreach arch ${universal_archs_to_use} {
791
792            set libdir ${workpath}/${name}-${version}-${arch}/build/lib
793            reinplace "s|^LIBTOOL=.*$|LIBTOOL=\$\(GCC\) \$\(GCCFLAGS\)|" \
794                ${libdir}/Makefile
795            reinplace "s|dynamic|dynamiclib|g" ${libdir}/Makefile
796
797            # Same as above
798            if {${no_threads} == 1} {
799
800                system -W ${libdir} "${build.cmd} dylib"
801            } else {
802
803                system -W ${libdir} "${build.cmd} shared_all"
804            }
805        }
806    }
807}
808
809destroot.dir          ${build.dir}
810destroot.destdir      DESTDIR=${destroot}${prefix}
811
812post-destroot {
813    # On monoprocessor machines, make tatlas and satlas synonymous
814    if {${no_threads} == 1} {
815
816        set libdir ${destroot}${prefix}/lib
817        system -W ${libdir} "ln -s libsatlas.dylib libtatlas.dylib"
818    }
819}
820
821livecheck.name        math-atlas
822livecheck.distname    Stable
Note: See TracBrowser for help on using the repository browser.