394 lines
10 KiB
Bash
Executable file
394 lines
10 KiB
Bash
Executable file
#! /bin/sh
|
|
|
|
# Copyright (C) 2010-2011 Peter de Ridder <peter@xfce.org>
|
|
# 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
|
|
where_am_i=$PWD
|
|
|
|
if [ "$GSTREAMER_API_VERSION" == "" ]; then
|
|
WEBKIT_VER=$(grep -E '(DEPS_GTK_webkitgtk\-)(.*)(_VERSION)' CMakeCache.txt|cut -d \= -f 2 |cut -c 1)
|
|
if [ "$WEBKIT_VER" == "2" ]; then
|
|
GSTREAMER_API_VERSION=1.0
|
|
else
|
|
GSTREAMER_API_VERSION=0.10
|
|
fi
|
|
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`
|
|
|
|
GTK3_BUILD=1
|
|
# Default to gtk3 but check just in case
|
|
GTK3=$(grep GTK3 CMakeCache.txt | awk -F \= '{print $2}')
|
|
if [ "$GTK3" != "ON" ] && [ "$GTK3" != "1" ];then
|
|
GTK3_BUILD=0
|
|
fi
|
|
|
|
version=$(grep PACKAGE_VERSION ./midori/CMakeFiles/midori.dir/DependInfo.cmake|sed -e 's/^.*PACKAGE_VERSION=\\"\([^"]*\)\\".*$/\1/')
|
|
|
|
#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
|
|
ARCHIVE=$ARCHIVE_FILENAME.7z
|
|
else
|
|
ARCHIVE=$ARCHIVE_FILENAME.zip
|
|
fi
|
|
|
|
if [ "NSIS" != "" ];then
|
|
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`
|
|
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
|
|
}
|
|
|
|
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
|
|
}
|
|
|
|
grab_icons()
|
|
{
|
|
local theme="$1"
|
|
local list="$2"
|
|
|
|
sizes=$(grep CreateDirectory $list |awk -F '"' '{print $2}' |awk -F '\' '{print $6}')
|
|
categories=$(grep InstallIconTheme $list | awk -F '"' '{print $2}'|sort|uniq)
|
|
|
|
|
|
for category in $categories
|
|
do
|
|
category_icons=$(grep InstallIconTheme $list |grep $category|awk -F '"' '{print $4}')
|
|
for size in $sizes
|
|
do
|
|
mkdir -p $workdir/share/icons/$theme/$category/$size
|
|
for icon in $category_icons
|
|
do
|
|
cp -L /usr/share/icons/$theme/$category/$size/$icon.* $workdir/share/icons/$theme/$category/$size/
|
|
done
|
|
done
|
|
done
|
|
|
|
cp -L /usr/share/icons/$theme/index.theme $workdir/share/icons/$theme
|
|
|
|
}
|
|
|
|
echo "Creating $ARCHIVE"
|
|
|
|
# create destination folder
|
|
workdir=$temp_dir/midori-$version
|
|
mkdir $workdir
|
|
|
|
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
|
|
dll_recursive ../lib/gio/modules/*.dll >> $temp_dir/midori.exe.lst
|
|
dll_recursive iconv.dll >> $temp_dir/midori.exe.lst
|
|
# we ship gdb now for -g and diagnostic button
|
|
dll_recursive gdb.exe >> $temp_dir/midori.exe.lst
|
|
|
|
for i in $(cat $temp_dir/midori.exe.lst | grep -v midori | sort | uniq)
|
|
do
|
|
if [ -f $root_dir/bin/$i ]; then
|
|
rpm -qf $root_dir/bin/$i >> $temp_dir/packages_used.lst
|
|
fi
|
|
done
|
|
|
|
dll_recursive ../lib/gstreamer-$GSTREAMER_API_VERSION/*.dll >> $temp_dir/midori.exe.lst
|
|
rpm -qf $root_dir/lib/gstreamer-$GSTREAMER_API_VERSION/*.dll >> $temp_dir/packages_used.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
|
|
|
|
echo "<*> Copying dlls..."
|
|
|
|
# copy auto generate dll list
|
|
pushd $root_dir/bin > /dev/null
|
|
mkdir $workdir/bin
|
|
cp -L $files $workdir/bin 2>/dev/null
|
|
popd > /dev/null
|
|
|
|
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
|
|
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
|
|
|
|
|
|
echo "<*> Copying modules and libraries..."
|
|
|
|
# copy lib
|
|
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
|
|
|
|
grab_files lib gstreamer-$GSTREAMER_API_VERSION
|
|
|
|
echo "<*> Copying resources and translations..."
|
|
|
|
# copy share
|
|
grab_files share midori
|
|
grab_files share mime
|
|
grab_files share midori.mo
|
|
|
|
grab_icons Faenza $where_am_i/../win32/makedist/midori.nsi
|
|
|
|
# We need to ship our CA bundle for now
|
|
cp -Lr /etc/pki/tls/certs/ca-bundle.crt $workdir/share/midori/res/
|
|
|
|
GREYBIRD_VER="1.5.3"
|
|
|
|
if [ "$GTK3_BUILD" == "1" ]; then
|
|
grab_files share webkitgtk-3.0
|
|
grab_files share schemas
|
|
|
|
wget --no-verbose "https://github.com/shimmerproject/Greybird/archive/v$GREYBIRD_VER.tar.gz" -P $temp_dir
|
|
tar xf "$temp_dir/v$GREYBIRD_VER.tar.gz" -C $temp_dir
|
|
mkdir -p $workdir/share/themes/Greybird
|
|
cp -Lr $temp_dir/Greybird-$GREYBIRD_VER/gtk-3.0 $workdir/share/themes/Greybird
|
|
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
|
|
|
|
rpm -qf /etc/pki/tls/certs/ca-bundle.crt >> $temp_dir/packages_used.lst
|
|
rpm -qf /usr/share/icons/Faenza/ >> $temp_dir/packages_used.lst
|
|
echo "https://github.com/shimmerproject/Greybird/archive/v$GREYBIRD_VER.tar.gz" >> $temp_dir/packages_used.lst
|
|
|
|
pushd $temp_dir > /dev/null
|
|
wget --no-verbose "https://github.com/jrfonseca/drmingw/releases/download/0.7.3/drmingw-0.7.3-win32.zip" -P $temp_dir
|
|
unzip "$temp_dir/drmingw-0.7.3-win32.zip"
|
|
cp -Lr $temp_dir/drmingw-0.7.3-win32/bin/{mgwhelp.dll,exchndl.dll} $workdir/bin
|
|
popd > /dev/null
|
|
|
|
# copy locales for gtk
|
|
# so we have translated stock items, file dialogs
|
|
|
|
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}')
|
|
cp /usr/share/locale/$LOCALE/LC_MESSAGES/gtk$MO_VER.mo $workdir/share/locale/$LOCALE/LC_MESSAGES/
|
|
done
|
|
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
|
|
gtk-menu-images = true
|
|
_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
|
|
|
|
mkdir -p $workdir/etc/xdg/midori
|
|
|
|
cat >> $workdir/etc/xdg/midori/config << _EOF
|
|
[settings]
|
|
default-font-family=Times New Roman
|
|
monospace-font-family=Courier New
|
|
default-font-size=14
|
|
default-monospace-font-size=14
|
|
_EOF
|
|
|
|
# Don't hardcode mingw path, otherwise fontconfig uses fallback settings
|
|
# which tend to look very bad on Windows
|
|
sed -r 's@>.+(conf\.d)<@>\1@g' -i $workdir/etc/fonts/fonts.conf
|
|
|
|
popd > /dev/null
|
|
|
|
echo "<*> Copying docs..."
|
|
|
|
# copy doc files to root
|
|
cp -L $workdir/share/doc/midori/{COPYING,AUTHORS} $workdir
|
|
|
|
cat $temp_dir/packages_used.lst | sort | uniq > $workdir/share/doc/midori/README.packages
|
|
rm $temp_dir/packages_used.lst
|
|
|
|
#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
|
|
7za a -m0=lzma $ARCHIVE midori-$version_tag > /dev/null
|
|
else
|
|
zip -rq $ARCHIVE midori-$version_tag
|
|
fi
|
|
|
|
if [ "$NSIS" != "" ];then
|
|
nsis_file=Midori-${version}_setup.exe
|
|
echo "Creating $nsis_file"
|
|
makensis -NOCD -V4 ./midori.nsi
|
|
mv $nsis_file $where_am_i
|
|
fi
|
|
popd > /dev/null
|
|
|
|
echo "<*> Cleaning up..."
|
|
|
|
# remove working directory
|
|
rm -r $temp_dir
|
|
|
|
|
|
echo "<*> Computing checksums..."
|
|
|
|
sum_file=midori-$version.sha1
|
|
sha1sum $ARCHIVE >> $sum_file
|
|
|
|
if [ "$NSIS" != "" ]; then
|
|
sha1sum $nsis_file >> $sum_file
|
|
fi
|
|
|
|
cat $sum_file
|