From 69e51290fdff338ded971969998ba94f6951e96d Mon Sep 17 00:00:00 2001 From: Thomas Nagy Date: Sun, 3 Jan 2016 06:53:20 +0100 Subject: [PATCH] Made this project build on Linux --- .../src/api/funi.py.stpl | 7 ++- .../src/api/wscript_build | 21 ++++--- .../stpl_c_py_cs_satellite_wix/src/build.py | 16 ++++-- .../src/gui/wscript_build | 56 +++++++++++++------ .../stpl_c_py_cs_satellite_wix/src/wscript | 24 ++++---- waflib/extras/wix.py | 2 +- 6 files changed, 81 insertions(+), 45 deletions(-) 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 index 694a47b5..2a6af0f4 100644 --- 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 @@ -1,11 +1,16 @@ +#! /usr/bin/env python from cffi import FFI import os.path import re _ffi = FFI() +pat = '%s.dll' +if os.sep == '/': + pat = 'lib%s.so' + _apifile = os.path.join(os.path.dirname(__file__),'funi.h') -_dllname = os.path.join(os.path.split(__file__)[0],'funi.dll') +_dllname = os.path.join(os.path.split(__file__)[0], pat % 'funi') def _api(): with open(_apifile) as f: api = f.readlines() 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 index 6b7f8210..06a5bd77 100644 --- a/playground/stpl_c_py_cs_satellite_wix/src/api/wscript_build +++ b/playground/stpl_c_py_cs_satellite_wix/src/api/wscript_build @@ -1,18 +1,17 @@ +#! /usr/bin/env python +# encoding: utf-8 #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(rule=bld.stpl,source='funi.c.stpl',target='funi.c') +bld(rule=bld.stpl,source='funi.h.stpl',target='funi.h') +bld(rule=bld.stpl,source='funi_cs.cs.stpl',target='funi_cs.cs') +bld(rule=bld.stpl,source='funi.py.stpl',target='funi.py') +bld(rule=bld.stpl,source='test_funi.py.stpl',target='test_funi.py') +bld(rule=bld.stpl,source='test_funi.cpp.stpl',target='test_funi.cpp') bld.add_group() @@ -24,10 +23,10 @@ bld.shlib( bld.program( source = 'test_funi.cpp', includes = ['.'], - target = 'test_funi.exe', + target = 'test_funi', use = funi) bld.add_group() -bld(features='cs',source='funi_cs.cs',gen=csdll,includes='.') +bld(features='cs',source='funi_cs.cs',gen=csdll,includes='.', name='csdll') diff --git a/playground/stpl_c_py_cs_satellite_wix/src/build.py b/playground/stpl_c_py_cs_satellite_wix/src/build.py index 9149a544..0eb984be 100644 --- a/playground/stpl_c_py_cs_satellite_wix/src/build.py +++ b/playground/stpl_c_py_cs_satellite_wix/src/build.py @@ -1,3 +1,6 @@ +#! /usr/bin/env python +# encoding: utf-8 + import sys import os import codecs @@ -12,11 +15,14 @@ def stpl(tsk): 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) + os.chmod(pt, 493) -#for files that will be created -def cp(self): - shutil.copy(self.inputs[0].abspath(),self.outputs[0].abspath()) +# copy files that already exist +def src2bld(self, filename): + self(features='subst', source=filename, target=filename, is_copy=True) -#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()) +def build(bld): + # clean initialization + bld.src2bld = src2bld + bld.stpl = stpl 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 index cc4ea707..db3d9825 100644 --- a/playground/stpl_c_py_cs_satellite_wix/src/gui/wscript_build +++ b/playground/stpl_c_py_cs_satellite_wix/src/gui/wscript_build @@ -1,26 +1,34 @@ +#! /usr/bin/env python +# encoding: utf-8 #vim syntax=python -import sys -import shutil - -import os -sys.path += [os.getcwd()] - -from build import * +import os, sys, shutil +from waflib import Utils 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') +# obtain the file names to copy +from waflib import TaskGen +@TaskGen.feature('copy_over') +@TaskGen.before_method('process_subst') +def get_filenames_to_copy_from_task_generators(self): + src = self.bld.get_tgen_by_name(self.from_tg).tasks[-1].outputs[0] + self.source = [src] + self.target = [src.name] + self.is_copy = True -bld(rule=stpl,source='AssemblyInfo.cs.stpl',target='AssemblyInfo.cs') +# just copy the files to this folder +bld(features='copy_over subst', from_tg='funi') +bld(features='copy_over subst', from_tg='csdll') + +# copy the same file to the build directory +bld.src2bld(bld, 'Resources/Icon1.ico') + +bld(rule=bld.stpl,source='AssemblyInfo.cs.stpl',target='AssemblyInfo.cs') bld.add_group() @@ -35,6 +43,18 @@ refs = """ System System.Core System.Windows.Forms + System.Xml + System.Xml.Linq + System.Data + System.Data.DataSetExtensions + System.Drawing +""".strip().split() + +if Utils.is_win32: + refs = """ + System + System.Core + System.Windows.Forms System.Linq System.RunTime.InteropServices System.Xml @@ -53,9 +73,10 @@ def csflag(x): CSFLAGS+=[x] csflag(r'/platform:x64') csflag(r'/errorreport:prompt') -csflag(r'/errorendlocation') -csflag(r'/preferreduilang:en-US') -csflag(r'/highentropyva-') +if Utils.is_win32: + 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 @@ -77,4 +98,5 @@ bld(features='cs',source=src,gen=funigui,csflags=CSFLAGS,use=[r+'.dll' for r in bld.add_group() -bld(features='satellite_assembly',source='Resources/resources.fr.txt',gen=funigui) +bld(features='satellite_assembly',source='Resources/resources.fr.txt', gen=funigui) + diff --git a/playground/stpl_c_py_cs_satellite_wix/src/wscript b/playground/stpl_c_py_cs_satellite_wix/src/wscript index 3e7c34f5..3bb15bb1 100644 --- a/playground/stpl_c_py_cs_satellite_wix/src/wscript +++ b/playground/stpl_c_py_cs_satellite_wix/src/wscript @@ -10,14 +10,16 @@ # - GUI localization via satellite assemblies # - Wrapper for Python # -# Python libs required: bottle, cffi +# Python libs required: bottle, cffi, pytest +# +# This project requires plenty of applications and libraries such as: +# gcc, mono-devel, pytest, cffi +# LD_LIBRARY_PATH=$PWD/../build/api/: PATH=$PATH:$LD_LIBRARY_PATH waf configure build test --stubs +# -import sys -import os -import os.path -import shutil -sys.path += [os.getcwd()] +from waflib import Utils +import sys, os, shutil APPNAME = "funigui" DLLNAME = "funi" @@ -37,7 +39,7 @@ PYTEST = '' def configure (ctx): global PYTEST try: - PYTEST = ctx.find_program('py.test') [0] + PYTEST = ctx.find_program('py.test')[0] except: PYTEST = ctx.find_program('py.test',path_list=[r'C:\Python35\Scripts']) [0] @@ -48,7 +50,7 @@ def configure (ctx): ctx.env.append_value('DEFINES',['NDEBUG']) ctx.load('compiler_c compiler_cxx cs resx satellite_assembly') - if sys.platform != 'linux': + if Utils.is_win32: ctx.load('wix') if ctx.env['CC_NAME'] == 'msvc': @@ -71,17 +73,19 @@ def configure (ctx): ctx.env.dllname = DLLNAME ctx.env.maxfuni = MAXFUNI ctx.env.company = COMPANY + ctx.load('print_commands') def build(ctx): + ctx.load('build', tooldir='.') # additional stuff ctx.recurse('api') ctx.recurse('gui') - if sys.platform != 'linux': + if Utils.is_win32: 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(os.path.join(cwd,'test_funi'),cwd=cwd) ctx.cmd_and_log(PYTEST+' test_funi.py',cwd=cwd) diff --git a/waflib/extras/wix.py b/waflib/extras/wix.py index 0b7e0ef4..d87bfbb1 100644 --- a/waflib/extras/wix.py +++ b/waflib/extras/wix.py @@ -76,7 +76,7 @@ def wix_bin_path(): for i in range(cnt-1,-1,-1): thiskey = winreg.EnumKey(query,i) if 'WiX' in thiskey: - break; + break winreg.CloseKey(query) return os.path.normpath(winreg.QueryValue(winreg.HKEY_LOCAL_MACHINE, basekey+r'\\'+thiskey)+'..\\bin')