1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622 | #!/usr/bin/make -f
DEBIAN_NAME := $(shell dpkg-parsechangelog | sed -n 's/^Source: *\(.*\)$$/\1/ p')
DEBIAN_VERSION := $(shell dpkg-parsechangelog | sed -n 's/^Version: *\(.*\)$$/\1/ p')
CHROMIUM_VERSION := $(shell dpkg-parsechangelog | sed -n 's/^Version: *.*~\(.*\)$$/\1/ p')
DEBIAN_UPSTREAM_VERSION := $(shell echo $(DEBIAN_VERSION) | sed 's/^\(.*\)-[^-]*$$/\1/')
DEBIAN_REVISION := $(shell echo $(DEBIAN_VERSION) | sed 's/^.*r\([^-]*\)-.*/\1/')
DEBIAN_DIST := $(shell lsb_release -ds | tr -d '()' |sed -e 's/\#/ /g')
DEBIAN_DIST_NAME := $(shell lsb_release -si |sed -e 's/\#/ /g')
DEBIAN_DIST_VERSION := $(shell lsb_release -sr |sed -e 's/\#/ /g')
DEBIAN_CODECS_NAME := $(subst browser,codecs-ffmpeg,$(DEBIAN_NAME))
DEBIAN_DRIVER_NAME := $(subst browser,chromedriver,$(DEBIAN_NAME))
DEB_HOST_ARCH ?= $(shell dpkg-architecture -qDEB_HOST_ARCH)
DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)
DEB_HOST_ARCH_CPU ?= $(shell dpkg-architecture -qDEB_HOST_ARCH_CPU)
DEB_BUILD_ARCH ?= $(shell dpkg-architecture -qDEB_BUILD_ARCH)
DEB_BUILD_ARCH_BITS ?= $(shell dpkg-architecture -qDEB_BUILD_ARCH_BITS)
DEB_TAR_SRCDIR := .
SRC_DIR := $(CURDIR)/$(DEB_TAR_SRCDIR)
LIB_DIR := usr/lib/$(DEBIAN_NAME)
BINARY_PACKAGE_COMPRESSION ?= xz
FFMPEG_DIR := third_party/ffmpeg
FFMPEG_SRC_DIR := $(SRC_DIR)/$(FFMPEG_DIR)
NINJA := ninja
# Whitelist LP provided new langs only in release builds, PPAs ship them all
WANT_ONLY_WHITELISTED_NEW_LANGS ?= 0
ifneq (,$(findstring Ubuntu,$(DEBIAN_DIST)))
DISTRIBUTION=UBUNTU
UBUNTU_DIST=$(DEBIAN_DIST)
endif
ifneq (,$(findstring Debian,$(DEBIAN_DIST)))
DISTRIBUTION=DEBIAN
endif
WANT_DEBUG ?= 0
WANT_SHARED_LIBS ?= 0
# We are currently not using any of the Google services. If we do so in
# the future, provide the necessary API key information here.
GOOGLEAPI_APIKEY_UBUNTU :=
GOOGLEAPI_CLIENTID_UBUNTU :=
GOOGLEAPI_CLIENTSECRET_UBUNTU :=
GYP_PARAMS := --depth=$(CURDIR) --format=ninja
BROWSER_GYP_DEFINES =
FFMPEG_MT_GYP_DEFINES =
GYP_DEFINES =
# Build the launchpad translations (already landed upstream)
GYP_DEFINES += use_third_party_translations=1
# Always add debug symbols, and strip them when we don't want them.
#GYP_DEFINES += release_extra_cflags="-g"
# Don't fail on compilation warnings.
GYP_DEFINES += werror=$(NULL)
# We are never using a sysroot-based toolchain; override the wrong
# autodetection for arm.
GYP_DEFINES += sysroot=
# Link directly to library instead of using dlopen.
GYP_DEFINES += linux_link_gsettings=1
# Disable NaCl until we figure out what to do with the private toolchain
GYP_DEFINES += disable_nacl=1
# do not use third_party/gold as the linker.
GYP_DEFINES += linux_use_gold_binary=0 linux_use_gold_flags=0
# enable features that we want.
GYP_DEFINES += enable_webrtc=1
# get resources for high dpi and touch
GYP_DEFINES += use_aura=1
GYP_DEFINES += enable_hidpi=1
GYP_DEFINES += enable_touch_ui=1
# Prefer gcc/g++ over clang until clang is better tested in Ubuntu.
# However Ubuntu Precise (12.04) doesn't support gcc-4.8, so use clang there
ifneq (,$(filter 12.04%,$(UBUNTU_DIST)))
GYP_DEFINES += clang=1 clang_use_chrome_plugins=0
else
GYP_DEFINES += clang=0
endif
#GYP_DEFINES += use_ozone=1 ozone_auto_platforms=0 ozone_platform_mir=1 ozone_platform_wayland=0
#GYP_DEFINES += use_ozone=1 #ozone_auto_platforms=1 #ozone_platform_mir=1 #ozone_platform_wayland=0
#GYP_DEFINES += ozone_platform_mir=1 #ozone_platform_wayland=0
# Intentional configuration, not bug work-arounds.
ifeq (arm,$(DEB_HOST_ARCH_CPU))
GYP_DEFINES += \
arm_neon=0 \
target_arch=arm \
use_cups=1 \
$(NULL)
ifeq (armel,$(DEB_HOST_ARCH))
GYP_DEFINES += \
v8_use_arm_eabi_hardfloat=false \
arm_float_abi=soft \
arm_thumb=0 \
armv7=0 \
$(NULL)
endif
ifeq (armhf,$(DEB_HOST_ARCH))
GYP_PARAMS += -DUSE_EABI_HARDFLOAT
# ARN Neon optional flag is off because it causes build errors, AND testing
# /proc/cpuinfo contents can't work with a sandbox anyway.
GYP_DEFINES += \
arm_neon_optional=0 \
v8_use_arm_eabi_hardfloat=true \
arm_fpu=vfpv3-d16 \
arm_float_abi=hard \
arm_thumb=1 \
armv7=1 \
arm_version=7 \
$(NULL)
endif
endif
ifeq (amd64,$(DEB_HOST_ARCH))
GYP_DEFINES += target_arch=x64
ifneq (,$(filter 12.04%,$(UBUNTU_DIST)))
# clang builds with tcmalloc on Precise SEGV during startup
GYP_DEFINES += use_allocator=none
endif
endif
ifeq (i386,$(DEB_HOST_ARCH))
GYP_DEFINES += target_arch=ia32
# SEGV on component builds, 2013-05
GYP_DEFINES += use_allocator=none
# Some mobile CPUs don't support SSE instructions. SIGILL. 2014-08
GYP_DEFINES += disable_sse2=1
endif
# Do this for every architecture. More than 4GB of memory is too much to expect
# of builders.
COMPONENT_SHARED_LIB_BUILD := 1
ifeq (1,$(COMPONENT_SHARED_LIB_BUILD))
BROWSER_GYP_DEFINES += component=shared_library
FFMPEG_MT_GYP_DEFINES += component=shared_library
endif
# Always build ffmpeg as shared library so we can have both regular and -extra.
BROWSER_GYP_DEFINES += ffmpeg_component=shared_library
FFMPEG_MT_GYP_DEFINES += ffmpeg_component=shared_library
# Webkit library is enormous. Exclude for now.
GYP_DEFINES += remove_webcore_debug_symbols=1
# Don't let dh_installinit install *.default in /etc/default
DEB_DH_INSTALLINIT_ARGS += --noscripts --onlyscripts
# Don't let scour touch the svg files
DEB_DH_SCOUR_ARGS += -Xsvg
DEB_DH_BUILDDEB_ARGS += -- -Z $(BINARY_PACKAGE_COMPRESSION)
ifneq (0,$(WANT_DEBUG))
BUILD_TYPE := Debug
else
BUILD_TYPE := Release
# Add symbols
GYP_DEFINES += linux_dump_symbols=1
GYP_DEFINES += logging_like_official_build=1
endif
BUILD_ARGS += -C $(DEB_TAR_SRCDIR)/out/$(BUILD_TYPE)
# Shared libraries
ifeq (1,$(WANT_SHARED_LIBS))
GYP_DEFINES += library=shared_library
endif
#post-patches::
# sed -i 's^\("/usr/lib/nss"\)^/*REM \1 REM*/"/usr/lib/$(DEB_HOST_MULTIARCH)/nss"/**/^' $(DEB_TAR_SRCDIR)/crypto/nss_util.cc
# perl $(CURDIR)/debian/enable-dist-patches.pl $(DEBIAN_DIST_VERSION) $(CURDIR)/debian/patches/series
subst_files = \
debian/$(DEBIAN_NAME).sh \
$(NULL)
# FFmpeg-mt
# Don't build it as part of iridium. Build it separately twice, once with
# the Chrome branding to gain the extra codecs, and once without branding.
# The ffmpeg_branding variable controls which codecs are built inside the sumo lib.
# By default, ffmpeg_branding equals to "Chromium" and only builds the ogg/vorbis/theora codecs.
# When set to "Chrome", it also builds aac/ac3/mpeg4audio/h264/mov/mp3
DEB_DH_SHLIBDEPS_ARGS_$(DEBIAN_CODECS_NAME) := -l$(CURDIR)/debian/$(DEBIAN_CODECS_NAME)/$(LIB_DIR)
DEB_DH_SHLIBDEPS_ARGS_$(DEBIAN_CODECS_NAME)-extra := -l$(CURDIR)/debian/$(DEBIAN_CODECS_NAME)-extra/$(LIB_DIR)
BROWSER_GYP_DEFINES += \
proprietary_codecs=1 \
build_ffmpegsumo=1 \
$(NULL)
FFMPEG_MT_GYP_DEFINES += \
use_system_vpx=0 \
release_extra_cflags=-g \
$(NULL)
FFMPEG_MT_STD_GYP_DEFINES = $(NULL)
FFMPEG_MT_EXTRA_GYP_DEFINES = ffmpeg_branding=Chrome
# Precise doesn't set some settings.
ifeq (,$(filter 12.04%,$(UBUNTU_DIST)))
# enable compile-time dependency on gnome-keyring
GYP_DEFINES += use_gnome_keyring=1 linux_link_gnome_keyring=1
# controlling the use of GConf (the classic GNOME configuration
# and GIO, which contains GSettings (the new GNOME config system)
GYP_DEFINES += use_gconf=1 use_gio=1
endif
# Build chrome and chrome_sandbox, and chromedriver
BUILD_TARGETS := \
pdf \
chrome \
chrome_sandbox \
chromedriver \
remoting_resources \
$(NULL)
# Needed to preserve the suid and make the sandbox happy
DEB_FIXPERMS_EXCLUDE := chrome-sandbox
ifneq (,$(GOOGLEAPI_APIKEY_$(DISTRIBUTION)))
GYP_DEFINES += \
google_api_key='$(GOOGLEAPI_APIKEY_$(DISTRIBUTION))' \
google_default_client_id='$(GOOGLEAPI_CLIENTID_$(DISTRIBUTION))' \
google_default_client_secret='$(GOOGLEAPI_CLIENTSECRET_$(DISTRIBUTION))'
else
$(warning Google API info is not set in build variables GOOGLEAPI_APIKEY_$(DISTRIBUTION) GOOGLEAPI_CLIENTID_$(DISTRIBUTION) GOOGLEAPI_CLIENTSECRET_$(DISTRIBUTION))
endif
ifneq ($(DEB_HOST_ARCH),$(DEB_BUILD_ARCH))
CROSS_BUILD = PKG_CONFIG_PATH=/usr/lib/$(DEB_HOST_MULTIARCH)/pkgconfig:/usr/$(DEB_HOST_MULTIARCH)/lib/pkgconfig CXX=$(DEB_HOST_GNU_TYPE)-g++ CC=$(DEB_HOST_GNU_TYPE)-gcc AR=$(DEB_HOST_GNU_TYPE)-ar AS=$(DEB_HOST_GNU_TYPE)-as CPP=$(DEB_HOST_GNU_TYPE)-cpp LD=$(DEB_HOST_GNU_TYPE)-ld
else
ifneq (,$(filter 12.04%,$(UBUNTU_DIST)))
CROSS_BUILD = CC=$$(which clang-3.6 clang-3.5 clang-3.4 clang |head -1) CXX=$$(which clang++-3.6 clang++-3.5 clang++-3.4 clang++ |head -1)
else
CROSS_BUILD = CC=$$(which gcc-4.8 gcc |head -1) CXX=$$(which g++-4.8 g++ |head -1)
endif
endif
### Official interfaces.
# Debian Policy §4.9
binary binary-arch binary-indep build build-arch build-indep clean install install-arch install-indep patch:
@set -eux
dh --sourcedirectory=$(DEB_TAR_SRCDIR) --builddirectory=$(DEB_TAR_SRCDIR)/out/$(BUILD_TYPE) --with quilt $@
# BZR build-deb rule
get-packaged-orig-source: URL=https://commondatastorage.googleapis.com/chromium-browser-official/chromium-$(ORIG_VERSION).tar.xz
get-packaged-orig-source: SUMURL=https://commondatastorage.googleapis.com/chromium-browser-official/chromium-$(ORIG_VERSION).tar.xz.hashes
get-packaged-orig-source: DEST_FILENAME=iridium-browser_$(ORIG_VERSION).orig.tar.xz
get-packaged-orig-source:
@set -eux
wget --continue --progress=dot:mega $(URL)
diff -u <(wget -O - -q $(SUMURL); echo) <(for crypto in md5 sha1 sha224 sha256 sha384 sha512; do echo -n "$$crypto "; $${crypto}sum 'chromium-$(ORIG_VERSION).tar.xz'; done)
mv "chromium-$(ORIG_VERSION).tar.xz" "$(DEST_FILENAME)"
# Debian Policy §4.9
get-orig-source:
@set -eux
test "$(ORIG_VERSION)" || { echo "Set ORIG_VERSION" to use this rule.; exit 1; }
ORIG_VERSION=$(ORIG_VERSION) $(MAKE) get-packaged-orig-source
### Below here, rules that support those above required ones. "override_dh_"*
### are of course DH customizations.
override_dh_auto_configure:
# Don't configure here. We configure and build many times in 'build'.
# There are three things to build. Standard, ffmpeg simple, and ffmpeg full.
override_dh_auto_build: build-stamp build-stamp-ffmpeg-std build-stamp-ffmpeg-extra
override_dh_fixperms:
dh_fixperms --exclude $(DEB_FIXPERMS_EXCLUDE)
override_dh_builddeb:
dh_builddeb -- -Zxz
override_dh_installman:
# install does this
override_dh_install-arch: local-install-arch compare-arch
override_dh_install-indep: local-install-indep compare-indep
override_dh_shlibdeps:
dh_shlibdeps -l$(CURDIR)/debian/iridium-browser/usr/lib/iridium-browser/libs/ |grep -v "dpkg-shlibdeps: warning: can't extract name and version from library name" || true
local-install-arch: PKG_DIRS := $(addprefix debian/,$(shell dh_listpackages))
local-install-arch: TRASH := .deps gen obj.host obj.target \*.lock obj build.\* .landmines mksnapshot.ia32 protoc pyproto re2c resources xdg-mime xdg-settings yasm \*.TOC \*.stamp product_logo_\*png gen\* lib/\* lib libvpx_obj_int_extract .ninja\* chrome-wrapper \*.breakpad.\* java_mojo dump_syms
local-install-arch:
@set -eux
# Two stages: Install out of source tree. Copy to packaging.
mkdir -p debian/tmp/$(LIB_DIR)
(cd $(SRC_DIR)/out/$(BUILD_TYPE); tar cf - . $(foreach excl,$(TRASH),--exclude=$(excl) );) | (cd debian/tmp/$(LIB_DIR); tar xvf -;)
rm $(SRC_DIR)/out/$(BUILD_TYPE)/lib/libffmpeg.so
ifeq (1,$(COMPONENT_SHARED_LIB_BUILD))
mkdir -p debian/tmp/$(LIB_DIR)/libs
cp $(SRC_DIR)/out/$(BUILD_TYPE)/lib/*.so debian/tmp/$(LIB_DIR)/libs/
endif
# Icons
cp -a $(CURDIR)/debian/icons/sph48.png debian/iridium-browser/usr/share/pixmaps/iridium-browser.png
for size in 22 24 32 48 64 128 256 ; do \
if test -f "$(CURDIR)/debian/icons/sph$$size.png"; then \
dh_installdirs --package=iridium-browser usr/share/icons/hicolor/$${size}x$${size}/apps ; \
cp -a $(CURDIR)/debian/icons/sph$$size.png \
debian/iridium-browser/usr/share/icons/hicolor/$${size}x$${size}/apps/iridium-browser.png ; \
else \
echo "There is no size $${size} icon. We expected one."; \
fi; \
done
##### Copy installed to package ####
(cd debian/tmp/$(LIB_DIR); tar cf - . --exclude=chromedriver;) | (cd debian/iridium-browser/$(LIB_DIR); tar xvf -;)
# prev missed "libs"
(cd debian/tmp/$(LIB_DIR)/libs; tar cf - .;) | (cd debian/iridium-browser/$(LIB_DIR)/libs/; tar xvf -;)
ifeq (1,$(COMPONENT_SHARED_LIB_BUILD))
# Set the directory for looking up component libraries.
find debian/*/$(LIB_DIR)/libs -type f -name \*.so -execdir chrpath --replace "\$$ORIGIN" {} \;
find debian/*/$(LIB_DIR) -maxdepth 1 -type f -name \*.so -execdir chrpath --replace "\$$ORIGIN/libs" {} \;
find debian/*/$(LIB_DIR) -maxdepth 1 -type f -executable -execdir chrpath --replace "\$$ORIGIN/libs" {} \;
endif
# Launcher script
cp -a debian/iridium-browser.sh debian/iridium-browser/usr/bin/iridium-browser
chmod 755 debian/iridium-browser/usr/bin/iridium-browser
# Preferences
cp -a debian/iridium-browser.default debian/iridium-browser/etc/iridium-browser/default
# Rename the binary from chrome to iridium-browser, this is required as
# Iridium dereferences all symlinks before starting its children making
# the Gnome System Monitor confused with icons
mv debian/iridium-browser/$(LIB_DIR)/chrome debian/iridium-browser/$(LIB_DIR)/iridium-browser
# "you have to change the underscore from the build target into a hyphen".
# https://code.google.com/p/chromium/wiki/LinuxSUIDSandbox
mv debian/iridium-browser/$(LIB_DIR)/chrome_sandbox debian/iridium-browser/$(LIB_DIR)/chrome-sandbox
chmod 4755 debian/iridium-browser/$(LIB_DIR)/chrome-sandbox
# Manpage is for wrong program name, and it's in a weird place. Use and destroy.
mkdir -p debian/iridium-browser/usr/share/man/man1
mv debian/iridium-browser/$(LIB_DIR)/chrome.1 debian/iridium-browser/usr/share/man/man1/iridium-browser.1
gzip -9 debian/iridium-browser/usr/share/man/man1/iridium-browser.1
# NaCL may be blacklisted, so only include it when it's been built
ifeq (,$(filter disable_nacl=1,$(GYP_DEFINES)))
cp -a $(SRC_DIR)/out/$(BUILD_TYPE)/libppGoogleNaClPluginChrome.so debian/iridium-browser/$(LIB_DIR)/
cp -a $(SRC_DIR)/out/$(BUILD_TYPE)/nacl_irt_* debian/iridium-browser/$(LIB_DIR)/
endif
# Locales: only keep en-US in the main deb
# Discard everything except en-US
find debian/iridium-browser/$(LIB_DIR)/locales debian/iridium-browser/$(LIB_DIR)/remoting_locales -type f \! -name en-US.pak -print -delete
ifneq (,$(findstring Ubuntu,$(DEBIAN_DIST)))
# we need space on the CD, so remove duplicates of the doc files
# (See LP: #194574 as for why we don't let cdbs do it)
@for doc in copyright AUTHORS changelog.Debian.gz ; do \
F=debian/$(DEBIAN_NAME)/usr/share/doc/$(DEBIAN_NAME)/$$doc ; \
for file in `find $(addsuffix /usr/share/doc,$(filter-out debian/$(DEBIAN_NAME),$(PKG_DIRS))) -type f -name $$doc -print`; do \
cmp -s $$file $$F ; \
if [ $$? -eq 0 ] ; then \
rm -f $$file ; \
echo " symlinking $$doc in '"`echo $$file | awk 'BEGIN{ FS="/"} { print $$2 }'`"' to file in '$(DEBIAN_NAME)'" ; \
( cd `dirname $$file` ; ln -s ../$(DEBIAN_NAME)/$$doc ) ; \
fi ; \
done ; \
done
endif
dh_install -a
dh_listpackages -a |grep -v -- -dbg |while read pkg; do dh_strip --package=$$pkg --dbg-package=$${pkg}-dbg; done
local-install-indep:
@set -eux
dh_install -i
install --directory debian/tmp/etc/iridium-browser/customizations
install --owner=root --mode=0644 --no-target-directory debian/iridium-browser-customization-example debian/tmp/etc/iridium-browser/customizations/00-example
find debian/iridium-browser-l10n/$(LIB_DIR)/remoting_locales debian/iridium-browser-l10n/$(LIB_DIR)/locales -name en-US.pak -print -delete
override_dh_clean:
@set -eux
test -d chrome
rm -rf $(DEB_TAR_SRCDIR)/out
dh_clean debian/iridium-browser.sh debian/*-stamp debian/stamp-* debian/tmp-* build-stamp* $(subst_files) $(FFMPEG_SRC_DIR)/yasm $(FFMPEG_SRC_DIR)/*.mk $(DEB_TAR_SRCDIR)/tools/gn/bin/linux/gn
find $(DEB_TAR_SRCDIR) \( -name \*.pyc -o -name \*.pyo -name \*.o \) -delete
find $(DEB_TAR_SRCDIR) -regex '.*/\([^/]*\)/\1[^/]*\.\(Makefile\|\(target\|host\)\.mk\)' -delete
set +x
echo
echo VERIFICATION:
cd ..; for crypto in md5 sha1 sha224 sha256 sha384 sha512; do $${crypto}sum 'iridium-browser_$(DEBIAN_UPSTREAM_VERSION).orig.tar.xz' |sed -e 's/iridium-browser_/chromium-/' -e "s/^/$${crypto} /"; done
echo VERIFICATION-
echo Compare to https://commondatastorage.googleapis.com/chromium-browser-official/chromium-$(DEBIAN_UPSTREAM_VERSION).tar.xz.hashes
echo
# By default, Chromium expects a binary file that generates the build files. Fortunately,
# the source files for gn (the binary) are present in the source tree. This section
# disables the default behavior, falls back to gyp, builds gn, and use that as the binary.
build-stamp-gn: GYP_ENV = GYP_DEFINES="$(GYP_DEFINES)"
build-stamp-gn:
@set -eux
### configure
if [ ! -d $(DEB_TAR_SRCDIR) ]; then \
mv $(DEBIAN_NAME)-$(DEBIAN_UPSTREAM_VERSION)/$(DEB_TAR_SRCDIR) .; \
rm -r $(DEBIAN_NAME)-$(DEBIAN_UPSTREAM_VERSION); \
fi
# Disable default behavior of using gn
test ! -f build/gyp_chromium.withgn || mv build/gyp_chromium.withgn build/gyp_chromium
sed -i.withgn -e '/^ if not RunG/,+1s,^,#,' build/gyp_chromium
cd $(SRC_DIR) && $(GYP_ENV) $(CROSS_BUILD) python build/gyp_chromium tools/gn/gn.gyp $(GYP_PARAMS)
# Re-enable behavior of using gn
mv build/gyp_chromium.withgn build/gyp_chromium
### build
$(NINJA) -C $(DEB_TAR_SRCDIR)/out/Release $(GN_BUILD_ARGS) gn
# Copy the binary to the location expected by the build system
cp -v $(DEB_TAR_SRCDIR)/out/Release/gn $(DEB_TAR_SRCDIR)/tools/gn/bin/linux/
ln -s -v gn $(DEB_TAR_SRCDIR)/tools/gn/bin/linux/gn$(DEB_BUILD_ARCH_BITS)
rm -rf $(DEB_TAR_SRCDIR)/out
touch $@
debian/iridium-browser.sh: debian/iridium-browser.sh.in
@set -eux
### configure
sed -e 's/@BUILD_DIST@/$(DEBIAN_DIST_NAME) $(DEBIAN_DIST_VERSION)/g' \
-e 's/@BUILD_DIST_NAME@/$(DEBIAN_DIST_NAME)/g' \
-e 's/@BUILD_DIST_VERSION@/$(DEBIAN_DIST_VERSION)/g' \
-e 's/@UPSTREAM_VERSION@/$(DEBIAN_UPSTREAM_VERSION)/g' \
$< > $@
# This is really configure+build in one step. b depends on c.
build-stamp: GYP_ENV = GYP_GENERATORS=ninja
build-stamp: GYP_ENV += GYP_DEFINES="$(GYP_DEFINES) $(BROWSER_GYP_DEFINES)"
build-stamp: debian/iridium-browser.sh
@set -eux
# Upstream changes often. Fail when they introduce a config flag we don't know about.
-diff --ignore-case --suppress-common-lines --unified=0 debian/known_gyp_flags <(sed -e "/: *'<(/{ s,.*'<(,,g; s,).*,,; p; }" -e d build/common.gypi | LC_ALL=C sort -u |grep -v '^\(win_\|mac_\|android_\|.san\|..san\|msvs_\|ios_\|goma_\|windows_\|wix_\|directx_\)') || echo This seems bad.
cd $(SRC_DIR) && $(GYP_ENV) $(CROSS_BUILD) build/gyp_chromium build/all.gyp $(GYP_PARAMS)
### build
while sleep 1200; do echo "# I ATEN'T DEAD"; done& $(BUILD_DEFINES) $(NINJA) $(BUILD_ARGS) $(BUILD_TARGETS) && { kill \%1; sleep 1; echo; exit 0; } || { kill \%1; exit 1; sleep 2; echo; exit 1; }
touch $@
build-stamp-ffmpeg-%: GYP_DEFINES += $(FFMPEG_MT_$(subst std,STD,$(subst extra,EXTRA,$*))_GYP_DEFINES) $(FFMPEG_MT_GYP_DEFINES)
build-stamp-ffmpeg-%: GYP_ENV = GYP_GENERATORS=ninja
build-stamp-ffmpeg-%: GYP_ENV += GYP_DEFINES="$(GYP_DEFINES)"
build-stamp-ffmpeg-%:
@set -eux
### configure
cd $(SRC_DIR) && $(GYP_ENV) $(CROSS_BUILD) build/gyp_chromium $(FFMPEG_DIR)/ffmpeg.gyp $(GYP_PARAMS)
### build
$(NINJA) $(BUILD_ARGS)
mkdir -p debian/tmp-$*/$(LIB_DIR)/libs
cp $(SRC_DIR)/out/$(BUILD_TYPE)/lib/libffmpeg.so $(CURDIR)/debian/tmp-$*/$(LIB_DIR)/libs
touch $@
# These are (leading-slash-less) files that are created by upstream builder,
# but intentionally not packaged. The should match very specifically so we
# know they only match things we should ignore. No false negatives, plz.
# When composing a match, it has to be escaped for nonquoted shell expression
# first, then escaped for Make. No expression can contain a space, as it's
# used later to join expressions in alternation; a dot should suffice.
# Useful: https://code.google.com/p/chromium/codesearch#search/q=package:chromium
## webkit tests
#BUILT_UNUSED_MATCH = ^usr/lib/iridium-browser/AHEM____.TTF$$
#BUILT_UNUSED_MATCH += ^usr/lib/iridium-browser/fonts.conf$$
#BUILT_UNUSED_MATCH += ^usr/lib/iridium-browser/libTestNetscapePlugIn.so$$
#BUILT_UNUSED_MATCH += ^usr/lib/iridium-browser/plugins/libTestNetscapePlugIn.so$$
#BUILT_UNUSED_MATCH += ^usr/lib/iridium-browser/ImageDiff$$
## xdg-utils install dep
BUILT_UNUSED_MATCH += ^usr/lib/iridium-browser/xdg-\(mime\|settings\)$$
INDEP_MATCH = ^usr/lib/iridium-browser/.\*\(?\!\<pseudo-\)locales/.\*.pak$$
PACKAGED_NOT_FROM_TREE_MATCH = ^usr/share/applications/iridium-browser.desktop$$
PACKAGED_NOT_FROM_TREE_MATCH += ^usr/share/apport/package-hooks/iridium-browser.py$$
PACKAGED_NOT_FROM_TREE_MATCH += ^usr/share/doc/iridium-browser/README.source$$
PACKAGED_NOT_FROM_TREE_MATCH += ^usr/share/doc/iridium-browser/TODO.Debian$$
PACKAGED_NOT_FROM_TREE_MATCH += ^usr/share/doc/iridium-browser/copyright.problems.gz$$
PACKAGED_NOT_FROM_TREE_MATCH += ^usr/share/doc/.\*/buildinfo_.\*.gz$$
PACKAGED_NOT_FROM_TREE_MATCH += ^usr/share/gnome-control-center/default-apps/iridium-browser.xml$$
PACKAGED_NOT_FROM_TREE_MATCH += ^usr/share/.\*/iridium-browser.png$$
PACKAGED_NOT_FROM_TREE_MATCH += ^usr/share/doc/.\*/copyright$$
PACKAGED_NOT_FROM_TREE_MATCH += ^usr/share/doc/.\*/changelog.Debian.gz$$
PACKAGED_NOT_FROM_TREE_MATCH += ^usr/bin/iridium-browser$$
PACKAGED_NOT_FROM_TREE_MATCH += ^etc/iridium-browser/default$$
PACKAGED_NOT_FROM_TREE_MATCH += ^etc/iridium-browser/customizations/00-example$$
PACKAGED_NOT_FROM_TREE_MATCH += ^etc/iridium-browser/master_preferences$$
# Expressions to map filenames in the comparison logic so that a rename in
# packaging is correctly handled. No expression contains a space. Each should
# be able to be used as a SED expression. This changes file names in
# pre-packaging listing. All of this is done AFTER removing items
# BUILD_UNUSED_MATCH . Quote for regexp, then shell, then Make.
# Man pages are moved, renamed, compressed.
RENAMED_FILE = s,^usr/lib/iridium-browser/chrome.1\$$,usr/share/man/man1/iridium-browser.1.gz,
# Sandbox name is wrong. Upstream builder deficiency.
RENAMED_FILE += s,^usr/lib/iridium-browser/chrome_sandbox$$,usr/lib/iridium-browser/chrome-sandbox,
# Executable name is different.
RENAMED_FILE += s,^usr/lib/iridium-browser/chrome$$,usr/lib/iridium-browser/iridium-browser,
compare-indep: INDEP_MATCH = ^usr/lib/iridium-browser/.\*\(?\!\<pseudo-\)locales/.\*.pak$$
compare-indep: SPACE := $(eval) $(eval)
compare-indep:
@set -eux; \
T=$$(mktemp -d -t iridium-comparisons-XXXXXXX); \
test "$${T}"; \
test -d $${T}; \
find debian/tmp debian/tmp-extra debian/tmp-std -type f |cut -d/ -f3- >$${T}/unfiltered-built; \
grep -E \($(subst $(SPACE),\|,$(INDEP_MATCH))\) $${T}/unfiltered-built $(foreach expr,$(RENAMED_FILE), |sed -r -e $(expr)) |grep -v /en-US.pak | LC_ALL=C sort >$${T}/built; \
dh_listpackages -i |while read pkgname; do find debian/$${pkgname} -type f; done |grep -v /DEBIAN |cut -d/ -f3- |grep -v ^usr/lib/debug/ | LC_ALL=C sort >$${T}/unfiltered-packaged; \
grep -E \($(subst $(SPACE),\|,$(INDEP_MATCH))\) $${T}/unfiltered-packaged |grep -v /en-US.pak >$${T}/packaged || true; \
if ! diff -U0 $${T}/built $${T}/packaged; then \
echo " => Found indep differences, please investigate. $${T}/built $${T}/packaged" ; \
exit 1; \
fi; \
rm -r $${T}
compare-arch: INDEP_MATCH = ^usr/lib/iridium-browser/.\*\locales/.\*.pak$$
compare-arch: PKG_DIRS := $(addprefix debian/,$(shell dh_listpackages -a))
compare-arch: SPACE := $(eval) $(eval)
compare-arch:
@set -eux; \
T=$$(mktemp -d -t iridium-comparisons-XXXXXXX);\
test "$${T}"; \
test -d $${T};\
DUPES=`find $(PKG_DIRS) -type f -print | grep -v /DEBIAN/ | cut -d/ -f3- | LC_ALL=C sort | uniq -c | grep -vE '^ *2 .*/libffmpeg.so$$' | grep -vE '^ *1 '` || true; \
if [ "Z$$DUPES" != Z ] ; then \
echo " => Found duplicates:\n $$DUPES" ; \
exit 1 ; \
fi; \
find debian/tmp debian/tmp-extra debian/tmp-std -type f |cut -d/ -f3- >$${T}/unfiltered-built ;\
grep -vE \($(subst $(SPACE),\|,$(BUILT_UNUSED_MATCH))\) $${T}/unfiltered-built $(foreach expr,$(RENAMED_FILE), |sed -r -e $(expr)) |grep -vE \($(subst $(SPACE),\|,$(INDEP_MATCH))\) | LC_ALL=C sort >$${T}/built ;\
find $(PKG_DIRS) -type f |grep -v /DEBIAN |cut -d/ -f3- |grep -v ^usr/lib/debug/ | LC_ALL=C sort >$${T}/unfiltered-packaged ;\
grep -vE \($(subst $(SPACE),\|,$(PACKAGED_NOT_FROM_TREE_MATCH))\) $${T}/unfiltered-packaged |grep -vE \($(subst $(SPACE),\|,$(INDEP_MATCH))\) >$${T}/packaged ;\
if ! diff -U0 $${T}/built $${T}/packaged; then \
echo " => Found archdep differences, please investigate. $${T}/built $${T}/packaged" ; \
exit 1; \
fi; \
for expr in $(BUILT_UNUSED_MATCH); do if ! grep -E $$expr $${T}/unfiltered-built >/dev/null; then echo "Warning: Unused built matcher: $$expr in $${T}/unfiltered-built "; fi; done; \
for expr in $(PACKAGED_NOT_FROM_TREE_MATCH); do if ! grep -E $$expr $${T}/unfiltered-packaged >/dev/null; then echo "Warning: Unused packaged matcher: $$expr"; fi; done; \
rm -r $${T};
###############################################################################################
# Translations
# New langs with enough coverage to land in official builds
# (leave empty to accept all new lang)
patch-translations: GRIT_WHITELISTED_LANGS ?= ca@valencia eu gl ug gd
patch-translations: TRANSLATIONS_TOOLS_BRANCH := http://bazaar.launchpad.net/~chromium-team/chromium-browser/chromium-translations-tools.head
patch-translations: TRANSLATIONS_EXPORT_BRANCH := http://bazaar.launchpad.net/~chromium-team/chromium-browser/chromium-translations-exports.head
patch-translations: GRIT_TEMPLATES := chrome/app/chromium_strings.grd chrome/app/generated_resources.grd components/policy/resources/policy_templates.grd ui/strings/ui_strings.grd webkit/glue/resources/webkit_resources.grd
patch-translations: OTHER_GRIT_TEMPLATES := ui/strings/app_locale_settings.grd chrome/app/resources/locale_settings.grd chrome/app/resources/locale_settings_linux.grd
patch-translations: MAPPED_GRIT_TEMPLATES := --map-template-names ui/strings/ui_strings.grd=ui/strings/app_strings.grd
patch-translations: GRIT_CONVERTER_FLAGS := --create-patches translations-patches --import-gettext ../translations-export --export-grit $${T}/translations-grit --build-gyp-file build/common.gypi --other-grd-files $$(echo $(OTHER_GRIT_TEMPLATES) | tr ' ' ',') $(MAPPED_GRIT_TEMPLATES)
ifeq (1,$(WANT_ONLY_WHITELISTED_NEW_LANGS))
patch-translations: GRIT_CONVERTER_FLAGS += --whitelisted-new-langs $$(echo $(GRIT_WHITELISTED_LANGS) | tr ' ' ',')
endif
patch-translations: PATCH_FILE := launchpad_translations.patch
patch-translations:
@set -eux
ls $(GRIT_TEMPLATES)
ls $(OTHER_GRIT_TEMPLATES)
T=$$(mktemp --directory --tmpdir=.. -t chromium-launchpad-translations-XXXXXXX)
test "$${T}"
test -d $${T}
test -d $${T}/translations-tools || bzr export $${T}/translations-tools $(TRANSLATIONS_TOOLS_BRANCH)
test -d $${T}/translations-export || bzr export $${T}/translations-export $(TRANSLATIONS_EXPORT_BRANCH)
( cd $(DEB_TAR_SRCDIR); $${T}/translations-tools/chromium2pot.py $(GRIT_CONVERTER_FLAGS) $$(ls $(GRIT_TEMPLATES)); )
quilt delete "$(PATCH_FILE)" || true
quilt new "$(PATCH_FILE)"
( cd $${T}/translations-grit && find * -type f ) |while read updatedfile; do \
quilt add -P "$(PATCH_FILE)" $(DEB_TAR_SRCDIR)/"$$updatedfile"; \
cp $${T}/translations-grit/"$$updatedfile" $(DEB_TAR_SRCDIR)/"$$updatedfile"; \
done
{ echo "Description: Contributed translations from Launchpad. "; echo; } |quilt header -r "$(PATCH_FILE)"
quilt refresh -pab --no-timestamps "$(PATCH_FILE)";
echo "Patch needs committing."
.PHONY: binary binary-arch binary-indep build build-arch build-indep clean install install-arch install-indep patch get-packaged-orig-source gos override_dh_* local-install-* patch-translations compare-*
# needed for easy job control, e.g, kill %1
SHELL := /bin/bash
# This changes state for ALL rules in the makefile.
.ONESHELL:
|