summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin H. Johnson <robbat2@gentoo.org>2015-08-08 13:49:04 -0700
committerRobin H. Johnson <robbat2@gentoo.org>2015-08-08 17:38:18 -0700
commit56bd759df1d0c750a065b8c845e93d5dfa6b549d (patch)
tree3f91093cdb475e565ae857f1c5a7fd339e2d781e /sci-mathematics/freemat
downloadgentoo-56bd759df1d0c750a065b8c845e93d5dfa6b549d.tar.gz
gentoo-56bd759df1d0c750a065b8c845e93d5dfa6b549d.tar.bz2
gentoo-56bd759df1d0c750a065b8c845e93d5dfa6b549d.zip
proj/gentoo: Initial commit
This commit represents a new era for Gentoo: Storing the gentoo-x86 tree in Git, as converted from CVS. This commit is the start of the NEW history. Any historical data is intended to be grafted onto this point. Creation process: 1. Take final CVS checkout snapshot 2. Remove ALL ChangeLog* files 3. Transform all Manifests to thin 4. Remove empty Manifests 5. Convert all stale $Header$/$Id$ CVS keywords to non-expanded Git $Id$ 5.1. Do not touch files with -kb/-ko keyword flags. Signed-off-by: Robin H. Johnson <robbat2@gentoo.org> X-Thanks: Alec Warner <antarus@gentoo.org> - did the GSoC 2006 migration tests X-Thanks: Robin H. Johnson <robbat2@gentoo.org> - infra guy, herding this project X-Thanks: Nguyen Thai Ngoc Duy <pclouds@gentoo.org> - Former Gentoo developer, wrote Git features for the migration X-Thanks: Brian Harring <ferringb@gentoo.org> - wrote much python to improve cvs2svn X-Thanks: Rich Freeman <rich0@gentoo.org> - validation scripts X-Thanks: Patrick Lauer <patrick@gentoo.org> - Gentoo dev, running new 2014 work in migration X-Thanks: Michał Górny <mgorny@gentoo.org> - scripts, QA, nagging X-Thanks: All of other Gentoo developers - many ideas and lots of paint on the bikeshed
Diffstat (limited to 'sci-mathematics/freemat')
-rw-r--r--sci-mathematics/freemat/Manifest1
-rw-r--r--sci-mathematics/freemat/files/freemat-4.0-gcc45.patch208
-rw-r--r--sci-mathematics/freemat/files/freemat-4.0-no_implicit_GLU.patch14
-rw-r--r--sci-mathematics/freemat/files/freemat-4.1-fixes.patch21
-rw-r--r--sci-mathematics/freemat/files/freemat-4.1-have_fftw.patch78
-rw-r--r--sci-mathematics/freemat/files/freemat-4.1-local_libffi.patch13
-rw-r--r--sci-mathematics/freemat/files/freemat-4.1-portaudio.patch10
-rw-r--r--sci-mathematics/freemat/files/freemat-4.1-python3.patch24
-rw-r--r--sci-mathematics/freemat/files/freemat-4.1-use_llvm.patch29
-rw-r--r--sci-mathematics/freemat/files/freemat-4.2-use_llvm.patch45
-rw-r--r--sci-mathematics/freemat/freemat-4.2.ebuild84
-rw-r--r--sci-mathematics/freemat/metadata.xml20
12 files changed, 547 insertions, 0 deletions
diff --git a/sci-mathematics/freemat/Manifest b/sci-mathematics/freemat/Manifest
new file mode 100644
index 000000000000..c794a4aef3a1
--- /dev/null
+++ b/sci-mathematics/freemat/Manifest
@@ -0,0 +1 @@
+DIST FreeMat-4.2-Source.tar.gz 106222549 SHA256 5f56dc18458da72fb8143d47faeb7a66fa104f8ac9160558e032f6d2d68c9ffb SHA512 85f56ab910358bac63bb50d9ef8fac51a486c32ffc246b47aea02fc6a629c36f0cd8d55feb755c4697530a87cf08fa8cc7b69ebde0f09535561014ea280b902a WHIRLPOOL 94b72375f451afd3da6bc756b9fa3e9a782edf8827a1b90f3d30723235df99c093ea7c4455b7d5cca1633f1d8d95302b237e0b389647ed242504626dd3f2c304
diff --git a/sci-mathematics/freemat/files/freemat-4.0-gcc45.patch b/sci-mathematics/freemat/files/freemat-4.0-gcc45.patch
new file mode 100644
index 000000000000..7492e16b783e
--- /dev/null
+++ b/sci-mathematics/freemat/files/freemat-4.0-gcc45.patch
@@ -0,0 +1,208 @@
+Fix building with gcc-4.5
+
+http://bugs.gentoo.org/show_bug.cgi?id=318045
+
+--- libs/libFreeMat/Array.cpp
++++ libs/libFreeMat/Array.cpp
+@@ -465,7 +465,7 @@
+
+ void Array::set(const QString& field, ArrayVector& data) {
+ if (isEmpty() && m_type.Class != Struct)
+- *this = Array::Array(Struct);
++ *this = Array(Struct);
+ if (m_type.Class != Struct) throw Exception("Unsupported type for A.field=B");
+ StructArray &rp(structPtr());
+ if (isEmpty())
+--- libs/libFreeMat/Math.cpp
++++ libs/libFreeMat/Math.cpp
+@@ -1590,9 +1590,9 @@
+
+ Array Not(const Array& A) {
+ if (A.isScalar())
+- return Array::Array(!A.toClass(Bool).constRealScalar<bool>());
++ return Array(!A.toClass(Bool).constRealScalar<bool>());
+ const Array &Abool(A.toClass(Bool));
+- return Array::Array(Apply(Abool.constReal<bool>(),notfunc));
++ return Array(Apply(Abool.constReal<bool>(),notfunc));
+ }
+
+ Array Plus(const Array& A) {
+--- libs/libFreeMat/Operators.hpp
++++ libs/libFreeMat/Operators.hpp
+@@ -142,11 +142,11 @@
+ if (!Bcast.isScalar()) Bcast = Bcast.asDenseArray();
+ if (Acast.isScalar() && Bcast.isScalar()) {
+ if (Acast.allReal() && Bcast.allReal()) {
+- F = Array::Array(Op::func(Acast.constRealScalar<T>(),
++ F = Array(Op::func(Acast.constRealScalar<T>(),
+ Bcast.constRealScalar<T>()));
+ } else {
+ Acast.forceComplex(); Bcast.forceComplex();
+- F = Array::Array(T(0),T(0));
++ F = Array(T(0),T(0));
+ Op::func(Acast.constRealScalar<T>(),
+ Acast.constImagScalar<T>(),
+ Bcast.constRealScalar<T>(),
+@@ -155,7 +155,7 @@
+ }
+ } else if (Acast.isScalar()) {
+ if (Acast.allReal() && Bcast.allReal()) {
+- F = Array::Array(Tclass,Bcast.dimensions());
++ F = Array(Tclass,Bcast.dimensions());
+ T* ret = F.real<T>().data();
+ const T& Ap = Acast.constRealScalar<T>();
+ const T* Bp = Bcast.constReal<T>().constData();
+@@ -163,7 +163,7 @@
+ for (uint64 i=0;i<q;i++) ret[i] = Op::func(Ap,Bp[i]);
+ } else {
+ Acast.forceComplex(); Bcast.forceComplex();
+- F = Array::Array(Tclass,Bcast.dimensions());
++ F = Array(Tclass,Bcast.dimensions());
+ T* Cr = F.real<T>().data();
+ T* Ci = F.imag<T>().data();
+ const T& Ar = Acast.constRealScalar<T>();
+@@ -175,7 +175,7 @@
+ }
+ } else if (Bcast.isScalar()) {
+ if (Bcast.allReal() && Acast.allReal()) {
+- F = Array::Array(Tclass,Acast.dimensions());
++ F = Array(Tclass,Acast.dimensions());
+ T* ret = F.real<T>().data();
+ const T* Ap = Acast.constReal<T>().constData();
+ const T& Bp = Bcast.constRealScalar<T>();
+@@ -183,7 +183,7 @@
+ for (uint64 i=0;i<q;i++) ret[i] = Op::func(Ap[i],Bp);
+ } else {
+ Acast.forceComplex(); Bcast.forceComplex();
+- F = Array::Array(Tclass,Acast.dimensions());
++ F = Array(Tclass,Acast.dimensions());
+ T* Cr = F.real<T>().data();
+ T* Ci = F.imag<T>().data();
+ const T* Ar = Acast.constReal<T>().constData();
+@@ -197,7 +197,7 @@
+ if (Acast.dimensions() != Bcast.dimensions())
+ throw Exception("size mismatch in arguments to binary operator");
+ if (Bcast.allReal() && Acast.allReal()) {
+- F = Array::Array(Tclass,Acast.dimensions());
++ F = Array(Tclass,Acast.dimensions());
+ T* ret = F.real<T>().data();
+ const T* Ap = Acast.constReal<T>().constData();
+ const T* Bp = Bcast.constReal<T>().constData();
+@@ -205,7 +205,7 @@
+ for (uint64 i=0;i<q;i++) ret[i] = Op::func(Ap[i],Bp[i]);
+ } else {
+ Acast.forceComplex(); Bcast.forceComplex();
+- F = Array::Array(Tclass,Acast.dimensions());
++ F = Array(Tclass,Acast.dimensions());
+ T* Cr = F.real<T>().data();
+ T* Ci = F.imag<T>().data();
+ const T* Ar = Acast.constReal<T>().constData();
+@@ -328,17 +328,17 @@
+ if (!Acast.isScalar()) Acast = Acast.asDenseArray();
+ if (!Bcast.isScalar()) Bcast = Bcast.asDenseArray();
+ if (Acast.isScalar() && Bcast.isScalar()) {
+- F = Array::Array(Op::func(Acast.constRealScalar<T>(),
++ F = Array(Op::func(Acast.constRealScalar<T>(),
+ Bcast.constRealScalar<T>()));
+ } else if (Acast.isScalar()) {
+- F = Array::Array(Bool,Bcast.dimensions());
++ F = Array(Bool,Bcast.dimensions());
+ bool* ret = F.real<bool>().data();
+ const T& Ap = Acast.constRealScalar<T>();
+ const T* Bp = Bcast.constReal<T>().constData();
+ uint64 q = uint64(Bcast.length());
+ for (uint64 i=0;i<q;i++) ret[i] = Op::func(Ap,Bp[i]);
+ } else if (Bcast.isScalar()) {
+- F = Array::Array(Bool,Acast.dimensions());
++ F = Array(Bool,Acast.dimensions());
+ bool* ret = F.real<bool>().data();
+ const T* Ap = Acast.constReal<T>().constData();
+ const T& Bp = Bcast.constRealScalar<T>();
+@@ -347,7 +347,7 @@
+ } else {
+ if (Acast.dimensions() != Bcast.dimensions())
+ throw Exception("size mismatch in arguments to binary operator");
+- F = Array::Array(Bool,Acast.dimensions());
++ F = Array(Bool,Acast.dimensions());
+ bool* ret = F.real<bool>().data();
+ const T* Ap = Acast.constReal<T>().constData();
+ const T* Bp = Bcast.constReal<T>().constData();
+@@ -395,18 +395,18 @@
+ if (!Bcast.isScalar()) Bcast = Bcast.asDenseArray();
+ if (Acast.isScalar() && Bcast.isScalar()) {
+ if (Acast.allReal() && Bcast.allReal()) {
+- F = Array::Array(Op::func(Acast.constRealScalar<T>(),
++ F = Array(Op::func(Acast.constRealScalar<T>(),
+ Bcast.constRealScalar<T>()));
+ } else {
+ Acast.forceComplex(); Bcast.forceComplex();
+- F = Array::Array(Op::func(Acast.constRealScalar<T>(),
++ F = Array(Op::func(Acast.constRealScalar<T>(),
+ Acast.constImagScalar<T>(),
+ Bcast.constRealScalar<T>(),
+ Bcast.constImagScalar<T>()));
+ }
+ } else if (Acast.isScalar()) {
+ if (Acast.allReal() && Bcast.allReal()) {
+- F = Array::Array(Bool,Bcast.dimensions());
++ F = Array(Bool,Bcast.dimensions());
+ bool* ret = F.real<bool>().data();
+ const T& Ap = Acast.constRealScalar<T>();
+ const T* Bp = Bcast.constReal<T>().constData();
+@@ -414,7 +414,7 @@
+ for (uint64 i=0;i<q;i++) ret[i] = Op::func(Ap,Bp[i]);
+ } else {
+ Acast.forceComplex(); Bcast.forceComplex();
+- F = Array::Array(Bool,Bcast.dimensions());
++ F = Array(Bool,Bcast.dimensions());
+ bool* ret = F.real<bool>().data();
+ const T& Ar = Acast.constRealScalar<T>();
+ const T& Ai = Acast.constImagScalar<T>();
+@@ -425,7 +425,7 @@
+ }
+ } else if (Bcast.isScalar()) {
+ if (Bcast.allReal() && Acast.allReal()) {
+- F = Array::Array(Bool,Acast.dimensions());
++ F = Array(Bool,Acast.dimensions());
+ bool* ret = F.real<bool>().data();
+ const T* Ap = Acast.constReal<T>().constData();
+ const T& Bp = Bcast.constRealScalar<T>();
+@@ -433,7 +433,7 @@
+ for (uint64 i=0;i<q;i++) ret[i] = Op::func(Ap[i],Bp);
+ } else {
+ Acast.forceComplex(); Bcast.forceComplex();
+- F = Array::Array(Bool,Acast.dimensions());
++ F = Array(Bool,Acast.dimensions());
+ bool* ret = F.real<bool>().data();
+ const T* Ar = Acast.constReal<T>().constData();
+ const T* Ai = Acast.constImag<T>().constData();
+@@ -446,7 +446,7 @@
+ if (Acast.dimensions() != Bcast.dimensions())
+ throw Exception("size mismatch in arguments to binary operator");
+ if (Bcast.allReal() && Acast.allReal()) {
+- F = Array::Array(Bool,Acast.dimensions());
++ F = Array(Bool,Acast.dimensions());
+ bool* ret = F.real<bool>().data();
+ const T* Ap = Acast.constReal<T>().constData();
+ const T* Bp = Bcast.constReal<T>().constData();
+@@ -454,7 +454,7 @@
+ for (uint64 i=0;i<q;i++) ret[i] = Op::func(Ap[i],Bp[i]);
+ } else {
+ Acast.forceComplex(); Bcast.forceComplex();
+- F = Array::Array(Bool,Acast.dimensions());
++ F = Array(Bool,Acast.dimensions());
+ bool* ret = F.real<bool>().data();
+ const T* Ar = Acast.constReal<T>().constData();
+ const T* Ai = Acast.constImag<T>().constData();
+@@ -533,9 +533,9 @@
+ if (!Acast.isScalar()) Acast = Acast.asDenseArray();
+ if (Acast.isScalar()) {
+ if (Acast.allReal()) {
+- F = Array::Array(Op::func(Acast.constRealScalar<T>()));
++ F = Array(Op::func(Acast.constRealScalar<T>()));
+ } else {
+- F = Array::Array(T(0),T(0));
++ F = Array(T(0),T(0));
+ Op::func(Acast.constRealScalar<T>(),
+ Acast.constImagScalar<T>(),
+ F.realScalar<T>(),F.imagScalar<T>());
diff --git a/sci-mathematics/freemat/files/freemat-4.0-no_implicit_GLU.patch b/sci-mathematics/freemat/files/freemat-4.0-no_implicit_GLU.patch
new file mode 100644
index 000000000000..dd3798bb8f6a
--- /dev/null
+++ b/sci-mathematics/freemat/files/freemat-4.0-no_implicit_GLU.patch
@@ -0,0 +1,14 @@
+error: 'gluProject' was not declared in this scope
+
+http://bugs.gentoo.org/402361
+
+--- libs/libGraphics/GLRenderEngine.cpp
++++ libs/libGraphics/GLRenderEngine.cpp
+@@ -20,6 +20,7 @@
+ #include <qimage.h>
+ #include <qpainter.h>
+ #include <QtOpenGL>
++#include <GL/glu.h>
+ #include <math.h>
+ #include "IEEEFP.hpp"
+
diff --git a/sci-mathematics/freemat/files/freemat-4.1-fixes.patch b/sci-mathematics/freemat/files/freemat-4.1-fixes.patch
new file mode 100644
index 000000000000..8ebb1bceb06f
--- /dev/null
+++ b/sci-mathematics/freemat/files/freemat-4.1-fixes.patch
@@ -0,0 +1,21 @@
+--- libs/libGraphics/VTKWindow.cpp.orig 2012-01-27 19:54:55.000000000 +0100
++++ libs/libGraphics/VTKWindow.cpp 2012-01-27 19:54:49.000000000 +0100
+@@ -3,6 +3,7 @@
+ #include "VTKWrap.hpp"
+ #include "VTKWindow.hpp"
+
++#include <QObject>
+ #include <QtCore/QString>
+ #include <QtGui/QLabel>
+ #include <QtGui/QMenu>
+--- libs/libGraphics/GLRenderEngine.cpp.orig 2011-11-27 00:27:43.000000000 +0000
++++ libs/libGraphics/GLRenderEngine.cpp 2012-01-29 03:57:48.453433954 +0000
+@@ -16,6 +16,8 @@
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
++
++#include <GL/glu.h>
+ #include "GLRenderEngine.hpp"
+ #include <qimage.h>
+ #include <qpainter.h>
diff --git a/sci-mathematics/freemat/files/freemat-4.1-have_fftw.patch b/sci-mathematics/freemat/files/freemat-4.1-have_fftw.patch
new file mode 100644
index 000000000000..1415b3d716aa
--- /dev/null
+++ b/sci-mathematics/freemat/files/freemat-4.1-have_fftw.patch
@@ -0,0 +1,78 @@
+diff -rupN libs/libCore.orig/FFT.cpp libs/libCore/FFT.cpp
+--- libs/libCore.orig/FFT.cpp 2011-11-27 01:27:43.856779929 +0100
++++ libs/libCore/FFT.cpp 2012-01-30 00:14:18.682460150 +0100
+@@ -104,6 +104,7 @@ public:
+ #endif
+
+
++#if HAVE_FFTWF
+ class OpVecFFT {
+ WrapFFTWF fft_float;
+ WrapFFTW fft_double;
+@@ -169,7 +170,9 @@ public:
+ }
+ }
+ };
++#endif
+
++#if HAVE_FFTWF
+ class OpVecIFFT {
+ WrapFFTWF fft_float;
+ WrapFFTW fft_double;
+@@ -228,6 +231,7 @@ public:
+ }
+ }
+ };
++#endif
+
+ //!
+ //@Module FFT (Inverse) Fast Fourier Transform Function
+@@ -350,6 +354,8 @@ public:
+ //inputs x len dim
+ //outputs y
+ //!
++
++#if HAVE_FFTWF
+ ArrayVector FFTFunction(int nargout, const ArrayVector& arg) {
+ // Get the data argument
+ if (arg.size() < 1)
+@@ -384,7 +390,9 @@ ArrayVector FFTFunction(int nargout, con
+ OpVecFFT op(FFTLength);
+ return ArrayVector(VectorOpDynamic<OpVecFFT>(arg0,FFTLength,FFTDim,op));
+ }
++#endif
+
++#if HAVE_FFTWF
+ ArrayVector IFFTFunction(int nargout, const ArrayVector& arg) {
+ // Get the data argument
+ if (arg.size() < 1)
+@@ -419,3 +427,4 @@ ArrayVector IFFTFunction(int nargout, co
+ OpVecIFFT op(FFTLength);
+ return ArrayVector(VectorOpDynamic<OpVecIFFT>(arg0,FFTLength,FFTDim,op));
+ }
++#endif
+diff -rupN libs/libCore.orig/Loader.cpp libs/libCore/Loader.cpp
+--- libs/libCore.orig/Loader.cpp 2012-01-30 00:08:41.463155562 +0100
++++ libs/libCore/Loader.cpp 2012-01-30 00:12:24.422448304 +0100
+@@ -43,8 +43,10 @@ ArrayVector FeofFunction(int, const Arra
+ ArrayVector FseekFunction(int, const ArrayVector&);
+ ArrayVector FgetlineFunction(int, const ArrayVector&);
+ ArrayVector FscanfFunction(int, const ArrayVector&);
++#ifdef HAVE_FFTW
+ ArrayVector FFTFunction(int, const ArrayVector&);
+ ArrayVector IFFTFunction(int, const ArrayVector&);
++#endif
+ ArrayVector StrCmpFunction(int, const ArrayVector&);
+ ArrayVector StrCmpiFunction(int, const ArrayVector&);
+ ArrayVector StrnCmpFunction(int, const ArrayVector&);
+@@ -286,8 +288,10 @@ void LoadBuiltinFunctionsCore(Context *c
+ context->addFunction("fseek",FseekFunction,0,3,0,"handle","offset","style",NULL);
+ context->addFunction("fgetline",FgetlineFunction,0,1,1,"handle",NULL);
+ context->addFunction("fscanf",FscanfFunction,0,-1,-1,NULL);
++#ifdef HAVE_FFTW
+ context->addFunction("fft",FFTFunction,0,3,1,"x","len","dim",NULL);
+ context->addFunction("ifft",IFFTFunction,0,3,1,"x","len","dim",NULL);
++#endif
+ context->addFunction("strcmp",StrCmpFunction,0,2,1,"string1","string2",NULL);
+ context->addFunction("strcmpi",StrCmpiFunction,0,2,1,"string1","string2",NULL);
+ context->addFunction("strncmp",StrnCmpFunction,0,3,1,"string1","string2","len",NULL);
diff --git a/sci-mathematics/freemat/files/freemat-4.1-local_libffi.patch b/sci-mathematics/freemat/files/freemat-4.1-local_libffi.patch
new file mode 100644
index 000000000000..3fbfef9c9516
--- /dev/null
+++ b/sci-mathematics/freemat/files/freemat-4.1-local_libffi.patch
@@ -0,0 +1,13 @@
+--- CMakeLists.txt.orig 2011-11-27 01:27:11.116482600 +0100
++++ CMakeLists.txt 2012-01-29 17:09:54.072342306 +0100
+@@ -160,8 +160,8 @@ if(MINGW)
+ INCLUDE_DIRECTORIES(${FFI_INCLUDE_DIR})
+ INSTALL(FILES ${FFI_LIBRARY_DLL} DESTINATION bin )
+ else(MINGW)
+- FIND_LIBRARY(FFI_LIBRARY NAMES ffi DOC "Location of the FFI library" PATHS ${LOCAL_PATH})
+- FIND_PATH(FFI_INCLUDE_DIR ffi.h doc "Location of ffi.h" PATHS ${LOCAL_PATH} /usr/include/ffi /usr/lib64/libffi-3.0.9/include)
++ FIND_LIBRARY(FFI_LIBRARY NAMES ffi DOC "Location of the FFI library" PATHS ${LOCAL_PATH} ${PROJECT_SOURCE_DIR}/dependencies/libffi/build/.libs)
++ FIND_PATH(FFI_INCLUDE_DIR ffi.h doc "Location of ffi.h" PATHS ${LOCAL_PATH} /usr/include/ffi /usr/lib64/libffi-3.0.9/include ${PROJECT_SOURCE_DIR}/dependencies/libffi/build/include /mingw/include/ffi)
+ SET(OPTIONAL_LIBS ${OPTIONAL_LIBS} ${FFI_LIBRARY})
+ INCLUDE_DIRECTORIES(${FFI_INCLUDE_DIR})
+ endif(MINGW)
diff --git a/sci-mathematics/freemat/files/freemat-4.1-portaudio.patch b/sci-mathematics/freemat/files/freemat-4.1-portaudio.patch
new file mode 100644
index 000000000000..518ccfbd1334
--- /dev/null
+++ b/sci-mathematics/freemat/files/freemat-4.1-portaudio.patch
@@ -0,0 +1,10 @@
+--- libs/thirdparty/portaudio/CMakeLists.txt.orig 2012-01-29 02:08:08.422664514 +0100
++++ libs/thirdparty/portaudio/CMakeLists.txt 2012-01-29 02:04:26.826460722 +0100
+@@ -73,6 +73,7 @@ IF (NOT WIN32 AND NOT APPLE)
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/common/pa_stream.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/common/pa_trace.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/hostapi/oss/pa_unix_oss.c
++ ${CMAKE_CURRENT_SOURCE_DIR}/src/hostapi/skeleton/pa_hostapi_skeleton.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/os/unix/pa_unix_hostapis.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/os/unix/pa_unix_util.c )
+ ENDIF (NOT WIN32 AND NOT APPLE)
diff --git a/sci-mathematics/freemat/files/freemat-4.1-python3.patch b/sci-mathematics/freemat/files/freemat-4.1-python3.patch
new file mode 100644
index 000000000000..a7aad97cfc7d
--- /dev/null
+++ b/sci-mathematics/freemat/files/freemat-4.1-python3.patch
@@ -0,0 +1,24 @@
+diff -Nur tools.orig/jitgen.py tools/jitgen.py
+--- tools.orig/jitgen.py 2012-04-13 00:25:18.000000000 +0100
++++ tools/jitgen.py 2012-04-13 00:25:40.000000000 +0100
+@@ -39,7 +39,7 @@
+ f.write("// \n\n// Here, each function gets prototyped.\n");
+ f.close()
+
+-os.path.walk(sys.argv[1], visit, '')
++os.walk(sys.argv[1], visit, '')
+
+ f = open(sys.argv[2],'a')
+ f.write("static const char* jit_scalar_list[] = {");
+diff -Nur tools.orig/siggen.py tools/siggen.py
+--- tools.orig/siggen.py 2012-04-13 00:25:18.000000000 +0100
++++ tools/siggen.py 2012-04-13 00:25:53.000000000 +0100
+@@ -81,7 +81,7 @@
+ function_name = fsplit[1]
+ function_internal_name = fsplit[2];
+ if (function_name == '') or (function_internal_name == ''):
+- print 'MISSING Function Name: <%s> <%s> <%s>'%(fline,function_name,function_internal_name)
++ print('MISSING Function Name: <%s> <%s> <%s>'%(fline,function_name,function_internal_name))
+ inputs = iline.split()
+ inputs = inputs[1:]
+ outputs = oline.split()
diff --git a/sci-mathematics/freemat/files/freemat-4.1-use_llvm.patch b/sci-mathematics/freemat/files/freemat-4.1-use_llvm.patch
new file mode 100644
index 000000000000..327aa30f09ab
--- /dev/null
+++ b/sci-mathematics/freemat/files/freemat-4.1-use_llvm.patch
@@ -0,0 +1,29 @@
+--- libs/libMatC/CMakeLists.txt.orig 2011-11-27 01:27:43.000000000 +0100
++++ libs/libMatC/CMakeLists.txt 2012-01-29 14:39:19.842402326 +0100
+@@ -1,10 +1,14 @@
+
+ INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_BINARY_DIR} ${QT_INCLUDE_DIR} ${QT_QTCORE_INCLUDE_DIR} ${QT_QTGUI_INCLUDE_DIR} )
+
++IF( USE_LLVM )
++ set(LLVM_SOURCES "CJitFuncClang.cpp")
++endif( USE_LLVM )
++
+ ADD_LIBRARY( MatC
+ JITFactory.cpp
+ CJitFunc.cpp
+- CJitFuncClang.cpp
++ ${LLVM_SOURCES}
+ CArray.cpp
+ )
+
+--- libs/libMatC.orig/JITFactory.cpp 2011-11-27 01:27:43.000000000 +0100
++++ libs/libMatC/JITFactory.cpp 2012-01-29 14:53:17.296686846 +0100
+@@ -1,5 +1,7 @@
+ #include "JITFactory.hpp"
+-#include "CJitFuncClang.hpp"
++#ifdef HAVE_LLVM
++# include "CJitFuncClang.hpp"
++#endif
+
+ JITFuncBase* JITFactory::GetJITFunc(Interpreter *eval)
+ {
diff --git a/sci-mathematics/freemat/files/freemat-4.2-use_llvm.patch b/sci-mathematics/freemat/files/freemat-4.2-use_llvm.patch
new file mode 100644
index 000000000000..c29b8694ddb7
--- /dev/null
+++ b/sci-mathematics/freemat/files/freemat-4.2-use_llvm.patch
@@ -0,0 +1,45 @@
+--- libs/libMatC/CMakeLists.txt.orig 2011-11-27 01:27:43.000000000 +0100
++++ libs/libMatC/CMakeLists.txt 2012-01-29 14:39:19.842402326 +0100
+@@ -1,10 +1,14 @@
+
+ INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_BINARY_DIR} ${QT_INCLUDE_DIR} ${QT_QTCORE_INCLUDE_DIR} ${QT_QTGUI_INCLUDE_DIR} )
+
++IF( USE_LLVM )
++ set(LLVM_SOURCES "CJitFuncClang.cpp")
++endif( USE_LLVM )
++
+ ADD_LIBRARY( MatC
+ JITFactory.cpp
+ CJitFunc.cpp
+- CJitFuncClang.cpp
++ ${LLVM_SOURCES}
+ CArray.cpp
+ )
+
+--- libs/libMatC.orig/JITFactory.cpp 2011-11-27 01:27:43.000000000 +0100
++++ libs/libMatC/JITFactory.cpp 2012-01-29 14:53:17.296686846 +0100
+@@ -1,5 +1,7 @@
+ #include "JITFactory.hpp"
+-#include "CJitFuncClang.hpp"
++#ifdef HAVE_LLVM
++# include "CJitFuncClang.hpp"
++#endif
+
+ JITFuncBase* JITFactory::GetJITFunc(Interpreter *eval)
+ {
+--- CMakeLists.txt 2014-12-06 21:47:39.685839650 +0100
++++ CMakeLists.txt 2014-12-06 21:48:01.752127927 +0100
+@@ -249,9 +249,10 @@
+ # LLVM Support
+ ######################################################################
+ OPTION(USE_LLVM "Build with LLVM support?" ON)
+-
+-FIND_PACKAGE(LLVM)
+-FIND_PACKAGE(CLANG)
++IF(USE_LLVM)
++ FIND_PACKAGE(LLVM)
++ FIND_PACKAGE(CLANG)
++ENDIF()
+
+ IF (LLVM_FOUND AND CLANG_FOUND)
+ add_definitions(-DHAVE_LLVM)
diff --git a/sci-mathematics/freemat/freemat-4.2.ebuild b/sci-mathematics/freemat/freemat-4.2.ebuild
new file mode 100644
index 000000000000..a00f52f3a7ec
--- /dev/null
+++ b/sci-mathematics/freemat/freemat-4.2.ebuild
@@ -0,0 +1,84 @@
+# Copyright 1999-2014 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+EAPI=5
+
+inherit eutils cmake-utils fdo-mime
+
+MY_PN=FreeMat
+MY_P=${MY_PN}-${PV}
+
+DESCRIPTION="Environment for rapid engineering and scientific processing"
+HOMEPAGE="http://freemat.sourceforge.net/"
+SRC_URI="mirror://sourceforge/freemat/${MY_P}-Source.tar.gz"
+
+IUSE="volpack vtk"
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+
+RDEPEND="dev-libs/libpcre
+ media-libs/portaudio
+ sci-libs/arpack
+ sci-libs/fftw:3.0
+ sci-libs/matio
+ sci-libs/umfpack
+ sys-libs/ncurses
+ virtual/glu
+ virtual/lapack
+ virtual/libffi
+ virtual/opengl
+ dev-qt/qtgui:4
+ dev-qt/qtopengl:4
+ dev-qt/qtsvg:4
+ dev-qt/qtwebkit:4
+ volpack? ( media-libs/volpack )
+ vtk? ( sci-libs/vtk )"
+
+DEPEND="${RDEPEND}
+ dev-lang/python
+ virtual/pkgconfig"
+
+S="${WORKDIR}/${MY_P}-Source"
+
+src_prepare(){
+ epatch \
+ "${FILESDIR}"/${PN}-4.1-fixes.patch \
+ "${FILESDIR}"/${PN}-4.1-python3.patch \
+ "${FILESDIR}"/${P}-use_llvm.patch
+ rm -f CMakeCache.txt
+ find . -type f -name '*.moc.cpp' -exec rm -f {} \;
+ find . -type f -name 'add.so' -exec rm -f {} \;
+}
+
+src_configure() {
+ mycmakeargs+=(
+ -DFORCE_SYSTEM_LIBS=ON
+ -DUSE_LLVM=OFF
+ -DUSE_ITK=OFF
+ -DFFI_INCLUDE_DIR="$(pkg-config --cflags-only-I libffi | sed -e s/-I//)"
+ $(cmake-utils_use_with volpack VOLPACK)
+ $(cmake-utils_use_with vtk VTK)
+ )
+ cmake-utils_src_configure
+}
+
+src_install() {
+ cmake-utils_src_install -j1
+ dodoc ChangeLog
+ newicon images/freemat_small_mod_64.png ${PN}.png
+ make_desktop_entry FreeMat FreeMat
+}
+
+pkg_postinst() {
+ fdo-mime_desktop_database_update
+ elog "Before using ${MY_PN}, do (as a normal user)"
+ elog "FreeMat -i ${EROOT}usr/share/${MY_P}"
+ elog "Then start ${MY_PN}, choose Tools -> Path Tool,"
+ elog "select ${EROOT}usr/share/${MY_P}/toolbox and Add With Subfolders"
+}
+
+pkg_postrm() {
+ fdo-mime_desktop_database_update
+}
diff --git a/sci-mathematics/freemat/metadata.xml b/sci-mathematics/freemat/metadata.xml
new file mode 100644
index 000000000000..380a6559bf46
--- /dev/null
+++ b/sci-mathematics/freemat/metadata.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <herd>sci-mathematics</herd>
+ <longdescription lang="en">
+ FreeMat is an open sources environment for rapid engineering and
+ scientific prototyping and data processing. It is similar to
+ commercial systems such as MATLAB from Mathworks. FreeMat includes a
+ codeless interface to external C/C++/FORTRAN code,
+ parallel/distributed algorithm development (via MPI), and plotting
+ and visualization capabilities.
+</longdescription>
+ <use>
+ <flag name="volpack">Add volume rendering via <pkg>media-libs/volpack</pkg></flag>
+ <flag name="vtk">Add 3D capabilities via <pkg>sci-libs/vtk</pkg></flag>
+ </use>
+ <upstream>
+ <remote-id type="sourceforge">freemat</remote-id>
+ </upstream>
+</pkgmetadata>