Update to 0.9.8

Drop parallel make for now
Use libtirpc
Switch to Xorg dummy driver for tests, fail build on test failure
Add patch to fix ppc64 altivec vector usage
Add patches to fix various warnings
This commit is contained in:
Orion Poplawski 2018-05-20 21:19:04 -06:00
parent 8fc7c76d08
commit b91914660f
15 changed files with 835 additions and 103 deletions

1
.gitignore vendored
View File

@ -8,3 +8,4 @@ gdl-0.9rc4.tar.gz
/gdl-0.9.6.tar.gz
/gdl-0.9.6v2.tgz
/gdl-0.9.7.tgz
/gdl-0.9.8.tgz

54
gdl-alias.patch Normal file
View File

@ -0,0 +1,54 @@
diff -up gdl-0.9.8/src/basic_pro_jmg.cpp.alias gdl-0.9.8/src/basic_pro_jmg.cpp
--- gdl-0.9.8/src/basic_pro_jmg.cpp.alias 2018-04-11 19:20:07.670748377 -0600
+++ gdl-0.9.8/src/basic_pro_jmg.cpp 2018-04-12 09:01:16.578294989 -0600
@@ -23,6 +23,7 @@
#include "envt.hpp"
#include "dinterpreter.hpp"
+#include "prognode.hpp"
#include "basic_pro_jmg.hpp"
#define MAXNDLL 40
@@ -38,8 +39,8 @@ namespace lib {
using namespace std;
- void (*dynPro[MAXNDLL/2])( EnvT* e);
- BaseGDL*(*dynFun[MAXNDLL/2])( EnvT* e);
+ LibPro dynPro[MAXNDLL/2];
+ LibFun dynFun[MAXNDLL/2];
void point_lun( EnvT* e)
{
@@ -141,11 +142,11 @@ namespace lib {
#if defined(_WIN32) && !defined(__CYGWIN__)
if (funcType == 0) {
- (void* &) dynPro[count_pro] =
- (void *) GetProcAddress(module[count], entryName.c_str());
+ dynPro[count_pro] =
+ (LibPro) GetProcAddress(module[count], entryName.c_str());
} else if (funcType == 1) {
- (BaseGDL* &) dynFun[count_fun] =
- (BaseGDL*) GetProcAddress(module[count], entryName.c_str());
+ dynFun[count_fun] =
+ (LibFun) GetProcAddress(module[count], entryName.c_str());
} else {
printf("Improper function type: %d\n", funcType);
FreeLibrary(module[count]);
@@ -153,11 +154,11 @@ namespace lib {
}
#else
if (funcType == 0) {
- (void* &) dynPro[count_pro] =
- (void *) dlsym(module[count], entryName.c_str());
+ dynPro[count_pro] =
+ (LibPro) dlsym(module[count], entryName.c_str());
} else if (funcType == 1) {
- (BaseGDL* &) dynFun[count_fun] =
- (BaseGDL*) dlsym(module[count], entryName.c_str());
+ dynFun[count_fun] =
+ (LibFun) dlsym(module[count], entryName.c_str());
} else {
printf("Improper function type: %d\n", funcType);
dlclose(module[count]);

View File

@ -1,52 +0,0 @@
From 965eb0af7a532740637c96ac31f7fc5d022d1953 Mon Sep 17 00:00:00 2001
From: Gilles Duvert <gilles-duvert@users.sourceforge.net>
Date: Tue, 24 Jan 2017 10:05:41 +0000
Subject: [PATCH] reverted to previous version since correction of bug#709 was
making a mess with array dimensions.
---
src/accessdesc.hpp | 3 ++-
src/dimension.hpp | 16 +++++++++-------
2 files changed, 11 insertions(+), 8 deletions(-)
diff --git a/src/accessdesc.hpp b/src/accessdesc.hpp
index 0309d11..b4d78a9 100644
--- a/src/accessdesc.hpp
+++ b/src/accessdesc.hpp
@@ -317,7 +317,8 @@ class DotAccessDescT
// dim >> topDim;
dim >> ix[d]->GetDim();
}
- dim.Purge();
+// Was added to solve bug 709 but may have side effects.
+// dim.Purge();
}
private:
diff --git a/src/dimension.hpp b/src/dimension.hpp
index 6469648..1345ff5 100644
--- a/src/dimension.hpp
+++ b/src/dimension.hpp
@@ -378,13 +378,15 @@ class dimension
// throw away unused ranks (ie. ranks == 1)
void Purge()
{
- //old version: produce bug #709
-// for(; rank>1 && dim[rank-1] <= 1; --rank);
- int m=rank-1;
- for (; m>0; --m) if (dim[m]<=1) {
- for (int j=m; j<rank-1; ++j) dim[j]=dim[j+1];
- rank--;
- }
+ //The following line produces bug #709
+ for(; rank>1 && dim[rank-1] <= 1; --rank);
+// However those following lines are too strict: test=fltarr(1, 1, 114) & help,test
+// gives: TEST FLOAT = Array[1, 114] instead of good answer TEST FLOAT = Array[1, 1, 114]
+// int m=rank-1;
+// for (; m>0; --m) if (dim[m]<=1) {
+// for (int j=m; j<rank-1; ++j) dim[j]=dim[j+1];
+// rank--;
+// }
}
// set the rank to r (pads 1s) if it is smaller than r

122
gdl-catch.patch Normal file
View File

@ -0,0 +1,122 @@
diff -up gdl-0.9.8/src/basic_fun.cpp.catch gdl-0.9.8/src/basic_fun.cpp
--- gdl-0.9.8/src/basic_fun.cpp.catch 2018-03-26 03:57:27.000000000 -0600
+++ gdl-0.9.8/src/basic_fun.cpp 2018-03-26 16:54:13.508994366 -0600
@@ -1505,7 +1505,7 @@ namespace lib {
if( !compileFlags) GDLInterpreter::ReportCompileError( ex);
return new DIntGDL( 0);
}
- catch( ANTLRException ex)
+ catch( ANTLRException& ex)
{
if( !compileFlags) cerr << "EXECUTE: Lexer/Parser exception: " <<
ex.getMessage() << endl;
@@ -1529,7 +1529,7 @@ namespace lib {
return new DIntGDL( 0);
}
- catch( ANTLRException ex)
+ catch( ANTLRException& ex)
{
if( !compileFlags) cerr << "EXECUTE: Compiler exception: " <<
ex.getMessage() << endl;
@@ -1570,7 +1570,7 @@ namespace lib {
ex.getMessage() << endl;
return new DIntGDL( 0);
}
- catch( ANTLRException ex)
+ catch( ANTLRException& ex)
{
caller->ResizeForLoops( nForLoopsIn);
@@ -6456,7 +6456,7 @@ template <typename Ty, typename T2> sta
try {
oStruct = e->GetObjHeap( objRef);
}
- catch ( GDLInterpreter::HeapException )
+ catch ( GDLInterpreter::HeapException& )
{ // non valid object
if( count)
e->SetKW( countIx, new DLongGDL( 0));
diff -up gdl-0.9.8/src/dinterpreter.cpp.catch gdl-0.9.8/src/dinterpreter.cpp
--- gdl-0.9.8/src/dinterpreter.cpp.catch 2018-03-26 03:57:27.000000000 -0600
+++ gdl-0.9.8/src/dinterpreter.cpp 2018-03-26 16:53:15.635298830 -0600
@@ -143,7 +143,7 @@ DStructGDL* GDLInterpreter::ObjectStruct
try {
oStructGDL= GetObjHeap( o);
}
- catch ( HeapException)
+ catch ( HeapException&)
{
throw GDLException( mp, "Object not valid: "+Name(self));
}
@@ -578,12 +578,12 @@ bool GDLInterpreter::CompileFile(const s
return false;
}
}
- catch( GDLException e)
+ catch( GDLException& e)
{
ReportCompileError( e, f);
return false;
}
- catch( ANTLRException e)
+ catch( ANTLRException& e)
{
cerr << "Lexer/Parser exception: " << e.getMessage() << endl;
return false;
@@ -612,13 +612,13 @@ bool GDLInterpreter::CompileFile(const s
if( treeParser.ActiveProCompiled()) RetAll();
}
- catch( GDLException e)
+ catch( GDLException& e)
{
ReportCompileError( e, f);
if( treeParser.ActiveProCompiled()) RetAll();
return false;
}
- catch( ANTLRException e)
+ catch( ANTLRException& e)
{
cerr << "Compiler exception: " << e.getMessage() << endl;
if( treeParser.ActiveProCompiled()) RetAll();
@@ -705,7 +705,7 @@ DInterpreter::CommandCode DInterpreter::
// default is more verbose
CompileFile( argstr); //, origstr);
}
- catch( RetAllException)
+ catch( RetAllException&)
{
// delay the RetAllException until finished
retAll = true;
@@ -771,7 +771,7 @@ DInterpreter::CommandCode DInterpreter::
// default is more verbose
CompileFile( argstr); //, origstr);
}
- catch( RetAllException)
+ catch( RetAllException&)
{
// delay the RetAllException until finished
retAll = true;
diff -up gdl-0.9.8/src/getfmtast.cpp.catch gdl-0.9.8/src/getfmtast.cpp
--- gdl-0.9.8/src/getfmtast.cpp.catch 2018-03-26 03:57:27.000000000 -0600
+++ gdl-0.9.8/src/getfmtast.cpp 2018-03-26 16:54:32.793899215 -0600
@@ -68,15 +68,15 @@ RefFMTNode GetFMTAST( DString fmtString)
cout << endl;
#endif
}
- catch( GDLException ex)
+ catch( GDLException& ex)
{
throw GDLException("Format: "+ex.getMessage());
}
- catch( antlr::ANTLRException ex)
+ catch( antlr::ANTLRException& ex)
{
throw GDLException("Format parser: "+ex.getMessage());
}
- catch( exception ex)
+ catch( exception& ex)
{
throw GDLException("Format exception: "+string(ex.what()));
}

View File

@ -1,20 +0,0 @@
diff -up gdl-0.9.6/src/specializations.hpp.gcc6 gdl-0.9.6/src/specializations.hpp
--- gdl-0.9.6/src/specializations.hpp.gcc6 2015-08-24 15:26:47.000000000 -0600
+++ gdl-0.9.6/src/specializations.hpp 2016-03-03 16:30:46.694379312 -0700
@@ -534,16 +534,6 @@ void Data_<SpDString>::MinMax( DLong* mi
// default_io.cpp
template<>
-std::istream& operator>>(std::istream& i, Data_<SpDFloat>& data_);
-template<>
-std::istream& operator>>(std::istream& i, Data_<SpDDouble>& data_);
-template<>
-std::istream& operator>>(std::istream& i, Data_<SpDComplex>& data_);
-template<>
-std::istream& operator>>(std::istream& i, Data_<SpDComplexDbl>& data_);
-template<>
-std::istream& operator>>(std::istream& is, Data_<SpDString>& data_);
-template<>
std::ostream& Data_<SpDLong>::ToStream(std::ostream& o, SizeT w, SizeT* actPosPtr);
template<>
std::ostream& Data_<SpDULong>::ToStream(std::ostream& o, SizeT w, SizeT* actPosPtr);

288
gdl-return.patch Normal file
View File

@ -0,0 +1,288 @@
diff -up gdl-0.9.8/src/basic_fun.cpp.return gdl-0.9.8/src/basic_fun.cpp
--- gdl-0.9.8/src/basic_fun.cpp.return 2018-04-11 16:33:39.117920749 -0600
+++ gdl-0.9.8/src/basic_fun.cpp 2018-04-11 16:33:39.124920716 -0600
@@ -4420,6 +4420,7 @@ BaseGDL* where_fun(EnvT* e) {
}
}
}
+ return NULL; // should not reach
}
// uses MergeSort
// 2 parts in the code: without "width" or with "width" (limited to 1D and 2D)
@@ -6249,6 +6250,7 @@ template <typename Ty, typename T2> sta
}
} else e->Throw("Operand must be integer:" + e->GetParString(0));
+ return NULL; // should not reach
}
BaseGDL* shift_fun( EnvT* e) {
@@ -6544,6 +6546,7 @@ template <typename Ty, typename T2> sta
}
return res;
} else e->Throw("Object reference type required in this context: " + e->GetParString(0));
+ return NULL; // should not reach
}
BaseGDL* n_tags( EnvT* e)
@@ -8328,6 +8331,7 @@ template <typename Ty, typename T2> sta
}
}
e->Throw("Expecting string or byte array as a first parameter");
+ return NULL; // should not reach
}
BaseGDL* get_drive_list(EnvT* e)
@@ -8442,6 +8446,7 @@ template <typename Ty, typename T2> sta
return res;
}
+ return NULL; // should not reach
}
// note: changes here MUST be reflected in scope_varfetch_reference() as well
diff -up gdl-0.9.8/src/basic_pro_jmg.cpp.return gdl-0.9.8/src/basic_pro_jmg.cpp
--- gdl-0.9.8/src/basic_pro_jmg.cpp.return 2018-03-26 03:57:27.000000000 -0600
+++ gdl-0.9.8/src/basic_pro_jmg.cpp 2018-04-11 19:20:07.670748377 -0600
@@ -589,6 +589,7 @@ namespace lib {
break;
}
assert( false);
+ return NULL; // Silence warning
}
diff -up gdl-0.9.8/src/graphicsdevice.hpp.return gdl-0.9.8/src/graphicsdevice.hpp
--- gdl-0.9.8/src/graphicsdevice.hpp.return 2018-03-26 03:57:27.000000000 -0600
+++ gdl-0.9.8/src/graphicsdevice.hpp 2018-04-11 19:21:25.832376682 -0600
@@ -220,8 +220,8 @@ public:
virtual void MaxXYSize(DLong *xsize, DLong *ysize) {
*xsize=1200, *ysize=800; return;}
virtual DLong GetDecomposed() { return -1;}
- virtual BaseGDL* GetFontnames() { ThrowGDLException("DEVICE: Keyword GET_FONTNAMES not allowed for call to: DEVICE" );}//{return NULL;}
- virtual DLong GetFontnum() { ThrowGDLException("DEVICE: Keyword GET_FONTNUM not allowed for call to: DEVICE" );}//{return -1;}
+ virtual BaseGDL* GetFontnames() { ThrowGDLException("DEVICE: Keyword GET_FONTNAMES not allowed for call to: DEVICE" ); return NULL;}
+ virtual DLong GetFontnum() { ThrowGDLException("DEVICE: Keyword GET_FONTNUM not allowed for call to: DEVICE" ); return -1;}
virtual bool SetFont(DString f) {static int warning_sent=1; if (warning_sent) {Warning("SET_FONT not active for this device (FIXME)."); warning_sent=0;} return true;}
virtual DString GetCurrentFont() {return NULL;}
virtual DLong GetGraphicsFunction() { return -1;}
@@ -360,8 +360,8 @@ public:
bool UnsetFocus();
bool Decomposed(bool value);
DLong GetDecomposed();
- BaseGDL* GetFontnames(){ ThrowGDLException("DEVICE: Keyword GET_FONTNAMES not allowed for call to: DEVICE" );}//{return NULL;}
- DLong GetFontnum(){ ThrowGDLException("DEVICE: Keyword GET_FONTNUM not allowed for call to: DEVICE" );}//{return -1;}
+ BaseGDL* GetFontnames(){ ThrowGDLException("DEVICE: Keyword GET_FONTNAMES not allowed for call to: DEVICE" ); return NULL;}
+ DLong GetFontnum(){ ThrowGDLException("DEVICE: Keyword GET_FONTNUM not allowed for call to: DEVICE" ); return -1;}
bool SetFont(DString f) {fontname=f; return true;}
DString GetCurrentFont() {return fontname;}
bool SetBackingStore(int value);
diff -up gdl-0.9.8/src/gzstream.hpp.return gdl-0.9.8/src/gzstream.hpp
--- gdl-0.9.8/src/gzstream.hpp.return 2018-03-26 03:57:27.000000000 -0600
+++ gdl-0.9.8/src/gzstream.hpp 2018-04-11 16:33:39.125920711 -0600
@@ -75,9 +75,9 @@ public:
std::streampos pubseekoff(std::streamoff off, std::ios_base::seekdir way, std::ios_base::openmode which=std::ios_base::in|std::ios_base::out);
//hacks for not being lost with input gzipped streams
std::streampos getPosition(){return position;}
- std::streampos setPosition(long pos){position=pos;}
- std::streampos incrementPosition(long pos=1){position+=pos;}
- std::streampos decrementPosition(long pos=1){position-=pos;}
+ void setPosition(long pos){position=pos;}
+ void incrementPosition(long pos=1){position+=pos;}
+ void decrementPosition(long pos=1){position-=pos;}
};
class gzstreambase : virtual public std::ios {
diff -up gdl-0.9.8/src/hdf_fun.cpp.return gdl-0.9.8/src/hdf_fun.cpp
--- gdl-0.9.8/src/hdf_fun.cpp.return 2018-03-26 03:57:27.000000000 -0600
+++ gdl-0.9.8/src/hdf_fun.cpp 2018-04-11 19:22:44.477002324 -0600
@@ -106,6 +106,7 @@ namespace lib {
return new DLongGDL( Vattach(hdf_id, vg_ref, "r"));
else if (e->KeywordSet( writeIx ))
return new DLongGDL( Vattach(hdf_id, vg_ref, "w"));
+ return NULL;
}
diff -up gdl-0.9.8/src/hdf_pro.cpp.return gdl-0.9.8/src/hdf_pro.cpp
--- gdl-0.9.8/src/hdf_pro.cpp.return 2018-03-26 03:57:27.000000000 -0600
+++ gdl-0.9.8/src/hdf_pro.cpp 2018-04-11 16:33:39.126920706 -0600
@@ -34,7 +34,7 @@ namespace lib {
using namespace std;
template< typename T>
- BaseGDL* hdf_sd_getdata_template( EnvT* e, dimension dim, int32 sds_id,
+ void hdf_sd_getdata_template( EnvT* e, dimension dim, int32 sds_id,
int32 start[], int32 edges[], int32 stride[],
DLongGDL* strideKW)
{
@@ -622,7 +622,7 @@ namespace lib {
}
template< typename T>
- BaseGDL* hdf_sd_getdscl_template(EnvT* e, DLong dim_size, int32 dim_id)
+ void hdf_sd_getdscl_template(EnvT* e, DLong dim_size, int32 dim_id)
{
T* data = new T(dimension(dim_size), BaseGDL::NOZERO);
SDgetdimscale(dim_id, data->DataAddr());
diff -up gdl-0.9.8/src/list.cpp.return gdl-0.9.8/src/list.cpp
--- gdl-0.9.8/src/list.cpp.return 2018-03-26 03:57:27.000000000 -0600
+++ gdl-0.9.8/src/list.cpp 2018-04-11 19:24:14.900571515 -0600
@@ -149,6 +149,7 @@
{
ThrowFromInternalUDSub( e, "SELF object ID <"+i2s(selfID)+"> not found.");
}
+ return NULL;
}
void LIST__ToStream( DStructGDL* oStructGDL, std::ostream& o, SizeT w, SizeT* actPosPtr)
diff -up gdl-0.9.8/src/magick_cl.cpp.return gdl-0.9.8/src/magick_cl.cpp
--- gdl-0.9.8/src/magick_cl.cpp.return 2018-03-26 03:57:27.000000000 -0600
+++ gdl-0.9.8/src/magick_cl.cpp 2018-04-11 19:27:37.564602966 -0600
@@ -125,6 +125,7 @@ namespace lib {
} catch (Exception &error_) {
e->Throw(error_.what());
}
+ return NULL;
}
BaseGDL * magick_ping(EnvT* e) {
@@ -332,6 +333,7 @@ namespace lib {
} catch (Exception &error_) {
e->Throw(error_.what());
}
+ return NULL;
}
//CLOSE, magic_id
@@ -411,6 +413,7 @@ namespace lib {
} catch (Exception &error_) {
e->Throw(error_.what());
}
+ return NULL;
}
//MAGICK_READCOLORMAPRGB, mid, red, green, blue
@@ -572,6 +575,7 @@ namespace lib {
} catch (Exception &error_) {
e->Throw(error_.what());
}
+ return NULL;
}
// MAGICK_WRITE, mid, gdlImageArray, rgb=rgb
@@ -706,6 +710,7 @@ namespace lib {
} catch (Exception &error_) {
e->Throw(error_.what());
}
+ return NULL;
}
//magickNumber=MAGICK_MAGICK(mid [, "imageType"])
@@ -727,6 +732,7 @@ namespace lib {
} catch (Exception &error_) {
e->Throw(error_.what());
}
+ return NULL;
}
//nrows=MAGICK_ROWS(mid)
@@ -740,6 +746,7 @@ namespace lib {
} catch (Exception &error_) {
e->Throw(error_.what());
}
+ return NULL;
}
//ncols=MAGICK_COLUMNS(mid)
@@ -753,6 +760,7 @@ namespace lib {
} catch (Exception &error_) {
e->Throw(error_.what());
}
+ return NULL;
}
//bool=MAGICK_INDEXEDCOLOR(mid)
BaseGDL* magick_IndexedColor(EnvT* e) {
@@ -769,7 +777,7 @@ namespace lib {
} catch (Exception &error_) {
e->Throw(error_.what());
}
-
+ return NULL;
}
//MAGICK_QUALITY, mid, quality
diff -up gdl-0.9.8/src/math_fun_jmg.cpp.return gdl-0.9.8/src/math_fun_jmg.cpp
--- gdl-0.9.8/src/math_fun_jmg.cpp.return 2018-03-26 03:57:27.000000000 -0600
+++ gdl-0.9.8/src/math_fun_jmg.cpp 2018-04-11 19:29:36.258031486 -0600
@@ -288,6 +288,7 @@ extern "C" {
return res;
}
assert( false);
+ return NULL;
}
};
diff -up gdl-0.9.8/src/math_fun_ng.cpp.return gdl-0.9.8/src/math_fun_ng.cpp
--- gdl-0.9.8/src/math_fun_ng.cpp.return 2018-03-26 03:57:27.000000000 -0600
+++ gdl-0.9.8/src/math_fun_ng.cpp 2018-04-11 19:30:57.610639792 -0600
@@ -371,6 +371,7 @@ namespace lib {
return Yout;
}
assert( false);
+ return NULL;
}// RK4_fun
}//namespace
diff -up gdl-0.9.8/src/plotting_convert_coord.cpp.return gdl-0.9.8/src/plotting_convert_coord.cpp
--- gdl-0.9.8/src/plotting_convert_coord.cpp.return 2018-03-26 03:57:27.000000000 -0600
+++ gdl-0.9.8/src/plotting_convert_coord.cpp 2018-04-11 20:42:10.177037332 -0600
@@ -368,6 +368,7 @@ namespace lib {
delete res;
return res1;
}
+ return NULL; // Should not reach
}
//THE FOLLOWING ARE POSSIBLY THE WORST WAY TO DO THE JOB. At least they are to be used *only*
diff -up gdl-0.9.8/src/pythongdl.cpp.return gdl-0.9.8/src/pythongdl.cpp
--- gdl-0.9.8/src/pythongdl.cpp.return 2018-03-26 03:57:27.000000000 -0600
+++ gdl-0.9.8/src/pythongdl.cpp 2018-04-11 16:33:39.127920702 -0600
@@ -272,6 +272,7 @@ int GDLEventHandlerPy()
GDLEventHandler();
if( oldInputHook != NULL)
(*oldInputHook)();
+ return 0;
}
// Execute a GDL subroutine
diff -up gdl-0.9.8/src/triangulation.cpp.return gdl-0.9.8/src/triangulation.cpp
--- gdl-0.9.8/src/triangulation.cpp.return 2018-03-26 03:57:27.000000000 -0600
+++ gdl-0.9.8/src/triangulation.cpp 2018-04-11 20:43:03.965777173 -0600
@@ -1108,6 +1108,7 @@ namespace lib {
BaseGDL* qgrid3_fun ( EnvT* e)
{
e->Throw("Please Write this function in GDL.");
+ return NULL;
}
#endif
}
diff -up gdl-0.9.8/src/widget.cpp.return gdl-0.9.8/src/widget.cpp
--- gdl-0.9.8/src/widget.cpp.return 2018-03-26 03:57:27.000000000 -0600
+++ gdl-0.9.8/src/widget.cpp 2018-04-11 20:45:36.447036861 -0600
@@ -45,6 +45,7 @@ wxRealPoint GetRequestedUnitConversionFa
if (the_units==0) return wxRealPoint(1,1);
if (the_units==1) return wxRealPoint(sx*25.4,sy*25.4);
if (the_units==2) return wxRealPoint(sx*10.0,sy*10.0);
+ return wxRealPoint(0,0); // Should not reach
}
void GDLWidget::ChangeUnitConversionFactor( EnvT* e)
@@ -2231,6 +2232,7 @@ endwait:
}
} while (infinity);
#endif
+ return NULL; // Should not reach
}
void widget_control( EnvT* e ) {

11
gdl-saverestore.patch Normal file
View File

@ -0,0 +1,11 @@
diff -up gdl-0.9.8/src/saverestore.cpp.return gdl-0.9.8/src/saverestore.cpp
--- gdl-0.9.8/src/saverestore.cpp.return 2018-03-26 03:57:27.000000000 -0600
+++ gdl-0.9.8/src/saverestore.cpp 2018-04-11 16:33:39.129920693 -0600
@@ -164,6 +164,7 @@ namespace lib {
uint32_t writeEnd(XDR *xdrs) {
uint32_t cur=writeNewRecordHeader(xdrs, 6);
+ return cur;
}
int getVersion(XDR* xdrs) {

63
gdl-sign.patch Normal file
View File

@ -0,0 +1,63 @@
diff -up gdl-0.9.8/src/dinterpreter.cpp.sign gdl-0.9.8/src/dinterpreter.cpp
--- gdl-0.9.8/src/dinterpreter.cpp.sign 2018-04-14 20:29:23.612484457 -0600
+++ gdl-0.9.8/src/dinterpreter.cpp 2018-04-14 20:29:23.628484629 -0600
@@ -666,7 +666,7 @@ DInterpreter::CommandCode DInterpreter::
DInterpreter::CommandCode DInterpreter::CmdCompile( const string& command)
{
string cmdstr = command;
- int sppos = cmdstr.find(" ",0);
+ size_t sppos = cmdstr.find(" ",0);
if (sppos == string::npos)
{
cout << "Interactive COMPILE not implemented yet." << endl;
@@ -676,7 +676,7 @@ DInterpreter::CommandCode DInterpreter::
bool retAll = false; // Remember if Retall is needed
// Parse each file name
- int pos = sppos + 1;
+ size_t pos = sppos + 1;
while (pos < command.length())
{
sppos = command.find(" ",pos);
@@ -737,7 +737,7 @@ DInterpreter::CommandCode DInterpreter::
bool retAll = false; // Remember if Retall is needed
// Parse each file name
- int pos = sppos + 1;
+ size_t pos = sppos + 1;
while (pos < command.length())
{
sppos = command.find(" ",pos);
@@ -799,7 +799,7 @@ DInterpreter::CommandCode DInterpreter::
{
string cmdstr = command;
string args;
- int sppos = cmdstr.find(" ",0);
+ size_t sppos = cmdstr.find(" ",0);
if (sppos != string::npos) {
args = cmdstr.substr(sppos+1);
cmdstr = cmdstr.substr(0, sppos);
diff -up gdl-0.9.8/src/GDLLexer.cpp.sign gdl-0.9.8/src/GDLLexer.cpp
--- gdl-0.9.8/src/GDLLexer.cpp.sign 2018-03-26 03:57:27.000000000 -0600
+++ gdl-0.9.8/src/GDLLexer.cpp 2018-04-14 20:30:05.656936102 -0600
@@ -434,7 +434,7 @@ void GDLLexer::mINCLUDE(bool _createToke
std::string name = f->getText();
// find comments on the same line
- long pos = name.find_first_of(';', 0);
+ size_t pos = name.find_first_of(';', 0);
if( pos != std::string::npos) // remove them
name = name.substr(0, pos);
diff -up gdl-0.9.8/src/GDLParser.cpp.sign gdl-0.9.8/src/GDLParser.cpp
--- gdl-0.9.8/src/GDLParser.cpp.sign 2018-03-26 03:57:27.000000000 -0600
+++ gdl-0.9.8/src/GDLParser.cpp 2018-04-14 20:29:23.630484650 -0600
@@ -6773,7 +6773,7 @@ void GDLParser::arrayindex_list() {
antlr::ASTPair currentAST;
RefDNode arrayindex_list_AST = RefDNode(antlr::nullAST);
- int rank = 1;
+ SizeT rank = 1;
if ((LA(1) == LSQUARE)) {

11
gdl-std.patch Normal file
View File

@ -0,0 +1,11 @@
diff -up gdl-0.9.8/src/basic_fun.cpp.std gdl-0.9.8/src/basic_fun.cpp
--- gdl-0.9.8/src/basic_fun.cpp.std 2018-04-11 09:17:16.200257202 -0600
+++ gdl-0.9.8/src/basic_fun.cpp 2018-04-11 09:20:12.854448333 -0600
@@ -111,6 +111,7 @@ namespace lib {
std::vector<char*> command_line_args;
// using namespace std;
+ using std::isinf;
using std::isnan;
using namespace antlr;

12
gdl-uninit.patch Normal file
View File

@ -0,0 +1,12 @@
diff -up gdl-0.9.8/src/GDLInterpreter.cpp.uninit gdl-0.9.8/src/GDLInterpreter.cpp
--- gdl-0.9.8/src/GDLInterpreter.cpp.uninit 2018-04-11 16:33:42.112906758 -0600
+++ gdl-0.9.8/src/GDLInterpreter.cpp 2018-04-11 22:14:29.401901171 -0600
@@ -2905,7 +2905,7 @@ void GDLInterpreter::tag_array_expr(Prog
BaseGDL* GDLInterpreter::r_dot_indexable_expr(ProgNodeP _t,
DotAccessDescT* aD
) {
- BaseGDL* res;
+ BaseGDL* res = NULL;
ProgNodeP r_dot_indexable_expr_AST_in = (_t == ProgNodeP(ASTNULL)) ? ProgNodeP(antlr::nullAST) : _t;
switch ( _t->getType()) {

25
gdl-vector.patch Normal file
View File

@ -0,0 +1,25 @@
diff -up gdl-0.9.8/src/medianfilter.cpp.vector gdl-0.9.8/src/medianfilter.cpp
--- gdl-0.9.8/src/medianfilter.cpp.vector 2018-03-26 03:57:27.000000000 -0600
+++ gdl-0.9.8/src/medianfilter.cpp 2018-05-20 15:19:38.072948145 -0600
@@ -673,8 +673,8 @@ static inline void histogram_add( const
#elif defined(__ALTIVEC__)
static inline void histogram_add( const uint16_t x[16], uint16_t y[16] )
{
- *(vector unsigned short*) &y[0] = vec_add( *(vector unsigned short*) &y[0], *(vector unsigned short*) &x[0] );
- *(vector unsigned short*) &y[8] = vec_add( *(vector unsigned short*) &y[8], *(vector unsigned short*) &x[8] );
+ *(__vector unsigned short*) &y[0] = vec_add( *(__vector unsigned short*) &y[0], *(__vector unsigned short*) &x[0] );
+ *(__vector unsigned short*) &y[8] = vec_add( *(__vector unsigned short*) &y[8], *(__vector unsigned short*) &x[8] );
}
#else
static inline void histogram_add( const uint16_t x[16], uint16_t y[16] )
@@ -707,8 +707,8 @@ static inline void histogram_sub( const
#elif defined(__ALTIVEC__)
static inline void histogram_sub( const uint16_t x[16], uint16_t y[16] )
{
- *(vector unsigned short*) &y[0] = vec_sub( *(vector unsigned short*) &y[0], *(vector unsigned short*) &x[0] );
- *(vector unsigned short*) &y[8] = vec_sub( *(vector unsigned short*) &y[8], *(vector unsigned short*) &x[8] );
+ *(__vector unsigned short*) &y[0] = vec_sub( *(__vector unsigned short*) &y[0], *(__vector unsigned short*) &x[0] );
+ *(__vector unsigned short*) &y[8] = vec_sub( *(__vector unsigned short*) &y[8], *(__vector unsigned short*) &x[8] );
}
#else
static inline void histogram_sub( const uint16_t x[16], uint16_t y[16] )

30
gdl-warnings.patch Normal file
View File

@ -0,0 +1,30 @@
diff -up gdl-0.9.8/src/gdlc.g.warnings gdl-0.9.8/src/gdlc.g
--- gdl-0.9.8/src/gdlc.g.warnings 2018-03-26 03:57:27.000000000 -0600
+++ gdl-0.9.8/src/gdlc.g 2018-04-14 21:04:41.196663086 -0600
@@ -1217,7 +1217,7 @@ numeric_constant!//
arrayindex_list
{
- int rank = 1;
+ SizeT rank = 1;
}
: LSQUARE! arrayindex ({++rank <= MAXRANK}? COMMA! arrayindex)* RSQUARE!
| { IsRelaxed()}? LBRACE! arrayindex
@@ -1948,7 +1948,7 @@ tokens {
{
// Stuff for include files (@filename)
private:
- std::auto_ptr<std::ifstream> inputFile; // stores ifsteam* and deletes
+ std::unique_ptr<std::ifstream> inputFile; // stores ifsteam* and deletes
// it when it is deleted itself
antlr::TokenStreamSelector* selector;
@@ -2071,7 +2071,7 @@ INCLUDE!
std::string name = f->getText();
// find comments on the same line
- long pos = name.find_first_of(';', 0);
+ size_t pos = name.find_first_of(';', 0);
if( pos != std::string::npos) // remove them
name = name.substr(0, pos);

112
gdl.spec
View File

@ -1,6 +1,6 @@
Name: gdl
Version: 0.9.7
Release: 11%{?dist}
Version: 0.9.8
Release: 1%{?dist}
Summary: GNU Data Language
Group: Applications/Engineering
@ -10,16 +10,30 @@ Source0: http://downloads.sourceforge.net/gnudatalanguage/%{name}-%{versi
Source1: gdl.csh
Source2: gdl.sh
Source3: makecvstarball
Source4: xorg.conf
# Build with system antlr library. Request for upstream change here:
# https://sourceforge.net/tracker/index.php?func=detail&aid=2685215&group_id=97659&atid=618686
Patch1: gdl-antlr.patch
# Fix problem with arra generation
Patch2: gdl-array.patch
# Fix build with gcc 6
# https://sourceforge.net/p/gnudatalanguage/bugs/686/
# https://sourceforge.net/p/gnudatalanguage/bugs/688/
Patch4: gdl-gcc6.patch
# Catch by reference
# https://github.com/gnudatalanguage/gdl/pull/5
Patch2: gdl-catch.patch
# https://github.com/gnudatalanguage/gdl/pull/142
Patch3: gdl-std.patch
# Silence some (harmless) warnings about return values
Patch4: gdl-return.patch
# https://github.com/gnudatalanguage/gdl/pull/274
Patch5: gdl-sign.patch
# https://github.com/gnudatalanguage/gdl/pull/275
Patch6: gdl-uninit.patch
# Fix -Wstrict-aliasing warning
# https://github.com/gnudatalanguage/gdl/pull/162
Patch7: gdl-alias.patch
# https://github.com/gnudatalanguage/gdl/pull/276
Patch8: gdl-warnings.patch
#
Patch9: gdl-vector.patch
# Fix test_save_restore segfault with gcc 8
Patch10: gdl-saverestore.patch
#RHEL5 doesn't have the needed antlr version/headers, has old plplot
%if 0%{?rhel} == 5
@ -49,6 +63,7 @@ BuildRequires: grib_api-static
%endif
%endif
BuildRequires: eigen3-static
BuildRequires: libtirpc-devel
#TODO - Build with mpi support
#BuildRequires: mpich2-devel
BuildRequires: pslib-devel
@ -61,7 +76,7 @@ BuildRequires: udunits2-devel
BuildRequires: wxGTK-devel
BuildRequires: cmake
# For tests
BuildRequires: xorg-x11-server-Xvfb
BuildRequires: xorg-x11-drv-dummy
BuildRequires: metacity
# Needed to pull in drivers
Requires: plplot
@ -110,8 +125,17 @@ Provides: %{name}-runtime = %{version}-%{release}
%setup -q -n %{name}-%{version}
rm -rf src/antlr
%patch1 -p1 -b .antlr
%patch2 -p1 -b .array
%patch4 -p1 -b .gcc6
%patch2 -p1 -b .catch
%patch3 -p1 -b .std
%patch4 -p1 -b .return
%patch5 -p1 -b .sign
%patch6 -p1 -b .uninit
%patch7 -p1 -b .alias
%patch8 -p1 -b .warnings
%patch9 -p1 -b .vector
%patch10 -p1 -b .saverestore
# Stray link
rm src/gdl
pushd src
for f in *.g
@ -140,12 +164,12 @@ mkdir build build-python
#Build the standalone executable
pushd build
%{cmake} %{cmake_opts} ..
make %{?_smp_mflags}
make #{?_smp_mflags}
popd
#Build the python module
pushd build-python
%{cmake} %{cmake_opts} -DPYTHON_MODULE=ON ..
make %{?_smp_mflags}
make #{?_smp_mflags}
popd
@ -168,37 +192,57 @@ install -m 0644 %SOURCE2 $RPM_BUILD_ROOT/%{_sysconfdir}/profile.d
%check
cd build
# test_bug_3275334 and window_background appear to need to read from display
# test_bug_3147146 failure
# https://sourceforge.net/p/gnudatalanguage/bugs/619/
# test_bug_3285659 failure
# https://sourceforge.net/p/gnudatalanguage/bugs/387/
# test_routine_names failure
# https://sourceforge.net/p/gnudatalanguage/bugs/647/
# test_zip - https://sourceforge.net/p/gnudatalanguage/bugs/632/
cat > xrun.sh <<'EOF'
cp %SOURCE4 .
if [ -x /usr/libexec/Xorg ]; then
Xorg=/usr/libexec/Xorg
elif [ -x /usr/libexec/Xorg.bin ]; then
Xorg=/usr/libexec/Xorg.bin
else
Xorg=/usr/bin/Xorg
fi
$Xorg -noreset +extension GLX +extension RANDR +extension RENDER -logfile ./xorg.log -config ./xorg.conf -configdir . :99 &
export DISPLAY=:99
metacity &
sleep 2
failing_tests='test_(bug_3275334|sem|window_background)'
%ifarch aarch64 ppc
# fft_leak - https://github.com/gnudatalanguage/gdl/issues/147
# file_delete - https://github.com/gnudatalanguage/gdl/issues/148
# fix - https://github.com/gnudatalanguage/gdl/issues/149
# formats - https://github.com/gnudatalanguage/gdl/issues/144
# n_tags - https://github.com/gnudatalanguage/gdl/issues/150
# obj_isa - https://github.com/gnudatalanguage/gdl/issues/151
# parse_url - https://github.com/gnudatalanguage/gdl/issues/153
# resolve_routine - https://github.com/gnudatalanguage/gdl/issues/146
# rounding - https://github.com/gnudatalanguage/gdl/issues/154
# total - https://github.com/gnudatalanguage/gdl/issues/155
failing_tests='test_(fft_leak|file_delete|finite|fix|formats|idlneturl|make_dll|n_tags|obj_isa|parse_url|resolve_routine|rounding|total)'
%ifarch aarch64 ppc %{power64}
# test_fix fails currently on arm
# https://sourceforge.net/p/gnudatalanguage/bugs/622/
# https://bugzilla.redhat.com/show_bug.cgi?id=990749
failing_tests="$failing_tests|test_fix"
%endif
%ifarch aarch64
failing_tests="$failing_tests|test_(l64|xdr)"
%endif
%ifarch %{arm}
# These fail on 32-bit: test_formats test_xdr
failing_tests="$failing_tests|test_(fix|formats|xdr)"
failing_tests="$failing_tests|test_(fix|formats)"
%endif
%ifarch %{ix86}
# These fail on 32-bit: test_formats test_xdr
failing_tests="$failing_tests|test_(formats|xdr)"
failing_tests="$failing_tests|test_(formats|l64|sem|xdr)"
%endif
%ifarch s390x
eailing_tests="$failing_tests|test_(save_restore|window_background)"
%endif
make check ARGS="-V -E '$failing_tests'"
%ifnarch s390x
# test_save_restore hangs on s390x
make check ARGS="-V -R '$failing_tests'" || :
EOF
chmod +x xrun.sh
xvfb-run ./xrun.sh
%endif
kill %1 || :
cat xorg.log
%files
@ -216,6 +260,14 @@ xvfb-run ./xrun.sh
%changelog
* Sun May 20 2018 Orion Poplawski <orion@cora.nwra.com> - 0.9.8-1
- Update to 0.9.8
- Drop parallel make for now
- Use libtirpc
- Switch to Xorg dummy driver for tests, fail build on test failure
- Add patch to fix ppc64 altivec vector usage
- Add patches to fix various warnings
* Thu Mar 01 2018 Iryna Shcherbina <ishcherb@redhat.com> - 0.9.7-11
- Update Python 2 dependency declarations to new packaging standards
(See https://fedoraproject.org/wiki/FinalizingFedoraSwitchtoPython3)

View File

@ -1 +1 @@
SHA512 (gdl-0.9.7.tgz) = 1fef5ccccb31bdb39b5f855ba030fd7bed6b3deacf9aefce7f5afcd7ca48f5d25dfe20d32eb1d1fd25a533f69cabc341d1146e2f8e41f6c986163a9b84fda03b
SHA512 (gdl-0.9.8.tgz) = df7728b6e79a8e812ed022f7fb60d23ad331337d15a77c94d1666a5a1ab63e14c1607520a752ceff999eb65bbde12fa9fffd8d82806455b1c0651cb5f2d92a10

135
xorg.conf Normal file
View File

@ -0,0 +1,135 @@
# This xorg configuration file is meant to be used
# to start a dummy X11 server for graphical testing.
Section "ServerFlags"
Option "DontVTSwitch" "true"
Option "AllowMouseOpenFail" "true"
Option "PciForceNone" "true"
Option "AutoEnableDevices" "false"
Option "AutoAddDevices" "false"
EndSection
Section "InputDevice"
Identifier "dummy_mouse"
Option "CorePointer" "true"
Driver "void"
EndSection
Section "InputDevice"
Identifier "dummy_keyboard"
Option "CoreKeyboard" "true"
Driver "void"
EndSection
Section "Device"
Identifier "dummy_videocard"
Driver "dummy"
Option "ConstantDPI" "true"
#VideoRam 4096000
#VideoRam 256000
VideoRam 192000
EndSection
Section "Monitor"
Identifier "dummy_monitor"
HorizSync 5.0 - 1000.0
VertRefresh 5.0 - 200.0
#This can be used to get a specific DPI, but only for the default resolution:
#DisplaySize 508 317
#NOTE: the highest modes will not work without increasing the VideoRam
# for the dummy video card.
Modeline "32768x32768" 15226.50 32768 35800 39488 46208 32768 32771 32781 32953
Modeline "32768x16384" 7516.25 32768 35544 39192 45616 16384 16387 16397 16478
Modeline "16384x8192" 2101.93 16384 16416 24400 24432 8192 8390 8403 8602
Modeline "8192x4096" 424.46 8192 8224 9832 9864 4096 4195 4202 4301
Modeline "5496x1200" 199.13 5496 5528 6280 6312 1200 1228 1233 1261
Modeline "5280x1080" 169.96 5280 5312 5952 5984 1080 1105 1110 1135
Modeline "5280x1200" 191.40 5280 5312 6032 6064 1200 1228 1233 1261
Modeline "5120x3200" 199.75 5120 5152 5904 5936 3200 3277 3283 3361
Modeline "4800x1200" 64.42 4800 4832 5072 5104 1200 1229 1231 1261
Modeline "3840x2880" 133.43 3840 3872 4376 4408 2880 2950 2955 3025
Modeline "3840x2560" 116.93 3840 3872 4312 4344 2560 2622 2627 2689
Modeline "3840x2048" 91.45 3840 3872 4216 4248 2048 2097 2101 2151
Modeline "3840x1080" 100.38 3840 3848 4216 4592 1080 1081 1084 1093
Modeline "3600x1200" 106.06 3600 3632 3984 4368 1200 1201 1204 1214
Modeline "3288x1080" 39.76 3288 3320 3464 3496 1080 1106 1108 1135
Modeline "2048x2048" 49.47 2048 2080 2264 2296 2048 2097 2101 2151
Modeline "2048x1536" 80.06 2048 2104 2312 2576 1536 1537 1540 1554
Modeline "2560x1600" 47.12 2560 2592 2768 2800 1600 1639 1642 1681
Modeline "2560x1440" 42.12 2560 2592 2752 2784 1440 1475 1478 1513
Modeline "1920x1440" 69.47 1920 1960 2152 2384 1440 1441 1444 1457
Modeline "1920x1200" 26.28 1920 1952 2048 2080 1200 1229 1231 1261
Modeline "1920x1080" 23.53 1920 1952 2040 2072 1080 1106 1108 1135
Modeline "1680x1050" 20.08 1680 1712 1784 1816 1050 1075 1077 1103
Modeline "1600x1200" 22.04 1600 1632 1712 1744 1200 1229 1231 1261
Modeline "1600x900" 33.92 1600 1632 1760 1792 900 921 924 946
Modeline "1440x900" 30.66 1440 1472 1584 1616 900 921 924 946
ModeLine "1366x768" 72.00 1366 1414 1446 1494 768 771 777 803
Modeline "1280x1024" 31.50 1280 1312 1424 1456 1024 1048 1052 1076
Modeline "1280x800" 24.15 1280 1312 1400 1432 800 819 822 841
Modeline "1280x768" 23.11 1280 1312 1392 1424 768 786 789 807
Modeline "1360x768" 24.49 1360 1392 1480 1512 768 786 789 807
Modeline "1024x768" 18.71 1024 1056 1120 1152 768 786 789 807
Modeline "768x1024" 19.50 768 800 872 904 1024 1048 1052 1076
#common resolutions for android devices (both orientations):
Modeline "800x1280" 25.89 800 832 928 960 1280 1310 1315 1345
Modeline "1280x800" 24.15 1280 1312 1400 1432 800 819 822 841
Modeline "720x1280" 30.22 720 752 864 896 1280 1309 1315 1345
Modeline "1280x720" 27.41 1280 1312 1416 1448 720 737 740 757
Modeline "768x1024" 24.93 768 800 888 920 1024 1047 1052 1076
Modeline "1024x768" 23.77 1024 1056 1144 1176 768 785 789 807
Modeline "600x1024" 19.90 600 632 704 736 1024 1047 1052 1076
Modeline "1024x600" 18.26 1024 1056 1120 1152 600 614 617 631
Modeline "536x960" 16.74 536 568 624 656 960 982 986 1009
Modeline "960x536" 15.23 960 992 1048 1080 536 548 551 563
Modeline "600x800" 15.17 600 632 688 720 800 818 822 841
Modeline "800x600" 14.50 800 832 880 912 600 614 617 631
Modeline "480x854" 13.34 480 512 560 592 854 873 877 897
Modeline "848x480" 12.09 848 880 920 952 480 491 493 505
Modeline "480x800" 12.43 480 512 552 584 800 818 822 841
Modeline "800x480" 11.46 800 832 872 904 480 491 493 505
#resolutions for android devices (both orientations)
#minus the status bar
#38px status bar (and width rounded up)
Modeline "800x1242" 25.03 800 832 920 952 1242 1271 1275 1305
Modeline "1280x762" 22.93 1280 1312 1392 1424 762 780 783 801
Modeline "720x1242" 29.20 720 752 856 888 1242 1271 1276 1305
Modeline "1280x682" 25.85 1280 1312 1408 1440 682 698 701 717
Modeline "768x986" 23.90 768 800 888 920 986 1009 1013 1036
Modeline "1024x730" 22.50 1024 1056 1136 1168 730 747 750 767
Modeline "600x986" 19.07 600 632 704 736 986 1009 1013 1036
Modeline "1024x562" 17.03 1024 1056 1120 1152 562 575 578 591
Modeline "536x922" 16.01 536 568 624 656 922 943 947 969
Modeline "960x498" 14.09 960 992 1040 1072 498 509 511 523
Modeline "600x762" 14.39 600 632 680 712 762 779 783 801
Modeline "800x562" 13.52 800 832 880 912 562 575 578 591
Modeline "480x810" 12.59 480 512 552 584 810 828 832 851
Modeline "848x442" 11.09 848 880 920 952 442 452 454 465
Modeline "480x762" 11.79 480 512 552 584 762 779 783 801
EndSection
Section "Screen"
Identifier "dummy_screen"
Device "dummy_videocard"
Monitor "dummy_monitor"
DefaultDepth 24
SubSectionSub "Display"
Viewport 0 0
Depth 24
#Modes "32768x32768" "32768x16384" "16384x8192" "8192x4096" "5120x3200" "3840x2880" "3840x2560" "3840x2048" "2048x2048" "2560x1600" "1920x1440" "1920x1200" "1920x1080" "1600x1200" "1680x1050" "1600x900" "1400x1050" "1440x900" "1280x1024" "1366x768" "1280x800" "1024x768" "1024x600" "800x600" "320x200"
Modes "5120x3200" "3840x2880" "3840x2560" "3840x2048" "2048x2048" "2560x1600" "1920x1440" "1920x1200" "1920x1080" "1600x1200" "1680x1050" "1600x900" "1400x1050" "1440x900" "1280x1024" "1366x768" "1280x800" "1024x768" "1024x600" "800x600" "320x200"
#Virtual 32000 32000
#Virtual 16384 8192
Virtual 8192 4096
#Virtual 5120 3200
EndSubSection
EndSection
Section "ServerLayout"
Identifier "dummy_layout"
Screen "dummy_screen"
InputDevice "dummy_mouse"
InputDevice "dummy_keyboard"
EndSection