#!/bin/bash # # Additional functions for the OpenOffice.org build script. # # Czech Native-Lang team (http://cs.openoffice.org/) # # # (c) Pavel Janík , 2003-2005 # (c) Josef Cacek , 2003-2004 # # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # Function unpacking the source file if it exists or checkit out from CVS # # Syntax: UnpackSource UnpackSource () { if [ -f ${SOURCES}/OOo_${VERSION}_source.tar.gz ] then ${TAR} xfz ${SOURCES}/OOo_${VERSION}_source.tar.gz else echo "Checking out ${VERSION} from CVS..." mkdir -p ooo_${VERSION}_src cd ooo_${VERSION}_src cvs -d :pserver:anoncvs@anoncvs.services.openoffice.org:/cvs -z9 co -r ${VERSION} OpenOffice2 >ooo_${VERSION}_src.cvslog 2>&1 || { echo ERROR; exit; } cd .. fi } # Apply patch and exit in case of error # # Syntax: ApplyPatch ApplyPatch () { APPLYPATCHARGS=-p1 [ "x$2" != "x" ] && APPLYPATCHARGS=$2 if [ -f ${BUILD}/$1 ] then APPLYPATCH=${BUILD}/$1 else APPLYPATCH=${PATCHES}/${VERSION}/$1 fi # First test if the patch is OK ${PATCH} --dry-run ${APPLYPATCHARGS} <${APPLYPATCH} || { echo "patch $1 not applied correctly, please fix it and press Enter to continue!" read } # If it is, apply it! ${PATCH} ${APPLYPATCHARGS} <${APPLYPATCH} } # Apply patch from child workspace # # Syntax: ApplyCWSPatch module patch # ApplyCWSPatch () { cd $1 ApplyPatch $2 -p0 cd .. } # Apply child workspace changes # # Syntax: ApplyCWS cwsname # ApplyCWS () { CWS=$1 for module in `ls -1 ${PATCHES}/${VERSION}/CWS-${CWS}*|sed "s#.diff##"|sed "s#.*CWS-${CWS}-##"` do ApplyCWSPatch $module CWS-${CWS}-$module.diff done } # Unpack gpc # # Syntax: UnpackGPC # UnpackGPC () { ( cd external/gpc ${TAR} xvfz ${SOURCES}/gpc231.tar.Z mv gpc231/* . rmdir gpc231 ) } # Prepare ccache # # Syntax: PrepareCCache # PrepareCCache () { # FIXME: check for system ccache # which ccache on MacOS X returns 0 even if there is no ccache ;-) ${TAR} xfz ${SOURCES}/ccache-${CCACHEVERSION}.tar.gz ( cd ccache-${CCACHEVERSION} ./configure --prefix=${BUILD} make make install rm -rf ../ccache-${CCACHEVERSION} ) } # Prepare dpkg # # Syntax: PrepareDpkg # PrepareDpkg () { ${TAR} xfz ${SOURCES}/dpkg_${DPKGVERSION}.tar.gz ( cd dpkg-${DPKGVERSION} ./configure --prefix=${BUILD} --disable-nls --without-sgml-doc make make install rm -rf ../dpkg-${DPKGVERSION} ) } # Prepare translate tools # # Syntax: PrepareTranslate # PrepareTranslate () { ${TAR} xfz ${SOURCES}/translate-toolkit-${TRANSLATEVERSION}.tar.gz ( cd translate-toolkit-${TRANSLATEVERSION} ./setup.py install --home=${BUILD} rm -rf ../translate-toolkit-${TRANSLATEVERSION} ) } # Prepare Ant # # Syntax: PrepareAnt # PrepareAnt () { unzip -q ${SOURCES}/apache-ant-${ANTVERSION}-bin.zip chmod 755 apache-ant-${ANTVERSION}/bin/ant } # Prepare localization tools # # Syntax: PrepareLocalizeTool # PrepareLocalizeTool () { ( cd transex3 build.pl --all || { date echo "Can't prepare localize tool, fix the bug above." read } deliver.pl ) } # Prepare debug GSI file from normal GSI files # # Syntax: PrepareDebugGSI # PrepareDebugGSI () { for gsi in ${BUILD}/GSI_*.sdf do awk -F' ' 'BEGIN{OFS=" "; NUMBER=0} {if ($10 != "en-US") {$11=NUMBER ":" $11; $12=NUMBER ":" $12; $13=NUMBER ":" $13; $14=NUMBER ":" $14}; print; if ($10 != "en-US") NUMBER++}' <$gsi >${BUILD}/debug_`basename $gsi` done } # Merge GSI file to sources # # Syntax: MergeGSI cs [debug] # MergeGSI () { ISOCODE=$1 DEBUG=$2 LOCALIZE=localize if [ "x$DEBUG" = "xdebug" ] then GSI=${BUILD}/debug_GSI_${ISOCODE}.sdf else GSI=${BUILD}/GSI_${ISOCODE}.sdf fi [ ! -r ${GSI} ] && { echo "GSI file ${GSI} is not readable, fix it!" exit } ${LOCALIZE} -m -x -l ${ISOCODE} -f ${GSI} mkdir -p ${BUILD_OUTPUT_DIRECTORY}/build [ -f ${GSI}.err ] && gsicheck -c ${GSI} >${BUILD_OUTPUT_DIRECTORY}/build/GSI_${ISOCODE}.sdf.err 2>&1 } # Create native language packages # # Syntax: CreateNativeLangPacks [debug] # CreateNativeLangPacks () { # Do not remove RPM packages for language packs (see #i36837#) export DONT_REMOVE_PACKAGE="yes" # Create the directory where language packs will be copied LANGPACKSDIRECTORY=${BUILD_OUTPUT_DIRECTORY}/OOo_${VERSION}_native_${OOARCHENVIRONMENT}_langpacks [ "x$1" != "x" ] && LANGPACKSDIRECTORY=${LANGPACKSDIRECTORY}_$1 ( cd instsetoo_native/util dmake ooolanguagepack ) # Remove useless shell scripts. rm -rf instsetoo_native/${OOOUTPATH}.pro/OpenOffice_languagepack/*/install/*/{RPMS,packages}/*sh if [ ${OOO_BUILD_SYSTEM} == "Windows" ] then mkdir -p ${LANGPACKSDIRECTORY} ( cd instsetoo_native/${OOOUTPATH}.pro/OpenOffice_languagepack/msi/install/ for LANGUAGE in ${SUPPORTEDLANGUAGES} do [ -d ${LANGUAGE}_download ] && mv ${LANGUAGE}_download/*.exe ${LANGPACKSDIRECTORY} [ -d en-US_${LANGUAGE}_download ] && mv en-US_${LANGUAGE}_download/*.exe ${LANGPACKSDIRECTORY} # VERIFY: remove directory not needed rm -rf ${LANGUAGE} en-US_${LANGUAGE} done ) elif [ ${OOO_BUILD_SYSTEM} == "Linux" -o ${OOO_BUILD_SYSTEM} == "Linux64" ] then mkdir -p ${LANGPACKSDIRECTORY}_rpm cp -r instsetoo_native/${OOOUTPATH}.pro/OpenOffice_languagepack/rpm/install/*/RPMS/* ${LANGPACKSDIRECTORY}_rpm mkdir -p ${LANGPACKSDIRECTORY}_deb # FIXME: pack them in one tar.gz... cp -r instsetoo_native/${OOOUTPATH}.pro/OpenOffice_languagepack/deb/install/*/DEBS/*.deb ${LANGPACKSDIRECTORY}_deb elif [ ${OOO_BUILD_SYSTEM} == "Solaris" ] then mkdir -p ${LANGPACKSDIRECTORY} # FIXME: verify! tar.gz pack packages? cp -r instsetoo_native/${OOOUTPATH}.pro/OpenOffice_languagepack/install/*/packages/* ${LANGPACKSDIRECTORY} elif [ ${OOO_BUILD_SYSTEM} == "MacOSX" ] then mkdir -p ${LANGPACKSDIRECTORY} ( cd instsetoo_native/${OOOUTPATH}.pro/OpenOffice_languagepack/portable/install/ for i in ${SUPPORTEDLANGUAGES} do [ $i == "log" ] && continue cd $i/darwin-*-powerpc # FIXME: verify! tar.gz pack packages? tar cvfz ${LANGPACKSDIRECTORY}/openofficeorg-$i.tar.gz * cd ../.. done ) fi } # Create native packages for installers # # Syntax: CreateNativeInstallers # CreateNativeInstallers () { INSTSETSDIR=instsetoo_native/${OOOUTPATH}.pro/OpenOffice/rpm/install INSTSETSDIRDEB=instsetoo_native/${OOOUTPATH}.pro/OpenOffice/deb/install INSTSETSDIRWIN=instsetoo_native/${OOOUTPATH}.pro/OpenOffice/msi/install if [ ${OOO_BUILD_SYSTEM} = "Windows" ] then ( cd ${INSTSETSDIRWIN} for LANGUAGE in ${SUPPORTEDLANGUAGES} do mv ${LANGUAGE}_download/*.exe ${BUILD_OUTPUT_DIRECTORY} [ -d en-US_${LANGUAGE}_download ] && mv en-US_${LANGUAGE}_download/*.exe ${BUILD_OUTPUT_DIRECTORY} # VERIFY: remove directory not needed done ) elif [ ${OOO_BUILD_SYSTEM} == "Linux" -o ${OOO_BUILD_SYSTEM} == "Linux64" ] then # RPM packages ( # Save user installation scripts to copy them back to instsets later cp -r solver/${BUILD_NUMBER}/${OOOUTPATH}.pro/bin/userscripts/* ${BUILD_OUTPUT_DIRECTORY} cd ${INSTSETSDIR} for LANGUAGE in ${SUPPORTEDLANGUAGES} do cd $LANGUAGE cp -r ${BUILD_OUTPUT_DIRECTORY}/{install,uninstall} . tar cvfz ${BUILD_OUTPUT_DIRECTORY}/OOo_${VERSION}_${OOARCHENVIRONMENT}_install_${LANGUAGE}_rpm.tar.gz \ RPMS install uninstall rm -rf RPMS cd .. done rm ${BUILD_OUTPUT_DIRECTORY}/{install,uninstall} ) ( cd ${INSTSETSDIRDEB} for LANGUAGE in * do [ ! -d $LANGUAGE/DEBS ] && continue cd $LANGUAGE tar cvfz ${BUILD_OUTPUT_DIRECTORY}/OOo_${VERSION}_${OOARCHENVIRONMENT}_install_${LANGUAGE}_deb.tar.gz DEBS rm -rf DEBS cd .. done ) elif [ ${OOO_BUILD_SYSTEM} = "Solaris" ] then ( # VERIFY: complete installations packaging... cp -r solver/${BUILD_NUMBER}/${OOOUTPATH}.pro/bin/userscripts/* ${BUILD_OUTPUT_DIRECTORY} cd ${INSTSETSDIR} for LANGUAGE in * do [ $LANGUAGE == "log" ] && continue cd $LANGUAGE cp -r ${BUILD_OUTPUT_DIRECTORY}/{install,uninstall,admin} . # FIXME: test! /usr/bin/tar cvfE - packages install uninstall admin | gzip -c > ${BUILD_OUTPUT_DIRECTORY}/OOo_${VERSION}_${OOARCHENVIRONMENT}_install_${LANGUAGE}.tar.gz cd .. done rm ${BUILD_OUTPUT_DIRECTORY}/{admin,install,uninstall} ) elif [ ${OOO_BUILD_SYSTEM} = "MacOSX" ] then # VERIFY mv instsetoo_native/${OOOUTPATH}.pro/OpenOffice/install/*/OpenOffice.org*.dmg ${BUILD_OUTPUT_DIRECTORY} fi } # Copy URE packages # # Syntax: CreateURE # CreateURE () { INSTSETSDIR=instsetoo_native/${OOOUTPATH}.pro/URE/rpm/install INSTSETSDIRDEB=instsetoo_native/${OOOUTPATH}.pro/URE/deb/install INSTSETSDIRWIN=instsetoo_native/${OOOUTPATH}.pro/URE/msi/install UREDESTDIR=${BUILD_OUTPUT_DIRECTORY}/URE mkdir -p ${UREDESTDIR} if [ ${OOO_BUILD_SYSTEM} = "Windows" ] then mv ${INSTSETSDIRWIN}/en-US_download/*.exe ${UREDESTDIR} elif [ ${OOO_BUILD_SYSTEM} == "Linux" -o ${OOO_BUILD_SYSTEM} == "Linux64" ] then mv ${INSTSETSDIR}/en-US/RPMS/*.rpm ${UREDESTDIR} mv ${INSTSETSDIRDEB}/en-US/DEBS/*.deb ${UREDESTDIR} elif [ ${OOO_BUILD_SYSTEM} = "Solaris" ] then # FIXME echo FIXME elif [ ${OOO_BUILD_SYSTEM} = "MacOSX" ] then echo "FIXME: no URE packaging for now." fi } # Create SDK archive # # Syntax: CreateSDK # CreateSDK() { SDKOUT=${BUILD_OUTPUT_DIRECTORY}/SDK mkdir -p ${SDKOUT} INSTSETSDIR=instsetoo_native/${OOOUTPATH}.pro/OpenOffice_SDK/rpm/install INSTSETSDIRDEB=instsetoo_native/${OOOUTPATH}.pro/OpenOffice_SDK/deb/install INSTSETSDIRWIN=instsetoo_native/${OOOUTPATH}.pro/OpenOffice_SDK/msi/install if [ ${OOO_BUILD_SYSTEM} = "Windows" ] then mv ${INSTSETSDIRWIN}/en-US_download/*.exe ${SDKOUT} elif [ ${OOO_BUILD_SYSTEM} == "Linux" -o ${OOO_BUILD_SYSTEM} == "Linux64" ] then mv ${INSTSETSDIR}/en-US/RPMS/*.rpm ${SDKOUT} mv ${INSTSETSDIRDEB}/en-US/DEBS/*.deb ${SDKOUT} elif [ ${OOO_BUILD_SYSTEM} = "Solaris" ] then # FIXME echo FIXME elif [ ${OOO_BUILD_SYSTEM} = "MacOSX" ] then # FIXME echo FIXME fi } # # This function extracts GSI files for all supported languages # # VERIFY ExtractGSI () { LOCALIZE=localize [ ${OOO_BUILD_SYSTEM} = "Windows" ] && LOCALIZE="guw.pl -env ${LOCALIZE}" LANGUAGESINSOURCE=`grep ^completelangiso solenv/inc/postset.mk |sed 's#completelangiso=##'` GSIOUT=${BUILD_OUTPUT_DIRECTORY}/GSI mkdir -p ${GSIOUT} # FIXME: Use $alllanguages from postset.mk somehow? for language in ${LANGUAGESINSOURCE} do # FIXME: skip en-US? ${LOCALIZE} -e -l en-US,${language}=en-US -f ${GSIOUT}/${language}.sdf done } # # This function extracts PO files for all supported languages # # VERIFY ExtractPO () { unset PYTHONHOME export PYTHONPATH=${BUILD}/lib/python GSIOUT=${BUILD_OUTPUT_DIRECTORY}/GSI POOUT=${BUILD_OUTPUT_DIRECTORY}/PO mkdir -p ${POOUT} LANGUAGESINSOURCE=`grep ^completelangiso solenv/inc/postset.mk |sed 's#completelangiso=##'` for language in ${LANGUAGESINSOURCE} do # Do not generate PO files for English and German [ ${language} = "en-US" ] && continue [ ${language} = "de" ] && continue mkdir -p ${language} # FIXME: still produces error messages when there is only one entry for string (en-US only) ${BUILD}/bin/oo2po ${GSIOUT}/${language}.sdf ${language} tar cvfz ${POOUT}/OpenOffice.org-${VERSION}-PO-${language}.tar.gz ${language} rm -rf ${language} done } # # This function extracts POT files # ExtractPOT () { GSIOUT=${BUILD_OUTPUT_DIRECTORY}/GSI POTOUT=${BUILD_OUTPUT_DIRECTORY}/POT mkdir -p ${GSIOUT} ${POTOUT} LOCALIZE=localize [ ${OOO_BUILD_SYSTEM} = "Windows" ] && LOCALIZE="guw.pl -env ${LOCALIZE}" echo "Generating English (US) GSI/SDF file..." ${LOCALIZE} -e -l en-US -f ${GSIOUT}/en-US.sdf unset PYTHONHOME export PYTHONPATH=${BUILD}/lib/python mkdir -p pot echo "Generating English (US) POT files..." ${BUILD}/bin/oo2po -P ${GSIOUT}/en-US.sdf pot cp ${GSIOUT}/en-US.sdf . tar cvfz ${POTOUT}/OpenOffice.org-${VERSION}-POT.tar.gz pot en-US.sdf rm -rf pot } # # This function extracts all README.html files for all supported languages # # VERIFY! ExtractREADME () { READMEOUT=${BUILD_OUTPUT_DIRECTORY}/READMEs mkdir -p ${READMEOUT} ( export WITH_LANG=ALL cd readlicense_oo build.pl ) cp `find readlicense_oo/${OOOUTPATH}.pro -name readme*.html` ${READMEOUT} }