#!/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 < $dmgcnt/PkgInfo APPL???? EOF cat < $dmgcnt/Info.plist LSEnvironment LANG en_US.UTF-8 CFBundleDevelopmentRegion English CFBundleExecutable mkvtoolnix-gui Properties file.encoding UTF-8 CFBundleInfoDictionaryVersion ${MTX_VER} CFBundlePackageType APPL CSResourcesFileMapped CFBundleVersion MKVToolNix-${MTX_VER} CFBundleShortVersionString ${MTX_VER} NSPrincipalClass NSApplication LSMinimumSystemVersion 10.8.0 CFBundleName MKVToolNix CFBundleIconFile MKVToolNix.icns CFBundleDocumentTypes CFBundleTypeExtensions CFBundleTypeIconFile MKVToolNix.icns CFBundleTypeName MKVToolNix-${MTX_VER} CFBundleTypeRole Editor LSIsAppleDefaultForType LSTypeIsPackage 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