diff --git a/playground/stpl_c_py_cs_satellite_wix/src/api/funi.c.stpl b/playground/stpl_c_py_cs_satellite_wix/src/api/funi.c.stpl new file mode 100644 index 00000000..5857da87 --- /dev/null +++ b/playground/stpl_c_py_cs_satellite_wix/src/api/funi.c.stpl @@ -0,0 +1,10 @@ +#include "funi.h" + +%for i in range(maxfuni): +int func{{i}}(int a) +{ + if (a < {{i}}) + return a; + return {{i}}; +} +%end diff --git a/playground/stpl_c_py_cs_satellite_wix/src/api/funi.h.stpl b/playground/stpl_c_py_cs_satellite_wix/src/api/funi.h.stpl new file mode 100644 index 00000000..5712f0f7 --- /dev/null +++ b/playground/stpl_c_py_cs_satellite_wix/src/api/funi.h.stpl @@ -0,0 +1,36 @@ +#pragma once +#if defined _WIN32 || defined __CYGWIN__ + #ifdef BUILDING_DLL + #ifdef __GNUC__ + #define DLL_PUBLIC __attribute__ ((dllexport)) + #else + #define DLL_PUBLIC __declspec(dllexport) + #endif + #else + #ifdef __GNUC__ + #define DLL_PUBLIC __attribute__ ((dllimport)) + #else + #define DLL_PUBLIC __declspec(dllimport) + #endif + #endif + #define DLL_LOCAL +#else + #if __GNUC__ >= 4 + #define DLL_PUBLIC __attribute__ ((visibility ("default"))) + #define DLL_LOCAL __attribute__ ((visibility ("hidden"))) + #else + #define DLL_PUBLIC + #define DLL_LOCAL + #endif +#endif + +#ifdef __cplusplus +extern "C" +{ +#endif +%for i in range(maxfuni): +DLL_PUBLIC int func{{i}}(int a); +%end +#ifdef __cplusplus +}//extern +#endif diff --git a/playground/stpl_c_py_cs_satellite_wix/src/api/funi.py.stpl b/playground/stpl_c_py_cs_satellite_wix/src/api/funi.py.stpl new file mode 100644 index 00000000..694a47b5 --- /dev/null +++ b/playground/stpl_c_py_cs_satellite_wix/src/api/funi.py.stpl @@ -0,0 +1,30 @@ +from cffi import FFI +import os.path +import re + +_ffi = FFI() + +_apifile = os.path.join(os.path.dirname(__file__),'funi.h') +_dllname = os.path.join(os.path.split(__file__)[0],'funi.dll') +def _api(): + with open(_apifile) as f: + api = f.readlines() + rng = [i for i in range(len(api)) if re.search('extern', api[i])] + apicffi = [] + for i in range(rng[0]+2,rng[1]-1): + a = api[i] + if not re.search('^#',a): + a = a.replace('DLL_PUBLIC','') + apicffi += [a] + return apicffi + +_ffi.cdef('\n'.join(_api()),override=True) + +_dll = _ffi.dlopen(_dllname) + +class Func: +%for i in range(maxfuni): + @staticmethod + def func{{i}}(a): + return _dll.func{{i}}(a); +%end diff --git a/playground/stpl_c_py_cs_satellite_wix/src/api/funi_cs.cs.stpl b/playground/stpl_c_py_cs_satellite_wix/src/api/funi_cs.cs.stpl new file mode 100644 index 00000000..1311c795 --- /dev/null +++ b/playground/stpl_c_py_cs_satellite_wix/src/api/funi_cs.cs.stpl @@ -0,0 +1,15 @@ +// vi:syntax=cs +using System; +using System.Runtime.InteropServices; + +namespace Funi +{ + public class Func + { + %for i in range(maxfuni): + [DllImport("{{dllname}}", CallingConvention = CallingConvention.Cdecl)] + public static extern int func{{i}}(int a); + %end + } +} + diff --git a/playground/stpl_c_py_cs_satellite_wix/src/api/test_funi.cpp.stpl b/playground/stpl_c_py_cs_satellite_wix/src/api/test_funi.cpp.stpl new file mode 100644 index 00000000..69dc011e --- /dev/null +++ b/playground/stpl_c_py_cs_satellite_wix/src/api/test_funi.cpp.stpl @@ -0,0 +1,10 @@ +#include +#include "funi.h" +using namespace std; +int main() +{ + %for i in range(maxfuni): + cout << func{{i}}(2) << endl; + %end + return 0; +} diff --git a/playground/stpl_c_py_cs_satellite_wix/src/api/test_funi.py.stpl b/playground/stpl_c_py_cs_satellite_wix/src/api/test_funi.py.stpl new file mode 100644 index 00000000..244ebd66 --- /dev/null +++ b/playground/stpl_c_py_cs_satellite_wix/src/api/test_funi.py.stpl @@ -0,0 +1,12 @@ +import funi + +%for i in range(maxfuni): + +def test_func{{i}}(): + assert funi.Func.func{{i}}({{i}}) == {{i}} + assert funi.Func.func{{i}}({{i}}-1) == {{i}}-1 + assert funi.Func.func{{i}}({{i}}+{{maxfuni}}) == {{i}} + +%end + + diff --git a/playground/stpl_c_py_cs_satellite_wix/src/api/wscript_build b/playground/stpl_c_py_cs_satellite_wix/src/api/wscript_build new file mode 100644 index 00000000..6b7f8210 --- /dev/null +++ b/playground/stpl_c_py_cs_satellite_wix/src/api/wscript_build @@ -0,0 +1,33 @@ +#vim syntax=python + +from build import * + +funi = bld.env.dllname +gui = bld.env.guiname+'.exe' +funidll = funi +'.dll' +csdll = bld.env.dllname+'_cs.dll' + +bld(rule=stpl,source='funi.c.stpl',target='funi.c') +bld(rule=stpl,source='funi.h.stpl',target='funi.h') +bld(rule=stpl,source='funi_cs.cs.stpl',target='funi_cs.cs') +bld(rule=stpl,source='funi.py.stpl',target='funi.py') +bld(rule=stpl,source='test_funi.py.stpl',target='test_funi.py') +bld(rule=stpl,source='test_funi.cpp.stpl',target='test_funi.cpp') + +bld.add_group() + +bld.shlib( + source = ['funi.c'], + target = funi, + defines = ['BUILDING_DLL']) + +bld.program( + source = 'test_funi.cpp', + includes = ['.'], + target = 'test_funi.exe', + use = funi) + +bld.add_group() + +bld(features='cs',source='funi_cs.cs',gen=csdll,includes='.') + diff --git a/playground/stpl_c_py_cs_satellite_wix/src/build.py b/playground/stpl_c_py_cs_satellite_wix/src/build.py new file mode 100644 index 00000000..9149a544 --- /dev/null +++ b/playground/stpl_c_py_cs_satellite_wix/src/build.py @@ -0,0 +1,22 @@ +import sys +import os +import codecs +import bottle +import shutil + +def stpl(tsk): + ps = tsk.inputs[0].abspath() + pt = tsk.outputs[0].abspath() + bld = tsk.generator.bld + lookup,name=os.path.split(ps) + st=bottle.template(name,template_lookup=[lookup], company = bld.env.company, guiname=bld.env.guiname, version=bld.env.version, + dllname=bld.env.dllname, maxfuni=bld.env.maxfuni) + with codecs.open(pt,mode='w',encoding="utf-8") as f: f.write(st) + +#for files that will be created +def cp(self): + shutil.copy(self.inputs[0].abspath(),self.outputs[0].abspath()) + +#for files that already exist +src2bld = lambda bld,x: shutil.copy(bld.path.find_node(x).abspath(), bld.path.get_bld().make_node(x).write('').abspath()) + diff --git a/playground/stpl_c_py_cs_satellite_wix/src/gui/AssemblyInfo.cs.stpl b/playground/stpl_c_py_cs_satellite_wix/src/gui/AssemblyInfo.cs.stpl new file mode 100644 index 00000000..9ee50798 --- /dev/null +++ b/playground/stpl_c_py_cs_satellite_wix/src/gui/AssemblyInfo.cs.stpl @@ -0,0 +1,22 @@ +// vim:syntax=cs +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Resources; + +[assembly: AssemblyTitle("{{guiname}}")] +[assembly: AssemblyDescription("GUI project to test of WAF")] +[assembly: AssemblyConfiguration("Development Release")] +[assembly: AssemblyCompany("{{company}}")] +[assembly: AssemblyProduct("{{guiname}}")] +[assembly: AssemblyCopyright("Copyright © {{company}} 2015")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: NeutralResourcesLanguageAttribute("en", UltimateResourceFallbackLocation.MainAssembly)] + +[assembly: ComVisible(false)] + +[assembly: Guid("267d6386-3c5e-4334-a323-c5274f881cdc")] + +[assembly: AssemblyVersion("{{version}}")] +[assembly: AssemblyFileVersion("{{version}}")] diff --git a/playground/stpl_c_py_cs_satellite_wix/src/gui/FormFuni.cs b/playground/stpl_c_py_cs_satellite_wix/src/gui/FormFuni.cs new file mode 100644 index 00000000..df2aa16c --- /dev/null +++ b/playground/stpl_c_py_cs_satellite_wix/src/gui/FormFuni.cs @@ -0,0 +1,46 @@ +using System; +using System.Windows.Forms; +using System.Threading; +using System.Resources; +using Funi; + +namespace Funi +{ + public class FormFuni : Form + { + public FormFuni() + { + InitializeComponent(); + } + + private static System.Resources.ResourceManager res = new System.Resources.ResourceManager("funigui.Resources", typeof(FormFuni).Assembly); + + private void InitializeComponent() + { + this.text1 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + string greeting = res.GetString("greeting"); + // text1 + this.text1.Dock = System.Windows.Forms.DockStyle.Top; + this.text1.Location = new System.Drawing.Point(0, 0); + this.text1.Name = "text1"; + this.text1.Text = greeting + Func.func3(4).ToString(); + this.text1.Size = new System.Drawing.Size(289, 369); + this.text1.TabIndex = 0; + /// text1 + // FormFuni + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(200, 200); + this.Controls.Add(this.text1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.Name = "FormFuni"; + this.Text = greeting; + /// FormFuni + this.ResumeLayout(false); + + } + + private System.Windows.Forms.Label text1; + } +} diff --git a/playground/stpl_c_py_cs_satellite_wix/src/gui/Resources.resx b/playground/stpl_c_py_cs_satellite_wix/src/gui/Resources.resx new file mode 100644 index 00000000..ee683924 --- /dev/null +++ b/playground/stpl_c_py_cs_satellite_wix/src/gui/Resources.resx @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=a77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=a77a5c561934e089 + + + + Hello + + diff --git a/playground/stpl_c_py_cs_satellite_wix/src/gui/Resources/Icon1.ico b/playground/stpl_c_py_cs_satellite_wix/src/gui/Resources/Icon1.ico new file mode 100644 index 00000000..2c5e2641 Binary files /dev/null and b/playground/stpl_c_py_cs_satellite_wix/src/gui/Resources/Icon1.ico differ diff --git a/playground/stpl_c_py_cs_satellite_wix/src/gui/Resources/resources.fr.txt b/playground/stpl_c_py_cs_satellite_wix/src/gui/Resources/resources.fr.txt new file mode 100644 index 00000000..71ed5602 --- /dev/null +++ b/playground/stpl_c_py_cs_satellite_wix/src/gui/Resources/resources.fr.txt @@ -0,0 +1 @@ +greeting=Salut diff --git a/playground/stpl_c_py_cs_satellite_wix/src/gui/program.cs b/playground/stpl_c_py_cs_satellite_wix/src/gui/program.cs new file mode 100644 index 00000000..ee1d0507 --- /dev/null +++ b/playground/stpl_c_py_cs_satellite_wix/src/gui/program.cs @@ -0,0 +1,31 @@ +using System; +using System.Windows.Forms; +using System.Globalization; +using System.Threading; +using Funi; + +namespace Funi +{ + static class Program + { + [STAThread] + static void Main() + { + +// /* for testing only: +// * the according Satellite Assembly is chosen based on CurrentThread.CurrentCulture + CultureInfo culture; + culture = CultureInfo.CreateSpecificCulture("fr"); + + CultureInfo.DefaultThreadCurrentCulture = culture; + CultureInfo.DefaultThreadCurrentUICulture = culture; + + Thread.CurrentThread.CurrentCulture = culture; + Thread.CurrentThread.CurrentUICulture = culture; +// * fallback is english +// */ + + Application.Run(new FormFuni()); + } + } +} diff --git a/playground/stpl_c_py_cs_satellite_wix/src/gui/wscript_build b/playground/stpl_c_py_cs_satellite_wix/src/gui/wscript_build new file mode 100644 index 00000000..cc4ea707 --- /dev/null +++ b/playground/stpl_c_py_cs_satellite_wix/src/gui/wscript_build @@ -0,0 +1,80 @@ +#vim syntax=python + +import sys +import shutil + +import os +sys.path += [os.getcwd()] + +from build import * + +bld.add_group() + +funigui = ctx.env.guiname+'.exe' +funidll = ctx.env.dllname+'.dll' +csdll = ctx.env.dllname+'_cs.dll' +funi = bld.path.find_or_declare(funidll) +funi_cs = bld.path.find_or_declare(csdll) + +bld(rule=cp, source=bld.path.get_bld().make_node('../api/'+funidll) , target=funi ) +bld(rule=cp, source=bld.path.get_bld().make_node('../api/'+csdll) , target=funi_cs) +src2bld(bld,'Resources/Icon1.ico') + +bld(rule=stpl,source='AssemblyInfo.cs.stpl',target='AssemblyInfo.cs') + +bld.add_group() + +src = """ + program.cs + FormFuni.cs + AssemblyInfo.cs + Resources.resx +""".strip().split() + +refs = """ + System + System.Core + System.Windows.Forms + System.Linq + System.RunTime.InteropServices + System.Xml + System.Xml.Linq + System.Threading.Tasks + System.Data + System.Data.DataSetExtensions + System.Deployment + System.Drawing +""".strip().split() + + +CSFLAGS = [] +def csflag(x): + global CSFLAGS + CSFLAGS+=[x] +csflag(r'/platform:x64') +csflag(r'/errorreport:prompt') +csflag(r'/errorendlocation') +csflag(r'/preferreduilang:en-US') +csflag(r'/highentropyva-') +csflag(r'/debug:pdbonly') +csflag(r'/filealign:512') +csflag(r'/define:'+ctx.env.guiname[1:]) #EstimPRO or EstimRESEARCH +csflag(r'/nologo') +csflag(r'/noconfig') +csflag(r'/nowarn:1701,1702') +csflag(r'/target:winexe') +if ctx.options.stubs: + csflag('/optimize-') + csflag('/define:DEBUG') + csflag('/define:TRACE') +else: + csflag('/optimize+') + +csflag(r'/win32icon:gui/Resources/Icon1.ico') + + +bld(features='cs',source=src,gen=funigui,csflags=CSFLAGS,use=[r+'.dll' for r in refs]+[funi_cs.abspath()]) + +bld.add_group() + +bld(features='satellite_assembly',source='Resources/resources.fr.txt',gen=funigui) diff --git a/playground/stpl_c_py_cs_satellite_wix/src/msi/bundle.wxs b/playground/stpl_c_py_cs_satellite_wix/src/msi/bundle.wxs new file mode 100644 index 00000000..89c5c7c0 --- /dev/null +++ b/playground/stpl_c_py_cs_satellite_wix/src/msi/bundle.wxs @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/playground/stpl_c_py_cs_satellite_wix/src/msi/funi.wxs b/playground/stpl_c_py_cs_satellite_wix/src/msi/funi.wxs new file mode 100644 index 00000000..88fa5b45 --- /dev/null +++ b/playground/stpl_c_py_cs_satellite_wix/src/msi/funi.wxs @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/playground/stpl_c_py_cs_satellite_wix/src/msi/readme.rtf b/playground/stpl_c_py_cs_satellite_wix/src/msi/readme.rtf new file mode 100644 index 00000000..93563098 --- /dev/null +++ b/playground/stpl_c_py_cs_satellite_wix/src/msi/readme.rtf @@ -0,0 +1,182 @@ +{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff31507\deff0\stshfdbch31505\stshfloch31506\stshfhich31506\stshfbi31507\deflang1033\deflangfe2052\themelang1033\themelangfe2052\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} +{\f13\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}SimSun{\*\falt \'cb\'ce\'cc\'e5};}{\f34\fbidi \froman\fcharset1\fprq2{\*\panose 02040503050406030204}Cambria Math;} +{\f37\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}{\f39\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}@SimSun;}{\flomajor\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} +{\fdbmajor\f31501\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}SimSun{\*\falt \'cb\'ce\'cc\'e5};}{\fhimajor\f31502\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria;} +{\fbimajor\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\flominor\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} +{\fdbminor\f31505\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}SimSun{\*\falt \'cb\'ce\'cc\'e5};}{\fhiminor\f31506\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;} +{\fbiminor\f31507\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f40\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f41\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} +{\f43\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f44\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f45\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f46\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} +{\f47\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f48\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f172\fbidi \fnil\fcharset0\fprq2 SimSun Western{\*\falt \'cb\'ce\'cc\'e5};} +{\f410\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\f411\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\f413\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\f414\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;} +{\f417\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\f418\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\f432\fbidi \fnil\fcharset0\fprq2 @SimSun Western;}{\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} +{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} +{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} +{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbmajor\f31520\fbidi \fnil\fcharset0\fprq2 SimSun Western{\*\falt \'cb\'ce\'cc\'e5};}{\fhimajor\f31528\fbidi \froman\fcharset238\fprq2 Cambria CE;} +{\fhimajor\f31529\fbidi \froman\fcharset204\fprq2 Cambria Cyr;}{\fhimajor\f31531\fbidi \froman\fcharset161\fprq2 Cambria Greek;}{\fhimajor\f31532\fbidi \froman\fcharset162\fprq2 Cambria Tur;} +{\fhimajor\f31535\fbidi \froman\fcharset186\fprq2 Cambria Baltic;}{\fhimajor\f31536\fbidi \froman\fcharset163\fprq2 Cambria (Vietnamese);}{\fbimajor\f31538\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} +{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} +{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} +{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\flominor\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} +{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} +{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} +{\fdbminor\f31560\fbidi \fnil\fcharset0\fprq2 SimSun Western{\*\falt \'cb\'ce\'cc\'e5};}{\fhiminor\f31568\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;} +{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}{\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;} +{\fhiminor\f31576\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\fbiminor\f31578\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fbiminor\f31579\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} +{\fbiminor\f31581\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbiminor\f31582\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbiminor\f31583\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} +{\fbiminor\f31584\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbiminor\f31585\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbiminor\f31586\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}} +{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0; +\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\*\defchp \fs22\loch\af31506\hich\af31506\dbch\af31505 }{\*\defpap \ql \li0\ri0\sa200\sl276\slmult1 +\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs22\alang1025 +\ltrch\fcs0 \fs22\lang1033\langfe2052\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1033\langfenp2052 \snext0 \sqformat \spriority0 \styrsid7174289 Normal;}{\*\cs10 \additive \ssemihidden \sunhideused \spriority1 Default Paragraph Font;}{\* +\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tblind0\tblindtype3\tscellwidthfts0\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\sa200\sl276\slmult1 +\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \fs22\lang1033\langfe2052\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1033\langfenp2052 +\snext11 \ssemihidden \sunhideused \sqformat Normal Table;}}{\*\rsidtbl \rsid69038\rsid82046\rsid87707\rsid95659\rsid134211\rsid154312\rsid162960\rsid343415\rsid353316\rsid357831\rsid424175\rsid425239\rsid487345\rsid555870\rsid592788\rsid662841\rsid664362 +\rsid669664\rsid677615\rsid682290\rsid723102\rsid729875\rsid745976\rsid753359\rsid861325\rsid884569\rsid936148\rsid1004892\rsid1063873\rsid1134810\rsid1186501\rsid1186883\rsid1194660\rsid1376795\rsid1401633\rsid1529513\rsid1535688\rsid1536023\rsid1581410 +\rsid1582120\rsid1584154\rsid1647099\rsid1654806\rsid1655805\rsid1734857\rsid1776626\rsid1781686\rsid1793423\rsid1796780\rsid1797706\rsid1842033\rsid1977053\rsid2124302\rsid2178214\rsid2188409\rsid2368406\rsid2455043\rsid2556191\rsid2559080\rsid2706421 +\rsid2717148\rsid2838319\rsid2842440\rsid2846834\rsid2849503\rsid2890251\rsid2915487\rsid2978369\rsid3087645\rsid3096048\rsid3157651\rsid3213286\rsid3216382\rsid3231882\rsid3243724\rsid3292963\rsid3306157\rsid3411267\rsid3494792\rsid3552460\rsid3555247 +\rsid3564302\rsid3564469\rsid3606601\rsid3613764\rsid3678404\rsid3702734\rsid3744060\rsid3746433\rsid3764488\rsid3767582\rsid3802866\rsid3822118\rsid3867395\rsid3879311\rsid3883140\rsid3941726\rsid3960565\rsid4017175\rsid4069295\rsid4086842\rsid4217327 +\rsid4218194\rsid4265694\rsid4287373\rsid4474139\rsid4480618\rsid4481007\rsid4526124\rsid4541201\rsid4543468\rsid4553189\rsid4597977\rsid4598568\rsid4606409\rsid4617940\rsid4661390\rsid4665798\rsid4669776\rsid4718821\rsid4743566\rsid4745032\rsid4862560 +\rsid4916941\rsid4930440\rsid4934643\rsid4942416\rsid4984938\rsid5051074\rsid5057133\rsid5072156\rsid5112549\rsid5126983\rsid5137805\rsid5208771\rsid5321575\rsid5330704\rsid5333576\rsid5390032\rsid5393962\rsid5406273\rsid5466724\rsid5468218\rsid5528489 +\rsid5584391\rsid5655967\rsid5657287\rsid5770668\rsid5772499\rsid5782795\rsid5797800\rsid5835669\rsid5844695\rsid5990916\rsid6119276\rsid6161711\rsid6182604\rsid6187748\rsid6193081\rsid6244483\rsid6294159\rsid6361415\rsid6366086\rsid6386107\rsid6438581 +\rsid6444379\rsid6499201\rsid6505118\rsid6570222\rsid6572459\rsid6631200\rsid6649362\rsid6685800\rsid6825220\rsid6825684\rsid6833010\rsid6893441\rsid6896301\rsid7031407\rsid7040521\rsid7090529\rsid7099881\rsid7147977\rsid7151242\rsid7161394\rsid7170939 +\rsid7174289\rsid7216603\rsid7223901\rsid7239928\rsid7275269\rsid7285619\rsid7342289\rsid7343100\rsid7345751\rsid7359472\rsid7360787\rsid7365160\rsid7431355\rsid7567533\rsid7603088\rsid7632088\rsid7670100\rsid7677695\rsid7685243\rsid7690018\rsid7699692 +\rsid7749205\rsid7757442\rsid7804790\rsid7805881\rsid7823655\rsid7866042\rsid7869944\rsid7881919\rsid7887261\rsid7892841\rsid8001358\rsid8065457\rsid8082350\rsid8205271\rsid8263249\rsid8276646\rsid8340657\rsid8403836\rsid8404675\rsid8413005\rsid8415953 +\rsid8454550\rsid8464518\rsid8471740\rsid8473147\rsid8474305\rsid8608269\rsid8674070\rsid8678535\rsid8680380\rsid8716556\rsid8726521\rsid8740342\rsid8792794\rsid8850474\rsid8939938\rsid9008211\rsid9009783\rsid9046093\rsid9050817\rsid9199494\rsid9256582 +\rsid9382159\rsid9382524\rsid9580642\rsid9636050\rsid9650101\rsid9719636\rsid9790198\rsid9845373\rsid9896574\rsid9911041\rsid9917438\rsid9923535\rsid10058259\rsid10104370\rsid10104782\rsid10116859\rsid10119940\rsid10162764\rsid10171268\rsid10173470 +\rsid10181119\rsid10186326\rsid10227481\rsid10228062\rsid10238495\rsid10241328\rsid10251406\rsid10253016\rsid10308789\rsid10356536\rsid10448859\rsid10451319\rsid10553803\rsid10617894\rsid10624398\rsid10630071\rsid10644784\rsid10649121\rsid10693560 +\rsid10778738\rsid10819029\rsid10822871\rsid10833058\rsid10889418\rsid10906327\rsid10947796\rsid10948305\rsid10959936\rsid10970050\rsid11022248\rsid11091976\rsid11092694\rsid11106531\rsid11221818\rsid11223744\rsid11284859\rsid11297367\rsid11304667 +\rsid11410401\rsid11471275\rsid11473879\rsid11483990\rsid11630288\rsid11670184\rsid11683410\rsid11695780\rsid11749422\rsid11801413\rsid11823730\rsid11885140\rsid11948062\rsid11949587\rsid11952697\rsid12011226\rsid12011847\rsid12143706\rsid12196369 +\rsid12197931\rsid12211842\rsid12256397\rsid12260147\rsid12274050\rsid12278472\rsid12341722\rsid12386746\rsid12400576\rsid12462365\rsid12480687\rsid12524088\rsid12602696\rsid12654958\rsid12714736\rsid12730982\rsid12734740\rsid12736982\rsid12737686 +\rsid12847212\rsid12858831\rsid12938446\rsid12980310\rsid12998071\rsid12999036\rsid13001300\rsid13042177\rsid13060905\rsid13138458\rsid13256747\rsid13313954\rsid13320738\rsid13322171\rsid13331168\rsid13384129\rsid13444667\rsid13530695\rsid13530763 +\rsid13663661\rsid13763981\rsid13775311\rsid13793683\rsid13852375\rsid13857004\rsid13896517\rsid13924119\rsid13964242\rsid13968489\rsid13985729\rsid13986503\rsid13990163\rsid14027411\rsid14034599\rsid14118349\rsid14167608\rsid14171158\rsid14174498 +\rsid14237993\rsid14245230\rsid14301665\rsid14302208\rsid14304207\rsid14313482\rsid14318505\rsid14356566\rsid14439634\rsid14446103\rsid14447519\rsid14492879\rsid14495582\rsid14552397\rsid14581735\rsid14822449\rsid14837713\rsid14896889\rsid14968219 +\rsid15014585\rsid15022794\rsid15029050\rsid15091012\rsid15097832\rsid15155308\rsid15222503\rsid15229110\rsid15367816\rsid15419119\rsid15490739\rsid15532842\rsid15538613\rsid15554039\rsid15556187\rsid15561492\rsid15564061\rsid15611687\rsid15613741 +\rsid15615348\rsid15741996\rsid15751877\rsid15753374\rsid15757262\rsid15758596\rsid15809585\rsid15824214\rsid15873165\rsid15880090\rsid15884729\rsid15930247\rsid15934296\rsid16023137\rsid16066612\rsid16129228\rsid16151538\rsid16208867\rsid16216830 +\rsid16258247\rsid16278765\rsid16283291\rsid16283921\rsid16285193\rsid16330841\rsid16337005\rsid16339481\rsid16340046\rsid16346818\rsid16411054\rsid16455128\rsid16461848\rsid16515316\rsid16595350\rsid16596092\rsid16608749\rsid16647151\rsid16662723 +\rsid16678462\rsid16726804\rsid16738174\rsid16739818\rsid16740151\rsid16741504\rsid16742933}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\author roland} +{\operator roland}{\creatim\yr2015\mo12\dy8\hr22\min17}{\revtim\yr2015\mo12\dy8\hr22\min19}{\version1}{\edmins2}{\nofpages1}{\nofwords18}{\nofchars105}{\nofcharsws122}{\vern32769}}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml} +}\paperw12240\paperh15840\margl1440\margr1440\margt1440\margb1440\gutter0\ltrsect +\widowctrl\ftnbj\aenddoc\trackmoves1\trackformatting1\donotembedsysfont1\relyonvml0\donotembedlingdata0\grfdocevents0\validatexml1\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors1\noxlattoyen +\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\formshade\horzdoc\dgmargin\dghspace180\dgvspace180\dghorigin1440\dgvorigin1440\dghshow1\dgvshow1 +\jexpand\viewkind1\viewscale140\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule\nobrkwrptbl\snaptogridincell\allowfieldendsel\wrppunct +\asianbrkrule\rsidroot1529513\newtblstyruls\nogrowautofit\usenormstyforlist\noindnmbrts\felnbrelev\nocxsptable\indrlsweleven\noafcnsttbl\afelev\utinl\hwelev\spltpgpar\notcvasp\notbrkcnstfrctbl\notvatxbx\krnprsnet\cachedcolbal \nouicompat \fet0 +{\*\wgrffmtfilter 2450}\nofeaturethrottle1\ilfomacatclnup0\ltrpar \sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sectrsid7174289\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2 +\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6 +\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang +{\pntxtb (}{\pntxta )}}\pard\plain \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid1529513 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 +\fs22\lang1033\langfe2052\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid1529513 \hich\af31506\dbch\af31505\loch\f31506 This program itself is nonsense.\hich\af31506\dbch\af31505\loch\f31506 + It serves no purpose. +\par \hich\af31506\dbch\af31505\loch\f31506 It\hich\af31506\dbch\af31505\loch\f31506 s \hich\af31506\dbch\af31505\loch\f31506 project\loch\af31506\dbch\af31505\hich\f31506 \rquote \hich\af31506\dbch\af31505\loch\f31506 s \hich\af31506\dbch\af31505\loch\f31506 +purpose is to test waf, the python base build tool. +\par +\par +\par }{\*\themedata 504b030414000600080000002100828abc13fa0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb6ac3301045f785fe83d0b6d8 +72ba28a5d8cea249777d2cd20f18e4b12d6a8f843409c9df77ecb850ba082d74231062ce997b55ae8fe3a00e1893f354e9555e6885647de3a8abf4fbee29bbd7 +2a3150038327acf409935ed7d757e5ee14302999a654e99e393c18936c8f23a4dc072479697d1c81e51a3b13c07e4087e6b628ee8cf5c4489cf1c4d075f92a0b +44d7a07a83c82f308ac7b0a0f0fbf90c2480980b58abc733615aa2d210c2e02cb04430076a7ee833dfb6ce62e3ed7e14693e8317d8cd0433bf5c60f53fea2fe7 +065bd80facb647e9e25c7fc421fd2ddb526b2e9373fed4bb902e182e97b7b461e6bfad3f010000ffff0300504b030414000600080000002100a5d6a7e7c00000 +00360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4fc7060abb08 +84a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b63095120f88d94fbc +52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462a1a82fe353 +bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f7468656d652f7468 +656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b4b0d592c9c +070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b4757e8d3f7 +29e245eb2b260a0238fd010000ffff0300504b03041400060008000000210096b5ade296060000501b0000160000007468656d652f7468656d652f7468656d65 +312e786d6cec594f6fdb3614bf0fd87720746f6327761a07758ad8b19b2d4d1bc46e871e698996d850a240d2497d1bdae38001c3ba618715d86d87615b8116d8 +a5fb34d93a6c1dd0afb0475292c5585e9236d88aad3e2412f9e3fbff1e1fa9abd7eec70c1d1221294fda5efd72cd4324f1794093b0eddd1ef62fad79482a9c04 +98f184b4bd2991deb58df7dfbb8ad755446282607d22d771db8b944ad79796a40fc3585ee62949606ecc458c15bc8a702910f808e8c66c69b9565b5d8a314d3c +94e018c8de1a8fa94fd05093f43672e23d06af89927ac06762a049136785c10607758d9053d965021d62d6f6804fc08f86e4bef210c352c144dbab999fb7b471 +7509af678b985ab0b6b4ae6f7ed9ba6c4170b06c788a705430adf71bad2b5b057d03606a1ed7ebf5babd7a41cf00b0ef83a6569632cd467faddec9699640f671 +9e76b7d6ac355c7c89feca9cccad4ea7d36c65b258a206641f1b73f8b5da6a6373d9c11b90c537e7f08dce66b7bbeae00dc8e257e7f0fd2badd5868b37a088d1 +e4600ead1ddaef67d40bc898b3ed4af81ac0d76a197c86826828a24bb318f3442d8ab518dfe3a20f000d6458d104a9694ac6d88728eee2782428d60cf03ac1a5 +193be4cbb921cd0b495fd054b5bd0f530c1931a3f7eaf9f7af9e3f45c70f9e1d3ff8e9f8e1c3e3073f5a42ceaa6d9c84e5552fbffdeccfc71fa33f9e7ef3f2d1 +17d57859c6fffac327bffcfc793510d26726ce8b2f9ffcf6ecc98baf3efdfdbb4715f04d814765f890c644a29be408edf3181433567125272371be15c308d3f2 +8acd249438c19a4b05fd9e8a1cf4cd296699771c393ac4b5e01d01e5a30a787d72cf1178108989a2159c77a2d801ee72ce3a5c545a6147f32a99793849c26ae6 +6252c6ed637c58c5bb8b13c7bfbd490a75330f4b47f16e441c31f7184e140e494214d273fc80900aedee52ead87597fa824b3e56e82e451d4c2b4d32a423279a +668bb6690c7e9956e90cfe766cb37b077538abd27a8b1cba48c80acc2a841f12e698f13a9e281c57911ce298950d7e03aba84ac8c154f8655c4f2af074481847 +bd804859b5e696007d4b4edfc150b12addbecba6b18b148a1e54d1bc81392f23b7f84137c2715a851dd0242a633f900710a218ed715505dfe56e86e877f0034e +16bafb0e258ebb4faf06b769e888340b103d3311da9750aa9d0a1cd3e4efca31a3508f6d0c5c5c398602f8e2ebc71591f5b616e24dd893aa3261fb44f95d843b +5974bb5c04f4edafb95b7892ec1108f3f98de75dc97d5772bdff7cc95d94cf672db4b3da0a6557f70db629362d72bcb0431e53c6066acac80d699a6409fb44d0 +8741bdce9c0e4971624a2378cceaba830b05366b90e0ea23aaa241845368b0eb9e2612ca8c742851ca251ceccc70256d8d87265dd96361531f186c3d9058edf2 +c00eafe8e1fc5c509031bb4d680e9f39a3154de0accc56ae644441edd76156d7429d995bdd88664a9dc3ad50197c38af1a0c16d684060441db02565e85f3b966 +0d0713cc48a0ed6ef7dedc2dc60b17e92219e180643ed27acffba86e9c94c78ab90980d8a9f0913ee49d62b512b79626fb06dccee2a432bbc60276b9f7dec44b +7904cfbca4f3f6443ab2a49c9c2c41476dafd55c6e7ac8c769db1bc399161ee314bc2e75cf8759081743be1236ec4f4d6693e5336fb672c5dc24a8c33585b5fb +9cc24e1d4885545b58463634cc5416022cd19cacfccb4d30eb45296023fd35a458598360f8d7a4003bbaae25e331f155d9d9a5116d3bfb9a95523e51440ca2e0 +088dd844ec6370bf0e55d027a012ae264c45d02f708fa6ad6da6dce29c255df9f6cae0ec38666984b372ab5334cf640b37795cc860de4ae2816e95b21be5ceaf +8a49f90b52a51cc6ff3355f47e0237052b81f6800fd7b802239daf6d8f0b1571a8426944fdbe80c6c1d40e8816b88b8569082ab84c36ff0539d4ff6dce591a26 +ade1c0a7f669880485fd484582903d284b26fa4e2156cff62e4b9265844c4495c495a9157b440e091bea1ab8aaf7760f4510eaa69a6465c0e04ec69ffb9e65d0 +28d44d4e39df9c1a52ecbd3607fee9cec7263328e5d661d3d0e4f62f44acd855ed7ab33cdf7bcb8ae889599bd5c8b3029895b6825696f6af29c239b75a5bb1e6 +345e6ee6c28117e73586c1a2214ae1be07e93fb0ff51e133fb65426fa843be0fb515c187064d0cc206a2fa926d3c902e907670048d931db4c1a44959d366ad93 +b65abe595f70a75bf03d616c2dd959fc7d4e6317cd99cbcec9c58b34766661c7d6766ca1a9c1b327531486c6f941c638c67cd22a7f75e2a37be0e82db8df9f30 +254d30c1372581a1f51c983c80e4b71ccdd28dbf000000ffff0300504b0304140006000800000021000dd1909fb60000001b010000270000007468656d652f74 +68656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73848f4d0ac2301484f78277086f6fd3ba109126dd88d0add40384e4350d363f24 +51eced0dae2c082e8761be9969bb979dc9136332de3168aa1a083ae995719ac16db8ec8e4052164e89d93b64b060828e6f37ed1567914b284d262452282e3198 +720e274a939cd08a54f980ae38a38f56e422a3a641c8bbd048f7757da0f19b017cc524bd62107bd5001996509affb3fd381a89672f1f165dfe514173d9850528 +a2c6cce0239baa4c04ca5bbabac4df000000ffff0300504b01022d0014000600080000002100828abc13fa0000001c0200001300000000000000000000000000 +000000005b436f6e74656e745f54797065735d2e786d6c504b01022d0014000600080000002100a5d6a7e7c0000000360100000b000000000000000000000000 +002b0100005f72656c732f2e72656c73504b01022d00140006000800000021006b799616830000008a0000001c00000000000000000000000000140200007468 +656d652f7468656d652f7468656d654d616e616765722e786d6c504b01022d001400060008000000210096b5ade296060000501b000016000000000000000000 +00000000d10200007468656d652f7468656d652f7468656d65312e786d6c504b01022d00140006000800000021000dd1909fb60000001b010000270000000000 +00000000000000009b0900007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d010000960a00000000} +{\*\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d +617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169 +6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363 +656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e} +{\*\latentstyles\lsdstimax267\lsdlockeddef0\lsdsemihiddendef1\lsdunhideuseddef1\lsdqformatdef0\lsdprioritydef99{\lsdlockedexcept \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority0 \lsdlocked0 Normal; +\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 1;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 2;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 3;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 4; +\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 5;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 6;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 7;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 8;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 9; +\lsdpriority39 \lsdlocked0 toc 1;\lsdpriority39 \lsdlocked0 toc 2;\lsdpriority39 \lsdlocked0 toc 3;\lsdpriority39 \lsdlocked0 toc 4;\lsdpriority39 \lsdlocked0 toc 5;\lsdpriority39 \lsdlocked0 toc 6;\lsdpriority39 \lsdlocked0 toc 7; +\lsdpriority39 \lsdlocked0 toc 8;\lsdpriority39 \lsdlocked0 toc 9;\lsdqformat1 \lsdpriority35 \lsdlocked0 caption;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority10 \lsdlocked0 Title;\lsdpriority1 \lsdlocked0 Default Paragraph Font; +\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority11 \lsdlocked0 Subtitle;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority22 \lsdlocked0 Strong;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority20 \lsdlocked0 Emphasis; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority59 \lsdlocked0 Table Grid;\lsdunhideused0 \lsdlocked0 Placeholder Text;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority1 \lsdlocked0 No Spacing; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 1; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 1; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 1;\lsdunhideused0 \lsdlocked0 Revision; +\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority34 \lsdlocked0 List Paragraph;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority29 \lsdlocked0 Quote;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority30 \lsdlocked0 Intense Quote; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 1; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 1; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 2; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 2; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 2; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 2; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 2; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 3; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 3; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 3; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 3; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 3; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 4; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 4; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 4; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 4; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 5; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 5; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 5; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 5; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 5; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 6; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 6; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 6; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 6; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 6; +\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority19 \lsdlocked0 Subtle Emphasis;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority21 \lsdlocked0 Intense Emphasis; +\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority31 \lsdlocked0 Subtle Reference;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority32 \lsdlocked0 Intense Reference; +\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority33 \lsdlocked0 Book Title;\lsdpriority37 \lsdlocked0 Bibliography;\lsdqformat1 \lsdpriority39 \lsdlocked0 TOC Heading;}}{\*\datastore 010500000200000018000000 +4d73786d6c322e534158584d4c5265616465722e352e3000000000000000000000060000 +d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000000000000001000000010000000000000000100000feffffff00000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffffec69d9888b8b3d4c859eaf6cd158be0f000000000000000000000000d03f +a31cfe31d101feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000105000000000000}} \ No newline at end of file diff --git a/playground/stpl_c_py_cs_satellite_wix/src/msi/wscript_build b/playground/stpl_c_py_cs_satellite_wix/src/msi/wscript_build new file mode 100644 index 00000000..f907bf3d --- /dev/null +++ b/playground/stpl_c_py_cs_satellite_wix/src/msi/wscript_build @@ -0,0 +1,18 @@ +# vim:syntax=python + +exts = [x+'.dll' for x in 'WixNetFxExtension WixUIExtension WixBalExtension WixUtilExtension'.split()] + +funi = ctx.env['dllname'] +funigui = ctx.env['guiname'] +funiversion = ctx.env['version'] +funivisiblename = funigui+'_'+funiversion +funimsi = funivisiblename+'.msi' +funicompany = ctx.env['company'] + +define=lambda v:'-d'+v+'='+eval(v) +wixvar = [define(v) for v in 'funi funigui funimsi funivisiblename funiversion funicompany'.split()] + +bld(features = 'wix', source=['funi.wxs']+exts , gen=funimsi, candleflags=wixvar) +bld.add_group() +bld(features = 'wix', source=['bundle.wxs']+exts, gen='setup.exe', candleflags=wixvar) + diff --git a/playground/stpl_c_py_cs_satellite_wix/src/wscript b/playground/stpl_c_py_cs_satellite_wix/src/wscript new file mode 100644 index 00000000..3e7c34f5 --- /dev/null +++ b/playground/stpl_c_py_cs_satellite_wix/src/wscript @@ -0,0 +1,87 @@ +# vim: syntax=python +# +# needs waf created with +# python waf-light --tools=resx,satellite_assembly,wix +# +# Assumed situation: +# - Logic in C, which depends on an external device; some code is generated +# - Wrapper for C# +# - GUI in C# using C# Wrapper +# - GUI localization via satellite assemblies +# - Wrapper for Python +# +# Python libs required: bottle, cffi + +import sys +import os +import os.path +import shutil + +sys.path += [os.getcwd()] + +APPNAME = "funigui" +DLLNAME = "funi" +VERSION = "1.0" + +COMPANY = "FuniCo" +MAXFUNI = 4 + +top = "." +out = "../build" + +def options(ctx): + ctx.add_option("--stubs", action="store_true", default=False, help="Compile with stubs instead of using external device") + ctx.load('compiler_c compiler_cxx cs') + +PYTEST = '' +def configure (ctx): + global PYTEST + try: + PYTEST = ctx.find_program('py.test') [0] + except: + PYTEST = ctx.find_program('py.test',path_list=[r'C:\Python35\Scripts']) [0] + + if ctx.options.stubs: + print('!USING STUBS!') + ctx.env.append_value('DEFINES',['STUBS','DEBUG']) + else: + ctx.env.append_value('DEFINES',['NDEBUG']) + + ctx.load('compiler_c compiler_cxx cs resx satellite_assembly') + if sys.platform != 'linux': + ctx.load('wix') + + if ctx.env['CC_NAME'] == 'msvc': + if ctx.options.stubs: + ctx.env.append_value('CFLAGS',['/Z7','/EHsc','/W3']) + ctx.env.append_value('CXXFLAGS',['/Z7','/EHsc','/W3']) + else: + ctx.env.append_value('CFLAGS',['/Ox','/EHsc','/DNDEBUG','/W3']) + ctx.env.append_value('CXXFLAGS',['/Ox','/EHsc','/DNDEBUG','/W3']) + print(ctx.env['CC_NAME']) + else: + if ctx.options.stubs: + ctx.env.append_value('CFLAGS',['-g','-w']) + ctx.env.append_value('CXXFLAGS',['-g','-w']) + else: + ctx.env.append_value('CFLAGS',['-O2','-w']) + ctx.env.append_value('CXXFLAGS',['-O2','-w']) + ctx.env.guiname = APPNAME + ctx.env.version = VERSION + ctx.env.dllname = DLLNAME + ctx.env.maxfuni = MAXFUNI + ctx.env.company = COMPANY + +def build(ctx): + ctx.recurse('api') + ctx.recurse('gui') + if sys.platform != 'linux': + ctx.recurse('msi') + +def test(ctx): + if ctx.options.stubs: + cwd = ctx.path.find_node('../build/api').abspath() + print('running test in ',cwd) + ctx.cmd_and_log(os.path.join(cwd,'test_funi.exe'),cwd=cwd) + ctx.cmd_and_log(PYTEST+' test_funi.py',cwd=cwd) + diff --git a/waflib/extras/satellite_assembly.py b/waflib/extras/satellite_assembly.py new file mode 100644 index 00000000..005eb074 --- /dev/null +++ b/waflib/extras/satellite_assembly.py @@ -0,0 +1,57 @@ +#!/usr/bin/python +# encoding: utf-8 +# vim: tabstop=4 noexpandtab + +""" +Create a satellite assembly from "*.??.txt" files. ?? stands for a language code. + +The projects Resources subfolder contains resources.??.txt string files for several languages. +The build folder will hold the satellite assemblies as ./??/ExeName.resources.dll + +#gen becomes template (It is called gen because it also uses resx.py). +bld(source='Resources/resources.de.txt',gen=ExeName) +""" + +import os, re +from waflib import Task +from waflib.TaskGen import feature,before_method + +class al(Task.Task): + run_str = '${AL} ${ALFLAGS}' + +@feature('satellite_assembly') +@before_method('process_source') +def satellite_assembly(self): + if not getattr(self, 'gen', None): + self.bld.fatal('satellite_assembly needs a template assembly provided with the "gen" parameter') + res_lang = re.compile(r'(.*)\.(\w\w)\.(?:resx|txt)',flags=re.I) + + # self.source can contain node objects, so this will break in one way or another + self.source = self.to_list(self.source) + for i, x in enumerate(self.source): + #x = 'resources/resources.de.resx' + #x = 'resources/resources.de.txt' + mo = res_lang.match(x) + if mo: + template = os.path.splitext(self.gen)[0] + templatedir, templatename = os.path.split(template) + res = mo.group(1) + lang = mo.group(2) + #./Resources/resources.de.resources + resources = self.path.find_or_declare(res+ '.' + lang + '.resources') + self.create_task('resgen', self.to_nodes(x), [resources]) + #./de/Exename.resources.dll + satellite = self.path.find_or_declare(os.path.join(templatedir,lang,templatename) + '.resources.dll') + tsk = self.create_task('al',[resources],[satellite]) + tsk.env.append_value('ALFLAGS','/template:'+os.path.join(self.path.relpath(),self.gen)) + tsk.env.append_value('ALFLAGS','/embed:'+resources.relpath()) + tsk.env.append_value('ALFLAGS','/culture:'+lang) + tsk.env.append_value('ALFLAGS','/out:'+satellite.relpath()) + self.source[i] = None + # remove the None elements that we just substituted + self.source = list(filter(lambda x:x, self.source)) + +def configure(ctx): + ctx.find_program('al', var='AL', mandatory=True) + ctx.load('resx') + diff --git a/waflib/extras/wix.py b/waflib/extras/wix.py index 5ff92d8c..0b7e0ef4 100644 --- a/waflib/extras/wix.py +++ b/waflib/extras/wix.py @@ -12,7 +12,7 @@ bld(features='wix', some.wxs, gen='some.msi', candleflags=[..], lightflags=[..]) bld(features='wix', source=['bundle.wxs','WixBalExtension'], gen='setup.exe', candleflags=[..]) """ -import os +import os, copy from waflib import TaskGen from waflib import Task from waflib.Utils import winreg @@ -54,8 +54,8 @@ def wix(self): cndl = self.create_task('candle', self.to_nodes(wxs), self.to_nodes(wxobj)) lght = self.create_task('light', self.to_nodes(wxobj), self.path.find_or_declare(self.gen)) - cndl.env.CANDLEFLAGS = getattr(self,'candleflags',[]).copy() - lght.env.LIGHTFLAGS = getattr(self,'lightflags',[]).copy() + cndl.env.CANDLEFLAGS = copy.copy(getattr(self,'candleflags',[])) + lght.env.LIGHTFLAGS = copy.copy(getattr(self,'lightflags',[])) for x in wxl: lght.env.append_value('LIGHTFLAGS','wixui.wixlib')