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

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

Reinsert the revision line that was erroneuosly erased.

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