1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-04-30 07:39:42 +02:00
audacity/scripts/maketarball.sh
lllucius@gmail.com 16a5876b23 Updates to maketarball.sh
1)  Removed tabs and cleaned up consistency
2)  Added removeal of "win" and "mac" directories which don't do      
    Linux users any good
3)  Added removal of "lv2" directory as a system install of lv2
    and requisites will be used instead
4)  Added removal of "libvamp" directory as a system install of libvamp
    will be used instead
5)  Added removeal of "libsoxr" directory as a system install of libsoxr
    will be used instead
6)  Removed deletion of portaudio-v19/test since it seems to be required
    to build now
7)  Removed Windows project file updating
8)  Reordered the src directory copy so that it is done before any 
    changes are made.  This way if the tarball creation fails, you still
    have a pristine src directory.
2015-01-03 06:56:38 +00:00

313 lines
9.6 KiB
Bash
Executable File

#!/bin/bash
# Copyright 2003, 2004, 2005 Dominic Mazzoni and Matt Brubeck
# Distributed under the GNU General Public License 2.0.
# See the file LICENSE.txt for details.
# Re-written in Bash by Richard Ash 2006 - 2013
function myrmrvf {
# a replacement for rm -rvf that has it's output controlled
# by the value of the first argument
# setting it to 1 makes it verbose, to anything else makes it quiet
if [ $1 -eq 1 ] ; then #verbose mode
shift
echo "rm -rf $*"
rm -rf $*
else
# quietly
shift
rm -rf $*
fi
}
function myrmvf {
# a replacement for rm -vf that has it's output controlled
# by the value of the first argument
# setting it to 1 makes it verbose, to anything else makes it quiet
if [ $1 -eq 1 ] ; then #verbose mode
shift
echo "rm -f $*"
rm -f $*
else
# quietly
shift
rm -f $*
fi
}
function myfindrm {
# search the file tree removing files that match the specified pattern in
# the second argument, with output controlled by the value of the first
# argument.
# setting it to 1 makes it verbose, to anything else makes it quiet
if [ $1 -eq 1 ] ; then
find . -name "$2" -print -delete
else
find . -name "$2" -delete
fi
}
function cleanfulltree {
# does the clean-up op on the full source tree prior to building the full
# tarball
printf "making distclean ... "
if [ $1 -eq 1 ] ; then
make distclean
else
make distclean 2>/dev/null > /dev/null
fi
status=${?}
if [ ${status} -eq 0 ] ; then
printf "Done\n"
else
echo "Failed to make distclean: exit status was ${status}"
exit ${status}
fi
printf "Checking SVN status ... "
revision="$(svnversion)"
regex="[[:digit:]]*"
if [[ ${revision} =~ ${regex} ]] ; then
echo "Unmodified working copy at revision ${revision}"
else
echo "Modified working copy! Release tarballs must be built from an unmodified working copy! Exiting"
exit
fi
printf "removing SVN directories ... "
find . -depth -name '.svn' -execdir rm -rf '{}' ';'
# -depth is needed to avoid find trying to examine directories it has just
# deleted.
# The sort of quotes used is critical!
printf "Done\n"
printf "removing vim / emacs temp files ... "
myfindrm $1 "*~"
printf "Done\n"
printf "removing Python droppings ... "
myfindrm $1 "*.pyc"
printf "Done\n"
printf "removing executable and other intermediate files ... "
myrmvf $1 src/audacity src/.depend src/.gchdepend
myfindrm $1 config.status
myfindrm $1 config.log
myfindrm $1 config.cache
find . -depth -name 'autom4te.cache' -execdir rm -rf '{}' ';'
myfindrm $1 aclocal.m4
printf "Done\n"
printf "removing orphaned symlinks in lib-src/ ... "
myrmvf $1 lib-src/*.a
printf "Done\n"
printf "removing doxygen output files ... "
myrmrvf $1 dox
printf "Done\n"
printf "removing unused libraries from SVN tree ..."
myrmrvf $1 lib-src/id3lib
myrmrvf $1 lib-src/portburn
myrmrvf $1 lib-src/portmidi
myrmrvf $1 lib-src/taglib
myrmrvf $1 lib-src/libresample
myrmrvf $1 lib-src/libscorealign
printf "Done\n"
}
# remove all the things we have in SVN for convenience rather than being
# necessary
function slimtree {
printf "removing todo lists ... "
myrmvf $1 todo.txt
printf "Done\n"
# we cannot remove tests/ because subsequent builds fail ...
printf "removing scripts and tests ... "
myrmrvf $1 scripts tests/ProjectCheckTests/
printf "Done\n"
printf "removing libraries that should be installed locally ... "
myrmrvf $1 lib-src/expat lib-src/libflac lib-src/libid3tag
myrmrvf $1 lib-src/libmad lib-src/libogg
myrmrvf $1 lib-src/libsamplerate lib-src/libsndfile
myrmrvf $1 lib-src/libvorbis lib-src/soundtouch
myrmrvf $1 lib-src/libsoxr lib-src/twolame
myrmrvf $1 lib-src/libvamp lib-src/lv2
# these bindings aren't built by default, we don't need them
myrmrvf $1 lib-src/portaudio-v19/bindings/
printf "Done\n"
printf "removing qa ... "
myrmrvf $1 qa
printf "Done\n"
printf "removing unused portaudio-v19 directories ... "
myrmrvf $1 lib-src/portaudio-v19/docs
myrmrvf $1 lib-src/portaudio-v19/pa_asio
myrmrvf $1 lib-src/portaudio-v19/pa_sgi
myrmrvf $1 lib-src/portaudio-v19/pa_mac_sm
myrmrvf $1 lib-src/portaudio-v19/testcvs
printf "Done\n"
printf "removing Nyquist plug-ins that are just for show ... "
myrmvf $1 plug-ins/analyze.ny plug-ins/fadein.ny plug-ins/fadeout.ny
myrmvf $1 plug-ins/undcbias.ny
printf "Done\n"
printf "Removing developer scripts not needed to build audacity ... "
myrmrvf $1 scripts/mw2html_audacity
printf "Done\n"
printf "Removing Mac and Windows build files ... "
myrmrvf $1 mac
myrmrvf $1 win
printf "Done\n"
}
echo "Maketarball 2.1.0 -- make an Audacity distribution tarball"
# check number of arguments, if not one then print a usage message
if [ $# -ne 1 ] ; then
echo "Script to make directory trees for audacity source tarballs"
echo "Usage: $0 <mode>"
echo "Where mode is either \"quiet\" or \"verbose\""
exit 1
fi
if [ "$1" = "quiet" ] ; then
mode=0
elif [ "$1" = "verbose" ] ; then
mode=1
else
echo "The argument to $0 must be either \"quiet\" or \"verbose\""
exit 1
fi
if [ ! -f "src/Audacity.h" ] ; then
echo "$0 must be run from top-level audacity directory"
exit 1
fi
# capture some directory information, we'll want it later
sourcedir="$(pwd)" # where the sources are
cd ..
topdir="$(pwd)" # one level up where the tarballs come out
tmpsrc="${topdir}/$(mktemp -d audacity-src-XXXXXX)" # where initial modifications are done
printf "making copy of source directory ... "
cp -pr "${sourcedir}/." "${tmpsrc}"
cd "${tmpsrc}"
printf "Done\n"
# The script relies on make working, so Makefiles need to be present. This
# means that configure must have been run on the sources. In general it doesn't
# matter what options, but the generation of a Makefile in lib-src/ in
# particular is important. Check that lib-src/Makefile is present and newer than
# lib-src/Makefile.in before continuing
# Mac OS X also has problems if libsndfile isn't configured with automake
# dependency turned off, so we should check that libsndfile is clean, and ask
# for reconfiguration if not.
reconf=0
if [ -f "lib-src/Makefile" ] ; then
# we have a Makefile - is it new enough?
t2=$(date +%s -r "lib-src/Makefile")
t1=$(date +%s -r "lib-src/Makefile.in")
if [ $t1 -gt $t2 ] ; then
# not new enough, reconfigure
reconf=1
fi
else
# if no Makefile, definitly need to configure
reconf=1
fi
# these are the arguments we will pass to configure when it is run
configargs="--enable-maintainer-mode"
if [ $reconf -eq 1 ] ; then
echo "Your Makefiles are out of date or missing. (Re)running configure to"
echo "create up-to-date Makefiles before building tarballs..."
echo " ./configure ${configargs}"
# if we are in silent mode, then redirect the output of configure
if [ $mode -eq 1 ] ; then
$SHELL -c "./configure ${configargs}"
else
$SHELL -c "./configure ${configargs}" > /dev/null 2>&1
fi
if [ ${?} -ne 0 ] ; then
echo "Error - configure exited with non-zero status!"
exit 1
fi
fi
# The version number is stored in a C++ header as a set of #defines. Trying to
# parse this with another language (as was done first with Perl and then with
# awk) is always going to be fragile, so we use a C++ pre-processor (which
# strangely enough we are pretty much garunteed to have) to do it. Essentially
# we have a trivial bit of C++ code stored in-line in this script which is fed
# through the pre-processor to get the version string components where we can
# find them.
if [ ! -x "config.status" ] ; then
echo "config.status is not present or executable - cannot proceed"
exit 1
fi
echo -n "Getting program version ... "
# first off, find out what C++ pre-processor configure has found for us to use
# (because we want the same one that will be used to build Audacity). This is a
# neat trick using the config.status script left behind after configure has
# been run
cppprog="$(echo '@CXX@' | ./config.status --file=-)"
# run the preprocessor, convert output to shell variables, and evaluate to
# define them
eval $(cpp -E <<CPPEOF | sed -e 's/wxT("//g' \
-e 's/")//g' \
-e 's/ //g' \
-e "s/__TDATE__/$(date +%Y%m%d)/" \
-e 's/=/="/' \
-e 's/$/"/' \
-e '/^v_/p' \
-e 'd'
#include "src/Audacity.h"
v_major=AUDACITY_VERSION
v_minor=AUDACITY_RELEASE
v_micro=AUDACITY_REVISION
v_suffix=AUDACITY_SUFFIX
CPPEOF
)
version="${v_major}.${v_minor}.${v_micro}${v_suffix}"
printf "${version}\n"
# now clean out the directory of all the things we don't need in the
# tarball, prior to building the source tarball
cleanfulltree $mode
# now we have the full source tree, lets slim it down to the bits that
# you actually need to build audacity on a shared library system with the
# relevant libraries installed on the system (e.g. Linux distros)
slimtree $mode
# Rename the source tree to the versioned name
cd "${topdir}"
printf "Renaming source tree ... "
tarname="audacity-minsrc-${version}" # the directory we will find inside tarballs
mv "${tmpsrc}" "${tarname}"
printf "Done\n"
# Tar up that lot as the source tarball
printf "Creating source tarball ... "
tar cf "${tarname}.tar" "${tarname}"
printf "Done\n"
printf "Compressing source tarball ... "
xz "${tarname}.tar"
cd "${tarname}"
printf "Done\n"