From 26c142ca5f2b405b02ab5701dfaeab7bf281a727 Mon Sep 17 00:00:00 2001 From: Tor Lillqvist Date: Tue, 8 Jan 2013 23:47:02 +0200 Subject: Kill the ancient StarOffice "patch" concept For Windows, superseded by Windows Installer patching (i.e., creating .msp files), which is something completely different. (And quite hard to get working... but still a saner approach, I think.) For Linux, many distros use delta RPMs or similar, so no home-grown LO-specific patching mechanism is needed. Remove the -patch and -patchinc command-line options to make_installer.pl and all code that was invoked only when using those. Remove the PATCH and PATCH_ONLY flags in scp2. Remove the patchmsi.dll Windows Installer custom action. Change-Id: I09e949e601a969f88eff60067faa2352f4f89537 Reviewed-on: https://gerrit.libreoffice.org/1605 Reviewed-by: Michael Stahl Tested-by: Miklos Vajna --- android/experimental/DocumentLoader/Makefile | 1 - android/experimental/LibreOffice4Android/Makefile | 1 - android/qa/desktop/Makefile | 1 - ios/CustomTarget_Viewer_app.mk | 1 - scp2/inc/macros.inc | 11 - scp2/source/activex/file_activex.scp | 7 - scp2/source/calc/registryitem_calc.scp | 1 - scp2/source/draw/registryitem_draw.scp | 1 - scp2/source/impress/registryitem_impress.scp | 1 - scp2/source/ooo/common_brand.scp | 20 +- scp2/source/ooo/directory_ooo_macosx.scp | 1 - scp2/source/ooo/file_library_ooo.scp | 15 +- scp2/source/ooo/file_ooo.scp | 9 - scp2/source/ooo/module_hidden_ooo.scp | 1 - scp2/source/ooo/windowscustomaction_ooo.scp | 69 -- scp2/source/smoketest/smoketest.scp | 1 - scp2/source/writer/registryitem_writer.scp | 1 - setup_native/prj/build.lst | 1 - .../customactions/languagepacks/respintest.cxx | 33 +- .../source/win32/customactions/patch/exports.dxp | 8 - .../source/win32/customactions/patch/makefile.mk | 75 --- .../win32/customactions/patch/swappatchfiles.cxx | 717 --------------------- solenv/bin/modules/installer.pm | 78 +-- solenv/bin/modules/installer/archivefiles.pm | 67 -- solenv/bin/modules/installer/control.pm | 1 - solenv/bin/modules/installer/epmfile.pm | 468 +------------- solenv/bin/modules/installer/globals.pm | 6 - solenv/bin/modules/installer/parameter.pm | 31 - solenv/bin/modules/installer/scriptitems.pm | 67 -- solenv/bin/modules/installer/simplepackage.pm | 16 +- solenv/bin/modules/installer/systemactions.pm | 1 - .../bin/modules/installer/windows/createfolder.pm | 2 - solenv/bin/modules/installer/windows/directory.pm | 5 +- solenv/bin/modules/installer/windows/feature.pm | 1 - solenv/bin/modules/installer/windows/idtglobal.pm | 29 - solenv/bin/modules/installer/windows/inifile.pm | 19 - .../bin/modules/installer/windows/mergemodule.pm | 2 +- solenv/bin/modules/installer/windows/msiglobal.pm | 16 +- solenv/bin/modules/installer/windows/property.pm | 40 -- solenv/bin/modules/installer/windows/upgrade.pm | 109 ++-- solenv/bin/modules/installer/worker.pm | 383 +---------- solenv/bin/modules/installer/ziplist.pm | 3 +- solenv/bin/oochkpatch | 23 - solenv/bin/oochkpatch.pl | 292 --------- 44 files changed, 73 insertions(+), 2562 deletions(-) delete mode 100644 setup_native/source/win32/customactions/patch/exports.dxp delete mode 100644 setup_native/source/win32/customactions/patch/makefile.mk delete mode 100644 setup_native/source/win32/customactions/patch/swappatchfiles.cxx delete mode 100755 solenv/bin/oochkpatch delete mode 100644 solenv/bin/oochkpatch.pl diff --git a/android/experimental/DocumentLoader/Makefile b/android/experimental/DocumentLoader/Makefile index 6cd8a294adb5..193184efdd4c 100644 --- a/android/experimental/DocumentLoader/Makefile +++ b/android/experimental/DocumentLoader/Makefile @@ -123,7 +123,6 @@ copy-stuff: echo 'AllLanguages=en-US' >> assets/program/versionrc echo 'BuildVersion=' >> assets/program/versionrc echo 'buildid=dead-beef' >> assets/program/versionrc - echo 'ProductBuildid=3' >> assets/program/versionrc echo 'ProductMajor=360' >> assets/program/versionrc echo 'ProductMinor=1' >> assets/program/versionrc echo 'ReferenceOOoMajorMinor=3.6' >> assets/program/versionrc diff --git a/android/experimental/LibreOffice4Android/Makefile b/android/experimental/LibreOffice4Android/Makefile index eded9e64c4e6..284e9c38b384 100644 --- a/android/experimental/LibreOffice4Android/Makefile +++ b/android/experimental/LibreOffice4Android/Makefile @@ -100,7 +100,6 @@ copy-stuff: echo 'AllLanguages=en-US' >> assets/program/versionrc echo 'BuildVersion=' >> assets/program/versionrc echo 'buildid=dead-beef' >> assets/program/versionrc - echo 'ProductBuildid=3' >> assets/program/versionrc echo 'ProductMajor=360' >> assets/program/versionrc echo 'ProductMinor=1' >> assets/program/versionrc echo 'ReferenceOOoMajorMinor=3.6' >> assets/program/versionrc diff --git a/android/qa/desktop/Makefile b/android/qa/desktop/Makefile index bec3908bb200..37f283e32a5a 100644 --- a/android/qa/desktop/Makefile +++ b/android/qa/desktop/Makefile @@ -67,7 +67,6 @@ buildrcs: echo "BuildVersion=" >> assets/program/versionrc echo "buildid=dead-beef" >> assets/program/versionrc echo "ExtensionUpdateURL=http://updateexte.libreoffice.org/ExtensionUpdateService/check.Update" >> assets/program/versionrc - echo "ProductBuildid=3" >> assets/program/versionrc echo "ProductMajor=360" >> assets/program/versionrc echo "ProductMinor=1" >> assets/program/versionrc echo "ReferenceOOoMajorMinor=3.6" >> assets/program/versionrc diff --git a/ios/CustomTarget_Viewer_app.mk b/ios/CustomTarget_Viewer_app.mk index 8c05728c4a8b..2ccbf841284b 100644 --- a/ios/CustomTarget_Viewer_app.mk +++ b/ios/CustomTarget_Viewer_app.mk @@ -123,7 +123,6 @@ $(SCRIPT_OUTPUT_FILE_0) : $(call gb_Executable_get_target,Viewer) echo 'AllLanguages=en-US' && \ echo 'BuildVersion=' && \ echo 'buildid=$(buildid)' && \ - echo 'ProductBuildid=3' && \ echo 'ProductMajor=360' && \ echo 'ProductMinor=1' && \ : ) > $(appdir)/program/versionrc diff --git a/scp2/inc/macros.inc b/scp2/inc/macros.inc index c10a136e915a..fd336d01b67f 100755 --- a/scp2/inc/macros.inc +++ b/scp2/inc/macros.inc @@ -100,11 +100,6 @@ Styles = (PACKED); \ Dir = SCP2_OOO_BIN_DIR -#define PACKED_LIB_FILE_BODY_PATCH \ - LIB_FILE_BODY; \ - Styles = (PACKED,PATCH); \ - Dir = SCP2_OOO_BIN_DIR - #define STD_LIB_FILE(id,name) \ File id \ Name = LIBNAME(name); \ @@ -117,12 +112,6 @@ PACKED_LIB_FILE_BODY; \ End -#define SPECIAL_LIB_FILE_PATCH(id,name) \ - File id \ - Name = SPECIAL_NAME(name); \ - PACKED_LIB_FILE_BODY_PATCH; \ - End - #define STD_RES_FILE(id,name) \ File id \ TXT_FILE_BODY; \ diff --git a/scp2/source/activex/file_activex.scp b/scp2/source/activex/file_activex.scp index 2ff8583cd54a..680480dcc552 100644 --- a/scp2/source/activex/file_activex.scp +++ b/scp2/source/activex/file_activex.scp @@ -53,11 +53,4 @@ File gid_File_Lib_Regactivex_Msi Name = "regactivex.dll"; End -File gid_File_Lib_Regpatchactivex_Msi - LIB_FILE_BODY; - Styles = (PACKED,PATCH,PATCH_ONLY,BINARYTABLE,BINARYTABLE_ONLY,DONTRENAMEINPATCH); - Dir = SCP2_OOO_BIN_DIR; - Name = "regpatchactivex.dll"; -End - #endif // WITH_ACTIVEX_COMPONENT diff --git a/scp2/source/calc/registryitem_calc.scp b/scp2/source/calc/registryitem_calc.scp index 6f886a48506f..d5b5af2aee4a 100644 --- a/scp2/source/calc/registryitem_calc.scp +++ b/scp2/source/calc/registryitem_calc.scp @@ -835,7 +835,6 @@ RegistryItem gid_Regitem_Software_Manufacturer_Productname_Productversion_Capabi ModuleID = gid_Module_Root; Name = ".fods"; Value = "LibreOffice.CalcDocument.1"; - Styles = (PATCH); End RegistryItem gid_Regitem_Fods_Contenttype diff --git a/scp2/source/draw/registryitem_draw.scp b/scp2/source/draw/registryitem_draw.scp index 2caa0bc5a28a..4e900162f1f7 100644 --- a/scp2/source/draw/registryitem_draw.scp +++ b/scp2/source/draw/registryitem_draw.scp @@ -843,7 +843,6 @@ RegistryItem gid_Regitem_Software_Manufacturer_Productname_Productversion_Capabi ModuleID = gid_Module_Root; Name = ".fodg"; Value = "LibreOffice.DrawDocument.1"; - Styles = (PATCH); End RegistryItem gid_Regitem_fodg_KindMap diff --git a/scp2/source/impress/registryitem_impress.scp b/scp2/source/impress/registryitem_impress.scp index 0c76dbd1fc01..8fa7ee966623 100644 --- a/scp2/source/impress/registryitem_impress.scp +++ b/scp2/source/impress/registryitem_impress.scp @@ -864,7 +864,6 @@ RegistryItem gid_Regitem_Software_Manufacturer_Productname_Productversion_Capabi ModuleID = gid_Module_Root; Name = ".fodp"; Value = "LibreOffice.ImpressDocument.1"; - Styles = (PATCH); End RegistryItem gid_Regitem_Fodp_Contenttype diff --git a/scp2/source/ooo/common_brand.scp b/scp2/source/ooo/common_brand.scp index 9582f7650019..eae79e718bce 100644 --- a/scp2/source/ooo/common_brand.scp +++ b/scp2/source/ooo/common_brand.scp @@ -529,7 +529,7 @@ End File gid_File_Bin_QStart_Bin BIN_FILE_BODY; Dir = gid_Brand_Dir_Program; - Styles = (PACKED, PATCH); + Styles = (PACKED); Name = "oosplash"; End @@ -1016,15 +1016,6 @@ ProfileItem gid_Brand_Profileitem_Version_Productminor Value = ""; End -ProfileItem gid_Brand_Profileitem_Version_Productbuildid - ProfileID = gid_Brand_Profile_Version_Ini; - ModuleID = gid_Module_Root_Brand; - Section = "Version"; - Order = 12; - Key = "ProductBuildid"; - Value = ""; -End - ProfileItem gid_Brand_Profileitem_Version_Alllanguages ProfileID = gid_Brand_Profile_Version_Ini; ModuleID = gid_Module_Root_Brand; @@ -1332,15 +1323,6 @@ ProfileItem gid_Brand_Profileitem_Setup_Upgradecode End #endif -ProfileItem gid_Brand_Profileitem_Setup_Productbuildid - ProfileID = gid_Brand_Profile_Setup_Ini; - ModuleID = gid_Module_Root_Brand; - Section = "Bootstrap"; - Order = 8; - Key = "ProductBuildid"; - Value = ""; -End - ProfileItem gid_Brand_Profileitem_Setup_Buildid ProfileID = gid_Brand_Profile_Setup_Ini; ModuleID = gid_Module_Root_Brand; diff --git a/scp2/source/ooo/directory_ooo_macosx.scp b/scp2/source/ooo/directory_ooo_macosx.scp index ab1138d70c44..c8b160e8659d 100644 --- a/scp2/source/ooo/directory_ooo_macosx.scp +++ b/scp2/source/ooo/directory_ooo_macosx.scp @@ -32,7 +32,6 @@ Directory gid_Dir_Bundle ParentID = PD_PROGDIR; HostName = "%PRODUCTNAME.app"; LangPackHostName = "%PRODUCTNAME Language Pack.app"; - PatchHostName = "%PRODUCTNAME Patch.app"; End Directory gid_Dir_Bundle_Contents diff --git a/scp2/source/ooo/file_library_ooo.scp b/scp2/source/ooo/file_library_ooo.scp index a804041ab874..65a346f77469 100644 --- a/scp2/source/ooo/file_library_ooo.scp +++ b/scp2/source/ooo/file_library_ooo.scp @@ -753,17 +753,6 @@ End #endif -#ifdef WNT - -File gid_File_Lib_Patchmsi - LIB_FILE_BODY; - Name = "patchmsi.dll"; - Dir = SCP2_OOO_BIN_DIR; - Styles = (PACKED,PATCH,PATCH_ONLY,BINARYTABLE,BINARYTABLE_ONLY,DONTRENAMEINPATCH); -End - -#endif - STD_LIB_FILE( gid_File_Lib_Lng, lng) File gid_File_Lib_Localedata_En @@ -1424,10 +1413,10 @@ STD_LIB_FILE( gid_File_Lib_Unoxml, unoxml ) STD_LIB_FILE( gid_File_Lib_AVMedia, avmedia ) #if defined ENABLE_GSTREAMER -SPECIAL_LIB_FILE_PATCH( gid_File_Lib_AVMediaGStreamer, avmediagst ) +SPECIAL_LIB_FILE( gid_File_Lib_AVMediaGStreamer, avmediagst ) #endif #if defined ENABLE_GSTREAMER_0_10 -SPECIAL_LIB_FILE_PATCH( gid_File_Lib_AVMediaGStreamer_0_10, avmediagst_0_10 ) +SPECIAL_LIB_FILE( gid_File_Lib_AVMediaGStreamer_0_10, avmediagst_0_10 ) #endif #if defined WNT #ifdef ENABLE_DIRECTX diff --git a/scp2/source/ooo/file_ooo.scp b/scp2/source/ooo/file_ooo.scp index e973a5823b07..68fe44839f37 100644 --- a/scp2/source/ooo/file_ooo.scp +++ b/scp2/source/ooo/file_ooo.scp @@ -1122,15 +1122,6 @@ File gid_File_Xsl_Import_Wordml_Wordml2ooo_Props Name = "/xslt/import/wordml/wordml2ooo_props.xsl"; End -#ifdef WNT -File gid_File_Txt_Patchfiles - TXT_FILE_BODY; - Name = "patchlist.txt"; - Dir = gid_Brand_Dir_Program; - Styles = (PACKED,PATCH,PATCH_ONLY,DONTRENAMEINPATCH); -End -#endif - File gid_Starregistry_Services_Rdb TXT_FILE_BODY; Name = "services.rdb"; diff --git a/scp2/source/ooo/module_hidden_ooo.scp b/scp2/source/ooo/module_hidden_ooo.scp index 267105189160..0efe8b65a60e 100644 --- a/scp2/source/ooo/module_hidden_ooo.scp +++ b/scp2/source/ooo/module_hidden_ooo.scp @@ -449,7 +449,6 @@ Module gid_Module_Root_Files_5 gid_File_Lib_Msvcp70, gid_File_Lib_Msvcr70, gid_File_Lib_Ole, - gid_File_Lib_Patchmsi, gid_File_Lib_Reg4allmsdoc, gid_File_Lib_Qslnkmsi, gid_File_Lib_Sdqsmsi, diff --git a/scp2/source/ooo/windowscustomaction_ooo.scp b/scp2/source/ooo/windowscustomaction_ooo.scp index b489c3298b5f..a52a07bea4a7 100644 --- a/scp2/source/ooo/windowscustomaction_ooo.scp +++ b/scp2/source/ooo/windowscustomaction_ooo.scp @@ -244,26 +244,6 @@ WindowsCustomAction gid_Customaction_Patch_Regpatchactivex_Patchactivexcontrol Assignment1 = ("InstallExecuteSequence", "\&FEATURETEMPLATE=3", "end"); End -WindowsCustomAction gid_Customaction_Patch_SetProductInstallModeAction - Name = "SetProductInstallModeAction"; - Typ = "321"; - Source = "patchmsi.dll"; - Target = "SetProductInstallMode"; - Inbinarytable = 1; - Assignment1 = ("InstallExecuteSequence", "Not Installed", "FindRelatedProducts"); - Assignment2 = ("InstallUISequence", "Not Installed", "FindRelatedProducts"); -End - -WindowsCustomAction gid_Customaction_Patch_InstallExchangeFiles - Name = "InstallExchangeFiles"; - Typ = "65"; - Source = "patchmsi.dll"; - Target = "InstallPatchedFiles"; - Inbinarytable = 1; - Assignment1 = ("InstallExecuteSequence", "Not Installed", "behind_InstallFinalize"); - Assignment2 = ("AdminExecuteSequence", "", "behind_InstallFinalize"); -End - WindowsCustomAction gid_Customaction_Langpack_Register_Extensions Name = "RegisterExtensions"; Typ = "65"; @@ -274,34 +254,6 @@ WindowsCustomAction gid_Customaction_Langpack_Register_Extensions Assignment2 = ("AdminExecuteSequence", "", "end"); End -WindowsCustomAction gid_Customaction_Patch_SetFeatureState - Name = "SetFeatureState"; - Typ = "65"; - Source = "patchmsi.dll"; - Target = "SetFeatureState"; - Inbinarytable = 1; - Assignment1 = ("InstallExecuteSequence", "Not Installed", "SetNewFeatureState"); -End - -WindowsCustomAction gid_Customaction_Patch_DeinstallExchangeFiles - Name = "DeinstallExchangeFiles"; - Typ = "65"; - Source = "patchmsi.dll"; - Target = "UninstallPatchedFiles"; - Inbinarytable = 1; - Assignment1 = ("InstallExecuteSequence", "Installed", "RemoveIniValues"); -End - -WindowsCustomAction gid_Customaction_Patch_Shutdownquickstarter - Name = "ShutDownQuickstarter"; - Typ = "65"; - Source = "patchmsi.dll"; - Target = "ShutDownQuickstarter"; - Inbinarytable = 1; - Assignment1 = ("ControlEvent", "DestinationFolder", "Next", "DoAction", "ShutDownQuickstarter", "1", "0"); - Assignment2 = ("InstallExecuteSequence", "", "IsolateComponents"); -End - WindowsCustomAction gid_Customaction_CheckPatchList Name = "CheckPatchList"; Typ = "65"; @@ -311,27 +263,6 @@ WindowsCustomAction gid_Customaction_CheckPatchList Assignment1 = ("InstallExecuteSequence", "PATCH", "Patch1NotInstalled"); End -WindowsCustomAction gid_Customaction_Patch_SetUserInstallMode - Name = "SetUserInstallMode"; - Typ = "321"; - Source = "patchmsi.dll"; - Target = "GetUserInstallMode"; - Inbinarytable = 1; - Assignment1 = ("ControlEvent", "InstallWelcome", "Next", "DoAction", "SetUserInstallMode", "1", "1"); - Assignment2 = ("ControlEvent", "InstallChangeFolder", "OK", "DoAction", "SetUserInstallMode", "1", "8"); - Assignment3 = ("ControlCondition", "DestinationFolder", "Next", "Enable", "NOT INVALIDDIRECTORY And NOT PATCHISOLDER And NOT ISWRONGPRODUCT"); - Assignment4 = ("ControlCondition", "DestinationFolder", "Next", "Disable", "INVALIDDIRECTORY Or PATCHISOLDER Or ISWRONGPRODUCT"); - Assignment5 = ("ControlCondition", "DestinationFolder", "LabelStartInstall", "Show", "NOT INVALIDDIRECTORY And NOT PATCHISOLDER And NOT ISWRONGPRODUCT"); - Assignment6 = ("ControlCondition", "DestinationFolder", "LabelInvalidDir", "Show", "INVALIDDIRECTORY"); - Assignment7 = ("ControlCondition", "DestinationFolder", "LabelPatchOlder", "Show", "PATCHISOLDER"); - Assignment8 = ("ControlCondition", "DestinationFolder", "LabelWrongProduct", "Show", "ISWRONGPRODUCT"); - Assignment9 = ("ControlCondition", "DestinationFolder", "LabelStartInstall2", "Show", "NOT INVALIDDIRECTORY And NOT PATCHISOLDER And NOT ISWRONGPRODUCT"); - Assignment10 = ("ControlCondition", "DestinationFolder", "LabelInvalidDir2", "Show", "INVALIDDIRECTORY"); - Assignment11 = ("ControlCondition", "DestinationFolder", "LabelPatchOlder2", "Show", "PATCHISOLDER"); - Assignment12 = ("ControlCondition", "DestinationFolder", "LabelWrongProduct2", "Show", "ISWRONGPRODUCT"); - Assignment13 = ("InstallExecuteSequence", "Not Installed", "PatchIsOlder"); -End - WindowsCustomAction gid_Customaction_Langpack_SetUserInstallMode Name = "SetUserInstallMode"; Typ = "65"; diff --git a/scp2/source/smoketest/smoketest.scp b/scp2/source/smoketest/smoketest.scp index 7c368c38cb47..e233a0efb073 100644 --- a/scp2/source/smoketest/smoketest.scp +++ b/scp2/source/smoketest/smoketest.scp @@ -62,7 +62,6 @@ Directory gid_Test_Dir_Bundle ParentID = PD_PROGDIR; HostName = "%PRODUCTNAME.app"; LangPackHostName = "%PRODUCTNAME Language Pack.app"; - PatchHostName = "%PRODUCTNAME Patch.app"; End Directory gid_Test_Dir_Bundle_Contents diff --git a/scp2/source/writer/registryitem_writer.scp b/scp2/source/writer/registryitem_writer.scp index 2de4a8bb6ebd..8242f770da19 100644 --- a/scp2/source/writer/registryitem_writer.scp +++ b/scp2/source/writer/registryitem_writer.scp @@ -1008,7 +1008,6 @@ RegistryItem gid_Regitem_Software_Manufacturer_Productname_Productversion_Capabi ModuleID = gid_Module_Root; Name = ".fodt"; Value = "LibreOffice.WriterDocument.1"; - Styles = (PATCH); End RegistryItem gid_Regitem_Fodt_Contenttype diff --git a/setup_native/prj/build.lst b/setup_native/prj/build.lst index 1c3bf5301ce1..fb45ce854aff 100644 --- a/setup_native/prj/build.lst +++ b/setup_native/prj/build.lst @@ -15,7 +15,6 @@ pk setup_native\source\win32\customactions\quickstarter nmake - w sn_quic pk setup_native\source\win32\customactions\shellextensions nmake - w sn_shellextensions sn_tools.w NULL pk setup_native\source\win32\customactions\indexingfilter nmake - w sn_indexingfilter NULL pk setup_native\source\win32\customactions\languagepacks nmake - w sn_languagepacks sn_shellextensions.w sn_tools.w NULL -pk setup_native\source\win32\customactions\patch nmake - w sn_patch sn_languagepacks.w sn_shellextensions.w sn_quickstarter.w sn_tools.w NULL pk setup_native\source\win32\wintools\makecab nmake - u sn_makecab NULL pk setup_native\source\win32\wintools\msidb nmake - u sn_msidb NULL pk setup_native\source\win32\wintools\msiinfo nmake - u sn_msiinfo NULL diff --git a/setup_native/source/win32/customactions/languagepacks/respintest.cxx b/setup_native/source/win32/customactions/languagepacks/respintest.cxx index 3362a7ad7e82..f757a880f912 100644 --- a/setup_native/source/win32/customactions/languagepacks/respintest.cxx +++ b/setup_native/source/win32/customactions/languagepacks/respintest.cxx @@ -150,38 +150,7 @@ extern "C" UINT __stdcall GetUserInstallMode(MSIHANDLE handle) return ERROR_SUCCESS; } - // 3. Only for patch: Comparing "PRODUCTMINOR from property table and "ProductMinor" from InfoFile - - string isPatch = GetMsiProperty(handle, TEXT("ISPATCH")); - - if (isPatch=="1") - { - string ProductMinor = GetMsiProperty(handle, TEXT("PRODUCTBUILDID")); - int PatchProductMinor = atoi(ProductMinor.c_str()); - - szValue[0] = '\0'; - - GetPrivateProfileString( - TEXT("Bootstrap"), - TEXT("ProductBuildid"), - TEXT("8918"), - szValue, - SAL_N_ELEMENTS(szValue), - sSetupiniPath.c_str() - ); - - int InstalledProductMinor = atoi(szValue); - - if ( InstalledProductMinor >= PatchProductMinor ) - { - SetMsiProperty( handle, TEXT("PATCHISOLDER"), TEXT("YES") ); - // MessageBox(NULL, "PATCHISOLDER set", "DEBUG", MB_OK); - SetMsiErrorCode( MSI_ERROR_PATCHISOLDER ); - return ERROR_SUCCESS; - } - } - - // 4. Setting property ALLUSERS with value from "setup.ini" + // 3. Setting property ALLUSERS with value from "setup.ini" szValue[0] = '\0'; diff --git a/setup_native/source/win32/customactions/patch/exports.dxp b/setup_native/source/win32/customactions/patch/exports.dxp deleted file mode 100644 index bb660772a68b..000000000000 --- a/setup_native/source/win32/customactions/patch/exports.dxp +++ /dev/null @@ -1,8 +0,0 @@ -InstallPatchedFiles -UninstallPatchedFiles -GetUserInstallMode -SetProductInstallMode -ShutDownQuickstarter -SetFeatureState -SetNewFeatureState -ShowOnlineUpdateDialog diff --git a/setup_native/source/win32/customactions/patch/makefile.mk b/setup_native/source/win32/customactions/patch/makefile.mk deleted file mode 100644 index 81ff1c4878f7..000000000000 --- a/setup_native/source/win32/customactions/patch/makefile.mk +++ /dev/null @@ -1,75 +0,0 @@ -# -# This file is part of the LibreOffice project. -# -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. -# -# This file incorporates work covered by the following license notice: -# -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed -# with this work for additional information regarding copyright -# ownership. The ASF licenses this file to you under the Apache -# License, Version 2.0 (the "License"); you may not use this file -# except in compliance with the License. You may obtain a copy of -# the License at http://www.apache.org/licenses/LICENSE-2.0 . -# - -PRJ=..$/..$/..$/.. -PRJNAME=setup_native -TARGET=patchmsi - -# --- Settings ----------------------------------------------------- - -ENABLE_EXCEPTIONS=TRUE -NO_DEFAULT_STL=TRUE -DYNAMIC_CRT= -USE_DEFFILE=TRUE - -.INCLUDE : settings.mk - -# --- Files -------------------------------------------------------- - -.IF "$(OS)"=="WNT" && "$(WINDOWS_SDK_HOME)"!="" - -UWINAPILIB= - -SLOFILES = \ - $(SLO)$/swappatchfiles.obj - -STDSHL += \ - $(ADVAPI32LIB)\ - $(MSILIB)\ - $(SHELL32LIB) - -.IF "$(COM)"=="GCC" -STDSHL+= \ - $(KERNEL32LIB)\ - -lmsvcrt -.ENDIF - - -SHL1OBJS = $(SLOFILES) \ - $(SLO)$/respintest.obj \ - $(SLO)$/shutdown_quickstart.obj \ - $(SLO)$/quickstarter.obj \ - $(SLO)$/upgrade.obj \ - $(SLO)$/seterror.obj - -SHL1TARGET = $(TARGET) -SHL1IMPLIB = i$(TARGET) - -SHL1DEF = $(MISC)$/$(SHL1TARGET).def -SHL1DEPN = $(SLB)$/$(TARGET).lib -SHL1BASE = 0x1c000000 -DEF1NAME=$(SHL1TARGET) -DEF1EXPORTFILE=exports.dxp - -.ENDIF - -# --- Targets -------------------------------------------------------------- - -.INCLUDE : target.mk - -# ------------------------------------------------------------------------- diff --git a/setup_native/source/win32/customactions/patch/swappatchfiles.cxx b/setup_native/source/win32/customactions/patch/swappatchfiles.cxx deleted file mode 100644 index f2eb25428b6c..000000000000 --- a/setup_native/source/win32/customactions/patch/swappatchfiles.cxx +++ /dev/null @@ -1,717 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#define _WIN32_WINDOWS 0x0410 - -#ifdef _MSC_VER -#pragma warning(push, 1) /* disable warnings within system headers */ -#endif -#define WIN32_LEAN_AND_MEAN -#include -#include -#ifdef _MSC_VER -#pragma warning(pop) -#endif - -#include -#include - -#ifdef UNICODE -#define _UNICODE -#define _tstring wstring -#else -#define _tstring string -#endif -#include -#include -#include -#include -#include - -#include -#include <../tools/seterror.hxx> - -#ifdef DEBUG -inline void OutputDebugStringFormat( LPCTSTR pFormat, ... ) -{ - _TCHAR buffer[1024]; - va_list args; - - va_start( args, pFormat ); - _vsntprintf( buffer, SAL_N_ELEMENTS(buffer), pFormat, args ); - OutputDebugString( buffer ); -} -#else -static inline void OutputDebugStringFormat( LPCTSTR, ... ) -{ -} -#endif - -static std::_tstring GetMsiProperty( MSIHANDLE handle, const std::_tstring& sProperty ) -{ - std::_tstring result; - TCHAR szDummy[1] = TEXT(""); - DWORD nChars = 0; - - if ( MsiGetProperty( handle, sProperty.c_str(), szDummy, &nChars ) == ERROR_MORE_DATA ) - { - DWORD nBytes = ++nChars * sizeof(TCHAR); - LPTSTR buffer = reinterpret_cast(_alloca(nBytes)); - ZeroMemory( buffer, nBytes ); - MsiGetProperty(handle, sProperty.c_str(), buffer, &nChars); - result = buffer; - } - - return result; -} - -// The provided GUID must be without surounding '{}' -static std::_tstring GetGuidPart(const std::_tstring& guid, int index) -{ - assert((guid.length() == 36) && "No GUID or wrong format!"); - assert(((index > -1) && (index < 5)) && "Out of range!"); - - if (index == 0) return std::_tstring(guid.c_str(), 8); - if (index == 1) return std::_tstring(guid.c_str() + 9, 4); - if (index == 2) return std::_tstring(guid.c_str() + 14, 4); - if (index == 3) return std::_tstring(guid.c_str() + 19, 4); - if (index == 4) return std::_tstring(guid.c_str() + 24, 12); - - return std::_tstring(); -} - -static void Swap(char* p1, char* p2) -{ - char tmp = *p1; - *p1 = *p2; - *p2 = tmp; -} - -static std::_tstring Invert(const std::_tstring& str) -{ - char* buff = reinterpret_cast(_alloca(str.length())); - strncpy(buff, str.c_str(), str.length()); - - char* front = buff; - char* back = buff + str.length() - 1; - - while (front < back) - Swap(front++, back--); - - return std::_tstring(buff, str.length()); -} - -// Convert the upgrade code (which is a GUID) according -// to the way the windows installer does when writing it -// to the registry -// The first 8 bytes will be inverted, from the the last -// 8 bytes always the nibbles will be inverted for further -// details look in the MSDN under compressed registry keys -static std::_tstring ConvertGuid(const std::_tstring& guid) -{ - std::_tstring convertedGuid; - - std::_tstring part = GetGuidPart(guid, 0); - convertedGuid = Invert(part); - - part = GetGuidPart(guid, 1); - convertedGuid += Invert(part); - - part = GetGuidPart(guid, 2); - convertedGuid += Invert(part); - - part = GetGuidPart(guid, 3); - convertedGuid += Invert(std::_tstring(part.c_str(), 2)); - convertedGuid += Invert(std::_tstring(part.c_str() + 2, 2)); - - part = GetGuidPart(guid, 4); - int pos = 0; - for (int i = 0; i < 6; i++) - { - convertedGuid += Invert(std::_tstring(part.c_str() + pos, 2)); - pos += 2; - } - return convertedGuid; -} - -static inline bool IsSetMsiProperty(MSIHANDLE handle, const std::_tstring& sProperty) -{ - std::_tstring value = GetMsiProperty(handle, sProperty); - return (value.length() > 0); -} - -static inline void UnsetMsiProperty(MSIHANDLE handle, const std::_tstring& sProperty) -{ - MsiSetProperty(handle, sProperty.c_str(), NULL); -} - -static inline void SetMsiProperty(MSIHANDLE handle, const std::_tstring& sProperty) -{ - MsiSetProperty(handle, sProperty.c_str(), TEXT("1")); -} - -static bool SwapFiles( const std::_tstring& sFileName1, const std::_tstring& sFileName2 ) -{ - std::_tstring sTempFileName = sFileName1 + TEXT(".tmp"); - - bool fSuccess = true; - - //Try to move the original file to a temp file - fSuccess = MoveFileExA( sFileName1.c_str(), sTempFileName.c_str(), MOVEFILE_REPLACE_EXISTING); - - if ( fSuccess ) - { - fSuccess = MoveFileExA( sFileName2.c_str(), sFileName1.c_str(), MOVEFILE_REPLACE_EXISTING ); - - if ( fSuccess ) - { - fSuccess = MoveFileExA( sTempFileName.c_str(), sFileName2.c_str(), - MOVEFILE_REPLACE_EXISTING ); - if ( !fSuccess ) - { - MoveFileExA( sFileName1.c_str(), sFileName2.c_str(), MOVEFILE_REPLACE_EXISTING ); - } - } - else - { - MoveFileExA( sTempFileName.c_str(), sFileName1.c_str(), MOVEFILE_REPLACE_EXISTING ); - } - } - else - { - //It could be that there is no original file and therefore copying the original to a temp - // file failed. Examine if there is no original and if so then move file2 to file1 - - WIN32_FIND_DATA data; - HANDLE hdl = FindFirstFile(sFileName1.c_str(), &data); - if (hdl == INVALID_HANDLE_VALUE) - { - fSuccess = MoveFileExA( sFileName2.c_str(), sFileName1.c_str(), MOVEFILE_REPLACE_EXISTING ); - } - else - { - FindClose(hdl); - } - } - - OutputDebugStringFormat( TEXT("%s <-> %s: %s"), sFileName1.c_str(), sFileName2.c_str(), fSuccess ? TEXT("OK") : TEXT("FAILED") ); - - if (!fSuccess ) - { - DWORD dwError = GetLastError(); - LPVOID lpMsgBuf; - if ( FormatMessage( - FORMAT_MESSAGE_ALLOCATE_BUFFER | - FORMAT_MESSAGE_FROM_SYSTEM | - FORMAT_MESSAGE_IGNORE_INSERTS, - NULL, - GetLastError(), - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language - (LPTSTR) &lpMsgBuf, - 0, - NULL )) - { - OutputDebugStringFormat( TEXT("Error Code %d: %s"), dwError, lpMsgBuf ); - LocalFree( lpMsgBuf ); - } - else - OutputDebugStringFormat( TEXT("Error Code %d: Unknown"), dwError ); - SetMsiErrorCode( dwError ); - } - - return fSuccess; -} - -static std::_tstring strip( const std::_tstring& s, _TCHAR c ) -{ - std::_tstring result = s; - - std::_tstring::size_type f; - - do - { - f = result.find( c ); - if ( f != std::_tstring::npos ) - result.erase( f, 1 ); - } while ( f != std::_tstring::npos ); - - return result; -} - -static std::_tstring trim( const std::_tstring& rString ) -{ - std::_tstring temp = rString; - - while ( temp.length() && temp[0] == ' ' || temp[0] == '\t' ) - temp.erase( 0, 1 ); - - std::_tstring::size_type len = temp.length(); - - while ( len && temp[len-1] == ' ' || temp[len-1] == '\t' ) - { - temp.erase( len - 1, 1 ); - len = temp.length(); - } - - return temp; -} - -static bool readLine( FILE *fp, std::_tstring& rLine ) -{ - _TCHAR szBuffer[1024]; - bool bSuccess = false; - bool bEOL = false; - std::_tstring line; - - - while ( !bEOL && _fgetts( szBuffer, sizeof(szBuffer), fp ) ) - { - int len = _tcslen(szBuffer); - - bSuccess = true; - - while ( len && szBuffer[len - 1] == '\n' ) - { - szBuffer[--len] = 0; - bEOL = true; - } - - line.append( szBuffer ); - } - - rLine = line; - return bSuccess; -} - - -static std::_tstring getProfileString( - const std::_tstring& aFileName, - const std::_tstring& aSectionName, - const std::_tstring& aKeyName, - const std::_tstring& aDefault = _T("") ) -{ - FILE *fp = _tfopen( aFileName.c_str(), _T("r") ); - std::_tstring retValue = aDefault.length() ? aDefault : _T(""); - - if ( fp ) - { - std::_tstring line; - std::_tstring section; - - while ( readLine( fp, line ) ) - { - line = trim( line ); - - if ( line.length() && line[0] == '[' ) - { - line.erase( 0, 1 ); - std::_tstring::size_type end = line.find( ']', 0 ); - - if ( std::_tstring::npos != end ) - section = trim( line.substr( 0, end ) ); - } - else - { - - std::_tstring::size_type iEqualSign = line.find( '=', 0 ); - - if ( iEqualSign != std::_tstring::npos ) - { - std::_tstring keyname = line.substr( 0, iEqualSign ); - keyname = trim( keyname ); - - std::_tstring value = line.substr( iEqualSign + 1 /*, std::_tstring::npos */ ); - value = trim( value ); - - if ( - 0 == _tcsicmp( section.c_str(), aSectionName.c_str() ) && - 0 == _tcsicmp( keyname.c_str(), aKeyName.c_str() ) - ) - { - retValue = value; - break; - } - } - } - } - - fclose( fp ); - } - - return retValue; -} - -static std::queue< std::_tstring > getProfileSections( const std::_tstring& aFileName ) -{ - FILE *fp = _tfopen( aFileName.c_str(), _T("r") ); - std::queue< std::_tstring > aResult; - - OutputDebugStringFormat( TEXT("*** Retrieving Section Names ****") ); - - if ( fp ) - { - std::_tstring line; - std::_tstring section; - - while ( readLine( fp, line ) ) - { - line = trim( line ); - - if ( line.length() && line[0] == '[' ) - { - line.erase( 0, 1 ); - std::_tstring::size_type end = line.find( ']', 0 ); - - if ( std::_tstring::npos != end ) - section = trim( line.substr( 0, end ) ); - - aResult.push( section ); - - OutputDebugStringFormat( TEXT("Section: %s"), section.c_str() ); - - } - } - - fclose( fp ); - } - - OutputDebugStringFormat( TEXT("*** Done Section Names ***") ); - - return aResult; -} - -static std::queue< std::_tstring > getProfileKeys( const std::_tstring& aFileName, const std::_tstring& aSectionName ) -{ - FILE *fp = _tfopen( aFileName.c_str(), _T("r") ); - std::queue< std::_tstring > aResult; - - OutputDebugStringFormat( TEXT("*** Retrieving Key Names for [%s] ***"), aSectionName.c_str() ); - - if ( fp ) - { - std::_tstring line; - std::_tstring section; - - while ( readLine( fp, line ) ) - { - line = trim( line ); - - if ( line.length() && line[0] == '[' ) - { - line.erase( 0, 1 ); - std::_tstring::size_type end = line.find( ']', 0 ); - - if ( std::_tstring::npos != end ) - section = trim( line.substr( 0, end ) ); - } - else - { - - std::_tstring::size_type iEqualSign = line.find( '=', 0 ); - - if ( iEqualSign != std::_tstring::npos ) - { - std::_tstring keyname = line.substr( 0, iEqualSign ); - keyname = trim( keyname ); - - if ( 0 == _tcsicmp( section.c_str(), aSectionName.c_str() ) ) - { - aResult.push( keyname ); - - OutputDebugStringFormat( keyname.c_str() ); - - } - } - } - } - - fclose( fp ); - } - - OutputDebugStringFormat( TEXT("*** Done Key Names for [%s] ***"), aSectionName.c_str() ); - - return aResult; -} - -extern "C" UINT __stdcall InstallPatchedFiles( MSIHANDLE handle ) -{ - std::_tstring sInstDir = GetMsiProperty( handle, TEXT("INSTALLLOCATION") ); - std::_tstring sProgramDir = sInstDir + TEXT("program\\"); - std::_tstring sPatchFile = sProgramDir + TEXT("patchlist.txt"); - - std::queue< std::_tstring > aSectionNames; - std::queue< std::_tstring > aKeyNames; - - OutputDebugStringA( "Starting Custom Action" ); - - aSectionNames = getProfileSections( sPatchFile ); - while ( !aSectionNames.empty() ) - { - std::_tstring sSectionName = aSectionNames.front(); - if ( std::_tstring(TEXT("_root")) == sSectionName ) { sSectionName = TEXT(""); } - - aKeyNames = getProfileKeys( sPatchFile, sSectionName ); - while ( !aKeyNames.empty() ) - { - std::_tstring sKeyName = aKeyNames.front(); - std::_tstring sValue = getProfileString( sPatchFile, sSectionName, sKeyName ); - - if ( sValue.length() ) - { - std::_tstring sFileName1 = sKeyName; - std::_tstring sExtension = sValue; - std::_tstring sFileName2; - - sFileName1 = strip( sFileName1, '\"' ); - sExtension = strip( sExtension, '\"' ); - - sFileName1 = sInstDir + sSectionName + sFileName1; - sFileName2 = sFileName1 + sExtension; - - SwapFiles( sFileName1, sFileName2 ); - } - - aKeyNames.pop(); - } - - aSectionNames.pop(); - } - - return ERROR_SUCCESS; -} - -extern "C" UINT __stdcall UninstallPatchedFiles( MSIHANDLE handle ) -{ - TCHAR szValue[8192]; - DWORD nValueSize = sizeof(szValue); - HKEY hKey; - - std::_tstring sInstDir; - - std::_tstring sProductKey = GetMsiProperty( handle, TEXT("FINDPRODUCT") ); - - if ( ERROR_SUCCESS == RegOpenKey( HKEY_CURRENT_USER, sProductKey.c_str(), &hKey ) ) - { - if ( ERROR_SUCCESS == RegQueryValueEx( hKey, TEXT("INSTALLLOCATION"), NULL, NULL, (LPBYTE)szValue, &nValueSize ) ) - { - sInstDir = szValue; - } - RegCloseKey( hKey ); - } - else if ( ERROR_SUCCESS == RegOpenKey( HKEY_LOCAL_MACHINE, sProductKey.c_str(), &hKey ) ) - { - if ( ERROR_SUCCESS == RegQueryValueEx( hKey, TEXT("INSTALLLOCATION"), NULL, NULL, (LPBYTE)szValue, &nValueSize ) ) - { - sInstDir = szValue; - } - RegCloseKey( hKey ); - } - else - return ERROR_SUCCESS; - - std::_tstring sProgramDir = sInstDir + TEXT("program\\"); - std::_tstring sPatchFile = sProgramDir + TEXT("patchlist.txt"); - - std::queue< std::_tstring > aSectionNames; - std::queue< std::_tstring > aKeyNames; - - aSectionNames = getProfileSections( sPatchFile ); - while ( !aSectionNames.empty() ) - { - std::_tstring sSectionName = aSectionNames.front(); - if ( std::_tstring(TEXT("_root")) == sSectionName ) { sSectionName = TEXT(""); } - - aKeyNames = getProfileKeys( sPatchFile, sSectionName ); - while( !aKeyNames.empty() ) - { - std::_tstring sKeyName = aKeyNames.front(); - std::_tstring sValue = getProfileString( sPatchFile, sSectionName, sKeyName ); - - if ( sValue.length() ) - { - std::_tstring sFileName1 = sKeyName; - std::_tstring sExtension = sValue; - std::_tstring sFileName2; - - sFileName1 = strip( sFileName1, '\"' ); - sExtension = strip( sExtension, '\"' ); - - sFileName1 = sInstDir + sSectionName + sFileName1; - sFileName2 = sFileName1 + sExtension; - - SwapFiles( sFileName2, sFileName1 ); - } - - aKeyNames.pop(); - } - - aSectionNames.pop(); - } - - return ERROR_SUCCESS; -} - -extern "C" UINT __stdcall SetFeatureState( MSIHANDLE handle ) -{ - - // 1. Reading Product Code from setup.ini of installed Office - - std::_tstring sInstallPath = GetMsiProperty(handle, TEXT("INSTALLLOCATION")); - std::_tstring sSetupiniPath = sInstallPath + TEXT("program\\setup.ini"); - - TCHAR szProductCode[32767]; - - GetPrivateProfileString( - TEXT("Bootstrap"), - TEXT("ProductCode"), - TEXT("NOTFOUND"), - szProductCode, - SAL_N_ELEMENTS(szProductCode), - sSetupiniPath.c_str() - ); - - if ( !_tcsicmp( szProductCode, TEXT("NOTFOUND") ) ) - { - // No setup.ini or no "ProductCode" in setup.ini. This is an invalid directory. - return ERROR_SUCCESS; - } - - // 2. Converting Product code - - std::_tstring productCode = TEXT(szProductCode); - productCode = ConvertGuid(std::_tstring(productCode.c_str() + 1, productCode.length() - 2)); - - // 3. Setting path in the Windows registry to find installed features - - std::_tstring registryKey; - HKEY registryRoot; - - if ( IsSetMsiProperty(handle, TEXT("ALLUSERS")) ) - { - registryRoot = HKEY_LOCAL_MACHINE; - registryKey = TEXT("Software\\Classes\\Installer\\Features\\") + productCode; - } - else - { - registryRoot = HKEY_CURRENT_USER; - registryKey = TEXT("Software\\Microsoft\\Installer\\Features\\") + productCode; - } - - // 4. Collecting all installed features from Windows registry - - HKEY hKey; - if (RegOpenKey(registryRoot, registryKey.c_str(), &hKey) == ERROR_SUCCESS) - { - int counter = 0; - LONG lEnumResult; - - do - { - TCHAR szValueName[8192]; - DWORD nValueNameSize = sizeof(szValueName); - LPDWORD pValueNameSize = &nValueNameSize; - TCHAR szValueData[8192]; - DWORD nValueDataSize = sizeof(szValueData); - - lEnumResult = RegEnumValue( hKey, counter, szValueName, pValueNameSize, NULL, NULL, (LPBYTE)szValueData, &nValueDataSize); - - if ( ERROR_SUCCESS == lEnumResult ) - { - std::_tstring sValueName = szValueName; - - // Does this feature exist in this patch? - if ( IsSetMsiProperty(handle, sValueName) ) - { - // Feature is not installed, if szValueData starts with a "square" (ascii 6) - if ( 6 == szValueData[0] ) - { - MsiSetFeatureState(handle,sValueName.c_str(),INSTALLSTATE_ABSENT); // do not install this feature - } - else - { - MsiSetFeatureState(handle,sValueName.c_str(),INSTALLSTATE_LOCAL); // do install this feature - } - } - } - - counter = counter + 1; - - } while ( ERROR_SUCCESS == lEnumResult ); - - RegCloseKey( hKey ); - } - - return ERROR_SUCCESS; -} - -extern "C" UINT __stdcall SetNewFeatureState( MSIHANDLE handle ) -{ - std::_tstring sValueName; - - sValueName = TEXT("gm_o_Onlineupdate"); - - if (IsSetMsiProperty(handle, TEXT("SELECT_OU_FEATURE"))) - { - MsiSetFeatureState(handle,sValueName.c_str(),INSTALLSTATE_LOCAL); // do install this feature - } - else - { - MsiSetFeatureState(handle,sValueName.c_str(),INSTALLSTATE_ABSENT); // do not install this feature - } - - return ERROR_SUCCESS; -} - -extern "C" UINT __stdcall ShowOnlineUpdateDialog( MSIHANDLE handle ) -{ - // Checking existence of file "updchk.uno.dll", which shows, that - // Online Update functionality is always available. Then the dialog - // that offers the Online Update is superfluous. - - std::_tstring sInstDir = GetMsiProperty( handle, TEXT("INSTALLLOCATION") ); - std::_tstring sProgramDir = sInstDir + TEXT("program\\"); - std::_tstring sSearchFile = sProgramDir + TEXT("updchk.uno.dll"); - - WIN32_FIND_DATA data; - HANDLE hdl = FindFirstFile(sSearchFile.c_str(), &data); - if (hdl != INVALID_HANDLE_VALUE) // the file exists - { - // And finally setting property SHOW_ONLINEUPDATE_DIALOG - // to hide this dialog - UnsetMsiProperty(handle, TEXT("SHOW_ONLINEUPDATE_DIALOG")); - - // Setting SELECT_OU_FEATURE to 1, which is probably superfluous - // because this is already the default value. But only this - // guarantees, that CustomAction SetNewFeatureState always sets - // the correct FeatureState for "gm_o_Onlineupdate", if it is - // already installed. - SetMsiProperty(handle, TEXT("SELECT_OU_FEATURE")); - } - else - { - // If the file does not exist, the Online Update dialog - // has to be shown. - SetMsiProperty(handle, TEXT("SHOW_ONLINEUPDATE_DIALOG")); - FindClose(hdl); - } - - return ERROR_SUCCESS; -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/solenv/bin/modules/installer.pm b/solenv/bin/modules/installer.pm index 76455f1c84ee..4df3bc759b42 100644 --- a/solenv/bin/modules/installer.pm +++ b/solenv/bin/modules/installer.pm @@ -298,7 +298,6 @@ sub run { my $dirsinproductarrayref = installer::setupscript::get_all_items_from_script($setupscriptref, "Directory"); if ( $installer::globals::languagepack ) { installer::scriptitems::use_langpack_hostname($dirsinproductarrayref); } - if ( $installer::globals::patch ) { installer::scriptitems::use_patch_hostname($dirsinproductarrayref); } if ( $allvariableshashref->{'SHIFT_BASIS_INTO_BRAND_LAYER'} ) { $dirsinproductarrayref = installer::scriptitems::shift_basis_directory_parents($dirsinproductarrayref); } if ( $allvariableshashref->{'OFFICEDIRECTORYNAME'} ) { installer::scriptitems::set_officedirectory_name($dirsinproductarrayref, $allvariableshashref->{'OFFICEDIRECTORYNAME'}); } @@ -329,11 +328,6 @@ sub run { $filesinproductarrayref = installer::scriptitems::remove_Helppacklibraries_from_Installset($filesinproductarrayref); } - if (! $installer::globals::patch) - { - $filesinproductarrayref = installer::scriptitems::remove_patchonlyfiles_from_Installset($filesinproductarrayref); - } - installer::logger::print_message( "... analyzing scpactions ... \n" ); my $scpactionsinproductarrayref = installer::setupscript::get_all_items_from_script($setupscriptref, "ScpAction"); @@ -341,7 +335,6 @@ sub run { if ( $installer::globals::languagepack ) { installer::scriptitems::use_langpack_copy_scpaction($scpactionsinproductarrayref); } if ( $installer::globals::helppack ) { installer::scriptitems::use_langpack_copy_scpaction($scpactionsinproductarrayref); } if ( $allvariableshashref->{'PRODUCTNAME'} eq "LibO-dev" ) { installer::scriptitems::use_devversion_copy_scpaction($scpactionsinproductarrayref); } - if ( $installer::globals::patch ) { installer::scriptitems::use_patch_copy_scpaction($scpactionsinproductarrayref); } installer::scriptitems::change_keys_of_scpactions($scpactionsinproductarrayref); @@ -442,12 +435,6 @@ sub run { installer::logger::print_message( "------------------------------------\n" ); installer::logger::print_message( "... languages $$languagestringref ... \n" ); - if ( $installer::globals::patch ) - { - $installer::globals::addlicensefile = 0; # no license files for patches - $installer::globals::makedownload = 0; - } - if ( $installer::globals::languagepack ) { $installer::globals::addsystemintegration = 0; @@ -743,7 +730,7 @@ sub run { my $profilesinproductlanguageresolvedarrayref; my $profileitemsinproductlanguageresolvedarrayref; - if ((!($installer::globals::is_copy_only_project)) && (!($installer::globals::product =~ /ada/i )) && (!($installer::globals::languagepack)) && (!($installer::globals::helppack))) + if ((!($installer::globals::is_copy_only_project)) && (!($installer::globals::languagepack)) && (!($installer::globals::helppack))) { installer::logger::print_message( "... creating profiles ...\n" ); @@ -757,6 +744,8 @@ sub run { installer::scriptitems::replace_setup_variables($profileitemsinproductlanguageresolvedarrayref, $languagestringref, $allvariableshashref); + # Note that patch_user_dir is not related to the killed + # ancient (not MSP) "patch" thing, I think. if ( $installer::globals::patch_user_dir ) { installer::scriptitems::replace_userdir_variable($profileitemsinproductlanguageresolvedarrayref); @@ -878,32 +867,6 @@ sub run { } - # Collecting all files without flag PATCH (for maintenance reasons) - if ( $installer::globals::patch ) { installer::worker::collect_all_files_without_patch_flag($filesinproductlanguageresolvedarrayref); } - - # Patch projects can now start to select the required information - if (( $installer::globals::patch ) && (( $installer::globals::issolarispkgbuild ) || ( $installer::globals::iswindowsbuild ))) - { - $filesinproductlanguageresolvedarrayref = installer::worker::select_patch_items($filesinproductlanguageresolvedarrayref, "File"); - $scpactionsinproductlanguageresolvedarrayref = installer::worker::select_patch_items($scpactionsinproductlanguageresolvedarrayref, "ScpAction"); - $linksinproductlanguageresolvedarrayref = installer::worker::select_patch_items($linksinproductlanguageresolvedarrayref, "Shortcut"); - $unixlinksinproductlanguageresolvedarrayref = installer::worker::select_patch_items($unixlinksinproductlanguageresolvedarrayref, "Unixlink"); - $folderitemsinproductlanguageresolvedarrayref = installer::worker::select_patch_items($folderitemsinproductlanguageresolvedarrayref, "FolderItem"); - # @{$folderitemsinproductlanguageresolvedarrayref} = (); # no folderitems in languagepacks - - if ( $installer::globals::iswindowsbuild ) - { - $registryitemsinproductlanguageresolvedarrayref = installer::worker::select_patch_items_without_name($registryitemsinproductlanguageresolvedarrayref, "RegistryItem"); - - installer::worker::prepare_windows_patchfiles($filesinproductlanguageresolvedarrayref, $languagestringref, $allvariableshashref); - - # For Windows patches, the directories can now be collected again - ($directoriesforepmarrayref, $alldirectoryhash) = installer::scriptitems::collect_directories_from_filesarray($filesinproductlanguageresolvedarrayref); - - @$directoriesforepmarrayref = sort { $a->{"HostName"} cmp $b->{"HostName"} } @$directoriesforepmarrayref; - } - } - ######################################################### # Collecting all scp actions ######################################################### @@ -1012,8 +975,6 @@ sub run { my $shellscriptsfilename = ""; if ( $onepackage->{'script'} ) { $shellscriptsfilename = $onepackage->{'script'}; } - # no scripts for Solaris patches! - if (( $installer::globals::patch ) && ( $installer::globals::issolarispkgbuild )) { $shellscriptsfilename = ""; } ########################### # package name @@ -1101,22 +1062,6 @@ sub run { next; # next package, end of loop ! } - ################################################################# - # nothing to do for Linux patches, if no file has flag PATCH - ################################################################# - - # Linux Patch: The complete RPM has to be built, if one file in the RPM has the flag PATCH (also for DEBs) - if (( $installer::globals::patch ) && (( $installer::globals::isrpmbuild ) || ( $installer::globals::isdebbuild ))) - { - my $patchfiles = installer::worker::collect_all_items_with_special_flag($filesinpackage ,"PATCH"); - if ( ! ( $#{$patchfiles} > -1 )) - { - $infoline = "\n\nLinux Patch: No patch file in package: $packagename \-\> Skipping\n\n"; - push(@installer::globals::logfileinfo, $infoline); - next; - } - } - ########################################### # Stripping libraries ########################################### @@ -1152,18 +1097,6 @@ sub run { my $epmheaderref = installer::epmfile::create_epm_header($allvariableshashref, $filesinproductlanguageresolvedarrayref, $languagesarrayref, $onepackage); installer::epmfile::adding_header_to_epm_file(\@epmfile, $epmheaderref); - if (( $installer::globals::patch ) && ( $installer::globals::issolarispkgbuild )) - { - $filesinpackage = installer::worker::analyze_patch_files($filesinpackage); - - if ( ! ( $#{$filesinpackage} > -1 )) - { - $infoline = "\nNo file in package: $packagename \-\> Skipping\n"; - push(@installer::globals::logfileinfo, $infoline); - next; # next package, end of loop ! - } - } - # adding directories, files and links into epm file installer::epmfile::put_directories_into_epmfile($dirsinpackage, \@epmfile, $allvariableshashref, $packagerootpath); @@ -1292,10 +1225,6 @@ sub run { # Creating installation set for Unix help packs, that are not part of multi lingual installation sets if ( ( $installer::globals::helppack ) && ( ! $installer::globals::debian ) && ( ! $installer::globals::makedownload ) ) { installer::helppack::build_installer_for_helppack($installer::globals::epmoutpath, $allvariableshashref, $includepatharrayref, $languagesarrayref, $languagestringref); } - # Finalizing patch installation sets - if (( $installer::globals::patch ) && ( $installer::globals::issolarispkgbuild )) { installer::epmfile::finalize_patch($installer::globals::epmoutpath, $allvariableshashref); } - if (( $installer::globals::patch ) && ( $installer::globals::isrpmbuild )) { installer::epmfile::finalize_linux_patch($installer::globals::epmoutpath, $allvariableshashref, $includepatharrayref); } - chdir($currentdir); # changing back into start directory } @@ -1731,7 +1660,6 @@ sub run { my $downloadname = installer::ziplist::getinfofromziplist($allsettingsarrayref, "downloadname"); if ( $installer::globals::languagepack ) { $downloadname = installer::ziplist::getinfofromziplist($allsettingsarrayref, "langpackdownloadname"); } if ( $installer::globals::helppack ) { $downloadname = installer::ziplist::getinfofromziplist($allsettingsarrayref, "helppackdownloadname"); } - if ( $installer::globals::patch ) { $downloadname = installer::ziplist::getinfofromziplist($allsettingsarrayref, "patchdownloadname"); } if ( $$downloadname ne "" ) { $create_download = 1; } if ( $installer::globals::iswindowsbuild ) diff --git a/solenv/bin/modules/installer/archivefiles.pm b/solenv/bin/modules/installer/archivefiles.pm index bd26953f7c4a..11498f836de9 100644 --- a/solenv/bin/modules/installer/archivefiles.pm +++ b/solenv/bin/modules/installer/archivefiles.pm @@ -212,18 +212,6 @@ sub resolving_archive_flag my $select_patch_files = 0; my $patchlistfiles = ""; my @keptpatchflags = (); - if (( $styles =~ /\bPATCH\b/ ) && ( $onefile->{'Patchfiles'} ) && ( $installer::globals::patch )) - { - $select_patch_files = 1; # special handling if a Patchlist is defined - $patchlistfiles = get_patch_file_list( $onefile->{'Patchfiles'} ); - $infoline = "Patch file list defined at file: $onefile->{'Name'} :\n"; - push( @installer::globals::logfileinfo, $infoline); - for ( my $k = 0; $k <= $#{$patchlistfiles}; $k++ ) - { - $infoline = "\"${$patchlistfiles}[$k]\"\n"; - push( @installer::globals::logfileinfo, $infoline); - } - } if ( $onefile->{'Patchfiles'} ) { $onefile->{'Patchfiles'} = ""; } # Patch file list no longer required @@ -398,24 +386,6 @@ sub resolving_archive_flag } } - if ( $select_patch_files ) - { - # Is this file listed in the Patchfile list? - # $zipname (filename including path in zip file has to be listed in patchfile list - - if ( ! grep {$_ eq $zipname} @{$patchlistfiles} ) - { - $newfile{'Styles'} =~ s/\bPATCH\b//; # removing the flag PATCH - $newfile{'Styles'} =~ s/\,\s*\,/\,/; - $newfile{'Styles'} =~ s/\(\s*\,/\(/; - $newfile{'Styles'} =~ s/\,\s*\)/\)/; - } - else - { - push( @keptpatchflags, $zipname); # collecting all PATCH flags - } - } - if ( $rename_to_language ) { my $newzipname = put_language_into_name($zipname, $onelanguage); @@ -484,43 +454,6 @@ sub resolving_archive_flag } - # Comparing the content of @keptpatchflags and $patchlistfiles - # Do all files from the patch list have a PATCH flag ? - # @keptpatchflags contains only files included in $patchlistfiles. But are all - # files from $patchlistfiles included in @keptpatchflags? - - if ( $select_patch_files ) - { - my $number = $#{$patchlistfiles} + 1; - $infoline = "PATCHLIST: Number of files in patch list: $number\n"; - push( @installer::globals::logfileinfo, $infoline); - $number = $#keptpatchflags + 1; - $infoline = "PATCHLIST: Number of kept PATCH flags: $number\n"; - push( @installer::globals::logfileinfo, $infoline); - - for ( my $k = 0; $k <= $#keptpatchflags; $k++ ) - { - $infoline = "KEPT PATCH FLAGS: $keptpatchflags[$k]\n"; - push( @installer::globals::logfileinfo, $infoline); - } - - my @warningfiles = (); - - for ( my $k = 0; $k <= $#{$patchlistfiles}; $k++ ) - { - if ( ! grep {$_ eq ${$patchlistfiles}[$k]} @keptpatchflags ) - { - push(@warningfiles, ${$patchlistfiles}[$k]); - } - } - - for ( my $k = 0; $k <= $#warningfiles; $k++ ) - { - $infoline = "WARNING: $warningfiles[$k] did not keep PATCH flag (does not exist in zip file)!\n"; - push( @installer::globals::logfileinfo, $infoline); - } - } - if ( $unziperror ) { installer::logger::print_warning( "Repeating to unpack $sourcepath! \n" ); diff --git a/solenv/bin/modules/installer/control.pm b/solenv/bin/modules/installer/control.pm index 3f88c472ec22..6baced7633c3 100644 --- a/solenv/bin/modules/installer/control.pm +++ b/solenv/bin/modules/installer/control.pm @@ -484,7 +484,6 @@ sub set_addsystemintegration if ( $allvariables->{'ADDSYSTEMINTEGRATION'} ) { $installer::globals::addsystemintegration = 1; } - if ( $installer::globals::patch ) { $installer::globals::addsystemintegration = 0; } if ( $installer::globals::languagepack ) { $installer::globals::addsystemintegration = 0; } if ( $installer::globals::helppack ) { $installer::globals::addsystemintegration = 0; } if (( $installer::globals::packageformat eq "native" ) || ( $installer::globals::packageformat eq "portable" )) { $installer::globals::addsystemintegration = 0; } diff --git a/solenv/bin/modules/installer/epmfile.pm b/solenv/bin/modules/installer/epmfile.pm index fa66fd91db8e..58fe27d4bab0 100644 --- a/solenv/bin/modules/installer/epmfile.pm +++ b/solenv/bin/modules/installer/epmfile.pm @@ -487,16 +487,16 @@ sub create_epm_header my $replaces = ""; - if (( $installer::globals::issolarispkgbuild ) && ( ! $installer::globals::patch )) + if ( $installer::globals::issolarispkgbuild ) { $replaces = "solarisreplaces"; # the name in the packagelist } - elsif (( $installer::globals::islinuxbuild ) && ( ! $installer::globals::patch )) + elsif ( $installer::globals::islinuxbuild ) { $replaces = "linuxreplaces"; # the name in the packagelist } - if (( $replaces ) && ( ! $installer::globals::patch )) + if ( $replaces ) { if ( $onepackage->{$replaces} ) { @@ -549,13 +549,6 @@ sub create_epm_header $provides = "freebsdprovides"; # the name in the packagelist $requires = "freebsdrequires"; # the name in the packagelist } - elsif (( $installer::globals::isrpmbuild ) && - ( $installer::globals::patch ) && - ( exists($onepackage->{'linuxpatchrequires'}) )) - { - $provides = "provides"; # the name in the packagelist - $requires = "linuxpatchrequires"; # the name in the packagelist - } else { $provides = "provides"; # the name in the packagelist @@ -1007,124 +1000,6 @@ sub set_revision_in_pkginfo } } -######################################################## -# Setting Patch information for Respin versions -# into pkginfo file. This prevents Respin versions -# from patching. -######################################################## - -sub set_patchlist_in_pkginfo_for_respin -{ - my ($changefile, $filename, $allvariables, $packagename) = @_; - - my $patchlistname = "SOLSPARCPATCHLISTFORRESPIN"; - if ( $installer::globals::issolarisx86build ) { $patchlistname = "SOLIAPATCHLISTFORRESPIN"; } - - if ( $allvariables->{$patchlistname} ) - { - # patchlist separator is a blank - my $allpatchesstring = $allvariables->{$patchlistname}; - my @usedpatches = (); - - # Analyzing the patchlist - # Syntax: 120186-10 126411-01(+core-01) -> use 126411-01 only for core-01 - # Syntax: 120186-10 126411-01(-core-01) -> use 126411-01 for all packages except for core-01 - my $allpatches = installer::converter::convert_whitespace_stringlist_into_array(\$allpatchesstring); - - for ( my $i = 0; $i <= $#{$allpatches}; $i++ ) - { - my $patchdefinition = ${$allpatches}[$i]; - - my $patchid = ""; - my $symbol = ""; - my $constraint = ""; - my $isusedpatch = 0; - - if ( $patchdefinition =~ /^\s*(.+)\(([+-])(.+)\)\s*$/ ) - { - $patchid = $1; - $symbol = $2; - $constraint = $3; - } - elsif (( $patchdefinition =~ /\(/ ) || ( $patchdefinition =~ /\)/ )) # small syntax check - { - # if there is a bracket in the $patchdefinition, but it does not - # match the if-condition, this is an erroneous definition. - installer::exiter::exit_program("ERROR: Unknown patch string: $patchdefinition", "set_patchlist_in_pkginfo_for_respin"); - } - else - { - $patchid = $patchdefinition; - $isusedpatch = 1; # patches without constraint are always included - } - - if ( $symbol ne "" ) - { - if ( $symbol eq "+" ) - { - if ( $packagename =~ /^.*\Q$constraint\E\s*$/ ) { $isusedpatch = 1; } - } - - if ( $symbol eq "-" ) - { - if ( ! ( $packagename =~ /^.*\Q$constraint\E\s*$/ )) { $isusedpatch = 1; } - } - } - - if ( $isusedpatch ) { push(@usedpatches, $patchid); } - } - - if ( $#usedpatches > -1 ) - { - my $patchstring = installer::converter::convert_array_to_space_separated_string(\@usedpatches); - - my $newline = "PATCHLIST=" . $patchstring . "\n"; - add_one_line_into_file($changefile, $newline, $filename); - - # Adding patch info for each used patch in the patchlist - - for ( my $i = 0; $i <= $#usedpatches; $i++ ) - { - my $patchid = $usedpatches[$i]; - my $key = "PATCH_INFO_" . $patchid; - $key =~ s/\s*$//; - - if ( ! $allvariables->{$key} ) { installer::exiter::exit_program("ERROR: No Patch info available in zip list file for $key", "set_patchlist_in_pkginfo"); } - my $value = set_timestamp_in_patchinfo($allvariables->{$key}); - $newline = $key . "=" . $value . "\n"; - - add_one_line_into_file($changefile, $newline, $filename); - } - } - } -} - -######################################################## -# Solaris requires, that the time of patch installation -# must not be empty. -# Format: Mon Mar 24 11:20:56 PDT 2008 -# Log file: Tue Apr 29 23:26:19 2008 (04:31 min.) -# Replace string: ${TIMESTAMP} -######################################################## - -sub set_timestamp_in_patchinfo -{ - my ($value) = @_; - - my $currenttime = localtime(); - - if ( $currenttime =~ /^\s*(.+?)(\d\d\d\d)\s*$/ ) - { - my $start = $1; - my $year = $2; - $currenttime = $start . "CET " . $year; - } - - $value =~ s/\$\{TIMESTAMP\}/$currenttime/; - - return $value; -} - ######################################################## # Setting MAXINST=1000 into the pkginfo file. ######################################################## @@ -1661,126 +1536,6 @@ sub contains_extension_dir return $contains_extension_dir; } -############################################################ -# A Solaris patch contains 7 specific scripts -############################################################ - -sub add_scripts_into_prototypefile -{ - my ($prototypefile, $prototypefilename, $languagestringref, $staticpath) = @_; - - # The files are stored in the directory $installer::globals::patchincludepath - # The file names are available via @installer::globals::solarispatchscripts - - my $path = $installer::globals::patchincludepath; - $path =~ s/\/\s*$//; - $path = $path . $installer::globals::separator; - - my @newlines = (); - my $is_extension_package = contains_extension_dir($prototypefile); - - if ( $is_extension_package ) - { - for ( my $i = 0; $i <= $#installer::globals::solarispatchscriptsforextensions; $i++ ) - { - my $sourcefilename = $path . $installer::globals::solarispatchscriptsforextensions[$i]; - my $destfile = $installer::globals::solarispatchscriptsforextensions[$i]; - - # If the sourcepath has "_extension" in its name, this has to be removed - $destfile =~ s/_extensions\s*$//; # hard coded renaming of script name - - # Creating unique directory name with $prototypefilename - my $extensiondir = installer::systemactions::create_directories("extensionscripts", $languagestringref); - - if ( $prototypefilename =~ /\/(\S*?)\s*$/ ) { $prototypefilename = $1; } - $prototypefilename =~ s/\./_/g; - my $destdir = $extensiondir . $installer::globals::separator . $prototypefilename; - if ( ! -d $destdir ) { installer::systemactions::create_directory($destdir); } - my $destpath = $destdir . $installer::globals::separator . $destfile; - if ( -f $destpath ) { unlink($destpath); } - - # Reading file - my $scriptfile = installer::files::read_file($sourcefilename); - - # Replacing variables - my $oldstring = "PRODUCTDIRECTORYNAME"; - replace_variables_in_shellscripts_for_patch($scriptfile, $destpath, $oldstring, $staticpath); - - # Saving file - installer::files::save_file($destpath, $scriptfile); - - # Writing file destination into prototype file - my $line = "i $destfile=" . $destpath . "\n"; - push(@newlines, $line); - } - } - else - { - for ( my $i = 0; $i <= $#installer::globals::solarispatchscripts; $i++ ) - { - my $line = "i $installer::globals::solarispatchscripts[$i]=" . $path . $installer::globals::solarispatchscripts[$i] . "\n"; - push(@newlines, $line); - } - } - - # Including the new lines after the last line starting with "i" - - for ( my $i = 0; $i <= $#{$prototypefile}; $i++ ) - { - if ( ${$prototypefile}[$i] =~ /^\s*i\s+copyright/ ) - { - splice(@{$prototypefile}, $i, 1); # ignoring old copyright text, using patch standard - next; - } - if ( ${$prototypefile}[$i] =~ /^\s*i\s+/ ) { next; } - splice(@{$prototypefile}, $i, 0, @newlines); - last; - } -} - -############################################################ -# Adding patch infos in pkginfo file -############################################################ - -sub include_patchinfos_into_pkginfo -{ - my ( $changefile, $filename, $variableshashref ) = @_; - - # SUNW_PATCHID=101998-10 - # SUNW_OBSOLETES=114999-01 113999-01 - # SUNW_PKGTYPE=usr - # SUNW_PKGVERS=1.0 - # SUNW_REQUIRES=126411-01 - - my $patchidname = "SOLSPARCPATCHID"; - if ( $installer::globals::issolarisx86build ) { $patchidname = "SOLIAPATCHID"; } - - if ( ! $variableshashref->{$patchidname} ) { installer::exiter::exit_program("ERROR: Variable $patchidname not defined in zip list file!", "include_patchinfos_into_pkginfo"); } - - my $newline = "SUNW_PATCHID=" . $variableshashref->{$patchidname} . "\n"; - add_one_line_into_file($changefile, $newline, $filename); - - my $patchobsoletesname = "SOLSPARCPATCHOBSOLETES"; - if ( $installer::globals::issolarisx86build ) { $patchobsoletesname = "SOLIAPATCHOBSOLETES"; } - - my $obsoletes = ""; - if ( $variableshashref->{$patchobsoletesname} ) { $obsoletes = $variableshashref->{$patchobsoletesname}; } - $newline = "SUNW_OBSOLETES=" . $obsoletes . "\n"; - add_one_line_into_file($changefile, $newline, $filename); - - my $patchrequiresname = "SOLSPARCPATCHREQUIRES"; - if ( $installer::globals::issolarisx86build ) { $patchrequiresname = "SOLIAPATCHREQUIRES"; } - - if ( $variableshashref->{$patchrequiresname} ) - { - my $requires = $variableshashref->{$patchrequiresname}; - $newline = "SUNW_REQUIRES=" . $requires . "\n"; - add_one_line_into_file($changefile, $newline, $filename); - } - $newline = "SUNW_PATCH_PROPERTIES=\n"; - add_one_line_into_file($changefile, $newline, $filename); -} - ############################################################ # Setting the correct Solaris locales ############################################################ @@ -1847,53 +1602,6 @@ sub include_languageinfos_into_pkginfo } } -############################################################ -# Collecting all files included in patch in -# @installer::globals::patchfilecollector -############################################################ - -sub collect_patch_files -{ - my ($file, $packagename, $prefix) = @_; - - # $file is the spec file or the prototypefile - - $prefix = $prefix . "/"; - my $packagenamestring = "Package " . $packagename . " \:\n"; - push(@installer::globals::patchfilecollector, $packagenamestring); - - for ( my $i = 0; $i <= $#{$file}; $i++ ) - { - my $line = ${$file}[$i]; - - if ( $installer::globals::isrpmbuild ) - { - # %attr(0444,root,root) "/opt/openofficeorg20/program/about.bmp" - - if ( $line =~ /^\s*\%attr\(.*\)\s*\"(.*?)\"\s*$/ ) - { - my $filename = $1 . "\n"; - $filename =~ s/^\s*\Q$prefix\E//; - push(@installer::globals::patchfilecollector, $filename); - } - } - - if ( $installer::globals::issolarispkgbuild ) - { - # f none program/msomrl.rdb=/ab/SRC680/unxsols4.pro/bin/msomrl.rdb 0444 root bin - - if ( $line =~ /^\s*f\s+\w+\s+(.*?)\=/ ) - { - my $filename = $1 . "\n"; - push(@installer::globals::patchfilecollector, $filename); - } - } - } - - push(@installer::globals::patchfilecollector, "\n"); - -} - ############################################################ # Including package names into the depend files. # The package names have to be included into @@ -1983,7 +1691,6 @@ sub prepare_packages set_license_in_specfile($changefile, $variableshashref); set_tab_into_datafile($changefile, $filesref); installer::files::save_file($completefilename, $changefile); - if ( $installer::globals::patch ) { collect_patch_files($changefile, $packagename, $localrelocatablepath); } } # removing the relocatable path in prototype file @@ -1994,8 +1701,6 @@ sub prepare_packages set_maxinst_in_pkginfo($changefile, $filename); set_solaris_parameter_in_pkginfo($changefile, $filename, $variableshashref); if ( $installer::globals::issolarisx86build ) { fix_architecture_setting($changefile); } - if ( ! $installer::globals::patch ) { set_patchlist_in_pkginfo_for_respin($changefile, $filename, $variableshashref, $packagename); } - if ( $installer::globals::patch ) { include_patchinfos_into_pkginfo($changefile, $filename, $variableshashref); } if (( $onepackage->{'language'} ) && ( $onepackage->{'language'} ne "" ) && ( $onepackage->{'language'} ne "en-US" )) { include_languageinfos_into_pkginfo($changefile, $filename, $languagestringref, $onepackage, $variableshashref); } installer::files::save_file($completefilename, $changefile); @@ -2012,10 +1717,7 @@ sub prepare_packages installer::files::save_file($completefilename, $changefile); } - if ( $installer::globals::patch ) { add_scripts_into_prototypefile($prototypefile, $prototypefilename, $languagestringref, $staticpath); } - installer::files::save_file($prototypefilename, $prototypefile); - if ( $installer::globals::patch ) { collect_patch_files($prototypefile, $packagename, ""); } # Adding package names into depend files for Solaris (not supported by epm) my $dependfilename = $packagename . ".depend"; @@ -2817,170 +2519,6 @@ sub analyze_rootpath } -###################################################### -# Replacing one variable in patchinfo file -###################################################### - -sub replace_one_variable_in_file -{ - my ( $file, $placeholder, $value ) = @_; - - for ( my $i = 0; $i <= $#{$file}; $i++ ) - { - ${$file}[$i] =~ s/$placeholder/$value/g; - } -} - -###################################################### -# Setting variables in the patchinfo file -###################################################### - -sub set_patchinfo -{ - my ( $patchinfofile, $patchid, $allvariables ) = @_; - - # Setting: PATCHIDPLACEHOLDER and ARCHITECTUREPLACEHOLDER and PATCHCORRECTSPLACEHOLDER - - replace_one_variable_in_file($patchinfofile, "PATCHIDPLACEHOLDER", $patchid); - - my $architecture = ""; - if ( $installer::globals::issolarissparcbuild ) { $architecture = "sparc"; } - if ( $installer::globals::issolarisx86build ) { $architecture = "i386"; } - - replace_one_variable_in_file($patchinfofile, "ARCHITECTUREPLACEHOLDER", $architecture); - - if ( ! $allvariables->{'SOLARISPATCHCORRECTS'} ) { installer::exiter::exit_program("ERROR: No setting for PATCH_CORRECTS in zip list file!", "set_patchinfo"); } - my $patchcorrects = $allvariables->{'SOLARISPATCHCORRECTS'}; - - replace_one_variable_in_file($patchinfofile, "PATCHCORRECTSPLACEHOLDER", $patchcorrects); - - # Setting also PATCH_REQUIRES in patch info file, if entry in zip list file exists - my $requiresstring = ""; - if ( $installer::globals::issolarissparcbuild ) { $requiresstring = "SOLSPARCPATCHREQUIRES"; } - if ( $installer::globals::issolarisx86build ) { $requiresstring = "SOLIAPATCHREQUIRES"; } - - if ( $allvariables->{$requiresstring} ) - { - my $newline = "PATCH_REQUIRES=\"" . $allvariables->{$requiresstring} . "\"" . "\n"; - push(@{$patchinfofile}, $newline); - } -} - -###################################################### -# Finalizing patch: Renaming directory and -# including additional patch files. -###################################################### - -sub finalize_patch -{ - my ( $newepmdir, $allvariables ) = @_; - - my $patchidname = "SOLSPARCPATCHID"; - if ( $installer::globals::issolarisx86build ) { $patchidname = "SOLIAPATCHID"; } - - if ( ! $allvariables->{$patchidname} ) { installer::exiter::exit_program("ERROR: Variable $patchidname not defined in zip list file!", "finalize_patch"); } - my $patchid = $allvariables->{$patchidname}; - installer::systemactions::rename_directory($newepmdir, $patchid); - - # Copying all typical patch files into the patch directory - # All patch file names are stored in @installer::globals::solarispatchfiles - # Location of the file is $installer::globals::patchincludepath - - my $sourcepath = $installer::globals::patchincludepath; - $sourcepath =~ s/\/\s*$//; - - for ( my $i = 0; $i <= $#installer::globals::solarispatchfiles; $i++ ) - { - my $sourcefile = $sourcepath . $installer::globals::separator . $installer::globals::solarispatchfiles[$i]; - my $destfile = $patchid . $installer::globals::separator . $installer::globals::solarispatchfiles[$i]; - installer::systemactions::copy_one_file($sourcefile, $destfile); - } - - # And editing the patchinfo file - - my $patchinfofilename = $patchid . $installer::globals::separator . "patchinfo"; - my $patchinfofile = installer::files::read_file($patchinfofilename); - set_patchinfo($patchinfofile, $patchid, $allvariables); - installer::files::save_file($patchinfofilename, $patchinfofile); -} - -###################################################### -# Finalizing Linux patch: Renaming directory and -# including additional patch files. -###################################################### - -sub finalize_linux_patch -{ - my ( $newepmdir, $allvariables, $includepatharrayref ) = @_; - - # Copying the setup into the patch directory - # and including the list of RPMs into it - - print "... creating patch setup ...\n"; - - installer::logger::include_header_into_logfile("Creating Linux patch setup:"); - - # find and read setup script template - - my $scriptfilename = "linuxpatchscript.sh"; - my $scriptref = installer::scriptitems::get_sourcepath_from_filename_and_includepath(\$scriptfilename, $includepatharrayref, 0); - if ($$scriptref eq "") { installer::exiter::exit_program("ERROR: Could not find patch script template $scriptfilename!", "finalize_linux_patch"); } - my $scriptfile = installer::files::read_file($$scriptref); - - my $infoline = "Found script file $scriptfilename: $$scriptref \n"; - push( @installer::globals::logfileinfo, $infoline); - - # Collecting all RPMs in the patch directory - - my $fileextension = "rpm"; - my $rpmfiles = installer::systemactions::find_file_with_file_extension($fileextension, $newepmdir); - if ( ! ( $#{$rpmfiles} > -1 )) { installer::exiter::exit_program("ERROR: Could not find rpm in directory $newepmdir!", "finalize_linux_patch"); } - for ( my $i = 0; $i <= $#{$rpmfiles}; $i++ ) { installer::pathanalyzer::make_absolute_filename_to_relative_filename(\${$rpmfiles}[$i]); } - - # Searching packagename containing -core01 - my $found_package = 0; - my $searchpackagename = ""; - for ( my $i = 0; $i <= $#{$rpmfiles}; $i++ ) - { - if ( ${$rpmfiles}[$i] =~ /-core01-/ ) - { - $searchpackagename = ${$rpmfiles}[$i]; - $found_package = 1; - if ( $searchpackagename =~ /^\s*(.*?-core01)-.*/ ) { $searchpackagename = $1; } - last; - } - } - - if ( ! $found_package ) { installer::exiter::exit_program("ERROR: No package containing \"-core01\" found in directory \"$newepmdir\"", "finalize_linux_patch"); } - - # Replacing the searchpackagename - for ( my $j = 0; $j <= $#{$scriptfile}; $j++ ) { ${$scriptfile}[$j] =~ s/SEARCHPACKAGENAMEPLACEHOLDER/$searchpackagename/; } - - # Setting the PRODUCTDIRECTORYNAME to $installer::globals::officedirhostname - for ( my $j = 0; $j <= $#{$scriptfile}; $j++ ) { ${$scriptfile}[$j] =~ s/PRODUCTDIRECTORYNAME/$installer::globals::officedirhostname/; } - - # Replacing the productname - my $productname = $allvariables->{'PRODUCTNAME'}; - $productname = lc($productname); - $productname =~ s/ /_/g; # abc office -> abc_office - - $infoline = "Adding productname $productname into Linux patch script\n"; - push( @installer::globals::logfileinfo, $infoline); - - for ( my $j = 0; $j <= $#{$scriptfile}; $j++ ) { ${$scriptfile}[$j] =~ s/PRODUCTNAMEPLACEHOLDER/$productname/; } - - # Saving the file - - my $newscriptfilename = "setup"; - installer::files::save_file($newscriptfilename, $scriptfile); - - $infoline = "Saved Linux patch setup $newscriptfilename \n"; - push( @installer::globals::logfileinfo, $infoline); - - # Setting unix rights 755 - chmod 0755, $newscriptfilename; -} - ################################################ # Defining the English license text to add # it into Solaris packages. diff --git a/solenv/bin/modules/installer/globals.pm b/solenv/bin/modules/installer/globals.pm index 23ac86e304ee..45aa11bab4b7 100644 --- a/solenv/bin/modules/installer/globals.pm +++ b/solenv/bin/modules/installer/globals.pm @@ -192,12 +192,9 @@ BEGIN $patch_user_dir = 0; $languagepack = 0; $helppack = 0; - $patch = 0; - $patchincludepath = ""; $refresh_includepaths = 0; $include_paths_read = 0; @patchfilecollector = (); - $nopatchfilecollector = ""; @userregistrycollector = (); $addeduserregitrykeys = 0; $desktoplinkexists = 0; @@ -256,9 +253,6 @@ BEGIN $postprocess_standardepm = 0; $mergemodules_analyzed = 0; - @solarispatchscripts = ("checkinstall", "copyright", "patch_checkinstall", "patch_postinstall", "postinstall", "preinstall", "i.none"); - @solarispatchscriptsforextensions = ("checkinstall", "copyright", "patch_checkinstall", "patch_postinstall_extensions", "postinstall_extensions", "preinstall", "i.none"); - @solarispatchfiles = (".diPatch", "patchinfo"); @packagelistitems = ("module", "solarispackagename", "packagename", "copyright", "vendor", "description" ); @languagepackfeature =(); @helppackfeature =(); diff --git a/solenv/bin/modules/installer/parameter.pm b/solenv/bin/modules/installer/parameter.pm index 609f7b41d819..2aa0a2806271 100644 --- a/solenv/bin/modules/installer/parameter.pm +++ b/solenv/bin/modules/installer/parameter.pm @@ -66,8 +66,6 @@ The following parameter are needed: -copyproject : is set for projects that are only used for copying (optional) -languagepack : do create a languagepack, no product pack (optional) -helppack : do create a helppack, no product pack (optional) --patch : do create a patch (optional) --patchinc: Source for the patch include files (Solaris only) -strip: Stripping files (Unix only) -log : Logging all available information (optional) @@ -137,12 +135,10 @@ sub getparameter elsif ($param eq "-dontcallepm") { $installer::globals::call_epm = 0; } elsif ($param eq "-msitemplate") { $installer::globals::idttemplatepath = shift(@ARGV); } elsif ($param eq "-msilanguage") { $installer::globals::idtlanguagepath = shift(@ARGV); } - elsif ($param eq "-patchinc") { $installer::globals::patchincludepath = shift(@ARGV); } elsif ($param eq "-buildid") { $installer::globals::buildid = shift(@ARGV); } elsif ($param eq "-copyproject") { $installer::globals::is_copy_only_project = 1; } elsif ($param eq "-languagepack") { $installer::globals::languagepack = 1; } elsif ($param eq "-helppack") { $installer::globals::helppack = 1;} - elsif ($param eq "-patch") { $installer::globals::patch = 1; } elsif ($param eq "-debian") { $installer::globals::debian = 1; } elsif ($param eq "-strip") { $installer::globals::strip = 1; } elsif ($param eq "-destdir") # new parameter for simple installer @@ -476,31 +472,6 @@ sub control_required_parameter } - ####################################### - # Patch currently only available - # for Solaris packages and Linux - ####################################### - - if (( $installer::globals::patch ) && ( ! $installer::globals::issolarispkgbuild ) && ( ! $installer::globals::isrpmbuild ) && ( ! $installer::globals::isdebbuild ) && ( ! $installer::globals::iswindowsbuild ) && ( ! $installer::globals::ismacdmgbuild )) - { - installer::logger::print_error( "Sorry, Patch flag currently only available for Solaris pkg, Linux RPM and Windows builds!" ); - usage(); - exit(-1); - } - - if (( $installer::globals::patch ) && ( $installer::globals::issolarispkgbuild ) && ( ! $installer::globals::patchincludepath )) - { - installer::logger::print_error( "Solaris patch requires parameter -patchinc !" ); - usage(); - exit(-1); - } - - if (( $installer::globals::patch ) && ( $installer::globals::issolarispkgbuild ) && ( $installer::globals::patchincludepath )) - { - make_path_absolute(\$installer::globals::patchincludepath); - $installer::globals::patchincludepath = installer::converter::make_path_conform($installer::globals::patchincludepath); - } - ####################################### # Testing existence of files # also for copy-only projects @@ -560,7 +531,6 @@ sub outputparameter if ((!($installer::globals::idtlanguagepath eq "")) && (!($installer::globals::iswindowsbuild))) { push(@output, "msi language path will be ignored for non Windows builds!\n"); } if ((!($installer::globals::iswindowsbuild)) && ( $installer::globals::call_epm )) { push(@output, "Calling epm\n"); } if ((!($installer::globals::iswindowsbuild)) && (!($installer::globals::call_epm))) { push(@output, "Not calling epm\n"); } - if ( $installer::globals::patchincludepath ) { push(@output, "Patch include path: $installer::globals::patchincludepath\n"); } if ( $installer::globals::strip ) { push(@output, "Stripping files\n"); } else { push(@output, "No file stripping\n"); } if ( $installer::globals::debian ) { push(@output, "Linux: Creating Debian packages\n"); } @@ -578,7 +548,6 @@ sub outputparameter if ( $installer::globals::is_copy_only_project ) { push(@output, "This is a copy only project!\n"); } if ( $installer::globals::languagepack ) { push(@output, "Creating language pack!\n"); } if ( $installer::globals::helppack ) { push(@output, "Creating help pack!\n"); } - if ( $installer::globals::patch ) { push(@output, "Creating patch!\n"); } push(@output, "########################################################\n"); # output into shell and into logfile diff --git a/solenv/bin/modules/installer/scriptitems.pm b/solenv/bin/modules/installer/scriptitems.pm index 3f32f9488622..77fa1d3619b9 100644 --- a/solenv/bin/modules/installer/scriptitems.pm +++ b/solenv/bin/modules/installer/scriptitems.pm @@ -516,21 +516,6 @@ sub use_langpack_hostname # Using different HostName for language packs ################################################################################ -sub use_patch_hostname -{ - my ($dirsref) = @_; - - for ( my $i = 0; $i <= $#{$dirsref}; $i++ ) - { - my $onedir = ${$dirsref}[$i]; - if (( $onedir->{'PatchHostName'} ) && ( $onedir->{'PatchHostName'} ne "" )) { $onedir->{'HostName'} = $onedir->{'PatchHostName'}; } - } -} - -################################################################################ -# Using different HostName for language packs -################################################################################ - sub use_langpack_copy_scpaction { my ($scpactionsref) = @_; @@ -557,21 +542,6 @@ sub use_devversion_copy_scpaction } } -################################################################################ -# Using different HostName for language packs -################################################################################ - -sub use_patch_copy_scpaction -{ - my ($scpactionsref) = @_; - - for ( my $i = 0; $i <= $#{$scpactionsref}; $i++ ) - { - my $onescpaction = ${$scpactionsref}[$i]; - if (( $onescpaction->{'PatchCopy'} ) && ( $onescpaction->{'PatchCopy'} ne "" )) { $onescpaction->{'Copy'} = $onescpaction->{'PatchCopy'}; } - } -} - ################################################################################ # Shifting parent directories of URE and Basis layer, so that # these directories are located below the Brand layer. @@ -728,7 +698,6 @@ sub replace_setup_variables $value =~ s/\/$languagesstring/; $value =~ s/\/$localbuild/; $value =~ s/\/$localminor/; - $value =~ s/\/$installer::globals::buildid/; $value =~ s/\/$installer::globals::build/; $value =~ s/\/$updateid/; $value =~ s/\/$installer::globals::packageformat/; @@ -1615,42 +1584,6 @@ sub remove_Helppacklibraries_from_Installset return \@newitemsarray; } -############################################################################ -# Removing all files with flag PATCH_ONLY from installation set. -# This function is not called during patch creation. -############################################################################ - -sub remove_patchonlyfiles_from_Installset -{ - my ($itemsarrayref) = @_; - - my $infoline; - - my @newitemsarray = (); - - for ( my $i = 0; $i <= $#{$itemsarrayref}; $i++ ) - { - my $oneitem = ${$itemsarrayref}[$i]; - my $styles = ""; - if ( $oneitem->{'Styles'} ) { $styles = $oneitem->{'Styles'}; } - - if ( $styles =~ /\bPATCH_ONLY\b/ ) - { - $infoline = "Removing file with flag PATCH_ONLY $oneitem->{'gid'} from the installation set.\n"; - push( @installer::globals::globallogfileinfo, $infoline); - - next; - } - - push(@newitemsarray, $oneitem); - } - - $infoline = "\n"; - push( @installer::globals::globallogfileinfo, $infoline); - - return \@newitemsarray; -} - ############################################################################ # Some files cotain a $ in their name. epm conflicts with such files. # Solution: Renaming this files, converting "$" to "$$" diff --git a/solenv/bin/modules/installer/simplepackage.pm b/solenv/bin/modules/installer/simplepackage.pm index 5bc319d4222b..c9ce580c5b9c 100755 --- a/solenv/bin/modules/installer/simplepackage.pm +++ b/solenv/bin/modules/installer/simplepackage.pm @@ -301,7 +301,7 @@ sub create_package my $localtempdir = $tempdir; - if (( $installer::globals::languagepack ) || ( $installer::globals::helppack ) || ( $installer::globals::patch )) + if (( $installer::globals::languagepack ) || ( $installer::globals::helppack )) { $localtempdir = "$tempdir/$packagename"; if ( $installer::globals::helppack ) { $volume_name = "$volume_name Help Pack"; } @@ -311,12 +311,6 @@ sub create_package $volume_name_classic = "$volume_name_classic Language Pack"; $volume_name_classic_app = "$volume_name_classic_app Language Pack"; } - if ( $installer::globals::patch ) - { - $volume_name = "$volume_name Patch"; - $volume_name_classic = "$volume_name_classic Patch"; - $volume_name_classic_app = "$volume_name_classic_app Patch"; - } # Create tar ball named tarball.tar.bz2 # my $appfolder = $localtempdir . "/" . $volume_name . "\.app"; @@ -362,7 +356,6 @@ sub create_package my $scriptfilename = ""; if ( $installer::globals::languagepack ) { $scriptfilename = "osx_install_languagepack.applescript"; } if ( $installer::globals::helppack ) { $scriptfilename = "osx_install_helppack.applescript"; } - if ( $installer::globals::patch ) { $scriptfilename = "osx_install_patch.applescript"; } my $scripthelpersolverfilename = "mac_install.script"; # my $scripthelperrealfilename = $volume_name; my $scripthelperrealfilename = $volume_name_classic_app; @@ -508,7 +501,6 @@ sub create_simple_package $downloadname = installer::ziplist::getinfofromziplist($allsettingsarrayref, "downloadname"); if ( $installer::globals::languagepack ) { $downloadname = installer::ziplist::getinfofromziplist($allsettingsarrayref, "langpackdownloadname"); } if ( $installer::globals::helppack ) { $downloadname = installer::ziplist::getinfofromziplist($allsettingsarrayref, "helppackdownloadname"); } - if ( $installer::globals::patch ) { $downloadname = installer::ziplist::getinfofromziplist($allsettingsarrayref, "patchdownloadname"); } $packagename = installer::download::resolve_variables_in_downloadname($allvariables, $$downloadname, \$locallanguage); } } @@ -574,8 +566,6 @@ sub create_simple_package my $onefile = ${$filesref}[$i]; if (( $onefile->{'Styles'} ) && ( $onefile->{'Styles'} =~ /\bBINARYTABLE_ONLY\b/ )) { next; } - if (( $installer::globals::patch ) && ( $onefile->{'Styles'} ) && ( ! ( $onefile->{'Styles'} =~ /\bPATCH\b/ ))) { next; } - if (( $installer::globals::patch ) && ( $installer::globals::packageformat eq "dmg" )) { push(@installer::globals::patchfilecollector, "$onefile->{'destination'}\n"); } my $source = $onefile->{'sourcepath'}; my $destination = $onefile->{'destination'}; @@ -627,8 +617,6 @@ sub create_simple_package { my $onelink = ${$linksref}[$i]; - if (( $installer::globals::patch ) && ( $onelink->{'Styles'} ) && ( ! ( $onelink->{'Styles'} =~ /\bPATCH\b/ ))) { next; } - my $destination = $onelink->{'destination'}; $destination = $subfolderdir . $installer::globals::separator . $destination; my $destinationfile = $onelink->{'destinationfile'}; @@ -644,8 +632,6 @@ sub create_simple_package { my $onelink = ${$unixlinksref}[$i]; - if (( $installer::globals::patch ) && ( $onelink->{'Styles'} ) && ( ! ( $onelink->{'Styles'} =~ /\bPATCH\b/ ))) { next; } - my $target = $onelink->{'Target'}; my $destination = $subfolderdir . $installer::globals::separator . $onelink->{'destination'}; diff --git a/solenv/bin/modules/installer/systemactions.pm b/solenv/bin/modules/installer/systemactions.pm index 22d83fb6058b..e2c11ff6ba94 100644 --- a/solenv/bin/modules/installer/systemactions.pm +++ b/solenv/bin/modules/installer/systemactions.pm @@ -230,7 +230,6 @@ sub create_directories if ( $installer::globals::languagepack ) { $path = $path . $localproductname . "_languagepack" . $installer::globals::separator; } elsif ( $installer::globals::helppack ) { $path = $path . $localproductname . "_helppack" . $installer::globals::separator; } - elsif ( $installer::globals::patch ) { $path = $path . $localproductname . "_patch" . $installer::globals::separator; } else { $path = $path . $localproductname . $installer::globals::separator; } create_directory($path); diff --git a/solenv/bin/modules/installer/windows/createfolder.pm b/solenv/bin/modules/installer/windows/createfolder.pm index 5f42ee71c74a..d43961bb0360 100644 --- a/solenv/bin/modules/installer/windows/createfolder.pm +++ b/solenv/bin/modules/installer/windows/createfolder.pm @@ -88,10 +88,8 @@ sub get_createfolder_component # containing the file $allvariableshashref->{'GLOBALFILEGID'} if ( ! $allvariableshashref->{'GLOBALFILEGID'} ) { installer::exiter::exit_program("ERROR: GLOBALFILEGID must be defined in list file!", "get_createfolder_component"); } - if (( $installer::globals::patch ) && ( ! $allvariableshashref->{'GLOBALFILEGID'} )) { installer::exiter::exit_program("ERROR: GLOBALPATCHFILEGID must be defined in list file!", "get_createfolder_component"); } my $globalfilegid = $allvariableshashref->{'GLOBALFILEGID'}; - if ( $installer::globals::patch ) { $globalfilegid = $allvariableshashref->{'GLOBALPATCHFILEGID'}; } my $onefile; if ( $installer::globals::languagepack ) { $onefile = get_languagepack_file($filesref, $onedir); } diff --git a/solenv/bin/modules/installer/windows/directory.pm b/solenv/bin/modules/installer/windows/directory.pm index 92cb9209393d..97b9937611bb 100644 --- a/solenv/bin/modules/installer/windows/directory.pm +++ b/solenv/bin/modules/installer/windows/directory.pm @@ -253,8 +253,7 @@ sub check_sourcedir_addon { my ( $onedir, $allvariableshashref ) = @_; - if (($installer::globals::patch) || - ($installer::globals::languagepack) || + if (($installer::globals::languagepack) || ($installer::globals::helppack) || ($allvariableshashref->{'CHANGETARGETDIR'})) { @@ -407,7 +406,7 @@ sub add_root_directories my $oneline = ""; - if (( ! $installer::globals::patch ) && ( ! $installer::globals::languagepack ) && ( ! $installer::globals::helppack ) && ( ! $allvariableshashref->{'DONTUSESTARTMENUFOLDER'} )) + if (( ! $installer::globals::languagepack ) && ( ! $installer::globals::helppack ) && ( ! $allvariableshashref->{'DONTUSESTARTMENUFOLDER'} )) { my $productname; diff --git a/solenv/bin/modules/installer/windows/feature.pm b/solenv/bin/modules/installer/windows/feature.pm index c22b8646523b..d8ead0336ec3 100644 --- a/solenv/bin/modules/installer/windows/feature.pm +++ b/solenv/bin/modules/installer/windows/feature.pm @@ -141,7 +141,6 @@ sub get_feature_level if ( $localdefault eq "NO" ) # explicitly set Default = "NO" { $level = "200"; # deselected in default installation, base is 100 - if ( $installer::globals::patch ) { $level = "20"; } } # special handling for Java and Ada diff --git a/solenv/bin/modules/installer/windows/idtglobal.pm b/solenv/bin/modules/installer/windows/idtglobal.pm index b29004e4fb55..de80cef62016 100644 --- a/solenv/bin/modules/installer/windows/idtglobal.pm +++ b/solenv/bin/modules/installer/windows/idtglobal.pm @@ -760,23 +760,6 @@ sub prepare_language_idt_directory { installer::systemactions::create_directory($destinationdir . $installer::globals::separator . "Binary"); installer::systemactions::copy_directory($installer::globals::idttemplatepath . $installer::globals::separator . "Binary", $destinationdir . $installer::globals::separator . "Binary"); - - if ((( $installer::globals::patch ) && ( $allvariables->{'WINDOWSPATCHBITMAPDIRECTORY'} )) || ( $allvariables->{'WINDOWSBITMAPDIRECTORY'} )) - { - my $bitmapdir = ""; - if ( $allvariables->{'WINDOWSPATCHBITMAPDIRECTORY'} ) { $bitmapdir = $allvariables->{'WINDOWSPATCHBITMAPDIRECTORY'}; } - if ( $allvariables->{'WINDOWSBITMAPDIRECTORY'} ) { $bitmapdir = $allvariables->{'WINDOWSBITMAPDIRECTORY'}; } - - my $newsourcedir = $installer::globals::unpackpath . $installer::globals::separator . $bitmapdir; # path setting in list file dependent from unpackpath !? - $infoline = "\nOverwriting files in directory \"" . $destinationdir . $installer::globals::separator . "Binary" . "\" with files from directory \"" . $newsourcedir . "\".\n"; - push( @installer::globals::logfileinfo, $infoline); - if ( ! -d $newsourcedir ) - { - my $currentdir = cwd(); - installer::exiter::exit_program("ERROR: Directory $newsourcedir does not exist! Current directory is: $currentdir", "prepare_language_idt_directory"); - } - installer::systemactions::copy_directory($newsourcedir, $destinationdir . $installer::globals::separator . "Binary"); - } } installer::systemactions::create_directory($destinationdir . $installer::globals::separator . "Icon"); @@ -1714,18 +1697,6 @@ sub addcustomactions if ( $customaction->{$key} ) { $value = $customaction->{$key}; - - # in a patch the Assignment can be overwritten by a PatchAssignment - if ( $installer::globals::patch ) - { - $patchkey = "PatchAssignment" . $j; - if ( $customaction->{$patchkey} ) - { - $value = $customaction->{$patchkey}; - $key = $patchkey; - } - } - } else { last; } diff --git a/solenv/bin/modules/installer/windows/inifile.pm b/solenv/bin/modules/installer/windows/inifile.pm index d13fafc26fd6..1b4fd5c64efe 100644 --- a/solenv/bin/modules/installer/windows/inifile.pm +++ b/solenv/bin/modules/installer/windows/inifile.pm @@ -48,23 +48,6 @@ sub get_profile_for_profileitem return $profile; } -#################################################### -# Checking whether profile is included in patch -#################################################### - -sub profile_has_patch_flag -{ - my ($profile) = @_; - - my $in_patch = 0; - - my $styles = ""; - if ( $profile->{'Styles'} ) { $styles = $profile->{'Styles'}; } - if ( $styles =~ /\bPATCH\b/ ) { $in_patch = 1; } - - return $in_patch; -} - #################################################### # Checking whether profile is part of product #################################################### @@ -117,8 +100,6 @@ sub create_inifile_table my $profile = get_profile_for_profileitem($profileid, $filesref); - if (( $installer::globals::patch ) && ( ! profile_has_patch_flag($profile) )) { next; } - my %inifile = (); $inifile{'IniFile'} = $profileitem->{'Inifiletablekey'}; diff --git a/solenv/bin/modules/installer/windows/mergemodule.pm b/solenv/bin/modules/installer/windows/mergemodule.pm index f4e5951150cd..40ad40474bf3 100755 --- a/solenv/bin/modules/installer/windows/mergemodule.pm +++ b/solenv/bin/modules/installer/windows/mergemodule.pm @@ -51,7 +51,7 @@ sub merge_mergemodules_into_msi_database my ($mergemodules, $filesref, $msifilename, $languagestringref, $allvariables, $includepatharrayref, $allupdatesequences, $allupdatelastsequences, $allupdatediskids) = @_; my $domerge = 0; - if (( $#{$mergemodules} > -1 ) && ( ! $installer::globals::patch ) && ( ! $installer::globals::languagepack ) && ( ! $installer::globals::helppack )) { $domerge = 1; } + if (( $#{$mergemodules} > -1 ) && ( ! $installer::globals::languagepack ) && ( ! $installer::globals::helppack )) { $domerge = 1; } if ( $domerge ) { diff --git a/solenv/bin/modules/installer/windows/msiglobal.pm b/solenv/bin/modules/installer/windows/msiglobal.pm index 0a898edfc34c..6087d1dfb428 100644 --- a/solenv/bin/modules/installer/windows/msiglobal.pm +++ b/solenv/bin/modules/installer/windows/msiglobal.pm @@ -1369,19 +1369,11 @@ sub set_global_code_variables $installer::globals::productcode = "\{" . ${$guidref}[0] . "\}"; } - if ( $installer::globals::patch ) # patch upgrade codes are defined in soffice.lst - { - if ( $allvariableshashref->{'PATCHUPGRADECODE'} ) { $installer::globals::upgradecode = $allvariableshashref->{'PATCHUPGRADECODE'}; } - else { installer::exiter::exit_program("ERROR: PATCHUPGRADECODE not defined in list file!", "set_global_code_variables"); } - } - else - { - # UpgradeCode can take english as default, if not defined in specified language + # UpgradeCode can take english as default, if not defined in specified language - $searchstring = "UPGRADECODE"; # searching in the codes.txt file - $codeblock = installer::windows::idtglobal::get_language_block_from_language_file($searchstring, $codefile); - $installer::globals::upgradecode = installer::windows::idtglobal::get_language_string_from_language_block($codeblock, $onelanguage, ""); - } + $searchstring = "UPGRADECODE"; # searching in the codes.txt file + $codeblock = installer::windows::idtglobal::get_language_block_from_language_file($searchstring, $codefile); + $installer::globals::upgradecode = installer::windows::idtglobal::get_language_string_from_language_block($codeblock, $onelanguage, ""); if ( $installer::globals::upgradecode eq "" ) { installer::exiter::exit_program("ERROR: UpgradeCode not defined in $installer::globals::codefilename !", "set_global_code_variables"); } diff --git a/solenv/bin/modules/installer/windows/property.pm b/solenv/bin/modules/installer/windows/property.pm index 56f4ba5da0cb..58435d6e130e 100644 --- a/solenv/bin/modules/installer/windows/property.pm +++ b/solenv/bin/modules/installer/windows/property.pm @@ -56,13 +56,6 @@ sub get_arpcomments_for_property_table if ( $installer::globals::languagepack ) { $comment = $comment . " " . "Language Pack"; } elsif ( $installer::globals::helppack ) { $comment = $comment . " " . "Help Pack"; } - if ( $installer::globals::patch ) - { - if ( ! $allvariables->{'WINDOWSPATCHLEVEL'} ) { installer::exiter::exit_program("ERROR: No Patch level defined for Windows patch: WINDOWSPATCHLEVEL", "get_arpcomments_for_property_table"); } - my $patchstring = "Product Update" . " " . $allvariables->{'WINDOWSPATCHLEVEL'}; - $comment = $comment . " " . $patchstring; - } - my $languagestring = $$languagestringref; $languagestring =~ s/\_/\,/g; @@ -181,13 +174,6 @@ sub get_productname_for_property_table($$) $productname = $name . " " . $version . " Help Pack" . " " . $langstring; } - if ( $installer::globals::patch ) - { - if ( ! $allvariables->{'WINDOWSPATCHLEVEL'} ) { installer::exiter::exit_program("ERROR: No Patch level defined for Windows patch: WINDOWSPATCHLEVEL", "get_productname_for_property_table"); } - my $patchstring = "Product Update" . " " . $allvariables->{'WINDOWSPATCHLEVEL'}; - $productname = $productname . " " . $patchstring; - } - # Saving this name in hash $allvariables for further usage $allvariables->{'PROPERTYTABLEPRODUCTNAME'} = $productname; my $infoline = "Defined variable PROPERTYTABLEPRODUCTNAME: $productname\n"; @@ -216,23 +202,6 @@ sub get_productversion_for_property_table return $installer::globals::msiproductversion; } -####################################################### -# Setting all feature names as Properties. This is -# required for the Windows patch process. -####################################################### - -sub set_featurename_properties_for_patch -{ - ($propertyfile) = @_; - - for ( my $i = 0; $i <= $#installer::globals::featurecollector; $i++ ) - { - my $onepropertyline = $installer::globals::featurecollector[$i] . "\t" . "1" . "\n"; - push(@{$propertyfile}, $onepropertyline); - } - -} - ####################################################### # Setting some important properties # (for finding the product in deinstallation process) @@ -329,12 +298,6 @@ sub set_important_properties push(@{$propertyfile}, $onepropertyline); } - if ( $installer::globals::patch ) - { - my $onepropertyline = "ISPATCH" . "\t" . "1" . "\n"; - push(@{$propertyfile}, $onepropertyline); - } - if ( $installer::globals::languagepack ) { my $onepropertyline = "ISLANGUAGEPACK" . "\t" . "1" . "\n"; @@ -503,9 +466,6 @@ sub update_property_table # Setting variables into propertytable set_important_properties($propertyfile, $allvariables, $languagestringref); - # Setting feature names as properties for Windows patch mechanism - if ( $installer::globals::patch ) { set_featurename_properties_for_patch($propertyfile); } - # Setting variables for register for ms file types set_ms_file_types_properties($propertyfile); diff --git a/solenv/bin/modules/installer/windows/upgrade.pm b/solenv/bin/modules/installer/windows/upgrade.pm index 547bc4ce7bf1..91f5f71c6080 100644 --- a/solenv/bin/modules/installer/windows/upgrade.pm +++ b/solenv/bin/modules/installer/windows/upgrade.pm @@ -65,67 +65,64 @@ sub create_upgrade_table $newline = $installer::globals::upgradecode . "\t" . $installer::globals::msimajorproductversion . "\t" . $installer::globals::msiproductversion . "\t" . "\t" . "769" . "\t" . "\t" . "OLDPRODUCTSSAMEMAJOR" . "\n"; push(@upgradetable, $newline); - if ( ! $installer::globals::patch ) - { - # preventing downgrading - $newline = $installer::globals::upgradecode . "\t" . $installer::globals::msiproductversion . "\t" . $ooomaxnew . "\t" . "\t" . "2" . "\t" . "\t" . "NEWPRODUCTS" . "\n"; + # preventing downgrading + $newline = $installer::globals::upgradecode . "\t" . $installer::globals::msiproductversion . "\t" . $ooomaxnew . "\t" . "\t" . "2" . "\t" . "\t" . "NEWPRODUCTS" . "\n"; + push(@upgradetable, $newline); + + # $newline = $installer::globals::upgradecode . "\t" . $installer::globals::msiproductversion . "\t" . $ooomaxnew . "\t" . "\t" . "258" . "\t" . "\t" . "SAMEPRODUCTS" . "\n"; + # push(@upgradetable, $newline); + + if ( $include_ooo_fix ) + { + $newline = $installer::globals::upgradecode . "\t" . "35.0.0" . "\t" . "36.0.0" . "\t" . "\t" . "1" . "\t" . "\t" . "OLDPRODUCTS2" . "\n"; + push(@upgradetable, $newline); + } + + # if (( $allvariableshashref->{'PATCHUPGRADECODE'} ) && ( ! $installer::globals::languagepack )) + # { + # $newline = $allvariableshashref->{'PATCHUPGRADECODE'} . "\t" . "\t" . $installer::globals::msiproductversion . "\t" . "\t" . "1" . "\t" . "\t" . "OLDPRODUCTSPATCH" . "\n"; + # push(@upgradetable, $newline); + # + # $newline = $allvariableshashref->{'PATCHUPGRADECODE'} . "\t" . $installer::globals::msiproductversion . "\t" . "\t" . "\t" . "2" . "\t" . "\t" . "NEWPRODUCTSPATCH" . "\n"; + # push(@upgradetable, $newline); + # + # $newline = $allvariableshashref->{'PATCHUPGRADECODE'} . "\t" . $installer::globals::msiproductversion . "\t" . "\t" . "\t" . "258" . "\t" . "\t" . "SAMEPRODUCTSPATCH" . "\n"; + # push(@upgradetable, $newline); + # } + + # also searching for the beta + + if (( $allvariableshashref->{'BETAUPGRADECODE'} ) && ( ! $installer::globals::languagepack ) && ( ! $installer::globals::helppack )) + { + $newline = $allvariableshashref->{'BETAUPGRADECODE'} . "\t" . "1.0" . "\t" . "\t" . "\t" . "1" . "\t" . "\t" . "BETAPRODUCTS" . "\n"; push(@upgradetable, $newline); + } - # $newline = $installer::globals::upgradecode . "\t" . $installer::globals::msiproductversion . "\t" . $ooomaxnew . "\t" . "\t" . "258" . "\t" . "\t" . "SAMEPRODUCTS" . "\n"; - # push(@upgradetable, $newline); - - if ( $include_ooo_fix ) - { - $newline = $installer::globals::upgradecode . "\t" . "35.0.0" . "\t" . "36.0.0" . "\t" . "\t" . "1" . "\t" . "\t" . "OLDPRODUCTS2" . "\n"; - push(@upgradetable, $newline); - } - - # if (( $allvariableshashref->{'PATCHUPGRADECODE'} ) && ( ! $installer::globals::languagepack )) - # { - # $newline = $allvariableshashref->{'PATCHUPGRADECODE'} . "\t" . "\t" . $installer::globals::msiproductversion . "\t" . "\t" . "1" . "\t" . "\t" . "OLDPRODUCTSPATCH" . "\n"; - # push(@upgradetable, $newline); - # - # $newline = $allvariableshashref->{'PATCHUPGRADECODE'} . "\t" . $installer::globals::msiproductversion . "\t" . "\t" . "\t" . "2" . "\t" . "\t" . "NEWPRODUCTSPATCH" . "\n"; - # push(@upgradetable, $newline); - # - # $newline = $allvariableshashref->{'PATCHUPGRADECODE'} . "\t" . $installer::globals::msiproductversion . "\t" . "\t" . "\t" . "258" . "\t" . "\t" . "SAMEPRODUCTSPATCH" . "\n"; - # push(@upgradetable, $newline); - # } - - # also searching for the beta - - if (( $allvariableshashref->{'BETAUPGRADECODE'} ) && ( ! $installer::globals::languagepack ) && ( ! $installer::globals::helppack )) - { - $newline = $allvariableshashref->{'BETAUPGRADECODE'} . "\t" . "1.0" . "\t" . "\t" . "\t" . "1" . "\t" . "\t" . "BETAPRODUCTS" . "\n"; - push(@upgradetable, $newline); - } - - # also searching for the stub - - if (( $allvariableshashref->{'STUBUPGRADECODE'} ) && ( ! $installer::globals::languagepack ) && ( ! $installer::globals::helppack )) - { - $newline = $allvariableshashref->{'STUBUPGRADECODE'} . "\t" . "1.0" . "\t" . "\t" . "\t" . "1" . "\t" . "\t" . "STUBPRODUCTS" . "\n"; - push(@upgradetable, $newline); - } - - # searching for all older patches and languagepacks (defined in a extra file) - - if (( $allvariableshashref->{'REMOVE_UPGRADE_CODE_FILE'} ) && ( ! $installer::globals::languagepack ) && ( ! $installer::globals::helppack )) - { - my $filename = $allvariableshashref->{'REMOVE_UPGRADE_CODE_FILE'}; - my $langpackcodefilename = $installer::globals::idttemplatepath . $installer::globals::separator . $filename; - if ( ! -f $langpackcodefilename ) { installer::exiter::exit_program("ERROR: Could not find file \"$langpackcodefilename\".", "create_upgrade_table"); } - - my $filecontent = installer::files::read_file($langpackcodefilename); - my $newlines = analyze_file_for_upgrade_table($filecontent); - - for ( my $i = 0; $i <= $#{$newlines}; $i++ ) { push(@upgradetable, ${$newlines}[$i]); } - } - } + # also searching for the stub + + if (( $allvariableshashref->{'STUBUPGRADECODE'} ) && ( ! $installer::globals::languagepack ) && ( ! $installer::globals::helppack )) + { + $newline = $allvariableshashref->{'STUBUPGRADECODE'} . "\t" . "1.0" . "\t" . "\t" . "\t" . "1" . "\t" . "\t" . "STUBPRODUCTS" . "\n"; + push(@upgradetable, $newline); + } + + # searching for all older patches and languagepacks (defined in a extra file) + + if (( $allvariableshashref->{'REMOVE_UPGRADE_CODE_FILE'} ) && ( ! $installer::globals::languagepack ) && ( ! $installer::globals::helppack )) + { + my $filename = $allvariableshashref->{'REMOVE_UPGRADE_CODE_FILE'}; + my $langpackcodefilename = $installer::globals::idttemplatepath . $installer::globals::separator . $filename; + if ( ! -f $langpackcodefilename ) { installer::exiter::exit_program("ERROR: Could not find file \"$langpackcodefilename\".", "create_upgrade_table"); } + + my $filecontent = installer::files::read_file($langpackcodefilename); + my $newlines = analyze_file_for_upgrade_table($filecontent); + + for ( my $i = 0; $i <= $#{$newlines}; $i++ ) { push(@upgradetable, ${$newlines}[$i]); } + } # No upgrade for Beta versions! - if (( $allvariableshashref->{'PRODUCTEXTENSION'} eq "Beta" ) && ( ! $installer::globals::patch ) && ( ! $installer::globals::languagepack ) && ( ! $installer::globals::helppack )) + if (( $allvariableshashref->{'PRODUCTEXTENSION'} eq "Beta" ) && ( ! $installer::globals::languagepack ) && ( ! $installer::globals::helppack )) { @upgradetable = (); installer::windows::idtglobal::write_idt_header(\@upgradetable, "upgrade"); diff --git a/solenv/bin/modules/installer/worker.pm b/solenv/bin/modules/installer/worker.pm index f860f632df76..9a122e46f255 100644 --- a/solenv/bin/modules/installer/worker.pm +++ b/solenv/bin/modules/installer/worker.pm @@ -44,57 +44,6 @@ use installer::scriptitems; use installer::systemactions; use installer::windows::language; -################################################# -# Writing some global information into -# the list of files without flag PATCH -################################################# - -sub write_nopatchlist_header -{ - my ( $content ) = @_; - - my @header = (); - my $infoline = "This is a list of files, that are defined in scp-projects without\n"; - push(@header, $infoline); - $infoline = "flag \"PATCH\". Important: This does not mean in any case, that \n"; - push(@header, $infoline); - $infoline = "this files are included into or excluded from a patch. \n\n"; - push(@header, $infoline); - $infoline = "Exception Linux: A patch rpm is a complete rpm. This means that all \n"; - push(@header, $infoline); - $infoline = "files are included into a patch rpm, if only one file of the rpm has the \n"; - push(@header, $infoline); - $infoline = "style \"PATCH\". \n\n"; - push(@header, $infoline); - - for ( my $i = 0; $i <= $#header; $i++ ) { push(@{$content},$header[$i]); } -} - -################################################# -# Creating the content of the list of files -# without flag PATCH. -# All files are saved in -# @{$installer::globals::nopatchfilecollector} -################################################# - -sub create_nopatchlist -{ - my @content =(); - - write_nopatchlist_header(\@content); - - for ( my $i = 0; $i <= $#{$installer::globals::nopatchfilecollector}; $i++ ) - { - my $onefile = ${$installer::globals::nopatchfilecollector}[$i]; - my $oneline = $onefile->{'destination'}; - if ( $onefile->{'zipfilename'} ) { $oneline = $oneline . " (" . $onefile->{'zipfilename'} . ")"; } - $oneline = $oneline . "\n"; - push(@content, $oneline); - } - - return \@content; -} - ######################################### # Saving the patchlist file ######################################### @@ -109,14 +58,6 @@ sub _save_patchlist_file installer::files::save_file($installpatchlistdir . $installer::globals::separator . $patchlistfilename, \@installer::globals::patchfilecollector); installer::logger::print_message( "... creating patchlist file $patchlistfilename \n" ); - if (( $installer::globals::patch ) && ( ! $installer::globals::creating_windows_installer_patch )) # only for non-Windows patches - { - $patchlistfilename =~ s/patchfiles\_/nopatchfiles\_/; - my $nopatchlist = create_nopatchlist(); - installer::files::save_file($installpatchlistdir . $installer::globals::separator . $patchlistfilename, $nopatchlist); - installer::logger::print_message( "... creating patch exclusion file $patchlistfilename \n" ); - } - } ############################################################### @@ -221,7 +162,7 @@ sub analyze_and_save_logfile installer::files::save_file($installlogdir . $installer::globals::separator . $numberedlogfilename, \@installer::globals::logfileinfo); # Saving the list of patchfiles in a patchlist directory in the install directory - if (( $installer::globals::patch ) || ( $installer::globals::creating_windows_installer_patch )) { _save_patchlist_file($installlogdir, $numberedlogfilename); } + if ( $installer::globals::creating_windows_installer_patch ) { _save_patchlist_file($installlogdir, $numberedlogfilename); } if ( $installer::globals::creating_windows_installer_patch ) { $installer::globals::creating_windows_installer_patch = 0; } @@ -312,20 +253,6 @@ sub collect_all_items_with_special_flag return \@allitems; } -############################################################## -# Collecting all files without patch flag in -# $installer::globals::nopatchfilecollector -############################################################## - -sub collect_all_files_without_patch_flag -{ - my ($filesref) = @_; - - my $newfiles = collect_all_items_without_special_flag($filesref, "PATCH"); - - for ( my $i = 0; $i <= $#{$newfiles}; $i++ ) { push(@{$installer::globals::nopatchfilecollector}, ${$newfiles}[$i]); } -} - ############################################################## # Collecting all items without a defined flag ############################################################## @@ -488,63 +415,6 @@ sub install_simple ($$$$$$) } -########################################################### -# Selecting patch items -########################################################### - -sub select_patch_items -{ - my ( $itemsref, $itemname ) = @_; - - installer::logger::include_header_into_logfile("Selecting items for patches. Item: $itemname"); - - my @itemsarray = (); - - for ( my $i = 0; $i <= $#{$itemsref}; $i++ ) - { - my $oneitem = ${$itemsref}[$i]; - - my $name = $oneitem->{'Name'}; - if (( $name =~ /\bLICENSE/ ) || ( $name =~ /\bREADME/ )) - { - push(@itemsarray, $oneitem); - next; - } - - # Items with style "PATCH" have to be included into the patch - my $styles = ""; - if ( $oneitem->{'Styles'} ) { $styles = $oneitem->{'Styles'}; } - if ( $styles =~ /\bPATCH\b/ ) { push(@itemsarray, $oneitem); } - } - - return \@itemsarray; -} - -########################################################### -# Selecting patch items -########################################################### - -sub select_patch_items_without_name -{ - my ( $itemsref, $itemname ) = @_; - - installer::logger::include_header_into_logfile("Selecting RegistryItems for patches"); - - my @itemsarray = (); - - for ( my $i = 0; $i <= $#{$itemsref}; $i++ ) - { - my $oneitem = ${$itemsref}[$i]; - - # Items with style "PATCH" have to be included into the patch - my $styles = ""; - if ( $oneitem->{'Styles'} ) { $styles = $oneitem->{'Styles'}; } - if ( $styles =~ /\bPATCH\b/ ) { push(@itemsarray, $oneitem); } - } - - return \@itemsarray; -} - ########################################################### # Selecting langpack items ########################################################### @@ -595,257 +465,6 @@ sub select_helppack_items return \@itemsarray; } -########################################################### -# Searching if LICENSE and README, which are not removed -# in select_patch_items are really needed for the patch. -# If not, they are removed now. -########################################################### - -sub analyze_patch_files -{ - my ( $filesref ) = @_; - - installer::logger::include_header_into_logfile("Analyzing patch files"); - - my @filesarray = (); - - for ( my $i = 0; $i <= $#{$filesref}; $i++ ) - { - my $onefile = ${$filesref}[$i]; - my $styles = ""; - if ( $onefile->{'Styles'} ) { $styles = $onefile->{'Styles'}; } - if ( !( $styles =~ /\bPATCH\b/) ) { next; } # removing all files without flag PATCH (LICENSE, README, ...) - - if ( $installer::globals::iswindowsbuild ) - { - # all files of the Windows patch belong to the root module - $onefile->{'modules'} = $installer::globals::rootmodulegid; - } - - push(@filesarray, $onefile); - } - - return \@filesarray; -} - -########################################################### -# reorganizing the patchfile content, -# sorting for directory to decrease the file size -########################################################### - -sub reorg_patchfile -{ - my ($patchfiles, $patchfiledirectories) = @_; - - my @patchfilesarray = (); - my $line = ""; - my $directory = ""; - - # iterating over all directories, writing content into new patchfiles list - - for ( my $i = 0; $i <= $#{$patchfiledirectories}; $i++ ) - { - $directory = ${$patchfiledirectories}[$i]; - $line = "[" . $directory . "]" . "\n"; - push(@patchfilesarray, $line); - - for ( my $j = 0; $j <= $#{$patchfiles}; $j++ ) - { - if ( ${$patchfiles}[$j] =~ /^\s*(.*?)\s*\tXXXXX\t\Q$directory\E\s*$/ ) - { - $line = $1 . "\n"; - push(@patchfilesarray, $line); - } - } - } - - return \@patchfilesarray; -} - -########################################################### -# One special file has to be the last in patchfile.txt. -# Controlling this file, guarantees, that all files were -# patch correctly. Using version.ini makes it easy to -# control this by looking into the about box -# -> shifting one section to the end -########################################################### - -sub shift_section_to_end -{ - my ($patchfilelist) = @_; - - my @patchfile = (); - my @lastsection = (); - my $lastsection = "program"; - my $notlastsection = "Basis\\program"; - my $record = 0; - - for ( my $i = 0; $i <= $#{$patchfilelist}; $i++ ) - { - my $line = ${$patchfilelist}[$i]; - - if (( $record ) && ( $line =~ /^\s*\[/ )) { $record = 0; } - - if (( $line =~ /^\s*\[\Q$lastsection\E\\\]\s*$/ ) && ( ! ( $line =~ /\Q$notlastsection\E\\\]\s*$/ ))) { $record = 1; } - - if ( $record ) { push(@lastsection, $line); } - else { push(@patchfile, $line); } - } - - if ( $#lastsection > -1 ) - { - for ( my $i = 0; $i <= $#lastsection; $i++ ) - { - push(@patchfile, $lastsection[$i]); - } - } - - return \@patchfile; -} - -########################################################### -# One special file has to be the last in patchfile.txt. -# Controlling this file, guarantees, that all files were -# patch correctly. Using version.ini makes it easy to -# control this by looking into the about box -# -> shifting one file of the last section to the end -########################################################### - -sub shift_file_to_end -{ - my ($patchfilelist) = @_; - - my @patchfile = (); - my $lastfilename = "version.ini"; - my $lastfileline = ""; - my $foundfile = 0; - - # Only searching this file in the last section - my $lastsectionname = ""; - - for ( my $i = 0; $i <= $#{$patchfilelist}; $i++ ) - { - my $line = ${$patchfilelist}[$i]; - if ( $line =~ /^\s*\[(.*?)\]\s*$/ ) { $lastsectionname = $1; } - } - - my $record = 0; - for ( my $i = 0; $i <= $#{$patchfilelist}; $i++ ) - { - my $line = ${$patchfilelist}[$i]; - - if ( $line =~ /^\s*\[\Q$lastsectionname\E\]\s*$/ ) { $record = 1; } - - if (( $line =~ /^\s*\"\Q$lastfilename\E\"\=/ ) && ( $record )) - { - $lastfileline = $line; - $foundfile = 1; - $record = 0; - next; - } - - push(@patchfile, $line); - } - - if ( $foundfile ) { push(@patchfile, $lastfileline); } - - return \@patchfile; -} - -########################################################### -# Renaming Windows files in Patch and creating file -# patchfiles.txt -########################################################### - -sub prepare_windows_patchfiles -{ - my ( $filesref, $languagestringref, $allvariableshashref ) = @_; - - my @patchfiles = (); - my %patchfiledirectories = (); - my $patchfilename = "patchlist.txt"; - my $patchfilename2 = "patchmsi.dll"; - - if ( ! $allvariableshashref->{'WINDOWSPATCHLEVEL'} ) { installer::exiter::exit_program("ERROR: No Windows patch level defined in list file (WINDOWSPATCHLEVEL) !", "prepare_windows_patchfiles"); } - my $windowspatchlevel = $installer::globals::buildid; - - for ( my $i = 0; $i <= $#{$filesref}; $i++ ) - { - my $onefile = ${$filesref}[$i]; - - my $filename = $onefile->{'Name'}; - if (( $filename eq $patchfilename ) || ( $filename eq $patchfilename2 )) { next; } - - my $styles = ""; - if ( $onefile->{'Styles'} ) { $styles = $onefile->{'Styles'}; } - if ( $styles =~ /\bDONTRENAMEINPATCH\b/ ) { next; } - - # special handling for files with flag DONTSHOW. This files get the extension ".dontshow" to be filtered by dialogs. - my $localwindowspatchlevel = $windowspatchlevel; - if ( $styles =~ /\bDONTSHOW\b/ ) { $localwindowspatchlevel = $localwindowspatchlevel . "\.dontshow"; } - - my $olddestination = $onefile->{'destination'}; - my $newdestination = $olddestination . "." . $localwindowspatchlevel; - my $localfilename = $olddestination; - installer::pathanalyzer::make_absolute_filename_to_relative_filename(\$localfilename); # file name part - my $line = "\"" . $localfilename . "\"" . "=" . "\"" . "\." . $localwindowspatchlevel . "\""; - $onefile->{'destination'} = $newdestination; - - my $newfilename = $onefile->{'Name'} . "." . $localwindowspatchlevel; - $onefile->{'Name'} = $newfilename; - - # adding section information (section is the directory) - my $origolddestination = $olddestination; - installer::pathanalyzer::get_path_from_fullqualifiedname(\$olddestination); # directory part - if ( ! $olddestination ) { $olddestination = "_root"; } - if ( ! exists($patchfiledirectories{$olddestination}) ) { $patchfiledirectories{$olddestination} = 1; } - $line = $line . "\tXXXXX\t" . $olddestination . "\n"; - - push(@patchfiles, $line); - - # also collecting all files from patch in @installer::globals::patchfilecollector - my $patchfileline = $origolddestination . "\n"; - push(@installer::globals::patchfilecollector, $patchfileline); - } - - my $winpatchdirname = "winpatch"; - my $winpatchdir = installer::systemactions::create_directories($winpatchdirname, $languagestringref); - - my ($patchlistfile) = grep {$_->{Name} eq $patchfilename} @{$filesref}; - if (! defined $patchlistfile) { - installer::exiter::exit_program("ERROR: Could not find file $patchfilename in list of files!", "prepare_windows_patchfiles"); - } - - # reorganizing the patchfile content, sorting for directory to decrease the file size - my $sorteddirectorylist = [ sort keys %patchfiledirectories ]; - my $patchfilelist = reorg_patchfile(\@patchfiles, $sorteddirectorylist); - - # shifting version.ini to the end of the list, to guarantee, that all files are patched - # if the correct version is shown in the about box - $patchfilelist = shift_section_to_end($patchfilelist); - $patchfilelist = shift_file_to_end($patchfilelist); - - # saving the file - $patchfilename = $winpatchdir . $installer::globals::separator . $patchfilename; - installer::files::save_file($patchfilename, $patchfilelist); - - my $infoline = "\nCreated list of patch files: $patchfilename\n"; - push( @installer::globals::logfileinfo, $infoline); - - # and assigning the new source - $patchlistfile->{'sourcepath'} = $patchfilename; - - # and finally checking the file size - if ( -f $patchfilename ) # test of existence - { - my $filesize = ( -s $patchfilename ); - $infoline = "Size of patch file list: $filesize\n\n"; - push( @installer::globals::logfileinfo, $infoline); - installer::logger::print_message( "... size of patch list file: $filesize Byte ... \n" ); - } - -} - ########################################################### # Replacing %-variables with the content # of $allvariableshashref diff --git a/solenv/bin/modules/installer/ziplist.pm b/solenv/bin/modules/installer/ziplist.pm index c9ba2388ae92..aa15ba02061d 100644 --- a/solenv/bin/modules/installer/ziplist.pm +++ b/solenv/bin/modules/installer/ziplist.pm @@ -852,8 +852,7 @@ sub add_variables_to_allvariableshashref $variableshashref->{'LCPRODUCTEXTENSION'} = ""; } - if ( $installer::globals::patch ) { $variableshashref->{'PRODUCTADDON'} = $installer::globals::patchaddon; } - elsif ( $installer::globals::languagepack ) { $variableshashref->{'PRODUCTADDON'} = $installer::globals::languagepackaddon; } + if ( $installer::globals::languagepack ) { $variableshashref->{'PRODUCTADDON'} = $installer::globals::languagepackaddon; } elsif ( $installer::globals::helppack ) { $variableshashref->{'PRODUCTADDON'} = $installer::globals::helppackpackaddon; } else { $variableshashref->{'PRODUCTADDON'} = ""; } diff --git a/solenv/bin/oochkpatch b/solenv/bin/oochkpatch deleted file mode 100755 index 4e5a9051dac8..000000000000 --- a/solenv/bin/oochkpatch +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/sh -# -# This file is part of the LibreOffice project. -# -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. -# -# This file incorporates work covered by the following license notice: -# -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed -# with this work for additional information regarding copyright -# ownership. The ASF licenses this file to you under the Apache -# License, Version 2.0 (the "License"); you may not use this file -# except in compliance with the License. You may obtain a copy of -# the License at http://www.apache.org/licenses/LICENSE-2.0 . -# -if [ x${SOLARENV}x = xx ]; then - echo No environment found, please use 'configure' or 'setsolar' - exit 1 -fi -exec perl -w $SOLARENV/bin/oochkpatch.pl "$@" diff --git a/solenv/bin/oochkpatch.pl b/solenv/bin/oochkpatch.pl deleted file mode 100644 index 82a7d7b5a761..000000000000 --- a/solenv/bin/oochkpatch.pl +++ /dev/null @@ -1,292 +0,0 @@ -: - eval 'exec perl -S $0 ${1+"$@"}' - if 0; -# -# This file is part of the LibreOffice project. -# -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. -# -# This file incorporates work covered by the following license notice: -# -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed -# with this work for additional information regarding copyright -# ownership. The ASF licenses this file to you under the Apache -# License, Version 2.0 (the "License"); you may not use this file -# except in compliance with the License. You may obtain a copy of -# the License at http://www.apache.org/licenses/LICENSE-2.0 . -# -# -# oochkpatch - check patch flags against CWS modules -# - -require File::Temp; -require File::Find; -require Getopt::Long; -require Pod::Usage; -use Pod::Usage; -use Getopt::Long; -use File::Temp qw/ tempfile tempdir /; -use File::Find; - - -# configuration goes here -########################################################## - -# uncomment this, if in pure OOo environment -#my $toplevel_module = "instsetoo_native"; -#my $scp_module = "scp2"; -#my $setup_file = "setup_osl"; - -# uncomment this, if within the StarOffice environment -my $toplevel_module = "instset_native"; -my $scp_module = "scp2so"; -my $setup_file = "setup"; - -my $deliver = "solenv/bin/deliver.pl"; -my $build = "solenv/bin/build.pl"; - -# list of hardcoded exceptions (files that are _never_ considered -# missing from the patch) -my %hardcoded_exceptions = ('build.lst' => 1); - - -# no configuration below this point, please! -########################################################## - -# defaults -my $from_module = ""; -my $verbose = ''; -my $help = ''; -my $man = ''; -my $modules = ''; -my $from = ''; -my $perl = ''; - -GetOptions('help|?' => \$help, - 'man' => \$man, - 'verbose' => \$verbose, - 'from=s' => \$from_module ) or pod2usage(2); -pod2usage(1) if $help; -pod2usage(-exitstatus => 0, -verbose => 2) if $man; - -# process remaining args -print "Processing args...\n" if $verbose; -foreach my $argument (@ARGV) -{ - print " Checking module ", $argument, "\n" if $verbose; - push @modules, $argument; -} - -# platform-dependent stuff -if( $^O eq 'MSWin32' ) -{ - $perl = "$ENV{COMSPEC} -c $ENV{PERL}"; - $setup_file = $setup_file . ".inf"; -} -else -{ - $perl = 'perl'; - $setup_file = $setup_file . ".ins"; -}; - -# read some SOLAR stuff from env -my $SRC_ROOT = $ENV{"SRC_ROOT"}; -my $INPATH = $ENV{"INPATH"}; - -# process --from modules -if( $from_module ) -{ - print "Checking all modules upwards and including ", $from_module, "\n" if $verbose; - - # append build.pl-generated list of modules - chdir "$SRC_ROOT/$toplevel_module" or - chdir "$SRC_ROOT/$toplevel_module.lnk" or die "ERROR: cannot cd to $SRC_ROOT/$toplevel_module!"; - open(ALLMODULES, - "$perl $SRC_ROOT/$build --all:$from_module --show 2>&1 |") or die "ERROR: cannot build --show!\n"; - while() - { - if( /Building project/ ) - { - my @module = split( /\s+/, $_ ); - print " which is ", $module[2], "\n" if $verbose; - push(@modules,$module[2]); - } - } -} - -die "ERROR: no modules to check!\n" if !@modules; - -$tempdir = tempdir( TMPDIR => 1, CLEANUP => 1); - -# generate list of files with PATCH flag -print "Generating list of files which have the PATCH flag...\n" if $verbose; - -my $path_to_setup_file = $SRC_ROOT."/".$scp_module."/".$INPATH."/bin/osl/".$setup_file; -my $alternate_path_to_setup_file = $SRC_ROOT."/".$scp_module.".lnk/".$INPATH."/bin/osl/".$setup_file; -my $in_file_block=0; -my $patch_flag=0; -my $file_name=''; -my $base; -my $ext; -my %pack_files; -open(SETUP, "<".$path_to_setup_file) or - open(SETUP, "<".$alternate_path_to_setup_file) or die "ERROR: cannot open $path_to_setup_file!\n"; -while() -{ - if( /^File\s+/ && !$in_file_block ) - { - $in_file_block = 1; - $patch_flag=0; - $file_name=''; - } - elsif( /^End/ && $file_name ne '' && $in_file_block ) - { - $file_name =~ s/["']//g; - $pack_files{$file_name} = $patch_flag; - - if( $patch_flag ) - { - print( " File $file_name included in patch\n") if $verbose; - } - else - { - print( " File $file_name NOT included in patch\n") if $verbose; - } - - $in_file_block = 0; - } - elsif( /^\s+Styles\s*=\s*.*PATCH/ && $in_file_block ) - { - $patch_flag = 1; - } - elsif( ($res) = /^\s+Name\s*=\s*(.*);/ ) - { - $file_name = $res; - } -} - -# generate list of delivered files -print "Generating list of delivered libs...\n" if $verbose; - -# first, deliver all modules to tempdir -foreach my $module (@modules) -{ - print " dummy-delivering $module...\n" if $verbose; - chdir "$SRC_ROOT/$module" or - chdir "$SRC_ROOT/$module.lnk" or die "ERROR: cannot cd to $SRC_ROOT/$module!"; - `$perl $SRC_ROOT/$deliver $tempdir`; -} - -# now, check all files in delivered dirs for containedness in PATCH -# set -print "Checking against delivered files...\n" if $verbose; -find(\&wanted, $tempdir ); - -sub wanted -{ - my $fname; - - if( -f ) - { - $fname = $_; - if( !exists $pack_files{$fname} ) - { - print " File $fname is not packed.\n" if $verbose; - } - elsif( $pack_files{$fname} == 0 ) - { - if( !$hardcoded_exceptions{ $fname } ) - { - # file not in patch set, and not in exception list - print " File $fname is packed, but NOT included in patch set and part of delivered output\n" if $verbose; - print "$fname\n" if !$verbose; - } - else - { - print " File $fname is NOT included in patch set, but member of hardcoded exception list\n" if $verbose; - } - } - elsif( $pack_files{$fname} == 1 ) - { - print " File $fname packed and patched.\n" if $verbose; - } - } -} - - -__END__ - -=head1 NAME - -oochkpatch.pl - Verify patch flags against module libraries - -=head1 SYNOPSIS - -oochkpatch.pl [options] [module-name ...] - - Options: - --help|-h brief help message - --man|-m full documentation - --verbose|-v tell what's happening - --from=module check all modules from - given one upwards - -=head1 OPTIONS - -=over 8 - -=item B<--help> - -Print a brief help message and exits. - -=item B<--man> - -Prints the manual page and exits. - -=item B<--verbose> - -Verbosely tell what's currently happening - -=item B<--from=module> - -Assumes OOo was built incompatibly from given module -upwards, and check against all libs from all upwards modules. -Further modules can be given at the command line, which are merged -with the ones generated from this option - -=back - -=head1 DESCRIPTION - -B will compare all libs delivered from the specified modules -against the set of files marked with the B flag in scp2. Useful to check -if the patch set is complete. Please note that this program needs to be run in -a solar shell, i.e. the OOo build environment needs to be set up in the shell. - -There's kind of a heuristic involved, to determine exactly which files -to check against includedness in the patch set (since e.g. all headers -are delivered, but clearly need not be checked against patch -flags). It works by first collecting all files that are mentioned in -the pack master file, and then checking all files delivered from the -specified modules against that pack list: if the file is not packed, -or if it's packed and has the patch flag set, all is well. Otherwise, -the file in question potentially misses the patch flag (because one of -the modified modules contains it). - -=head1 EXAMPLE - -To determine the set of libs not yet carrying the patch flag for a CWS -containing sfx2, svx, and vcl, which is incompatible from sfx2 -upwards, use something like this: - -oochkpatch.pl --from=sfx2 `cwsquery modules` - -This puts every module upwards and including sfx2 in the check list, -plus vcl. Note that with this approach, you'll usually get a larger -set of files for the patch than necessary - but at least you get all -files that might have changed theoretically. - -=cut -- cgit