# HG changeset patch # User Edouard Tisserant # Date 1396557377 -7200 # Node ID 862080d48ef2199380f68d4edeb8eb5e593bd293 # Parent 6dec159540ee945b8637964f04bc139f345969b2 Various updates and enhancement in installer build system, including support for specialized distributions, existing in other branches diff -r 6dec159540ee -r 862080d48ef2 .hgignore --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/.hgignore Thu Apr 03 22:36:17 2014 +0200 @@ -0,0 +1,3 @@ +.*~ +.*\.swp +distfiles/.*[.](?!md5$).*$ diff -r 6dec159540ee -r 862080d48ef2 Makefile --- a/Makefile Tue Oct 11 16:34:05 2011 +0200 +++ b/Makefile Thu Apr 03 22:36:17 2014 +0200 @@ -2,32 +2,71 @@ # This is Makefile for Beremiz installer # -# invoke with "make" on a linux box having those packages installed : -# - wine +# 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 +# +# Linux RootFS and packages +# - reprepro +# - multistrap +# - germinate +# - user-mode-linux +# - ddpt # # 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 -version = 1.03 +version = 1.1 HGROOT := ~/src +GITROOT := $(HGROOT) +HGPULL = 0 +DIST = CPUS = 8 +BLKDEV=/dev/null src := $(shell dirname $(lastword $(MAKEFILE_LIST))) distfiles = $(src)/distfiles -sfmirror = ovh +sfmirror = downloads tmp := $(shell mktemp -d) +ifeq ("$(HGPULL)","1") +define hg_get_archive +hg -R $(HGROOT)/`basename $(1)` pull +hg -R $(HGROOT)/`basename $(1)` update $(2) +hg -R $(HGROOT)/`basename $(1)` archive $(1) +endef +else +define hg_get_archive +hg -R $(HGROOT)/`basename $(1)` archive $(2) $(1) +endef +endif + define get_src_hg -hg -R $(HGROOT)/`basename $(1)` archive $(tmp)/`basename $(1)`.tar.bz2 +rm -rf $(1) +$(call hg_get_archive, $(1), $(2)) +endef + +define get_src_git +rm -rf $(1) mkdir $(1) -tar --strip-components=1 -C $(1) -xvjf $(tmp)/`basename $(1)`.tar.bz2 +(cd $(GITROOT)/`basename $(1)`; git archive --format=tar $(2)) | tar -C $(1) -x endef define get_src_http @@ -39,61 +78,67 @@ endef define get_src_sf -$(call get_src_http,http://$(sfmirror).dl.sourceforge.net/project/$(1),$(2)) -endef - -all: Beremiz-$(version).exe - +$(call get_src_http,http://$(sfmirror).sourceforge.net/project/$(1),$(2)) +endef + +all: Beremiz-$(version).exe $(targets_add) + + +ifneq ("$(DIST)","") +include $(src)/$(DIST).mk +endif + +CUSTOM := public +CUSTOM_DIR := $(src) + +include $(CUSTOM_DIR)/$(CUSTOM).mk + +build: + rm -rf build + mkdir -p build + +# native toolchain, pre-built mingwdir=build/mingw -mingw: +mingw: |build rm -rf $(mingwdir) mkdir -p $(mingwdir) # windows.h - $(call get_src_sf,mingw/MinGW/BaseSystem/RuntimeLibrary/Win32-API/w32api-3.17,w32api-3.17-2-mingw32-dev.tar.lzma)\ - tar -C $(mingwdir) --lzma -xvf $$dld + $(call get_src_sf,mingw/MinGW/Base/w32api/w32api-3.17,w32api-3.17-2-mingw32-dev.tar.lzma)\ + tar -C $(mingwdir) --lzma -xf $$dld # mingw runtime - $(call get_src_sf,mingw/MinGW/BaseSystem/RuntimeLibrary/MinGW-RT/mingwrt-3.20,mingwrt-3.20-mingw32-dll.tar.gz)\ - tar -C $(mingwdir) -xvzf $$dld + $(call get_src_sf,mingw/MinGW/Base/mingw-rt/mingwrt-3.20,mingwrt-3.20-mingw32-dll.tar.gz)\ + tar -C $(mingwdir) -xzf $$dld # mingw headers and lib - $(call get_src_sf,mingw/MinGW/BaseSystem/RuntimeLibrary/MinGW-RT/mingwrt-3.20,mingwrt-3.20-mingw32-dev.tar.gz)\ - tar -C $(mingwdir) -xvzf $$dld + $(call get_src_sf,mingw/MinGW/Base/mingw-rt/mingwrt-3.20,mingwrt-3.20-mingw32-dev.tar.gz)\ + tar -C $(mingwdir) -xzf $$dld # binutils - $(call get_src_sf,mingw/MinGW/BaseSystem/GNU-Binutils/binutils-2.21.53,binutils-2.21.53-1-mingw32-bin.tar.lzma)\ - tar -C $(mingwdir) --lzma -xvf $$dld + $(call get_src_sf,mingw/MinGW/Base/binutils/binutils-2.21.53,binutils-2.21.53-1-mingw32-bin.tar.lzma)\ + tar -C $(mingwdir) --lzma -xf $$dld # C compiler - $(call get_src_sf,mingw/MinGW/BaseSystem/GCC/Version4/gcc-4.6.1-2,gcc-core-4.6.1-2-mingw32-bin.tar.lzma)\ - tar -C $(mingwdir) --lzma -xvf $$dld - # C++ compiler - #$(call get_src_sf,mingw/MinGW/BaseSystem/GCC/Version4/gcc-4.6.1-2,gcc-c++-4.6.1-2-mingw32-bin.tar.lzma)\ - #tar -C $(mingwdir) --lzma -xvf $$dld + $(call get_src_sf,mingw/MinGW/Base/gcc/Version4/gcc-4.6.1-2,gcc-core-4.6.1-2-mingw32-bin.tar.lzma)\ + tar -C $(mingwdir) --lzma -xf $$dld # dependencies - $(call get_src_sf,mingw/MinGW/gmp/gmp-5.0.1-1,libgmp-5.0.1-1-mingw32-dll-10.tar.lzma)\ - tar -C $(mingwdir) --lzma -xvf $$dld - $(call get_src_sf,mingw/MinGW/mpc/mpc-0.8.1-1,libmpc-0.8.1-1-mingw32-dll-2.tar.lzma)\ - tar -C $(mingwdir) --lzma -xvf $$dld - $(call get_src_sf,mingw/MinGW/mpfr/mpfr-2.4.1-1,libmpfr-2.4.1-1-mingw32-dll-1.tar.lzma)\ - tar -C $(mingwdir) --lzma -xvf $$dld - #$(call get_src_sf,mingw/MinGW/pthreads-w32/pthreads-w32-2.9.0-pre-20110507-2,libpthreadgc-2.9.0-mingw32-pre-20110507-2-dll-2.tar.lzma)\ - #tar -C $(mingwdir) --lzma -xvf $$dld - #$(call get_src_sf,mingw/MinGW/pthreads-w32/pthreads-w32-2.9.0-pre-20110507-2,pthreads-w32-2.9.0-mingw32-pre-20110507-2-dev.tar.lzma)\ - #tar -C $(mingwdir) --lzma -xvf $$dld - $(call get_src_sf,mingw/MinGW/gettext/gettext-0.17-1,libintl-0.17-1-mingw32-dll-8.tar.lzma)\ - tar -C $(mingwdir) --lzma -xvf $$dld - $(call get_src_sf,mingw/MinGW/gettext/gettext-0.17-1,libgettextpo-0.17-1-mingw32-dll-0.tar.lzma)\ - tar -C $(mingwdir) --lzma -xvf $$dld - $(call get_src_sf,mingw/MinGW/libiconv/libiconv-1.13.1-1,libiconv-1.13.1-1-mingw32-dll-2.tar.lzma)\ - tar -C $(mingwdir) --lzma -xvf $$dld - - touch mingw - -# a directory to collect binaries that must be in the path + $(call get_src_sf,mingw/MinGW/Base/gmp/gmp-5.0.1-1,libgmp-5.0.1-1-mingw32-dll-10.tar.lzma)\ + tar -C $(mingwdir) --lzma -xf $$dld + $(call get_src_sf,mingw/MinGW/Base/mpc/mpc-0.8.1-1,libmpc-0.8.1-1-mingw32-dll-2.tar.lzma)\ + tar -C $(mingwdir) --lzma -xf $$dld + $(call get_src_sf,mingw/MinGW/Base/mpfr/mpfr-2.4.1-1,libmpfr-2.4.1-1-mingw32-dll-1.tar.lzma)\ + tar -C $(mingwdir) --lzma -xf $$dld + $(call get_src_sf,mingw/MinGW/Base/gettext/gettext-0.17-1,libintl-0.17-1-mingw32-dll-8.tar.lzma)\ + tar -C $(mingwdir) --lzma -xf $$dld + $(call get_src_sf,mingw/MinGW/Base/gettext/gettext-0.17-1,libgettextpo-0.17-1-mingw32-dll-0.tar.lzma)\ + tar -C $(mingwdir) --lzma -xf $$dld + $(call get_src_sf,mingw/MinGW/Base/libiconv/libiconv-1.13.1-1,libiconv-1.13.1-1-mingw32-dll-2.tar.lzma)\ + tar -C $(mingwdir) --lzma -xf $$dld + + touch $@ msiexec = WINEPREFIX=$(tmp) msiexec wine = WINEPREFIX=$(tmp) wine pydir = build/python pysite = $(pydir)/Lib/site-packages -python: +python: |build rm -rf $(pydir) mkdir -p $(pydir) # Python @@ -113,6 +158,11 @@ 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)\ @@ -130,7 +180,7 @@ # Nevow $(call get_src_pypi,source/N/Nevow,Nevow-0.10.0.tar.gz)\ - tar -C $(tmp) -xvzf $$dld + tar -C $(tmp) -xzf $$dld for i in nevow formless twisted; do cp -R $(tmp)/Nevow-0.10.0/$$i $(pysite); done # Numpy @@ -140,7 +190,7 @@ # SimpleJson $(call get_src_pypi,source/s/simplejson,simplejson-2.2.1.tar.gz)\ - tar -C $(tmp) -xvzf $$dld + tar -C $(tmp) -xzf $$dld cp -R $(tmp)/simplejson-2.2.1/simplejson/ $(pysite) # WxGlade @@ -149,33 +199,76 @@ mv $(tmp)/agriggio-wxglade-b0247325407e $(pysite)/wxglade # Pyro - $(call get_src_pypi,source/P/Pyro,Pyro-3.15.tar.gz)\ - tar -C $(tmp) -xvzf $$dld - mv $(tmp)/Pyro-3.15/Pyro $(pysite) - - touch python + $(call get_src_pypi,source/P/Pyro,Pyro-3.9.1.tar.gz)\ + tar -C $(tmp) -xzf $$dld + mv $(tmp)/Pyro-3.9.1/Pyro $(pysite) + + # Lxml + $(call get_src_pypi,2.7/l/lxml,lxml-3.2.3.win32-py2.7.exe)\ + unzip -d $(tmp)/lxml $$dld ; [ $$? -eq 1 ] #silence error unziping .exe + cp -R $(tmp)/lxml/PLATLIB/* $(pysite) + + touch $@ matiecdir = build/matiec -matiec: +matiec: |build $(call get_src_hg,$(tmp)/matiec) cd $(tmp)/matiec ;\ + autoreconf;\ ./configure --host=i586-mingw32msvc;\ make -j$(CPUS); - mkdir $(matiecdir) + rm -rf $(matiecdir) + mkdir -p $(matiecdir) mv $(tmp)/matiec/*.exe $(matiecdir) mv $(tmp)/matiec/lib $(matiecdir) - touch matiec - -plcopeneditor: - $(call get_src_hg,build/plcopeneditor) - touch plcopeneditor - -beremiz: + touch $@ + +examples: |build + rm -rf examples + mkdir -p examples + +beremiz: | build examples $(call get_src_hg,build/beremiz) - touch beremiz - -Beremiz-$(version).exe: python mingw matiec plcopeneditor beremiz $(src)/license.txt $(src)/install.nsi + $(call tweak_beremiz_targets) + 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 $@ + +beremiz_etherlab_plugin: beremiz | examples + $(call get_src_hg,$(tmp)/beremiz_etherlab_plugin) + rm -rf examples/ethercat_tests + mv $(tmp)/beremiz_etherlab_plugin/ethercat_tests examples/ + rm -rf build/EthercatMaster + mv $(tmp)/beremiz_etherlab_plugin/etherlab build/EthercatMaster + 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=i586-mingw32msvc-gcc \ + --cxx=i586-mingw32msvc-g++ \ + --target=win32 \ + --wx=0 + $(MAKE) -C $(CFbuild) + cd $(CFbuild); find . -name "*.o" -exec rm {} ';' #remove object files only + touch $@ + +targets=python 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 | makensis - - - + 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) + + diff -r 6dec159540ee -r 862080d48ef2 install.nsi --- a/install.nsi Tue Oct 11 16:34:05 2011 +0200 +++ b/install.nsi Thu Apr 03 22:36:17 2014 +0200 @@ -1,3 +1,7 @@ + +SetCompressor /SOLID /FINAL lzma +SetDatablockOptimize off + !include MUI2.nsh ; MUI Settings @@ -23,13 +27,20 @@ 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/"' +!define BEREMIZ_EXE '"$INSTDIR\beremiz\Beremiz.py" -u "http://www.beremiz.org/updateinfo/$BVERSION/" $BEXTENSIONS' 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)" +SectionEnd + Section "Install" ;Store installation folder WriteRegStr HKCU "Software\Beremiz" "" $INSTDIR @@ -46,11 +57,13 @@ SetShellVarContext all CreateDirectory "$SMPROGRAMS\Beremiz" SetOutPath "$INSTDIR\mingw\bin" - CreateShortCut "$SMPROGRAMS\Beremiz\PlcopenEditor.lnk" "${PYTHONW_EXE}" '"$INSTDIR\plcopeneditor\plcopeneditor.py"' "$INSTDIR\plcopeneditor\images\poe.ico" + 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" SetShellVarContext current CreateShortCut "$DESKTOP\Beremiz.lnk" "${PYTHONW_EXE}" '${BEREMIZ_EXE}' "$INSTDIR\beremiz\images\brz.ico" +; Profiling : +; CreateShortCut "$DESKTOP\BeremizPro.lnk" "${PYTHONW_EXE}" '-m cProfile -o %USERPROFILE%/stats.pstat ${BEREMIZ_EXE}' "$INSTDIR\beremiz\images\brz.ico" SectionEnd Section "Uninstall" diff -r 6dec159540ee -r 862080d48ef2 public.mk --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/public.mk Thu Apr 03 22:36:17 2014 +0200 @@ -0,0 +1,4 @@ + +targets_ex+= canfestival + +