mkvtoolnix/tools/macos/build.sh
2017-02-19 16:56:12 +01:00

400 lines
11 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/zsh
set -e
set -x
export SCRIPT_PATH=${0:a:h}
source ${SCRIPT_PATH}/config.sh
function fail {
echo $@
exit 1
}
function build_tarball {
local package=${PWD:t}
if [[ -n $SHARED ]] package="${package}-shared"
$DEBUG ${SCRIPT_PATH}/myinstall.sh build package $package $@
}
function build_package {
local FILE=$1
shift
local PACKAGE=${${FILE%.*}%.tar}
local DIR=${DIR:-$PACKAGE}
case ${FILE##*.} in
xz|lzma) COMPRESSION=J ;;
bz2) COMPRESSION=j ;;
gz) COMPRESSION=z ;;
tar) COMPRESSION= ;;
*) echo Unknown compression for ${FILE} ; exit 1 ;;
esac
cd $CMPL
if [[ -z $NO_EXTRACTION ]]; then
$DEBUG rm -rf ${DIR}
$DEBUG tar x${COMPRESSION}f ${SRCDIR}/${FILE}
fi
$DEBUG cd ${DIR}
if [[ -z $NO_CONFIGURE ]]; then
$DEBUG ${CONFIGURE:-./configure} $@
if [[ -z $NO_MAKE ]]; then
$DEBUG make
build_tarball
fi
fi
}
mkdir -p $CMPL
function build_autoconf {
build_package autoconf-2.69.tar.xz --prefix=${TARGET}
}
function build_automake {
build_package automake-1.14.1.tar.gz --prefix=${TARGET}
}
function build_pkgconfig {
build_package pkg-config-0.28.tar.gz --prefix=${TARGET} \
--with-pc-path=${TARGET}/lib/pkgconfig --with-internal-glib \
--enable-static --enable-shared=no
}
function build_ogg {
build_package libogg-1.3.2.tar.gz --prefix=${TARGET} \
--disable-shared --enable-static
}
function build_vorbis {
build_package libvorbis-1.3.5.tar.gz --prefix=${TARGET} \
--with-ogg-libraries=${TARGET}/lib --with-ogg-includes=${TARGET}/include/ \
--enable-static --disable-shared
}
function build_flac {
build_package flac-1.3.1.tar.xz --prefix=${TARGET} \
--disable-asm-optimizations --disable-xmms-plugin \
--with-ogg-libraries=${TARGET}/lib --with-ogg-includes=${TARGET}/include/ \
--enable-static --disable-shared
}
function build_zlib {
build_package zlib-1.2.8.tar.xz --prefix=${TARGET} --static
}
function build_gettext {
NO_MAKE=1 build_package gettext-0.19.8.1.tar.gz --prefix=${TARGET} \
--without-libexpat-prefix \
--without-libxml2-prefix \
--without-emacs \
--enable-static --disable-shared
make -C gettext-runtime/intl install
make -C gettext-tools install
}
function build_ruby {
build_package ruby-2.1.6.tar.bz2 --prefix=${TARGET} \
--enable-static --disable-shared
}
function build_boost {
local -a args properties
args=(--reconfigure -sICONV_PATH=/usr -j$DRAKETHREADS --prefix=TMPDIR/${TARGET} --libdir=TMPDIR/${TARGET}/lib)
properties=(toolset=clang link=static variant=release)
if [[ -n $CXXFLAGS ]] properties+=(cxxflags="${(q)CXXFLAGS}")
if [[ -n $LDFLAGS ]] properties+=(linkflags="${(q)LDFLAGS}")
NO_MAKE=1 CONFIGURE=./bootstrap.sh build_package boost_1_60_0.tar.bz2 \
--with-toolset=clang
build_tarball command "./b2 ${args} ${properties} install"
}
function build_qtbase {
local -a args
args=(--prefix=${TARGET} -opensource -confirm-license -release
-c++std c++14
-force-pkg-config -nomake examples -nomake tests
-no-glib -no-dbus -no-sql-mysql -no-sql-sqlite -no-sql-odbc -no-sql-psql -no-sql-tds
-no-openssl -no-cups -no-feature-cups -no-feature-printer
-no-feature-printpreviewwidget -no-feature-printdialog -no-feature-printpreviewdialog)
args+=(-no-framework)
if [[ -z $SHARED_QT ]] args+=(-static)
local package=qtbase-opensource-src-${QTVER}
local saved_CXXFLAGS=$CXXFLAGS
export CXXFLAGS="${QT_CXXFLAGS}"
export QMAKE_CXXFLAGS="${CXXFLAGS}"
NO_CONFIGURE=1 build_package ${package}.tar.xz
if [[ $QTVER == 5.7.0 ]] patch -p2 < ${SCRIPT_PATH}/qt-patches/002-xcrun-xcode-8.patch
$DEBUG ./configure ${args}
# find . -name Makefile| xargs perl -pi -e 's{-fvisibility=hidden|-fvisibility-inlines-hidden}{}g'
$DEBUG make
# cd ${CMPL}/${package}
build_tarball command "make INSTALL_ROOT=TMPDIR install"
CXXFLAGS=$saved_CXXFLAGS
}
function build_qttools {
local -a tools to_install
tools=(lrelease lconvert lupdate)
to_install=()
local package=qttools-opensource-src-${QTVER}
local saved_CXXFLAGS=$CXXFLAGS
export CXXFLAGS="${QT_CXXFLAGS}"
export QMAKE_CXXFLAGS="${CXXFLAGS}"
CONFIGURE=qmake NO_MAKE=1 build_package ${package}.tar.xz
for tool ($tools) {
to_install+=($PWD/bin/$tool)
pushd src/linguist/$tool
qmake
make
popd
}
# cd ${CMPL}/${package}
build_tarball command "mkdir -p TMPDIR/${TARGET}/bin && cp -v $to_install TMPDIR/${TARGET}/bin/"
CXXFLAGS=$saved_CXXFLAGS
}
function build_qttranslations {
local saved_CXXFLAGS=$CXXFLAGS
export CXXFLAGS="${QT_CXXFLAGS}"
export QMAKE_CXXFLAGS="${CXXFLAGS}"
CONFIGURE=qmake NO_MAKE=1 build_package qttranslations-opensource-src-${QTVER}.tar.xz
$DEBUG make
build_tarball command "make INSTALL_ROOT=TMPDIR install"
CXXFLAGS=$saved_CXXFLAGS
}
function build_qtmacextras {
local saved_CXXFLAGS=$CXXFLAGS
export CXXFLAGS="${QT_CXXFLAGS}"
export QMAKE_CXXFLAGS="${CXXFLAGS}"
CONFIGURE=qmake NO_MAKE=1 build_package qtmacextras-opensource-src-${QTVER}.tar.xz
$DEBUG make
build_tarball command "make INSTALL_ROOT=TMPDIR install"
CXXFLAGS=$saved_CXXFLAGS
}
function build_configured_mkvtoolnix {
if [[ -z ${MTX_VER} ]] fail Variable MTX_VER not set
dmgbase=${CMPL}/dmg-${MTX_VER}
dmgcnt=$dmgbase/MKVToolNix-${MTX_VER}.app/Contents
dmgmac=$dmgcnt/MacOS
local -a args
args=(
--prefix=$dmgmac --bindir=$dmgmac --datarootdir=$dmgmac
--with-extra-libs=${TARGET}/lib --with-extra-includes=${TARGET}/include
--with-boost-libdir=${TARGET}/lib
--with-docbook-xsl-root=${DOCBOOK_XSL_ROOT_DIR}
--disable-debug
)
if [[ -z $SHARED_QT ]] args+=(--enable-static-qt)
./configure \
LDFLAGS="$LDFLAGS -framework CoreFoundation -headerpad_max_install_names" \
CXXFLAGS="-fvisibility=hidden -fvisibility-inlines-hidden" \
${args}
grep -q 'USE_QT.*yes' build-config
}
function build_mkvtoolnix {
if [[ -z ${MTX_VER} ]] fail Variable MTX_VER not set
dmgbase=${CMPL}/dmg-${MTX_VER}
dmgcnt=$dmgbase/MKVToolNix-${MTX_VER}.app/Contents
dmgmac=$dmgcnt/MacOS
NO_MAKE=1 NO_CONFIGURE=1 build_package mkvtoolnix-${MTX_VER}.tar.xz
build_configured_mkvtoolnix
rake clean
rake -j ${DRAKETHREADS}
}
function build_dmg {
if [[ -z ${MTX_VER} ]] fail Variable MTX_VER not set
dmgbase=${CMPL}/dmg-${MTX_VER}
dmgcnt=$dmgbase/MKVToolNix-${MTX_VER}.app/Contents
dmgmac=$dmgcnt/MacOS
latest_link=${CMPL}/latest
rm -f ${latest_link}
if [[ -z $DMG_NO_CD ]] cd ${CMPL}/mkvtoolnix-${MTX_VER}
rm -rf $dmgbase
rake install prefix=${dmgcnt}
test -f ${dmgmac}/mkvtoolnix-gui
strip ${dmgcnt}/MacOS/mkv{merge,info,info-gui,extract,propedit,toolnix-gui}
cp README.md $dmgbase/README.txt
cp COPYING $dmgbase/COPYING.txt
cp NEWS.md $dmgbase/NEWS.txt
cat > $dmgbase/README.MacOS.txt <<EOF
MKVToolNix Mac OS specific notes
========================================
Configuration files are stored in ~/.config/bunkus.org and temporary
files are stored in the folder automatically set via TMPDIR.
This build works only with Mac OS X 10.9 and higher.
If you need the command line tools then copy mkvextract, mkvinfo,
mkvmerge and mkvproedit from ./MKVToolNix-${MTX_VER}/Contents/MacOS/
to /usr/local/bin
EOF
mkdir -p $dmgcnt/Resources
cp ${SRCDIR}/mmg.icns $dmgcnt/Resources/MKVToolNix.icns
for file in ${TARGET}/translations/qtbase_*.qm; do
lang=${${file%.qm}##*_}
lcdir=${dmgmac}/locale/${lang}/LC_MESSAGES
if [[ -d ${lcdir} ]] cp -v ${file} ${lcdir}/
done
ln -s /Applications ${dmgbase}/
cat <<EOF > $dmgcnt/PkgInfo
APPL????
EOF
cat <<EOF > $dmgcnt/Info.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>LSEnvironment</key>
<dict>
<key>LANG</key>
<string>en_US.UTF-8</string>
</dict>
<key>CFBundleDevelopmentRegion</key> <string>English</string>
<key>CFBundleExecutable</key> <string>mkvtoolnix-gui</string>
<key>Properties</key>
<dict>
<key>file.encoding</key> <string>UTF-8</string>
</dict>
<key>CFBundleInfoDictionaryVersion</key> <string>${MTX_VER}</string>
<key>CFBundlePackageType</key> <string>APPL</string>
<key>CSResourcesFileMapped</key> <true/>
<key>CFBundleVersion</key> <string>MKVToolNix-${MTX_VER}</string>
<key>CFBundleShortVersionString</key> <string>${MTX_VER}</string>
<key>NSPrincipalClass</key> <string>NSApplication</string>
<key>LSMinimumSystemVersion</key> <string>${MACOSX_DEPLOYMENT_TARGET}</string>
<key>CFBundleName</key> <string>MKVToolNix</string>
<key>CFBundleIconFile</key> <string>MKVToolNix.icns</string>
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<!-- Here goes the file formats your app can read -->
</array>
<key>CFBundleTypeIconFile</key> <string>MKVToolNix.icns</string>
<key>CFBundleTypeName</key> <string>MKVToolNix-${MTX_VER}</string>
<key>CFBundleTypeRole</key> <string>Editor</string>
<key>LSIsAppleDefaultForType</key> <true/>
<key>LSTypeIsPackage</key> <false/>
</dict>
</array>
</dict>
</plist>
EOF
mkdir -p ${dmgcnt}/plugins/platforms ${dmgmac}/libs
cp -v -a ${TARGET}/lib/libQt5{Concurrent*.dylib,Core*.dylib,Gui*.dylib,Network*.dylib,PrintSupport*.dylib,Widgets*.dylib} ${dmgmac}/libs/
cp -v -R ${TARGET}/plugins/platforms ${dmgmac}/
for LIB (${dmgmac}/libs/libQt*.5.dylib) echo install_name_tool -id @executable_path/libs/${LIB:t} ${LIB}
for FILE (${dmgmac}/{mkvinfo,mkvinfo-gui,mkvtoolnix-gui} ${dmgmac}/libs/libQt*.5.dylib ${dmgmac}/platforms/*.dylib) {
otool -L ${FILE} | \
grep -v : | \
grep -v @executable_path | \
awk '/libQt/ { print $1 }' | { \
while read LIB ; do
install_name_tool -change ${LIB} @executable_path/libs/${LIB:t} ${FILE}
done
}
}
volumename=MKVToolNix-${MTX_VER}
if [[ $DMG_PRE == 1 ]]; then
local build_number_file=$HOME/net/home/prog/video/mingw/src/uc/build-number
local build=$(< $build_number_file)
let build=$build+1
echo $build > $build_number_file
volumename=MKVToolNix-${MTX_VER}-build$(date '+%Y%m%d')-${build}-$(git rev-parse --short HEAD)
fi
dmgname=${CMPL}/MKVToolNix-${MTX_VER}.dmg
dmgbuildname=${CMPL}/${volumename}.dmg
rm -f ${dmgname} ${dmgbuildname}
hdiutil create -srcfolder ${dmgbase} -volname ${volumename} \
-fs HFS+ -fsargs "-c c=64,a=16,e=16" -format UDZO -imagekey zlib-level=9 \
${CMPL}/MKVToolNix-${MTX_VER}
if [[ ${dmgname} != ${dmgbuildname} ]] mv ${dmgname} ${dmgbuildname}
ln -s ${dmgbuildname} ${latest_link}
}
if [[ -z $MTX_VER ]]; then
MTX_VER=$(awk -F, '/AC_INIT/ { gsub("[][]", "", $2); print $2 }' < ${SCRIPT_PATH}/../../configure.ac)
fi
if [[ -z $@ ]]; then
build_autoconf
build_automake
build_pkgconfig
build_ogg
build_vorbis
build_flac
build_zlib
build_gettext
build_boost
build_qtbase
build_qttools
build_qttranslations
build_ruby
build_configured_mkvtoolnix
else
while [[ -n $1 ]]; do
build_$1
shift;
done
fi