merging trunk 17485:17520
authorMartin Poirier <theeth@yahoo.com>
Thu, 20 Nov 2008 21:57:21 +0000 (21:57 +0000)
committerMartin Poirier <theeth@yahoo.com>
Thu, 20 Nov 2008 21:57:21 +0000 (21:57 +0000)
12 files changed:
SConstruct
config/darwin-config.py
config/linux2-config.py
config/openbsd3-config.py
config/sunos5-config.py
config/win32-vc-config.py
source/blender/imbuf/IMB_imbuf.h
source/blender/imbuf/intern/imageprocess.c
source/blender/src/buttons_editing.c
source/blender/src/seqeffects.c
tools/Blender.py
tools/btools.py

index 8e3666a78595e4626983276c6842c090bfcd03ad..16e98e64f6b0f91201c3aaff24cf2948c6354f34 100644 (file)
@@ -249,7 +249,7 @@ if len(B.quickdebug) > 0 and printdebug != 0:
 # remove stdc++ from LLIBS if we are building a statc linked CXXFLAGS
 if env['WITH_BF_STATICCXX']:
        if 'stdc++' in env['LLIBS']:
-               env['LLIBS'] = env['LLIBS'].replace('stdc++', ' ')
+               env['LLIBS'].remove('stdc++')
        else:
                print '\tcould not remove stdc++ library from LLIBS, WITH_BF_STATICCXX may not work for your platform'
 
index ee0cd6e2a875e0364a13d9fa7584961aed173df7..3ef7b7132d97c157cedd3cc8a89f396dd1e4493b 100644 (file)
@@ -216,14 +216,14 @@ CXXFLAGS = [ '-pipe','-fPIC','-funsigned-char', '-fpascal-strings']
 PLATFORM_LINKFLAGS = '-fexceptions -framework CoreServices -framework Foundation -framework IOKit -framework AppKit -framework Carbon -framework AGL -framework AudioUnit -framework AudioToolbox -framework CoreAudio -framework QuickTime'
 
 #note to build succesfully on 10.3.9 SDK you need to patch  10.3.9 by adding the SystemStubs.a lib from 10.4
-LLIBS = 'stdc++ SystemStubs'
+LLIBS = ['stdc++', 'SystemStubs']
 
 # some flags shuffling for different Os versions
 if MAC_MIN_VERS == '10.3':
        CFLAGS = ['-fuse-cxa-atexit']+CFLAGS
        CXXFLAGS = ['-fuse-cxa-atexit']+CXXFLAGS
        PLATFORM_LINKFLAGS = '-fuse-cxa-atexit '+PLATFORM_LINKFLAGS
-       LLIBS = LLIBS + ' crt3.o'
+       LLIBS.append('crt3.o')
        
 if USE_SDK==True:
        SDK_FLAGS=['-isysroot', MACOSX_SDK,'-mmacosx-version-min='+MAC_MIN_VERS]        
index 70bb827a67c3595fd621b875bb54a62b6345e7a2..2984c06d2df9c2fc7bb89f9499565183fb7660f3 100644 (file)
@@ -193,7 +193,7 @@ CC_WARN = ['-Wall']
 
 ##FIX_STUBS_WARNINGS = -Wno-unused
 
-LLIBS = 'util c m dl pthread stdc++'
+LLIBS = ['util', 'c', 'm', 'dl', 'pthread', 'stdc++']
 ##LOPTS = --dynamic
 ##DYNLDFLAGS = -shared $(LDFLAGS)
 
index 49a0c824cd7b84d712f84b33e26bec4db848f8c3..8fc334874f98eb553b0f18143660912367a7023c 100644 (file)
@@ -151,7 +151,7 @@ CC_WARN = ['-Wall']
 
 ##FIX_STUBS_WARNINGS = -Wno-unused
 
-LLIBS = 'm stdc++ pthread util'
+LLIBS = ['m', 'stdc++', 'pthread', 'util']
 ##LOPTS = --dynamic
 ##DYNLDFLAGS = -shared $(LDFLAGS)
 
index 3b76753399d0db7686cd078f9a8f040f69cefa59..a44a9df7c75e7dea8d70dc877535d110dd4657f6 100644 (file)
@@ -165,7 +165,7 @@ CC_WARN = ['-Wall']
 
 ##FIX_STUBS_WARNINGS = -Wno-unused
 
-LLIBS = 'c m dl pthread stdc++'
+LLIBS = ['c', 'm', 'dl', 'pthread', 'stdc++']
 ##LOPTS = --dynamic
 ##DYNLDFLAGS = -shared $(LDFLAGS)
 
index f25d8e223085be18642e366626463150e993d638..d7165401705d9872ed79a4f0b1738a5c81521b6f 100644 (file)
@@ -181,7 +181,7 @@ C_WARN = []
 CC_WARN = []
 CXX_WARN = []
 
-LLIBS = 'ws2_32 vfw32 winmm kernel32 user32 gdi32 comdlg32 advapi32 shfolder shell32 ole32 oleaut32 uuid'
+LLIBS = ['ws2_32', 'vfw32', 'winmm', 'kernel32', 'user32', 'gdi32', 'comdlg32', 'advapi32', 'shfolder', 'shell32', 'ole32', 'oleaut32', 'uuid']
 
 PLATFORM_LINKFLAGS = '''
                        /SUBSYSTEM:CONSOLE
index d4d8030bf1090255b56c9edc62fe547b570182da..8bc1439fd09bc068945eae0924df14c33101fc88 100644 (file)
@@ -403,9 +403,14 @@ void IMB_convert_rgba_to_abgr(struct ImBuf *ibuf);
  *
  * @attention defined in imageprocess.c
  */
-void bicubic_interpolation(struct ImBuf *in, struct ImBuf *out, float x, float y, int xout, int yout);
+void bicubic_interpolation(struct ImBuf *in, struct ImBuf *out, float u, float v, int xout, int yout);
 void neareast_interpolation(struct ImBuf *in, struct ImBuf *out, float u, float v, int xout, int yout);
 void bilinear_interpolation(struct ImBuf *in, struct ImBuf *out, float u, float v, int xout, int yout);
+
+void bicubic_interpolation_color(struct ImBuf *in, unsigned char *col, float *col_float, float u, float v);
+void neareast_interpolation_color(struct ImBuf *in, unsigned char *col, float *col_float, float u, float v);
+void bilinear_interpolation_color(struct ImBuf *in, unsigned char *col, float *col_float, float u, float v);
+
 /**
  * Change the ordering of the color bytes pointed to by rect from
  * rgba to abgr. size * 4 color bytes are reordered.
index d7f1ab4419d8de81735bb2a7b648ff103aaed9c2..fe7e26eac2b427c15ab18811783d76e6b49f5c34 100644 (file)
@@ -80,6 +80,17 @@ void IMB_convert_rgba_to_abgr(struct ImBuf *ibuf)
                }
        }
 }
+static void pixel_from_buffer(struct ImBuf *ibuf, unsigned char **outI, float **outF, int x, int y)
+
+{
+       int offset = ibuf->x * y * 4 + 4*x;
+       
+       if (ibuf->rect)
+               *outI= (unsigned char *)ibuf->rect + offset;
+       
+       if (ibuf->rect_float)
+               *outF= (float *)ibuf->rect_float + offset;
+}
 
 /**************************************************************************
 *                            INTERPOLATIONS 
@@ -92,32 +103,40 @@ void IMB_convert_rgba_to_abgr(struct ImBuf *ibuf)
 /*  More info: http://wiki.blender.org/index.php/User:Damiles#Bicubic_pixel_interpolation
 */
 /* function assumes out to be zero'ed, only does RGBA */
+
+static float P(float k){
+       float p1, p2, p3, p4;
+       p1 = MAX2(k+2.0f,0);
+       p2 = MAX2(k+1.0f,0);
+       p3 = MAX2(k,0);
+       p4 = MAX2(k-1.0f,0);
+       return (float)(1.0f/6.0f)*( p1*p1*p1 - 4.0f * p2*p2*p2 + 6.0f * p3*p3*p3 - 4.0f * p4*p4*p4);
+}
+
+
+#if 0
+/* older, slower function, works the same as above */
 static float P(float k){
        return (float)(1.0f/6.0f)*( pow( MAX2(k+2.0f,0) , 3.0f ) - 4.0f * pow( MAX2(k+1.0f,0) , 3.0f ) + 6.0f * pow( MAX2(k,0) , 3.0f ) - 4.0f * pow( MAX2(k-1.0f,0) , 3.0f));
 }
+#endif
 
-void bicubic_interpolation(ImBuf *in, ImBuf *out, float x, float y, int xout, int yout)
+void bicubic_interpolation_color(struct ImBuf *in, unsigned char *outI, float *outF, float u, float v)
 {
        int i,j,n,m,x1,y1;
-       unsigned char *dataI,*outI;
-       float a,b,w,wx,wy[4], outR,outG,outB,outA,*dataF,*outF;
-       int do_rect, do_float;
-
-       if (in == NULL) return;
-       if (in->rect == NULL && in->rect_float == NULL) return;
+       unsigned char *dataI;
+       float a,b,w,wx,wy[4], outR,outG,outB,outA,*dataF;
 
-       do_rect= (out->rect != NULL);
-       do_float= (out->rect_float != NULL);
+       /* ImBuf in must have a valid rect or rect_float, assume this is alredy checked */
 
-       i= (int)floor(x);
-       j= (int)floor(y);
-       a= x - i;
-       b= y - j;
+       i= (int)floor(u);
+       j= (int)floor(v);
+       a= u - i;
+       b= v - j;
 
-       outR= 0.0f;
-       outG= 0.0f;
-       outB= 0.0f;
-       outA= 0.0f;
+       outR = outG = outB = outA = 0.0f;
+       
+/* Optimized and not so easy to read */
        
        /* avoid calling multiple times */
        wy[0] = P(b-(-1));
@@ -137,14 +156,14 @@ void bicubic_interpolation(ImBuf *in, ImBuf *out, float x, float y, int xout, in
                                        /* except that would call P() 16 times per pixel therefor pow() 64 times, better precalc these */
                                        w = wx * wy[m+1];
                                        
-                                       if (do_float) {
+                                       if (outF) {
                                                dataF= in->rect_float + in->x * y1 * 4 + 4*x1;
                                                outR+= dataF[0] * w;
                                                outG+= dataF[1] * w;
                                                outB+= dataF[2] * w;
                                                outA+= dataF[3] * w;
                                        }
-                                       if (do_rect) {
+                                       if (outI) {
                                                dataI= (unsigned char*)in->rect + in->x * y1 * 4 + 4*x1;
                                                outR+= dataI[0] * w;
                                                outG+= dataI[1] * w;
@@ -155,15 +174,42 @@ void bicubic_interpolation(ImBuf *in, ImBuf *out, float x, float y, int xout, in
                        }
                }
        }
-       if (do_rect) {
-               outI= (unsigned char *)out->rect + out->x * yout * 4 + 4*xout;
+
+/* Done with optimized part */
+       
+#if 0 
+       /* older, slower function, works the same as above */
+       for(n= -1; n<= 2; n++){
+               for(m= -1; m<= 2; m++){
+                       x1= i+n;
+                       y1= j+m;
+                       if (x1>0 && x1 < in->x && y1>0 && y1<in->y) {
+                               if (do_float) {
+                                       dataF= in->rect_float + in->x * y1 * 4 + 4*x1;
+                                       outR+= dataF[0] * P(n-a) * P(b-m);
+                                       outG+= dataF[1] * P(n-a) * P(b-m);
+                                       outB+= dataF[2] * P(n-a) * P(b-m);
+                                       outA+= dataF[3] * P(n-a) * P(b-m);
+                               }
+                               if (do_rect) {
+                                       dataI= (unsigned char*)in->rect + in->x * y1 * 4 + 4*x1;
+                                       outR+= dataI[0] * P(n-a) * P(b-m);
+                                       outG+= dataI[1] * P(n-a) * P(b-m);
+                                       outB+= dataI[2] * P(n-a) * P(b-m);
+                                       outA+= dataI[3] * P(n-a) * P(b-m);
+                               }
+                       }
+               }
+       }
+#endif
+       
+       if (outI) {
                outI[0]= (int)outR;
                outI[1]= (int)outG;
                outI[2]= (int)outB;
                outI[3]= (int)outA;
        }
-       if (do_float) {
-               outF= (float *)out->rect_float + out->x * yout * 4 + 4*xout;
+       if (outF) {
                outF[0]= outR;
                outF[1]= outG;
                outF[2]= outB;
@@ -171,23 +217,33 @@ void bicubic_interpolation(ImBuf *in, ImBuf *out, float x, float y, int xout, in
        }
 }
 
+
+void bicubic_interpolation(ImBuf *in, ImBuf *out, float u, float v, int xout, int yout)
+{
+       
+       unsigned char *outI = NULL;
+       float *outF = NULL;
+       
+       if (in == NULL || (in->rect == NULL && in->rect_float == NULL)) return;
+       
+       pixel_from_buffer(out, &outI, &outF, xout, yout); /* gcc warns these could be uninitialized, but its ok */
+       
+       bicubic_interpolation_color(in, outI, outF, u, v);
+}
+
 /* function assumes out to be zero'ed, only does RGBA */
 /* BILINEAR INTERPOLATION */
-void bilinear_interpolation(ImBuf *in, ImBuf *out, float u, float v, int xout, int yout)
+void bilinear_interpolation_color(struct ImBuf *in, unsigned char *outI, float *outF, float u, float v)
 {
-       float *row1, *row2, *row3, *row4, a, b, *outF;
-       unsigned char *row1I, *row2I, *row3I, *row4I, *outI;
+       float *row1, *row2, *row3, *row4, a, b;
+       unsigned char *row1I, *row2I, *row3I, *row4I;
        float a_b, ma_b, a_mb, ma_mb;
        float empty[4]= {0.0f, 0.0f, 0.0f, 0.0f};
        unsigned char emptyI[4]= {0, 0, 0, 0};
        int y1, y2, x1, x2;
-       int do_rect, do_float;
-
-       if (in==NULL) return;
-       if (in->rect==NULL && in->rect_float==NULL) return;
-
-       do_rect= (out->rect != NULL);
-       do_float= (out->rect_float != NULL);
+       
+       
+       /* ImBuf in must have a valid rect or rect_float, assume this is alredy checked */
 
        x1= (int)floor(u);
        x2= (int)ceil(u);
@@ -197,16 +253,7 @@ void bilinear_interpolation(ImBuf *in, ImBuf *out, float u, float v, int xout, i
        // sample area entirely outside image? 
        if (x2<0 || x1>in->x-1 || y2<0 || y1>in->y-1) return;
 
-       if (do_rect)
-               outI=(unsigned char *)out->rect + out->x * yout * 4 + 4*xout;
-       else
-               outI= NULL;
-       if (do_float)
-               outF=(float *)out->rect_float + out->x * yout * 4 + 4*xout;
-       else    
-               outF= NULL;
-
-       if (do_float) {
+       if (outF) {
                // sample including outside of edges of image 
                if (x1<0 || y1<0) row1= empty;
                else row1= (float *)in->rect_float + in->x * y1 * 4 + 4*x1;
@@ -229,7 +276,7 @@ void bilinear_interpolation(ImBuf *in, ImBuf *out, float u, float v, int xout, i
                outF[2]= ma_mb*row1[2] + a_mb*row3[2] + ma_b*row2[2]+ a_b*row4[2];
                outF[3]= ma_mb*row1[3] + a_mb*row3[3] + ma_b*row2[3]+ a_b*row4[3];
        }
-       if (do_rect) {
+       if (outI) {
                // sample including outside of edges of image 
                if (x1<0 || y1<0) row1I= emptyI;
                else row1I= (unsigned char *)in->rect + in->x * y1 * 4 + 4*x1;
@@ -254,45 +301,44 @@ void bilinear_interpolation(ImBuf *in, ImBuf *out, float u, float v, int xout, i
        }
 }
 
+void bilinear_interpolation(ImBuf *in, ImBuf *out, float u, float v, int xout, int yout)
+{
+       
+       unsigned char *outI = NULL;
+       float *outF = NULL;
+       
+       if (in == NULL || (in->rect == NULL && in->rect_float == NULL)) return;
+       
+       pixel_from_buffer(out, &outI, &outF, xout, yout); /* gcc warns these could be uninitialized, but its ok */
+       
+       bilinear_interpolation_color(in, outI, outF, u, v);
+}
+
 /* function assumes out to be zero'ed, only does RGBA */
 /* NEAREST INTERPOLATION */
-void neareast_interpolation(ImBuf *in, ImBuf *out, float u, float v,int xout, int yout)
+void neareast_interpolation_color(struct ImBuf *in, unsigned char *outI, float *outF, float u, float v)
 {
-       float *outF,*dataF;
-       unsigned char *dataI,*outI;
+       float *dataF;
+       unsigned char *dataI;
        int y1, x1;
-       int do_rect, do_float;
-
-       if (in==NULL) return;
-       if (in->rect==NULL && in->rect_float==NULL) return;
-
-       do_rect= (out->rect != NULL);
-       do_float= (out->rect_float != NULL);
 
+       /* ImBuf in must have a valid rect or rect_float, assume this is alredy checked */
+       
        x1= (int)(u);
        y1= (int)(v);
 
-       if (do_rect)
-               outI=(unsigned char *)out->rect + out->x * yout * 4 + 4*xout;
-       else
-               outI= NULL;
-       if (do_float)
-               outF=(float *)out->rect_float + out->x * yout * 4 + 4*xout;
-       else
-               outF= NULL;
-
        // sample area entirely outside image? 
        if (x1<0 || x1>in->x-1 || y1<0 || y1>in->y-1) return;
        
        // sample including outside of edges of image 
        if (x1<0 || y1<0) {
-               if (do_rect) {
+               if (outI) {
                        outI[0]= 0;
                        outI[1]= 0;
                        outI[2]= 0;
                        outI[3]= 0;
                }
-               if (do_float) {
+               if (outF) {
                        outF[0]= 0.0f;
                        outF[1]= 0.0f;
                        outF[2]= 0.0f;
@@ -300,14 +346,14 @@ void neareast_interpolation(ImBuf *in, ImBuf *out, float u, float v,int xout, in
                }
        } else {
                dataI= (unsigned char *)in->rect + in->x * y1 * 4 + 4*x1;
-               if (do_rect) {
+               if (outI) {
                        outI[0]= dataI[0];
                        outI[1]= dataI[1];
                        outI[2]= dataI[2];
                        outI[3]= dataI[3];
                }
                dataF= in->rect_float + in->x * y1 * 4 + 4*x1;
-               if (do_float) {
+               if (outF) {
                        outF[0]= dataF[0];
                        outF[1]= dataF[1];
                        outF[2]= dataF[2];
@@ -315,3 +361,16 @@ void neareast_interpolation(ImBuf *in, ImBuf *out, float u, float v,int xout, in
                }
        }       
 }
+
+void neareast_interpolation(ImBuf *in, ImBuf *out, float x, float y, int xout, int yout)
+{
+       
+       unsigned char *outI = NULL;
+       float *outF = NULL;
+
+       if (in == NULL || (in->rect == NULL && in->rect_float == NULL)) return;
+       
+       pixel_from_buffer(out, &outI, &outF, xout, yout); /* gcc warns these could be uninitialized, but its ok */
+       
+       neareast_interpolation_color(in, outI, outF, x, y);
+}
index 429c05feadc2b94eb4a09b54c0f3dc000282e3b4..50c644ade6f6ed1c8c4cb5689f88c0925aa2e7c6 100644 (file)
@@ -5369,7 +5369,7 @@ char *get_vertexgroup_menustr(Object *ob)
                qsort_ptr = MEM_callocN (defCount * sizeof (qsort_ptr[0]),
                                                                 "qsort_ptr");
                for (index = 1, dg = ob->defbase.first; dg; index++, dg=dg->next) {
-                       printed = snprintf (qsort_ptr[index - 1], sizeof (dg->name), dg->name);
+                       printed = snprintf (qsort_ptr[index - 1], sizeof (dg->name), "%s", dg->name);
                        snprintf (qsort_ptr[index - 1]+printed, 6+1, "%%x%d|", index); // +1 to move the \0   see above 999 max here too
                }
                
index 05aff70dedfef19c79cd6f72d42973b7b7a99ee0..58554fbfebaddb2e3f68e2da06ac79f869f176e8 100644 (file)
@@ -2007,8 +2007,8 @@ static void do_transform(Sequence * seq,float facf0, int x, int y,
                tx = scale->xIni+(xo / 2.0f) + (scale->xFin-(xo / 2.0f) - scale->xIni+(xo / 2.0f)) * facf0;
                ty = scale->yIni+(yo / 2.0f) + (scale->yFin-(yo / 2.0f) - scale->yIni+(yo / 2.0f)) * facf0;
        }else{
-               tx = xo*(scale->xIni/100.0)+(xo / 2.0f) + (xo*(scale->xFin/100.0)-(xo / 2.0f) - xo*(scale->xIni/100.0)+(xo / 2.0f)) * facf0;
-               ty = yo*(scale->yIni/100.0)+(yo / 2.0f) + (yo*(scale->yFin/100.0)-(yo / 2.0f) - yo*(scale->yIni/100.0)+(yo / 2.0f)) * facf0;
+               tx = xo*(scale->xIni/100.0f)+(xo / 2.0f) + (xo*(scale->xFin/100.0f)-(xo / 2.0f) - xo*(scale->xIni/100.0f)+(xo / 2.0f)) * facf0;
+               ty = yo*(scale->yIni/100.0f)+(yo / 2.0f) + (yo*(scale->yFin/100.0f)-(yo / 2.0f) - yo*(scale->yIni/100.0f)+(yo / 2.0f)) * facf0;
        }
 
        //factor Rotate
@@ -2036,12 +2036,17 @@ static void do_transform(Sequence * seq,float facf0, int x, int y,
                        ys += (yo / 2.0f);
 
                        //interpolate
-                       if(scale->interpolation==0)
+                       switch(scale->interpolation) {
+                       case 0:
                                neareast_interpolation(ibuf1,out, xs,ys,xi,yi);
-                       if(scale->interpolation==1)
+                               break;
+                       case 1:
                                bilinear_interpolation(ibuf1,out, xs,ys,xi,yi);
-                       if(scale->interpolation==2)
+                               break;
+                       case 2:
                                bicubic_interpolation(ibuf1,out, xs,ys,xi,yi);
+                               break;
+                       }
                }
        }       
 
index 97b855c630bbfd000b3004e6b64c7d2db9a52d75..1c54e98f1776c9c7c696f5fbadca139ed6f873ff 100644 (file)
@@ -190,7 +190,7 @@ def setup_syslibs(lenv):
        if lenv['OURPLATFORM'] in ('win32-vc', 'win32-mingw','linuxcross'):
                syslibs += Split(lenv['BF_PTHREADS_LIB'])
 
-       syslibs += Split(lenv['LLIBS'])
+       syslibs += lenv['LLIBS']
 
        return syslibs
 
index b86bb592970ffe9e89ecace8c8975a67907dc8f9..e07b6184abcc39144a7168c3a3a5d5af23856725 100755 (executable)
@@ -19,13 +19,15 @@ BoolVariable = SCons.Variables.BoolVariable
 def print_arguments(args, bc):
        if len(args):
                for k,v in args.iteritems():
+                       if type(v)==list:
+                               v = ' '.join(v)
                        print '\t'+bc.OKBLUE+k+bc.ENDC+' = '+bc.OKGREEN + v + bc.ENDC
        else:
                print '\t'+bc.WARNING+'No  command-line arguments given'+bc.ENDC
 
 def validate_arguments(args, bc):
        opts_list = [
-                       'WITH_BF_PYTHON', 'BF_PYTHON', 'BF_PYTHON_VERSION', 'BF_PYTHON_INC', 'BF_PYTHON_BINARY', 'BF_PYTHON_LIB', 'BF_PYTHON_LIBPATH', 'BF_PYTHON_LINKFLAGS', 'WITH_BF_STATICPYTHON', 'BF_PYTHON_LIB_STATIC',
+                       'WITH_BF_PYTHON', 'BF_PYTHON', 'BF_PYTHON_VERSION', 'BF_PYTHON_INC', 'BF_PYTHON_BINARY', 'BF_PYTHON_LIB', 'BF_PYTHON_LIBPATH', 'WITH_BF_STATICPYTHON', 'BF_PYTHON_LIB_STATIC',
                        'WITH_BF_OPENAL', 'BF_OPENAL', 'BF_OPENAL_INC', 'BF_OPENAL_LIB', 'BF_OPENAL_LIBPATH', 'WITH_BF_STATICOPENAL', 'BF_OPENAL_LIB_STATIC',
                        'WITH_BF_SDL', 'BF_SDL', 'BF_SDL_INC', 'BF_SDL_LIB', 'BF_SDL_LIBPATH',
                        'BF_PTHREADS', 'BF_PTHREADS_INC', 'BF_PTHREADS_LIB', 'BF_PTHREADS_LIBPATH',
@@ -47,17 +49,11 @@ def validate_arguments(args, bc):
                        'WITH_BF_YAFRAY',
                        'WITH_BF_FREETYPE', 'BF_FREETYPE', 'BF_FREETYPE_INC', 'BF_FREETYPE_LIB', 'BF_FREETYPE_LIBPATH',
                        'WITH_BF_QUICKTIME', 'BF_QUICKTIME', 'BF_QUICKTIME_INC', 'BF_QUICKTIME_LIB', 'BF_QUICKTIME_LIBPATH',
-                       'WITH_BF_STATICOPENGL', 'BF_OPENGL', 'BF_OPENGL_INC', 'BF_OPENGL_LIB', 'BF_OPENGL_LIBPATH', 'BF_OPENGL_LIB_STATIC', 'BF_OPENGL_LINKFLAGS',
+                       'WITH_BF_STATICOPENGL', 'BF_OPENGL', 'BF_OPENGL_INC', 'BF_OPENGL_LIB', 'BF_OPENGL_LIBPATH', 'BF_OPENGL_LIB_STATIC',
                        'WITH_BF_FTGL', 'BF_FTGL', 'BF_FTGL_INC', 'BF_FTGL_LIB',
                        'WITH_BF_PLAYER',
                        'WITH_BF_NOBLENDER',
                        'WITH_BF_BINRELOC',
-                       'CFLAGS', 'CCFLAGS', 'CXXFLAGS', 'CPPFLAGS',
-                       'REL_CFLAGS', 'REL_CCFLAGS', 'REL_CXXFLAGS',
-                       'BF_PROFILE_CFLAGS', 'BF_PROFILE_CCFLAGS', 'BF_PROFILE_CXXFLAGS', 'BF_PROFILE_LINKFLAGS',
-                       'BF_DEBUG_CFLAGS', 'BF_DEBUG_CCFLAGS', 'BF_DEBUG_CXXFLAGS',
-                       'C_WARN', 'CC_WARN', 'CXX_WARN',
-                       'LLIBS', 'PLATFORM_LINKFLAGS',
                        'LCGDIR',
                        'BF_CXX', 'WITH_BF_STATICCXX', 'BF_CXX_LIB_STATIC',
                        'WITH_BF_VERSE', 'BF_VERSE_INCLUDE',
@@ -72,7 +68,20 @@ def validate_arguments(args, bc):
                        'WITH_BF_DOCS',
                        'BF_NUMJOBS',
                        ]
-
+       
+       # Have options here that scons expects to be lists
+       opts_list_split = [
+                       'BF_PYTHON_LINKFLAGS',
+                       'BF_OPENGL_LINKFLAGS',
+                       'CFLAGS', 'CCFLAGS', 'CXXFLAGS', 'CPPFLAGS',
+                       'REL_CFLAGS', 'REL_CCFLAGS', 'REL_CXXFLAGS',
+                       'BF_PROFILE_CFLAGS', 'BF_PROFILE_CCFLAGS', 'BF_PROFILE_CXXFLAGS', 'BF_PROFILE_LINKFLAGS',
+                       'BF_DEBUG_CFLAGS', 'BF_DEBUG_CCFLAGS', 'BF_DEBUG_CXXFLAGS',
+                       'C_WARN', 'CC_WARN', 'CXX_WARN',
+                       'LLIBS', 'PLATFORM_LINKFLAGS',
+       ]
+       
+       
        arg_list = ['BF_DEBUG', 'BF_QUIET', 'BF_CROSS', 'BF_UPDATE',
                        'BF_INSTALLDIR', 'BF_TOOLSET', 'BF_BINNAME',
                        'BF_BUILDDIR', 'BF_FANCY', 'BF_QUICK', 'BF_PROFILE',
@@ -81,12 +90,13 @@ def validate_arguments(args, bc):
                        'BF_LISTDEBUG', 'LCGDIR', 'BF_X264_CONFIG', 'BF_XVIDCORE_CONFIG',
                        'BF_DOCDIR']
 
-       all_list = opts_list + arg_list
        okdict = {}
 
        for k,v in args.iteritems():
-               if k in all_list:
+               if (k in opts_list) or (k in arg_list):
                        okdict[k] = v
+               elif k in opts_list_split:
+                       okdict[k] = v.split() # "" have alredy been stripped
                else:
                        print '\t'+bc.WARNING+'Invalid argument: '+bc.ENDC+k+'='+v