summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sci-libs/atlas/Manifest2
-rw-r--r--sci-libs/atlas/atlas-3.10.2.ebuild221
-rw-r--r--sci-libs/atlas/files/atlas-3.10.2-format-security.patch198
-rw-r--r--sci-libs/atlas/files/atlas-3.10.2-x32-support.patch93
-rw-r--r--sci-libs/atlas/metadata.xml22
5 files changed, 536 insertions, 0 deletions
diff --git a/sci-libs/atlas/Manifest b/sci-libs/atlas/Manifest
new file mode 100644
index 000000000000..caffa2c89aea
--- /dev/null
+++ b/sci-libs/atlas/Manifest
@@ -0,0 +1,2 @@
+DIST atlas3.10.2.tar.bz2 4904923 SHA256 3aab139b118bf3fcdb4956fbd71676158d713ab0d3bccb2ae1dc3769db22102f SHA512 9fe04cfa1f89449db047d1a4659a656964d13117c783cbbe43344eb32555736f037d9cd30c5ae1514c08ad5b8949a3982d7fe102d707ddb62288e76b2607fbb1 WHIRLPOOL e56936da713b0a1eb560d993bd29da0ac65923bdd2298c0a240a933fbf8961cd151020756ab550e716eae153d97c96d713512cda208a9c1a7c34467bd591fcd5
+DIST lapack-3.6.0.tgz 6792324 SHA256 a9a0082c918fe14e377bbd570057616768dca76cbdc713457d8199aaa233ffc3 SHA512 bc50441d415ef8896dd7626d77c6104184b996e758704366288089f03d4c99d068e33153b0d13305310886017e5d2e716130f812a95cfcad36ef37fe20417ab8 WHIRLPOOL 5576d0a81b2645fe95ef7011cc398f31142b8dcd01cdf5945e3db0e73ae1768766ea54254b40f4c6a581a6fb77b911595fccd597be0536833118af5877bb0c64
diff --git a/sci-libs/atlas/atlas-3.10.2.ebuild b/sci-libs/atlas/atlas-3.10.2.ebuild
new file mode 100644
index 000000000000..7e80dd99df45
--- /dev/null
+++ b/sci-libs/atlas/atlas-3.10.2.ebuild
@@ -0,0 +1,221 @@
+# Copyright 1999-2016 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+EAPI=6
+
+FORTRAN_NEEDED=fortran
+
+inherit fortran-2 toolchain-funcs versionator
+
+LAPACKP=lapack-3.6.0.tgz
+
+DESCRIPTION="Automatically Tuned Linear Algebra Software"
+HOMEPAGE="http://math-atlas.sourceforge.net/"
+SRC_URI="mirror://sourceforge/math-atlas/${PN}${PV}.tar.bz2
+ fortran? ( lapack? ( http://www.netlib.org/lapack/${LAPACKP} ) )"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="~amd64 ~x86 ~amd64-linux ~x86-linux"
+IUSE="doc fortran generic lapack static-libs threads"
+
+RDEPEND=""
+DEPEND="${RDEPEND}"
+
+S="${WORKDIR}/ATLAS"
+
+PATCHES=(
+ "${FILESDIR}/${P}-x32-support.patch"
+ "${FILESDIR}/${P}-format-security.patch"
+)
+
+pkg_setup() {
+ local _cpufreq
+ for _cpufreq in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do
+ if [ -f ${_cpufreq} ]; then
+ if ! grep -q performance ${_cpufreq}; then
+ echo 2> /dev/null performance > ${_cpufreq} || \
+ die "${PN} needs all cpu set to performance"
+ fi
+ fi
+ done
+ use fortran && fortran-2_pkg_setup
+}
+
+src_configure() {
+ # hack needed to trick the flaky gcc detection
+ local mycc="$(type -P $(tc-getCC))"
+ [[ ${mycc} == *gcc* ]] && mycc=gcc
+ atlas_configure() {
+ local myconf=(
+ --prefix="${ED}/usr"
+ --libdir="${ED}/usr/$(get_libdir)"
+ --incdir="${ED}/usr/include"
+ --cc="$(tc-getCC)"
+ "-D c -DWALL"
+ "-C acg '${mycc}'"
+ "-F acg '${CFLAGS}'"
+ "-Ss pmake '\$(MAKE) ${MAKEOPTS}'"
+ )
+
+ # OpenMP shown to decreased performance over POSIX threads
+ # (at least in 3.9.x, see atlas-dev mailing list)
+ if use threads; then
+ if use generic; then # 2 threads is most generic
+ myconf+=( "-t 2" "-Si omp 0" )
+ else
+ myconf+=( "-t -1" "-Si omp 0" )
+ fi
+ else
+ myconf+=( "-t 0" "-Si omp 0" )
+ fi
+
+ if use amd64 || use ppc64 || use sparc; then
+ if [ ${ABI} = amd64 ] || [ ${ABI} = ppc64 ] || [ ${ABI} = sparc64 ] ; then
+ myconf+=( "-b 64" )
+ elif [ ${ABI} = x86 ] || [ ${ABI} = ppc ] || [ ${ABI} = sparc32 ] ; then
+ myconf+=( "-b 32" )
+ elif [ ${ABI} = x32 ] ; then
+ myconf+=( "-b 48" )
+ else
+ myconf+=( "-b 64" )
+ fi
+ elif use ppc || use x86; then
+ myconf+=( "-b 32" )
+ elif use ia64; then
+ myconf+=( "-b 64" )
+ fi
+ if use fortran; then
+ myconf+=(
+ "-C if '$(type -P $(tc-getFC))'"
+ "-F if '${FFLAGS}'"
+ )
+ if use lapack; then
+ myconf+=(
+ "-Si latune 1"
+ "--with-netlib-lapack-tarfile=${DISTDIR}/${LAPACKP}"
+ )
+ else
+ myconf+=( "-Si latune 0" )
+ fi
+ else
+ myconf+=( "-Si latune 0" "--nof77" )
+ fi
+ # generic stuff found by make make xprint_enums in atlas build dir
+ # basically assuming sse2+sse1 and 2 threads max
+ use generic && use x86 && myconf+=( "-V 384 -A 13")
+ use generic && use amd64 && myconf+=( "-V 384 -A 24")
+
+ local confdir="${S}_${1}"; shift
+ myconf+=( $@ )
+ mkdir "${confdir}" && cd "${confdir}"
+ # for debugging
+ echo ${myconf[@]} > myconf.out
+ "${S}"/configure ${myconf[@]} || die "configure in ${confdir} failed"
+ }
+
+ atlas_configure shared "-Fa alg -fPIC" ${EXTRA_ECONF}
+ use static-libs && atlas_configure static ${EXTRA_ECONF}
+}
+
+src_compile() {
+ atlas_compile() {
+ pushd "${S}_${1}" > /dev/null
+ # atlas does its own parallel builds
+ emake -j1 build
+ cd lib
+ emake libclapack.a
+ [[ -e libptcblas.a ]] && emake libptclapack.a
+ popd > /dev/null
+ }
+
+ atlas_compile shared
+ use static-libs && atlas_compile static
+}
+
+src_test() {
+ cd "${S}_shared"
+ emake -j1 check time
+}
+
+# transform a static archive into a shared library and install them
+# atlas_install_libs <mylib.a> [extra link flags]
+atlas_install_libs() {
+ local libname=$(basename ${1%.*})
+ einfo "Installing ${libname}"
+ local soname=${libname}.so.$(get_major_version)
+ shift
+ pushd "${S}_shared"/lib > /dev/null
+ ${LINK:-$(tc-getCC)} ${LDFLAGS} -shared -Wl,-soname=${soname} \
+ -Wl,--whole-archive ${libname}.a -Wl,--no-whole-archive \
+ "$@" -o ${soname} || die "Creating ${soname} failed"
+ dolib.so ${soname}
+ ln -s ${soname} ${soname%.*}
+ dosym ${soname} /usr/$(get_libdir)/${soname%.*}
+ popd > /dev/null
+ use static-libs && dolib.a "${S}_static"/lib/${libname}.a
+}
+
+src_install() {
+ cd "${S}_shared/lib"
+ # rename to avoid collision with other packages
+ local l
+ for l in {,c}{blas,lapack}; do
+ if [[ -e lib${l}.a ]]; then
+ mv lib{,atl}${l}.a
+ use static-libs && mv "${S}"_static/lib/lib{,atl}${l}.a
+ fi
+ done
+
+ [[ -e libptcblas.a ]] && PTLIBS="-lpthread"
+
+ # atlas
+ atlas_install_libs libatlas.a -lm ${PTLIBS}
+
+ # cblas
+ atlas_install_libs libatlcblas.a -lm -L. -latlas
+
+ # cblas threaded
+ [[ -e libptcblas.a ]] && \
+ atlas_install_libs libptcblas.a -lm -L. -latlas ${PTLIBS}
+
+ if use lapack; then
+ # clapack
+ atlas_install_libs libatlclapack.a -lm -L. -latlas -latlcblas
+
+ # clapack threaded
+ [[ -e libptclapack.a ]] && \
+ atlas_install_libs libptclapack.a -lm -L. -latlas -lptcblas ${PTLIBS}
+ fi
+
+ if use fortran; then
+ LINK=$(tc-getF77)
+
+ # blas
+ atlas_install_libs libf77blas.a -lm -L. -latlas
+
+ # blas threaded
+ [[ -e libptf77blas.a ]] && \
+ atlas_install_libs libptf77blas.a -lm -L. -latlas ${PTLIBS}
+
+ if use lapack; then
+ # lapack
+ atlas_install_libs libatllapack.a \
+ -lm -L. -latlas -latlcblas -lf77blas
+ # lapack threaded
+ [[ -e libptlapack.a ]] && \
+ atlas_install_libs libptlapack.a -lm -L. -latlas -lptcblas -lptf77blas ${PTLIBS}
+ fi
+ fi
+
+ cd "${S}"
+ insinto /usr/include/${PN}
+ doins include/*.h
+
+ cd "${S}/doc"
+ dodoc INDEX.txt AtlasCredits.txt ChangeLog
+ use doc && dodoc atlas*pdf cblas.pdf cblasqref.pdf
+ use doc && use fortran && dodoc f77blas*pdf
+ use doc && use fortran && use lapack && dodoc *lapack*pdf
+}
diff --git a/sci-libs/atlas/files/atlas-3.10.2-format-security.patch b/sci-libs/atlas/files/atlas-3.10.2-format-security.patch
new file mode 100644
index 000000000000..f3f45d774510
--- /dev/null
+++ b/sci-libs/atlas/files/atlas-3.10.2-format-security.patch
@@ -0,0 +1,198 @@
+ bin/atlas_install.c | 46 +++++++++++++++++++++++-----------------------
+ 1 file changed, 23 insertions(+), 23 deletions(-)
+
+diff --git a/bin/atlas_install.c b/bin/atlas_install.c
+index 2753cbf..21b716d 100644
+--- a/bin/atlas_install.c
++++ b/bin/atlas_install.c
+@@ -483,9 +483,9 @@ void PrintStartStop(FILE *fp0, FILE *fp1, int nspc, int START, int sec,
+ fprintf(fp1, "\n\n");
+ }
+ if (fp0)
+- fprintf(fp0, ln);
++ fprintf(fp0, "%s", ln);
+ if (fp1)
+- fprintf(fp1, ln);
++ fprintf(fp1, "%s", ln);
+ }
+
+ int LnIsCont(char *ln)
+@@ -776,11 +776,11 @@ void GoToTown(int ARCHDEF, int L1DEF, int TuneLA)
+ if (DefInstall)
+ {
+ sprintf(ln, "%s IRunMMDef pre=%c %s %s\n", fmake, pre, redir, ln2);
+- fprintf(stdout, ln);
++ fprintf(stdout, "%s", ln);
+ ATL_Cassert(system(ln)==0, "BUILDING BLOCK MATMUL TUNE", ln2);
+ }
+ sprintf(ln, "%s %s pre=%c %s %s\n", fmake, fnam, pre, redir, ln2);
+- fprintf(stdout, ln);
++ fprintf(stdout, "%s", ln);
+ ATL_Cassert(system(ln)==0, "BUILDING BLOCK MATMUL TUNE", ln2);
+ PrintBanner(ln2, 0, 2, ip+1, 1);
+ }
+@@ -836,7 +836,7 @@ void GoToTown(int ARCHDEF, int L1DEF, int TuneLA)
+ if (!FileExists(fnam))
+ {
+ sprintf(ln, "%s %s pre=%c %s %s", fmake, fnam, pre, redir, ln2);
+- fprintf(stdout, ln);
++ fprintf(stdout, "%s", ln);
+ ATL_Cassert(system(ln)==0, "BUILDING BLOCK MATMUL TUNE", ln2);
+ }
+ fp = fopen(fnam, "r");
+@@ -854,7 +854,7 @@ void GoToTown(int ARCHDEF, int L1DEF, int TuneLA)
+ {
+ sprintf(ln, "%s %s pre=%c nb=%d %s %s",
+ fmake, fnam, pre, ncnb, redir, ln2);
+- fprintf(stdout, ln);
++ fprintf(stdout, "%s", ln);
+ ATL_Cassert(system(ln)==0, "BUILDING BLOCK MATMUL TUNE", ln2);
+ }
+ GetInstLogFile(fnam, pre, &muladd, &pf, &lat, &nb, &mu, &nu, &ku,
+@@ -881,7 +881,7 @@ void GoToTown(int ARCHDEF, int L1DEF, int TuneLA)
+ }
+
+ sprintf(ln, "%s MMinstall pre=%c %s %s\n", fmake, pre, redir, ln2);
+- fprintf(stdout, ln);
++ fprintf(stdout, "%s", ln);
+ ATL_Cassert(system(ln)==0, "BUILDING BLOCK MATMUL TUNE", ln2);
+
+ fprintf(fpsum, "\n");
+@@ -896,7 +896,7 @@ void GoToTown(int ARCHDEF, int L1DEF, int TuneLA)
+ PrintBanner(ln2, 1, 2, ip+1, 2);
+ sprintf(ln, "%s INSTALL_LOG/atlas_cacheedge.h pre=%c %s %s\n",
+ fmake, pre, redir, ln2);
+- fprintf(stdout, ln);
++ fprintf(stdout, "%s", ln);
+ ATL_Cassert(system(ln)==0, "CACHEEDGE DETECTION", ln2);
+ PrintBanner(ln2, 0, 2, ip+1, 2);
+ }
+@@ -922,7 +922,7 @@ void GoToTown(int ARCHDEF, int L1DEF, int TuneLA)
+ {
+ sprintf(ln, "%s %s pre=%c %s %s\n",
+ fmake, ln3, pre, redir, ln2);
+- fprintf(stdout, ln);
++ fprintf(stdout, "%s", ln);
+ ATL_Cassert(system(ln)==0, "CACHEEDGE DETECTION", ln2);
+ }
+ fp = fopen(ln3, "r");
+@@ -955,7 +955,7 @@ void GoToTown(int ARCHDEF, int L1DEF, int TuneLA)
+ "\n\n STAGE 2-%d-3: COPY/NO-COPY CROSSOVER DETECTION\n", ip+1);
+
+ sprintf(ln, "%s %s pre=%c %s %s\n", fmake, fnam, pre, redir, ln2);
+- fprintf(stdout, ln);
++ fprintf(stdout, "%s", ln);
+ ATL_Cassert(system(ln)==0, "COPY/NO-COPY CROSSOVER DETECTION", ln2);
+ PrintBanner(ln2, 0, 2, ip+1, 3);
+ fprintf(stdout, " done.\n");
+@@ -970,17 +970,17 @@ void GoToTown(int ARCHDEF, int L1DEF, int TuneLA)
+ {
+ sprintf(ln, "%s INSTALL_LOG/atlas_%ctrsmXover.h pre=%c %s %s\n",
+ fmake, pre, pre, redir, ln2);
+- fprintf(stdout, ln);
++ fprintf(stdout, "%s", ln);
+ ATL_Cassert(system(ln)==0, "L3BLAS TUNING", ln2);
+ }
+ else
+ {
+ sprintf(ln, "%s Il3lib pre=%c %s %s\n", fmake, pre, redir, ln2);
+- fprintf(stdout, ln);
++ fprintf(stdout, "%s", ln);
+ ATL_Cassert(system(ln)==0, "L3BLAS TUNING", ln2);
+ }
+ sprintf(ln, "%s %ccblaslib %s %s\n", fmake, pre, redir, ln2); /* cblas */
+- fprintf(stdout, ln);
++ fprintf(stdout, "%s", ln);
+ ATL_Cassert(system(ln)==0, "L3BLAS TUNING", ln2);
+ PrintBanner(ln2, 0, 2, ip+1, 5);
+ PrintStartStop(stdout, fpsum, 3, 0, 2, ip+1, 4, "L3BLAS TUNE");
+@@ -993,7 +993,7 @@ void GoToTown(int ARCHDEF, int L1DEF, int TuneLA)
+ sprintf(ln2, "INSTALL_LOG/%cMVNTUNE.LOG", pre);
+ PrintBanner(ln2, 1, 2, ip+1, 7);
+ sprintf(ln, "%s %s pre=%c %s %s\n", fmake, fnam, pre, redir, ln2);
+- fprintf(stdout, ln);
++ fprintf(stdout, "%s", ln);
+ ATL_Cassert(system(ln)==0, "MVNTUNE", ln2);
+ ATL_Cassert(FileIsThere(fnam), "MVNTUNE", ln2);
+ PrintBanner(ln2, 0, 2, ip+1, 7);
+@@ -1026,7 +1026,7 @@ void GoToTown(int ARCHDEF, int L1DEF, int TuneLA)
+ sprintf(ln2, "INSTALL_LOG/%cMVTTUNE.LOG", pre);
+ PrintBanner(ln2, 1, 2, ip+1, 7);
+ sprintf(ln, "%s %s pre=%c %s %s\n", fmake, fnam, pre, redir, ln2);
+- fprintf(stdout, ln);
++ fprintf(stdout, "%s", ln);
+ ATL_Cassert(system(ln)==0, "MVTTUNE", ln2);
+ ATL_Cassert(FileIsThere(fnam), "MVTTUNE", ln2);
+ PrintBanner(ln2, 0, 2, ip+1, 7);
+@@ -1061,7 +1061,7 @@ void GoToTown(int ARCHDEF, int L1DEF, int TuneLA)
+ sprintf(ln2, "INSTALL_LOG/%cR1TUNE.LOG", pre);
+ PrintBanner(ln2, 1, 2, ip+1, 7);
+ sprintf(ln, "%s %s pre=%c %s %s\n", fmake, fnam, pre, redir, ln2);
+- fprintf(stdout, ln);
++ fprintf(stdout, "%s", ln);
+ ATL_Cassert(system(ln)==0, "R1TUNE", ln2);
+ ATL_Cassert(FileIsThere(fnam), "R1TUNE", ln2);
+ PrintBanner(ln2, 0, 2, ip+1, 7);
+@@ -1099,7 +1099,7 @@ void GoToTown(int ARCHDEF, int L1DEF, int TuneLA)
+ sprintf(ln2, "INSTALL_LOG/LIBBUILD.LOG");
+ PrintBanner(ln2, 1, 3, 1, 1);
+ sprintf(ln, "%s IBuildLibs %s %s\n", fmake, redir, ln2);
+- fprintf(stdout, ln);
++ fprintf(stdout, "%s", ln);
+ ATL_Cassert(system(ln)==0, "LIBRARY BUILD", ln2);
+ ATL_Cassert(FileIsThere(fnam), "LIBRARY BUILD", ln2);
+ PrintBanner(ln2, 0, 3, 1, 1);
+@@ -1110,7 +1110,7 @@ void GoToTown(int ARCHDEF, int L1DEF, int TuneLA)
+ PrintBanner(ln2, 1, 4, 1, 1);
+ PrintStartStop(stdout, fpsum, 3, 1, 4, 1, 1, "TRSM TUNE");
+ sprintf(ln, "%s IPostTune %s %s\n", fmake, redir, ln2);
+- fprintf(stdout, ln);
++ fprintf(stdout, "%s", ln);
+ ATL_Cassert(system(ln)==0, "POST-BUILD TUNE", ln2);
+ PrintStartStop(stdout, fpsum, 3, 0, 4, 1, 0, NULL);
+ ATL_Cassert(FileIsThere(fnam), "POST-BUILD TUNE", ln2);
+@@ -1121,7 +1121,7 @@ void GoToTown(int ARCHDEF, int L1DEF, int TuneLA)
+ sprintf(ln2, "INSTALL_LOG/PTTUNE.LOG");
+ PrintBanner(ln2, 1, 4, 2, 0);
+ sprintf(ln, "%s IPTtune %s %s\n", fmake, redir, ln2);
+- fprintf(stdout, ln);
++ fprintf(stdout, "%s", ln);
+ ATL_Cassert(system(ln)==0, "THREADING TUNE", ln2);
+ PrintStartStop(stdout, fpsum, 3, 0, 4, 2, 0, "THREADING TUNE");
+
+@@ -1129,7 +1129,7 @@ void GoToTown(int ARCHDEF, int L1DEF, int TuneLA)
+ sprintf(ln2, "INSTALL_LOG/LIBPTBUILD.LOG");
+ PrintBanner(ln2, 1, 4, 2, 1);
+ sprintf(ln, "%s IBuildPtlibs %s %s\n", fmake, redir, ln2);
+- fprintf(stdout, ln);
++ fprintf(stdout, "%s", ln);
+ ATL_Cassert(system(ln)==0, "PTLIBRARY BUILD", ln2);
+ PrintBanner(ln2, 0, 4, 2, 1);
+ PrintStartStop(stdout, fpsum, 3, 0, 4, 2, 1, "THREADING BUILD");
+@@ -1144,7 +1144,7 @@ void GoToTown(int ARCHDEF, int L1DEF, int TuneLA)
+ PrintStartStop(stdout, fpsum, 6, 1, 4, 3, ip+1, ln2);
+ sprintf(ln2, "INSTALL_LOG/%cLATUNE.LOG", pre);
+ PrintBanner(ln2, 1, 4, 3, ip+1);
+- fprintf(stdout, ln);
++ fprintf(stdout, "%s", ln);
+ sprintf(ln, "%s ILATune pre=%c %s %s\n", fmake, pre, redir, ln2);
+ ATL_Cassert(system(ln)==0, "LAPACK TUNE", ln2);
+ PrintStartStop(stdout, fpsum, 6, 0, 4, 3, ip+1, NULL);
+@@ -1162,7 +1162,7 @@ void GoToTown(int ARCHDEF, int L1DEF, int TuneLA)
+ #else
+ sprintf(ln, "%s IBuildLibs %s %s\n", fmake, redir, ln2);
+ #endif
+- fprintf(stdout, ln);
++ fprintf(stdout, "%s", ln);
+ ATL_Cassert(system(ln)==0, "STATIC LIBRARY UPDATE", ln2);
+ PrintBanner(ln2, 0, 5, 1, 1);
+ PrintStartStop(stdout, fpsum, 3, 0, 5, 1, 0, "FINAL STATIC LIBRARY UPDATE");
+@@ -1172,7 +1172,7 @@ void GoToTown(int ARCHDEF, int L1DEF, int TuneLA)
+ sprintf(ln2, "INSTALL_LOG/LIBDYBUILD.LOG");
+ PrintBanner(ln2, 1, 5, 2, 1);
+ sprintf(ln, "%s IBuildDyLibs %s %s\n", fmake, redir, ln2);
+- fprintf(stdout, ln);
++ fprintf(stdout, "%s", ln);
+ ATL_Cassert(system(ln)==0, "DYLIBRARY BUILD", ln2);
+ PrintBanner(ln2, 0, 5, 2, 1);
+ PrintStartStop(stdout, fpsum, 3, 0, 5, 2, 0, NULL);
diff --git a/sci-libs/atlas/files/atlas-3.10.2-x32-support.patch b/sci-libs/atlas/files/atlas-3.10.2-x32-support.patch
new file mode 100644
index 000000000000..82e6980690cb
--- /dev/null
+++ b/sci-libs/atlas/files/atlas-3.10.2-x32-support.patch
@@ -0,0 +1,93 @@
+--- ATLAS/CONFIG/src/SpewMakeInc.c.orig 2012-05-24 00:56:27.000000000 +0200
++++ ATLAS/CONFIG/src/SpewMakeInc.c 2012-06-06 15:17:40.000000000 +0200
+@@ -370,7 +370,7 @@
+ }
+ *f2cdefs = fdefs;
+ *ecdefs = cdefs;
+- if (*ptrbits != 32 && *ptrbits != 64)
++ if (*ptrbits != 32 && *ptrbits != 64 && *ptrbits != 48)
+ *ptrbits = 0;
+ }
+ char *GetPtrbitsFlag(enum OSTYPE OS, enum MACHTYPE arch, int ptrbits,
+@@ -418,6 +418,8 @@
+ sp = "-m64";
+ else if (ptrbits == 32)
+ sp = "-m32";
++ else if (ptrbits == 48 && MachIsX86(arch))
++ sp = "-mx32";
+ }
+ return(sp);
+ }
+--- ATLAS/CONFIG/src/gnuccw.c.orig 2012-06-06 15:30:05.000000000 +0200
++++ ATLAS/CONFIG/src/gnuccw.c 2012-06-06 15:33:29.000000000 +0200
+@@ -363,7 +363,7 @@
+ * -m64/32 args get passed to comp, asm & linker
+ */
+ else if (at->len == 4 &&
+- (!strcmp(at->arg, "-m64") || !strcmp(at->arg, "-m32")))
++ (!strcmp(at->arg, "-m64") || !strcmp(at->arg, "-m32") || !strcmp(at->arg, "-mx32")))
+ {
+ if (at->arg[2] == '6')
+ *BITS = 64;
+--- ATLAS/CONFIG/src/gcc3p.c.orig 2012-06-06 15:29:38.000000000 +0200
++++ ATLAS/CONFIG/src/gcc3p.c 2012-06-06 15:31:17.000000000 +0200
+@@ -352,7 +352,7 @@
+ * -m64/32 args get passed to comp, asm & linker
+ */
+ else if (at->len == 4 &&
+- (!strcmp(at->arg, "-m64") || !strcmp(at->arg, "-m32")))
++ (!strcmp(at->arg, "-m64") || !strcmp(at->arg, "-m32") || !strcmp(at->arg, "-mx32")))
+ {
+ if (at->arg[2] == '6')
+ {
+--- ATLAS/CONFIG/src/gnuf90w.c.orig 2012-06-06 15:29:28.000000000 +0200
++++ ATLAS/CONFIG/src/gnuf90w.c 2012-06-06 15:30:36.000000000 +0200
+@@ -363,7 +363,7 @@
+ * -m64/32 args get passed to comp, asm & linker
+ */
+ else if (at->len == 4 &&
+- (!strcmp(at->arg, "-m64") || !strcmp(at->arg, "-m32")))
++ (!strcmp(at->arg, "-m64") || !strcmp(at->arg, "-m32") || !strcmp(at->arg, "-mx32")))
+ {
+ if (at->arg[2] == '6')
+ *BITS = 64;
+--- ATLAS/CONFIG/src/probe_comp.c.orig 2012-06-06 15:29:51.000000000 +0200
++++ ATLAS/CONFIG/src/probe_comp.c 2012-06-06 15:32:50.000000000 +0200
+@@ -614,6 +614,8 @@
+ sp = "-m64";
+ else if (ptrbits == 32)
+ sp = "-m32";
++ else if (ptrbits == 48)
++ sp = "-mx32";
+ }
+ return(sp);
+ }
+@@ -1691,7 +1693,7 @@
+ }
+ }
+ }
+- if (*ptrbits != 32 && *ptrbits != 64)
++ if (*ptrbits != 32 && *ptrbits != 64 && *ptrbits != 48)
+ *ptrbits = 0;
+ }
+
+--- ATLAS/CONFIG/src/config.c.orig 2012-06-06 15:59:53.000000000 +0200
++++ ATLAS/CONFIG/src/config.c 2012-06-06 16:00:07.000000000 +0200
+@@ -183,7 +183,7 @@
+ i = sprintf(ln, "make IRun_comp args=\"-v %d -o atlconf.txt -O %d -A %d -Si nof77 %d -V %d %s %s",
+ verb, OS, arch, nof77, vecext, targarg, flags);
+ free(flags);
+- if (ptrbits == 64 || ptrbits == 32)
++ if (ptrbits == 64 || ptrbits == 32 || ptrbits == 48)
+ {
+ sprintf(stmp, "-b %d", ptrbits);
+ ln = NewAppendedString(ln, stmp);
+@@ -1272,7 +1272,7 @@
+ }
+ *f2cdefs = fdefs;
+ *ecdefs = cdefs;
+- if (*ptrbits != 32 && *ptrbits != 64)
++ if (*ptrbits != 32 && *ptrbits != 64 && *ptrbits != 48)
+ *ptrbits = 0;
+ }
+
diff --git a/sci-libs/atlas/metadata.xml b/sci-libs/atlas/metadata.xml
new file mode 100644
index 000000000000..ac115a049487
--- /dev/null
+++ b/sci-libs/atlas/metadata.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>sci@gentoo.org</email>
+ <name>Gentoo Science Project</name>
+ </maintainer>
+ <longdescription lang="en">
+ ATLAS is an approach for the automatic generation and optimization of
+ numerical software. Currently ATLAS supplies optimized versions for the
+ complete set of linear algebra kernels known as the Basic Linear Algebra
+ Subroutines (BLAS) for both c and F77 interfaces. It can also build
+ a subset of the linear algebra routine LAPACK library or the full
+ LAPACK using the reference LAPACK from Netlib.
+</longdescription>
+ <use>
+ <flag name="generic">Build atlas assuming a fairly generic architecture (sse2 for x86, core2 for amd64)</flag>
+ </use>
+ <upstream>
+ <remote-id type="sourceforge">math-atlas</remote-id>
+ </upstream>
+</pkgmetadata>