#!/usr/bin/perl

# apt-get install libwww-perl
#
# <linio@wonder.pl>
# 2006.02.22-2006.03.11
#
# zmiany:
# kodeki są instalowane jako codecs-windows-all
# skórka jest instalowana jako mplayer-skin-nazwa

use strict;
use warnings;
use LWP::Simple;
$|++;

my $kodeki_www = "http://www2.mplayerhq.hu/MPlayer/releases/codecs/";
my $skorka_www = 'http://www2.mplayerhq.hu/MPlayer/Skin/';
my $skorka     = 'Abyss-1.1.tar.bz2';

my $pakiety = wykonaj('COLUMNS=120 dpkg -l');
instaluj_pakiety();
przejdz_do('mplayer');
przygotuj_mplayer();
instaluj_kodeki($kodeki_www);
if ($pakiety=~/^ii\s+abyss\s+/){
	`apt-get remove abyss`;
}
instaluj_skorke( $skorka_www, $skorka );

#wykonaj ('DEB_BUILD_OPTIONS="--enable-gui --enable-menu --language=pl" debian/rules binary');
wykonaj('DEB_BUILD_OPTIONS="--enable-gui --enable-menu " debian/rules binary');

print 'Wykonaj: dpkg -i mplayer/mplayer_1.0cvs_i386.deb', "\n";

#===  FUNCTION  ================================================================
#         NAME:  przygotuj_mplayer
#      PURPOSE:  ????
#  DESCRIPTION:  pobiera/aktualizuje mplayera z cvs
#   PARAMETERS:  ????
#      RETURNS:  ????
#===============================================================================
sub przygotuj_mplayer {
    unless ( -d 'main' ) {
        wykonaj('cvs -d:pserver:anonymous@mplayerhq.hu:/cvsroot/mplayer login');
        wykonaj(
'cvs -z3 -d:pserver:anonymous@mplayerhq.hu:/cvsroot/mplayer co -P main'
        );
    }
    chdir('main');
    wykonaj('cvs -z3 update -dPA');
    wykonaj('cvs -d:pserver:anonymous@mplayerhq.hu:/cvsroot/ffmpeg login');
    wykonaj(
        'cvs -z3 -d:pserver:anonymous@mplayerhq.hu:/cvsroot/ffmpeg co -P ffmpeg'
    );
    wykonaj('cp -a ffmpeg/libavcodec .');
    wykonaj('cp -a ffmpeg/libavutil .');
}

#===  FUNCTION  ================================================================
#         NAME:  instaluje pakiety potrzebne do zbudowania mplayera
#      PURPOSE:  ????
#  DESCRIPTION:  ????
#   PARAMETERS:  ????
#      RETURNS:  ????
#===============================================================================
sub instaluj_pakiety {
    wykonaj('apt-get update');
    wykonaj(
'apt-get install -y debhelper dh-make libglib1.2-dev libgtk2.0-dev libgtk1.2-dev xlibs-dev libpng3-dev zlib1g-dev libconfhelper-perl liblogfile-rotate-perl alien cvs unzip libsdl1.2-dev libesd0-dev libasound2-dev libglu1-mesa-dev libavformat-dev'
    );
}

#===  FUNCTION  ================================================================
#         NAME:  instaluj_skorke
#      PURPOSE:  ????
#  DESCRIPTION:  ????
#   PARAMETERS:  link do skórki
#      RETURNS:  ????
#===============================================================================
sub instaluj_skorke {
    my $skorka_www    = shift;
    my $skorka        = shift;
    my $nazwa_pakietu = lc($skorka);
	$nazwa_pakietu=~s/-[\d+.]+\.tar\.bz2//;
	$nazwa_pakietu="mplayer-skin-$nazwa_pakietu";
	print "Sprawdzam, czy jest już zainstalowana skórka $nazwa_pakietu\n";
    unless ( $pakiety =~ /$nazwa_pakietu/ ) {
        przejdz_do('../skorki');
        zapisz_plik_z_www( $skorka_www . $skorka, $skorka );
        wykonaj("tar -xjf $skorka");
        wykonaj(
            'rm Abyss*bz2
	mv Abyss mplayer-skin-abyss-1.1
	cd mplayer-skin-abyss-1.1 && mkdir -p usr/share/mplayer/Skin/Abyss && mv * usr/share/mplayer/Skin/Abyss
	echo |dh_make -s
	echo usr/share/mplayer/Skin/Abyss >debian/dirs
	echo -e "\nall:\n\t\n\ninstall:\n\tcp -a usr \${DESTDIR}" >Makefile
	sed \'s/ configure)/configure)\n\t[ ! -L \/usr\/share\/mplayer\/Skin\/default ] \&\& ln -s \/usr\/share\/mplayer\/Skin\/Abyss \/usr\/share\/mplayer\/Skin\/default \n/\' debian/postinst.ex >debian/postinst
	debian/rules binary
	dpkg -i ../mplayer-skin-abyss*deb
	cd ..'
        );
        chdir('../main');
    }
}

#===  FUNCTION  ================================================================
#         NAME:  instaluj_kodeki
#      PURPOSE:  ????
#  DESCRIPTION:  ????
#   PARAMETERS:  adres strony z kodekami, wykorzystuje też zmienną $pakiety
#      RETURNS:  ????
#===============================================================================
sub instaluj_kodeki {
    my $kodeki_www = shift;
    my $kodeki     = get($kodeki_www);
    my $data;
    my $zip;
    if ( $kodeki =~ /(windows-all-(\d+)\.zip)/ ) {
        $zip  = $1;
        $data = $2;
    }
    else {
        die "Błąd w czasie pobierania listy kodeków z $kodeki_www";
    }

    print "Sprawdzam, czy instalować kodeki\n";
	unless ( $pakiety =~ /codecs-windows-all.*$data/ ) {

        przejdz_do('../kodeki');
        zapisz_plik_z_www( $kodeki_www . $zip, $zip );
        wykonaj("unzip $zip -d codecs-windows-all-$data");
        wykonaj("mkdir -p codecs-windows-all-$data/usr/lib/win32");
        wykonaj(
"mv codecs-windows-all-$data/windows-all-$data/* codecs-windows-all-$data/usr/lib/win32"
        );
        wykonaj(
            'cd codecs-windows-all-' . $data . ' ; echo |dh_make -s
                echo usr/lib/codecs/win32/ >debian/dirs
                echo -e "\nall:\n\t\n\ninstall:\n\tcp -a usr \${DESTDIR}" >Makefile
				debian/rules binary
                dpkg -i ../codecs-windows-all*deb
                cd ..'
        );

        chdir("../main");

    }

}

#===  FUNCTION  ================================================================
#         NAME:  wykonaj
#      PURPOSE:  ????
#  DESCRIPTION:  ????
#   PARAMETERS:  polecenie
#      RETURNS:  ????
#===============================================================================
sub wykonaj {
    my $cmd = shift;
    print "wykonuję: $cmd\n";
    my $out = `$cmd`;
    if ($?) {
        die "Błąd w czasie wykonywania polecenia $cmd: $!\n";
    }
    return $out;
}

#===  FUNCTION  ================================================================
#         NAME:  przejdz_do
#      PURPOSE:
#  DESCRIPTION:  ????
#   PARAMETERS:  katalog
#      RETURNS:  ????
#===============================================================================
sub przejdz_do {
    my $katalog = shift;
    if ( !-d $katalog ) {
        die "Nie mogę założyć katalogu $katalog" unless mkdir $katalog, 0770;
    }
    chdir($katalog) or die "Nie mogę przejść do katalogu katalog";
}

#===  FUNCTION  ================================================================
#         NAME:  zapisz_plik_z_www
#      PURPOSE:  zapisuje plik z podanego adresu pod podaną nazwą
#  DESCRIPTION:  ????
#   PARAMETERS:  adres, nazwa_pliku
#      RETURNS:  ????
#===============================================================================
sub zapisz_plik_z_www {
    my $adres       = shift;
    my $nazwa_pliku = shift;
	print "Pobieranie pliku $adres\n";
    die "Błąd w czasie pobierania pliku $adres"
      unless ( getstore( $adres, $nazwa_pliku ) eq 200 );
}
