tiger support on mac snow leopard, include Qt4 frameworks, smart build script with parameters

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@34132 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Stephan Witt 2010-04-14 13:22:00 +00:00
parent c5249682bd
commit fb43bbbf6c
6 changed files with 355 additions and 133 deletions

View File

@ -21,8 +21,8 @@ so steps 2 and 3 can be skipped in these cases. Those wanting to
build developmental versions must have automake and gettext as build developmental versions must have automake and gettext as
well. well.
1. Qt/Mac Opensource Edition, version 4. This library is GPL- 1. Qt/Mac Opensource Edition, version 4.
licensed and can be downloaded from This library is GPL-licensed and can be downloaded from
<http://trolltech.com/developer/downloads/qt/mac/>. To compile it, <http://trolltech.com/developer/downloads/qt/mac/>. To compile it,
create a directory where you want to install QT4. In the following, create a directory where you want to install QT4. In the following,
the full path to this directory is called /path/to/QT4 the full path to this directory is called /path/to/QT4
@ -32,8 +32,19 @@ Qt source hierarcy, and enter:
./configure -static -no-exceptions -nomake examples -nomake tools -nomake demos -prefix /path/to/QT4 ./configure -static -no-exceptions -nomake examples -nomake tools -nomake demos -prefix /path/to/QT4
make make
make install make install
cd /path/to/QT4/lib rm /path/to/QT4/lib/*.la
rm *.la
with Qt4.6.2 and snow leopard it becomes:
CC=gcc-4.0 OBJC=gcc-4.0 CXX=g++-4.0\
./configure -opensource -silent -static -release -universal -fast\
-sdk /Developer/SDKs/MacOSX10.4u.sdk\
-no-framework -no-exceptions -no-webkit -no-qt3support -no-javascript-jit -no-dbus\
-nomake examples -nomake demos -nomake docs\
-nomake tools\
-prefix /path/to/QT4
make
make install
2. [Needed only for developmental builds:] automake, version 1.10 2. [Needed only for developmental builds:] automake, version 1.10
or higher (check with automake --version). Probably the easiest or higher (check with automake --version). Probably the easiest
@ -56,6 +67,13 @@ the simplest way is through MacPorts:
sudo port install pkgconfig sudo port install pkgconfig
5. To build with included spell checker (ASpell):
The aspell library is GPL-licensed and can be downloaded from
ftp://ftp.gnu.org/gnu/aspell or one of the mirrors.
At the time of writing aspell-0.60.tar.gz is the current version.
Unpack the tarball in the same directory where you placed the
svn checkout or LyX tarball.
BUILD INSTRUCTIONS BUILD INSTRUCTIONS
In what follows, /path/to/LyX.app is the location where you want LyX In what follows, /path/to/LyX.app is the location where you want LyX
@ -75,8 +93,8 @@ Then, cd to the top of the LyX source hierarchy, and enter:
make make
make install-strip make install-strip
(Note that the --with-version-suffix=-1.6 option will result in LyX's (Note that the --with-version-suffix=-2.0 option will result in LyX's
user's directory being located at ~/Library/Application Support/LyX-1.6) user's directory being located at ~/Library/Application Support/LyX-2.0)
(b) Developmental Versions (svn checkouts) (b) Developmental Versions (svn checkouts)
@ -91,7 +109,7 @@ If you did not install pkg-config, first set the LDFLAGS variable:
Then, cd to the top of the LyX source hierarchy, and enter: Then, cd to the top of the LyX source hierarchy, and enter:
./autogen.sh ./autogen.sh
./configure --prefix=/path/to/LyX.app --with-version-suffix=-1.6 --with-qt4-dir=/path/to/QT4 --with-included-gettext --enable-optimization=-O2 --disable-stdlib-debug ./configure --prefix=/path/to/LyX.app --with-version-suffix=-2.0 --with-qt4-dir=/path/to/QT4 --with-included-gettext --enable-optimization=-O2 --disable-stdlib-debug
make make
make install-strip make install-strip

View File

@ -67,12 +67,23 @@ AC_DEFUN([CHECK_WITH_HUNSPELL],
fi fi
]) ])
### Check if we want spell libraries, prefer new aspell or hunspell ### Check if we want spell libraries, prefer new aspell or hunspell
AC_DEFUN([LYX_CHECK_SPELL_ENGINES], AC_DEFUN([LYX_CHECK_SPELL_ENGINES],
[ [
CHECK_WITH_ASPELL CHECK_WITH_ASPELL
AM_CONDITIONAL(USE_ASPELL, $lyx_use_aspell) AM_CONDITIONAL(USE_ASPELL, $lyx_use_aspell)
if $lyx_use_aspell ; then
### Check for aspell framework name
LYX_WITH_DIR([aspell-framework],[name of aspell framework],aspell_framework, NONE)
if ! test "x${lyx_cv_aspell_framework}" = xNONE; then
AC_DEFINE_UNQUOTED([ASPELL_FRAMEWORK], "${lyx_cv_aspell_framework}")
else
AC_DEFINE(ASPELL_FRAMEWORK, [""], [Define as name of aspell framework])
fi
fi
CHECK_WITH_ENCHANT CHECK_WITH_ENCHANT
AM_CONDITIONAL(USE_ENCHANT, $lyx_use_enchant) AM_CONDITIONAL(USE_ENCHANT, $lyx_use_enchant)

View File

@ -9,26 +9,90 @@
# Prerequisite: # Prerequisite:
# * a decent checkout of LyX sources (probably you have it already) # * a decent checkout of LyX sources (probably you have it already)
# * Qt4 - build with static libraries for the used platforms (i386 and ppc) # * Qt4 - build with shared or static libraries for the used platforms (i386 and ppc)
# * for aspell support: # * for aspell support:
# the aspell sources placed in a sibling directory (variable ASpellSourceVersion) # the aspell sources placed in a sibling directory (variable ASpellSourceVersion)
ConfigureOptions="--enable-warnings --enable-optimization=-Os --with-included-gettext"
dict_deployment="yes"
qt4_deployment="yes"
MACOSX_DEPLOYMENT_TARGET="10.4" # Tiger support is default
usage() {
echo Build script for LyX on Mac OS X
echo
echo Optional arguments:
echo " --tiger-support=yes|no ....." default yes
echo " --dict-deployment=yes|no ..." default yes
echo " --qt4-deployment=yes|no ...." default yes
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
echo "All other arguments with -- are passed to configure"
echo "including the defaults: ${ConfigureOptions}"
echo
exit 0
}
while [ $# -gt 0 ]; do
case "${1}" in
--with-qt4-dir=*)
QTDIR=`echo ${1}|cut -d= -f2`
shift
;;
--tiger-support=[Nn][Oo])
MACOSX_DEPLOYMENT_TARGET=""
MYCFLAGS=""
shift
;;
--dict-deployment=*)
dict_deployment=`echo ${1}|cut -d= -f2`
shift
;;
--qt4-deployment=*)
qt4_deployment=`echo ${1}|cut -d= -f2`
shift
;;
--with-arch=*)
ARCH=`echo ${1}|cut -d= -f2|tr ',' ' '`
ARCH_LIST="${ARCH_LIST} ${ARCH}"
shift
;;
--with-dmg-location=*)
DMGLocation=`echo ${1}|cut -d= -f2`
shift
;;
--with-build-path=*)
LyxBuildDir=`echo ${1}|cut -d= -f2`
shift
;;
--help)
usage
;;
--*)
ConfigureOptions="${ConfigureOptions} ${1}"
shift
;;
*)
break
;;
esac
done
# Set these variables -- to # Set these variables -- to
# (1) the location of your Qt4 installation and optionally # (1) the location of your Qt4 installation
# (2) the location of resulting DMG # (2) the location of resulting DMG
# (3) the version of private aspell installation # (3) the version of private aspell installation
# (to define the location assign ASpellSourceDir instead) # (to define the location assign ASpellSourceDir instead)
# (4) the list of architectures to build for # (4) the list of architectures to build for
QtInstallDir=${QTDIR:-"/opt/qt4"} QtInstallDir=${QTDIR:-"/opt/qt4"}
DMGLocation=.. # one level above LyxSourceDir QtFrameworkVersion="4"
ASpellSourceVersion="aspell-0.60.6" ASpellSourceVersion="aspell-0.60.6"
ARCH_LIST="ppc i386" ARCH_LIST=${ARCH_LIST:-"ppc i386"}
GetText="--with-included-gettext" strip="-strip"
ConfigureOptions="--enable-warnings --enable-optimization=-Os"
# strip="-strip"
# detection of script home # detection of script home
LyxSourceDir=${1:-`dirname "$0"`} LyxSourceDir=${1:-`dirname "$0"`}
@ -51,8 +115,11 @@ case "${LyxSourceDir}" in
;; ;;
esac esac
ASpellSourceDir=${ASpellSourceDir:-`dirname "${LyxSourceDir}"`/${ASpellSourceVersion}} LyxBuildDir=${LyxBuildDir:-`dirname "${LyxSourceDir}"`/lyx-build}
ASpellInstallDir=${ASpellInstallDir:-`dirname "${LyxSourceDir}"`/${ASpellSourceVersion}.lib} DMGLocation=${DMGLocation:-"${LyxBuildDir}"}
ASpellSourceDir=${ASPELLDIR:-`dirname "${LyxSourceDir}"`/${ASpellSourceVersion}}
ASpellInstallDir=${ASpellInstallDir:-"${LyxBuildDir}"/${ASpellSourceVersion}.lib}
if [ ! -f "${LyxSourceDir}"/configure ]; then if [ ! -f "${LyxSourceDir}"/configure ]; then
( cd "${LyxSourceDir}" && sh autogen.sh ) ( cd "${LyxSourceDir}" && sh autogen.sh )
@ -64,7 +131,7 @@ fi
LyxName="LyX" LyxName="LyX"
LyxBase="${LyxName}-${LyXVersion}" LyxBase="${LyxName}-${LyXVersion}"
LyxApp="${LyxBase}.app" LyxApp="${LyxBase}.app"
LyxAppDir=`dirname "${LyxSourceDir}"`/"${LyxBase}" LyxAppDir="${LyxBuildDir}"/"${LyxBase}"
LyxBuildDir="${LyxAppDir}.build" LyxBuildDir="${LyxAppDir}.build"
LyxAppPrefix="${LyxAppDir}.app" LyxAppPrefix="${LyxAppDir}.app"
# if zip file is needed... remove the comment sign # if zip file is needed... remove the comment sign
@ -84,13 +151,27 @@ BuildSystem=`"${LyxSourceDir}/config/config.guess"`
HostSystem_i386="i686-apple-darwin8" HostSystem_i386="i686-apple-darwin8"
HostSystem_ppc="powerpc-apple-darwin8" HostSystem_ppc="powerpc-apple-darwin8"
DMGNAME="${LyxBase}-Uncompressed.dmg"
DMGSIZE="550m"
COMPRESSEDDMGNAME="${LyxBase}.dmg"
BACKGROUND="${LyxAppDir}.app/Contents/Resources/images/banner.png"
# Check for existing SDKs # Check for existing SDKs
# 10.6 cannot be used for 10.4 currently
SDKs=`echo /Developer/SDKs/MacOSX10*sdk` SDKs=`echo /Developer/SDKs/MacOSX10*sdk`
case "$SDKs" in case "$SDKs" in
*10.6*) *10.6*)
MACOSX_DEPLOYMENT_TARGET="10.5"; export MACOSX_DEPLOYMENT_TARGET MACOSX_DEPLOYMENT_TARGET=${MACOSX_DEPLOYMENT_TARGET:-"10.5"}; export MACOSX_DEPLOYMENT_TARGET
SDKROOT="/Developer/SDKs/MacOSX10.5.sdk"; export SDKROOT case "${MACOSX_DEPLOYMENT_TARGET}" in
10.5)
SDKROOT="/Developer/SDKs/MacOSX10.5.sdk"; export SDKROOT
;;
10.4)
SDKROOT="/Developer/SDKs/MacOSX10.4u.sdk"; export SDKROOT
CC=gcc-4.0 ; export CC
CXX=g++-4.0 ; export CXX
OBJC=gcc-4.0 ; export OBJC
;;
esac
;; ;;
*10.5*) *10.5*)
MACOSX_DEPLOYMENT_TARGET="10.4"; export MACOSX_DEPLOYMENT_TARGET MACOSX_DEPLOYMENT_TARGET="10.4"; export MACOSX_DEPLOYMENT_TARGET
@ -101,6 +182,7 @@ case "$SDKs" in
exit 1 exit 1
;; ;;
esac esac
MYCFLAGS="-mmacosx-version-min=${MACOSX_DEPLOYMENT_TARGET}"
if [ -d "${ASpellSourceDir}" -a ! -d "${ASpellInstallDir}" ]; then if [ -d "${ASpellSourceDir}" -a ! -d "${ASpellInstallDir}" ]; then
# we have a private ASpell source tree at hand... # we have a private ASpell source tree at hand...
@ -111,13 +193,12 @@ if [ -d "${ASpellSourceDir}" -a ! -d "${ASpellInstallDir}" ]; then
ASpellName="Aspell" ASpellName="Aspell"
ASpellBase="${ASpellName}-${ASpellVersion}" ASpellBase="${ASpellName}-${ASpellVersion}"
ASpellLib="${ASpellBase}.lib"
ASpellLibDir=`dirname "${ASpellSourceDir}"`/"${ASpellBase}" echo Build aspell library ${ASpellBase}
ASpellLibPrefix="${ASpellInstallDir:-${ASpellLibDir}.lib}"
# Clear Output # Clear Output
if [ -n "${ASpellLibZip}" -a -f "${ASpellLibZip}" ]; then rm "${ASpellLibZip}"; fi if [ -n "${ASpellLibZip}" -a -f "${ASpellLibZip}" ]; then rm "${ASpellLibZip}"; fi
if [ -d "${ASpellLibPrefix}" ]; then rm -r "${ASpellLibPrefix}"; fi if [ -d "${ASpellInstallDir}" ]; then rm -r "${ASpellInstallDir}"; fi
# ASpell builds inplace only :( # ASpell builds inplace only :(
cd "${ASpellSourceDir}" && make distclean cd "${ASpellSourceDir}" && make distclean
@ -128,18 +209,18 @@ if [ -d "${ASpellSourceDir}" -a ! -d "${ASpellInstallDir}" ]; then
FILE_LIST="libaspell.15.dylib libpspell.15.dylib" FILE_LIST="libaspell.15.dylib libpspell.15.dylib"
for arch in ${ARCH_LIST} ; do for arch in ${ARCH_LIST} ; do
CPPFLAGS="${SDKROOT:+-isysroot ${SDKROOT}} -arch ${arch} ${MYCFLAGS}"; export CPPFLAGS
LDFLAGS="${SDKROOT:+-isysroot ${SDKROOT}} -arch ${arch}"; export LDFLAGS LDFLAGS="${SDKROOT:+-isysroot ${SDKROOT}} -arch ${arch}"; export LDFLAGS
LDFLAGS="${CPPFLAGS}"; export LDFLAGS
HOSTSYSTEM=`eval "echo \\$HostSystem_$arch"` HOSTSYSTEM=`eval "echo \\$HostSystem_$arch"`
"${ASpellSourceDir}/configure"\ "${ASpellSourceDir}/configure"\
--prefix="${ASpellLibPrefix}"\ --prefix="${ASpellInstallDir}"\
${ConfigureOptions}\ ${ConfigureOptions}\
${GetText} --host="${HOSTSYSTEM}" ${BuildSystem:+"--build=${BuildSystem}"} --enable-build-type=rel --host="${HOSTSYSTEM}" ${BuildSystem:+"--build=${BuildSystem}"} --enable-build-type=rel
make && make install${strip} make && make install${strip}
for file in ${FILE_LIST} ; do for file in ${FILE_LIST} ; do
if [ -f "${ASpellLibPrefix}"/lib/${file} ]; then if [ -f "${ASpellInstallDir}"/lib/${file} ]; then
mv "${ASpellLibPrefix}"/lib/${file}\ mv "${ASpellInstallDir}"/lib/${file}\
"${ASpellLibPrefix}"/lib/${file}-${arch} "${ASpellInstallDir}"/lib/${file}-${arch}
else else
echo Cannot build and install ASpell for ${arch}. echo Cannot build and install ASpell for ${arch}.
exit 1 exit 1
@ -156,7 +237,7 @@ if [ -d "${ASpellSourceDir}" -a ! -d "${ASpellInstallDir}" ]; then
OBJ_LIST="${OBJ_LIST} lib/${file}-${arch}" OBJ_LIST="${OBJ_LIST} lib/${file}-${arch}"
done done
( (
cd "${ASpellLibPrefix}" cd "${ASpellInstallDir}"
lipo -create ${OBJ_LIST} -o lib/${file} lipo -create ${OBJ_LIST} -o lib/${file}
) )
done done
@ -164,108 +245,186 @@ if [ -d "${ASpellSourceDir}" -a ! -d "${ASpellInstallDir}" ]; then
# Clean up # Clean up
# -------- # --------
for arch in ${ARCH_LIST} ; do for arch in ${ARCH_LIST} ; do
rm -f "${ASpellLibPrefix}"/lib/*-${arch} rm -f "${ASpellInstallDir}"/lib/*-${arch}
done done
fi fi
# Clear Output framework_name() {
if [ -n "${LyxAppZip}" -a -f "${LyxAppZip}" ]; then rm "${LyxAppZip}"; fi echo "Frameworks/${1}.framework"
if [ -d "${LyxAppPrefix}" ]; then rm -r "${LyxAppPrefix}"; fi }
# -------------------------------------
# Build LyX for different architectures
# -------------------------------------
FILE_LIST="lyx lyxclient tex2lyx" FILE_LIST="lyx lyxclient tex2lyx"
BUNDLE_PATH="Contents/MacOS"
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
if [ -d "${ASpellInstallDir}" ]; then # -------------------------------------
ConfigureOptions="${ConfigureOptions} --with-extra-inc=${ASpellInstallDir}/include" # Build LyX for different architectures
ConfigureOptions="${ConfigureOptions} --with-extra-lib=${ASpellInstallDir}/lib" # -------------------------------------
fi
for arch in ${ARCH_LIST} ; do if [ -d "${ASpellInstallDir}" ]; then
ASpellFramework=`framework_name Aspell`
ASpellFramework=`basename "${ASpellFramework}"`
ConfigureOptions="${ConfigureOptions} --with-extra-inc=${ASpellInstallDir}/include"
ConfigureOptions="${ConfigureOptions} --with-extra-lib=${ASpellInstallDir}/lib"
ConfigureOptions="${ConfigureOptions} --with-aspell-framework=${ASpellFramework}"
fi
if [ -d "${LyxBuildDir}" ]; then rm -r "${LyxBuildDir}"; fi for arch in ${ARCH_LIST} ; do
mkdir "${LyxBuildDir}" && cd "${LyxBuildDir}"
CPPFLAGS="${SDKROOT:+-isysroot ${SDKROOT}} -arch ${arch}"; export CPPFLAGS if [ -d "${LyxBuildDir}" ]; then rm -r "${LyxBuildDir}"; fi
LDFLAGS="${CPPFLAGS}"; export LDFLAGS mkdir "${LyxBuildDir}" && cd "${LyxBuildDir}"
HOSTSYSTEM=`eval "echo \\$HostSystem_$arch"`
echo LDFLAGS="${LDFLAGS}" CPPFLAGS="${SDKROOT:+-isysroot ${SDKROOT}} -arch ${arch} ${MYCFLAGS}"; export CPPFLAGS
echo CPPFLAGS="${CPPFLAGS}" LDFLAGS="${SDKROOT:+-isysroot ${SDKROOT}} -arch ${arch}"; export LDFLAGS
"${LyxSourceDir}/configure"\ HOSTSYSTEM=`eval "echo \\$HostSystem_$arch"`
--prefix="${LyxAppPrefix}" --with-version-suffix="-${LyXVersion}"\
${QtInstallDir:+"--with-qt4-dir=${QtInstallDir}"} \ echo LDFLAGS="${LDFLAGS}"
${ConfigureOptions}\ echo CPPFLAGS="${CPPFLAGS}"
${GetText} --host="${HOSTSYSTEM}" --build="${BuildSystem}" --enable-build-type=rel echo CONFIGURE_OPTIONS="${ConfigureOptions}"
make && make install${strip} "${LyxSourceDir}/configure"\
for file in ${FILE_LIST} ; do --prefix="${LyxAppPrefix}" --with-version-suffix="-${LyXVersion}"\
if [ -f "${LyxAppPrefix}"/Contents/MacOS/${file} ]; then ${QtInstallDir:+"--with-qt4-dir=${QtInstallDir}"} \
mv "${LyxAppPrefix}"/Contents/MacOS/${file}\ ${ConfigureOptions}\
"${LyxAppPrefix}"/Contents/MacOS/${file}-${arch} --host="${HOSTSYSTEM}" --build="${BuildSystem}" --enable-build-type=rel
else make && make install${strip}
echo Cannot build and install LyX for ${arch}. for file in ${FILE_LIST} ; do
exit 1 if [ -f "${LYX_BUNDLE_PATH}/${file}" ]; then
fi mv "${LYX_BUNDLE_PATH}/${file}"\
"${LYX_BUNDLE_PATH}/${file}-${arch}"
else
echo ERROR: Cannot build and install LyX for ${arch}.
exit 1
fi
done
done done
done }
content_directory() {
target="$1"
content=`dirname "${target}"`
content=`dirname "${content}"`
echo "${content}"
}
private_framework() {
fwdir=`framework_name "$1"`
source="$2"
target="$3"
condir=`content_directory "${target}"`
libnm=`basename "${source}"`
mkdir -p "${condir}/${fwdir}"
if [ ! -f "${condir}/${fwdir}/${libnm}" ]; then
cp -p "${source}" "${condir}/${fwdir}"
echo Set library id in "${condir}/${fwdir}/${libnm}"
install_name_tool -id "@executable_path/../${fwdir}/${libnm}" "${condir}/${fwdir}/${libnm}"
fi
echo Correct library id reference to "${libnm}" in "${target}"
install_name_tool -change "${source}" "@executable_path/../${fwdir}/${libnm}" "${target}"
}
deploy_qtlibs() {
source="${QtInstallDir}"
target="$1"
version="Versions/${QtFrameworkVersion}/"
condir=`content_directory "${target}"`
mkdir -p "${condir}/Resources"
test -f "${condir}/Resources/qt.conf" || cat - > "${condir}/Resources/qt.conf" <<-EOF
[Paths]
Plugins = PlugIns
EOF
if [ ! -d "${condir}/PlugIns" ]; then
mkdir -p "${condir}/PlugIns"
find "${source}/plugins" -name \*.dylib -print | while read libname ; do
echo Copy plugin "${libname}"
dylib=`basename "${libname}"`
dirname=`dirname "${libname}"`
dirname=`basename "${dirname}"`
mkdir -p "${condir}/PlugIns/${dirname}"
cp -p "${libname}" "${condir}/PlugIns/${dirname}"
done
fi
# don't change order here...
for libnm in QtSvg QtXml QtGui QtNetwork QtCore ; do
fwdir=`framework_name "$libnm"`
dirname=`basename "${fwdir}"`
test -d "${condir}/${fwdir}" || (
echo Copy framework "${source}/lib/"`basename "${fwdir}"`
cp -pR "${source}/lib/"`basename "${fwdir}"` "${condir}/${fwdir}"
echo Set library id in "${condir}/${fwdir}/${version}${libnm}"
install_name_tool -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
otool -L "${filename}" 2>/dev/null | while read library ; do
# pattern match for: /path/to/qt4/lib/QtGui.framework/Versions/4/QtGui (compatibility version 4.6.0, current version 4.6.2)
case "${library}" in
*"${libnm}"*"("*")"*)
echo Correct library id reference to "${libnm}" in "${filename}"
install_name_tool -change\
"${source}/lib/${dirname}/${version}${libnm}"\
"@executable_path/../${fwdir}/${version}${libnm}"\
"${filename}"
;;
esac
done
done
)
echo Correct library id reference to "${libnm}" in "${target}"
install_name_tool -change\
"${source}/lib/${dirname}/${version}${libnm}"\
"@executable_path/../${fwdir}/${version}${libnm}"\
"${target}"
done
}
# ------------------------- # -------------------------
# Create universal binaries # Create universal binaries
# ------------------------- # -------------------------
convert_universal() {
ASpellFramework="Frameworks/Aspell.framework" cd "${LyxAppPrefix}"
if [ -d "${ASpellInstallDir}" ]; then for file in ${FILE_LIST} ; do
ASpellDyLib=`basename "${ASpellInstallDir}/lib/"libaspell.*.dylib` OBJ_LIST=
mkdir -p "${LyxAppPrefix}"/Contents/${ASpellFramework}/lib for arch in ${ARCH_LIST} ; do
cp -p "${ASpellInstallDir}/lib/${ASpellDyLib}" "${LyxAppPrefix}"/Contents/${ASpellFramework}/lib if [ -f "${BUNDLE_PATH}/${file}-${arch}" ]; then
install_name_tool -id "@executable_path/../${ASpellFramework}/lib/${ASpellDyLib}" "${LyxAppPrefix}"/Contents/${ASpellFramework}/lib/"${ASpellDyLib}" OBJ_LIST="${OBJ_LIST} ${BUNDLE_PATH}/${file}-${arch}"
fi fi
done
for file in ${FILE_LIST} ; do if [ -n "${OBJ_LIST}" ]; then
OBJ_LIST= lipo -create ${OBJ_LIST} -o "${BUNDLE_PATH}/${file}"
for arch in ${ARCH_LIST} ; do fi
OBJ_LIST="${OBJ_LIST} Contents/MacOS/${file}-${arch}" if [ -d "${ASpellInstallDir}" ]; then
private_framework Aspell "${ASpellInstallDir}/lib/libaspell.15.dylib" "${LYX_BUNDLE_PATH}/${file}"
fi
if [ -d "${QtInstallDir}/lib/QtCore.framework/Versions/${QtFrameworkVersion}" -a "yes" = "${qt4_deployment}" ]; then
deploy_qtlibs "${LYX_BUNDLE_PATH}/${file}"
fi
otool -L "${BUNDLE_PATH}/${file}" | while read reference ; do
case "${reference}" in
*"${LyxBuildDir}"*"("*")")
echo ERROR: Bad reference to "${reference}" found!!
;;
esac
done
done done
( for arch in ${ARCH_LIST} ; do
cd "${LyxAppPrefix}" && rm -f ${BUNDLE_PATH}/*-${arch}
lipo -create ${OBJ_LIST} -o "${LyxAppPrefix}"/Contents/MacOS/${file} done
) }
if [ -d "${ASpellInstallDir}" ]; then
install_name_tool -change \ copy_dictionaries() {
"${ASpellInstallDir}/lib/${ASpellDyLib}" "@executable_path/../${ASpellFramework}/${ASpellDyLib}" \ if [ -d "${ASpellInstallDir}" -a "yes" = "${dict_deployment}" ]; then
"${LyxAppPrefix}"/Contents/MacOS/${file} ASpellFramework=`framework_name Aspell`
ASpellResources="${LyxAppPrefix}/Contents/${ASpellFramework}/Resources"
# try to reuse macports dictionaries for now
if [ -d /opt/local/lib/aspell-0.60 ]; then ASpellInstallDir=/opt/local ; fi
mkdir -p "${ASpellResources}"
echo Copy Aspell dictionaries from "${ASpellInstallDir}"
cp -p -r "${ASpellInstallDir}/lib/aspell-0.60" "${ASpellResources}"/data
cp -p -r "${ASpellInstallDir}/share/aspell" "${ASpellResources}"/dict
fi fi
done }
if [ -d "${ASpellInstallDir}" ]; then
if [ -d /opt/local/lib/aspell-0.60 ]; then ASpellInstallDir=/opt/local ; fi
mkdir -p "${LyxAppPrefix}"/Contents/${ASpellFramework}/lib
cp -p -r "${ASpellInstallDir}/lib/aspell-0.60" "${LyxAppPrefix}"/Contents/${ASpellFramework}/lib
mkdir -p "${LyxAppPrefix}"/Contents/${ASpellFramework}/share
cp -p -r "${ASpellInstallDir}/share/aspell" "${LyxAppPrefix}"/Contents/${ASpellFramework}/share
fi
# --------
# Clean up
# --------
for arch in ${ARCH_LIST} ; do
rm -f "${LyxAppPrefix}"/Contents/MacOS/*-${arch}
done
# ------------------------------
# Building distribution packages
# ------------------------------
test -n "${LyxAppZip}" && (
cd "${LyxAppPrefix}" && zip -r "${LyxAppZip}" .
)
DMGNAME="${LyxBase}-Uncompressed.dmg"
DMGSIZE="350m"
COMPRESSEDDMGNAME="${LyxBase}.dmg"
BACKGROUND="${LyxBase}.app/Contents/Resources/images/banner.png"
function set_bundle_display_options() { function set_bundle_display_options() {
osascript <<-EOF osascript <<-EOF
@ -295,11 +454,10 @@ function set_bundle_display_options() {
delay 5 -- sync delay 5 -- sync
end tell end tell
EOF EOF
} }
test -n "${DMGLocation}" && ( function make_dmg() {
cd "${DMGLocation}" cd "${1}"
BGSIZE=`file "$BACKGROUND" | awk -F , '/PNG/{print $2 }' | tr x ' '` BGSIZE=`file "$BACKGROUND" | awk -F , '/PNG/{print $2 }' | tr x ' '`
BG_W=`echo ${BGSIZE} | awk '{print $1 }'` BG_W=`echo ${BGSIZE} | awk '{print $1 }'`
@ -309,20 +467,20 @@ test -n "${DMGLocation}" && (
rm -f ${DMGNAME} rm -f ${DMGNAME}
rm -f ${COMPRESSEDDMGNAME} rm -f ${COMPRESSEDDMGNAME}
hdiutil create -size ${DMGSIZE:-"250m"} -fs HFS+ -volname "${LyxBase}" "${DMGNAME}" hdiutil create -type SPARSE -size ${DMGSIZE:-"250m"} -fs HFS+ -volname "${LyxBase}" "${DMGNAME}"
# Unmount currently mounted disk image # Unmount currently mounted disk image
test -d /Volumes/"${LyxBase}" && umount /Volumes/"${LyxBase}" test -d /Volumes/"${LyxBase}" && umount /Volumes/"${LyxBase}"
# Mount the disk image # Mount the disk image
hdiutil attach ${DMGNAME} hdiutil attach ${DMGNAME}.sparseimage
# Obtain device information # Obtain device information
DEVS=$(hdiutil attach ${DMGNAME} | cut -f 1) DEVS=$(hdiutil attach ${DMGNAME}.sparseimage | cut -f 1)
DEV=$(echo $DEVS | cut -f 1 -d ' ') DEV=$(echo $DEVS | cut -f 1 -d ' ')
VOLUME=$(mount |grep ${DEV} | cut -f 3 -d ' ') VOLUME=$(mount |grep ${DEV} | cut -f 3 -d ' ')
# copy in the application bundle # copy in the application bundle
cp -Rp ${LyxBase}.app ${VOLUME}/${LyxName}.app cp -Rp ${LyxAppDir}.app ${VOLUME}/${LyxName}.app
# copy in background image # copy in background image
mkdir -p ${VOLUME}/Pictures mkdir -p ${VOLUME}/Pictures
@ -336,6 +494,20 @@ test -n "${DMGLocation}" && (
hdiutil detach ${DEV} hdiutil detach ${DEV}
# Convert the disk image to read-only # Convert the disk image to read-only
hdiutil convert ${DMGNAME} -format UDBZ -o ${COMPRESSEDDMGNAME} hdiutil convert ${DMGNAME}.sparseimage -format UDBZ -o ${COMPRESSEDDMGNAME}
rm -f ${DMGNAME} rm -f ${DMGNAME}.sparseimage
}
build_lyx
convert_universal
copy_dictionaries
# ------------------------------
# Building distribution packages
# ------------------------------
test -n "${LyxAppZip}" && (
cd "${LyxAppPrefix}" && zip -r "${LyxAppZip}" .
) )
test -n "${DMGLocation}" && make_dmg "${DMGLocation}"

View File

@ -91,13 +91,29 @@ AspellConfig * getConfig()
AspellConfig * config = new_aspell_config(); AspellConfig * config = new_aspell_config();
#ifdef __APPLE__ #ifdef __APPLE__
char buf[2048] ; char buf[2048] ;
bool have_dict = false;
#ifdef ASPELL_FRAMEWORK
char * framework = ASPELL_FRAMEWORK ;
if ( getPrivateFrameworkPathName(buf, sizeof(buf), "Aspell.framework") ) { if ( strlen(framework) && getPrivateFrameworkPathName(buf, sizeof(buf), framework) ) {
lyx::support::FileName const base(buf); lyx::support::FileName const base(buf);
lyx::support::FileName const data(base.absFilename() + "/Resources/data");
lyx::support::FileName const dict(base.absFilename() + "/Resources/dict");
LYXERR(Debug::FILES, "aspell bundle path: " << buf);
have_dict = dict.isDirectory() && data.isDirectory();
if (have_dict) {
aspell_config_replace(config, "dict-dir", dict.absFilename().c_str());
aspell_config_replace(config, "data-dir", data.absFilename().c_str());
LYXERR(Debug::FILES, "aspell dict: " << dict);
}
}
#endif
if ( !have_dict ) {
lyx::support::FileName const base("/opt/local"); // check for mac-ports data
lyx::support::FileName const data(base.absFilename() + "/lib/aspell-0.60"); lyx::support::FileName const data(base.absFilename() + "/lib/aspell-0.60");
lyx::support::FileName const dict(base.absFilename() + "/share/aspell"); lyx::support::FileName const dict(base.absFilename() + "/share/aspell");
LYXERR(Debug::FILES, "aspell bundle path: " << buf); have_dict = dict.isDirectory() && data.isDirectory();
if (dict.isDirectory() && data.isDirectory()) { if (have_dict) {
aspell_config_replace(config, "dict-dir", dict.absFilename().c_str()); aspell_config_replace(config, "dict-dir", dict.absFilename().c_str());
aspell_config_replace(config, "data-dir", data.absFilename().c_str()); aspell_config_replace(config, "data-dir", data.absFilename().c_str());
LYXERR(Debug::FILES, "aspell dict: " << dict); LYXERR(Debug::FILES, "aspell dict: " << dict);

View File

@ -72,18 +72,19 @@ int getPrivateFrameworkPathName(char * buf, unsigned len, char const * framework
{ {
// Get our application's main bundle from Core Foundation // Get our application's main bundle from Core Foundation
CFBundleRef myAppsBundle = CFBundleGetMainBundle(); CFBundleRef myAppsBundle = CFBundleGetMainBundle();
int result = 0 ;
if (NULL != myAppsBundle) { if (NULL != myAppsBundle) {
CFURLRef baseURL = CFBundleCopyPrivateFrameworksURL( myAppsBundle ); CFURLRef baseURL = CFBundleCopyPrivateFrameworksURL( myAppsBundle );
if (NULL != baseURL) { if (NULL != baseURL) {
CFURLRef bundleURL = CFURLCreateCopyAppendingPathComponent( kCFAllocatorSystemDefault, baseURL, CFURLRef bundleURL = CFURLCreateCopyAppendingPathComponent( kCFAllocatorSystemDefault, baseURL,
CFStringCreateWithCString(kCFAllocatorSystemDefault, framework, kCFStringEncodingMacRoman), CFStringCreateWithCString( kCFAllocatorSystemDefault, framework, CFStringGetSystemEncoding() ),
false ); false );
if ( NULL != bundleURL && CFURLGetFileSystemRepresentation(bundleURL, TRUE, (UInt8*)buf, len) ) { if (NULL != bundleURL) {
return 1 ; result = CFURLGetFileSystemRepresentation( bundleURL, TRUE, (UInt8*)buf, len );
} }
} }
} }
return 0; return result;
} }
#endif #endif

View File

@ -94,7 +94,11 @@ NSString* FindLinkBackServer(NSString* bundleIdentifier, NSString* serverName, N
NSString* ret = nil ; NSString* ret = nil ;
NSFileManager* fm = [NSFileManager defaultManager] ; NSFileManager* fm = [NSFileManager defaultManager] ;
#if defined(__GNUC__) && (__GNUC__ == 4 && __GNUC_MINOR__ >= 2)
NSArray* contents = [fm contentsOfDirectoryAtPath: dir error: nil] ; NSArray* contents = [fm contentsOfDirectoryAtPath: dir error: nil] ;
#else
NSArray* contents = [fm directoryContentsAtPath: dir] ;
#endif
int idx ; int idx ;
NSLog(@"searching for %@ in folder: %@", serverName, dir) ; NSLog(@"searching for %@ in folder: %@", serverName, dir) ;