mirror of
https://github.com/cookiengineer/audacity
synced 2025-04-30 07:39:42 +02:00
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.
313 lines
9.6 KiB
Bash
Executable File
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"
|