#! /bin/sh # Copyright (C) 2010-2011 Peter de Ridder # # 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-.extension # The archive contains a root directory named: # midori # a bit of configuration root_dir=$MINGW_PREFIX # create temporary working directory temp_dir=`mktemp -d` # check if we can use 7zip have_7zip=`which 7za` # generate unique filename if [ "$have_7zip" != "" ]; then ARCHIVE=midori$1-`date +%Y%m%d%H%M`.7z else ARCHIVE=midori$1-`date +%Y%m%d%H%M`.zip fi # function: dll-recursive # # 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 $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 } echo -n "Creating $ARCHIVE ." # create destination folder mkdir $temp_dir/midori$1 echo -n . # 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 files=`ls | cat - $temp_dir/midori.exe.lst | sort | uniq -d` rm $temp_dir/midori.exe.lst popd > /dev/null echo -n . # copy auto generate dll list pushd $root_dir/bin > /dev/null mkdir $temp_dir/midori$1/bin cp $files $temp_dir/midori$1/bin popd > /dev/null echo -n . # copy etc pushd $root_dir > /dev/null find etc "(" -name "*midori*" -o -name "gtkrc" ")" -prune -exec mkdir -p $temp_dir/midori$1/{} ";" -exec rmdir --ignore-fail-on-non-empty $temp_dir/midori$1/{} ";" -exec cp -r {} $temp_dir/midori$1/{} ";" popd > /dev/null echo -n . # copy lib pushd $root_dir > /dev/null find lib "(" -path "lib/midori/*" -o -path "lib/gtk-2.0/*" -o -path "lib/enchant/*" -o -path "lib/engines/*" ")" -a -name "*.dll" -prune -exec mkdir -p $temp_dir/midori$1/{} ";" -exec rmdir --ignore-fail-on-non-empty $temp_dir/midori$1/{} ";" -exec cp -r {} $temp_dir/midori$1/{} ";" popd > /dev/null echo -n . # copy share pushd $root_dir > /dev/null find share "(" -name "*midori*" -o -name "icons" -o -name "MS-Windows" -o -name "mime" ")" -prune -exec mkdir -p $temp_dir/midori$1/{} ";" -exec rmdir --ignore-fail-on-non-empty $temp_dir/midori$1/{} ";" -exec cp -r {} $temp_dir/midori$1/{} ";" # copy locales for gtk # so we have translated stock items, file dialogs find share "(" -name "midori.mo" ")" > locale.list mkdir -p $temp_dir/midori$1/share/locale/ for LOCALE in $(cat locale.list); do LOCALE=$(echo $LOCALE|awk -F/ '{print $3}') cp /usr/share/locale/$LOCALE/LC_MESSAGES/gtk20.mo $temp_dir/midori$1/share/locale/$LOCALE/LC_MESSAGES/ done rm locale.list popd > /dev/null echo -n . # copy doc files to root cp $temp_dir/midori$1/share/doc/midori/{COPYING,AUTHORS} $temp_dir/midori$1 echo -n . ARCHIVE=`pwd`/$ARCHIVE # store as zip/7z file pushd $temp_dir > /dev/null if [ "$have_7zip" != "" ]; then 7za a -m0=lzma -mx=9 $ARCHIVE midori$1 else zip -rq $ARCHIVE midori$1 fi popd > /dev/null echo -n . # remove working directory rm -r $temp_dir echo " ready"