Globals
{
    Settings
    {
        variables
        {
            APACHEPROJECTNAME Apache OpenOffice
            OOOBASEVERSION 4.0
            OOOPACKAGEVERSION 4.0.1
            UREPACKAGEVERSION 4.0.1
            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
            UPDATE_DATABASE 1
            CREATE_MSP_INSTALLSET 0
            UPDATE_DATABASE_LISTNAME finals_instsetoo.txt
            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.0
            SERVICETAG_PRODUCTVERSION 4.0
            SERVICETAG_PARENTNAME Apache OpenOffice 4.0
            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.0.1
            PRODUCTEXTENSION 
            LONG_PRODUCTEXTENSION 
            SHORT_PRODUCTEXTENSION 
            POSTVERSIONEXTENSION
            POSTVERSIONEXTENSIONUNIX
            BRANDPACKAGEVERSION 4
            USERDIRPRODUCTVERSION 4
            ABOUTBOXPRODUCTVERSION 4.0.1
            BASEPRODUCTVERSION 4.0
            PCPFILENAME openoffice.pcp
            UPDATEURL https://ooo-updates.apache.org/aoo401/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.0.1
            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_wJRE
{
    Settings
    {
        variables
        {
            FULLPRODUCTNAME Apache OpenOffice
            PRODUCTNAME OpenOffice
            PRODUCTVERSION 4.0.1
            PRODUCTEXTENSION 
            LONG_PRODUCTEXTENSION 
            SHORT_PRODUCTEXTENSION 
            POSTVERSIONEXTENSION
            POSTVERSIONEXTENSIONUNIX
            BRANDPACKAGEVERSION 4
            USERDIRPRODUCTVERSION 4
            ABOUTBOXPRODUCTVERSION 4.0.1
            BASEPRODUCTVERSION 4.0
            UPDATEURL https://ooo-updates.apache.org/aoo401/check.Update
            ADD_INCLUDE_FILES cliureversion.mk,clioootypesversion.mk,javaversion2.dat,userland.txt,version.lst
            REMOVE_UPGRADE_CODE_FILE upgradecode_remove_ooo.txt
            ADDSYSTEMINTEGRATION 1
            EVAL
            PACKAGEVERSION 4.0.1
            PACKAGEREVISION {milestone}
            LICENSENAME ALv2
            WITHJREPRODUCT 1
            GLOBALFILEGID gid_File_Lib_Vcl
            GLOBALPATCHFILEGID gid_File_Txt_Patchfiles
            SPELLCHECKERFILE spellchecker_selection.txt
            OPENSOURCE 1
            SETSTATICPATH 1
            AOODOWNLOADNAME 1
            AOODOWNLOADNAMEPREFIX Apache_OpenOffice_wJRE
            XPDINSTALLER 1
            BETAUPGRADECODE
            STUBUPGRADECODE {0E7B27B8-D658-4BF9-98D6-EC361582EB4A}
            CHANGETARGETDIR 1
            USE_FILEVERSION 1
            LIBRARYVERSION 10.0.0
            PATCHCODEFILE ooo_patchcodes.txt
            JAVAPRODUCT 1
            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_osljre
        downloadname	Apache_OpenOffice_{productversion}_{os}_installwjre_{languages}
        include			{solarenvpath}/{os}/loader2,.,{localpath}/bin,{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.0.1
            PRODUCTEXTENSION 
            LONG_PRODUCTEXTENSION 
            SHORT_PRODUCTEXTENSION 
            BASISROOTNAME AOOdev
            UNIXBASISROOTNAME aoodev
            POSTVERSIONEXTENSION
            POSTVERSIONEXTENSIONUNIX
            BRANDPACKAGEVERSION 4
            USERDIRPRODUCTVERSION 4
            ABOUTBOXPRODUCTVERSION 4.0.1
            BASEPRODUCTVERSION 4.0
            DEVELOPMENTPRODUCT 1
            BASISPACKAGEPREFIX aoodev
            UREPACKAGEPREFIX aoodev
            SOLSUREPACKAGEPREFIX aoodev
            REGISTRYLAYERNAME LayerDev
            UPDATEURL https://ooo-updates.apache.org/aoo401/check.Update
            ADD_INCLUDE_FILES cliureversion.mk,clioootypesversion.mk,javaversion2.dat,userland.txt,version.lst
            EVAL
            PACKAGEVERSION 4.0.1
            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
    }
}

URE
{
    Settings
    {
        downloadname URE_{productversion}_{os}_install_{languages}
        variables
        {
            FULLPRODUCTNAME URE
            PRODUCTNAME URE
            PRODUCTVERSION 4.0.1
            PACKAGEVERSION 4.0
            PACKAGEREVISION 1
            PRODUCTEXTENSION
            LONG_PRODUCTEXTENSION
            SHORT_PRODUCTEXTENSION
            LICENSENAME ALv2
            SETSTATICPATH 1
            NOVERSIONINDIRNAME 1
            PCPFILENAME ure.pcp
            POOLPRODUCT 0
            GLOBALFILEGID gid_File_Dl_Cppu
            DOWNLOADBANNER urebanner.bmp
            DOWNLOADBITMAP urebitmap.bmp
            DOWNLOADSETUPICO ooosetup.ico
            DONTUSESTARTMENUFOLDER 1
            RELATIVE_PATHES_IN_DDF 1
            NOLANGUAGESELECTIONPRODUCT 1
            AOODOWNLOADNAMEPREFIX Apache_OpenOffice-URE
            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
            ADD_INCLUDE_FILES cliureversion.mk,clioootypesversion.mk,version.lst
            PACKAGEMAP package_names_ext.txt
            DICT_REPO_URL http://extensions.openoffice.org/dictionaries
        }
        active 1
        compression 5
        script ure
        include {solarenvpath}/{os}/loader2,{solarpath}/bin.{minor}/ure,{solarpath}/bin.{minor}/osl,{solarpath}/bin.{minor},{solarpath}/lib.{minor},{solarpath}/xml.{minor},{solarenvpath}/{os}/MS
    }
}

Apache_OpenOffice_SDK
{
    Settings
    {
        downloadname Apache_OpenOffice-SDK_{packageversion}_{os}_install_{languages}
        variables
        {
            FULLPRODUCTNAME Apache OpenOffice
            PRODUCTNAME OpenOffice
            PRODUCTVERSION 4.0.1
            PRODUCTEXTENSION
            LONG_PRODUCTEXTENSION
            SHORT_PRODUCTEXTENSION
            POSTVERSIONEXTENSION SDK
            POSTVERSIONEXTENSIONUNIX sdk
            BRANDPACKAGEVERSION 4
            PACKAGEVERSION 4.0.1
            PACKAGEREVISION {milestone}
            PACK_INSTALLED 1
            POOLPRODUCT 0
            DMG_VOLUMEEXTENSION SDK
            DATABASENAME openofficeorg40sdk
            NO_README_IN_ROOTDIR 1
            LICENSENAME ALv2
            IGNOREDIRECTORYLAYER 1
            NOVERSIONINDIRNAME 0
            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_Dev_SDK
{
    Settings
    {
        downloadname Apache_OpenOffice-Dev-SDK_{packageversion}_{os}_install_{languages}
        variables
        {
            FULLPRODUCTNAME AOO-Developer-Build
            PRODUCTNAME AOO-Developer-Build
            PRODUCTVERSION 4.0.1
            PRODUCTEXTENSION
            LONG_PRODUCTEXTENSION
            SHORT_PRODUCTEXTENSION
            BASISROOTNAME OOo-dev
            UNIXBASISROOTNAME ooo-dev
            POSTVERSIONEXTENSION SDK
            POSTVERSIONEXTENSIONUNIX sdk
            BRANDPACKAGEVERSION 4
            PACKAGEVERSION 4.0.1
            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
            NOVERSIONINDIRNAME 0
            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
    }
}
