midori/win32/makedist/makedist.midori

314 lines
7.4 KiB
Text
Raw Normal View History

#! /bin/sh
# Copyright (C) 2010-2011 Peter de Ridder <peter@xfce.org>
2013-10-24 03:45:02 +00:00
# Copyright (C) 2012 Paweł Forysiuk <tuxator@o2.pl>
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# See the file COPYING for the full license text.
# script: makedist.midori [version tag]
#
# This script creates an archive containing all required files for
# midori on windows. The midori version is inserted in the name of
# the archive and appended to the name of the root directory in the
# archive.
# The name of the archive is contructed as follows:
# midori<version tag>-<timestamp>.extension
# The archive contains a root directory named:
# midori<version tag>
# a bit of configuration
root_dir=$MINGW_PREFIX
2013-10-24 03:45:02 +00:00
if [ "$GSTREAMER_API_VERSION" == "" ]; then
GSTREAMER_API_VERSION=0.10
fi
if [ "$MINGW_PREFIX" == "" ]; then
echo "Error: MINGW_PREFIX variable is empty!"
exit
fi
# create temporary working directory
temp_dir=`mktemp -d`
# check if we can use 7zip
have_7zip=`which 7za`
2013-10-24 03:45:02 +00:00
grep -q gtk-3.0 _build/config.log && GTK3_BUILD=1
version=`grep PACKAGE_VERSION _build/default/config.h | awk '{ print $3 $4; }' | sed 's@(debug)@-debug@g'|sed 's@"@@g'`
#strip sha from version if release
if [ "$RELEASE" != "" ];then
version=$(echo $version| awk -F \- '{print $1}')
fi
if [ "$1" != "" ]; then
version_tag="$1"
fi
if [ "$version_tag" != "" ]; then
version_tag=$version-$version_tag
else
version_tag=$version
fi
if [ "$RELEASE" == "" ]; then
ARCHIVE_FILENAME=midori-$version_tag-`date +%Y%m%d%H%M`
else
ARCHIVE_FILENAME=midori-$version_tag
fi
# generate archive filename
if [ "$have_7zip" != "" ]; then
2013-10-24 03:45:02 +00:00
ARCHIVE=$ARCHIVE_FILENAME.7z
else
2013-10-24 03:45:02 +00:00
ARCHIVE=$ARCHIVE_FILENAME.zip
fi
if [ "NSIS" != "" ];then
where_am_i=$PWD
cp -a $where_am_i/win32/makedist/midori.nsi $temp_dir
cp -a $where_am_i/win32/makedist/midori.ico $temp_dir
fi
# function: dll-recursive <list of exe and dll files ...>
#
# recursively search all dll dependencies of the input files.
# The resulting list of dll files including the input files is
# printed to stdout.
dll_recursive ()
{
temp_file_new=`mktemp`
temp_file_old=`mktemp`
while [ "$1" ]
do
echo $1 >> $temp_file_new
shift
done
while [ "x`sha1sum - < $temp_file_new`" != "x`sha1sum - < $temp_file_old`" ]
do
files=`cat $temp_file_new $temp_file_old | sort | uniq -u`
2013-10-24 03:45:02 +00:00
cp -L $temp_file_new $temp_file_old
strings $files 2> /dev/null | grep \\.dll | cat - $temp_file_old | sort | uniq > $temp_file_new
done
cat $temp_file_new
rm $temp_file_new $temp_file_old
}
2013-10-24 03:45:02 +00:00
grab_files ()
{
local dir="$1"
pushd $root_dir > /dev/null
shift
while [ "$1" ]; do
find $dir "(" -name "$1" ")" -prune -exec mkdir -p $workdir/{} ";" -exec rmdir --ignore-fail-on-non-empty $workdir/{} ";" -exec cp -Lr {} $workdir/{} ";"
if [ "$?" -ne "0" ]; then
exit
fi
shift
done
popd > /dev/null
}
echo "Creating $ARCHIVE"
# create destination folder
2013-10-24 03:45:02 +00:00
workdir=$temp_dir/midori-$version
mkdir $workdir
2013-10-24 03:45:02 +00:00
echo "<*> Generating dll list..."
# auto generate dll list, only of existing files
pushd $root_dir/bin > /dev/null
dll_recursive midori*.exe gspawn-*-helper*.exe libhunspell*.dll > $temp_dir/midori.exe.lst
2013-10-24 03:45:02 +00:00
dll_recursive ../lib/gio/modules/*.dll >> $temp_dir/midori.exe.lst
dll_recursive iconv.dll >> $temp_dir/midori.exe.lst
dll_recursive ../lib/gstreamer-$GSTREAMER_API_VERSION/*.dll >> $temp_dir/midori.exe.lst
# we ship gdb now for -g and diagnostic button
dll_recursive gdb.exe >> $temp_dir/midori.exe.lst
if [ "$DEBUG_BUILD" != "" ]; then
dll_recursive GtkLauncher.exe >> $temp_dir/midori.exe.lst
fi
files=`ls | cat - $temp_dir/midori.exe.lst | sort | uniq -d`
rm $temp_dir/midori.exe.lst
popd > /dev/null
2013-10-24 03:45:02 +00:00
echo "<*> Copying dlls..."
# copy auto generate dll list
pushd $root_dir/bin > /dev/null
2013-10-24 03:45:02 +00:00
mkdir $workdir/bin
cp -L $files $workdir/bin 2>/dev/null
popd > /dev/null
2013-10-24 03:45:02 +00:00
mkdir -p $workdir/bin/Plugins
cat > $workdir/bin/portable.bat << _EOF
@ECHO OFF
echo Starting Midori in portable mode!
start midori.exe --portable
pause
_EOF
echo "<*> Copying configuration files..."
# copy etc
2013-10-24 03:45:02 +00:00
grab_files etc midori
grab_files etc gtkrc
# If modules are not compiled we need a list of them
grab_files etc pango
# Freetype is preferred font backend
# copy configuration, otherwise webkit will crash
grab_files etc fonts
2012-07-12 19:34:12 +00:00
2013-10-24 03:45:02 +00:00
echo "<*> Copying modules and libraries..."
# copy lib
2013-10-24 03:45:02 +00:00
if [ "$GTK3_BUILD" == "1" ]; then
grab_files lib gtk-3.0
else
grab_files lib gtk-2.0
fi
grab_files lib midori
grab_files lib gdk-pixbuf-2.0
grab_files lib enchant
grab_files lib gio
# Fedora ships on-demand pango modules, check just in case
grab_files lib pango
2013-10-24 03:45:02 +00:00
grab_files lib gstreamer-$GSTREAMER_API_VERSION
echo "<*> Copying resources and translations..."
# copy share
2013-10-24 03:45:02 +00:00
grab_files share midori
grab_files share icons
grab_files share mime
grab_files share midori.mo
# We need to ship our CA bundle for now
cp /etc/pki/tls/certs/ca-bundle.crt $workdir/share/midori/res/
if [ "$GTK3_BUILD" == "1" ]; then
grab_files share webkitgtk-3.0
grab_files share schemas
MO_VER=30
else
grab_files share MS-Windows
grab_files share webkitgtk-1.0
MO_VER=20
fi
if [ "$DEBUG_BUILD" == "" ];then
pushd $workdir > /dev/null
find -iname *.debug -exec rm {} \;
popd > /dev/null
fi
# copy locales for gtk
# so we have translated stock items, file dialogs
2013-10-24 03:45:02 +00:00
pushd $root_dir > /dev/null
find share "(" -name "midori.mo" ")" > $temp_dir/locale.list
mkdir -p $workdir/share/locale/
for LOCALE in $(cat $temp_dir/locale.list); do
LOCALE=$(echo $LOCALE|awk -F/ '{print $3}')
2013-10-24 03:45:02 +00:00
cp /usr/share/locale/$LOCALE/LC_MESSAGES/gtk$MO_VER.mo $workdir/share/locale/$LOCALE/LC_MESSAGES/
done
2013-10-24 03:45:02 +00:00
rm $temp_dir/locale.list
echo "<*> Setting up default gtk settings..."
# we want to override default gtk settings
if [ "$GTK3_BUILD" == "1" ]; then
gtk_etc_dir="$workdir/etc/gtk-3.0/"
gtk_rc_file="$gtk_etc_dir/settings.ini"
else
gtk_etc_dir="$workdir/etc/gtk-2.0/"
gtk_rc_file="$gtk_etc_dir/gtkrc"
fi
mkdir -p $gtk_etc_dir
# Use small icons by default and Faenza icon theme
if [ "$GTK3_BUILD" == "1" ]; then
cat > $gtk_rc_file << _EOF
[Settings]
gtk-icon-theme-name = Faenza
_EOF
else
cat > $gtk_rc_file << _EOF
gtk-theme-name = "MS-Windows"
gtk-icon-theme-name = "Faenza"
_EOF
fi
cat >> $gtk_rc_file << _EOF
gtk-toolbar-style = GTK_TOOLBAR_ICONS
gtk-toolbar-icon-size = GTK_ICON_SIZE_MENU
_EOF
popd > /dev/null
2013-10-24 03:45:02 +00:00
echo "<*> Copying docs..."
# copy doc files to root
2013-10-24 03:45:02 +00:00
cp -L $workdir/share/doc/midori/{COPYING,AUTHORS} $workdir
2013-10-24 03:45:02 +00:00
#drop a/la files, we don't do static builds anyway
find $workdir -iname *.*a -exec rm {} \;
echo "<*> Compressing archive (slow)..."
ARCHIVE=`pwd`/$ARCHIVE
# store as zip/7z file
pushd $temp_dir > /dev/null
if [ "$have_7zip" != "" ]; then
2013-10-24 03:45:02 +00:00
7za a -m0=lzma $ARCHIVE midori-$version_tag > /dev/null
else
2013-10-24 03:45:02 +00:00
zip -rq $ARCHIVE midori-$version_tag
fi
if [ "$NSIS" != "" ];then
nsis_file=Midori-${version}_setup.exe
echo "Creating $nsis_file"
makensis -NOCD -V2 ./midori.nsi
mv $nsis_file $where_am_i
fi
popd > /dev/null
2013-10-24 03:45:02 +00:00
echo "<*> Cleaning up..."
# remove working directory
rm -r $temp_dir
2013-10-24 03:45:02 +00:00
echo "<*> Computing checksums..."
sum_file=midori-$version.sha1
sha1sum $ARCHIVE >> $sum_file
if [ "$NSIS" != "" ]; then
sha1sum $nsis_file >> $sum_file
fi
cat $sum_file