Additional merges from #1666

This commit is contained in:
Thomas Nagy 2016-01-03 05:06:44 +01:00
parent 43e26b5bef
commit 8083205b81
22 changed files with 897 additions and 3 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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
}
}

View File

@ -0,0 +1,10 @@
#include <iostream>
#include "funi.h"
using namespace std;
int main()
{
%for i in range(maxfuni):
cout << func{{i}}(2) << endl;
%end
return 0;
}

View File

@ -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

View File

@ -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='.')

View File

@ -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())

View File

@ -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}}")]

View File

@ -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;
}
}

View File

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=a77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=a77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=a77a5c561934e089" />
<data name="greeting" xml:space="preserve">
<value>Hello</value>
</data>
</root>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -0,0 +1 @@
greeting=Salut

View File

@ -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());
}
}
}

View File

@ -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)

View File

@ -0,0 +1,34 @@
<?xml version="1.0"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:bal="http://schemas.microsoft.com/wix/BalExtension"
xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
<Bundle Name='$(var.funivisiblename)' Version='$(var.funiversion)' Manufacturer='$(var.funicompany)' UpgradeCode="8CE598AC-1950-4052-A8F8-C4AA28279872">
<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense">
<bal:WixStandardBootstrapperApplication
LicenseFile="../../src/msi/readme.rtf"
/>
</BootstrapperApplicationRef>
<!--
<util:RegistrySearch Root="HKLM" Key="SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Client" Value="Version" Variable="Net4x64ClientVersion" Win64="yes" />
-->
<Chain>
<PackageGroupRef Id="NetFx46Web" />
<!--
embed, but becomes large setup.exe
<ExePackage Id="Net4Client" Name="Microsoft .NET Framework 4.0 Setup" Cache="no" Compressed="yes" PerMachine="yes" Permanent="yes" Vital="yes" InstallCommand="/q"
SourceFile="..\..\Setup\Input\dotNetFx40_Client_x86_x64.exe" DetectCondition="Net4ClientVersion AND (NOT VersionNT64 OR Net4x64ClientVersion)"
InstallCondition="(VersionNT &lt; v6.0 OR VersionNT64 &lt; v6.0) AND (NOT (Net4ClientVersion OR Net4x64ClientVersion))"/>
-->
<MsiPackage Id="MainPackage" SourceFile="$(var.funimsi)" Vital="yes" />
</Chain>
</Bundle>
</Wix>

View File

@ -0,0 +1,103 @@
<?xml version='1.0' encoding='windows-1252'?>
<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'
xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension"
>
<Product Name='$(var.funivisiblename)' Id='69E6F862-BCEE-423C-8CC7-041E91FBE445' UpgradeCode='65C97E8E-6815-4A20-8E49-E288C724FCE0'
Language='1033' Codepage='1252' Version='$(var.funiversion)' Manufacturer='$(var.funicompany)'>
<Package Id='*' Keywords='Installer'
Description="$(var.funicompany)'s $(var.funivisiblename) Installer"
Comments='$(var.funivisiblename) is a registered trademark of $(var.funicompany)'
Manufacturer='$(var.funicompany)'
InstallerVersion='200'
InstallScope="perUser"
Languages='1033'
Compressed='yes'
Platform="x64"
SummaryCodepage='1252'
/>
<Media Id='1' Cabinet='funi.cab' EmbedCab='yes' CompressionLevel="none" DiskPrompt="CD-ROM #1" />
<Property Id='DiskPrompt' Value="$(var.funicompany)'s $(var.funivisiblename) Installation [1]" />
<Directory Id='TARGETDIR' Name='SourceDir'>
<Directory Id='ProgramFiles64Folder' Name='PFiles'>
<Directory Id='$(var.funicompany)' Name='$(var.funicompany)'>
<Directory Id='INSTALLDIR' Name='$(var.funivisiblename)'>
<Component Id='MainExecutable' Guid='B1DC944B-5882-43A7-AEBA-578720E008D0' Win64='yes'>
<File Id='funi' Name='$(var.funigui).exe' DiskId='1' Source='..\..\build\gui\$(var.funigui).exe' ProcessorArchitecture='x64' KeyPath='yes'>
<Shortcut Id="startmenufuni" Directory="ProgramMenuDir" Name="$(var.funivisiblename)"
WorkingDirectory='INSTALLDIR' Icon="$(var.funigui).exe" IconIndex="0" Advertise="yes" />
<Shortcut Id="desktopfuni" Directory="DesktopFolder" Name="$(var.funivisiblename)"
WorkingDirectory='INSTALLDIR' Icon="$(var.funigui).exe" IconIndex="0" Advertise="yes" />
</File>
</Component>
<Directory Id='DIR_LANG_fr' Name='fr'>
<Component Id='RES_fr' Guid='04DFEF94-9D94-4B81-8432-4706C52AD41D' Win64='yes'>
<File Id='LANG_fr' Name='$(var.funigui).resources.dll' DiskId='1' Source='..\..\build\gui\fr\$(var.funigui).resources.dll' />
</Component>
</Directory>
<Component Id='APILibrary' Guid='9D7A397D-A060-4B5B-A4C3-2A2375300FA6' Win64='yes'>
<File Id='APIDLL' Name='$(var.funi).dll' DiskId='1' Source='..\..\build\gui\$(var.funi).dll' ProcessorArchitecture='x64' KeyPath='yes' />
</Component>
<Component Id='CSHARPAPIDLL' Guid='476EB983-444D-464E-B7D1-776097630C61' Win64='yes'>
<File Id='CSHARPAPIDLL' Name='$(var.funi)_cs.dll' DiskId='1' Source='..\..\build\gui\$(var.funi)_cs.dll' KeyPath='yes' />
</Component>
<Component Id='PYTHONAPI' Guid='1D5492AC-2014-4878-991B-D3F652F96773' Win64='yes'>
<File Id='PYAPI' Name='$(var.funi).py' DiskId='1' Source='..\..\build\api\$(var.funi).py' KeyPath='yes' />
<File Id='APIHEADER' Name='$(var.funi).h' DiskId='1' Source='..\..\build\api\$(var.funi).h'/>
</Component>
</Directory>
</Directory>
</Directory>
<Directory Id="ProgramMenuFolder" Name="Programs">
<Directory Id="CompanyMenuDir" Name="$(var.funicompany)">
<Directory Id="ProgramMenuDir" Name="$(var.funivisiblename)">
<Component Id="ProgramMenuDir" Guid='50B89FED-013F-4A83-83B4-6DDDF22B2B44' Win64='yes'>
<RemoveFolder Id='ProgramMenuDir' On='uninstall' />
<RemoveFolder Id='CompanyMenuDir' Directory='CompanyMenuDir' On='uninstall' />
<RegistryValue Root='HKCU' Key='Software\[Manufacturer]\[ProductName]' Type='string' Value='' KeyPath='yes' />
</Component>
</Directory>
</Directory>
</Directory>
<Directory Id="DesktopFolder" Name="Desktop" />
</Directory>
<Feature Id='Complete' Level='1'>
<ComponentRef Id='MainExecutable' />
<ComponentRef Id='RES_fr' />
<ComponentRef Id='APILibrary' />
<ComponentRef Id='CSHARPAPIDLL' />
<ComponentRef Id='PYTHONAPI' />
<ComponentRef Id='ProgramMenuDir' />
</Feature>
<Icon Id="$(var.funigui).exe" SourceFile="..\..\build\gui\$(var.funigui).exe" />
<WixVariable Id="WixUILicense" Value="../../src/msi/readme.rtf" />
<!--
<WixVariable Id="WixUIDialogBmp" Value="$(var.DialogBmp)" />
<WixVariable Id="WixUIBannerBmp" Value="$(var.BannerBmp)" />
-->
<UIRef Id="WixUI_Minimal" />
<!--
WixUI_Advanced
WixUI_FeatureTree
WixUI_InstallDir
WixUI_Mondo
-->
</Product>
</Wix>

View File

@ -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}}

View File

@ -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)

View File

@ -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)

View File

@ -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')

View File

@ -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')