# HG changeset patch # User Edouard Tisserant # Date 1630712111 -7200 # Node ID fd09116d3537846ecb9df6e720d896335058af52 # Parent ad68e85dc4168a52cf39f41cff8f68e38916d99b New windows installer cross build, using patched pacman to get MSYS2's packages and PIP over Wine to get PyPI packages. Work in progress. diff -r ad68e85dc416 -r fd09116d3537 .dockerignore --- a/.dockerignore Sun Dec 17 01:29:32 2017 +0100 +++ b/.dockerignore Sat Sep 04 01:35:11 2021 +0200 @@ -1,4 +1,2 @@ -.?* -Dockerfile -Vagrantfile -*.log +* +!provision_focal64.sh diff -r ad68e85dc416 -r fd09116d3537 .hgignore --- a/.hgignore Sun Dec 17 01:29:32 2017 +0100 +++ b/.hgignore Sat Sep 04 01:35:11 2021 +0200 @@ -1,10 +1,4 @@ .*~ .*\.swp distfiles/.*[.](?!.*md5$).*$ -examples/.* -build/.* -beremiz -canfestival -matiec -mingw -python +distfiles/http/.* diff -r ad68e85dc416 -r fd09116d3537 Dockerfile --- a/Dockerfile Sun Dec 17 01:29:32 2017 +0100 +++ b/Dockerfile Sat Sep 04 01:35:11 2021 +0200 @@ -1,29 +1,16 @@ -# Builds Beremiz windows installer +# Dockerfile to setup beremiz_public_dist build container -# initialize : -# docker build --build-arg UID=$(id -u) --build-arg GID=$(id -g) -t beremiz_builder . -# -# build installer in ~/build, fetch source from repo : -# docker run -v ~/build/:/home/devel/build beremiz_builder -# -# build installer in ~/build, taking source from ~/src : -# docker run -v ~/src:/home/devel/src -v ~/build/:/home/devel/build --rm beremiz_builder \ -# xvfb-run make -C /home/devel/build -f /home/devel/src/LPC-2.MC9_distro/Makefile -# -# to use on code-build-test cycle : -# docker create --name current -v ~/src:/home/devel/src -v ~/build/:/home/devel/build -i -t beremiz_builder /bin/bash -# docker start -i current -# # call build operations from here -# docker stop current -# docker rm current - -FROM ubuntu:xenial +FROM ubuntu:focal ENV TERM xterm-256color -COPY provision_xenial64.sh . +COPY provision_focal64.sh . -RUN ./provision_xenial64.sh +RUN ./provision_focal64.sh + +ENV LANG en_US.UTF-8 +ENV LANGUAGE en_US:en +ENV LC_ALL en_US.UTF-8 ARG UNAME=devel ENV UNAME ${UNAME} @@ -34,7 +21,8 @@ USER $UNAME RUN mkdir /home/$UNAME/build /home/$UNAME/src -COPY . /home/$UNAME/src/beremiz_public_dist/ -CMD xvfb-run make -C /home/$UNAME/build -f /home/$UNAME/src/beremiz_public_dist/Makefile - +# easy to remember 'build' alias to invoke main makefile +ARG OWNDIRBASENAME=beremiz_public_dist +ENV OWNDIRBASENAME ${OWNDIRBASENAME} +RUN echo "alias build='make -C /home/"$UNAME"/build -f /home/devel/src/"$OWNDIRBASENAME"/Makefile'">/home/$UNAME/.bash_aliases diff -r ad68e85dc416 -r fd09116d3537 M2Crypto-mingw-cross-compile-fix.patch --- a/M2Crypto-mingw-cross-compile-fix.patch Sun Dec 17 01:29:32 2017 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,94 +0,0 @@ -diff -pruN M2Crypto-0.22.6rc2.orig/setup.py M2Crypto-0.22.6rc2/setup.py ---- M2Crypto-0.22.6rc2.orig/setup.py 2015-10-19 14:34:45.000000000 +0200 -+++ M2Crypto-0.22.6rc2/setup.py 2015-10-20 18:48:14.231865096 +0200 -@@ -28,6 +28,23 @@ except ImportError: - from distutils.core import Extension - from distutils.file_util import copy_file - -+# DISTUTILS HOT PATCH -+from distutils.cygwinccompiler import Mingw32CCompiler -+_old_mw32_init=Mingw32CCompiler.__init__ -+def Mingw32CCompInit(self, *args, **kwargs): -+ _old_mw32_init(self, *args, **kwargs) -+ for n in ["compiler", "compiler_so", "compiler_cxx", "linker_so"] : -+ l = getattr(self,n) -+ pfx = os.getenv("MINGCCPREFIX") -+ l[0] = pfx+l[0] -+ self.linker_so.insert(1, "-static-libgcc") -+Mingw32CCompiler.__init__ = Mingw32CCompInit -+ -+import distutils -+distutils.sysconfig.get_python_inc = lambda *x,**y : os.getenv("PYTHONINC") -+distutils.cygwinccompiler.get_msvcr = lambda *x,**y : [] -+distutils.util.get_platform = lambda *x,**y : "win32" -+distutils.sysconfig._init_nt() - - class _M2CryptoBuildExt(build_ext.build_ext): - '''Specialization of build_ext to enable swig_opts to inherit any -@@ -40,14 +57,9 @@ class _M2CryptoBuildExt(build_ext.build_ - - build_ext.build_ext.initialize_options(self) - -- # openssl is the attribute corresponding to openssl directory prefix -- # command line option -- if os.name == 'nt': -- self.libraries = ['ssleay32', 'libeay32'] -- self.openssl = 'c:\\pkg' -- else: -- self.libraries = ['ssl', 'crypto'] -- self.openssl = '/usr' -+ self.openssl = "mhooooo" -+ self.libraries = ['ssleay32', 'libeay32'] -+ self.libraries += ['ws2_32', 'crypt32', 'gdi32', "python27", "winstrm"] - - def finalize_options(self): - '''Overloaded build_ext implementation to append custom openssl -@@ -56,7 +68,8 @@ class _M2CryptoBuildExt(build_ext.build_ - build_ext.build_ext.finalize_options(self) - - openssl_include_dir = os.path.join(self.openssl, 'include') -- openssl_library_dir = os.path.join(self.openssl, 'lib') -+ #openssl_library_dir = os.path.join(self.openssl, 'lib') -+ openssl_library_dir = self.openssl - - self.swig_opts = ['-I%s' % i for i in self.include_dirs + - [openssl_include_dir]] -@@ -90,7 +103,7 @@ class _M2CryptoBuildExt(build_ext.build_ - # Someday distutils will be fixed and this won't be needed. - self.library_dirs += [os.path.join(self.openssl, 'bin')] - -- self.library_dirs += [os.path.join(self.openssl, openssl_library_dir)] -+ self.library_dirs += [os.getenv("PYTHONLIB"), os.path.join(self.openssl, openssl_library_dir)] - - def run(self): - '''Overloaded build_ext implementation to allow inplace=1 to work, -diff -pruN M2Crypto-0.22.6rc2.orig/SWIG/_ssl.i M2Crypto-0.22.6rc2/SWIG/_ssl.i ---- M2Crypto-0.22.6rc2.orig/SWIG/_ssl.i 2015-10-17 21:06:56.000000000 +0200 -+++ M2Crypto-0.22.6rc2/SWIG/_ssl.i 2015-10-20 18:48:24.835905739 +0200 -@@ -10,6 +10,9 @@ - /* $Id$ */ - - %{ -+#define _WIN32_WINNT 0x0600 -+#include -+#undef _WIN32_WINNT - #include - #include - #include -@@ -17,7 +19,6 @@ - #include - #include - #include --#include - #include - %} - -@@ -514,7 +515,7 @@ static int ssl_sleep_with_timeout(SSL *s - return -1; - } - Py_BEGIN_ALLOW_THREADS -- tmp = poll(&fd, 1, ms); -+ tmp = WSAPoll(&fd, 1, ms); - Py_END_ALLOW_THREADS - switch (tmp) { - case 1: diff -r ad68e85dc416 -r fd09116d3537 Makefile --- a/Makefile Sun Dec 17 01:29:32 2017 +0100 +++ b/Makefile Sat Sep 04 01:35:11 2021 +0200 @@ -1,394 +1,98 @@ #! gmake -# This is Makefile for Beremiz installer -# -# Invoke with "make -f path/to/Makefile" on a linux box -# in directory where build should happen. -# -# All those dependencies have to be installed : -# -# Windows installer : -# - wine (tested with 1.2 and 1.6. Fail with 1.4) -# - mingw32 -# - flex -# - bison -# - tar -# - unrar -# - wget -# - nsis -# - libtool -# - xmlstarlet -# - xsltproc -# - python-lxml -# -# WARNING : DISPLAY variable have to be defined to a valid X server -# in case it would be a problem, run : -# xvfb-run make -f /path/to/this/Makefile +# This is top level Makefile for beremiz_public_dist -version = 1.2-rc1 +# see also: +# build_in_docker.sh : use case example +# provision_bionic64.sh : prerequisites + +all: Beremiz-installer + +DIST ?= win32 src := $(abspath $(dir $(lastword $(MAKEFILE_LIST)))) -HGREMOTE ?= https://hg.beremiz.org/ +HGREMOTE ?= REMOTE_HG_DISABLED HGROOT ?= $(abspath $(src)/..) GITROOT := $(HGROOT) -DIST = CPUS := `cat /proc/cpuinfo | grep -e 'processor\W*:\W*[[:digit:]]*' | nl -n ln | tail -n1 | cut -f1` BLKDEV=/dev/null - -CROSS_COMPILE=i686-w64-mingw32 -CROSS_COMPILE_LIBS_DIR=$(shell dirname $(shell $(CROSS_COMPILE)-gcc -print-libgcc-file-name)) -CC=$(CROSS_COMPILE)-gcc -CXX=$(CROSS_COMPILE)-g++ - -define get_runtime_libs - cp $(CROSS_COMPILE_LIBS_DIR)/libgcc_s_sjlj-1.dll $(1) - cp $(CROSS_COMPILE_LIBS_DIR)/libstdc++-6.dll $(1) -endef +XVFBRUN ?= xvfb-run distfiles = $(src)/distfiles sfmirror = downloads -tmp := $(shell mktemp -d) +tmp := $(shell rm -rf $${TMPDIR:-/tmp}/beremiz_dist_build_tmp.* ; mktemp -d -t beremiz_dist_build_tmp.XXXXXXXXXX) define hg_get_archive -test -d $(HGROOT)/`basename $(1)` || hg --cwd $(HGROOT) clone $(HGREMOTE)`basename $(1)` -hg -R $(HGROOT)/`basename $(1)` archive $(2) $(1) -hg -R $(HGROOT)/`basename $(1)` id -i | sed 's/\+//' > $(1)/revision + test -d $(HGROOT)/`basename $(1)` || hg --cwd $(HGROOT) clone $(HGREMOTE)`basename $(1)`;\ + hg -R $(HGROOT)/`basename $(1)` archive $(2) $(1);\ + hg -R $(HGROOT)/`basename $(1)` id -i | sed 's/\+//' > $(1)/revision; endef define get_src_hg -rm -rf $(1) -$(call hg_get_archive, $(1), $(2)) + rm -rf $(1);\ + $(call hg_get_archive, $(1), $(2)) endef define get_src_git -rm -rf $(1) -mkdir $(1) -(cd $(GITROOT)/`basename $(1)`; git archive --format=tar $(2)) | tar -C $(1) -x + rm -rf $(1) + test -d $(GITROOT)/`basename $(1)` || git clone $(3) $(GITROOT)/`basename $(1)` + mkdir $(1) + (cd $(GITROOT)/`basename $(1)`; git archive --format=tar $(2)) | tar -C $(1) -x endef define get_src_http -dld=$(distfiles)/`echo $(2) | tr ' ()' '___'`;( ( [ -f $$dld ] || wget $(1)/$(2) -O $$dld ) && ( [ ! -f $$dld.md5 ] && (cd $(distfiles);md5sum `basename $$dld`) > $$dld.md5 || (cd $(distfiles);md5sum -c `basename $$dld.md5`) ) ) && + dld=$(distfiles)/`echo $(2) | tr ' ()' '___'`;( ( [ -f $$dld ] || wget $(1)/$(2) -O $$dld ) && ( [ ! -f $$dld.md5 ] && (cd $(distfiles);md5sum `basename $$dld`) > $$dld.md5 || (cd $(distfiles);md5sum -c `basename $$dld.md5`) ) ) && endef -define get_src_pypi -$(call get_src_http,https://pypi.python.org/packages/$(1),$(2)) -endef +get_src_pypi=$(call get_src_http,https://pypi.python.org/packages/$(1),$(2)) -define get_src_sf -$(call get_src_http,https://$(sfmirror).sourceforge.net/project/$(1),$(2)) -endef +get_src_sf=$(call get_src_http,https://$(sfmirror).sourceforge.net/project/$(1),$(2)) -all: Beremiz-$(version).exe $(targets_add) - +include $(src)/windows_installer.mk ifneq ("$(DIST)","") include $(src)/$(DIST).mk endif -build: - rm -rf build - mkdir -p build +OWN_PROJECTS=beremiz matiec $(OWN_PROJECTS_EX) -# native toolchain, pre-built -mingwdir=build/mingw +define get_revision +$(1)_revision?=$(lastword $(shell grep $(1) $(src)/revisions.txt)) +endef +$(foreach project,$(OWN_PROJECTS),$(eval $(call get_revision,$(project)))) -define get_mingw -$(call get_src_sf,mingw/MinGW/Base/$(1),$(2)) tar -C $(mingwdir) -xf $$dld +define get_revisionid +$(1)_revisionid=$(shell hg -R $(HGROOT)/$(1) id -i -r $($(1)_revision)) endef -define get_msys -$(call get_src_sf,mingw/MSYS/Base/$(1),$(2)) tar -C $(mingwdir) -xf $$dld +$(foreach project,$(OWN_PROJECTS),$(eval $(call get_revisionid,$(project)))) + +sources: + mkdir -p sources + +define make_src_rule +sources/$(1)_src: sources/$(1)_$($(1)_revisionid) + touch $$@ + +sources/$(1)_$($(1)_revisionid): | sources + rm -rf sources/$(1)* + $(call get_src_hg,sources/$(1),-r $($(1)_revisionid)) + touch $$@ endef -mingw: |build - rm -rf $(mingwdir) - mkdir -p $(mingwdir) - # windows.h - $(call get_mingw,w32api/w32api-5.0.1,w32api-5.0.1-mingw32-dev.tar.xz) - # mingw runtime - $(call get_mingw,mingwrt/mingwrt-5.0.1,mingwrt-5.0.1-mingw32-dll.tar.xz) - $(call get_mingw,mingwrt/mingwrt-5.0.1,libmingwex-5.0.1-mingw32-dll-0.tar.xz) - $(call get_mingw,isl/isl-0.18,libisl-0.18-1-mingw32-dll-15.tar.xz) - # mingw headers and lib - $(call get_mingw,mingwrt/mingwrt-5.0.1,mingwrt-5.0.1-mingw32-dev.tar.xz) - # binutils - $(call get_mingw,binutils/binutils-2.28,binutils-2.28-1-mingw32-bin.tar.xz) - # C compiler - $(call get_mingw,gcc/Version6/gcc-6.3.0,gcc-core-6.3.0-1-mingw32-bin.tar.xz) - $(call get_mingw,gcc/Version6/gcc-6.3.0,libgcc-6.3.0-1-mingw32-dll-1.tar.xz) - # dependencies - $(call get_mingw,gmp/gmp-6.1.2,libgmp-6.1.2-2-mingw32-dll-10.tar.xz) - $(call get_mingw,mpc/mpc-1.0.3,libmpc-1.0.3-1-mingw32-dll-3.tar.xz) - $(call get_mingw,mpfr/mpfr-3.1.5,libmpfr-3.1.5-1-mingw32-dll-4.tar.xz) - $(call get_mingw,gettext/gettext-0.18.3.2-2,libintl-0.18.3.2-2-mingw32-dll-8.tar.xz) - $(call get_mingw,gettext/gettext-0.18.3.2-2,libgettextpo-0.18.3.2-2-mingw32-dll-0.tar.xz) - $(call get_mingw,libiconv/libiconv-1.14-3,libiconv-1.14-3-mingw32-dll.tar.lzma) +$(foreach project,$(OWN_PROJECTS),$(eval $(call make_src_rule,$(project)))) - # make, bash, and dependencies - $(call get_msys,bash/bash-3.1.23-1,bash-3.1.23-1-msys-1.0.18-bin.tar.xz) - $(call get_msys,coreutils/coreutils-5.97-3,coreutils-5.97-3-msys-1.0.13-bin.tar.lzma) - $(call get_msys,libiconv/libiconv-1.14-1,libiconv-1.14-1-msys-1.0.17-bin.tar.lzma) - $(call get_msys,libiconv/libiconv-1.14-1,libiconv-1.14-1-msys-1.0.17-dll-2.tar.lzma) - $(call get_msys,gettext/gettext-0.18.1.1-1,libintl-0.18.1.1-1-msys-1.0.17-dll-8.tar.lzma) - $(call get_msys,regex/regex-1.20090805-2,libregex-1.20090805-2-msys-1.0.13-dll-1.tar.lzma) - $(call get_msys,termcap/termcap-0.20050421_1-2,libtermcap-0.20050421_1-2-msys-1.0.13-dll-0.tar.lzma) - $(call get_msys,make/make-3.81-3,make-3.81-3-msys-1.0.13-bin.tar.lzma) - $(call get_msys,msys-core/msys-1.0.19-1,msysCORE-1.0.19-1-msys-1.0.19-bin.tar.xz) - $(call get_msys,termcap/termcap-0.20050421_1-2,libtermcap-0.20050421_1-2-msys-1.0.13-dll-0.tar.lzma) +own_sources: $(foreach project,$(OWN_PROJECTS), sources/$(project)_src) touch $@ -msiexec = WINEPREFIX=$(tmp) msiexec -wine = WINEPREFIX=$(tmp) wine -pydir = build/python -pysite = $(pydir)/Lib/site-packages +define show_revision_details +echo -n $(1) "revision is: "; hg -R $(HGROOT)/$(1) id -r $($(1)_revisionid); +endef -python: |build - rm -rf $(pydir) - mkdir -p $(pydir) - - # Python - $(call get_src_http,http://www.python.org/ftp/python/2.7.3,python-2.7.3.msi)\ - $(msiexec) /qn /a $$dld TARGETDIR=.\\$(pydir) - - # WxPython 2.8 (needs running inno unpacker in wine) - $(call get_src_sf,innounp/innounp/innounp%200.36,innounp036.rar)\ - unrar e $$dld innounp.exe $(tmp) - $(call get_src_sf,wxpython/wxPython/2.8.12.1,wxPython2.8-win32-unicode-2.8.12.1-py27.exe)\ - $(wine) $(tmp)/innounp.exe -d$(tmp)/wx28 -x $$dld - cp -R $(tmp)/wx28/\{code_GetPythonDir\}/* $(pydir) - cp -R $(tmp)/wx28/\{app\}/* $(pysite) - - # WxPython 3.0 (needs running inno unpacker in wine) - $(call get_src_sf,wxpython/wxPython/3.0.2.0,wxPython3.0-win32-3.0.2.0-py27.exe)\ - $(wine) $(tmp)/innounp.exe -d$(tmp)/wx30 -x $$dld - cp -R $(tmp)/wx30/\{code_GetPythonDir\}/* $(pydir) - cp -R $(tmp)/wx30/\{app\}/* $(pysite) - - # wxPython fails if VC9.0 bullshit is not fully here. - $(call get_src_http,http://download.microsoft.com/download/1/1/1/1116b75a-9ec3-481a-a3c8-1777b5381140,vcredist_x86.exe)\ - cp $$dld $(tmp) - $(wine) $(tmp)/vcredist_x86.exe /qn /a - cp $(tmp)/drive_c/windows/winsxs/x86_Microsoft.VC90.CRT*/* $(pydir) - - # MathPlotLib - $(call get_src_http,https://github.com/downloads/matplotlib/matplotlib,matplotlib-1.2.0.win32-py2.7.exe)\ - unzip -d $(tmp)/mathplotlib $$dld ; [ $$? -eq 1 ] #silence error unziping .exe - cp -R $(tmp)/mathplotlib/PLATLIB/* $(pysite) - - # pywin32 - $(call get_src_sf,pywin32/pywin32/Build216,pywin32-216.win32-py2.7.exe)\ - unzip -d $(tmp)/pw32 $$dld ; [ $$? -eq 1 ] #silence error unziping .exe - cp -R $(tmp)/pw32/PLATLIB/* $(pysite) - - # zope.interface (twisted prereq) - $(call get_src_pypi,9d/2d/beb32519c0bd19bda4ac38c34db417d563ee698518e582f951d0b9e5898b,zope.interface-4.3.2-py2.7-win32.egg)\ - unzip -d $(tmp) $$dld - cp -R $(tmp)/zope $(pysite) - - # six (pyopenssl prereq) - $(call get_src_pypi,67/4b/141a581104b1f6397bfa78ac9d43d8ad29a7ca43ea90a2d863fe3056e86a,six-1.11.0-py2.py3-none-any.whl)\ - unzip -d $(tmp) $$dld - cp -R $(tmp)/six.py $(pysite) - - # enum34 (cryptography prereq) - $(call get_src_pypi,bf/3e/31d502c25302814a7c2f1d3959d2a3b3f78e509002ba91aea64993936876,enum34-1.1.6.tar.gz)\ - tar -C $(tmp) -xzf $$dld - cp -R $(tmp)/enum34-1.1.6/enum $(pysite) - - # cryptography (pyopenssl prereq) - $(call get_src_pypi,17/08/04dc376411968ac21f2e11a8d7d70e936a654172567672fa79710a137bd9,cryptography-2.1.4-cp27-cp27m-win32.whl)\ - unzip -d $(tmp) $$dld - cp -R $(tmp)/cryptography $(pysite) - - # pyopenssl (twisted/ssl prereq) - $(call get_src_pypi,79/db/7c0cfe4aa8341a5fab4638952520d8db6ab85ff84505e12c00ea311c3516,pyOpenSSL-17.5.0-py2.py3-none-any.whl)\ - unzip -d $(tmp) $$dld - cp -R $(tmp)/OpenSSL $(pysite) - - # pyasn1 (service identity prereq) - $(call get_src_pypi,eb/3d/b7d0fdf4a882e26674c68c20f40682491377c4db1439870f5b6f862f76ed,pyasn1-0.4.2.tar.gz)\ - tar -C $(tmp) -xzf $$dld - cp -R $(tmp)/pyasn1-0.4.2/pyasn1 $(pysite) - - # pyasn1-modules (service identity prereq) - $(call get_src_pypi,ab/76/36ab0e099e6bd27ed95b70c2c86c326d3affa59b9b535c63a2f892ac9f45,pyasn1-modules-0.2.1.tar.gz)\ - tar -C $(tmp) -xzf $$dld - cp -R $(tmp)/pyasn1-modules-0.2.1/pyasn1_modules $(pysite) - - # characteristic (service identity prereq) - $(call get_src_pypi,dc/66/54b7a4758ea44fbc93895c7745060005272560fb2c356f2a6f7448ef9a80,characteristic-14.3.0.tar.gz)\ - tar -C $(tmp) -xzf $$dld - cp -R $(tmp)/characteristic-14.3.0/characteristic.py $(pysite) - - # service identity (twisted prereq) - $(call get_src_pypi,de/2a/cab6e30be82c8fcd2339ef618036720eda954cf05daef514e386661c9221,service_identity-17.0.0.tar.gz)\ - tar -C $(tmp) -xzf $$dld - cp -R $(tmp)/service_identity-17.0.0/src/service_identity $(pysite) - - # txaio (autobahn prereq) - $(call get_src_pypi,d6/95/d0c67304515f352342bc8fd14e5a3e7ca924134608acb730916073b18464,txaio-2.8.2.tar.gz)\ - tar -C $(tmp) -xzf $$dld - cp -R $(tmp)/txaio-2.8.2/txaio $(pysite) - - # python-msgpack (autobahn prereq) - $(call get_src_pypi,59/ca/b8048e184a2edb5b3cd46f38be130e87cbce77f4168ed62344bc33df3e1b,msgpack_python-0.4.8-cp27-cp27m-win32.whl)\ - unzip -d $(tmp) $$dld - cp -R $(tmp)/msgpack $(pysite) - - # u-msgpack-python (autobahn prereq) - $(call get_src_pypi,b8/ff/5730f61767d5acecac103343d66ebf631ebd672fa14e50472f05545749c2,u-msgpack-python-2.4.1.tar.gz)\ - tar -C $(tmp) -xzf $$dld - cp -R $(tmp)/u-msgpack-python-2.4.1/umsgpack.py $(pysite) - - # cffi (cryptography prereq) - $(call get_src_pypi,5e/67/01ae6ae50d168d3b92f2a80bf62e07537171d0a1938c8bceb7e64d36829f,cffi-1.11.2-cp27-cp27m-win32.whl)\ - unzip -d $(tmp) $$dld - cp -R $(tmp)/cffi $(tmp)/_cffi_backend.pyd $(pysite) - - # Twisted - $(call get_src_pypi,fe/cb/97504d68c2f4300fb121f700cc2fae10e1856ba043e964acfab02e120835,Twisted-17.9.0-cp27-cp27m-win32.whl)\ - unzip -d $(tmp) $$dld - cp -R $(tmp)/twisted $(pysite) - - # Autobahn - $(call get_src_pypi,e4/2e/01a64212b1eb580d601fa20f146c962235e3493795f46e3b254597ec635d,autobahn-17.10.1.tar.gz)\ - tar -C $(tmp) -xzf $$dld - cp -R $(tmp)/autobahn-17.10.1/autobahn $(pysite) - - # Nevow - $(call get_src_pypi,source/N/Nevow,Nevow-0.10.0.tar.gz)\ - tar -C $(tmp) -xzf $$dld - for i in nevow formless twisted; do cp -R $(tmp)/Nevow-0.10.0/$$i $(pysite); done - - # Numpy - $(call get_src_pypi,fd/32/196073188f5b8b464e0fabb470f971fa5dcd91b55726a43b40b008212358,numpy-1.13.3-2-cp27-none-win32.whl)\ - unzip -d $(tmp) $$dld - cp -R $(tmp)/numpy $(pysite) - - # SimpleJson - $(call get_src_pypi,source/s/simplejson,simplejson-2.2.1.tar.gz)\ - tar -C $(tmp) -xzf $$dld - cp -R $(tmp)/simplejson-2.2.1/simplejson/ $(pysite) - - # Zeroconf - $(call get_src_pypi,6b/88/48dbe88b10098f98acef33218763c5630b0081c7fd0849ab4793b1e9b6d3,zeroconf-0.19.1-py2.py3-none-any.whl)\ - unzip -d $(tmp)/zeroconf $$dld - cp -R $(tmp)/zeroconf/*.py* $(pysite) - - # netifaces - $(call get_src_pypi,05/00/c719457bcb8f14f9a7b9244c3c5e203c40d041a364cf784cf554aaef8129,netifaces-0.10.6-py2.7-win32.egg)\ - unzip -d $(tmp)/netifaces $$dld - cp -R $(tmp)/netifaces/*.py* $(pysite) - - # WxGlade - $(call get_src_http,https://bitbucket.org/wxglade/wxglade/get,034d891cc947.zip)\ - unzip -d $(tmp) $$dld - mv $(tmp)/wxglade-wxglade-034d891cc947 $(pysite)/wxglade - - # Pyro - $(call get_src_pypi,61/68/0978adae315261b87acd216517c2c7f00780396e4d1426c5412458c6a28f,Pyro-3.16.tar.gz)\ - tar -C $(tmp) -xzf $$dld - mv $(tmp)/Pyro-3.16/Pyro $(pysite) - - # Lxml - $(call get_src_pypi,c7/e6/26a600d9828554ca9de35d3d1daf3779028bea37025f3dd25e9d58d63bac,lxml-4.1.1-cp27-cp27m-win32.whl)\ - unzip -d $(tmp) $$dld - cp -R $(tmp)/lxml $(pysite) - - touch $@ - - -OSSLVER=openssl-1.0.1p -MINGPFX=i686-w64-mingw32- - -openssl: - # Build Openssl - $(call get_src_http,https://openssl.org/source,$(OSSLVER).tar.gz)\ - tar -C $(tmp) -xzf $$dld - cd $(tmp)/$(OSSLVER); \ - CC=$(MINGPFX)gcc ./Configure mingw && \ - make all build-shared CROSS_COMPILE=$(MINGPFX) SHARED_LDFLAGS=-static-libgcc - mv $(tmp)/$(OSSLVER) .; - - touch $@ - -M2CRVER=M2Crypto-0.22.5 - -m2crypto: openssl - # Build M2crypto - $(call get_src_pypi,54/f5/6fa9bca4a18cc36c0c84c73d41d8e521c8cb70f077b11297efcd985242a6,M2Crypto-0.22.5.tar.gz)\ - tar -C $(tmp) -xzf $$dld - cd $(tmp)/$(M2CRVER); \ - patch -p1 < $(src)/M2Crypto-mingw-cross-compile-fix.patch && \ - PYTHONLIB=$(abspath $(pydir))/libs \ - PYTHONINC=$(abspath $(pydir))/include/ \ - MINGCCPREFIX=$(MINGPFX) \ - python setup.py build build_ext \ - --openssl=$(CURDIR)/$(OSSLVER) -cmingw32 - - # Copy openssl dlls directly in M2Crypto package directory - cp -a $(CURDIR)/$(OSSLVER)/*.dll $(tmp)/$(M2CRVER)/build/lib.win32-2.7/M2Crypto - - # Move result into python site packages - mv $(tmp)/$(M2CRVER)/build/lib.win32-2.7/M2Crypto $(pysite) - - touch $@ - -matiecdir = build/matiec -matiec: |build - $(call get_src_hg,$(tmp)/matiec) - cd $(tmp)/matiec ;\ - autoreconf;\ - automake --add-missing;\ - ./configure --host=$(CROSS_COMPILE);\ - make -j$(CPUS); - rm -rf $(matiecdir) - mkdir -p $(matiecdir) - mv $(tmp)/matiec/*.exe $(matiecdir) - - # install necessary shared libraries from local cross-compiler - $(call get_runtime_libs,$(matiecdir)) - - mv $(tmp)/matiec/lib $(matiecdir) - touch $@ - -examples: |build - rm -rf examples - mkdir -p examples - -beremiz: | build examples - $(call get_src_hg,build/beremiz) - $(call tweak_beremiz_source) - rm -rf examples/canopen_tests - mkdir -p examples/canopen_tests - mv build/beremiz/tests/canopen_* examples/canopen_tests - rm -rf examples/base_tests - mkdir -p examples/base_tests - mv build/beremiz/tests/* examples/base_tests - touch $@ - -CFbuild = build/CanFestival-3 -CFconfig = $(CFbuild)/objdictgen/canfestival_config.py -canfestival: mingw - rm -rf $(CFbuild) - $(call get_src_hg,$(CFbuild)) - cd $(CFbuild); \ - ./configure --can=tcp_win32 \ - --cc=$(CC) \ - --cxx=$(CXX) \ - --target=win32 \ - --wx=0 - $(MAKE) -C $(CFbuild) - cd $(CFbuild); find . -name "*.o" -exec rm {} ';' #remove object files only - touch $@ - -targets=python m2crypto mingw matiec beremiz -Beremiz-$(version).exe: $(targets) $(src)/license.txt $(src)/install.nsi $(targets_ex) - sed -e 's/\$$BVERSION/$(version)/g' $(src)/license.txt > build/license.txt - sed -e 's/\$$BVERSION/$(version)/g' $(src)/install.nsi |\ - sed -e 's/\$$BEXTENSIONS/$(extensions)/g' |\ - makensis - - -clean_installer: - rm -rf build Beremiz-$(version).exe $(targets) $(targets_ex) +revisions.txt: $(src)/revisions.txt own_sources + echo "\n******* PACKAGE REVISIONS ********\n" > revisions.txt + (echo -n "beremiz_dist revision is: "; hg -R $(src) id;) >> revisions.txt + ($(foreach project,$(OWN_PROJECTS),$(call show_revision_details,$(project)))) >> revisions.txt + bash -c 'hg -R $(src) st | ( if read ; then echo -e "\n******* MODIFIED LPCDISTRO ********\n" ; hg -R $(src) st ; fi ) >> revisions.txt' + diff -r ad68e85dc416 -r fd09116d3537 README.md --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/README.md Sat Sep 04 01:35:11 2021 +0200 @@ -0,0 +1,98 @@ +# Beremiz public distribution # + +This repository holds recipes and patches to build the Beremiz related +bundles, packages, installers and images available on +[Beremiz website](http://www.beremiz.org/). + +Patches have same license as projects beeing patched. For other files, +unless made explicit in file header, GPLv3 applies. + + +## Prerequisites ## + +A usable Docker is required. Docker is used to ensure a reproducible build +environment. + +Other containerization/virtualization could be used to achieve the same effect. + +Reference build environment is obtained by applying [provision_focal64.sh](provision_focal64.sh) on Ubuntu 20.04 amd64. + +## Build ## + +The top Makefile expects source code of Beremiz, Matiec and CanFestival to be +sibling to beremiz_public_dist directory, in the 'source directory'. +For example : + +``` +~/src + /beremiz + /beremiz_public_dist + /CanFestival-3 + /matiec +``` + +If any of Beremiz, Matiec or CanFestival repositories are missing, they will be +cloned aside beremiz_public_dist from https://hg.beremiz.org . + +Intermediate and final results are all placed in a single 'build directory' +during build process. + +### Prepare Docker image ### + +The script [rebuild_docker.sh](rebuild_docker.sh) is used for that purpose. + +Synopsis: + + ./rebuild_docker.sh [build directory] + +Example: + +``` +#!sh +mkdir ~/src +cd ~/src +hg clone https://hg.beremiz.org/beremiz_public_dist +cd beremiz_public_dist +./rebuild_docker.sh +``` + +Source and Build Volumes : + + Role | Docker Volume | Host path in example | Rationale +------------------|-------------------|----------------------|------------------------------------------------ + source directory | /home/devel/src | ~/src | Always relative to CWD : "../" + build directory | /home/devel/build | ~/build | First argument to rebuild_docker.sh or ~/build + +'build directory' can be specified as absolute path argument of rebuild_docker.sh. +If not specified it defaults to ~/build + +``` +#!sh +./rebuild_docker.sh ~/build_next +``` + +Note: 'build directory' is created if not already existing. + +### Build Windows Installer ### + +The script [build_in_docker.sh](build_in_docker.sh) is used for that purpose. + +``` +#!sh +./build_in_docker.sh +``` + +Note: 'build directory' must exist before calling build_in_docker.sh, otherwise +Docker will create it as root user. Be sure to create it again if you delete it. + +Resulting installer is Beremiz-1.2.exe in 'build directory'. + +## Manhole ## + +Once Docker image ready, the scripts [enter_docker.sh](enter_docker.sh) and +[enter_docker_as_root.sh](enter_docker_as_root.sh) let you issue build +commands, or install additional packages. + +[clean_docker_container.sh](clean_docker_container.sh) and [create_docker_container.sh](create_docker_container.sh) and +[clean_docker_image.sh](clean_docker_image.sh) and [build_docker_image.sh](build_docker_image.sh) are invoked by +[rebuild_docker.sh](rebuild_docker.sh). diff -r ad68e85dc416 -r fd09116d3537 build_docker_image.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/build_docker_image.sh Sat Sep 04 01:35:11 2021 +0200 @@ -0,0 +1,13 @@ +#!/bin/bash + +set -e + +OWNDIRBASENAME=$(basename $(cd $(dirname "${BASH_SOURCE[0]}") && pwd)) + +echo "Building docker image" +docker build \ + --build-arg UID=$(id -u) \ + --build-arg GID=$(id -g) \ + --build-arg OWNDIRBASENAME="$OWNDIRBASENAME" \ + -t beremiz_public_builder . + diff -r ad68e85dc416 -r fd09116d3537 build_in_docker.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/build_in_docker.sh Sat Sep 04 01:35:11 2021 +0200 @@ -0,0 +1,8 @@ +#!/bin/bash + +CONTAINER=beremiz_public_builder_current + +docker start $CONTAINER +docker exec -i -t $CONTAINER bash -i -c build $1 +docker stop $CONTAINER + diff -r ad68e85dc416 -r fd09116d3537 clean_docker_container.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/clean_docker_container.sh Sat Sep 04 01:35:11 2021 +0200 @@ -0,0 +1,5 @@ +#!/bin/bash + +# delete container +docker rm beremiz_public_builder_current + diff -r ad68e85dc416 -r fd09116d3537 clean_docker_image.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/clean_docker_image.sh Sat Sep 04 01:35:11 2021 +0200 @@ -0,0 +1,5 @@ +#!/bin/bash + +# delete image +docker rmi beremiz_public_builder + diff -r ad68e85dc416 -r fd09116d3537 create_docker_container.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/create_docker_container.sh Sat Sep 04 01:35:11 2021 +0200 @@ -0,0 +1,25 @@ +#!/bin/bash + +set -e + +# absolute path to directory containing parent directory of that script +# (i.e. source directory containing beremiz, matiec, etc..) +SRCDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && cd .. && pwd )" +echo "SOURCE direcory : $SRCDIR" + +# absolute path to build directory. ~/build if not given as only argument +BUILDDIR=${1:-~/build} +mkdir -p $BUILDDIR +echo "BUILD direcory : $BUILDDIR" + +UNAME=devel +UHOME=/home/$UNAME + +echo "Creating docker container" +docker create \ + --name beremiz_public_builder_current \ + -v $SRCDIR:$UHOME/src \ + -v $BUILDDIR:$UHOME/build \ + -v /tmp/.X11-unix/X0:/tmp/.X11-unix/X0 \ + -w $UHOME/build \ + -i -t beremiz_public_builder /bin/bash diff -r ad68e85dc416 -r fd09116d3537 distfiles/python-2.7.13.msi.md5 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/distfiles/python-2.7.13.msi.md5 Sat Sep 04 01:35:11 2021 +0200 @@ -0,0 +1,1 @@ +0f057ab4490e63e528eaa4a70df711d9 python-2.7.13.msi diff -r ad68e85dc416 -r fd09116d3537 enter_docker.sh --- a/enter_docker.sh Sun Dec 17 01:29:32 2017 +0100 +++ b/enter_docker.sh Sat Sep 04 01:35:11 2021 +0200 @@ -1,7 +1,5 @@ #!/bin/bash -# this script is given as an exemple -# I use it to have a shell running in ready-to-build container -# obtained with rebuild_docker.sh +CNT=beremiz_public_builder_current -docker start -i current +docker start -i $CNT diff -r ad68e85dc416 -r fd09116d3537 enter_docker_as_root.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/enter_docker_as_root.sh Sat Sep 04 01:35:11 2021 +0200 @@ -0,0 +1,7 @@ +#!/bin/bash + +CONTAINER=beremiz_public_builder_current + +docker start $CONTAINER +docker exec -i -t -u root $CONTAINER bash +docker stop $CONTAINER diff -r ad68e85dc416 -r fd09116d3537 install.nsi --- a/install.nsi Sun Dec 17 01:29:32 2017 +0100 +++ b/install.nsi Sat Sep 04 01:35:11 2021 +0200 @@ -1,11 +1,12 @@ -SetCompressor /SOLID /FINAL lzma +;SetCompressor /SOLID /FINAL lzma +SetCompress off SetDatablockOptimize off !include MUI2.nsh ; MUI Settings -!define MUI_ICON "build\beremiz\images\brz.ico" +!define MUI_ICON "installer\beremiz\images\brz.ico" !define MUI_HEADERIMAGE !define MUI_HEADERIMAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Header\nsis.bmp" ; optional !define MUI_ABORTWARNING @@ -13,7 +14,7 @@ ; Documentation !insertmacro MUI_PAGE_WELCOME !define MUI_LICENSEPAGE_CHECKBOX -!insertmacro MUI_PAGE_LICENSE "build/license.txt" +!insertmacro MUI_PAGE_LICENSE "installer/license.txt" !insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_PAGE_FINISH @@ -27,18 +28,11 @@ OutFile "Beremiz-$BVERSION.exe" InstallDir "$PROGRAMFILES\Beremiz" !define PYTHONW_EXE "$INSTDIR\python\pythonw.exe" -!define BEREMIZ_EXE '"$INSTDIR\beremiz\Beremiz.py" -u "http://www.beremiz.org/updateinfo/$BVERSION/" $BEXTENSIONS' +!define BEREMIZ_EXE '"$INSTDIR\beremiz\Beremiz.py" -u "http://www.beremiz.org/updateinfo/$BVERSION/"' Section "Beremiz" SetOutPath $INSTDIR - File /r /x debian /x *.pyc "build/*" -SectionEnd - -Section "Examples" - CreateDirectory "$DESKTOP\BeremizExamples" - SetOutPath "$DESKTOP\BeremizExamples" - File /r "examples/*" - CreateShortCut "$DESKTOP\BeremizExamples\canopen_tests\CAN_TCP_Server.lnk" "$INSTDIR\CanFestival-3\drivers\can_tcp_win32\can_tcp_win32_server.exe" "" "" 0 SW_SHOWNORMAL "" "Simple CAN emulation over TCP (for CANopen testing)" + File /r /x debian /x *.pyc "installer/*" SectionEnd Section "Install" @@ -56,7 +50,7 @@ Section "Shortcuts" SetShellVarContext all CreateDirectory "$SMPROGRAMS\Beremiz" - SetOutPath "$INSTDIR\mingw\bin" + SetOutPath "$INSTDIR\msys32\bin" CreateShortCut "$SMPROGRAMS\Beremiz\PlcopenEditor.lnk" "${PYTHONW_EXE}" '"$INSTDIR\beremiz\plcopeneditor.py"' "$INSTDIR\beremiz\images\poe.ico" CreateShortCut "$SMPROGRAMS\Beremiz\Beremiz.lnk" "${PYTHONW_EXE}" '${BEREMIZ_EXE}' "$INSTDIR\beremiz\images\brz.ico" CreateShortCut "$SMPROGRAMS\Beremiz\Uninstall.lnk" "$INSTDIR\uninstall.exe" diff -r ad68e85dc416 -r fd09116d3537 pacman-6.0.0-nogpg-relative_conf.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pacman-6.0.0-nogpg-relative_conf.patch Sat Sep 04 01:35:11 2021 +0200 @@ -0,0 +1,48 @@ +Binary files pacman-6.0.0.orig/lib/libalpm/.dload.c.swp and pacman-6.0.0/lib/libalpm/.dload.c.swp differ +Binary files pacman-6.0.0.orig/lib/libalpm/.error.c.swp and pacman-6.0.0/lib/libalpm/.error.c.swp differ +Binary files pacman-6.0.0.orig/lib/libalpm/.hook.c.swp and pacman-6.0.0/lib/libalpm/.hook.c.swp differ +Binary files pacman-6.0.0.orig/lib/libalpm/.trans.c.swp and pacman-6.0.0/lib/libalpm/.trans.c.swp differ +diff -ruN pacman-6.0.0.orig/lib/libalpm/util.c pacman-6.0.0/lib/libalpm/util.c +--- pacman-6.0.0.orig/lib/libalpm/util.c 2021-05-20 03:38:45.948119900 +0000 ++++ pacman-6.0.0/lib/libalpm/util.c 2021-08-26 17:26:09.719703392 +0000 +@@ -652,6 +652,11 @@ + /* use fprintf instead of _alpm_log to send output through the parent */ + if(chroot(handle->root) != 0) { + fprintf(stderr, _("could not change the root directory (%s)\n"), strerror(errno)); ++ fprintf(stderr, "cmd : %s", cmd); ++ for(int i=0; argv[i]; i++){ ++ fprintf(stderr, " %s", argv[i]); ++ } ++ fprintf(stderr, "\n"); + exit(1); + } + if(chdir("/") != 0) { +Binary files pacman-6.0.0.orig/lib/libalpm/.util.c.swp and pacman-6.0.0/lib/libalpm/.util.c.swp differ +Binary files pacman-6.0.0.orig/.meson.build.swp and pacman-6.0.0/.meson.build.swp differ +diff -ruN pacman-6.0.0.orig/src/pacman/conf.c pacman-6.0.0/src/pacman/conf.c +--- pacman-6.0.0.orig/src/pacman/conf.c 2021-05-20 03:38:45.964786500 +0000 ++++ pacman-6.0.0/src/pacman/conf.c 2021-08-26 17:27:32.228666450 +0000 +@@ -477,7 +477,7 @@ + } + + /* now parse out and store actual flag if it is valid */ +- if(strcmp(value, "Never") == 0) { ++ if(1 || strcmp(value, "Never") == 0) { + if(package) { + SLUNSET(ALPM_SIG_PACKAGE); + } +@@ -1071,9 +1071,11 @@ + break; + default: + for(gindex = 0; gindex < globbuf.gl_pathc; gindex++) { ++ char buf[1024]; ++ snprintf(buf, 1023, "%s%s",ROOTDIR, globbuf.gl_pathv[gindex]); + pm_printf(ALPM_LOG_DEBUG, "config file %s, line %d: including %s\n", +- file, linenum, globbuf.gl_pathv[gindex]); +- ret = parse_ini(globbuf.gl_pathv[gindex], _parse_directive, data); ++ file, linenum, buf); ++ ret = parse_ini(buf, _parse_directive, data); + if(ret) { + goto cleanup; + } +Binary files pacman-6.0.0.orig/src/pacman/.conf.c.swp and pacman-6.0.0/src/pacman/.conf.c.swp differ diff -r ad68e85dc416 -r fd09116d3537 provision_focal64.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/provision_focal64.sh Sat Sep 04 01:35:11 2021 +0200 @@ -0,0 +1,79 @@ +#!/usr/bin/env bash + +# This script is to be executed as root to provision necessary stuff +# to run distribution build on a blank Ubuntu Focal 64 image + +set -xe +dpkg --add-architecture i386 + +apt-get update + +apt-get install -y locales + +locale-gen en_US.UTF-8 + +TZ="America/Paris" \ +DEBIAN_FRONTEND="noninteractive" \ +apt-get install -y --no-install-recommends \ + autoconf \ + automake \ + bc \ + bison \ + build-essential \ + ca-certificates \ + cpio \ + cmake \ + fakeroot \ + file \ + flex \ + gettext \ + gawk \ + git \ + gperf \ + gcc-multilib \ + g++-multilib \ + help2man \ + less \ + libarchive-dev \ + libcurl4-openssl-dev \ + libssl-dev \ + libtool \ + libtool-bin \ + lzma \ + make \ + mercurial \ + meson \ + mingw-w64 \ + ncurses-dev \ + nsis \ + rsync \ + pkg-config \ + python \ + python-dev \ + python3-distutils \ + subversion \ + swig \ + texinfo \ + unrar \ + unzip \ + wget \ + xvfb \ + zip + + +## for winehq-staging +# gnupg \ +# libgpgme-dev \ +# software-properties-common \ +# wget -nc https://dl.winehq.org/wine-builds/winehq.key +# apt-key add winehq.key +# add-apt-repository 'deb https://dl.winehq.org/wine-builds/ubuntu/ focal main' +# apt-get update + +echo ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true | debconf-set-selections +echo ttf-mscorefonts-installer msttcorefonts/present-mscorefonts-eula note | debconf-set-selections + +apt-get install -y --install-recommends \ + wine-stable winbind + +apt-get clean -y diff -r ad68e85dc416 -r fd09116d3537 provision_xenial64.sh --- a/provision_xenial64.sh Sun Dec 17 01:29:32 2017 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,37 +0,0 @@ -#!/usr/bin/env bash - -# This script is to be executed as root to provision necessary stuff -# to run distribution build on a blank Ubuntu Xenial 64 image - -set -xe -dpkg --add-architecture i386 -apt-get update - -apt-get install -y --no-install-recommends \ - autoconf \ - automake \ - bison \ - build-essential \ - ca-certificates \ - flex \ - gettext \ - git \ - lzma \ - make \ - mercurial \ - mingw-w64 \ - nsis \ - swig \ - texinfo \ - unrar \ - unzip \ - wget \ - xvfb - - echo ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true | debconf-set-selections - echo ttf-mscorefonts-installer msttcorefonts/present-mscorefonts-eula note | debconf-set-selections - -apt-get install -y --install-recommends \ - wine - -apt-get clean -y diff -r ad68e85dc416 -r fd09116d3537 public.mk --- a/public.mk Sun Dec 17 01:29:32 2017 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,4 +0,0 @@ - -targets_ex+= canfestival - - diff -r ad68e85dc416 -r fd09116d3537 rebuild_docker.sh --- a/rebuild_docker.sh Sun Dec 17 01:29:32 2017 +0100 +++ b/rebuild_docker.sh Sat Sep 04 01:35:11 2021 +0200 @@ -1,16 +1,9 @@ #!/bin/bash -# this script is given as an exemple -# I use it to prepare a ready-to-build container -# and then use that container with enter_docker.sh +set -e -docker rm current -docker rmi beremiz_builder -docker build --build-arg UID=$(id -u) --build-arg GID=$(id -g) -t beremiz_builder . -docker create \ - --name current \ - -v ~/src:/home/devel/src \ - -v ~/build/:/home/devel/build \ - -v ~/.bash_history:/home/devel/.bash_history \ - -w /home/devel/build \ - -i -t beremiz_builder /bin/bash +./clean_docker_container.sh || true +./clean_docker_image.sh || true +./build_docker_image.sh +./create_docker_container.sh $1 + diff -r ad68e85dc416 -r fd09116d3537 revisions.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/revisions.txt Sat Sep 04 01:35:11 2021 +0200 @@ -0,0 +1,4 @@ +beremiz tip +CanFestival-3 tip +Modbus tip +matiec tip diff -r ad68e85dc416 -r fd09116d3537 win32.mk --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32.mk Sat Sep 04 01:35:11 2021 +0200 @@ -0,0 +1,21 @@ +# Win32 only distribution + +OWN_PROJECTS_EX=CanFestival-3 + +ide_targets_from_dist: canfestival + touch $@ + +CFbuild = installer/CanFestival-3 +canfestival: $(msysdir)/.stamp + rm -rf $(CFbuild) + $(call get_src_hg,$(CFbuild)) + cd $(CFbuild); \ + ./configure --can=tcp_win32 \ + --cc=$(CC) \ + --cxx=$(CXX) \ + --target=win32 \ + --wx=0 + $(MAKE) -C $(CFbuild) + cd $(CFbuild); find . -name "*.o" -exec rm {} ';' #remove object files only + touch $@ + diff -r ad68e85dc416 -r fd09116d3537 windows_installer.mk --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/windows_installer.mk Sat Sep 04 01:35:11 2021 +0200 @@ -0,0 +1,144 @@ +TIMESTAMP=$(shell date '+%y.%m.%d') + +CROSS_COMPILE=i686-w64-mingw32 +CROSS_COMPILE_LIBS_DIR=$(shell dirname $(shell $(CROSS_COMPILE)-gcc -print-libgcc-file-name)) +CC=$(CROSS_COMPILE)-gcc +CXX=$(CROSS_COMPILE)-g++ + +installer: + mkdir -p installer + + +CURDIR:=$(shell pwd) +PACMANPFX=$(CURDIR)/pacman +msysdir=installer/msys32 +MSYS_ROOT=$(CURDIR)/$(msysdir) + +pacman/.stamp: | installer + rm -rf pacman pacman-6.0.0 + $(call get_src_http,https://sources.archlinux.org/other/pacman,pacman-6.0.0.tar.xz)\ + tar -xJf $$dld + cd pacman-6.0.0 ;\ + patch -p1 < $(src)/pacman-6.0.0-nogpg-relative_conf.patch ;\ + meson -Droot-dir=$(MSYS_ROOT) -Dsysconfdir=$(MSYS_ROOT)/etc -Dlocalstatedir=$(MSYS_ROOT)/var build ;\ + DESTDIR=$(PACMANPFX) ninja -C build install + touch $@ + +define pacman_install +LD_LIBRARY_PATH=$(PACMANPFX)/usr/lib/x86_64-linux-gnu/ fakeroot pacman/usr/bin/pacman -S $(1) --arch i686 --noconfirm -cachedir $(distfiles) +endef + +$(msysdir)/.stamp: pacman/.stamp | installer + rm -rf installer/msys32 + $(call get_src_http,http://repo.msys2.org/distrib/i686,msys2-base-i686-20210705.tar.xz)\ + tar -C installer -xJf $$dld + $(call pacman_install, mingw-w64-i686-gcc) + $(call pacman_install, make) + touch $@ + + +msiexec = WINEPREFIX=$(tmp) $(XVFBRUN) msiexec +wine = WINEPREFIX=$(tmp) $(XVFBRUN) wine +pydir = installer/python +pysite = $(pydir)/Lib/site-packages + +python: $(pydir)/.stamp +$(pydir)/.stamp: | installer + rm -rf $(pydir) + mkdir -p $(pydir) + + # Python + $(call get_src_http,http://www.python.org/ftp/python/2.7.13,python-2.7.13.msi)\ + $(msiexec) /qn /i $$dld TARGETDIR=.\\$(pydir) + + # # wxPython fails if VC9.0 redistribuable is not fully here. + # $(call get_src_http,http://download.microsoft.com/download/1/1/1/1116b75a-9ec3-481a-a3c8-1777b5381140,vcredist_x86.exe)\ + # cp $$dld $(tmp) + # $(wine) $(tmp)/vcredist_x86.exe /qn /i + # cp -fu $(tmp)/drive_c/windows/winsxs/x86_microsoft.vc90*/* $(pydir) + + $(wine) $(pydir)/python.exe -m pip install --only-binary :all: --cache-dir $(distfiles) \ + wxPython \ + future \ + matplotlib \ + pywin32 \ + twisted \ + pyOpenSSL \ + Nevow \ + autobahn \ + msgpack_python \ + u-msgpack-python \ + zeroconf=0.20.0 \ + lxml \ + sslpsk \ + pycountry \ + fonttools \ + Brotli + + $(wine) $(pydir)/python.exe -m pip install --cache-dir $(distfiles) \ + Pyro \ + gnosis + + # # service identity (twisted prereq) ? + # # python sslpsk (to have PYROPSK) + # # FIXME : this uses 'some' binaries of openssl that forces us to stick to python 2.7.13 + # # FIXME : (from here : https://www.npcglib.org/~stathis/blog/precompiled-openssl/) + # # FIXME : build it, and use openssl binaries from https://github.com/python/cpython-bin-deps/tree/openssl-bin-1.0.2k + # WxGlade + $(call get_src_http,https://github.com/wxGlade/wxGlade/archive,v0.8.3.zip)\ + unzip -d $(tmp) $$dld + mv $(tmp)/wxGlade-0.8.3 $(pysite)/wxglade + + touch $@ + +matiecdir = installer/matiec +matiec: $(matiecdir)/.stamp +$(matiecdir)/.stamp: sources/matiec_src | installer + cp -a sources/matiec $(tmp);\ + cd $(tmp)/matiec;\ + autoreconf;\ + automake --add-missing;\ + ./configure --host=$(CROSS_COMPILE);\ + make -j$(CPUS); + rm -rf $(matiecdir) + mkdir -p $(matiecdir) + mv $(tmp)/matiec/*.exe $(matiecdir) + + # install necessary shared libraries from local cross-compiler + cp $(CROSS_COMPILE_LIBS_DIR)/libgcc_s_sjlj-1.dll $(matiecdir) + cp $(CROSS_COMPILE_LIBS_DIR)/libstdc++-6.dll $(matiecdir) + + mv $(tmp)/matiec/lib $(matiecdir) + touch $@ + +beremizdir = installer/beremiz + +beremiz: $(beremizdir)/.stamp +$(beremizdir)/.stamp: sources/beremiz_src | installer + rm -rf $(beremizdir);\ + cp -a sources/beremiz $(beremizdir);\ + touch $@ + +ide_revisions = installer/revisions.txt +$(ide_revisions): revisions.txt + cp $< $@ + +Beremiz-build: Beremiz-$(TIMESTAMP)_build +Beremiz-$(TIMESTAMP)_build: $(msysdir)/.stamp $(pydir)/.stamp $(matiecdir)/.stamp $(beremizdir)/.stamp ide_targets_from_dist $(ide_revisions) + touch $@ + +Beremiz-archive: Beremiz-$(TIMESTAMP).zip + +Beremiz-installer: Beremiz-$(TIMESTAMP).exe + +Beremiz-$(TIMESTAMP).zip: Beremiz-$(TIMESTAMP)_build + rm -f $@ + cd installer; zip -r -q ../$@ . + +Beremiz-$(TIMESTAMP).exe: Beremiz-$(TIMESTAMP)_build $(src)/license.txt $(src)/install.nsi + sed -e 's/\$$BVERSION/$(TIMESTAMP)/g' $(src)/license.txt > installer/license.txt + sed -e 's/\$$BVERSION/$(TIMESTAMP)/g' $(src)/install.nsi |\ + makensis - + + +