X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=development%2FLyX-Mac-binary-release.sh;h=f2683fec4497d69203f557745a82efbde89b5488;hb=1e28965589bcf5ad85ed6d75ae2e59611989f78e;hp=2cb6f75a4470db4cdf2c3935a8c1268ea0660e99;hpb=dc5221852cf2f1f5c2bbe1c5718687c7deb93b40;p=lyx.git diff --git a/development/LyX-Mac-binary-release.sh b/development/LyX-Mac-binary-release.sh index 2cb6f75a44..f2683fec44 100644 --- a/development/LyX-Mac-binary-release.sh +++ b/development/LyX-Mac-binary-release.sh @@ -47,7 +47,7 @@ LyXConfigureOptions="${LyXConfigureOptions} --disable-stdlib-debug" AspellConfigureOptions="--enable-warnings --enable-optimization=-O0 --enable-debug --disable-nls --enable-compile-in-filters --disable-pspell-compatibility" HunspellConfigureOptions="--with-warnings --disable-nls --disable-static" -QtMajorVersion=qt4 +QtMajorVersion=$(echo "${QtVersion}"|cut -d. -f1) QtConfigureOptions="${QtConfigureOptions} -opensource -silent -shared -confirm-license" # stupid special case... case "${QtVersion}:${QtAPI}" in @@ -63,7 +63,6 @@ case "${QtVersion}:${QtAPI}" in QtConfigureOptions="${QtConfigureOptions} -fast -no-strip" QtConfigureOptions="${QtConfigureOptions} -no-javascript-jit -no-pkg-config" QtConfigureOptions="${QtConfigureOptions} -nomake examples -nomake demos -nomake docs -nomake tools" - QtMajorVersion=qt5 ;; 5.6*|5.7*) QtConfigureOptions="${QtConfigureOptions} -no-strip" @@ -73,7 +72,6 @@ case "${QtVersion}:${QtAPI}" in QtConfigureOptions="${QtConfigureOptions} -skip qtquickcontrols" QtConfigureOptions="${QtConfigureOptions} -skip qttools" QtConfigureOptions="${QtConfigureOptions} -skip qtdeclarative" - QtMajorVersion=qt5 ;; 5.*) QtConfigureOptions="${QtConfigureOptions} -no-strip" @@ -82,7 +80,6 @@ case "${QtVersion}:${QtAPI}" in for component in ${QtSkipComponents} ; do QtConfigureOptions="${QtConfigureOptions} -skip ${component}" done - QtMajorVersion=qt5 ;; *) QtConfigureOptions="${QtConfigureOptions} -fast -no-exceptions" @@ -146,12 +143,12 @@ usage() { echo " --aspell-deployment=yes|no ." default yes echo " --with-qt-frameworks=yes|no." default no echo " --qt-deployment=yes|no ....." default yes - echo " --with-macosx-target=TARGET " default 10.4 "(Tiger)" echo " --with-sdkroot=SDKROOT ....." default 10.5 "(Leopard)" echo " --with-arch=ARCH ..........." default ppc,i386 echo " --with-build-path=PATH ....." default \${lyx-src-dir}/../lyx-build echo " --with-dmg-location=PATH ..." default \${build-path} echo " --with-binary-strip=yes ...." default no + echo " --codesign-identity=CSID ..." default is w/o CSID echo echo "All other arguments with -- are passed to configure" echo "including the defaults: ${LyXConfigureOptions}" @@ -189,8 +186,9 @@ while [ $# -gt 0 ]; do QTDIR=$(echo ${1}|cut -d= -f2) shift ;; - --with-macosx-target=*) + --with-macos-deployment-target=*) MACOSX_DEPLOYMENT_TARGET=$(echo ${1}|cut -d= -f2) + LyXConfigureOptions="${LyXConfigureOptions} ${1}" shift ;; --with-sdkroot=*) @@ -212,6 +210,10 @@ while [ $# -gt 0 ]; do esac shift ;; + --codesign-identity=*) + CODESIGN_IDENTITY=$(echo "${1}"|cut -d= -f2) + shift + ;; --libmagic-deployment=*) libmagic_deployment=$(echo ${1}|cut -d= -f2) shift @@ -263,9 +265,15 @@ while [ $# -gt 0 ]; do aspell_deployment="no" shift ;; + --with-included-hunspell) + LyXConfigureOptions="${LyXConfigureOptions} ${1}" + hunspell_deployment="no" + shift + ;; --without-hunspell) LyXConfigureOptions="${LyXConfigureOptions} ${1}" hunspell_deployment="no" + hunspell_dictionaries="no" shift ;; --only-qt*=*) @@ -276,9 +284,8 @@ while [ $# -gt 0 ]; do LyxOnlyPackage=$(echo ${1}|cut -d= -f2) shift ;; - --enable-cxx11) - LyXConfigureOptions="${LyXConfigureOptions} ${1}" - EnableCXX11="--enable-cxx11" + --enable-cxx11|--enable-cxx-mode=*) + EnableCXXMode="${1}" shift ;; --*) @@ -292,7 +299,7 @@ while [ $# -gt 0 ]; do done if [ "${configure_qt_frameworks}" != "yes" ]; then - QtInstallDir=${QTDIR:-"/opt/qt4"} + QtInstallDir=${QTDIR} fi ARCH_LIST=${ARCH_LIST:-"ppc i386"} @@ -324,7 +331,7 @@ QtBuildDir=${QtBuildDir:-"${LyxBuildDir}"/${QtBuildSubDir:-"qt-build"}} DictionarySourceDir=${DICTIONARYDIR:-$(dirname "${LyxSourceDir}")/dictionaries} DocumentationDir=$(dirname "${LyxSourceDir}")/Documents -DmgBackground="${LyxSourceDir}"/development/MacOSX/dmg-background.png +DmgBackground="${LyxSourceDir}"/development/MacOSX/dmg-background.tiff if [ -z "${LyXVersion}" ]; then LyXVersion=$(grep AC_INIT "${LyxSourceDir}"/configure.ac | cut -d, -f2 | tr -d " []()") @@ -356,13 +363,23 @@ case "${QtVersion}" in QtFrameworkVersion="5" ;; 5.12.*) - QtLibraries=${QtLibraries:-"QtDbus QtSvg QtXml QtPrintSupport QtMacExtras QtWidgets QtGui QtNetwork QtConcurrent QtCore"} + QtLibraries=${QtLibraries:-"QtDBus QtSvg QtXml QtPrintSupport QtMacExtras QtWidgets QtGui QtNetwork QtConcurrent QtCore"} QtFrameworkVersion="5" ;; 5*) QtLibraries=${QtLibraries:-"QtSvg QtXml QtPrintSupport QtMacExtras QtWidgets QtGui QtNetwork QtConcurrent QtCore"} QtFrameworkVersion="5" ;; +6*) + QtLibraries=${QtLibraries:-"QtCore5Compat QtDBus QtSvg QtXml QtPrintSupport QtSvgWidgets QtWidgets QtGui QtNetwork QtConcurrent QtCore"} + QtFrameworkVersion="A" + case "${EnableCXXMode}" in + --enable-cxx11|--enable-cxx-mode=11) + echo Warning: Adjust cxx standard "${EnableCXXMode}" for Qt 6. C++17 or better is required. + EnableCXXMode="--enable-cxx-mode=17" + ;; + esac + ;; *) QtLibraries=${QtLibraries:-"QtSvg QtXml QtGui QtNetwork QtCore"} QtFrameworkVersion="4" @@ -373,7 +390,7 @@ DMGNAME="${LyxBase}${LyXGitCommitHash:+-}${LyXGitCommitHash}" DMGSIZE="550m" # Check for existing SDKs -SDKs=$(echo ${DEVELOPER_SDKS}/MacOSX10*sdk) +SDKs=$(echo ${DEVELOPER_SDKS}/MacOSX1[01]*sdk) case $SDKs in *${SDKROOT}*) ;; @@ -400,6 +417,21 @@ esac MYCFLAGS="-mmacosx-version-min=${MACOSX_DEPLOYMENT_TARGET}" MYLDFLAGS="-mmacosx-version-min=${MACOSX_DEPLOYMENT_TARGET}" +case "${EnableCXXMode}" in +--enable-cxx11|--enable-cxx-mode=11) + export CC=cc + export CXX="c++ -stdlib=libc++" + export CXXFLAGS=-std=c++11 + LyXConfigureOptions="${LyXConfigureOptions} --enable-cxx-mode=11" + ;; +--enable-cxx-mode=17) + export CC=cc + export CXX="c++ -stdlib=libc++" + export CXXFLAGS=-std=c++17 + LyXConfigureOptions="${LyXConfigureOptions} ${EnableCXXMode}" + ;; +esac + build_qt() { echo Build Qt library ${QtSourceDir} if [ "${QtInstallDir}" = "${QtBuildDir}" ]; then @@ -414,16 +446,6 @@ build_qt() { "${QtSourceDir}"/configure ${QtConfigureOptions} ${QTARCHS} -prefix "${QtInstallDir}" make -j1 && make -j1 install ) - if [ -d "${QtInstallDir}" -a ! -f "${QtInstallDir}"/include/QtCore ]; then - cd "${QtInstallDir}" && ( - mkdir -p include - cd include - for libnm in ${QtLibraries} ; do - test -d ${libnm} -o -L ${libnm} || \ - ( ln -s ../lib/${libnm}.framework/Headers ${libnm} && echo Link to framework ${libnm} ) - done - ) - fi } case ${QtOnlyPackage:-"no"} in @@ -634,15 +656,10 @@ LYX_BUNDLE_PATH="${LyxAppPrefix}/${BUNDLE_PATH}" build_lyx() { # Clear Output if [ -n "${LyxAppZip}" -a -f "${LyxAppZip}" ]; then rm "${LyxAppZip}"; fi - if [ -d "${LyxAppPrefix}" ]; then rm -rf "${LyxAppPrefix}"; fi - - case "${EnableCXX11}" in - "--enable-cxx11") - export CC=cc - export CXX="c++ -stdlib=libc++" - export CXXFLAGS=-std=c++11 - ;; - esac + if [ -d "${LyxAppPrefix}" ]; then + find "${LyxAppPrefix}" -type d -exec chmod u+w '{}' \; + rm -rf "${LyxAppPrefix}" + fi # ------------------------------------- # Automate configure check @@ -682,8 +699,8 @@ build_lyx() { if [ -d "${LyxBuildDir}" ]; then rm -r "${LyxBuildDir}"; fi mkdir -p "${LyxBuildDir}" && cd "${LyxBuildDir}" - CPPFLAGS="${SDKROOT:+-isysroot ${SDKROOT}} -arch ${arch} ${MYCFLAGS}" - LDFLAGS="${SDKROOT:+-isysroot ${SDKROOT}} -arch ${arch} ${MYLDFLAGS}" + CPPFLAGS="${SDKROOT:+-isysroot ${SDKROOT}} -arch ${arch}" + LDFLAGS="${SDKROOT:+-isysroot ${SDKROOT}} -arch ${arch}" if [ "$configure_qt_frameworks" = "yes" ]; then export QT_CORE_CFLAGS="-FQtCore" @@ -742,26 +759,25 @@ private_framework() { fwvrsn="1" mkdir -p "${condir}/${fwdir}"/Versions/${fwvrsn}/Headers mkdir -p "${condir}/${fwdir}"/Versions/${fwvrsn}/Resources - if [ ! -f "${condir}/${fwdir}/Versions/${fwvrsn}/${libnm}" ]; then - cp -p "${source}" "${condir}/${fwdir}/Versions/${fwvrsn}/${libnm}" + if [ ! -f "${condir}/${fwdir}/Versions/${fwvrsn}/${fwname}" ]; then + cp -p "${source}" "${condir}/${fwdir}/Versions/${fwvrsn}/${fwname}" for hfile in "$@" ; do test -f "${hfile}" && cp -p "${hfile}" "${condir}/${fwdir}"/Versions/${fwvrsn}/Headers done ln -s ${fwvrsn} "${condir}/${fwdir}/Versions/Current" ln -s Versions/Current/Headers "${condir}/${fwdir}/Headers" ln -s Versions/Current/Resources "${condir}/${fwdir}/Resources" - ln -s Versions/Current/"${libnm}" "${condir}/${fwdir}/${libnm}" - ln -s Versions/Current/"${libnm}" "${condir}/${fwdir}/${fwname}" - installname -id "@executable_path/../${fwdir}/${libnm}" "${condir}/${fwdir}/${libnm}" + ln -s Versions/Current/"${fwname}" "${condir}/${fwdir}/${fwname}" + installname -id "@executable_path/../${fwdir}/${fwname}" "${condir}/${fwdir}/${fwname}" if [ -f "${LyxSourceDir}"/development/LyX-Mac-frameworks-template.plist ]; then cat "${LyxSourceDir}"/development/LyX-Mac-frameworks-template.plist | sed \ - -e "s/@CFBundleExecutable@/${libnm}/" \ + -e "s/@CFBundleExecutable@/${fwname}/" \ -e "s/@CFBundleIdentifier@/${libid}/" \ -e "s/@CFBundleShortVersionString@/${svrsn}/" \ -e "s/@CFBundleVersion@/${version}/" > "${condir}/${fwdir}"/Resources/Info.plist fi fi - installname -change "${source}" "@executable_path/../${fwdir}/${libnm}" "${target}" + installname -change "${source}" "@executable_path/../${fwdir}/${fwname}" "${target}" } deploy_qtlibs() { @@ -794,7 +810,9 @@ EOF test -d "${condir}/${fwdir}" || ( echo Copy framework "${source}/lib/"$(basename "${fwdir}") cp -pR "${source}/lib/"$(basename "${fwdir}") "${condir}/${fwdir}" - rm -f "${condir}/${fwdir}/${version}${libnm}"_debug + rm -f "${condir}/${fwdir}/${libnm}"_debug "${condir}/${fwdir}/${version}${libnm}"_debug + test -f "${condir}/${fwdir}/${libnm}".prl && mv "${condir}/${fwdir}/${libnm}".prl "${condir}/${fwdir}"/Resources + test -f "${condir}/${fwdir}/${libnm}"_debug.prl && mv "${condir}/${fwdir}/${libnm}"_debug.prl "${condir}/${fwdir}"/Resources installname -id "@executable_path/../${fwdir}/${version}${libnm}" "${condir}/${fwdir}/${version}${libnm}" find "${condir}/PlugIns" "${condir}/"$(dirname "${fwdir}") -name Headers -prune -o -type f -print | while read filename ; do if [ "${filename}" != "${target}" ]; then @@ -872,6 +890,41 @@ convert_universal() { done } +# ------------------------- +# Create code sign signatures +# ------------------------- +code_sign() { + target="$1" + condir=$(content_directory "${target}"/lyx) + appdir=$(dirname "${condir}") + # have to sign frameworks first + for fwname in Aspell Hunspell LibMagic ; do + fwitem="${condir}"/$(framework_name "${fwname}") + if [ -d "${fwitem}" ]; then + codesign --verbose --force --sign "${CODESIGN_IDENTITY}" "${fwitem}" + fi + done + for csitem in \ + "${condir}"/Frameworks/Qt*.framework/Versions/${QtFrameworkVersion} \ + "${condir}"/PlugIns/*/lib*.dylib \ + "${condir}"/Library/Spotlight/* \ + "${target}"/inkscape \ + "${target}"/lilypond \ + "${target}"/lilypond-book \ + "${target}"/maxima \ + "${target}"/tex2lyx \ + "${target}"/lyxeditor \ + "${target}"/lyxconvert \ + "${target}"/lyxclient + do + codesign --verbose --force --sign "${CODESIGN_IDENTITY}" "${csitem}" + done + + /usr/bin/codesign --verbose --force --sign "${CODESIGN_IDENTITY}" "${appdir}" || { + echo Warning: codesign failed with certificate named '"'${CODESIGN_IDENTITY}'"' + } +} + deduplicate() { find "$@" -type f -print | while read file ; do echo $(md5 -q "$file") "$file" @@ -902,12 +955,10 @@ copy_dictionaries() { cp -p -r "${ASpellInstallDir}/lib/aspell-0.60"/* "${ASpellResources}"/data cp -p -r "${ASpellInstallDir}/share/aspell"/* "${ASpellResources}"/dicts fi - if [ -d "${HunSpellInstallDir}" -a "yes" = "${hunspell_dictionaries}" ]; then + if [ -d "${DictionarySourceDir}" -a "yes" = "${hunspell_dictionaries}" ]; then HunSpellResources="${LyxAppPrefix}/Contents/Resources" - if [ -d "${DictionarySourceDir}" ]; then - ( cd "${DictionarySourceDir}" && find dicts -name .svn -prune -o -type f -print | cpio -pmdv "${HunSpellResources}" ) - deduplicate "${HunSpellResources}"/dicts - fi + ( cd "${DictionarySourceDir}" && find dicts -name .svn -prune -o -type f -print | cpio -pmdv "${HunSpellResources}" ) + deduplicate "${HunSpellResources}"/dicts fi if [ -d "${DictionarySourceDir}" -a "yes" = "${thesaurus_deployment}" ]; then MyThesResources="${LyxAppPrefix}/Contents/Resources" @@ -920,7 +971,7 @@ set_bundle_display_options() { X_BOUNDS=$2 Y_BOUNDS=$3 Y_POSITION=$((Y_BOUNDS - 65)) - Y_BOUNDS=$((Y_BOUNDS + 20)) + Y_BOUNDS=$((Y_BOUNDS + 50)) LYX_X_POSITION=$((X_BOUNDS / 4)) LYX_Y_POSITION=$Y_POSITION APP_X_POSITION=$((3 * X_BOUNDS / 4)) @@ -958,10 +1009,22 @@ set_bundle_display_options() { EOF } +# The image was made with with inkscape and tiffutil from dmg-background.svgz +make_image() { + INKSCAPE=/Applications/Inkscape.app/Contents/MacOS/inkscape + ( + cd "${LyxSourceDir}"/development/MacOSX + test -x ${INKSCAPE} && ${INKSCAPE} --export-type=png -w 560 -o dmg-background.png dmg-background.svgz + test -x ${INKSCAPE} && ${INKSCAPE} --export-type=png -w 1120 -o dmg-background@2x.png dmg-background.svgz + tiffutil -cathidpicheck dmg-background.png dmg-background@2x.png -out dmg-background.tiff + ) +} + make_dmg() { cd "${1}" - BGSIZE=$(file "$DmgBackground" | awk -F , '/PNG/{print $2 }' | tr x ' ') + test -f "${DmgBackground}" || make_image + BGSIZE=$(file "$DmgBackground" | awk -F , '/TIFF/{ print $10 $4 ;}/PNG/{ print $2; }'|sed -e 's/width=//' -e 's/height=//' -e 's/x//') BG_W=$(echo ${BGSIZE} | awk '{print $1 }') BG_H=$(echo ${BGSIZE} | awk '{print $2 }') @@ -980,7 +1043,7 @@ make_dmg() { VOLUME=$(mount |grep ${DEVICE} | cut -f 3 -d ' ') # copy in the application bundle - ditto --hfsCompression "${LyxAppDir}.app" "${VOLUME}/${LyxName}.app" + ditto --hfsCompression "${LyxAppPrefix}" "${VOLUME}/${LyxName}.app" # copy in background image mkdir -p "${VOLUME}/Pictures" @@ -989,7 +1052,7 @@ make_dmg() { ln -s /Applications/ "${VOLUME}"/Applications test -d "${DocumentationDir}" && ditto --hfsCompression "${DocumentationDir}" "${VOLUME}" set_bundle_display_options "${VOLUME}" ${BG_W} ${BG_H} - ${XCODE_DEVELOPER}/Tools/SetFile -a C "${VOLUME}" + PATH="${XCODE_DEVELOPER}/Tools:$PATH" SetFile -a C "${VOLUME}" mv "${VOLUME}/Pictures" "${VOLUME}/.Pictures" # Unmount the disk image @@ -1013,7 +1076,7 @@ build_package() { for arch in ${ARCH_LIST} ; do DMGARCH="${DMGARCH}-${arch}" done - QtDmgArchSuffix=${QtMajorVersion}${DMGARCH}${QtAPI}.dmg + QtDmgArchSuffix="qt"${QtMajorVersion}${DMGARCH}${QtAPI}.dmg test -n "${DMGLocation}" && ( make_dmg "${DMGLocation}" @@ -1033,5 +1096,7 @@ if [ ${LyxOnlyPackage:-"no"} = "no" ]; then build_lyx convert_universal copy_dictionaries + test -n "${CODESIGN_IDENTITY}" && code_sign "${LYX_BUNDLE_PATH}" + find "${LyxAppPrefix}" -type d -exec chmod go-w '{}' \; fi build_package