From c7e1d8ee6ebfba83c78e5c6cb2280d4f6ecfd76f Mon Sep 17 00:00:00 2001 From: Collin Kidder Date: Sun, 4 Aug 2019 12:46:44 -0400 Subject: [PATCH 01/34] First, probably idiotic, travisci attempt. --- .travis.yml | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..90f958b --- /dev/null +++ b/.travis.yml @@ -0,0 +1,32 @@ +language: cpp +compiler: gcc +sudo: require +dist: xenial + +before_install: + - sudo add-apt-repository ppa:beineri/opt-qt-5.12.3-xenial -y + - sudo apt-get update -qq + +install: + - sudo apt-get -y install qt512base qt512connectivity qt512imageformats qt512serialport qt512serialbus libgl1-mesa-dev + - source /opt/qt*/bin/qt*-env.sh + +script: + - qmake CONFIG+=release PREFIX=/usr + - make -j$(nproc) + - make INSTALL_ROOT=appdir -j$(nproc) install ; find appdir/ + - wget -c -nv "https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage" + - chmod a+x linuxdeployqt-continuous-x86_64.AppImage + # export VERSION=... # linuxdeployqt uses this for naming the file + - ./linuxdeployqt-continuous-x86_64.AppImage appdir/usr/share/applications/*.desktop -appimage + +after_success: + # find appdir -executable -type f -exec ldd {} \; | grep " => /usr" | cut -d " " -f 2-3 | sort | uniq # for debugging + # curl --upload-file APPNAME*.AppImage https://transfer.sh/APPNAME-git.$(git rev-parse --short HEAD)-x86_64.AppImage + - wget -c https://github.com/probonopd/uploadtool/raw/master/upload.sh + - bash upload.sh SavvyCAN*.AppImage* + +branches: + except: + - # Do not build tags that we create when we upload to GitHub Releases + - /^(?i:continuous)/ From cce18b12ab35e9033556581f268562690349b10c Mon Sep 17 00:00:00 2001 From: Collin Kidder Date: Sun, 4 Aug 2019 12:53:25 -0400 Subject: [PATCH 02/34] Add some missing dependencies --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 90f958b..52f80e4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,7 +8,7 @@ before_install: - sudo apt-get update -qq install: - - sudo apt-get -y install qt512base qt512connectivity qt512imageformats qt512serialport qt512serialbus libgl1-mesa-dev + - sudo apt-get -y install qt512base qt512connectivity qt512imageformats qt512serialport qt512serialbus qt512doc qt512tools libgl1-mesa-dev - source /opt/qt*/bin/qt*-env.sh script: From 408dcc9c6978ff1651a7bdff13495ddf80b0bc12 Mon Sep 17 00:00:00 2001 From: Collin Kidder Date: Sun, 4 Aug 2019 16:23:40 -0400 Subject: [PATCH 03/34] Fixes to PRO file to hopefully fix TravisCI build --- SavvyCAN.pro | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/SavvyCAN.pro b/SavvyCAN.pro index 9d67acf..560c205 100644 --- a/SavvyCAN.pro +++ b/SavvyCAN.pro @@ -158,7 +158,15 @@ FORMS += ui/candatagrid.ui \ ui/newconnectiondialog.ui \ ui/temporalgraphwindow.ui -DISTFILES += +DISTFILES += \ + SavvyCAN.qch \ + SavvyCAN.qhc \ + SavvyCAN.qhcp \ + SavvyCAN.qhp \ + examples \ + icon \ + + RESOURCES += \ icons.qrc \ @@ -167,3 +175,18 @@ RESOURCES += \ win32 { LIBS += opengl32.lib } + +unix { + isEmpty(PREFIX) + { + PREFIX=/usr/local + } + target.path = $$PREFIX/bin + shortcutfiles.files=SavvyCAN.desktop + shortcutfiles.path = $$PREFIX/share/applications + INSTALLS += shortcutfiles + DISTFILES += SavvyCAN.desktop +} + +INSTALLS += target + From a1090ee952c8a42009217f7f15a4fb6fb89f0a41 Mon Sep 17 00:00:00 2001 From: Collin Kidder Date: Sun, 4 Aug 2019 16:42:58 -0400 Subject: [PATCH 04/34] Yet more TravisCI changes. It's getting there --- .travis.yml | 6 +++--- SavvyCAN.desktop | 4 ++-- {icon => icons}/SavvyIcon.png | Bin icons/hicolor/256x256/SavvyCAN.png | Bin 0 -> 52936 bytes 4 files changed, 5 insertions(+), 5 deletions(-) rename {icon => icons}/SavvyIcon.png (100%) create mode 100644 icons/hicolor/256x256/SavvyCAN.png diff --git a/.travis.yml b/.travis.yml index 52f80e4..91d672f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -18,13 +18,13 @@ script: - wget -c -nv "https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage" - chmod a+x linuxdeployqt-continuous-x86_64.AppImage # export VERSION=... # linuxdeployqt uses this for naming the file - - ./linuxdeployqt-continuous-x86_64.AppImage appdir/usr/share/applications/*.desktop -appimage + - ./linuxdeployqt-continuous-x86_64.AppImage appdir/usr/local/share/applications/SavvyCAN.desktop -appimage after_success: # find appdir -executable -type f -exec ldd {} \; | grep " => /usr" | cut -d " " -f 2-3 | sort | uniq # for debugging # curl --upload-file APPNAME*.AppImage https://transfer.sh/APPNAME-git.$(git rev-parse --short HEAD)-x86_64.AppImage - - wget -c https://github.com/probonopd/uploadtool/raw/master/upload.sh - - bash upload.sh SavvyCAN*.AppImage* + # wget -c https://github.com/probonopd/uploadtool/raw/master/upload.sh + # bash upload.sh SavvyCAN*.AppImage* branches: except: diff --git a/SavvyCAN.desktop b/SavvyCAN.desktop index 3b52fdb..bf11bd6 100644 --- a/SavvyCAN.desktop +++ b/SavvyCAN.desktop @@ -3,8 +3,8 @@ Type=Application Name=SavvyCAN GenericName=CANBus reverse engineering tool Comment=Facilitates reverse engineering of canbus captures -Exec=FULLPATH/SavvyCAN -Icon=FULLPATH/icon/SavvyIcon.png +Exec=SavvyCAN +Icon=SavvyCAN Terminal=false Categories=Development;Electronics;IDE; MimeType=text/x-application diff --git a/icon/SavvyIcon.png b/icons/SavvyIcon.png similarity index 100% rename from icon/SavvyIcon.png rename to icons/SavvyIcon.png diff --git a/icons/hicolor/256x256/SavvyCAN.png b/icons/hicolor/256x256/SavvyCAN.png new file mode 100644 index 0000000000000000000000000000000000000000..6a34ad96c9f2b51f5046570d542d17b43a302848 GIT binary patch literal 52936 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 Date: Sun, 4 Aug 2019 16:59:33 -0400 Subject: [PATCH 05/34] More TravisCI fixes. --- SavvyCAN.desktop | 3 +-- icons/hicolor/256x256/{ => apps}/SavvyCAN.png | Bin icons/hicolor/scalable/apps/SavvyCAN.png | Bin 0 -> 52936 bytes 3 files changed, 1 insertion(+), 2 deletions(-) rename icons/hicolor/256x256/{ => apps}/SavvyCAN.png (100%) create mode 100644 icons/hicolor/scalable/apps/SavvyCAN.png diff --git a/SavvyCAN.desktop b/SavvyCAN.desktop index bf11bd6..076ee6a 100644 --- a/SavvyCAN.desktop +++ b/SavvyCAN.desktop @@ -7,6 +7,5 @@ Exec=SavvyCAN Icon=SavvyCAN Terminal=false Categories=Development;Electronics;IDE; -MimeType=text/x-application +MimeType=text/x-application; Keywords=embedded electronics;electronics;canbus;reverse engineering; -Name[en_US]=SavvyCAN diff --git a/icons/hicolor/256x256/SavvyCAN.png b/icons/hicolor/256x256/apps/SavvyCAN.png similarity index 100% rename from icons/hicolor/256x256/SavvyCAN.png rename to icons/hicolor/256x256/apps/SavvyCAN.png diff --git a/icons/hicolor/scalable/apps/SavvyCAN.png b/icons/hicolor/scalable/apps/SavvyCAN.png new file mode 100644 index 0000000000000000000000000000000000000000..6a34ad96c9f2b51f5046570d542d17b43a302848 GIT binary patch literal 52936 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 Date: Sun, 4 Aug 2019 17:19:40 -0400 Subject: [PATCH 06/34] More TravisCI fixes --- SavvyCAN.pro | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/SavvyCAN.pro b/SavvyCAN.pro index 560c205..16d25d6 100644 --- a/SavvyCAN.pro +++ b/SavvyCAN.pro @@ -157,17 +157,7 @@ FORMS += ui/candatagrid.ui \ helpwindow.ui \ ui/newconnectiondialog.ui \ ui/temporalgraphwindow.ui - -DISTFILES += \ - SavvyCAN.qch \ - SavvyCAN.qhc \ - SavvyCAN.qhcp \ - SavvyCAN.qhp \ - examples \ - icon \ - - RESOURCES += \ icons.qrc \ images.qrc @@ -188,5 +178,17 @@ unix { DISTFILES += SavvyCAN.desktop } +examplefiles.files=examples +examplefiles.path = $$PREFIX/share/savvycan/examples +INSTALLS += examplefiles + +iconfiles.files=icons +iconfiles.path = $$PREFIX/share/icons +INSTALLS += iconfiles + +helpfiles.files=SavvyCAN.q* +helpfiles.path = $$PREFIX/share/applications +INSTALLS += helpfiles + INSTALLS += target From fc7ebc87e6f77eeceba441d558ea190a24932b64 Mon Sep 17 00:00:00 2001 From: Collin Kidder Date: Sun, 4 Aug 2019 17:34:22 -0400 Subject: [PATCH 07/34] Another TravisCI update but this might finally do something! --- .travis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 91d672f..042fd03 100644 --- a/.travis.yml +++ b/.travis.yml @@ -18,13 +18,13 @@ script: - wget -c -nv "https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage" - chmod a+x linuxdeployqt-continuous-x86_64.AppImage # export VERSION=... # linuxdeployqt uses this for naming the file - - ./linuxdeployqt-continuous-x86_64.AppImage appdir/usr/local/share/applications/SavvyCAN.desktop -appimage + - ./linuxdeployqt-continuous-x86_64.AppImage appdir/usr/local/share/applications/SavvyCAN.desktop -appimage -extra-plugins=iconengines,platformthemes.libqgtk3.so after_success: # find appdir -executable -type f -exec ldd {} \; | grep " => /usr" | cut -d " " -f 2-3 | sort | uniq # for debugging # curl --upload-file APPNAME*.AppImage https://transfer.sh/APPNAME-git.$(git rev-parse --short HEAD)-x86_64.AppImage - # wget -c https://github.com/probonopd/uploadtool/raw/master/upload.sh - # bash upload.sh SavvyCAN*.AppImage* + - wget -c https://github.com/probonopd/uploadtool/raw/master/upload.sh + - bash upload.sh SavvyCAN*.AppImage* branches: except: From 17503bc14efb9538be6576995f5dfceef0adcd71 Mon Sep 17 00:00:00 2001 From: Collin Kidder Date: Mon, 5 Aug 2019 20:56:10 -0400 Subject: [PATCH 08/34] Attempt at getting TravisCI to compile for all three operating systems --- .travis.yml | 74 ++++++++++++++++++++++++++++++++++------------------- 1 file changed, 48 insertions(+), 26 deletions(-) diff --git a/.travis.yml b/.travis.yml index 042fd03..e1fb340 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,32 +1,54 @@ language: cpp -compiler: gcc -sudo: require -dist: xenial -before_install: - - sudo add-apt-repository ppa:beineri/opt-qt-5.12.3-xenial -y - - sudo apt-get update -qq - -install: - - sudo apt-get -y install qt512base qt512connectivity qt512imageformats qt512serialport qt512serialbus qt512doc qt512tools libgl1-mesa-dev - - source /opt/qt*/bin/qt*-env.sh - -script: - - qmake CONFIG+=release PREFIX=/usr - - make -j$(nproc) - - make INSTALL_ROOT=appdir -j$(nproc) install ; find appdir/ - - wget -c -nv "https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage" - - chmod a+x linuxdeployqt-continuous-x86_64.AppImage - # export VERSION=... # linuxdeployqt uses this for naming the file - - ./linuxdeployqt-continuous-x86_64.AppImage appdir/usr/local/share/applications/SavvyCAN.desktop -appimage -extra-plugins=iconengines,platformthemes.libqgtk3.so - -after_success: - # find appdir -executable -type f -exec ldd {} \; | grep " => /usr" | cut -d " " -f 2-3 | sort | uniq # for debugging - # curl --upload-file APPNAME*.AppImage https://transfer.sh/APPNAME-git.$(git rev-parse --short HEAD)-x86_64.AppImage - - wget -c https://github.com/probonopd/uploadtool/raw/master/upload.sh - - bash upload.sh SavvyCAN*.AppImage* - branches: except: - # Do not build tags that we create when we upload to GitHub Releases - /^(?i:continuous)/ + +matrix: + include + - os: linux + dist: xenial + compiler: gcc + sudo: require + before_install: + - sudo add-apt-repository ppa:beineri/opt-qt-5.12.3-xenial -y + - sudo apt-get update -qq + + install: + - sudo apt-get -y install qt512base qt512connectivity qt512imageformats qt512serialport qt512serialbus qt512doc qt512tools libgl1-mesa-dev + - source /opt/qt*/bin/qt*-env.sh + + script: + - qmake CONFIG+=release PREFIX=/usr + - make -j$(nproc) + - make INSTALL_ROOT=appdir -j$(nproc) install ; find appdir/ + - wget -c -nv "https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage" + - chmod a+x linuxdeployqt-continuous-x86_64.AppImage + # export VERSION=... # linuxdeployqt uses this for naming the file + - ./linuxdeployqt-continuous-x86_64.AppImage appdir/usr/local/share/applications/SavvyCAN.desktop -appimage -extra-plugins=iconengines,platformthemes.libqgtk3.so + + after_success: + # find appdir -executable -type f -exec ldd {} \; | grep " => /usr" | cut -d " " -f 2-3 | sort | uniq # for debugging + # curl --upload-file APPNAME*.AppImage https://transfer.sh/APPNAME-git.$(git rev-parse --short HEAD)-x86_64.AppImage + - wget -c https://github.com/probonopd/uploadtool/raw/master/upload.sh + - bash upload.sh SavvyCAN*.AppImage* + + - os: osx + osx_image: xcode10 + before_install: + - brew install qt5 + - brew link qt5 --force + script: + - qmake CONFIG+=release -spec macx-xcode SavvyCAN.pro + - xcodebuild + - macdeployqt Release/SavvyCAN.app -dmg + - os: windows + before_install: + - dir C:/Program\ Files\ \(x86\)/Windows\ Kits/10/bin/10.0.17134.0/x64 + - cmd.exe /C 'cd && "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" x86 && cd && cd "C:/Users/travis/build/braindef/jamulus" && dir' + - curl -vLO http://download.qt.io/official_releases/online_installers/qt-unified-windows-x86-online.exe + - "./qt-unified-windows-x86-online.exe --verbose --script qt-installer-windows.qs" + - ls -la C:/Qt/5.12.3/msvc2017/bin/qtenv2.bat + script: + - cmd.exe /C 'cd && "C:\Qt\5.12.3\msvc2017\bin\qtenv2.bat" && cd && "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" x86 && cd && qmake CONFIG+=RELEASE SavvyCAN.pro && nmake' From f189c5cf817dcd5b66bd8a67a02367731f35c9ed Mon Sep 17 00:00:00 2001 From: Collin Kidder Date: Mon, 5 Aug 2019 20:59:09 -0400 Subject: [PATCH 09/34] Add windows installer script for use by TravisCI when compiling on Windows VM --- qt-installer-windows.qs | 92 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 qt-installer-windows.qs diff --git a/qt-installer-windows.qs b/qt-installer-windows.qs new file mode 100644 index 0000000..8164790 --- /dev/null +++ b/qt-installer-windows.qs @@ -0,0 +1,92 @@ +/* + * Qt Installer script for a non-interactive installation of Qt5 on Windows. + * Installs the 64-bit package if environment variable PLATFORM="x64". + */ + +// jshint strict:false +/* globals QInstaller, QMessageBox, buttons, gui, installer, console */ + +// Run with: +// .\qt-unified-windows-x86-3.0.4-online.exe --verbose --script tools\qt-installer-windows.qs + +// Look for Name elements in +// https://download.qt.io/online/qtsdkrepository/windows_x86/desktop/qt5_5123/Updates.xml +// Unfortunately it is not possible to disable deps like qt.tools.qtcreator +var INSTALL_COMPONENTS = [ + installer.environmentVariable("PLATFORM") == "x64" ? + "qt.qt5.5123.win64_msvc2017_64" : + "qt.qt5.5123.win32_msvc2017", +]; + +function Controller() { + // Continue on installing to an existing (possibly empty) directory. + installer.setMessageBoxAutomaticAnswer("OverwriteTargetDirectory", QMessageBox.Yes); + // Continue at "SHOW FINISHED PAGE" + installer.installationFinished.connect(function() { + console.log("installationFinished"); + gui.clickButton(buttons.NextButton); + }); +} + +Controller.prototype.WelcomePageCallback = function() { + console.log("Step: " + gui.currentPageWidget()); + // At least for 3.0.4 immediately clicking Next fails, so wait a bit. + // https://github.com/benlau/qtci/commit/85cb986b66af4807a928c70e13d82d00dc26ebf0 + gui.clickButton(buttons.NextButton, 1000); +}; + +Controller.prototype.CredentialsPageCallback = function() { + console.log("Step: " + gui.currentPageWidget()); + gui.clickButton(buttons.NextButton); +}; + +Controller.prototype.IntroductionPageCallback = function() { + console.log("Step: " + gui.currentPageWidget()); + gui.clickButton(buttons.NextButton); +}; + +Controller.prototype.TargetDirectoryPageCallback = function() { + console.log("Step: " + gui.currentPageWidget()); + // Keep default at "C:\Qt". + //gui.currentPageWidget().TargetDirectoryLineEdit.setText("E:\\Qt"); + gui.clickButton(buttons.NextButton); +}; + +Controller.prototype.ComponentSelectionPageCallback = function() { + console.log("Step: " + gui.currentPageWidget()); + var page = gui.currentPageWidget(); + page.deselectAll(); + for (var i = 0; i < INSTALL_COMPONENTS.length; i++) { + page.selectComponent(INSTALL_COMPONENTS[i]); + } + gui.clickButton(buttons.NextButton); +}; + +Controller.prototype.LicenseAgreementPageCallback = function() { + console.log("Step: " + gui.currentPageWidget()); + gui.currentPageWidget().AcceptLicenseRadioButton.setChecked(true); + gui.clickButton(buttons.NextButton); +}; + +Controller.prototype.StartMenuDirectoryPageCallback = function() { + console.log("Step: " + gui.currentPageWidget()); + gui.clickButton(buttons.NextButton); +}; + +Controller.prototype.ReadyForInstallationPageCallback = function() { + console.log("Step: " + gui.currentPageWidget()); + gui.clickButton(buttons.NextButton); +}; + +Controller.prototype.FinishedPageCallback = function() { + console.log("Step: " + gui.currentPageWidget()); + // TODO somehow the installer crashes after this step. + // https://stackoverflow.com/questions/25105269/silent-install-qt-run-installer-on-ubuntu-server + var checkBoxForm = gui.currentPageWidget().LaunchQtCreatorCheckBoxForm; + if (checkBoxForm && checkBoxForm.launchQtCreatorCheckBox) { + checkBoxForm.launchQtCreatorCheckBox.checked = false; + } + gui.clickButton(buttons.FinishButton); +}; + +// vim: set ft=javascript: From b0459773bdb4c22c5c002153c4bc131bf859ee56 Mon Sep 17 00:00:00 2001 From: Collin Kidder Date: Mon, 5 Aug 2019 21:01:48 -0400 Subject: [PATCH 10/34] Reorder yml file a bit --- .travis.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index e1fb340..2cbd0c8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,10 +1,5 @@ language: cpp -branches: - except: - - # Do not build tags that we create when we upload to GitHub Releases - - /^(?i:continuous)/ - matrix: include - os: linux @@ -52,3 +47,8 @@ matrix: - ls -la C:/Qt/5.12.3/msvc2017/bin/qtenv2.bat script: - cmd.exe /C 'cd && "C:\Qt\5.12.3\msvc2017\bin\qtenv2.bat" && cd && "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" x86 && cd && qmake CONFIG+=RELEASE SavvyCAN.pro && nmake' + +branches: + except: + - # Do not build tags that we create when we upload to GitHub Releases + - /^(?i:continuous)/ From aed0248409ea4136c9bbddeb354021719e921307 Mon Sep 17 00:00:00 2001 From: Collin Kidder Date: Mon, 5 Aug 2019 21:06:09 -0400 Subject: [PATCH 11/34] Whoops, missing colon messed up travis.yml --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 2cbd0c8..828e6e6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,7 @@ language: cpp matrix: - include + include: - os: linux dist: xenial compiler: gcc From 5167643d3ce620303971a2fc011dc699961fc0ae Mon Sep 17 00:00:00 2001 From: Collin Kidder Date: Mon, 5 Aug 2019 21:27:39 -0400 Subject: [PATCH 12/34] Temporarily disable linux and OSX as they compile, attempt to fix windows compile --- .travis.yml | 63 ++++++++++++++++++++++++++--------------------------- 1 file changed, 31 insertions(+), 32 deletions(-) diff --git a/.travis.yml b/.travis.yml index 828e6e6..66e98d1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,51 +2,50 @@ language: cpp matrix: include: - - os: linux - dist: xenial - compiler: gcc - sudo: require - before_install: - - sudo add-apt-repository ppa:beineri/opt-qt-5.12.3-xenial -y - - sudo apt-get update -qq +# - os: linux +# dist: xenial +# compiler: gcc +# sudo: require +# before_install: +# - sudo add-apt-repository ppa:beineri/opt-qt-5.12.3-xenial -y +# - sudo apt-get update -qq - install: - - sudo apt-get -y install qt512base qt512connectivity qt512imageformats qt512serialport qt512serialbus qt512doc qt512tools libgl1-mesa-dev - - source /opt/qt*/bin/qt*-env.sh +# install: +# - sudo apt-get -y install qt512base qt512connectivity qt512imageformats qt512serialport qt512serialbus qt512doc qt512tools libgl1-mesa-dev +# - source /opt/qt*/bin/qt*-env.sh - script: - - qmake CONFIG+=release PREFIX=/usr - - make -j$(nproc) - - make INSTALL_ROOT=appdir -j$(nproc) install ; find appdir/ - - wget -c -nv "https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage" - - chmod a+x linuxdeployqt-continuous-x86_64.AppImage +# script: +# - qmake CONFIG+=release PREFIX=/usr +# - make -j$(nproc) +# - make INSTALL_ROOT=appdir -j$(nproc) install ; find appdir/ +# - wget -c -nv "https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage" +# - chmod a+x linuxdeployqt-continuous-x86_64.AppImage # export VERSION=... # linuxdeployqt uses this for naming the file - - ./linuxdeployqt-continuous-x86_64.AppImage appdir/usr/local/share/applications/SavvyCAN.desktop -appimage -extra-plugins=iconengines,platformthemes.libqgtk3.so +# - ./linuxdeployqt-continuous-x86_64.AppImage appdir/usr/local/share/applications/SavvyCAN.desktop -appimage -extra-plugins=iconengines,platformthemes.libqgtk3.so - after_success: +# after_success: # find appdir -executable -type f -exec ldd {} \; | grep " => /usr" | cut -d " " -f 2-3 | sort | uniq # for debugging # curl --upload-file APPNAME*.AppImage https://transfer.sh/APPNAME-git.$(git rev-parse --short HEAD)-x86_64.AppImage - - wget -c https://github.com/probonopd/uploadtool/raw/master/upload.sh - - bash upload.sh SavvyCAN*.AppImage* +# - wget -c https://github.com/probonopd/uploadtool/raw/master/upload.sh +# - bash upload.sh SavvyCAN*.AppImage* - - os: osx - osx_image: xcode10 - before_install: - - brew install qt5 - - brew link qt5 --force - script: - - qmake CONFIG+=release -spec macx-xcode SavvyCAN.pro - - xcodebuild - - macdeployqt Release/SavvyCAN.app -dmg +# - os: osx +# osx_image: xcode10 +# before_install: +# - brew install qt5 +# - brew link qt5 --force +# script: +# - qmake CONFIG+=release -spec macx-xcode SavvyCAN.pro +# - xcodebuild +# - macdeployqt Release/SavvyCAN.app -dmg - os: windows before_install: - - dir C:/Program\ Files\ \(x86\)/Windows\ Kits/10/bin/10.0.17134.0/x64 - - cmd.exe /C 'cd && "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" x86 && cd && cd "C:/Users/travis/build/braindef/jamulus" && dir' + - cmd.exe /C 'cd && "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" x86_64 && cd && dir' - curl -vLO http://download.qt.io/official_releases/online_installers/qt-unified-windows-x86-online.exe - "./qt-unified-windows-x86-online.exe --verbose --script qt-installer-windows.qs" - ls -la C:/Qt/5.12.3/msvc2017/bin/qtenv2.bat script: - - cmd.exe /C 'cd && "C:\Qt\5.12.3\msvc2017\bin\qtenv2.bat" && cd && "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" x86 && cd && qmake CONFIG+=RELEASE SavvyCAN.pro && nmake' + - cmd.exe /C 'cd && "C:\Qt\5.12.3\msvc2017\bin\qtenv2.bat" && cd && qmake CONFIG+=RELEASE SavvyCAN.pro && nmake' branches: except: From c6c9df549c44548ef6f682915b07afbf0fc5f653 Mon Sep 17 00:00:00 2001 From: Collin Kidder Date: Mon, 5 Aug 2019 21:47:35 -0400 Subject: [PATCH 13/34] Yet more YML changes to make compiling work for Windows --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 66e98d1..6412817 100644 --- a/.travis.yml +++ b/.travis.yml @@ -40,12 +40,12 @@ matrix: # - macdeployqt Release/SavvyCAN.app -dmg - os: windows before_install: - - cmd.exe /C 'cd && "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" x86_64 && cd && dir' + - cmd.exe /C 'cd && "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvars64.bat" && cd && dir' - curl -vLO http://download.qt.io/official_releases/online_installers/qt-unified-windows-x86-online.exe - "./qt-unified-windows-x86-online.exe --verbose --script qt-installer-windows.qs" - ls -la C:/Qt/5.12.3/msvc2017/bin/qtenv2.bat script: - - cmd.exe /C 'cd && "C:\Qt\5.12.3\msvc2017\bin\qtenv2.bat" && cd && qmake CONFIG+=RELEASE SavvyCAN.pro && nmake' + - cmd.exe /C 'cd && "C:\Qt\5.12.3\msvc2017\bin\qtenv2.bat" && cd && "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvars64.bat" && cd && qmake CONFIG+=RELEASE SavvyCAN.pro && nmake' branches: except: From 638c43568b6490429d7b07b3f13462beb62b5298 Mon Sep 17 00:00:00 2001 From: Collin Kidder Date: Mon, 5 Aug 2019 22:14:42 -0400 Subject: [PATCH 14/34] More changes to get windows to compile through TravisCI --- .travis.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 6412817..4f02b54 100644 --- a/.travis.yml +++ b/.travis.yml @@ -40,12 +40,15 @@ matrix: # - macdeployqt Release/SavvyCAN.app -dmg - os: windows before_install: - - cmd.exe /C 'cd && "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvars64.bat" && cd && dir' + - "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvars64.bat" - curl -vLO http://download.qt.io/official_releases/online_installers/qt-unified-windows-x86-online.exe - "./qt-unified-windows-x86-online.exe --verbose --script qt-installer-windows.qs" - ls -la C:/Qt/5.12.3/msvc2017/bin/qtenv2.bat script: - - cmd.exe /C 'cd && "C:\Qt\5.12.3\msvc2017\bin\qtenv2.bat" && cd && "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvars64.bat" && cd && qmake CONFIG+=RELEASE SavvyCAN.pro && nmake' + - "C:\Qt\5.12.3\msvc2017\bin\qtenv2.bat" + - "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvars64.bat" + - "qmake CONFIG+=RELEASE SavvyCAN.pro" + - nmake branches: except: From 2e8051e066b5e0b138c2619ef196d16e049fe0cc Mon Sep 17 00:00:00 2001 From: Collin Kidder Date: Mon, 5 Aug 2019 22:16:36 -0400 Subject: [PATCH 15/34] Fix parsing issues with travis.yml --- .travis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 4f02b54..05fb713 100644 --- a/.travis.yml +++ b/.travis.yml @@ -40,13 +40,13 @@ matrix: # - macdeployqt Release/SavvyCAN.app -dmg - os: windows before_install: - - "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvars64.bat" + - 'C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvars64.bat' - curl -vLO http://download.qt.io/official_releases/online_installers/qt-unified-windows-x86-online.exe - "./qt-unified-windows-x86-online.exe --verbose --script qt-installer-windows.qs" - ls -la C:/Qt/5.12.3/msvc2017/bin/qtenv2.bat script: - - "C:\Qt\5.12.3\msvc2017\bin\qtenv2.bat" - - "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvars64.bat" + - 'C:\Qt\5.12.3\msvc2017\bin\qtenv2.bat' + - 'C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvars64.bat' - "qmake CONFIG+=RELEASE SavvyCAN.pro" - nmake From 55de46f0ff083004423fec8d510db384749762c8 Mon Sep 17 00:00:00 2001 From: Collin Kidder Date: Mon, 5 Aug 2019 22:18:59 -0400 Subject: [PATCH 16/34] Hopeful fix for yml issues... --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 05fb713..94322dc 100644 --- a/.travis.yml +++ b/.travis.yml @@ -40,13 +40,13 @@ matrix: # - macdeployqt Release/SavvyCAN.app -dmg - os: windows before_install: - - 'C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvars64.bat' + - 'C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\Vcvars64.bat' - curl -vLO http://download.qt.io/official_releases/online_installers/qt-unified-windows-x86-online.exe - "./qt-unified-windows-x86-online.exe --verbose --script qt-installer-windows.qs" - ls -la C:/Qt/5.12.3/msvc2017/bin/qtenv2.bat script: - 'C:\Qt\5.12.3\msvc2017\bin\qtenv2.bat' - - 'C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvars64.bat' + - 'C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\Vcvars64.bat' - "qmake CONFIG+=RELEASE SavvyCAN.pro" - nmake From 211af7a372f8ec9d64b36364c20427e2d0d2d305 Mon Sep 17 00:00:00 2001 From: Collin Kidder Date: Mon, 5 Aug 2019 22:33:03 -0400 Subject: [PATCH 17/34] More hope of fixes --- .travis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 94322dc..01df159 100644 --- a/.travis.yml +++ b/.travis.yml @@ -40,13 +40,13 @@ matrix: # - macdeployqt Release/SavvyCAN.app -dmg - os: windows before_install: - - 'C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\Vcvars64.bat' + - cmd.exe /C 'C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\Vcvars64.bat' - curl -vLO http://download.qt.io/official_releases/online_installers/qt-unified-windows-x86-online.exe - "./qt-unified-windows-x86-online.exe --verbose --script qt-installer-windows.qs" - ls -la C:/Qt/5.12.3/msvc2017/bin/qtenv2.bat script: - - 'C:\Qt\5.12.3\msvc2017\bin\qtenv2.bat' - - 'C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\Vcvars64.bat' + - cmd.exe /C 'C:\Qt\5.12.3\msvc2017\bin\qtenv2.bat' + - cmd.exe /C 'C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\Vcvars64.bat' - "qmake CONFIG+=RELEASE SavvyCAN.pro" - nmake From 81d5a0267120c3f4e30a31a722a681dffeee88e9 Mon Sep 17 00:00:00 2001 From: Collin Kidder Date: Tue, 6 Aug 2019 19:14:02 -0400 Subject: [PATCH 18/34] Another attempt to get TravisCI to build for Windows --- .travis.yml | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 01df159..aa18278 100644 --- a/.travis.yml +++ b/.travis.yml @@ -40,16 +40,23 @@ matrix: # - macdeployqt Release/SavvyCAN.app -dmg - os: windows before_install: - - cmd.exe /C 'C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\Vcvars64.bat' + - cmd.exe /C 'cd && "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvars64.bat"' - curl -vLO http://download.qt.io/official_releases/online_installers/qt-unified-windows-x86-online.exe - "./qt-unified-windows-x86-online.exe --verbose --script qt-installer-windows.qs" - - ls -la C:/Qt/5.12.3/msvc2017/bin/qtenv2.bat script: - cmd.exe /C 'C:\Qt\5.12.3\msvc2017\bin\qtenv2.bat' - cmd.exe /C 'C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\Vcvars64.bat' - "qmake CONFIG+=RELEASE SavvyCAN.pro" - nmake + + + script: + - cmd.exe /C '"C:\Qt\5.12.3\msvc2017_64\bin\qtenv2.bat"' + - cmd.exe /C '"C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvars64.bat"' + - cmd.exe /C '"qmake SavvyCAN.pro"' + - cmd.exe /C 'nmake' + branches: except: - # Do not build tags that we create when we upload to GitHub Releases From a64cf12165a559e287e78a40fa625c558ec36149 Mon Sep 17 00:00:00 2001 From: Collin Kidder Date: Tue, 6 Aug 2019 19:15:41 -0400 Subject: [PATCH 19/34] Fix stupid copy/paste error... --- .travis.yml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/.travis.yml b/.travis.yml index aa18278..cd867d6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -49,14 +49,6 @@ matrix: - "qmake CONFIG+=RELEASE SavvyCAN.pro" - nmake - - - script: - - cmd.exe /C '"C:\Qt\5.12.3\msvc2017_64\bin\qtenv2.bat"' - - cmd.exe /C '"C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvars64.bat"' - - cmd.exe /C '"qmake SavvyCAN.pro"' - - cmd.exe /C 'nmake' - branches: except: - # Do not build tags that we create when we upload to GitHub Releases From e1efd4875bd110b715fc554e3f4fa8e9b27d5797 Mon Sep 17 00:00:00 2001 From: Collin Kidder Date: Tue, 6 Aug 2019 19:30:24 -0400 Subject: [PATCH 20/34] More changes. Will they work? --- .travis.yml | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index cd867d6..0fe254d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -40,14 +40,11 @@ matrix: # - macdeployqt Release/SavvyCAN.app -dmg - os: windows before_install: - - cmd.exe /C 'cd && "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvars64.bat"' + - cmd.exe /C 'cd && "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvars32.bat"' - curl -vLO http://download.qt.io/official_releases/online_installers/qt-unified-windows-x86-online.exe - "./qt-unified-windows-x86-online.exe --verbose --script qt-installer-windows.qs" script: - - cmd.exe /C 'C:\Qt\5.12.3\msvc2017\bin\qtenv2.bat' - - cmd.exe /C 'C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\Vcvars64.bat' - - "qmake CONFIG+=RELEASE SavvyCAN.pro" - - nmake + - cmd.exe /C '"C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\Vcvars32.bat" && "C:\Qt\5.12.3\msvc2017\bin\qmake CONFIG+=RELEASE SavvyCAN.pro" && nmake' branches: except: From bc722e41e040e7967e565ea015dee2245e051aaa Mon Sep 17 00:00:00 2001 From: Collin Kidder Date: Tue, 6 Aug 2019 19:53:42 -0400 Subject: [PATCH 21/34] Would you believe, another attempt in vain to get Windows compiling to work. --- .travis.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 0fe254d..1881b38 100644 --- a/.travis.yml +++ b/.travis.yml @@ -40,11 +40,13 @@ matrix: # - macdeployqt Release/SavvyCAN.app -dmg - os: windows before_install: - - cmd.exe /C 'cd && "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvars32.bat"' + - "C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\BuildTools\\VC\\Auxiliary\\Build\\vcvars32.bat" - curl -vLO http://download.qt.io/official_releases/online_installers/qt-unified-windows-x86-online.exe - "./qt-unified-windows-x86-online.exe --verbose --script qt-installer-windows.qs" script: - - cmd.exe /C '"C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\Vcvars32.bat" && "C:\Qt\5.12.3\msvc2017\bin\qmake CONFIG+=RELEASE SavvyCAN.pro" && nmake' + - "C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\BuildTools\\VC\\Auxiliary\\Build\\Vcvars32.bat" + - "C:\\Qt\\5.12.3\\msvc2017\\bin\\qmake CONFIG+=RELEASE SavvyCAN.pro" + - nmake branches: except: From dc43c9ca632005367dce82efdbeb8fe14e11dd84 Mon Sep 17 00:00:00 2001 From: Collin Kidder Date: Tue, 6 Aug 2019 20:01:00 -0400 Subject: [PATCH 22/34] Another stab at it --- .travis.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 1881b38..3dae8c6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -40,13 +40,11 @@ matrix: # - macdeployqt Release/SavvyCAN.app -dmg - os: windows before_install: - - "C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\BuildTools\\VC\\Auxiliary\\Build\\vcvars32.bat" + - cmd.exe /C 'cd && "C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\BuildTools\\VC\\Auxiliary\\Build\\vcvars32.bat"' - curl -vLO http://download.qt.io/official_releases/online_installers/qt-unified-windows-x86-online.exe - "./qt-unified-windows-x86-online.exe --verbose --script qt-installer-windows.qs" script: - - "C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\BuildTools\\VC\\Auxiliary\\Build\\Vcvars32.bat" - - "C:\\Qt\\5.12.3\\msvc2017\\bin\\qmake CONFIG+=RELEASE SavvyCAN.pro" - - nmake + - cmd.exe /C '"C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\BuildTools\\VC\\Auxiliary\\Build\\Vcvars32.bat" && "C:\\Qt\\5.12.3\\msvc2017\\bin\\qmake CONFIG+=RELEASE SavvyCAN.pro" && nmake' branches: except: From 8d583f00de096b7c7e0dd86e0b268b95b855b0d5 Mon Sep 17 00:00:00 2001 From: Collin Kidder Date: Tue, 6 Aug 2019 20:16:53 -0400 Subject: [PATCH 23/34] And again --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 3dae8c6..4e67448 100644 --- a/.travis.yml +++ b/.travis.yml @@ -40,11 +40,11 @@ matrix: # - macdeployqt Release/SavvyCAN.app -dmg - os: windows before_install: - - cmd.exe /C 'cd && "C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\BuildTools\\VC\\Auxiliary\\Build\\vcvars32.bat"' + - cmd.exe /C 'cd && "C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC/Auxiliary/Build/vcvars32.bat"' - curl -vLO http://download.qt.io/official_releases/online_installers/qt-unified-windows-x86-online.exe - "./qt-unified-windows-x86-online.exe --verbose --script qt-installer-windows.qs" script: - - cmd.exe /C '"C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\BuildTools\\VC\\Auxiliary\\Build\\Vcvars32.bat" && "C:\\Qt\\5.12.3\\msvc2017\\bin\\qmake CONFIG+=RELEASE SavvyCAN.pro" && nmake' + - cmd.exe /C 'cd && "C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC/Auxiliary/Build/vcvars32.bat" && cd && "C:/Qt/5.12.3/msvc2017/bin/qmake CONFIG+=RELEASE SavvyCAN.pro" && cd && nmake' branches: except: From 04ff73462cf325ddae45a81af2d21c3f9f824192 Mon Sep 17 00:00:00 2001 From: Collin Kidder Date: Tue, 6 Aug 2019 20:44:39 -0400 Subject: [PATCH 24/34] Add deploy to linux commands, try once again to fix windows --- .travis.yml | 50 ++++++++++++++++++++++++++++++-------------------- 1 file changed, 30 insertions(+), 20 deletions(-) diff --git a/.travis.yml b/.travis.yml index 4e67448..f29b8ce 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,32 +2,42 @@ language: cpp matrix: include: -# - os: linux -# dist: xenial -# compiler: gcc -# sudo: require -# before_install: -# - sudo add-apt-repository ppa:beineri/opt-qt-5.12.3-xenial -y -# - sudo apt-get update -qq + - os: linux + dist: xenial + compiler: gcc + sudo: require + before_install: + - sudo add-apt-repository ppa:beineri/opt-qt-5.12.3-xenial -y + - sudo apt-get update -qq -# install: -# - sudo apt-get -y install qt512base qt512connectivity qt512imageformats qt512serialport qt512serialbus qt512doc qt512tools libgl1-mesa-dev -# - source /opt/qt*/bin/qt*-env.sh + install: + - sudo apt-get -y install qt512base qt512connectivity qt512imageformats qt512serialport qt512serialbus qt512doc qt512tools libgl1-mesa-dev + - source /opt/qt*/bin/qt*-env.sh -# script: -# - qmake CONFIG+=release PREFIX=/usr -# - make -j$(nproc) -# - make INSTALL_ROOT=appdir -j$(nproc) install ; find appdir/ -# - wget -c -nv "https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage" -# - chmod a+x linuxdeployqt-continuous-x86_64.AppImage + script: + - qmake CONFIG+=release PREFIX=/usr + - make -j$(nproc) + - make INSTALL_ROOT=appdir -j$(nproc) install ; find appdir/ + - wget -c -nv "https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage" + - chmod a+x linuxdeployqt-continuous-x86_64.AppImage # export VERSION=... # linuxdeployqt uses this for naming the file -# - ./linuxdeployqt-continuous-x86_64.AppImage appdir/usr/local/share/applications/SavvyCAN.desktop -appimage -extra-plugins=iconengines,platformthemes.libqgtk3.so + - ./linuxdeployqt-continuous-x86_64.AppImage appdir/usr/local/share/applications/SavvyCAN.desktop -appimage -extra-plugins=iconengines,platformthemes.libqgtk3.so -# after_success: + after_success: # find appdir -executable -type f -exec ldd {} \; | grep " => /usr" | cut -d " " -f 2-3 | sort | uniq # for debugging # curl --upload-file APPNAME*.AppImage https://transfer.sh/APPNAME-git.$(git rev-parse --short HEAD)-x86_64.AppImage -# - wget -c https://github.com/probonopd/uploadtool/raw/master/upload.sh + - wget -c https://github.com/probonopd/uploadtool/raw/master/upload.sh # - bash upload.sh SavvyCAN*.AppImage* + + deploy: + provider: releases + skip_cleanup: true + github_token: $GITHUB_TOKEN + file_glob: true + file: SavvyCAN*.AppImage + # on: + # branch: master + draft: true # - os: osx # osx_image: xcode10 @@ -44,7 +54,7 @@ matrix: - curl -vLO http://download.qt.io/official_releases/online_installers/qt-unified-windows-x86-online.exe - "./qt-unified-windows-x86-online.exe --verbose --script qt-installer-windows.qs" script: - - cmd.exe /C 'cd && "C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC/Auxiliary/Build/vcvars32.bat" && cd && "C:/Qt/5.12.3/msvc2017/bin/qmake CONFIG+=RELEASE SavvyCAN.pro" && cd && nmake' + - cmd.exe /C 'cd && "C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC/Auxiliary/Build/vcvars32.bat" && cd && "C:/Qt/5.12.3/msvc2017/bin/qmake" CONFIG+=RELEASE SavvyCAN.pro && cd && nmake' branches: except: From 837ead64760d64a642148342832926eb9a35c48c Mon Sep 17 00:00:00 2001 From: Collin Kidder Date: Tue, 6 Aug 2019 21:15:17 -0400 Subject: [PATCH 25/34] Re-enabled linux and OSX builds, attempt to do simple packaging and deployment for all three builds --- .travis.yml | 46 +++++++++++++++++++++++++++++++++++----------- 1 file changed, 35 insertions(+), 11 deletions(-) diff --git a/.travis.yml b/.travis.yml index f29b8ce..8bc266a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -35,19 +35,28 @@ matrix: github_token: $GITHUB_TOKEN file_glob: true file: SavvyCAN*.AppImage - # on: - # branch: master + on: + branch: WIP draft: true -# - os: osx -# osx_image: xcode10 -# before_install: -# - brew install qt5 -# - brew link qt5 --force -# script: -# - qmake CONFIG+=release -spec macx-xcode SavvyCAN.pro -# - xcodebuild -# - macdeployqt Release/SavvyCAN.app -dmg + - os: osx + osx_image: xcode10 + before_install: + - brew install qt5 + - brew link qt5 --force + script: + - qmake CONFIG+=release -spec macx-xcode SavvyCAN.pro + - xcodebuild + - macdeployqt Release/SavvyCAN.app -dmg + deploy: + provider: releases + skip_cleanup: true + github_token: $GITHUB_TOKEN + file: SavvyCAN.dmg + on: + branch: WIP + draft: true + - os: windows before_install: - cmd.exe /C 'cd && "C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC/Auxiliary/Build/vcvars32.bat"' @@ -55,6 +64,21 @@ matrix: - "./qt-unified-windows-x86-online.exe --verbose --script qt-installer-windows.qs" script: - cmd.exe /C 'cd && "C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC/Auxiliary/Build/vcvars32.bat" && cd && "C:/Qt/5.12.3/msvc2017/bin/qmake" CONFIG+=RELEASE SavvyCAN.pro && cd && nmake' + - cmd.exe /C 'cd && "C:/Qt/5.12.3/msvc2017/bin/windeployqt.exe" ./SavvyCAN.exe' + - rm *.cpp + - rm *.h + - rm *.obj + - zip SavvyCAN32.zip *.* + + deploy: + provider: releases + skip_cleanup: true + github_token: $GITHUB_TOKEN + file: SavvyCAN32.zip + on: + branch: WIP + draft: true + branches: except: From ad24aa4fd3e7d307a9eace4c19264f5254ab9a25 Mon Sep 17 00:00:00 2001 From: Collin Kidder Date: Wed, 7 Aug 2019 07:28:05 -0400 Subject: [PATCH 26/34] Try 6000 at TravisCI --- .travis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 8bc266a..cb18311 100644 --- a/.travis.yml +++ b/.travis.yml @@ -32,7 +32,7 @@ matrix: deploy: provider: releases skip_cleanup: true - github_token: $GITHUB_TOKEN + api_key: $GITHUB_TOKEN file_glob: true file: SavvyCAN*.AppImage on: @@ -51,7 +51,7 @@ matrix: deploy: provider: releases skip_cleanup: true - github_token: $GITHUB_TOKEN + api_key: $GITHUB_TOKEN file: SavvyCAN.dmg on: branch: WIP @@ -73,7 +73,7 @@ matrix: deploy: provider: releases skip_cleanup: true - github_token: $GITHUB_TOKEN + api_key: $GITHUB_TOKEN file: SavvyCAN32.zip on: branch: WIP From 1c11927481ed8b529245c43452b21376594a5fcb Mon Sep 17 00:00:00 2001 From: Collin Kidder Date: Wed, 7 Aug 2019 18:49:33 -0400 Subject: [PATCH 27/34] Additional work to hopefully make all three platforms build properly with TravisCI --- .travis.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index cb18311..86e8af7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -52,7 +52,7 @@ matrix: provider: releases skip_cleanup: true api_key: $GITHUB_TOKEN - file: SavvyCAN.dmg + file: Release/SavvyCAN.dmg on: branch: WIP draft: true @@ -60,10 +60,11 @@ matrix: - os: windows before_install: - cmd.exe /C 'cd && "C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC/Auxiliary/Build/vcvars32.bat"' + - choco install zip - curl -vLO http://download.qt.io/official_releases/online_installers/qt-unified-windows-x86-online.exe - "./qt-unified-windows-x86-online.exe --verbose --script qt-installer-windows.qs" script: - - cmd.exe /C 'cd && "C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC/Auxiliary/Build/vcvars32.bat" && cd && "C:/Qt/5.12.3/msvc2017/bin/qmake" CONFIG+=RELEASE SavvyCAN.pro && cd && nmake' + - cmd.exe /C 'cd && "C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC/Auxiliary/Build/vcvars32.bat" && cd && "C:/Qt/5.12.3/msvc2017/bin/qmake" CONFIG+=RELEASE SavvyCAN.pro && cd && nmake && cd release' - cmd.exe /C 'cd && "C:/Qt/5.12.3/msvc2017/bin/windeployqt.exe" ./SavvyCAN.exe' - rm *.cpp - rm *.h From f87f229051687a273dce712ee71b2d8bf40c7df4 Mon Sep 17 00:00:00 2001 From: Collin Kidder Date: Wed, 7 Aug 2019 19:14:36 -0400 Subject: [PATCH 28/34] Attempt to fix windows compiling in TravisCI --- .travis.yml | 98 +++++++++++++++++++++++++++-------------------------- 1 file changed, 50 insertions(+), 48 deletions(-) diff --git a/.travis.yml b/.travis.yml index 86e8af7..dba70e8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,60 +2,60 @@ language: cpp matrix: include: - - os: linux - dist: xenial - compiler: gcc - sudo: require - before_install: - - sudo add-apt-repository ppa:beineri/opt-qt-5.12.3-xenial -y - - sudo apt-get update -qq +# - os: linux +# dist: xenial +# compiler: gcc +# sudo: require +# before_install: +# - sudo add-apt-repository ppa:beineri/opt-qt-5.12.3-xenial -y +# - sudo apt-get update -qq - install: - - sudo apt-get -y install qt512base qt512connectivity qt512imageformats qt512serialport qt512serialbus qt512doc qt512tools libgl1-mesa-dev - - source /opt/qt*/bin/qt*-env.sh +# install: +# - sudo apt-get -y install qt512base qt512connectivity qt512imageformats qt512serialport qt512serialbus qt512doc qt512tools libgl1-mesa-dev +# - source /opt/qt*/bin/qt*-env.sh - script: - - qmake CONFIG+=release PREFIX=/usr - - make -j$(nproc) - - make INSTALL_ROOT=appdir -j$(nproc) install ; find appdir/ - - wget -c -nv "https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage" - - chmod a+x linuxdeployqt-continuous-x86_64.AppImage - # export VERSION=... # linuxdeployqt uses this for naming the file - - ./linuxdeployqt-continuous-x86_64.AppImage appdir/usr/local/share/applications/SavvyCAN.desktop -appimage -extra-plugins=iconengines,platformthemes.libqgtk3.so +# script: +# - qmake CONFIG+=release PREFIX=/usr +# - make -j$(nproc) +## - make INSTALL_ROOT=appdir -j$(nproc) install ; find appdir/ +# - wget -c -nv "https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage" +# - chmod a+x linuxdeployqt-continuous-x86_64.AppImage +# # export VERSION=... # linuxdeployqt uses this for naming the file +# - ./linuxdeployqt-continuous-x86_64.AppImage appdir/usr/local/share/applications/SavvyCAN.desktop -appimage -extra-plugins=iconengines,platformthemes.libqgtk3.so - after_success: +# after_success: # find appdir -executable -type f -exec ldd {} \; | grep " => /usr" | cut -d " " -f 2-3 | sort | uniq # for debugging # curl --upload-file APPNAME*.AppImage https://transfer.sh/APPNAME-git.$(git rev-parse --short HEAD)-x86_64.AppImage - - wget -c https://github.com/probonopd/uploadtool/raw/master/upload.sh +# - wget -c https://github.com/probonopd/uploadtool/raw/master/upload.sh # - bash upload.sh SavvyCAN*.AppImage* - deploy: - provider: releases - skip_cleanup: true - api_key: $GITHUB_TOKEN - file_glob: true - file: SavvyCAN*.AppImage - on: - branch: WIP - draft: true +# deploy: +# provider: releases +# skip_cleanup: true +# api_key: $GITHUB_TOKEN +# file_glob: true +# file: SavvyCAN*.AppImage +# on: +# branch: WIP +# draft: true - - os: osx - osx_image: xcode10 - before_install: - - brew install qt5 - - brew link qt5 --force - script: - - qmake CONFIG+=release -spec macx-xcode SavvyCAN.pro - - xcodebuild - - macdeployqt Release/SavvyCAN.app -dmg - deploy: - provider: releases - skip_cleanup: true - api_key: $GITHUB_TOKEN - file: Release/SavvyCAN.dmg - on: - branch: WIP - draft: true +# - os: osx +# osx_image: xcode10 +# before_install: +# - brew install qt5 +# - brew link qt5 --force +# script: +# - qmake CONFIG+=release -spec macx-xcode SavvyCAN.pro +# - xcodebuild +# - macdeployqt Release/SavvyCAN.app -dmg +# deploy: +# provider: releases +# skip_cleanup: true +# api_key: $GITHUB_TOKEN +# file: Release/SavvyCAN.dmg +# on: +# branch: WIP +# draft: true - os: windows before_install: @@ -64,8 +64,10 @@ matrix: - curl -vLO http://download.qt.io/official_releases/online_installers/qt-unified-windows-x86-online.exe - "./qt-unified-windows-x86-online.exe --verbose --script qt-installer-windows.qs" script: - - cmd.exe /C 'cd && "C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC/Auxiliary/Build/vcvars32.bat" && cd && "C:/Qt/5.12.3/msvc2017/bin/qmake" CONFIG+=RELEASE SavvyCAN.pro && cd && nmake && cd release' - - cmd.exe /C 'cd && "C:/Qt/5.12.3/msvc2017/bin/windeployqt.exe" ./SavvyCAN.exe' + - cmd.exe /C 'cd && "C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC/Auxiliary/Build/vcvars32.bat" && cd && "C:/Qt/5.12.3/msvc2017/bin/qmake" CONFIG+=RELEASE SavvyCAN.pro && cd && nmake' + - ls + - cmd.exe /C 'cd release && "C:/Qt/5.12.3/msvc2017/bin/windeployqt.exe" ./SavvyCAN.exe' + - ls - rm *.cpp - rm *.h - rm *.obj From fdec0c9e25ebfb9b5a5ceffc067a8368196e1668 Mon Sep 17 00:00:00 2001 From: Collin Kidder Date: Wed, 7 Aug 2019 19:41:55 -0400 Subject: [PATCH 29/34] Getting close! Hopefully this is a working Windows build --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index dba70e8..0849113 100644 --- a/.travis.yml +++ b/.travis.yml @@ -67,6 +67,7 @@ matrix: - cmd.exe /C 'cd && "C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC/Auxiliary/Build/vcvars32.bat" && cd && "C:/Qt/5.12.3/msvc2017/bin/qmake" CONFIG+=RELEASE SavvyCAN.pro && cd && nmake' - ls - cmd.exe /C 'cd release && "C:/Qt/5.12.3/msvc2017/bin/windeployqt.exe" ./SavvyCAN.exe' + - cd release - ls - rm *.cpp - rm *.h From 2ec1a56670d366ce90976345729601fd859384ad Mon Sep 17 00:00:00 2001 From: Collin Kidder Date: Wed, 7 Aug 2019 20:31:03 -0400 Subject: [PATCH 30/34] Hopefully working TravisCI config for all three platforms --- .travis.yml | 101 ++++++++++++++++++++++++++------------------------- SavvyCAN.pro | 2 +- 2 files changed, 53 insertions(+), 50 deletions(-) diff --git a/.travis.yml b/.travis.yml index 0849113..23f9c07 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,60 +2,61 @@ language: cpp matrix: include: -# - os: linux -# dist: xenial -# compiler: gcc -# sudo: require -# before_install: -# - sudo add-apt-repository ppa:beineri/opt-qt-5.12.3-xenial -y -# - sudo apt-get update -qq + - os: linux + dist: xenial + compiler: gcc + sudo: require + before_install: + - sudo add-apt-repository ppa:beineri/opt-qt-5.12.3-xenial -y + - sudo apt-get update -qq -# install: -# - sudo apt-get -y install qt512base qt512connectivity qt512imageformats qt512serialport qt512serialbus qt512doc qt512tools libgl1-mesa-dev -# - source /opt/qt*/bin/qt*-env.sh + install: + - sudo apt-get -y install qt512base qt512connectivity qt512imageformats qt512serialport qt512serialbus qt512doc qt512tools libgl1-mesa-dev + - source /opt/qt*/bin/qt*-env.sh -# script: -# - qmake CONFIG+=release PREFIX=/usr -# - make -j$(nproc) -## - make INSTALL_ROOT=appdir -j$(nproc) install ; find appdir/ -# - wget -c -nv "https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage" -# - chmod a+x linuxdeployqt-continuous-x86_64.AppImage -# # export VERSION=... # linuxdeployqt uses this for naming the file -# - ./linuxdeployqt-continuous-x86_64.AppImage appdir/usr/local/share/applications/SavvyCAN.desktop -appimage -extra-plugins=iconengines,platformthemes.libqgtk3.so + script: + - qmake CONFIG+=release PREFIX=/usr + - make -j$(nproc) + - make INSTALL_ROOT=appdir -j$(nproc) install ; find appdir/ + - wget -c -nv "https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage" + - chmod a+x linuxdeployqt-continuous-x86_64.AppImage + # export VERSION=... # linuxdeployqt uses this for naming the file + - ./linuxdeployqt-continuous-x86_64.AppImage appdir/usr/local/share/applications/SavvyCAN.desktop -appimage -extra-plugins=iconengines,platformthemes.libqgtk3.so -# after_success: + after_success: # find appdir -executable -type f -exec ldd {} \; | grep " => /usr" | cut -d " " -f 2-3 | sort | uniq # for debugging # curl --upload-file APPNAME*.AppImage https://transfer.sh/APPNAME-git.$(git rev-parse --short HEAD)-x86_64.AppImage -# - wget -c https://github.com/probonopd/uploadtool/raw/master/upload.sh -# - bash upload.sh SavvyCAN*.AppImage* + - wget -c https://github.com/probonopd/uploadtool/raw/master/upload.sh + - bash upload.sh SavvyCAN*.AppImage* -# deploy: -# provider: releases -# skip_cleanup: true -# api_key: $GITHUB_TOKEN -# file_glob: true -# file: SavvyCAN*.AppImage -# on: -# branch: WIP -# draft: true + deploy: + provider: releases + skip_cleanup: true + api_key: $GITHUB_TOKEN + file_glob: true + file: SavvyCAN*.AppImage + on: + branch: WIP + draft: true -# - os: osx -# osx_image: xcode10 -# before_install: -# - brew install qt5 -# - brew link qt5 --force -# script: -# - qmake CONFIG+=release -spec macx-xcode SavvyCAN.pro -# - xcodebuild -# - macdeployqt Release/SavvyCAN.app -dmg -# deploy: -# provider: releases -# skip_cleanup: true -# api_key: $GITHUB_TOKEN -# file: Release/SavvyCAN.dmg -# on: -# branch: WIP -# draft: true + - os: osx + osx_image: xcode10 + before_install: + - brew install qt5 + - brew link qt5 --force + script: + - qmake CONFIG+=release -spec macx-xcode SavvyCAN.pro + - xcodebuild + - cp *.q* ./Release/SavvyCAN.app/ + - macdeployqt Release/SavvyCAN.app -dmg + deploy: + provider: releases + skip_cleanup: true + api_key: $GITHUB_TOKEN + file: Release/SavvyCAN.dmg + on: + branch: WIP + draft: true - os: windows before_install: @@ -66,13 +67,15 @@ matrix: script: - cmd.exe /C 'cd && "C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC/Auxiliary/Build/vcvars32.bat" && cd && "C:/Qt/5.12.3/msvc2017/bin/qmake" CONFIG+=RELEASE SavvyCAN.pro && cd && nmake' - ls - - cmd.exe /C 'cd release && "C:/Qt/5.12.3/msvc2017/bin/windeployqt.exe" ./SavvyCAN.exe' + - cmd.exe /C 'cd release && "C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC/Auxiliary/Build/vcvars32.bat" && "C:/Qt/5.12.3/msvc2017/bin/windeployqt.exe" ./SavvyCAN.exe' - cd release - ls - rm *.cpp - rm *.h - rm *.obj - - zip SavvyCAN32.zip *.* + - cp ../*.q* . + - cp -r ../examples . + - zip -r SavvyCAN32.zip *.* deploy: provider: releases diff --git a/SavvyCAN.pro b/SavvyCAN.pro index 16d25d6..f954497 100644 --- a/SavvyCAN.pro +++ b/SavvyCAN.pro @@ -187,7 +187,7 @@ iconfiles.path = $$PREFIX/share/icons INSTALLS += iconfiles helpfiles.files=SavvyCAN.q* -helpfiles.path = $$PREFIX/share/applications +helpfiles.path = $$PREFIX/bin INSTALLS += helpfiles INSTALLS += target From 28f172708cd22fc3288246a76ae9625767572918 Mon Sep 17 00:00:00 2001 From: Collin Kidder Date: Wed, 7 Aug 2019 20:31:42 -0400 Subject: [PATCH 31/34] Updated documentation for flowview (not integrated into compiled help files yet) --- docs/source/flowview.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/source/flowview.rst b/docs/source/flowview.rst index 2dbca97..be8c56a 100644 --- a/docs/source/flowview.rst +++ b/docs/source/flowview.rst @@ -27,7 +27,7 @@ Between these three views you should have a very good idea of how the data bytes Controlling the Flow ===================== -The screen has many ways to control the flow. The "Playback Control" box has 6 icons in a 3x2 grid. The upper icons mean (from left to right): Go back one frame, Stop, Go forward one frame. The bottom icons mean: Play backward, pause, Play forward. Playback speed is used to control how quickly the flow happens. You can raise and lower this value even as the flow is playing back and it will change the flow speed in realtime. You can select "Loop Playback" to keep looping over and over. +The screen has many ways to control the flow. The "Playback Control" box has 6 icons in a 3x2 grid. The upper icons mean (from left to right): Go back one frame, Stop, Go forward one frame. The bottom icons mean: Play backward, pause, Play forward. Playback speed is used to control how quickly the flow happens. You can raise and lower this value even as the flow is playing back and it will change the flow speed in realtime. You can select "Loop Playback" to keep looping over and over. It is possible to select "0" as the frame interval. This will make the program progress as quickly as it can. This probably will not be much faster than a frame interval of 1 but it will be a bit faster. Additional control options @@ -39,10 +39,10 @@ Reference Values ================= Previously it was mentioned that bits in the 8x8 grid are colored based on whether they are -newly on/off or steady state compared to the reference. What is the reference? Well, look to the left of the 8x8 grid. The reference values here are used for reference with the 8x8 grid. You can set these values to something static and then see how bits compare to that static reference. Or, above the reference values is a checkbox called "Auto Reference" if this is clicked then the last frame is used as a reference for the current one. There are advantages to both options. A static reference can be used to see how things change compared to, say, the very first frame. Auto reference shows how the data changed from frame to frame. Either might yield interesting findings. +newly on/off or steady state compared to the reference. What is the reference? Well, look to the left of the 8x8 grid. The reference values here are used for reference with the 8x8 grid. You can set these values to something static and then see how bits compare to that static reference. Or, above the reference values is a checkbox called "Auto Reference" if this is clicked then the last frame is used as a reference for the current one. There are advantages to both options. A static reference can be used to see how things change compared to, say, the very first frame. Auto reference shows how the data changed from frame to frame. Either might yield interesting findings. The default values for static reference are taken from the values that the first frame has. You are free to change them to any value 0 through 0xFF. Seeking to Specific Values =========================== -Lastly, it is possible to seek to specific values. "Data Seek Values" normally default to -1. But, if a value other than -1 is found in one of these boxes then it will be used as a seek value. Any time the flow is playing back (either forward or backward) it will compare to the seek values. If there is a match then playback will automatically stop. This can be used to quickly play things back until you get to a specific value. One use would be to seek to a known value that precedes an important section you want to analyze in more depth. +Lastly, it is possible to seek to specific values. "Data Seek Values" normally default to -1. But, if a value other than -1 is found in one of these boxes then it will be used as a seek value. Any time the flow is playing back (either forward or backward) it will compare to the seek values. If there is a match then playback will automatically stop. This can be used to quickly play things back until you get to a specific value. One use would be to seek to a known value that precedes an important section you want to analyze in more depth. Also, in this same vein, if you click in the 8x8 grid of bits you will see that the cell you clicked on has the text turn blue and become bold. Any bit that you've selected this way will also act as a way to stop playback. If that bit changes, either being set or unset, then playback will stop. Click the cell again to deselect it. From cb8a3e55cf08e8318aa4d720f1653a464d93c2bf Mon Sep 17 00:00:00 2001 From: Collin Kidder Date: Thu, 8 Aug 2019 19:55:47 -0400 Subject: [PATCH 32/34] Additional tweaks to TravisCI --- .travis.yml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 23f9c07..9439050 100644 --- a/.travis.yml +++ b/.travis.yml @@ -47,8 +47,10 @@ matrix: script: - qmake CONFIG+=release -spec macx-xcode SavvyCAN.pro - xcodebuild - - cp *.q* ./Release/SavvyCAN.app/ - - macdeployqt Release/SavvyCAN.app -dmg + - cp *.q* Release/SavvyCAN.app/Contents/MacOS/ + - cd Release + - ls SavvyCAN.app/Contents/MacOS + - macdeployqt SavvyCAN.app -dmg deploy: provider: releases skip_cleanup: true @@ -75,7 +77,7 @@ matrix: - rm *.obj - cp ../*.q* . - cp -r ../examples . - - zip -r SavvyCAN32.zip *.* + - 7z a -tzip SavvyCAN32.zip -r * deploy: provider: releases From 962235c771712b20bae5b499cb78d6d31120edba Mon Sep 17 00:00:00 2001 From: Collin Kidder Date: Thu, 8 Aug 2019 20:22:33 -0400 Subject: [PATCH 33/34] Should be more or less final yml file for Travis to get all three builds to work. --- .travis.yml | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/.travis.yml b/.travis.yml index 9439050..07661c9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -26,6 +26,7 @@ matrix: after_success: # find appdir -executable -type f -exec ldd {} \; | grep " => /usr" | cut -d " " -f 2-3 | sort | uniq # for debugging # curl --upload-file APPNAME*.AppImage https://transfer.sh/APPNAME-git.$(git rev-parse --short HEAD)-x86_64.AppImage + # these next two lines make a continuous integration build of the linux version of SavvyCAN each time a commit is done - wget -c https://github.com/probonopd/uploadtool/raw/master/upload.sh - bash upload.sh SavvyCAN*.AppImage* @@ -35,9 +36,9 @@ matrix: api_key: $GITHUB_TOKEN file_glob: true file: SavvyCAN*.AppImage - on: - branch: WIP - draft: true + on: + tags: true #deploy is only done on tagged builds + draft: false - os: osx osx_image: xcode10 @@ -55,10 +56,10 @@ matrix: provider: releases skip_cleanup: true api_key: $GITHUB_TOKEN - file: Release/SavvyCAN.dmg + file: SavvyCAN.dmg on: - branch: WIP - draft: true + tags: true + draft: false - os: windows before_install: @@ -85,11 +86,10 @@ matrix: api_key: $GITHUB_TOKEN file: SavvyCAN32.zip on: - branch: WIP - draft: true + tags: true + draft: false - branches: - except: - - # Do not build tags that we create when we upload to GitHub Releases - - /^(?i:continuous)/ + only: + - master + - WIP From f0656a7f2c30be4efc13fe2c78e47581813d613d Mon Sep 17 00:00:00 2001 From: Collin Kidder Date: Thu, 8 Aug 2019 20:52:25 -0400 Subject: [PATCH 34/34] Minor tweaks to travis.yml --- .travis.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 07661c9..cdfafe0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,8 @@ language: cpp +# Any time a commit is done to either master or WIP we do a CI build on all three platforms to make sure it really builds. The linux version will be saved to the continuous tag +# and thus available for testing. All three platforms will get a proper release upon a tagged commit. + matrix: include: - os: linux @@ -25,8 +28,7 @@ matrix: after_success: # find appdir -executable -type f -exec ldd {} \; | grep " => /usr" | cut -d " " -f 2-3 | sort | uniq # for debugging - # curl --upload-file APPNAME*.AppImage https://transfer.sh/APPNAME-git.$(git rev-parse --short HEAD)-x86_64.AppImage - # these next two lines make a continuous integration build of the linux version of SavvyCAN each time a commit is done + # curl --upload-file APPNAME*.AppImage https://transfer.sh/APPNAME-git.$(git rev-parse --short HEAD)-x86_64.AppImage - wget -c https://github.com/probonopd/uploadtool/raw/master/upload.sh - bash upload.sh SavvyCAN*.AppImage*