blob: bf618bde80314efca1b79aafc93a13e5490ad250 [file] [log] [blame]
#!/bin/sh
# A dirty script to create some windows binaries (shared, static, debug, ...) using the MSYS environment.
# give build type as command line argument
# x86 or x86_64-cross
build_type=$1
test -z "$build_type" && build_type=x86
echo "build type: $build_type"
case $build_type in
x86)
decoder=x86
strip=strip
hostopt=
;;
x86_64-cross)
decoder=x86-64
strip=x86_64-w64-mingw32-strip
hostopt="--host=x86_64-w64-mingw32 --build=i686-pc-mingw32"
;;
*)
echo "Unknown build type!"
exit 1
;;
esac
temp="$PWD/tmp"
final="$PWD/releases"
txt="README COPYING NEWS"
# let's try with modules
opts=""
#opts="--with-audio=win32 --disable-modules"
# Get the version for the build from configure.ac .
version=`sed -n 's/^AC_INIT([^,]*, \[\([^,]*\)\], .*$/\1/p' < configure.ac`
echo "Building binaries for version $version"
prepare_dir()
{
test -e "$final" || mkdir "$final"
}
prepare_unix2dos()
{
echo "preparing unix2dos tool"
# I'll include documentation in DOS-style, with the help of this little unix2dos variant.
test -x "unix2dos" || echo "
#include <unistd.h>
#include <stdio.h>
int main()
{
char buf[1000];
ssize_t got;
while((got=read(0, buf, 1000))>0)
{
ssize_t end=0;
ssize_t pos=0;
for(end=0;end<got;++end)
{
if(buf[end] == '\n')
{
write(1, buf+pos, end-pos);
write(1, \"\r\n\", 2);
pos=end+1;
}
}
write(1, buf+pos, end-pos);
}
}" > unix2dos.c && gcc -O -o unix2dos unix2dos.c
}
mpg123_build()
{
cpu=$1
stat=$2
debug=$3
myopts=$opts
if test "$stat" = "y"; then
echo "static build (stat=$stat)" &&
name=mpg123-$version-static-$cpu
myopts="$myopts --disable-shared"
else
echo "dynamic build (stat=$stat)" &&
name=mpg123-$version-$cpu
fi &&
if test "$debug" = "y"; then
echo "Debugging build!"
name=$name-debug
myopts="$myopts --enable-debug"
fi &&
tmp=$temp-$name &&
echo "REMOVING $tmp!" &&
sleep 5 &&
if test -e Makefile; then make clean; fi &&
rm -rvf $tmp &&
./configure $hostopt --prefix=$tmp $myopts --with-cpu=$cpu && make && make install &&
rm -rf "$final/$name" &&
mkdir "$final/$name" &&
cp -v "$tmp/bin/mpg123.exe" "$final/$name" &&
if test "$debug" = y; then
echo "Not stripping the debug build..."
else
$strip --strip-unneeded "$final/$name/"*.exe
fi &&
if test "$stat" = "y"; then
echo "No DLL there..."
else
cp -v "$tmp/bin/libmpg123"*.dll "$tmp/include/mpg123.h" "$final/$name" &&
cp -v "src/libmpg123/.libs/libmpg123"*.dll.def "$final/$name" &&
if test "$debug" = y; then
echo "Not stripping the debug build..."
else
$strip --strip-unneeded "$final/$name/"*.dll || exit 1
fi
for i in $tmp/lib/mpg123/*.la
do
if test -e "$i"; then
plugdir="$final/$name/plugins"
mkdir -p "$plugdir" &&
sed -e 's/libdir=.*$/libdir='"'.'/" < $i > "$plugdir/`basename $i`" &&
sofile=`echo $i | sed -e 's/\.la$/.dll/'` &&
if test "$debug" = y; then
echo "not stripping debug module..."
else
$strip --strip-unneeded "$sofile" || exit 1
fi &&
cp -v "$sofile" "$plugdir"
fi
done
fi &&
for i in $txt
do
echo "text file $i -> $final/$name/$i.txt"
./unix2dos < "$i" > "$final/$name/$i.txt"
done
}
prepare_dir &&
prepare_unix2dos &&
mpg123_build $decoder y n &&
mpg123_build ${decoder}_dither y n &&
mpg123_build $decoder n n &&
mpg123_build ${decoder}_dither n n &&
mpg123_build $decoder n y &&
echo "Hurray! Note: Please do not forget to copy the libltdl DLL from MSYS to the dynamic build directories... " || echo "Bleh..."