Blame windows-builds.sh

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