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 (cocoa
,$(MOZ_WIDGET_TOOLKIT
))
9 ifeq (WINNT
,$(OS_ARCH
))
12 ifeq (SunOS
,$(OS_ARCH
))
15 ifeq (gtk
,$(MOZ_WIDGET_TOOLKIT
))
18 ifeq (android
,$(MOZ_WIDGET_TOOLKIT
))
27 endif # MOZ_PKG_FORMAT
29 ifeq ($(OS_ARCH
),WINNT
)
30 INSTALLER_DIR
= windows
33 ifeq (cocoa
,$(MOZ_WIDGET_TOOLKIT
))
35 _APPNAME
= $(MOZ_MACBUNDLE_NAME
)
38 _BINPATH
= $(_APPNAME
)/Contents
/MacOS
41 # Resource path for the precomplete file
42 _RESPATH
= $(_APPNAME
)/Contents
/Resources
46 PACKAGE_BASE_DIR
= $(ABS_DIST
)
47 PACKAGE
= $(PKG_PATH
)$(PKG_BASENAME
)$(PKG_SUFFIX
)
49 # JavaScript Shell packaging
52 $(DLL_PREFIX
)mozglue
$(DLL_SUFFIX
) \
55 ifndef MOZ_SYSTEM_NSPR
57 JSSHELL_BINS
+= $(DLL_PREFIX
)nss3
$(DLL_SUFFIX
)
60 $(DLL_PREFIX
)nspr4
$(DLL_SUFFIX
) \
61 $(DLL_PREFIX
)plds4
$(DLL_SUFFIX
) \
62 $(DLL_PREFIX
)plc4
$(DLL_SUFFIX
) \
65 endif # MOZ_SYSTEM_NSPR
67 ifdef MSVC_C_RUNTIME_DLL
68 JSSHELL_BINS
+= $(MSVC_C_RUNTIME_DLL
)
70 ifdef MSVC_C_RUNTIME_1_DLL
71 JSSHELL_BINS
+= $(MSVC_C_RUNTIME_1_DLL
)
73 ifdef MSVC_CXX_RUNTIME_DLL
74 JSSHELL_BINS
+= $(MSVC_CXX_RUNTIME_DLL
)
78 JSSHELL_BINS
+= $(notdir $(LLVM_SYMBOLIZER
))
80 ifdef MOZ_CLANG_RT_ASAN_LIB_PATH
81 JSSHELL_BINS
+= $(notdir $(MOZ_CLANG_RT_ASAN_LIB_PATH
))
84 ifdef FUZZING_INTERFACES
85 JSSHELL_BINS
+= fuzz-tests
$(BIN_SUFFIX
)
88 MAKE_JSSHELL
= $(call py_action
,zip
$(JSSHELL_NAME
),-C
$(DIST
)/bin
--strip $(abspath
$(PKG_JSSHELL
)) $(JSSHELL_BINS
))
90 ifneq (,$(PGO_JARLOG_PATH
))
91 # The backslash subst is to work around an issue with our version of mozmake,
92 # where backslashes get slurped in command-line arguments if a command is run
93 # with a double-quote character. The command to packager.py happens to be one
94 # of these commands, where double-quotes appear in certain ACDEFINES values.
95 # This turns a jarlog path like "Z:\task..." into "Z:task", which fails.
96 # Switching the backslashes for forward slashes works around the issue.
97 JARLOG_FILE_AB_CD
= $(subst \
,/,$(PGO_JARLOG_PATH
))
99 JARLOG_FILE_AB_CD
= $(topobjdir
)/jarlog
/$(AB_CD
).log
102 TAR_CREATE_FLAGS
:= --exclude
=.mkdir.done
$(TAR_CREATE_FLAGS
)
103 CREATE_FINAL_TAR
= $(TAR
) -c
--owner
=0 --group
=0 --numeric-owner \
104 --mode
=go-w
--exclude
=.mkdir.done
-f
105 UNPACK_TAR
= tar -xf-
107 ifeq ($(MOZ_PKG_FORMAT
),TAR
)
109 INNER_MAKE_PACKAGE
= cd
$(1) && $(CREATE_FINAL_TAR
) - $(MOZ_PKG_DIR
) > $(PACKAGE
)
110 INNER_UNMAKE_PACKAGE
= cd
$(1) && $(UNPACK_TAR
) < $(UNPACKAGE
)
113 ifeq ($(MOZ_PKG_FORMAT
),TGZ
)
115 INNER_MAKE_PACKAGE
= cd
$(1) && $(CREATE_FINAL_TAR
) - $(MOZ_PKG_DIR
) | gzip
-vf9
> $(PACKAGE
)
116 INNER_UNMAKE_PACKAGE
= cd
$(1) && gunzip
-c
$(UNPACKAGE
) |
$(UNPACK_TAR
)
119 ifeq ($(MOZ_PKG_FORMAT
),BZ2
)
120 PKG_SUFFIX
= .
tar.bz2
121 ifeq (cocoa
,$(MOZ_WIDGET_TOOLKIT
))
122 INNER_MAKE_PACKAGE
= cd
$(1) && $(CREATE_FINAL_TAR
) - -C
$(MOZ_PKG_DIR
) $(_APPNAME
) | bzip2
-vf
> $(PACKAGE
)
124 INNER_MAKE_PACKAGE
= cd
$(1) && $(CREATE_FINAL_TAR
) - $(MOZ_PKG_DIR
) | bzip2
-vf
> $(PACKAGE
)
126 INNER_UNMAKE_PACKAGE
= cd
$(1) && bunzip2
-c
$(UNPACKAGE
) |
$(UNPACK_TAR
)
129 ifeq ($(MOZ_PKG_FORMAT
),ZIP
)
131 INNER_MAKE_PACKAGE
= $(call py_action
,zip
,'$(PACKAGE)' '$(MOZ_PKG_DIR)' -x
'**/.mkdir.done',$(1))
132 INNER_UNMAKE_PACKAGE
= $(call py_action
,make_unzip
,$(UNPACKAGE
),$(1))
136 ifeq ($(MOZ_PKG_FORMAT
),RPM
)
138 MOZ_NUMERIC_APP_VERSION
= $(shell echo
$(MOZ_PKG_VERSION
) | sed
's/[^0-9.].*//' )
139 MOZ_RPM_RELEASE
= $(shell echo
$(MOZ_PKG_VERSION
) | sed
's/[0-9.]*//' )
141 RPMBUILD_TOPDIR
=$(ABS_DIST
)/rpmbuild
142 RPMBUILD_RPMDIR
=$(ABS_DIST
)
143 RPMBUILD_SRPMDIR
=$(ABS_DIST
)
144 RPMBUILD_SOURCEDIR
=$(RPMBUILD_TOPDIR
)/SOURCES
145 RPMBUILD_SPECDIR
=$(topsrcdir
)/toolkit
/mozapps
/installer
/linux
/rpm
146 RPMBUILD_BUILDDIR
=$(ABS_DIST
)/..
148 SPEC_FILE
= $(RPMBUILD_SPECDIR
)/mozilla.spec
149 RPM_INCIDENTALS
=$(topsrcdir
)/toolkit
/mozapps
/installer
/linux
/rpm
152 echo Creating RPM
&& \
153 $(PYTHON3
) -m mozbuild.action.preprocessor \
154 -DMOZ_APP_NAME
=$(MOZ_APP_NAME
) \
155 -DMOZ_APP_DISPLAYNAME
='$(MOZ_APP_DISPLAYNAME)' \
156 -DMOZ_APP_REMOTINGNAME
='$(MOZ_APP_REMOTINGNAME)' \
157 $(RPM_INCIDENTALS
)/mozilla.desktop \
158 -o
$(RPMBUILD_SOURCEDIR
)/$(MOZ_APP_NAME
).desktop
&& \
159 rm -rf
$(ABS_DIST
)/$(TARGET_RAW_CPU
) && \
162 --target
$(TARGET_RAW_CPU
) \
163 --buildroot
$(RPMBUILD_TOPDIR
)/BUILDROOT \
164 --define 'moz_app_name $(MOZ_APP_NAME)' \
165 --define 'moz_app_displayname $(MOZ_APP_DISPLAYNAME)' \
166 --define 'moz_app_version $(MOZ_APP_VERSION)' \
167 --define 'moz_numeric_app_version $(MOZ_NUMERIC_APP_VERSION)' \
168 --define 'moz_rpm_release $(MOZ_RPM_RELEASE)' \
169 --define 'buildid $(BUILDID)' \
170 --define 'moz_source_repo $(shell awk '$$2 == "MOZ_SOURCE_REPO" {print $$3}' $(DEPTH)/source-repo.h)' \
171 --define 'moz_source_stamp $(shell awk '$$2 == "MOZ_SOURCE_STAMP" {print $$3}' $(DEPTH)/source-repo.h)' \
172 --define 'moz_branding_directory $(topsrcdir)/$(MOZ_BRANDING_DIRECTORY)' \
173 --define '_topdir $(RPMBUILD_TOPDIR)' \
174 --define '_rpmdir $(RPMBUILD_RPMDIR)' \
175 --define '_sourcedir $(RPMBUILD_SOURCEDIR)' \
176 --define '_specdir $(RPMBUILD_SPECDIR)' \
177 --define '_srcrpmdir $(RPMBUILD_SRPMDIR)' \
178 --define '_builddir $(RPMBUILD_BUILDDIR)' \
179 --define '_prefix $(prefix)' \
180 --define '_libdir $(libdir)' \
181 --define '_bindir $(bindir)' \
182 --define '_datadir $(datadir)' \
183 --define '_installdir $(installdir)'
187 --define 'createtests yes' \
188 --define '_testsinstalldir $(shell basename $(installdir))'
191 #For each of the main/tests rpms we want to make sure that
192 #if they exist that they are in objdir/dist/ and that they get
193 #uploaded and that they are beside the other build artifacts
194 MAIN_RPM
= $(MOZ_APP_NAME
)-$(MOZ_NUMERIC_APP_VERSION
)-$(MOZ_RPM_RELEASE
).
$(BUILDID
).
$(TARGET_RAW_CPU
)$(PKG_SUFFIX
)
195 UPLOAD_EXTRA_FILES
+= $(MAIN_RPM
)
196 RPM_CMD
+= && mv
$(TARGET_RAW_CPU
)/$(MAIN_RPM
) $(ABS_DIST
)/
199 TESTS_RPM
=$(MOZ_APP_NAME
)-tests-
$(MOZ_NUMERIC_APP_VERSION
)-$(MOZ_RPM_RELEASE
).
$(BUILDID
).
$(TARGET_RAW_CPU
)$(PKG_SUFFIX
)
200 UPLOAD_EXTRA_FILES
+= $(TESTS_RPM
)
201 RPM_CMD
+= && mv
$(TARGET_RAW_CPU
)/$(TESTS_RPM
) $(ABS_DIST
)/
204 INNER_MAKE_PACKAGE
= cd
$(1) && $(RPM_CMD
)
205 #Avoiding rpm repacks, going to try creating/uploading xpi in rpm files instead
206 INNER_UNMAKE_PACKAGE
= $(error Try using rpm2cpio and cpio
)
208 endif #Create an RPM file
211 ifeq ($(MOZ_PKG_FORMAT
),APK
)
212 INNER_MAKE_PACKAGE
= true
213 INNER_UNMAKE_PACKAGE
= true
216 ifeq ($(MOZ_PKG_FORMAT
),DMG
)
219 _ABS_MOZSRCDIR
= $(shell cd
$(MOZILLA_DIR
) && pwd
)
220 PKG_DMG_SOURCE
= $(MOZ_PKG_DIR
)
221 INNER_MAKE_PACKAGE
= \
222 $(call py_action
,make_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 --volume-name
'$(MOZ_APP_DISPLAYNAME)' \
227 '$(PKG_DMG_SOURCE)' '$(PACKAGE)', \
229 INNER_UNMAKE_PACKAGE
= \
230 $(call py_action
,unpack_dmg
, \
231 $(if
$(MOZ_PKG_MAC_DSSTORE
),--dsstore
'$(MOZ_PKG_MAC_DSSTORE)') \
232 $(if
$(MOZ_PKG_MAC_BACKGROUND
),--background
'$(MOZ_PKG_MAC_BACKGROUND)') \
233 $(if
$(MOZ_PKG_MAC_ICON
),--icon
'$(MOZ_PKG_MAC_ICON)') \
234 $(UNPACKAGE
) $(MOZ_PKG_DIR
), \
238 MAKE_PACKAGE
= $(INNER_MAKE_PACKAGE
)
262 BadCertAndPinningServer
* \
263 DelegatedCredentialsServer
* \
264 EncryptedClientHelloServer
* \
266 OCSPStaplingServer
* \
267 SanctionsTestServer
* \
268 GenerateOCSPResponse
* \
270 chrome
/app-chrome.manifest \
272 components
/compreg.dat \
273 components
/xpti.dat \
279 # If a manifest has not been supplied, the following
280 # files should be excluded from the package too
281 ifndef MOZ_PKG_MANIFEST
282 NO_PKG_FILES
+= ssltunnel
*
286 NO_PKG_FILES
+= SmokeDMD
289 DEFINES
+= -DDLL_PREFIX
=$(DLL_PREFIX
) -DDLL_SUFFIX
=$(DLL_SUFFIX
) -DBIN_SUFFIX
=$(BIN_SUFFIX
)
291 ifeq (cocoa
,$(MOZ_WIDGET_TOOLKIT
))
292 DEFINES
+= -DDIR_MACOS
=Contents
/MacOS
/ -DDIR_RESOURCES
=Contents
/Resources
/
294 DEFINES
+= -DDIR_MACOS
= -DDIR_RESOURCES
=
298 DEFINES
+= -DMOZ_FOLD_LIBS
=1
301 # The following target stages files into two directories: one directory for
302 # core files, and one for optional extensions based on the information in
303 # the MOZ_PKG_MANIFEST file.
307 ifndef MOZ_PACKAGER_FORMAT
308 MOZ_PACKAGER_FORMAT
= $(error MOZ_PACKAGER_FORMAT is not set
)
311 ifneq (android
,$(MOZ_WIDGET_TOOLKIT
))
312 JAR_COMPRESSION ?
= none
315 ifeq ($(OS_TARGET
), WINNT
)
316 INSTALLER_PACKAGE
= $(DIST
)/$(PKG_INST_PATH
)$(PKG_INST_BASENAME
).exe
319 # These are necessary because some of our packages/installers contain spaces
320 # in their filenames and GNU Make's $(wildcard) function doesn't properly
323 space
= $(empty
) $(empty
)
324 QUOTED_WILDCARD
= $(if
$(wildcard $(subst $(space
),?
,$(1))),'$(1)')
325 ESCAPE_SPACE
= $(subst $(space
),\
$(space
),$(1))
326 ESCAPE_WILDCARD
= $(subst $(space
),?
,$(1))
328 # This variable defines which OpenSSL algorithm to use to
329 # generate checksums for files that we upload
330 CHECKSUM_ALGORITHM_PARAM
= -d sha512
-d md5
-d sha1
332 # This variable defines where the checksum file will be located
333 CHECKSUM_FILE
= '$(DIST)/$(PKG_PATH)/$(CHECKSUMS_FILE_BASENAME).checksums'
334 CHECKSUM_FILES
= $(CHECKSUM_FILE
)
336 # Upload MAR tools only if AB_CD is unset or en_US
337 ifeq (,$(AB_CD
:en-US
=))
338 ifeq (WINNT
,$(OS_TARGET
))
339 UPLOAD_EXTRA_FILES
+= host
/bin
/mar.exe
340 UPLOAD_EXTRA_FILES
+= host
/bin
/mbsdiff.exe
342 UPLOAD_EXTRA_FILES
+= host
/bin
/mar
343 UPLOAD_EXTRA_FILES
+= host
/bin
/mbsdiff
348 $(call QUOTED_WILDCARD
,$(DIST
)/$(PACKAGE
)) \
349 $(call QUOTED_WILDCARD
,$(INSTALLER_PACKAGE
)) \
350 $(call QUOTED_WILDCARD
,$(DIST
)/$(LANGPACK
)) \
351 $(call QUOTED_WILDCARD
,$(DIST
)/$(PKG_PATH
)$(MOZHARNESS_PACKAGE
)) \
352 $(call QUOTED_WILDCARD
,$(DIST
)/$(PKG_PATH
)$(SYMBOL_ARCHIVE_BASENAME
).zip
) \
353 $(call QUOTED_WILDCARD
,$(DIST
)/$(PKG_PATH
)$(GENERATED_SOURCE_FILE_PACKAGE
)) \
354 $(call QUOTED_WILDCARD
,$(MOZ_SOURCESTAMP_FILE
)) \
355 $(call QUOTED_WILDCARD
,$(MOZ_BUILDINFO_FILE
)) \
356 $(call QUOTED_WILDCARD
,$(MOZ_BUILDHUB_JSON
)) \
357 $(call QUOTED_WILDCARD
,$(MOZ_BUILDID_INFO_TXT_FILE
)) \
358 $(call QUOTED_WILDCARD
,$(MOZ_MOZINFO_FILE
)) \
359 $(call QUOTED_WILDCARD
,$(MOZ_TEST_PACKAGES_FILE
)) \
360 $(call QUOTED_WILDCARD
,$(PKG_JSSHELL
)) \
361 $(call QUOTED_WILDCARD
,$(DIST
)/$(PKG_PATH
)$(SYMBOL_FULL_ARCHIVE_BASENAME
).
tar.zst
) \
362 $(call QUOTED_WILDCARD
,$(topobjdir
)/$(MOZ_BUILD_APP
)/installer
/windows
/instgen
/setup.exe
) \
363 $(call QUOTED_WILDCARD
,$(topobjdir
)/$(MOZ_BUILD_APP
)/installer
/windows
/instgen
/setup-stub.exe
) \
364 $(call QUOTED_WILDCARD
,$(topsrcdir
)/toolchains.json
) \
365 $(call QUOTED_WILDCARD
,$(topobjdir
)/config.status
) \
366 $(if
$(UPLOAD_EXTRA_FILES
), $(foreach f
, $(UPLOAD_EXTRA_FILES
), $(wildcard $(DIST
)/$(f
))))
368 ifneq ($(filter-out en-US
,$(AB_CD
)),)
370 $(call QUOTED_WILDCARD
,$(topobjdir
)/$(MOZ_BUILD_APP
)/installer
/windows
/l10ngen
/setup.exe
) \
371 $(call QUOTED_WILDCARD
,$(topobjdir
)/$(MOZ_BUILD_APP
)/installer
/windows
/l10ngen
/setup-stub.exe
)
374 ifdef MOZ_CODE_COVERAGE
376 $(call QUOTED_WILDCARD
,$(DIST
)/$(PKG_PATH
)$(CODE_COVERAGE_ARCHIVE_BASENAME
).zip
) \
377 $(call QUOTED_WILDCARD
,$(topobjdir
)/chrome-map.json
) \
382 ifdef ENABLE_MOZSEARCH_PLUGIN
383 UPLOAD_FILES
+= $(call QUOTED_WILDCARD
,$(DIST
)/$(PKG_PATH
)$(MOZSEARCH_ARCHIVE_BASENAME
).zip
)
384 UPLOAD_FILES
+= $(call QUOTED_WILDCARD
,$(DIST
)/$(PKG_PATH
)$(MOZSEARCH_SCIP_INDEX_BASENAME
).zip
)
385 UPLOAD_FILES
+= $(call QUOTED_WILDCARD
,$(DIST
)/$(PKG_PATH
)$(MOZSEARCH_INCLUDEMAP_BASENAME
).map
)
386 ifeq ($(MOZ_BUILD_APP
),mobile
/android
)
387 UPLOAD_FILES
+= $(call QUOTED_WILDCARD
,$(DIST
)/$(PKG_PATH
)$(MOZSEARCH_JAVA_INDEX_BASENAME
).zip
)
391 ifdef MOZ_STUB_INSTALLER
392 UPLOAD_FILES
+= $(call QUOTED_WILDCARD
,$(DIST
)/$(PKG_INST_PATH
)$(PKG_STUB_BASENAME
).exe
)
395 # Upload `.xpt` artifacts for use in artifact builds.
396 UPLOAD_FILES
+= $(call QUOTED_WILDCARD
,$(DIST
)/$(PKG_PATH
)$(XPT_ARTIFACTS_ARCHIVE_BASENAME
).zip
)
398 ifndef MOZ_PKG_SRCDIR
399 MOZ_PKG_SRCDIR
= $(topsrcdir
)
402 SRC_TAR_PREFIX
= $(MOZ_APP_NAME
)-$(MOZ_PKG_VERSION
)
403 SRC_TAR_EXCLUDE_PATHS
+= \
406 --exclude
='.gitattributes' \
407 --exclude
='.gitkeep' \
408 --exclude
='.gitmodules' \
411 --exclude
='.mozconfig*' \
413 --exclude
='$(MOZILLA_DIR)/Makefile' \
414 --exclude
='$(MOZILLA_DIR)/dist'
416 SRC_TAR_EXCLUDE_PATHS
+= --exclude
='$(MOZ_OBJDIR)'
418 CREATE_SOURCE_TAR
= $(TAR
) -c
--owner
=0 --group
=0 --numeric-owner \
419 --mode
=go-w
$(SRC_TAR_EXCLUDE_PATHS
) --transform
='s,^\./,$(SRC_TAR_PREFIX)/,' -f
421 SOURCE_TAR
= $(DIST
)/$(PKG_SRCPACK_PATH
)$(PKG_SRCPACK_BASENAME
).
tar.xz
422 HG_BUNDLE_FILE
= $(DIST
)/$(PKG_SRCPACK_PATH
)$(PKG_BUNDLE_BASENAME
).bundle
423 SOURCE_CHECKSUM_FILE
= $(DIST
)/$(PKG_SRCPACK_PATH
)$(PKG_SRCPACK_BASENAME
).checksums
424 SOURCE_UPLOAD_FILES
= $(SOURCE_TAR
)
427 CREATE_HG_BUNDLE_CMD
= $(HG
) -v
-R
$(topsrcdir
) bundle
--base null
428 ifdef HG_BUNDLE_REVISION
429 CREATE_HG_BUNDLE_CMD
+= -r
$(HG_BUNDLE_REVISION
)
431 CREATE_HG_BUNDLE_CMD
+= $(HG_BUNDLE_FILE
)
432 ifdef UPLOAD_HG_BUNDLE
433 SOURCE_UPLOAD_FILES
+= $(HG_BUNDLE_FILE
)