#!/bin/bash # Slackware build script for Arduino # Copyright 2015, 2022 Mario Preksavec, Zagreb, Croatia # All rights reserved. # # Redistribution and use of this script, with or without modification, is # permitted provided that the following conditions are met: # # 1. Redistributions of this script must retain the above copyright # notice, this list of conditions and the following disclaimer. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. cd $(dirname $0) ; CWD=$(pwd) PRGNAM=Arduino VERSION=${VERSION:-1.8.19} BUILD=${BUILD:-1} TAG=${TAG:-_SBo} PKGTYPE=${PKGTYPE:-tgz} # Examples EXAMPLES=${EXAMPLES:-1.9.1} # Libraries ETHERNET=${ETHERNET:-2.0.0} GSM=${GSM:-1.0.6} STEPPER=${STEPPER:-1.1.3} TFT=${TFT:-1.0.6} WIFI=${WIFI:-1.2.7} FIRMATA=${FIRMATA:-2.5.8} BRIDGE=${BRIDGE:-1.7.0} ROBOT_CONTROL=${ROBOT_CONTROL:-1.0.4} ROBOT_MOTOR=${ROBOT_MOTOR:-1.0.3} ROBOTIRREMOTE=${ROBOTIRREMOTE:-2.0.0} SPACEBREWYUN=${SPACEBREWYUN:-1.0.2} TEMBOO=${TEMBOO:-1.2.1} ESPLORA=${ESPLORA:-1.0.4} MOUSE=${MOUSE:-1.0.1} KEYBOARD=${KEYBOARD:-1.0.2} SD=${SD:-1.2.4} SERVO=${SERVO:-1.1.8} LIQUIDCRYSTAL=${LIQUIDCRYSTAL:-1.0.7} ADAFRUIT=${ADAFRUIT:-1.11.3} WIFI101UPDATER=${WIFI101UPDATER:-0.12.0} LIBASTYLEJ=${LIBASTYLEJ:-2.05.1-5} LIBLISTSERIALS=${LIBLISTSERIALS:-1.4.2-2} ARDUINOBUILDER=${ARDUINOBUILDER:-1.6.1} AVRDUDE=${AVRDUDE:-6.3.0-arduino17} AVRCORE=${AVRCORE:-1.8.3} ARDUINOOTA=${ARDUINOOTA:-1.3.0} # Toolchain GCC=${GCC:-7.3.0} AVR=${AVR:-3.6.1} AVR_BUILD=${AVR_BUILD:-arduino7} AUTOCONF=${AUTOCONF:-2.64} AUTOMAKE=${AUTOMAKE:-1.11.1} GMP=${GMP:-5.0.2} MPFR=${MPFR:-3.1.0} MPC=${MPC:-0.9} ATMEL_ATMEGA_PACK=${ATMEL_ATMEGA_PACK:-1.4.351} ATMEL_ATTINY_PACK=${ATMEL_ATTINY_PACK:-1.4.310} ATMEL_DX_PACK=${ATMEL_DX_PACK:-1.0.27} if [ -z "$ARCH" ]; then case "$( uname -m )" in i?86) ARCH=i586 ;; arm*) ARCH=arm ;; *) ARCH=$( uname -m ) ;; esac fi # If the variable PRINT_PACKAGE_NAME is set, then this script will report what # the name of the created package would be, and then exit. This information # could be useful to other scripts. if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE" exit 0 fi TMP=${TMP:-/tmp/SBo} PKG=$TMP/package-$PRGNAM OUTPUT=${OUTPUT:-/tmp} if [ "$ARCH" = "i586" ]; then LIB="32" AVRDUDEARCH="i686" ARDUINOOTAARCH="386" elif [ "$ARCH" = "x86_64" ]; then LIB="64" AVRDUDEARCH="$ARCH" ARDUINOOTAARCH="amd64" else echo "$ARCH is not supported." exit 1 fi set -e rm -rf $PKG mkdir -p $TMP $PKG $OUTPUT cd $TMP rm -rf $PRGNAM-$VERSION tar xvf $CWD/$PRGNAM-$VERSION.tar.gz cd $PRGNAM-$VERSION chown -R root:root . find -L . \ \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ -o -perm 511 \) -exec chmod 755 {} \; -o \ \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; # Prepare toolchain tar xvf $CWD/toolchain-avr-$GCC-atmel$AVR-$AVR_BUILD.tar.gz cp $CWD/autoconf-$AUTOCONF.tar.bz2 \ $CWD/automake-$AUTOMAKE.tar.bz2 \ $CWD/avr-binutils.tar.bz2 \ $CWD/gmp-$GMP.tar.bz2 \ $CWD/mpfr-$MPFR.tar.bz2 \ $CWD/mpc-$MPC.tar.gz \ $CWD/gcc-$GCC.tar.xz \ $CWD/avr-libc.tar.bz2 \ $CWD/avr8-headers.zip \ $CWD/avr-gdb.tar.bz2 \ $CWD/Atmel.ATmega_DFP.$ATMEL_ATMEGA_PACK.atpack \ $CWD/Atmel.ATtiny_DFP.$ATMEL_ATTINY_PACK.atpack \ $CWD/Atmel.AVR-Dx_DFP.$ATMEL_DX_PACK.atpack \ toolchain-avr-$GCC-atmel$AVR-$AVR_BUILD/ cp $CWD/patches/gcc-add-missing-isl-includes.patch \ toolchain-avr-$GCC-atmel$AVR-$AVR_BUILD/avr-gcc-patches/ # Build toolchain ( cd toolchain-avr-$GCC-atmel$AVR-$AVR_BUILD patch -p1 <$CWD/patches/toolchain-fixes.diff chmod +x ./atpack.Dx.build.bash ./tools.bash ./binutils.build.bash ./gcc.build.bash ./avr-libc.build.bash ./gdb.build.bash rm -rf objdir/{info,man,share} ./atpack.build.bash ./atpack.tiny.build.bash ./atpack.Dx.build.bash ) # Copy toolchain to where it can be found (`mv` will preserve some space) mkdir -p build/linux/work/hardware/tools/avr/ mv toolchain-avr-$GCC-atmel$AVR-$AVR_BUILD/objdir/* \ build/linux/work/hardware/tools/avr/ # AVRDUDE build script was removed :-/ tar --strip 1 -C build/linux/work/hardware/tools/avr/ \ -xvf $CWD/avrdude-$AVRDUDE-$AVRDUDEARCH-pc-linux-gnu.tar.bz2 # ArduinoOTA ships binary as well tar --strip 1 -C build/linux/work/hardware/tools/avr/ \ -xvf $CWD/arduinoOTA-$ARDUINOOTA-linux_amd64.tar.bz2 # Builder needs to know about the stuff we put above cat > build/linux/work/hardware/tools/avr/builtin_tools_versions.txt </,/<\/antcall>/d' \ -i build/build.xml # Copy shared packages cp $CWD/WiFi101-Updater-ArduinoIDE-Plugin-${WIFI101UPDATER}.zip build/shared/ # Copy libraries - with new names cp $CWD/Adafruit_CircuitPlayground-$ADAFRUIT.zip build/Adafruit_Circuit_Playground-$ADAFRUIT.zip cp $CWD/arduino-$FIRMATA.zip build/Firmata-$FIRMATA.zip # Copy libraries cp $CWD/arduino-examples-$EXAMPLES.zip \ $CWD/Ethernet-$ETHERNET.zip \ $CWD/GSM-$GSM.zip \ $CWD/Stepper-$STEPPER.zip \ $CWD/TFT-$TFT.zip \ $CWD/WiFi-$WIFI.zip \ $CWD/Bridge-$BRIDGE.zip \ $CWD/Robot_Control-$ROBOT_CONTROL.zip \ $CWD/Robot_Motor-$ROBOT_MOTOR.zip \ $CWD/RobotIRremote-$ROBOTIRREMOTE.zip \ $CWD/SpacebrewYun-$SPACEBREWYUN.zip \ $CWD/Temboo-$TEMBOO.zip \ $CWD/Esplora-$ESPLORA.zip \ $CWD/Mouse-$MOUSE.zip \ $CWD/Keyboard-$KEYBOARD.zip \ $CWD/SD-$SD.zip \ $CWD/Servo-$SERVO.zip \ $CWD/LiquidCrystal-$LIQUIDCRYSTAL.zip \ $CWD/libastylej-$LIBASTYLEJ.zip \ $CWD/liblistSerials-$LIBLISTSERIALS.zip \ $CWD/arduino-builder-linux$LIB-$ARDUINOBUILDER.tar.bz2 \ $CWD/avr-$AVRCORE.tar.bz2 build/ # Finally, build Arduino ( cd build ; ant ) # Our files are here cd build/linux/work/ # Manual install ensues mkdir -p $PKG/opt/$PRGNAM mv arduino{,-builder} examples hardware lib libraries \ tools{,-builder} $PKG/opt/$PRGNAM # Ownership fixup chown -R root:root $PKG/opt/$PRGNAM/tools-builder $PKG/opt/Arduino/hardware # Make it a bit more user friendly mkdir -p $PKG/usr/{bin,share/applications} sed "s/FULL_PATH/\/opt\/$PRGNAM/" $CWD/arduino.desktop \ > $PKG/usr/share/applications/$PRGNAM.desktop ln -s /opt/$PRGNAM/arduino $PKG/usr/bin/$PRGNAM mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION cp -a revisions.txt $TMP/$PRGNAM-$VERSION/{README.md,license.txt} \ $PKG/usr/doc/$PRGNAM-$VERSION cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild mkdir -p $PKG/install cat $CWD/slack-desc > $PKG/install/slack-desc cat $CWD/doinst.sh > $PKG/install/doinst.sh cd $PKG /sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE