#!/bin/bash # This script builds a maintainance LyX distribution according to # the procedure outlined at: # http://wiki.lyx.org/Devel/ReleaseProcedure # It also includes several other tests, to make sure the packages # works as it should. #DEBUG=echo; ######################################################### # A few variables need to be set, here at the top. # The script should not need any other customization. # # Where we will do our work BASE="/cvs/lyx/lyx-release"; # Where our git repository lives SRCDIR="/cvs/lyx/lyx-stable"; # editor if [ -z "$EDITOR" ]; then EDITOR=vi; fi ######################################################### # Option variables # Options to make, when we compile MAKEOPTS="-j8"; # Compile? COMPILE="YES"; # Make patch file? PATCH="YES"; function usage() { echo "lyx-build [-C] [-m MAKEARGS[ [-P]"; echo " -C: Do not test compilation"; echo " -m MAKEARGS: Arguments for make"; echo " -P: Do not build patch files"; } while getopts ":Cm:Ph" opt; do case $opt in C ) COMPILE="";; # don't test compilation m ) MAKEOPTS="$OPTARG";; P ) PATCH="";; # don't build patch files h ) usage; exit 0;; \? ) echo "Unknown option $opt"; usage; exit 1;; esac done shift $(($OPTIND - 1)); # Determine LyX version cd $SRCDIR/ VERSION=$(head configure.ac | grep AC_INIT | perl -e 'while (<>) {m/AC_INIT\(LyX,([^,]+)/; print $1;}'); # Development release? DEVEL_RELEASE=""; # If the version in configure.ac is e.g. "2.3.4dev", then we are building # a development release. VERSION_BASE=${VERSION%dev}; if [ "$VERSION" != "$VERSION_BASE" ]; then CURHASH=$(git rev-parse HEAD); # Eight chars should be enough CURHASH=${CURHASH:0:8}; # New version is e.g. 2.3.4-12649348 VERSION_BASE="$VERSION-$CURHASH"; PATCH=""; fi echo "This is version $VERSION_BASE."; echo -n "Ready to build source packages..."; read echo "Exporting clean tree..."; $DEBUG rm -Rf $BASE/lyx-export/ $DEBUG git checkout-index -a -f --prefix=$BASE/lyx-export/ $DEBUG cd $BASE/lyx-export/ $DEBUG ./autogen.sh $DEBUG rm -Rf $BASE/lyx-build/ $DEBUG mkdir $BASE/lyx-build/ $DEBUG cd $BASE/lyx-build/ echo "Building distribution..."; $DEBUG $BASE/lyx-export/configure --enable-build-type=rel --enable-qt5 if ! $DEBUG make lyxdist; then echo "Couldn't make distribution!"; exit 1; fi echo "Packages created:"; # This will happen with development releases if [ ! -f "lyx-$VERSION_BASE.tar.gz" ]; then $DEBUG mv "lyx-$VERSION.tar.gz" "lyx-$VERSION_BASE.tar.gz" || exit 1; $DEBUG mv "lyx-$VERSION.tar.xz" "lyx-$VERSION_BASE.tar.xz" || exit 1; fi $DEBUG ln lyx-$VERSION_BASE.tar.{gz,xz} $BASE/ || exit 1; echo -n "Ready to build signatures..."; read $DEBUG gpg -b lyx-$VERSION.tar.gz $DEBUG gpg -b lyx-$VERSION.tar.xz echo "Signatures created:" $DEBUG ln lyx-$VERSION.tar.*.sig $BASE; if [ -n "$COMPILE" ]; then echo -n "Ready to test compilation..."; read $DEBUG rm -Rf $BASE/lyx-test/ $DEBUG mkdir $BASE/lyx-test/ $DEBUG cd $BASE/lyx-test/ $DEBUG tar -zxvf $BASE/lyx-build/lyx-$VERSION.tar.gz if ! $DEBUG cd lyx-$VERSION_BASE; then echo "Unable to enter build directory!"; exit 1; fi $DEBUG ./configure --enable-build-type=rel --enable-qt5 if $DEBUG make $MAKEOPTS; then echo "Compilation complete."; echo -n "Ready to run LyX..."; read; $DEBUG src/lyx -userdir /tmp/lyx-test; else echo "Compilation errors!!"; exit 1; fi fi if [ -z "$PATCH" ]; then echo "Skipping patch files."; exit 0; fi LASTNUM=$(echo $VERSION_BASE | sed -e 's/.*\.//'); LAST=$((LASTNUM - 1)); FIRST=$(echo $VERSION_BASE | sed -e 's/[0-9]*$//'); ORIGINAL=${FIRST}0; LAST=$FIRST$LAST; if [ ! -d "$BASE/lyx-patch/" ]; then $DEBUG mkdir "$BASE/lyx-patch/" || exit 1; fi if [ ! -d $BASE/lyx-patch/lyx-$LAST ]; then echo "Can't find directory for last version $LAST."; echo "See if you can fix this in $BASE/lyx-patch/."; echo "Try that, if you like, and then we'll continue."; echo "We'll try to download from the LyX site if that does not work."; read; if [ -z "$DEBUG" ]; then if [ ! -d $BASE/lyx-patch/lyx-$LAST ]; then echo "Will try to download from LyX site...."; pushd $BASE/lyx-patch/; wget ftp://ftp.lyx.org/pub/lyx/stable/${FIRST}x/lyx-$LAST.tar.gz; wget ftp://ftp.lyx.org/pub/lyx/stable/${FIRST}x/lyx-$LAST.tar.gz.sig gpg -q --verify lyx-$LAST.tar.gz.sig if ! [ $? == 0 ]; then echo "Signature wrong!" exit 1; fi rm lyx-$LAST.tar.gz.sig tar -zxvf lyx-$LAST.tar.gz; if [ ! -f lyx-$LAST.tar.gz ]; then echo "Still unable to find directory for last version $LAST."; exit 1; fi $DEBUG popd; fi fi fi echo -n "Ready to make patch against $LAST..."; read $DEBUG cd $BASE/lyx-patch/; if [ -z "$DEBUG" ]; then tar -zxvf $BASE/lyx-build/lyx-$VERSION.tar.gz >/dev/null; diff -urN -x .svn -x version.cpp lyx-$LAST lyx-$VERSION_BASE > patch; echo -n "Please check the patch..."; read; $EDITOR patch; else $DEBUG tar -zxvf $BASE/lyx-build/lyx-$VERSION.tar.gz; $DEBUG diff -urN -x .svn -x version.cpp lyx-$LAST lyx-$VERSION_BASE; fi NUMFIX="th"; if [ "$LASTNUM" = "1" ]; then NUMFIX="st"; elif [ "$LASTNUM" = "2" ]; then NUMFIX="nd"; fi NUM="$LASTNUM$NUMFIX"; if [ -z "$DEBUG" ]; then cat $BASE/lyx-export/development/tools/patch-preamble | \ sed -e "s/VERSION/$VERSION_BASE/; s/ORIGINAL/$ORIGINAL/; s/LAST/$LAST/; s/NUM/$NUM/;" >patch-preamble; echo -n "Please verify the patch preamble..."; read $EDITOR patch-preamble; PATCH="patch-$VERSION"; cat patch-preamble $BASE/lyx-export/ANNOUNCE patch >$PATCH; gzip -c $PATCH > $PATCH.gz if [ -f $PATCH.gz.sig ]; then rm $PATCH.gz.sig; fi gpg -b $PATCH.gz xz -zc $PATCH > $PATCH.xz if [ -f $PATCH.xz.sig ]; then rm $PATCH.xz.sig; fi $DEBUG gpg -b $PATCH.xz echo -n "Patch and signatures created..."; ln $PATCH.gz $PATCH.gz.sig $PATCH.xz $PATCH.xz.sig $BASE; fi