Globals
{
    Settings
    {
        variables
        {
            APACHEPROJECTNAME Apache OpenOffice
            OOOBASEVERSION 4.2
            OOOPACKAGEVERSION 4.2.0
            UREPACKAGEVERSION 4.2.0
            URELAYERVERSION 1
            BASISROOTNAME OpenOffice
            UNIXBASISROOTNAME openoffice
            HIDELICENSEDIALOG 1
            PACKAGEPREFIX 
            BASISPACKAGEPREFIX openoffice
            UREPACKAGEPREFIX openoffice
            SOLSUREPACKAGEPREFIX openoffice
            USE_FILEVERSION 1
            LIBRARYVERSION 10.0.0
            POOLPRODUCT 1
            PROGRESSBARCOLOR 14,133,205
            PROGRESSSIZE 432,4
            PROGRESSPOSITION 60,180
            PROGRESSFRAMECOLOR 207,208,211
            SHOWPROGRESSFRAME false
            NATIVEPROGRESS false
            REGISTRYLAYERNAME Layers
            SERVICEPACK 1
            CREATE_MSP_INSTALLSET 0
            PACKAGEMAP package_names.txt,package_names_ext.txt
            WINDOWSPATCHLEVEL 8
            OOOVENDOR Apache Software Foundation
            AOODOWNLOADNAME 1
            STARTCENTER_LAYOUT_STYLE 0
            NOLANGUAGESELECTIONPRODUCT 0
            BUILDIDCWS {buildidcws}
            OPENSOURCE 1
            OOOXMLFILEFORMATNAME OpenOffice.org XML
            OOOXMLFILEFORMATVERSION 1.0
            WRITERCOMPATIBILITYVERSIONOOO11 OpenOffice.org 1.1
            SERVICETAG_PRODUCTNAME Apache OpenOffice 4.2
            SERVICETAG_PRODUCTVERSION 4.2
            SERVICETAG_PARENTNAME Apache OpenOffice 4.2
            SERVICETAG_SOURCE {buildsource}{minor}(Build:{buildid})
            SERVICETAG_URN urn:uuid:500061aa-5666-11e0-8e00-080020a9ed93
            REGISTRATION_HOST https://registration.openoffice.org
            REGISTRATION_PRODUCT OpenOffice.org
            REGISTRATION_CID 926117
        }
    }
}

Apache_OpenOffice
{
    Settings
    {
        variables
        {
            FULLPRODUCTNAME Apache OpenOffice
            PRODUCTNAME OpenOffice
            PRODUCTVERSION 4.2.0
            PRODUCTEXTENSION 
            LONG_PRODUCTEXTENSION 
            SHORT_PRODUCTEXTENSION 
            POSTVERSIONEXTENSION
            POSTVERSIONEXTENSIONUNIX
            BRANDPACKAGEVERSION 4
            USERDIRPRODUCTVERSION 4
            ABOUTBOXPRODUCTVERSION 4.2.0
            BASEPRODUCTVERSION 4.2
            PCPFILENAME openoffice.pcp
            UPDATEURL https://ooo-updates.apache.org/aoonext/check.Update
            ADD_INCLUDE_FILES cliureversion.mk,clioootypesversion.mk,userland.txt,version.lst
            REMOVE_UPGRADE_CODE_FILE upgradecode_remove_ooo.txt
            ADDSYSTEMINTEGRATION 1
            EVAL
            PACKAGEVERSION 4.2.0
            PACKAGEREVISION {milestone}
            LICENSENAME ALv2
            GLOBALFILEGID gid_File_Lib_Vcl
            GLOBALPATCHFILEGID gid_File_Txt_Patchfiles
            SPELLCHECKERFILE spellchecker_selection.txt
            OPENSOURCE 1
            SETSTATICPATH 1
            AOODOWNLOADNAME 1
            AOODOWNLOADNAMEPREFIX Apache_OpenOffice
            XPDINSTALLER 0
            BETAUPGRADECODE
            STUBUPGRADECODE {0E7B27B8-D658-4BF9-98D6-EC361582EB4A}
            CHANGETARGETDIR 1
            USE_FILEVERSION 1
            LIBRARYVERSION 10.0.0
            PATCHCODEFILE ooo_patchcodes.txt
            DOWNLOADBANNER	ooobanner.bmp
            DOWNLOADBITMAP	ooobitmap.bmp
            DOWNLOADSETUPICO	ooosetup.ico
            RELATIVE_PATHES_IN_DDF 1
            STARTCENTER_ADDFEATURE_URL http://extensions.openoffice.org/
            STARTCENTER_INFO_URL http://www.openoffice.org
            STARTCENTER_TEMPLREP_URL http://templates.openoffice.org
            STARTCENTER_LAYOUT_STYLE 0
            DICT_REPO_URL http://extensions.openoffice.org/dictionaries
        }
        active			1
        compression		5
        script			setup_osl
        downloadname	Apache_OpenOffice_{productversion}_{os}_install_{languages}
        langpackdownloadname	Apache_OpenOffice_{productversion}_languagepack_{os}_install_{languages}
        include			{solarenvpath}/{os}/loader2,.,{localpath}/bin,{solarpath}/bin.{minor}/ooowoure,{solarpath}/bin.{minor}/osl,{solarpath}/bin.{minor}/desktop-integration/{pkgtype},{solarpath}/bin.{minor},{solarpath}/lib.{minor},{solarpath}/pck.{minor}/openoffice,{solarpath}/pck.{minor},{solarpath}/xml.{minor}/office/instance,{solarpath}/xml.{minor},../../external/common,{solarenvpath}/{os}/OOo_external
    }
}


Apache_OpenOffice_Dev
{
    Settings
    {
        variables
        {
            FULLPRODUCTNAME AOO-Developer-Build
            PRODUCTNAME AOO-Developer-Build
            PRODUCTVERSION 4.2.0
            PRODUCTEXTENSION 
            LONG_PRODUCTEXTENSION 
            SHORT_PRODUCTEXTENSION 
            BASISROOTNAME AOOdev
            UNIXBASISROOTNAME aoodev
            POSTVERSIONEXTENSION
            POSTVERSIONEXTENSIONUNIX
            BRANDPACKAGEVERSION 4
            USERDIRPRODUCTVERSION 4
            ABOUTBOXPRODUCTVERSION 4.2.0
            BASEPRODUCTVERSION 4.2
            DEVELOPMENTPRODUCT 1
            BASISPACKAGEPREFIX aoodev
            UREPACKAGEPREFIX aoodev
            SOLSUREPACKAGEPREFIX aoodev
            REGISTRYLAYERNAME LayerDev
            UPDATEURL https://ooo-updates.apache.org/aoonextdev/check.Update
            ADD_INCLUDE_FILES cliureversion.mk,clioootypesversion.mk,javaversion2.dat,userland.txt,version.lst
            EVAL
            PACKAGEVERSION 4.2.0
            PACKAGEREVISION {milestone}
            LICENSENAME ALv2
            GLOBALFILEGID gid_File_Lib_Vcl
            GLOBALPATCHFILEGID gid_File_Txt_Patchfiles
            SPELLCHECKERFILE spellchecker_selection.txt
            OPENSOURCE 1
            SETSTATICPATH 1
            AOODOWNLOADNAME 1
            AOODOWNLOADNAMEPREFIX Apache_OpenOffice-Dev
            XPDINSTALLER 0
            BETAUPGRADECODE
            STUBUPGRADECODE {0E7B27B8-D658-4BF9-98D6-EC361582EB4A}
            CHANGETARGETDIR 1
            USE_FILEVERSION 1
            JAVAPRODUCT 0
            LIBRARYVERSION 10.0.0
            PATCHCODEFILE ooodev_patchcodes.txt
            CODEFILENAME codes_ooodev.txt
            DOWNLOADBANNER	ooobanner.bmp
            DOWNLOADBITMAP	ooobitmap.bmp
            DOWNLOADSETUPICO	ooosetup.ico
            LOCALUSERDIR $ORIGIN/..
            RELATIVE_PATHES_IN_DDF 1
            STARTCENTER_ADDFEATURE_URL http://extensions.openoffice.org/
            STARTCENTER_INFO_URL http://www.openoffice.org
            STARTCENTER_TEMPLREP_URL http://templates.openoffice.org
            STARTCENTER_LAYOUT_STYLE 0
            DICT_REPO_URL http://extensions.openoffice.org/dictionaries
            SERVICETAG_URN urn:uuid:1680b00d-e45c-11de-82d6-080020a9ed93
        }
        active			1
        compression		5
        script			setup_osl
        downloadname	Apache_OpenOffice-dev_{productversion}_{os}_install_{languages}
        langpackdownloadname	Apache_OpenOffice_{productversion}_languagepack_{os}_install_{languages}
        include			{solarenvpath}/{os}/loader2,.,{localpath}/bin/dev,{localpath}/bin,{solarpath}/bin.{minor}/osl,{solarpath}/bin.{minor},{solarpath}/lib.{minor},{solarpath}/pck.{minor}/openoffice_dev,{solarpath}/pck.{minor}/openoffice,{solarpath}/pck.{minor},{solarpath}/xml.{minor}/office/instance,{solarpath}/xml.{minor},../../external/common,{solarenvpath}/{os}/OOo_external
    }
}


Apache_OpenOffice_SDK
{
    Settings
    {
        downloadname Apache_OpenOffice-SDK_{packageversion}_{os}_install_{languages}
        variables
        {
            FULLPRODUCTNAME Apache OpenOffice
            PRODUCTNAME OpenOffice
			PRODUCTDIRNAME OpenOffice_SDK
            PRODUCTVERSION 4.2.0
            PRODUCTEXTENSION
            LONG_PRODUCTEXTENSION
            SHORT_PRODUCTEXTENSION
            POSTVERSIONEXTENSION SDK
            POSTVERSIONEXTENSIONUNIX sdk
            BRANDPACKAGEVERSION 4
            PACKAGEVERSION 4.2.0
            PACKAGEREVISION {milestone}
            PACK_INSTALLED 1
            POOLPRODUCT 0
            DMG_VOLUMEEXTENSION SDK
            DATABASENAME openofficeorg40sdk
            NO_README_IN_ROOTDIR 1
            LICENSENAME ALv2
            IGNOREDIRECTORYLAYER 1
            NOSPACEINDIRECTORYNAME 1
            NOLANGUAGESELECTIONPRODUCT 1
            CHANGETARGETDIR 1
            DOWNLOADBANNER ooosdkbanner.bmp
            DOWNLOADBITMAP ooosdkbitmap.bmp
            DOWNLOADSETUPICO ooosetup.ico
            DONTUSESTARTMENUFOLDER 1
            RELATIVE_PATHES_IN_DDF 1
            AOODOWNLOADNAMEPREFIX Apache_OpenOffice-SDK
            STARTCENTER_ADDFEATURE_URL http://extensions.openoffice.org/
            STARTCENTER_INFO_URL http://www.openoffice.org
            STARTCENTER_TEMPLREP_URL http://templates.openoffice.org
            STARTCENTER_LAYOUT_STYLE 0
            DICT_REPO_URL http://extensions.openoffice.org/dictionaries
        }
        active 1
        compression 5
        script sdkoo
        include {solarenvpath}/{os}/loader2,{solarpath}/bin.{minor}/sdkoo,{solarpath}/bin.{minor}/osl,{solarpath}/bin.{minor},{solarpath}/lib.{minor},{solarenvpath}/{os}/MS
    }
}

Apache_OpenOffice_Beta_SDK
{
    Settings
    {
        downloadname Apache_OpenOffice-Beta-SDK_{packageversion}_{os}_install_{languages}
        variables
        {
            FULLPRODUCTNAME Apache OpenOffice Beta
            PRODUCTNAME OpenOffice Beta
            PRODUCTDIRNAME OpenOffice_SDK_Beta
            PRODUCTVERSION 4.2.0
            PRODUCTEXTENSION
            SHORT_PRODUCTEXTENSION
            POSTVERSIONEXTENSION SDK
            POSTVERSIONEXTENSIONUNIX sdk
            BRANDPACKAGEVERSION 4
            PACKAGEVERSION 4.2.0
            PACKAGEREVISION {milestone}
            PACK_INSTALLED 1
            POOLPRODUCT 0
            DMG_VOLUMEEXTENSION SDK
            DATABASENAME openofficeorg410betasdk
            NO_README_IN_ROOTDIR 1
            LICENSENAME ALv2
            IGNOREDIRECTORYLAYER 1
            NOSPACEINDIRECTORYNAME 1
            NOLANGUAGESELECTIONPRODUCT 1
            CHANGETARGETDIR 1
            DOWNLOADBANNER ooosdkbanner.bmp
            DOWNLOADBITMAP ooosdkbitmap.bmp
            DOWNLOADSETUPICO ooosetup.ico
            DONTUSESTARTMENUFOLDER 1
            RELATIVE_PATHES_IN_DDF 1
            AOODOWNLOADNAMEPREFIX Apache_OpenOffice_Beta-SDK
            STARTCENTER_ADDFEATURE_URL http://extensions.openoffice.org/
            STARTCENTER_INFO_URL http://www.openoffice.org
            STARTCENTER_TEMPLREP_URL http://templates.openoffice.org
            STARTCENTER_LAYOUT_STYLE 0
            DICT_REPO_URL http://extensions.openoffice.org/dictionaries
        }
        active 1
        compression 5
        script sdkoo
        include {solarenvpath}/{os}/loader2,{solarpath}/bin.{minor}/sdkoo,{solarpath}/bin.{minor}/osl,{solarpath}/bin.{minor},{solarpath}/lib.{minor},{solarenvpath}/{os}/MS
    }
}

Apache_OpenOffice_Dev_SDK
{
    Settings
    {
        downloadname Apache_OpenOffice-Dev-SDK_{packageversion}_{os}_install_{languages}
        variables
        {
            FULLPRODUCTNAME AOO-Developer-Build
            PRODUCTNAME AOO-Developer-Build
            PRODUCTVERSION 4.2.0
            PRODUCTEXTENSION
            LONG_PRODUCTEXTENSION
            SHORT_PRODUCTEXTENSION
            BASISROOTNAME OOo-dev
            UNIXBASISROOTNAME ooo-dev
            POSTVERSIONEXTENSION SDK
            POSTVERSIONEXTENSIONUNIX sdk
            BRANDPACKAGEVERSION 4
            PACKAGEVERSION 4.2.0
            PACKAGEREVISION {milestone}
            BASISPACKAGEPREFIX aoodev
            UREPACKAGEPREFIX aoodev
            SOLSUREPACKAGEPREFIX aoodev
            REGISTRYLAYERNAME LayerDev
            DEVELOPMENTPRODUCT 1
            PACK_INSTALLED 1
            POOLPRODUCT 0
            DMG_VOLUMEEXTENSION SDK
            DATABASENAME openofficeorg40devsdk
            NO_README_IN_ROOTDIR 1
            LICENSENAME ALv2
            IGNOREDIRECTORYLAYER 1
            NOSPACEINDIRECTORYNAME 1
            NOLANGUAGESELECTIONPRODUCT 1
            CHANGETARGETDIR 1
            DOWNLOADBANNER ooosdkbanner.bmp
            DOWNLOADBITMAP ooosdkbitmap.bmp
            DOWNLOADSETUPICO ooosetup.ico
            DONTUSESTARTMENUFOLDER 1
            RELATIVE_PATHES_IN_DDF 1
            AOODOWNLOADNAMEPREFIX Apache_OpenOffice-Dev-SDK
            STARTCENTER_ADDFEATURE_URL http://extensions.openoffice.org/
            STARTCENTER_INFO_URL http://www.openoffice.org
            STARTCENTER_TEMPLREP_URL http://templates.openoffice.org
            STARTCENTER_LAYOUT_STYLE 0
            DICT_REPO_URL http://extensions.openoffice.org/dictionaries
        }
        active 1
        compression 5
        script sdkoo
        include {solarenvpath}/{os}/loader2,{solarpath}/bin.{minor}/sdkoo,{solarpath}/bin.{minor}/osl,{solarpath}/bin.{minor},{solarpath}/lib.{minor},{solarenvpath}/{os}/MS
    }
}

Apache_OpenOffice_Beta
{
    Settings
    {
        variables
        {
            FULLPRODUCTNAME Apache OpenOffice Beta
            PRODUCTNAME OpenOffice Beta
            PRODUCTVERSION 4.2.0
            PRODUCTEXTENSION
            SHORT_PRODUCTEXTENSION
            BASISROOTNAME AOOBeta
            BASISPACKAGEPREFIX aoobeta
            UREPACKAGEPREFIX aoobeta
            SOLSUREPACKAGEPREFIX aoobeta
            POSTVERSIONEXTENSION
            BRANDPACKAGEVERSION 4
            USERDIRPRODUCTVERSION 4
            ABOUTBOXPRODUCTVERSION 4.2.0
            BASEPRODUCTVERSION 4.2
            UPDATEURL https://ooo-updates.apache.org/aoonextbeta/check.Update
            ADD_INCLUDE_FILES cliureversion.mk,clioootypesversion.mk,userland.txt,version.lst
            REMOVE_UPGRADE_CODE_FILE upgradecode_remove_ooo.txt
            ADDSYSTEMINTEGRATION 0
            EVAL
            PACKAGEVERSION 4.2.0
            PACKAGEREVISION {milestone}
            LICENSENAME ALv2
            GLOBALFILEGID gid_File_Lib_Vcl
            GLOBALPATCHFILEGID gid_File_Txt_Patchfiles
            SPELLCHECKERFILE spellchecker_selection.txt
            SETSTATICPATH 1
            AOODOWNLOADNAME 1
            AOODOWNLOADNAMEPREFIX Apache_OpenOffice_Beta
            XPDINSTALLER 0
            BETAUPGRADECODE
            STUBUPGRADECODE {0E7B27B8-D658-4BF9-98D6-EC361582EB4A}
            CHANGETARGETDIR 1
            USE_FILEVERSION 1
            LIBRARYVERSION 10.0.0
            PATCHCODEFILE ooo_patchcodes.txt
            DOWNLOADBANNER	ooobanner.bmp
            DOWNLOADBITMAP	ooobitmap.bmp
            DOWNLOADSETUPICO	ooosetup.ico
            RELATIVE_PATHES_IN_DDF 1
            STARTCENTER_ADDFEATURE_URL http://extensions.openoffice.org/
            STARTCENTER_INFO_URL http://www.openoffice.org
            STARTCENTER_TEMPLREP_URL http://templates.openoffice.org
            STARTCENTER_LAYOUT_STYLE 0
            DICT_REPO_URL http://extensions.openoffice.org/dictionaries
        }
        active			1
        compression		5
        script			setup_osl
        downloadname	Apache_OpenOffice_Beta_{productversion}_{os}_install_{languages}
        langpackdownloadname	Apache_OpenOffice_Beta_{productversion}_languagepack_{os}_install_{languages}
        include			{solarenvpath}/{os}/loader2,.,{localpath}/bin/beta,{localpath}/bin,{solarpath}/bin.{minor}/ooowoure,{solarpath}/bin.{minor}/osl,{solarpath}/bin.{minor}/desktop-integration/{pkgtype},{solarpath}/bin.{minor},{solarpath}/lib.{minor},{solarpath}/pck.{minor}/openoffice,{solarpath}/pck.{minor},{solarpath}/xml.{minor}/office/instance,{solarpath}/xml.{minor},../../external/common,{solarenvpath}/{os}/OOo_external
    }
}
