#!/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 package # 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"; # stable DEVDIR="/cvs/lyx/lyx-devel"; # devel BRANCH=$(git status | head -n1 | sed -e 's/On branch //'); if [ $BRANCH == "master" ]; then SRCDIR="$DEVDIR"; fi # 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. PKG_VERSION=${VERSION%dev}; if [ "$VERSION" != "$PKG_VERSION" ]; then CURHASH=$(git rev-parse HEAD); # Eight chars should be enough CURHASH=${CURHASH:0:8}; # New version is e.g. 2.3.4dev-12649348 PKG_VERSION="$VERSION-$CURHASH"; PATCH=""; fi echo "This is version $PKG_VERSION."; 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 if ! $DEBUG make dist; then echo "Couldn't make distribution!"; exit 1; fi echo "Packages created:"; # This will happen with development releases if [ ! -f "lyx-$PKG_VERSION.tar.gz" ]; then $DEBUG mv "lyx-$VERSION.tar.gz" "lyx-$PKG_VERSION.tar.gz" || exit 1; $DEBUG mv "lyx-$VERSION.tar.xz" "lyx-$PKG_VERSION.tar.xz" || exit 1; fi $DEBUG ln lyx-$PKG_VERSION.tar.{gz,xz} $BASE/ || exit 1; echo -n "Ready to build signatures..."; read $DEBUG gpg -b lyx-$PKG_VERSION.tar.gz $DEBUG gpg -b lyx-$PKG_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-$PKG_VERSION; 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 $PKG_VERSION | sed -e 's/.*\.//'); LAST=$((LASTNUM - 1)); FIRST=$(echo $PKG_VERSION | 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-$PKG_VERSION > 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-$PKG_VERSION; 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/$PKG_VERSION/; 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