diff --git a/.gitignore b/.gitignore index cee8153dd..ec0236821 100644 --- a/.gitignore +++ b/.gitignore @@ -15,6 +15,7 @@ xs/assertlib* .init_bundle.ini local-lib package/osx/Slic3r*.app +package/osx/_tmp *.dmg *.swp *.swo diff --git a/.travis.yml b/.travis.yml index bcf34ae15..fd1283e24 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,19 +1,33 @@ +# TravisCI configuration for Slic3r - https://slic3r.org +# +# We build Linux and macOS versions on TravisCI, both the main program +# (perl/C++) and the pure C++ one. +# +# Each job performs the following steps: +# - install dependencies (cached across builds) +# - build +# - test +# - package +# - deploy to dl.slic3r.org (except for the cppgui branch) + language: generic +dist: trusty + before_install: - - sh package/linux/travis-decrypt-key + - sh package/common/travis-decrypt-key + - export SLIC3R_GIT_VERSION=$(git rev-parse --short HEAD) + script: - - bash package/linux/travis-setup.sh - - if [[ "$BUILD_PL" == false ]]; then mkdir build && cd build; fi - - if [[ "$BUILD_PL" == false ]]; then cmake -DBOOST_ROOT=$BOOST_DIR -DSLIC3R_STATIC=ON -DCMAKE_BUILD_TYPE=Release ../src; fi - - if [[ "$BUILD_PL" == false ]]; then cmake --build .; fi - - if [[ "$BUILD_PL" == false ]]; then ./slic3r_test -s; fi - - if [[ "$BUILD_PL" == true ]]; then perlbrew switch slic3r-perl; fi - - if [[ "$BUILD_PL" == true ]]; then perl ./Build.PL; fi -# - if [ "${TRAVIS_OS_NAME}" = "osx" ]; then ./gui_test -s; fi + - if [[ "${TRAVIS_OS_NAME}" == "linux" && "$TARGET" == "main" ]]; then ./package/linux/travis-build-main.sh; fi + - if [[ "${TRAVIS_OS_NAME}" == "linux" && "$TARGET" == "cpp" ]]; then ./package/linux/travis-build-cpp.sh; fi + - if [[ "${TRAVIS_OS_NAME}" == "osx" && "$TARGET" == "main" ]]; then ./package/osx/travis-build-main.sh; fi + - if [[ "${TRAVIS_OS_NAME}" == "osx" && "$TARGET" == "cpp" ]]; then ./package/osx/travis-build-cpp.sh; fi + branches: only: - master - cppgui + addons: apt: sources: @@ -31,6 +45,74 @@ addons: - libwxgtk3.0-dev - wx-common ssh_known_hosts: dl.slic3r.org + +matrix: + include: + - os: linux + env: + - TARGET=main + cache: + directories: + - $HOME/boost_1_63_0 + - $HOME/perl5 + - $HOME/wx302 + - local-lib + after_success: + - if [[ "${TRAVIS_BRANCH}" != "cppgui" ]]; then ./package/linux/travis-deploy-main.sh; fi + + - os: linux + env: + - TARGET=cpp + - CACHE=$HOME/cache + cache: + apt: true + directories: + - $HOME/cache + after_success: + - package/linux/travis-deploy-cpp.sh + + # While this works, it does not appear to be needed as the 10.13 builds + # work on 10.12 as well. + # - os: osx + # # osx_image: xcode8 # OS X 10.11 + # osx_image: xcode9.2 # OS X 10.12 + # env: + # - TARGET=main + # cache: + # directories: + # - /usr/local/Homebrew + # - $HOME/Library/Caches/Homebrew + # - local-lib + + - os: osx + osx_image: xcode9.4 # OS X 10.13 + env: + - TARGET=main + cache: + directories: + - /usr/local/Homebrew + - $HOME/Library/Caches/Homebrew + - local-lib + after_success: + - if [[ "${TRAVIS_BRANCH}" != "cppgui" ]]; then ./package/osx/travis-deploy-main.sh; fi + + - os: osx + osx_image: xcode9.4 + env: + - TARGET=cpp + - CACHE=$HOME/cache + cache: + ccache: true + directories: + - /usr/local/Homebrew + - $HOME/cache + - $HOME/Library/Caches/Homebrew + +env: + global: + - secure: eEVRZNMv7FM6jrOU9iAFkDhWxFQ1WtHBEaObImcvtFUxy6vWSt3ehFFeTRouj3uHQAnbvUzziDyvPPm8/95alv5g/du8ML6YzzqKBKfazM0xQ7SF6R2DQL8lfFIp+RSV7T02byEP1f1g7Zva7xH9szIlDcSfU0pXW4KWbkBFMd8= + - secure: gj338h+qHGccTD/VQFmEJkqdg2McIe2pO0iZ4Ae9BvY5vxkIML4BpoYZQXQTqiAOETnUjlcknY9lx0hI/PfkDD9MSJc5BC/3fMYRCu3SgAclEwklWf9vvtodUeT69mtnZuw1zze1nTbExuOw2mepbqFjxKKMl+9l5oCz4O54fXU= + notifications: irc: channels: @@ -38,65 +120,3 @@ notifications: on_success: change on_failure: always use_notice: true -dist: trusty -matrix: - include: - - os: linux - env: - - BUILD_PL=true - - SLIC3R_STATIC=1 - - CC=gcc-7 - - CXX=g++-7 - install: - - export BOOST_DIR=$HOME/boost_1_63_0 - - export SLIC3R_STATIC=1 - - export CXX=g++-4.9 - - export CC=g++-4.9 - - export SLIC3R_GIT_VERSION=$(git rev-parse HEAD) - - source $HOME/perl5/perlbrew/etc/bashrc - after_success: - - eval $(perl -Mlocal::lib=$TRAVIS_BUILD_DIR/local-lib) - - cd package/linux && make -f build_shell.mk && mv Slic3r* $TRAVIS_BUILD_DIR && cd $TRAVIS_BUILD_DIR - - LD_LIBRARY_PATH=$WXDIR/lib package/linux/make_archive.sh linux-x64 - - package/linux/appimage.sh x86_64 - - package/deploy/sftp.sh linux ~/slic3r-upload.rsa *.bz2 Slic3r*.AppImage - - package/deploy/sftp-symlink.sh linux ~/slic3r-upload.rsa AppImage Slic3r*.AppImage - - package/deploy/sftp-symlink.sh linux ~/slic3r-upload.rsa tar.bz2 *.bz2 - - os: linux - env: - - BUILD_PL=false - - WXVERSION=pkg - - CC=gcc-7 - - CXX=g++-7 - - BOOST_DIR=$HOME/boost_1_63_0 - - DISPLAY=:99.0 - cache: - apt: true - directories: - - "$HOME/cache" - after_success: - - cp slic3r ../ - - LD_LIBRARY_PATH=$WXDIR/lib package/linux/make_archive.sh linux-x64 - - package/linux/appimage.sh x86_64 - - package/deploy/sftp.sh linux ~/slic3r-upload.rsa *.bz2 Slic3r*.AppImage - - package/deploy/sftp-symlink.sh linux ~/slic3r-upload.rsa AppImage Slic3r*.AppImage - - package/deploy/sftp-symlink.sh linux ~/slic3r-upload.rsa tar.bz2 *.bz2 - - os: osx - osx_image: xcode9.4 - before_install: - - if [ "${TRAVIS_OS_NAME}" = "osx" ]; then ( sudo Xvfb :99 -ac -screen 0 1024x768x8; echo ok )& fi - - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update -v ; fi - - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install ccache; fi - env: - - BUILD_PL=false - - WXVERSION=pkg - - BOOST_DIR=$HOME/boost_1_63_0 - - DISPLAY=:99.0 - cache: - ccache: true - directories: - - $HOME/Library/Caches/Homebrew -env: - global: - - secure: eEVRZNMv7FM6jrOU9iAFkDhWxFQ1WtHBEaObImcvtFUxy6vWSt3ehFFeTRouj3uHQAnbvUzziDyvPPm8/95alv5g/du8ML6YzzqKBKfazM0xQ7SF6R2DQL8lfFIp+RSV7T02byEP1f1g7Zva7xH9szIlDcSfU0pXW4KWbkBFMd8= - - secure: gj338h+qHGccTD/VQFmEJkqdg2McIe2pO0iZ4Ae9BvY5vxkIML4BpoYZQXQTqiAOETnUjlcknY9lx0hI/PfkDD9MSJc5BC/3fMYRCu3SgAclEwklWf9vvtodUeT69mtnZuw1zze1nTbExuOw2mepbqFjxKKMl+9l5oCz4O54fXU= diff --git a/package/common/coreperl b/package/common/coreperl index ac6effc2c..ec1305420 100644 --- a/package/common/coreperl +++ b/package/common/coreperl @@ -5,9 +5,12 @@ bytes B POSIX FindBin +Getopt::Long Unicode::Normalize Tie::Handle +Time::HiRes Time::Local +Thread::Semaphore Math::Trig IO::Socket Errno diff --git a/package/linux/travis-decrypt-key b/package/common/travis-decrypt-key similarity index 100% rename from package/linux/travis-decrypt-key rename to package/common/travis-decrypt-key diff --git a/package/deploy/sftp.sh b/package/deploy/sftp.sh index 14ffa6aab..350b3db4d 100755 --- a/package/deploy/sftp.sh +++ b/package/deploy/sftp.sh @@ -18,7 +18,7 @@ fi if [ -s $KEY ]; then for i in $FILES; do - filepath=$(readlink -f "$i") + filepath=$i # this is expected to be an absolute path tmpfile=$(mktemp) echo put $filepath > $tmpfile sftp -b $tmpfile -i$KEY "${UPLOAD_USER}@dl.slic3r.org:$DIR/" diff --git a/package/linux/travis-build-cpp.sh b/package/linux/travis-build-cpp.sh new file mode 100755 index 000000000..7c45c81fe --- /dev/null +++ b/package/linux/travis-build-cpp.sh @@ -0,0 +1,30 @@ +#!/bin/bash +set -euo pipefail + +export WXVERSION=pkg +export CC=gcc-7 +export CXX=g++-7 +export DISPLAY=:99.0 + +mkdir -p $CACHE + +if [[ "$WXVERSION" != "pkg" ]]; then + export WXDIR=$HOME/wx${WXVERSION} + if [ ! -e $CACHE/wx${WXVERSION}.tar.bz2 ]; then + echo "Downloading http://www.siusgs.com/slic3r/buildserver/wx${WXVERSION}-libs.tar.bz2 => $CACHE/wx${WXVERSION}.tar.bz2" + curl -L "http://www.siusgs.com/slic3r/buildserver/wx${WXVERSION}-libs.tar.bz2" -o $CACHE/wx${WXVERSION}.tar.bz2 + fi + tar -C$HOME -xjf $CACHE/wx${WXVERSION}.tar.bz2 +fi + +if [ ! -e $CACHE/boost-compiled.tar.bz2 ]; then + echo "Downloading http://www.siusgs.com/slic3r/buildserver/boost_1_63_0.built.gcc-4.9.4-buildserver.tar.bz2 => $CACHE/boost-compiled.tar.bz2" + curl -L "http://www.siusgs.com/slic3r/buildserver/boost_1_63_0.built.gcc-4.9.4-buildserver.tar.bz2" -o $CACHE/boost-compiled.tar.bz2 +fi + +tar -C$HOME -xjf $CACHE/boost-compiled.tar.bz2 + +mkdir build && cd build +cmake -DBOOST_ROOT=$HOME/boost_1_63_0 -DSLIC3R_STATIC=ON -DCMAKE_BUILD_TYPE=Release ../src +cmake --build . +./slic3r_test -s diff --git a/package/linux/travis-build-main.sh b/package/linux/travis-build-main.sh new file mode 100755 index 000000000..de6586865 --- /dev/null +++ b/package/linux/travis-build-main.sh @@ -0,0 +1,32 @@ +#!/bin/bash + +# This is too strict for source $HOME/perl5/perlbrew/etc/bashrc: +### set -euo pipefail + +if [ ! -d $HOME/perl5/perlbrew/perls/slic3r-perl ]; then + echo "Downloading slic3r-perlbrew-5.24.tar.bz2" + curl -L "http://www.siusgs.com/slic3r/buildserver/slic3r-perl.524.gcc49.travis.tar.bz2" -o /tmp/slic3r-perlbrew-5.24.tar.bz2; + tar -C$HOME/perl5/perlbrew/perls -xjf /tmp/slic3r-perlbrew-5.24.tar.bz2 +fi + +source $HOME/perl5/perlbrew/etc/bashrc +perlbrew switch slic3r-perl + +if [ ! -e $HOME/boost_1_63_0/boost/version.hpp ]; then + echo "Downloading boost_1_63_0.built.gcc-4.9.4-buildserver.tar.bz2" + curl -L "http://www.siusgs.com/slic3r/buildserver/boost_1_63_0.built.gcc-4.9.4-buildserver.tar.bz2" -o /tmp/boost-compiled.tar.bz2 + tar -C$HOME -xjf /tmp/boost-compiled.tar.bz2 +fi + +if [ ! -e ./local-lib/lib/perl5/x86_64-linux-thread-multi/Wx.pm ]; then + echo "Downloading slic3r-dependencies.gcc49.travis-wx302.tar.bz2" + curl -L "http://www.siusgs.com/slic3r/buildserver/slic3r-dependencies.travis-wx302.tar.bz2" -o /tmp/local-lib-wx302.tar.bz2 + tar -C$TRAVIS_BUILD_DIR -xjf /tmp/local-lib-wx302.tar.bz2 + + echo "Downloading buildserver/wx302-libs.tar.bz2" + curl -L "http://www.siusgs.com/slic3r/buildserver/wx302-libs.tar.bz2" -o /tmp/wx302.tar.bz2 + tar -C$HOME -xjf /tmp/wx302.tar.bz2 +fi + +SLIC3R_STATIC=1 CC=g++-4.9 CXX=g++-4.9 BOOST_DIR=$HOME/boost_1_63_0 perl ./Build.PL +perl ./Build.PL --gui diff --git a/package/linux/travis-deploy-cpp.sh b/package/linux/travis-deploy-cpp.sh new file mode 100755 index 000000000..3725f5f19 --- /dev/null +++ b/package/linux/travis-deploy-cpp.sh @@ -0,0 +1,10 @@ +#!/bin/bash +set -euo pipefail + +# Not sure this is the correct deployment: +# cp slic3r ../ +# LD_LIBRARY_PATH=$WXDIR/lib package/linux/make_archive.sh linux-x64 +# package/linux/appimage.sh x86_64 +# package/deploy/sftp.sh linux ~/slic3r-upload.rsa *.bz2 Slic3r*.AppImage +# package/deploy/sftp-symlink.sh linux ~/slic3r-upload.rsa AppImage Slic3r*.AppImage +# package/deploy/sftp-symlink.sh linux ~/slic3r-upload.rsa tar.bz2 *.bz2 diff --git a/package/linux/travis-deploy-main.sh b/package/linux/travis-deploy-main.sh new file mode 100755 index 000000000..a57ec6010 --- /dev/null +++ b/package/linux/travis-deploy-main.sh @@ -0,0 +1,13 @@ +#!/bin/bash +set -euo pipefail + +eval $(perl -Mlocal::lib=$TRAVIS_BUILD_DIR/local-lib) +cd package/linux && make -f build_shell.mk && mv Slic3r* $TRAVIS_BUILD_DIR && cd $TRAVIS_BUILD_DIR + +LD_LIBRARY_PATH=$WXDIR/lib package/linux/make_archive.sh linux-x64 + +package/linux/appimage.sh x86_64 + +package/deploy/sftp.sh linux ~/slic3r-upload.rsa `pwd`/*.bz2 `pwd`/Slic3r*.AppImage +package/deploy/sftp-symlink.sh linux ~/slic3r-upload.rsa AppImage Slic3r*.AppImage +package/deploy/sftp-symlink.sh linux ~/slic3r-upload.rsa tar.bz2 *.bz2 diff --git a/package/linux/travis-setup.sh b/package/linux/travis-setup.sh deleted file mode 100755 index 28c9ef81a..000000000 --- a/package/linux/travis-setup.sh +++ /dev/null @@ -1,70 +0,0 @@ -#!/bin/bash -# Script to configure travis environment prior to build -CACHE=$HOME/cache -mkdir -p $CACHE - -if [[ "$BUILD_PL" == true ]]; then - WXVERSION=302 - if [ ! -e $CACHE/slic3r-perlbrew-5.24.tar.bz2 ]; then - echo "Downloading http://www.siusgs.com/slic3r/buildserver/slic3r-perl.524.travis.tar.bz2 => $CACHE/slic3r-perlbrew-5.24.tar.bz2" - curl -L "http://www.siusgs.com/slic3r/buildserver/slic3r-perl.524.gcc49.travis.tar.bz2" -o $CACHE/slic3r-perlbrew-5.24.tar.bz2; - fi - - if [ ! -e $CACHE/boost-compiled.tar.bz2 ]; then - echo "Downloading http://www.siusgs.com/slic3r/buildserver/boost_1_63_0.built.gcc-4.9.4-buildserver.tar.bz2 => $CACHE/boost-compiled.tar.bz2" - curl -L "http://www.siusgs.com/slic3r/buildserver/boost_1_63_0.built.gcc-4.9.4-buildserver.tar.bz2" -o $CACHE/boost-compiled.tar.bz2 - fi - - if [ ! -e $CACHE/local-lib-wx${WXVERSION}.tar.bz2 ]; then - echo "Downloading http://www.siusgs.com/slic3r/buildserver/slic3r-dependencies.gcc49.travis-wx${WXVERSION}.tar.bz2 => $CACHE/local-lib-wx${WXVERSION}.tar.bz2" - curl -L "http://www.siusgs.com/slic3r/buildserver/slic3r-dependencies.travis-wx${WXVERSION}.tar.bz2" -o $CACHE/local-lib-wx${WXVERSION}.tar.bz2 - fi - - if [ ! -e $CACHE/wx${WXVERSION}.tar.bz2 ]; then - echo "Downloading http://www.siusgs.com/slic3r/buildserver/wx${WXVERSION}-libs.tar.bz2 => $CACHE/wx${WXVERSION}.tar.bz2" - curl -L "http://www.siusgs.com/slic3r/buildserver/wx${WXVERSION}-libs.tar.bz2" -o $CACHE/wx${WXVERSION}.tar.bz2 - fi - - tar -C$TRAVIS_BUILD_DIR -xjf $CACHE/local-lib-wx${WXVERSION}.tar.bz2 - tar -C$HOME/perl5/perlbrew/perls -xjf $CACHE/slic3r-perlbrew-5.24.tar.bz2 - tar -C$HOME -xjf $CACHE/boost-compiled.tar.bz2 - tar -C$HOME -xjf $CACHE/wx${WXVERSION}.tar.bz2 -else - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then - if [[ "$WXVERSION" != "pkg" ]]; then - export WXDIR=$HOME/wx${WXVERSION} - if [ ! -e $CACHE/wx${WXVERSION}.tar.bz2 ]; then - echo "Downloading http://www.siusgs.com/slic3r/buildserver/wx${WXVERSION}-libs.tar.bz2 => $CACHE/wx${WXVERSION}.tar.bz2" - curl -L "http://www.siusgs.com/slic3r/buildserver/wx${WXVERSION}-libs.tar.bz2" -o $CACHE/wx${WXVERSION}.tar.bz2 - fi - tar -C$HOME -xjf $CACHE/wx${WXVERSION}.tar.bz2 - fi - - if [ ! -e $CACHE/boost-compiled.tar.bz2 ]; then - echo "Downloading http://www.siusgs.com/slic3r/buildserver/boost_1_63_0.built.gcc-4.9.4-buildserver.tar.bz2 => $CACHE/boost-compiled.tar.bz2" - curl -L "http://www.siusgs.com/slic3r/buildserver/boost_1_63_0.built.gcc-4.9.4-buildserver.tar.bz2" -o $CACHE/boost-compiled.tar.bz2 - fi - - tar -C$HOME -xjf $CACHE/boost-compiled.tar.bz2 - - elif [[ "$TRAVIS_OS_NAME" == "osx" ]]; then - if [[ "$WXVERSION" != "pkg" ]]; then - WXVER_EXPANDED=${WXVERSION:0:1}.${WXVERSION:1:1}.${WXVERSION:2:1} - export WXDIR=$HOME/wx${WXVERSION} - if [ ! -e $CACHE/wx${WXVERSION}-${TRAVIS_OS_NAME}.tar.bz2 ]; then - curl -L "https://github.com/wxWidgets/wxWidgets/releases/download/v${WXVER_EXPANDED}/wxWidgets-${WXVER_EXPANDED}.tar.bz2" -o $HOME/wx${WXVERSION}-src.tar.bz2 - tar -C$HOME -xjf $HOME/wx${WXVERSION}-src.tar.bz2 - mkdir $WXDIR - cd $HOME/$WXDIR && cmake $HOME/wxWidgets-${WXVER_EXPANDED} -DwxBUILD_SHARED=OFF - cmake --build . --target -- -j4 - tar -C$HOME -cjf $CACHE/wx${WXVERSION}-${TRAVIS_OS_NAME}.tar.bz2 $(basename ${WXDIR}) - else - tar -C$HOME -xjf $CACHE/wx${WXVERSION}-${TRAVIS_OS_NAME}.tar.bz2 - fi - export PATH=${PATH}:${WXDIR} - cd $TRAVIS_BUILD_DIR # go back to the build dir - else - brew install wxmac # install via homebrew - fi - fi -fi diff --git a/package/osx/make_dmg.sh b/package/osx/make_dmg.sh index fa6ea4c63..2f93d2c31 100755 --- a/package/osx/make_dmg.sh +++ b/package/osx/make_dmg.sh @@ -7,6 +7,14 @@ set -euo pipefail # Adapted from script written by bubnikv for Prusa3D. # Run from slic3r repo root directory. +# While we might have a pp executable in our path, it might not be +# using the perl binary we have in path, so make sure they belong +# to the same Perl instance: +if !(perl -Mlocal::lib=local-lib -MPAR::Packer -e1 2> /dev/null); then + echo "The PAR::Packer module was not found; installing..." + cpanm --local-lib local-lib PAR::Packer +fi + WD=$(dirname $0) appname=Slic3r @@ -17,18 +25,17 @@ if [ $(git describe --exact-match &>/dev/null) ]; then SLIC3R_BUILD_ID=$(git describe) else # Get the current branch - if [ -z ${GIT_BRANCH+x} ] && [ -z ${APPVEYOR_REPO_BRANCH+x} ]; then - current_branch=$(git symbolic-ref HEAD | sed 's!refs\/heads\/!!') + if [ ! -z ${GIT_BRANCH+x} ]; then + echo "Setting to GIT_BRANCH" + current_branch=$(echo $GIT_BRANCH | cut -d / -f 2) + elif [ ! -z ${TRAVIS_BRANCH+x} ]; then + echo "Setting to TRAVIS_BRANCH" + current_branch=$TRAVIS_BRANCH + elif [ ! -z ${APPVEYOR_REPO_BRANCH+x} ]; then + echo "Setting to APPVEYOR_REPO_BRANCH" + current_branch=$APPVEYOR_REPO_BRANCH else - current_branch="unknown" - if [ ! -z ${GIT_BRANCH+x} ]; then - echo "Setting to GIT_BRANCH" - current_branch=$(echo $GIT_BRANCH | cut -d / -f 2) - fi - if [ ! -z ${APPVEYOR_REPO_BRANCH+x} ]; then - echo "Setting to APPVEYOR_REPO_BRANCH" - current_branch=$APPVEYOR_REPO_BRANCH - fi + current_branch=$(git symbolic-ref HEAD | sed 's!refs\/heads\/!!') fi if [ "$current_branch" == "master" ]; then @@ -45,8 +52,6 @@ fi dmgfile=slic3r-${SLIC3R_BUILD_ID}.dmg echo "DMG filename: ${dmgfile}" -# If we're on a branch, add the branch name to the app name. - rm -rf $WD/_tmp mkdir -p $WD/_tmp @@ -59,6 +64,7 @@ PkgInfoContents="APPL????" source $WD/plist.sh # Our slic3r dir and location of perl +eval $(perl -Mlocal::lib=local-lib) PERL_BIN=$(which perl) PP_BIN=$(which pp) SLIC3R_DIR=$(perl -MCwd=realpath -e "print realpath '${WD}/../../'") @@ -89,12 +95,24 @@ cp $SLIC3R_DIR/slic3r.pl $macosfolder/slic3r.pl cp -fRP $SLIC3R_DIR/local-lib $macosfolder/local-lib cp -fRP $SLIC3R_DIR/lib/* $macosfolder/local-lib/lib/perl5/ -echo "Relocating dylib paths..." -for bundle in $(find $macosfolder/local-lib/lib/perl5/darwin-thread-multi-2level/auto/Wx -name '*.bundle') $(find $macosfolder/local-lib/lib/perl5/darwin-thread-multi-2level/Alien/wxWidgets -name '*.dylib' -type f); do +echo "Relocating Wx dylib paths..." +mkdir $macosfolder/dylibs +function relocate_dylibs { + local bundle=$1 chmod +w $bundle - for dylib in $(otool -l $bundle | grep .dylib | grep local-lib | awk '{print $2}'); do - install_name_tool -change "$dylib" "@executable_path/local-lib/lib/perl5/darwin-thread-multi-2level/Alien/wxWidgets/osx_cocoa_3_0_2_uni/lib/$(basename $dylib)" $bundle + local dylib + for dylib in $(otool -l $bundle | grep .dylib | grep -v /usr/lib | awk '{print $2}' | grep -v '^@'); do + local dylib_dest="$macosfolder/dylibs/$(basename $dylib)" + if [ ! -e $dylib_dest ]; then + echo " relocating $dylib" + cp $dylib $macosfolder/dylibs/ + relocate_dylibs $dylib_dest + fi + install_name_tool -change "$dylib" "@executable_path/dylibs/$(basename $dylib)" $bundle done +} +for bundle in $(find $macosfolder/local-lib/ \( -name '*.bundle' -or -name '*.dylib' \) -type f); do + relocate_dylibs "$bundle" done echo "Copying startup script..." @@ -102,8 +120,12 @@ cp -f $WD/startup_script.sh $macosfolder/$appname chmod +x $macosfolder/$appname echo "Copying perl from $PERL_BIN" -# Edit package/common/coreperl to add/remove core Perl modules added to this package, one per line. cp -f $PERL_BIN $macosfolder/perl-local +chmod +w $macosfolder/perl-local +relocate_dylibs $macosfolder/perl-local + +echo "Copying core modules" +# Edit package/common/coreperl to add/remove core Perl modules added to this package, one per line. ${PP_BIN} \ -M $(grep -v "^#" ${WD}/../common/coreperl | xargs | awk 'BEGIN { OFS=" -M "}; {$1=$1; print $0}') \ -B -p -e "print 123" -o $WD/_tmp/bundle.par @@ -142,16 +164,33 @@ make_plist echo $PkgInfoContents >$appfolder/Contents/PkgInfo KEYCHAIN_FILE_=${KEYCHAIN_FILE:-} +KEYCHAIN_BASE64_=${KEYCHAIN_BASE64:-} +KEYCHAIN_PASSWORD_=${KEYCHAIN_PASSWORD:-travis} +KEYCHAIN_IDENTITY_=${KEYCHAIN_IDENTITY:-Developer ID Application: Alessandro Ranellucci (975MZ9YJL7)} + +# In case we were supplied a base64-encoded .p12 file instead of the path +# to an existing keychain, create a temporary one +if [[ -z "$KEYCHAIN_FILE_" && ! -z "$KEYCHAIN_BASE64_" ]]; then + KEYCHAIN_FILE_=$WD/_tmp/build.keychain + echo "Creating temporary keychain at ${KEYCHAIN_FILE_}" + echo "$KEYCHAIN_BASE64_" | base64 --decode > "${KEYCHAIN_FILE_}.p12" + security delete-keychain "$KEYCHAIN_FILE_" || true + security create-keychain -p "${KEYCHAIN_PASSWORD_}" "$KEYCHAIN_FILE_" + security set-keychain-settings -t 3600 -u "$KEYCHAIN_FILE_" + security import "${KEYCHAIN_FILE_}.p12" -k "$KEYCHAIN_FILE_" -P "${KEYCHAIN_PASSWORD_}" -T /usr/bin/codesign + security set-key-partition-list -S apple-tool:,apple: -s -k "${KEYCHAIN_PASSWORD_}" "$KEYCHAIN_FILE_" +fi + if [ ! -z $KEYCHAIN_FILE_ ]; then echo "Signing app..." chmod -R +w $macosfolder/* xattr -cr $appfolder security list-keychains -s "${KEYCHAIN_FILE_}" security default-keychain -s "${KEYCHAIN_FILE_}" - security unlock-keychain -p "${KEYCHAIN_PASSWORD}" "${KEYCHAIN_FILE_}" - codesign --sign "${KEYCHAIN_IDENTITY}" --deep "$appfolder" + security unlock-keychain -p "${KEYCHAIN_PASSWORD_}" "${KEYCHAIN_FILE_}" + codesign --sign "${KEYCHAIN_IDENTITY_}" --deep "$appfolder" else - echo "No KEYCHAIN_FILE env variable; skipping codesign" + echo "No KEYCHAIN_FILE or KEYCHAIN_BASE64 env variable; skipping codesign" fi echo "Creating dmg file...." @@ -165,8 +204,8 @@ if [ ! -z $KEYCHAIN_FILE_ ]; then chmod +w $dmgfile security list-keychains -s "${KEYCHAIN_FILE_}" security default-keychain -s "${KEYCHAIN_FILE_}" - security unlock-keychain -p "${KEYCHAIN_PASSWORD}" "${KEYCHAIN_FILE_}" - codesign --sign "${KEYCHAIN_IDENTITY}" "$dmgfile" + security unlock-keychain -p "${KEYCHAIN_PASSWORD_}" "${KEYCHAIN_FILE_}" + codesign --sign "${KEYCHAIN_IDENTITY_}" "$dmgfile" fi rm -rf $WD/_tmp diff --git a/package/osx/patch-wxwidgets.diff b/package/osx/patch-wxwidgets.diff new file mode 100644 index 000000000..39c639459 --- /dev/null +++ b/package/osx/patch-wxwidgets.diff @@ -0,0 +1,46 @@ +diff --git src/osx/carbon/dataobj.cpp src/osx/carbon/dataobj.cpp +index 758e3a7928..5445aa6b14 100644 +--- src/osx/carbon/dataobj.cpp ++++ src/osx/carbon/dataobj.cpp +@@ -29,10 +29,6 @@ + + #include "wx/osx/private.h" + +-#if wxOSX_USE_COCOA_OR_CARBON +- #include +-#endif +- + // ---------------------------------------------------------------------------- + // wxDataFormat + // ---------------------------------------------------------------------------- +diff --git src/osx/core/bitmap.cpp src/osx/core/bitmap.cpp +index 3c61c173e7..3322b605fc 100644 +--- src/osx/core/bitmap.cpp ++++ src/osx/core/bitmap.cpp +@@ -35,10 +35,6 @@ + #include "wx/osx/private.h" + #endif + +-#ifndef __WXOSX_IPHONE__ +-#include +-#endif +- + CGColorSpaceRef wxMacGetGenericRGBColorSpace(); + CGDataProviderRef wxMacCGDataProviderCreateWithMemoryBuffer( const wxMemoryBuffer& buf ); + +diff --git src/stc/scintilla/src/Editor.cxx src/stc/scintilla/src/Editor.cxx +index cd72953ae7..a3ee41c49b 100644 +--- src/stc/scintilla/src/Editor.cxx ++++ src/stc/scintilla/src/Editor.cxx +@@ -5841,9 +5841,9 @@ + } + + static bool Close(Point pt1, Point pt2) { +- if (abs(pt1.x - pt2.x) > 3) ++ if (labs(pt1.x - pt2.x) > 3) + return false; +- if (abs(pt1.y - pt2.y) > 3) ++ if (labs(pt1.y - pt2.y) > 3) + return false; + return true; + } diff --git a/package/osx/travis-build-cpp.sh b/package/osx/travis-build-cpp.sh new file mode 100755 index 000000000..078593aff --- /dev/null +++ b/package/osx/travis-build-cpp.sh @@ -0,0 +1,36 @@ +#!/bin/bash +set -euo pipefail + +export WXVERSION=pkg +export DISPLAY=:99.0 + +mkdir -p $CACHE + +( sudo Xvfb :99 -ac -screen 0 1024x768x8; echo ok )& +brew update -v +brew install ccache || brew upgrade ccache + +if [[ "$WXVERSION" != "pkg" ]]; then + WXVER_EXPANDED=${WXVERSION:0:1}.${WXVERSION:1:1}.${WXVERSION:2:1} + export WXDIR=$HOME/wx${WXVERSION} + if [ ! -e $CACHE/wx${WXVERSION}-${TRAVIS_OS_NAME}.tar.bz2 ]; then + curl -L "https://github.com/wxWidgets/wxWidgets/releases/download/v${WXVER_EXPANDED}/wxWidgets-${WXVER_EXPANDED}.tar.bz2" -o $HOME/wx${WXVERSION}-src.tar.bz2 + tar -C$HOME -xjf $HOME/wx${WXVERSION}-src.tar.bz2 + mkdir $WXDIR + cd $HOME/$WXDIR && cmake $HOME/wxWidgets-${WXVER_EXPANDED} -DwxBUILD_SHARED=OFF + cmake --build . --target -- -j4 + tar -C$HOME -cjf $CACHE/wx${WXVERSION}-${TRAVIS_OS_NAME}.tar.bz2 $(basename ${WXDIR}) + else + tar -C$HOME -xjf $CACHE/wx${WXVERSION}-${TRAVIS_OS_NAME}.tar.bz2 + fi + export PATH=${PATH}:${WXDIR} + cd $TRAVIS_BUILD_DIR # go back to the build dir +else + brew install wxmac || brew upgrade wxmac # install via homebrew +fi + +mkdir build && cd build +cmake -DBOOST_ROOT=$HOME/boost_1_63_0 -DSLIC3R_STATIC=ON -DCMAKE_BUILD_TYPE=Release ../src +cmake --build . +./slic3r_test -s +#./gui_test -s \ No newline at end of file diff --git a/package/osx/travis-build-main.sh b/package/osx/travis-build-main.sh new file mode 100755 index 000000000..18049e315 --- /dev/null +++ b/package/osx/travis-build-main.sh @@ -0,0 +1,33 @@ +#!/bin/bash +set -euo pipefail + +# These two commands are only needed on 10.12: +rm -rf /usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask +brew uninstall --force postgis cgal sfcgal + +brew update -v + +brew install boost || brew upgrade boost +brew install perl || brew upgrade perl +brew install cpanminus || brew upgrade cpanminus +brew install wxwidgets || brew upgrade wxwidgets +brew link --overwrite perl cpanminus + +export SLIC3R_STATIC=1 +export BOOST_DIR=/usr/local +perl ./Build.PL + +# remove X11 because otherwise OpenGL.pm will link libglut.3.dylib instead of GLUT.framework +sudo rm -rf /opt/X11* + +export LIBRARY_PATH=/usr/local/lib + +# One Wx test fails on 10.12; seems harmless +if [ $TRAVIS_OSX_IMAGE == 'xcode9.2']; then + cpanm --local-lib local-lib -f Wx +fi + +perl ./Build.PL --gui + +# Install PAR::Packer now so that it gets cached by Travis +cpanm --local-lib local-lib PAR::Packer diff --git a/package/osx/travis-deploy-main.sh b/package/osx/travis-deploy-main.sh new file mode 100755 index 000000000..7f6e509c3 --- /dev/null +++ b/package/osx/travis-deploy-main.sh @@ -0,0 +1,5 @@ +#!/bin/bash +set -euo pipefail + +package/osx/make_dmg.sh +package/deploy/sftp.sh mac ~/slic3r-upload.rsa `pwd`/slic3r*.dmg