build installer packages with make parallelism instead of GNU parallel

6204336cc7 added support for building installsets
in parrallel using the GNU parallel tool, this patch changes that to use make's
own parallelism, dropping the need for the external tool.

By not creating huge commandline for all packages at once/sequentially, the
workarounds to modify the PATH variable can also be dropped.

Since : is a special character in makefiles separating a target from
prerequisites delimiter in the installer-tuples has been changed to the
hyphenation point.

The dependencies on the install.phony target have been moved to the actual
installset targets (and those are .PHONY targets as well since the target file
isn't actually generatead).

Also unify the tuples for the different platforms, even if the first element is
only used for Windows.

Move the msi templates to a separate directory for the different types, so that
packaging can also be done in parallel on Windows. Move the setup back to the
makefile so it can be setup prior to running the script.

Previoulsy the script used grep to remove comments from the msi template files,
and had to use "|| true" since grep would also return error when not finding a
match/on empty files. Switch that to awk so it can run without that workaround.

Change-Id: I2f8b73e04d0f601cb0b4e2d8352a38ef9957bc17
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/143679
Tested-by: Jenkins
Reviewed-by: Thorsten Behrens <thorsten.behrens@allotropia.de>
Reviewed-by: Christian Lohmaier <lohmaier+LibreOffice@googlemail.com>
This commit is contained in:
Christian Lohmaier 2022-12-05 18:14:17 +01:00
parent 834f49b7e3
commit b14c106635
4 changed files with 61 additions and 69 deletions

View file

@ -263,7 +263,6 @@ export GIO_LIBS=$(gb_SPACE)@GIO_LIBS@
export GIT_REFERENCE_SRC=@GIT_REFERENCE_SRC@
export GIT_LINK_SRC=@GIT_LINK_SRC@
export GIT_NEEDED_SUBMODULES=@GIT_NEEDED_SUBMODULES@
export GNUPARALLEL=@GNUPARALLEL@
export EPOXY_CFLAGS=$(gb_SPACE)@EPOXY_CFLAGS@
export EPOXY_LIBS=$(gb_SPACE)@EPOXY_LIBS@
export GLM_CFLAGS=$(gb_SPACE)@GLM_CFLAGS@

View file

@ -2964,10 +2964,6 @@ if test -z "$COMPRESSIONTOOL"; then
fi
AC_SUBST(COMPRESSIONTOOL)
# use GNU parallel for packaging, if available
AC_PATH_PROG(GNUPARALLEL, parallel)
AC_SUBST(GNUPARALLEL)
AC_MSG_CHECKING([for GNU or BSD tar])
for a in $GNUTAR gtar gnutar tar bsdtar /usr/sfw/bin/gtar; do
$a --version 2> /dev/null | grep -E "GNU|bsdtar" 2>&1 > /dev/null

View file

@ -29,16 +29,6 @@ $(eval $(call gb_CustomTarget_register_targets,instsetoo_native/install,\
.PHONY: $(call gb_CustomTarget_get_workdir,instsetoo_native/install)/install.phony
$(call gb_CustomTarget_get_workdir,instsetoo_native/install)/install.phony: \
$(SRCDIR)/solenv/bin/make_installer.pl \
$(foreach ulf,$(instsetoo_ULFLIST),$(call gb_CustomTarget_get_workdir,instsetoo_native/install)/win_ulffiles/$(ulf).ulf) \
$(if $(filter-out WNT,$(OS)),\
$(addprefix $(call gb_CustomTarget_get_workdir,instsetoo_native/install)/,\
bin/find-requires-gnome.sh \
bin/find-requires-x11.sh) \
) \
$(call gb_Postprocess_get_target,AllModulesButInstsetNative)
$(call gb_CustomTarget_get_workdir,instsetoo_native/install)/bin/find-requires-%.sh: $(SRCDIR)/instsetoo_native/inc_openoffice/unix/find-requires-%.sh
cat $< | tr -d "\015" > $@
chmod a+x $@
@ -60,63 +50,81 @@ export instsetoo_OUT := $(WORKDIR)/installation
export LOCAL_OUT := $(instsetoo_OUT)
export LOCAL_COMMON_OUT := $(instsetoo_OUT)
instsetoo_native_WITH_LANG := en-US $(filter-out en-US,$(gb_WITH_LANG))
ifeq (WNT,$(OS))
instsetoo_installer_langs := $(subst $(WHITESPACE),$(COMMA),$(strip en-US $(filter-out en-US,$(gb_WITH_LANG))))
else
instsetoo_installer_langs := en-US
endif
define instsetoo_native_install_command
$(if $(GNUPARALLEL), \
$(call gb_Helper_print_on_error, \
cd $(dir $@) && \
$(GNUPARALLEL) -j $(PARALLELISM) $(SRCDIR)/solenv/bin/call_installer.sh $(if $(verbose),-verbose,-quiet) -- $(1) \
,$@.log) \
, \
$(call gb_Helper_print_on_error, \
cd $(dir $@) \
$(if $(filter WNT,$(OS)), \
&& PATH="$(shell cygpath -u $(SRCDIR)/solenv/bin):$$PATH" \
, \
&& PATH="$(SRCDIR)/solenv/bin:$$PATH") \
$(foreach curpkg,$(1),\
&& call_installer.sh $(if $(verbose),-verbose,-quiet) $(curpkg) \
),$@.log))
endef
# delimiter is U+2027 Hyphenation point - files with colon in their name confuse the heck out of
# make and cannot be used as targets or prerequisites. For passing to call_installer.sh it is
# substituted by the : so that cut doesn't stumble over the delimiter
ifeq (TRUE,$(LIBO_TEST_INSTALL))
instsetoo_installer_targets = openoffice‧en-US‧‧‧archive‧nostrip
ifeq (ODK,$(filter ODK,$(BUILD_TYPE)))
instsetoo_installer_targets += sdkoo‧en-US‧_SDK‧‧archive‧nostrip
endif
else
instsetoo_installer_targets := $(foreach pkgformat,$(PKGFORMAT),\
openoffice‧$(instsetoo_installer_langs)‧‧‧$(pkgformat)$(if $(filter-out archive,$(pkgformat)),strip,nostrip) \
$(if $(filter ODK,$(BUILD_TYPE)),sdkoo‧en-US‧_SDK‧‧$(pkgformat)‧nostrip) \
$(if $(and $(filter HELP,$(BUILD_TYPE)),$(filter-out MACOSX,$(OS))), \
$(foreach lang,$(gb_HELP_LANGS),ooohelppack‧$(lang)‧‧-helppack‧$(pkgformat)‧nostrip)) \
$(if $(filter-out WNT,$(OS)), \
$(foreach lang,$(filter-out en-US,$(gb_WITH_LANG)),ooolangpack‧$(lang)‧‧-languagepack‧$(pkgformat)‧nostrip)))
endif
$(call gb_CustomTarget_get_workdir,instsetoo_native/install)/install.phony:
instsetoo_wipe:
$(call gb_Output_announce,wiping installation output dir,$(true),WIPE,6)
rm -rf $(instsetoo_OUT)
# list both as prerequisites so that make won't treat the $(template) one as intermediate /
# won't attempt to delete it after the $(template)/Binary and the rest of the chain was made
instsetoo_msi_templates: $(foreach template,openoffice ooohelppack sdkoo,$(addprefix \
$(call gb_CustomTarget_get_workdir,instsetoo_native/install)/msi_templates/,$(template) $(template)/Binary))
# use awk instead of grep to not have to deal with grep exiting with error on files with no comments
$(call gb_CustomTarget_get_workdir,instsetoo_native/install)/msi_templates/%: $(SRCDIR)/instsetoo_native/inc_%/windows/msi_templates/*.*
$(call gb_Output_announce,setting up msi templates for type $(@F),$(true),AWK,4)
rm -rf $@ && mkdir -p $@ && cd $@ $(foreach file,$(^F),&& awk '!/^#/{print}' $(<D)/$(file) > $(file))
$(call gb_CustomTarget_get_workdir,instsetoo_native/install)/msi_templates/%/Binary: $(SRCDIR)/instsetoo_native/inc_common/windows/msi_templates/Binary/*.* \
$(call gb_CustomTarget_get_workdir,instsetoo_native/install)/msi_templates/%
$(call gb_Output_announce,setting up msi templates for type $* - copying binary assets,$(true),CPY,4)
rm -rf $@ && mkdir -p $@ && cd $@ && cp $(SRCDIR)/instsetoo_native/inc_common/windows/msi_templates/Binary/*.* ./
# with all languages the logfile name would be too long when building the windows installation set,
# that's the reason for the subsitution to multilang below in case more than just en-US is packaged
$(instsetoo_installer_targets): $(SRCDIR)/solenv/bin/make_installer.pl \
$(foreach ulf,$(instsetoo_ULFLIST),$(call gb_CustomTarget_get_workdir,instsetoo_native/install)/win_ulffiles/$(ulf).ulf) \
$(if $(filter-out WNT,$(OS)),\
$(addprefix $(call gb_CustomTarget_get_workdir,instsetoo_native/install)/,\
bin/find-requires-gnome.sh \
bin/find-requires-x11.sh) \
,instsetoo_msi_templates) \
$(call gb_Postprocess_get_target,AllModulesButInstsetNative) | instsetoo_wipe
$(call gb_Output_announce,$(if $(filter en-US$(COMMA)%,$(instsetoo_installer_langs)),$(subst $(instsetoo_installer_langs),multilang,$@),$@),$(true),INST,1)
$(call gb_Trace_StartRange,$@,INSTALLER)
$(call gb_Helper_print_on_error, \
$(SRCDIR)/solenv/bin/call_installer.sh $(if $(verbose),-verbose,-quiet) $(subst ‧,:,$@),\
$(call gb_CustomTarget_get_workdir,instsetoo_native/install)/$(if $(filter en-US$(COMMA)%,$(instsetoo_installer_langs)),$(subst $(instsetoo_installer_langs),multilang,$@),$@).log)
$(call gb_Trace_EndRange,$@,INSTALLER)
$(call gb_CustomTarget_get_workdir,instsetoo_native/install)/install.phony: $(instsetoo_installer_targets)
$(call gb_Output_announce,$(subst $(WORKDIR)/,,$@),$(true),PRL,2)
$(call gb_Trace_StartRange,$(subst $(WORKDIR)/,,$@),PRL)
rm -rf $(instsetoo_OUT)
ifeq (TRUE,$(LIBO_TEST_INSTALL))
$(call instsetoo_native_install_command, "openoffice:en-US:::archive:nostrip")
unzip -q -d $(TESTINSTALLDIR) $(instsetoo_OUT)/$(PRODUCTNAME_WITHOUT_SPACES)/archive/install/en-US/LibreOffice*_archive.zip
mv $(TESTINSTALLDIR)/LibreOffice*_archive/LibreOffice*/* $(TESTINSTALLDIR)/
rmdir $(TESTINSTALLDIR)/LibreOffice*_archive/LibreOffice*
rmdir $(TESTINSTALLDIR)/LibreOffice*_archive
ifeq (ODK,$(filter ODK,$(BUILD_TYPE)))
$(call instsetoo_native_install_command, "sdkoo:en-US:_SDK::archive:nostrip")
unzip -q -d $(TESTINSTALLDIR) $(instsetoo_OUT)/$(PRODUCTNAME_WITHOUT_SPACES)_SDK/archive/install/en-US/LibreOffice*_archive_sdk.zip
mv $(TESTINSTALLDIR)/LibreOffice*_archive_sdk/LibreOffice*_SDK/sdk \
$(TESTINSTALLDIR)/
rmdir $(TESTINSTALLDIR)/LibreOffice*_archive_sdk/LibreOffice*_SDK
rmdir $(TESTINSTALLDIR)/LibreOffice*_archive_sdk
endif
else # LIBO_TEST_INSTALL
$(call instsetoo_native_install_command, \
$(foreach pkgformat,$(PKGFORMAT),\
$(if $(filter WNT,$(OS)), \
"openoffice:$(subst $(WHITESPACE),$(COMMA),$(strip $(instsetoo_native_WITH_LANG))):::$(pkgformat):$(if $(filter-out archive,$(pkgformat)),strip,nostrip)" \
$(if $(filter ODK,$(BUILD_TYPE)), \
"sdkoo:en-US:_SDK::$(pkgformat):nostrip") \
$(if $(filter HELP,$(BUILD_TYPE)), \
$(foreach lang,$(gb_HELP_LANGS), \
"ooohelppack:$(lang)::-helppack:$(pkgformat):nostrip" )) \
, \
":en-US:::$(pkgformat):$(if $(filter-out archive,$(pkgformat)),strip,nostrip)" \
$(if $(filter ODK,$(BUILD_TYPE)), \
":en-US:_SDK::$(pkgformat):nostrip") \
$(if $(and $(filter HELP,$(BUILD_TYPE)), $(filter-out MACOSX,$(OS))), \
$(foreach lang,$(gb_HELP_LANGS), \
":$(lang)::-helppack:$(pkgformat):nostrip" )) \
$(foreach lang,$(instsetoo_native_WITH_LANG), \
":$(lang)::-languagepack:$(pkgformat):nostrip" ) )))
endif # LIBO_TEST_INSTALL
touch $@
$(call gb_Trace_EndRange,$(subst $(WORKDIR)/,,$@),PRL)

View file

@ -20,21 +20,10 @@ if [ "${VERBOSITY}" = "-verbose" ] ; then
set -x
fi
# populate MSI template dirs for Windows
if [ -n "${MSITEMPL}" ]; then
TEMPLATE_DIR="${WORKDIR}/CustomTarget/instsetoo_native/install/msi_templates"
rm -rf "${TEMPLATE_DIR}" && \
mkdir -p "${TEMPLATE_DIR}/Binary" && \
for I in "${SRCDIR}/instsetoo_native/inc_${MSITEMPL}/windows/msi_templates/"*.* ; do \
"${GREP}" -v '^#' "$I" > "${TEMPLATE_DIR}/$(basename "$I")" || true ; \
done && \
"${GNUCOPY}" "${SRCDIR}/instsetoo_native/inc_common/windows/msi_templates/Binary/"*.* "${TEMPLATE_DIR}/Binary" || exit 1
fi
# add extra params for Windows
EXTRA_PARAMS=
if [ "${OS}" = "WNT" ] ; then
EXTRA_PARAMS="${EXTRA_PARAMS} -msitemplate ${WORKDIR}/CustomTarget/instsetoo_native/install/msi_templates"
if [ "${OS}" = "WNT" ] && [ -n "${MSITEMPL}" ]; then
EXTRA_PARAMS="${EXTRA_PARAMS} -msitemplate ${WORKDIR}/CustomTarget/instsetoo_native/install/msi_templates/${MSITEMPL}"
EXTRA_PARAMS="${EXTRA_PARAMS} -msilanguage ${WORKDIR}/CustomTarget/instsetoo_native/install/win_ulffiles"
fi