1 # This Source Code Form is subject to the terms of the Mozilla Public
2 # License, v. 2.0. If a copy of the MPL was not distributed with this
3 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
6 ifeq ($(MOZ_WIDGET_TOOLKIT
),cocoa
)
8 else ifeq ($(OS_ARCH
),WINNT
)
10 else ifeq ($(OS_ARCH
),SunOS
)
12 else ifeq ($(MOZ_WIDGET_TOOLKIT
),gtk
)
14 else ifeq ($(MOZ_WIDGET_TOOLKIT
),android
)
19 endif # MOZ_PKG_FORMAT
21 ifeq ($(OS_ARCH
),WINNT
)
22 INSTALLER_DIR
= windows
25 ifeq (cocoa
,$(MOZ_WIDGET_TOOLKIT
))
27 _APPNAME
= $(MOZ_MACBUNDLE_NAME
)
30 _BINPATH
= $(_APPNAME
)/Contents
/MacOS
33 # Resource path for the precomplete file
34 _RESPATH
= $(_APPNAME
)/Contents
/Resources
38 PACKAGE_BASE_DIR
= $(ABS_DIST
)
39 PACKAGE
= $(PKG_PATH
)$(PKG_BASENAME
)$(PKG_SUFFIX
)
41 # JavaScript Shell packaging
44 $(DLL_PREFIX
)mozglue
$(DLL_SUFFIX
) \
47 ifndef MOZ_SYSTEM_NSPR
49 JSSHELL_BINS
+= $(DLL_PREFIX
)nss3
$(DLL_SUFFIX
)
52 $(DLL_PREFIX
)nspr4
$(DLL_SUFFIX
) \
53 $(DLL_PREFIX
)plds4
$(DLL_SUFFIX
) \
54 $(DLL_PREFIX
)plc4
$(DLL_SUFFIX
) \
57 endif # MOZ_SYSTEM_NSPR
59 ifdef MSVC_C_RUNTIME_DLL
60 JSSHELL_BINS
+= $(MSVC_C_RUNTIME_DLL
)
62 ifdef MSVC_C_RUNTIME_1_DLL
63 JSSHELL_BINS
+= $(MSVC_C_RUNTIME_1_DLL
)
65 ifdef MSVC_CXX_RUNTIME_DLL
66 JSSHELL_BINS
+= $(MSVC_CXX_RUNTIME_DLL
)
70 JSSHELL_BINS
+= $(notdir $(LLVM_SYMBOLIZER
))
72 ifdef MOZ_CLANG_RT_ASAN_LIB_PATH
73 JSSHELL_BINS
+= $(notdir $(MOZ_CLANG_RT_ASAN_LIB_PATH
))
76 ifdef FUZZING_INTERFACES
77 JSSHELL_BINS
+= fuzz-tests
$(BIN_SUFFIX
)
80 MAKE_JSSHELL
= $(call py_action
,zip
$(JSSHELL_NAME
),-C
$(DIST
)/bin
--strip $(abspath
$(PKG_JSSHELL
)) $(JSSHELL_BINS
))
82 ifneq (,$(PGO_JARLOG_PATH
))
83 # The backslash subst is to work around an issue with our version of mozmake,
84 # where backslashes get slurped in command-line arguments if a command is run
85 # with a double-quote character. The command to packager.py happens to be one
86 # of these commands, where double-quotes appear in certain ACDEFINES values.
87 # This turns a jarlog path like "Z:\task..." into "Z:task", which fails.
88 # Switching the backslashes for forward slashes works around the issue.
89 JARLOG_FILE_AB_CD
= $(subst \
,/,$(PGO_JARLOG_PATH
))
91 JARLOG_FILE_AB_CD
= $(topobjdir
)/jarlog
/$(AB_CD
).log
94 TAR_CREATE_FLAGS
:= --exclude
=.mkdir.done
$(TAR_CREATE_FLAGS
)
95 CREATE_FINAL_TAR
= $(TAR
) -c
--owner
=0 --group
=0 --numeric-owner \
96 --mode
=go-w
--exclude
=.mkdir.done
-f
99 ifeq ($(MOZ_PKG_FORMAT
),TAR
)
101 INNER_MAKE_PACKAGE
= cd
$(1) && $(CREATE_FINAL_TAR
) - $(MOZ_PKG_DIR
) > $(PACKAGE
)
102 INNER_UNMAKE_PACKAGE
= cd
$(1) && $(UNPACK_TAR
) < $(UNPACKAGE
)
105 ifeq ($(MOZ_PKG_FORMAT
),TGZ
)
107 INNER_MAKE_PACKAGE
= cd
$(1) && $(CREATE_FINAL_TAR
) - $(MOZ_PKG_DIR
) | gzip
-vf9
> $(PACKAGE
)
108 INNER_UNMAKE_PACKAGE
= cd
$(1) && gunzip
-c
$(UNPACKAGE
) |
$(UNPACK_TAR
)
111 ifeq ($(MOZ_PKG_FORMAT
),BZ2
)
112 PKG_SUFFIX
= .
tar.bz2
113 ifeq (cocoa
,$(MOZ_WIDGET_TOOLKIT
))
114 INNER_MAKE_PACKAGE
= cd
$(1) && $(CREATE_FINAL_TAR
) - -C
$(MOZ_PKG_DIR
) $(_APPNAME
) | bzip2
-vf
> $(PACKAGE
)
116 INNER_MAKE_PACKAGE
= cd
$(1) && $(CREATE_FINAL_TAR
) - $(MOZ_PKG_DIR
) | bzip2
-vf
> $(PACKAGE
)
118 INNER_UNMAKE_PACKAGE
= cd
$(1) && bunzip2
-c
$(UNPACKAGE
) |
$(UNPACK_TAR
)
121 ifeq ($(MOZ_PKG_FORMAT
),ZIP
)
123 INNER_MAKE_PACKAGE
= $(call py_action
,zip
,'$(PACKAGE)' '$(MOZ_PKG_DIR)' -x
'**/.mkdir.done',$(1))
124 INNER_UNMAKE_PACKAGE
= $(call py_action
,make_unzip
,$(UNPACKAGE
),$(1))
128 ifeq ($(MOZ_PKG_FORMAT
),RPM
)
130 MOZ_NUMERIC_APP_VERSION
= $(shell echo
$(MOZ_PKG_VERSION
) | sed
's/[^0-9.].*//' )
131 MOZ_RPM_RELEASE
= $(shell echo
$(MOZ_PKG_VERSION
) | sed
's/[0-9.]*//' )
133 RPMBUILD_TOPDIR
=$(ABS_DIST
)/rpmbuild
134 RPMBUILD_RPMDIR
=$(ABS_DIST
)
135 RPMBUILD_SRPMDIR
=$(ABS_DIST
)
136 RPMBUILD_SOURCEDIR
=$(RPMBUILD_TOPDIR
)/SOURCES
137 RPMBUILD_SPECDIR
=$(topsrcdir
)/toolkit
/mozapps
/installer
/linux
/rpm
138 RPMBUILD_BUILDDIR
=$(ABS_DIST
)/..
140 SPEC_FILE
= $(RPMBUILD_SPECDIR
)/mozilla.spec
141 RPM_INCIDENTALS
=$(topsrcdir
)/toolkit
/mozapps
/installer
/linux
/rpm
144 echo Creating RPM
&& \
145 $(PYTHON3
) -m mozbuild.action.preprocessor \
146 -DMOZ_APP_NAME
=$(MOZ_APP_NAME
) \
147 -DMOZ_APP_DISPLAYNAME
='$(MOZ_APP_DISPLAYNAME)' \
148 -DMOZ_APP_REMOTINGNAME
='$(MOZ_APP_REMOTINGNAME)' \
149 $(RPM_INCIDENTALS
)/mozilla.desktop \
150 -o
$(RPMBUILD_SOURCEDIR
)/$(MOZ_APP_NAME
).desktop
&& \
151 rm -rf
$(ABS_DIST
)/$(TARGET_RAW_CPU
) && \
154 --target
$(TARGET_RAW_CPU
) \
155 --buildroot
$(RPMBUILD_TOPDIR
)/BUILDROOT \
156 --define 'moz_app_name $(MOZ_APP_NAME)' \
157 --define 'moz_app_displayname $(MOZ_APP_DISPLAYNAME)' \
158 --define 'moz_app_version $(MOZ_APP_VERSION)' \
159 --define 'moz_numeric_app_version $(MOZ_NUMERIC_APP_VERSION)' \
160 --define 'moz_rpm_release $(MOZ_RPM_RELEASE)' \
161 --define 'buildid $(BUILDID)' \
162 --define 'moz_source_repo $(shell awk '$$2 == "MOZ_SOURCE_REPO" {print $$3}' $(DEPTH)/source-repo.h)' \
163 --define 'moz_source_stamp $(shell awk '$$2 == "MOZ_SOURCE_STAMP" {print $$3}' $(DEPTH)/source-repo.h)' \
164 --define 'moz_branding_directory $(topsrcdir)/$(MOZ_BRANDING_DIRECTORY)' \
165 --define '_topdir $(RPMBUILD_TOPDIR)' \
166 --define '_rpmdir $(RPMBUILD_RPMDIR)' \
167 --define '_sourcedir $(RPMBUILD_SOURCEDIR)' \
168 --define '_specdir $(RPMBUILD_SPECDIR)' \
169 --define '_srcrpmdir $(RPMBUILD_SRPMDIR)' \
170 --define '_builddir $(RPMBUILD_BUILDDIR)' \
171 --define '_prefix $(prefix)' \
172 --define '_libdir $(libdir)' \
173 --define '_bindir $(bindir)' \
174 --define '_datadir $(datadir)' \
175 --define '_installdir $(installdir)'
179 --define 'createtests yes' \
180 --define '_testsinstalldir $(shell basename $(installdir))'
183 #For each of the main/tests rpms we want to make sure that
184 #if they exist that they are in objdir/dist/ and that they get
185 #uploaded and that they are beside the other build artifacts
186 MAIN_RPM
= $(MOZ_APP_NAME
)-$(MOZ_NUMERIC_APP_VERSION
)-$(MOZ_RPM_RELEASE
).
$(BUILDID
).
$(TARGET_RAW_CPU
)$(PKG_SUFFIX
)
187 UPLOAD_EXTRA_FILES
+= $(MAIN_RPM
)
188 RPM_CMD
+= && mv
$(TARGET_RAW_CPU
)/$(MAIN_RPM
) $(ABS_DIST
)/
191 TESTS_RPM
=$(MOZ_APP_NAME
)-tests-
$(MOZ_NUMERIC_APP_VERSION
)-$(MOZ_RPM_RELEASE
).
$(BUILDID
).
$(TARGET_RAW_CPU
)$(PKG_SUFFIX
)
192 UPLOAD_EXTRA_FILES
+= $(TESTS_RPM
)
193 RPM_CMD
+= && mv
$(TARGET_RAW_CPU
)/$(TESTS_RPM
) $(ABS_DIST
)/
196 INNER_MAKE_PACKAGE
= cd
$(1) && $(RPM_CMD
)
197 #Avoiding rpm repacks, going to try creating/uploading xpi in rpm files instead
198 INNER_UNMAKE_PACKAGE
= $(error Try using rpm2cpio and cpio
)
200 endif #Create an RPM file
203 ifeq ($(MOZ_PKG_FORMAT
),APK
)
204 INNER_MAKE_PACKAGE
= true
205 INNER_UNMAKE_PACKAGE
= true
208 ifeq ($(MOZ_PKG_FORMAT
),DMG
)
211 _ABS_MOZSRCDIR
= $(shell cd
$(MOZILLA_DIR
) && pwd
)
212 PKG_DMG_SOURCE
= $(MOZ_PKG_DIR
)
213 INNER_MAKE_PACKAGE
= \
214 $(call py_action
,make_dmg
, \
215 $(if
$(MOZ_PKG_MAC_DSSTORE
),--dsstore
'$(MOZ_PKG_MAC_DSSTORE)') \
216 $(if
$(MOZ_PKG_MAC_BACKGROUND
),--background
'$(MOZ_PKG_MAC_BACKGROUND)') \
217 $(if
$(MOZ_PKG_MAC_ICON
),--icon
'$(MOZ_PKG_MAC_ICON)') \
218 --volume-name
'$(MOZ_APP_DISPLAYNAME)' \
219 '$(PKG_DMG_SOURCE)' '$(PACKAGE)', \
221 INNER_UNMAKE_PACKAGE
= \
222 $(call py_action
,unpack_dmg
, \
223 $(if
$(MOZ_PKG_MAC_DSSTORE
),--dsstore
'$(MOZ_PKG_MAC_DSSTORE)') \
224 $(if
$(MOZ_PKG_MAC_BACKGROUND
),--background
'$(MOZ_PKG_MAC_BACKGROUND)') \
225 $(if
$(MOZ_PKG_MAC_ICON
),--icon
'$(MOZ_PKG_MAC_ICON)') \
226 $(UNPACKAGE
) $(MOZ_PKG_DIR
), \
230 MAKE_PACKAGE
= $(INNER_MAKE_PACKAGE
)
254 BadCertAndPinningServer
* \
255 DelegatedCredentialsServer
* \
256 EncryptedClientHelloServer
* \
258 OCSPStaplingServer
* \
259 SanctionsTestServer
* \
260 GenerateOCSPResponse
* \
262 chrome
/app-chrome.manifest \
264 components
/compreg.dat \
265 components
/xpti.dat \
271 # If a manifest has not been supplied, the following
272 # files should be excluded from the package too
273 ifndef MOZ_PKG_MANIFEST
274 NO_PKG_FILES
+= ssltunnel
*
278 NO_PKG_FILES
+= SmokeDMD
281 DEFINES
+= -DDLL_PREFIX
=$(DLL_PREFIX
) -DDLL_SUFFIX
=$(DLL_SUFFIX
) -DBIN_SUFFIX
=$(BIN_SUFFIX
)
283 ifeq (cocoa
,$(MOZ_WIDGET_TOOLKIT
))
284 DEFINES
+= -DDIR_MACOS
=Contents
/MacOS
/ -DDIR_RESOURCES
=Contents
/Resources
/
286 DEFINES
+= -DDIR_MACOS
= -DDIR_RESOURCES
=
290 DEFINES
+= -DMOZ_FOLD_LIBS
=1
293 # The following target stages files into two directories: one directory for
294 # core files, and one for optional extensions based on the information in
295 # the MOZ_PKG_MANIFEST file.
299 ifndef MOZ_PACKAGER_FORMAT
300 MOZ_PACKAGER_FORMAT
= $(error MOZ_PACKAGER_FORMAT is not set
)
303 ifneq (android
,$(MOZ_WIDGET_TOOLKIT
))
304 JAR_COMPRESSION ?
= none
307 ifeq ($(OS_TARGET
), WINNT
)
308 INSTALLER_PACKAGE
= $(DIST
)/$(PKG_INST_PATH
)$(PKG_INST_BASENAME
).exe
311 # These are necessary because some of our packages/installers contain spaces
312 # in their filenames and GNU Make's $(wildcard) function doesn't properly
315 space
= $(empty
) $(empty
)
316 QUOTED_WILDCARD
= $(if
$(wildcard $(subst $(space
),?
,$(1))),'$(1)')
317 ESCAPE_SPACE
= $(subst $(space
),\
$(space
),$(1))
318 ESCAPE_WILDCARD
= $(subst $(space
),?
,$(1))
320 # This variable defines which OpenSSL algorithm to use to
321 # generate checksums for files that we upload
322 CHECKSUM_ALGORITHM_PARAM
= -d sha512
-d md5
-d sha1
324 # This variable defines where the checksum file will be located
325 CHECKSUM_FILE
= '$(DIST)/$(PKG_PATH)/$(CHECKSUMS_FILE_BASENAME).checksums'
326 CHECKSUM_FILES
= $(CHECKSUM_FILE
)
328 # Upload MAR tools only if AB_CD is unset or en_US
329 ifeq (,$(AB_CD
:en-US
=))
330 ifeq (WINNT
,$(OS_TARGET
))
331 UPLOAD_EXTRA_FILES
+= host
/bin
/mar.exe
332 UPLOAD_EXTRA_FILES
+= host
/bin
/mbsdiff.exe
334 UPLOAD_EXTRA_FILES
+= host
/bin
/mar
335 UPLOAD_EXTRA_FILES
+= host
/bin
/mbsdiff
340 $(call QUOTED_WILDCARD
,$(DIST
)/$(PACKAGE
)) \
341 $(call QUOTED_WILDCARD
,$(INSTALLER_PACKAGE
)) \
342 $(call QUOTED_WILDCARD
,$(DIST
)/$(LANGPACK
)) \
343 $(call QUOTED_WILDCARD
,$(DIST
)/$(PKG_PATH
)$(MOZHARNESS_PACKAGE
)) \
344 $(call QUOTED_WILDCARD
,$(DIST
)/$(PKG_PATH
)$(SYMBOL_ARCHIVE_BASENAME
).zip
) \
345 $(call QUOTED_WILDCARD
,$(DIST
)/$(PKG_PATH
)$(GENERATED_SOURCE_FILE_PACKAGE
)) \
346 $(call QUOTED_WILDCARD
,$(MOZ_SOURCESTAMP_FILE
)) \
347 $(call QUOTED_WILDCARD
,$(MOZ_BUILDINFO_FILE
)) \
348 $(call QUOTED_WILDCARD
,$(MOZ_BUILDHUB_JSON
)) \
349 $(call QUOTED_WILDCARD
,$(MOZ_BUILDID_INFO_TXT_FILE
)) \
350 $(call QUOTED_WILDCARD
,$(MOZ_MOZINFO_FILE
)) \
351 $(call QUOTED_WILDCARD
,$(MOZ_TEST_PACKAGES_FILE
)) \
352 $(call QUOTED_WILDCARD
,$(PKG_JSSHELL
)) \
353 $(call QUOTED_WILDCARD
,$(DIST
)/$(PKG_PATH
)$(SYMBOL_FULL_ARCHIVE_BASENAME
).
tar.zst
) \
354 $(call QUOTED_WILDCARD
,$(topobjdir
)/$(MOZ_BUILD_APP
)/installer
/windows
/instgen
/setup.exe
) \
355 $(call QUOTED_WILDCARD
,$(topobjdir
)/$(MOZ_BUILD_APP
)/installer
/windows
/instgen
/setup-stub.exe
) \
356 $(call QUOTED_WILDCARD
,$(topsrcdir
)/toolchains.json
) \
357 $(call QUOTED_WILDCARD
,$(topobjdir
)/config.status
) \
358 $(if
$(UPLOAD_EXTRA_FILES
), $(foreach f
, $(UPLOAD_EXTRA_FILES
), $(wildcard $(DIST
)/$(f
))))
360 ifneq ($(filter-out en-US
,$(AB_CD
)),)
362 $(call QUOTED_WILDCARD
,$(topobjdir
)/$(MOZ_BUILD_APP
)/installer
/windows
/l10ngen
/setup.exe
) \
363 $(call QUOTED_WILDCARD
,$(topobjdir
)/$(MOZ_BUILD_APP
)/installer
/windows
/l10ngen
/setup-stub.exe
)
366 ifdef MOZ_CODE_COVERAGE
368 $(call QUOTED_WILDCARD
,$(DIST
)/$(PKG_PATH
)$(CODE_COVERAGE_ARCHIVE_BASENAME
).zip
) \
369 $(call QUOTED_WILDCARD
,$(topobjdir
)/chrome-map.json
) \
374 ifdef ENABLE_MOZSEARCH_PLUGIN
375 UPLOAD_FILES
+= $(call QUOTED_WILDCARD
,$(topobjdir
)/chrome-map.json
)
376 UPLOAD_FILES
+= $(call QUOTED_WILDCARD
,$(DIST
)/$(PKG_PATH
)$(MOZSEARCH_ARCHIVE_BASENAME
).zip
)
377 UPLOAD_FILES
+= $(call QUOTED_WILDCARD
,$(DIST
)/$(PKG_PATH
)$(MOZSEARCH_SCIP_INDEX_BASENAME
).zip
)
378 UPLOAD_FILES
+= $(call QUOTED_WILDCARD
,$(DIST
)/$(PKG_PATH
)$(MOZSEARCH_INCLUDEMAP_BASENAME
).map
)
379 ifeq ($(MOZ_BUILD_APP
),mobile
/android
)
380 UPLOAD_FILES
+= $(call QUOTED_WILDCARD
,$(DIST
)/$(PKG_PATH
)$(MOZSEARCH_JAVA_INDEX_BASENAME
).zip
)
384 ifdef MOZ_STUB_INSTALLER
385 UPLOAD_FILES
+= $(call QUOTED_WILDCARD
,$(DIST
)/$(PKG_INST_PATH
)$(PKG_STUB_BASENAME
).exe
)
388 # Upload `.xpt` artifacts for use in artifact builds.
389 UPLOAD_FILES
+= $(call QUOTED_WILDCARD
,$(DIST
)/$(PKG_PATH
)$(XPT_ARTIFACTS_ARCHIVE_BASENAME
).zip
)
390 # Upload update-related macOS framework artifacts for use in artifact builds.
391 ifeq ($(OS_ARCH
),Darwin
)
392 UPLOAD_FILES
+= $(call QUOTED_WILDCARD
,$(DIST
)/$(PKG_PATH
)$(UPDATE_FRAMEWORK_ARTIFACTS_ARCHIVE_BASENAME
).zip
)
395 ifndef MOZ_PKG_SRCDIR
396 MOZ_PKG_SRCDIR
= $(topsrcdir
)
399 SRC_TAR_PREFIX
= $(MOZ_APP_NAME
)-$(MOZ_PKG_VERSION
)
400 SRC_TAR_EXCLUDE_PATHS
+= \
403 --exclude
='.gitattributes' \
404 --exclude
='.gitkeep' \
405 --exclude
='.gitmodules' \
408 --exclude
='.mozconfig*' \
410 --exclude
='$(MOZILLA_DIR)/Makefile' \
411 --exclude
='$(MOZILLA_DIR)/dist'
413 SRC_TAR_EXCLUDE_PATHS
+= --exclude
='$(MOZ_OBJDIR)'
415 CREATE_SOURCE_TAR
= $(TAR
) -c
--owner
=0 --group
=0 --numeric-owner \
416 --mode
=go-w
$(SRC_TAR_EXCLUDE_PATHS
) --transform
='s,^\./,$(SRC_TAR_PREFIX)/,' -f
418 SOURCE_TAR
= $(DIST
)/$(PKG_SRCPACK_PATH
)$(PKG_SRCPACK_BASENAME
).
tar.xz
419 HG_BUNDLE_FILE
= $(DIST
)/$(PKG_SRCPACK_PATH
)$(PKG_BUNDLE_BASENAME
).bundle
420 SOURCE_CHECKSUM_FILE
= $(DIST
)/$(PKG_SRCPACK_PATH
)$(PKG_SRCPACK_BASENAME
).checksums
421 SOURCE_UPLOAD_FILES
= $(SOURCE_TAR
)
424 CREATE_HG_BUNDLE_CMD
= $(HG
) -v
-R
$(topsrcdir
) bundle
--base null
425 ifdef HG_BUNDLE_REVISION
426 CREATE_HG_BUNDLE_CMD
+= -r
$(HG_BUNDLE_REVISION
)
428 CREATE_HG_BUNDLE_CMD
+= $(HG_BUNDLE_FILE
)
429 ifdef UPLOAD_HG_BUNDLE
430 SOURCE_UPLOAD_FILES
+= $(HG_BUNDLE_FILE
)