mirror of
https://gitlab.com/mbunkus/mkvtoolnix.git
synced 2025-01-09 19:53:23 +00:00
78c033f41b
Expat hasn't been used since the release of MKVToolNix v5.5.0.
375 lines
11 KiB
Bash
Executable File
375 lines
11 KiB
Bash
Executable File
#!/bin/zsh
|
||
|
||
set -e
|
||
set -x
|
||
|
||
export SCRIPT_PATH=${0: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) 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.4.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.3.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
|
||
|
||
args=(--reconfigure toolset=clang link=static -sICONV_PATH=/usr --prefix=${TARGET} -j$DRAKETHREADS)
|
||
if [[ -n $CXXFLAGS ]] args+=(cxxflags=$CXXFLAGS)
|
||
if [[ -n $LDFLAGS ]] args+=(linkflags=$LDFLAGS)
|
||
|
||
NO_MAKE=1 CONFIGURE=./bootstrap.sh build_package boost_1_57_0.tar.bz2 \
|
||
--with-toolset=clang --prefix=${TARGET} --libdir=${TARGET}/lib
|
||
./b2 ${args} install
|
||
}
|
||
|
||
function build_qtbase {
|
||
local -a args
|
||
args=(--prefix=${TARGET} -opensource -confirm-license -release
|
||
-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}
|
||
NO_MAKE=1 build_package ${package}.tar.xz $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"
|
||
}
|
||
|
||
function build_qttools {
|
||
local -a tools to_install
|
||
tools=(lrelease lconvert lupdate)
|
||
to_install=()
|
||
|
||
local package=qttools-opensource-src-${QTVER}
|
||
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/"
|
||
}
|
||
|
||
function build_qttranslations {
|
||
CONFIGURE=qmake NO_MAKE=1 build_package qttranslations-opensource-src-${QTVER}.tar.xz
|
||
$DEBUG make
|
||
build_tarball command "make INSTALL_ROOT=TMPDIR install"
|
||
}
|
||
|
||
function build_qtmacextras {
|
||
CONFIGURE=qmake NO_MAKE=1 build_package qtmacextras-opensource-src-${QTVER}.tar.xz
|
||
$DEBUG make
|
||
build_tarball command "make INSTALL_ROOT=TMPDIR install"
|
||
}
|
||
|
||
function build_curl {
|
||
build_package curl-7.40.0.tar.xz --prefix=${TARGET} \
|
||
--disable-shared --enable-static \
|
||
--disable-ldap --disable-ldaps --disable-rtsp \
|
||
--disable-dict --disable-telnet --disable-gopher \
|
||
--disable-imap --disable-imaps --disable-pop3 --disable-pop3s \
|
||
--disable-smb --disable-smbs --disable-smtp --disable-smtps --disable-tftp
|
||
}
|
||
|
||
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 \
|
||
--disable-debug
|
||
)
|
||
|
||
if [[ -z $SHARED_QT ]] args+=(--enable-static-qt)
|
||
|
||
./configure \
|
||
LDFLAGS="$LDFLAGS -framework CoreFoundation" \
|
||
CXXFLAGS="-fvisibility=hidden -fvisibility-inlines-hidden" \
|
||
${args}
|
||
|
||
grep -q 'USE_QT.*yes' build-config
|
||
|
||
# sed -i '' -e 's/^\(QT_LIBS.*\)$/\1 -lcups/' 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
|
||
|
||
./drake clean
|
||
./drake
|
||
}
|
||
|
||
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
|
||
|
||
if [[ -z $DMG_NO_CD ]] cd ${CMPL}/mkvtoolnix-${MTX_VER}
|
||
|
||
rm -rf $dmgbase
|
||
./drake install prefix=${dmgcnt}
|
||
test -f ${dmgmac}/mkvtoolnix-gui
|
||
|
||
strip ${dmgcnt}/MacOS/mkv{merge,info,extract,propedit,toolnix-gui}
|
||
|
||
cp README.md $dmgbase/README.txt
|
||
cp COPYING $dmgbase/COPYING.txt
|
||
cp ChangeLog $dmgbase/ChangeLog.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>10.8.0</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{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,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}
|
||
}
|
||
|
||
if [[ -z $@ ]]; then
|
||
build_autoconf
|
||
build_automake
|
||
build_pkgconfig
|
||
build_ogg
|
||
build_vorbis
|
||
build_flac
|
||
# build_zlib
|
||
build_gettext
|
||
build_ruby
|
||
build_boost
|
||
build_curl
|
||
build_qtbase
|
||
build_qttools
|
||
build_qttranslations
|
||
build_configured_mkvtoolnix
|
||
|
||
# autoconf automake pkgconfig ogg vorbis flac gettext ruby boost curl qtbase qttools qttranslations configured_mkvtoolnix1
|
||
|
||
else
|
||
while [[ -n $1 ]]; do
|
||
build_$1
|
||
shift;
|
||
done
|
||
fi
|