Andreas Wacknitz
2023-12-21 4372c710800d751cce4dfd60fd954c528512d36c
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
#
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
# Common Development and Distribution License (the "License").
# You may not use this file except in compliance with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# or http://www.opensolaris.org/os/licensing.
# See the License for the specific language governing permissions
# and limitations under the License.
#
# When distributing Covered Code, include this CDDL HEADER in each
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
# If applicable, add the following below this CDDL HEADER, with the
# fields enclosed by brackets "[]" replaced with your own identifying
# information: Portions Copyright [yyyy] [name of copyright owner]
#
# CDDL HEADER END
#
 
#
# Copyright 2017 Alexander Pyhalov
# Copyright 2018 Michal Nowak
# Copyright (c) 2015, 2021, Oracle and/or its affiliates.
# Copyright 2021, Carsten Grzemba
# Copyright 2023 Niklas Poslovski
#
 
include ../../../make-rules/shared-macros.mk
 
COMPONENT_NAME =    thunderbird
COMPONENT_VERSION =    115.6.0
COMPONENT_SUMMARY = Mozilla Thunderbird Email Application
COMPONENT_PROJECT_URL =    https://www.thunderbird.net/
COMPONENT_SRC = $(COMPONENT_NAME)-$(COMPONENT_VERSION)
COMPONENT_ARCHIVE =     $(COMPONENT_SRC).source.tar.xz
COMPONENT_ARCHIVE_HASH= \
     sha256:3b1cf976b0d0f48255a603f8ffe8e24390ecd5bd285fc4d10fe48e1ba2513744
ifndef CANDIDATE_BUILD
MOZILLA_FTP =         https://ftp.mozilla.org/pub/$(COMPONENT_NAME)/releases/$(COMPONENT_VERSION)
else
MOZILLA_FTP =         https://ftp.mozilla.org/pub/$(COMPONENT_NAME)/candidates/$(COMPONENT_VERSION)-candidates/build$(CANDIDATE_BUILD)
endif
COMPONENT_ARCHIVE_URL =    $(MOZILLA_FTP)/source/$(COMPONENT_ARCHIVE)
COMPONENT_FMRI = mail/thunderbird
COMPONENT_CLASSIFICATION = Applications/Internet
COMPONENT_LICENSE = MPL v2.0
 
RUST_VERSION = 1.74.1
 
# TODO: use remote hashfile to verify
ALLOW_UNVERIFIED_DOWNLOADS=yes
export ALLOW_UNVERIFIED_DOWNLOADS
 
# There are a set of .xpi files (as given in the LANG_LIST definition
# below) that we need. We could download and unpack them individually, but
# they doesn't contain version in its file name and there is lot of them.
# Therefore we will download them and archive them in Userland cache using
# one file with version number.
 
LANG_LIST = af ar ast be bg br ca cak cs cy \
       da de dsb el en-CA en-GB en-US es-AR es-ES es-MX et \
       eu fi fr fy-NL ga-IE gd gl he hr hsb hu \
       hy-AM id is it ja ka kab kk ko lt lv ms \
       nb-NO nl nn-NO pa-IN pl pt-BR pt-PT rm ro ru sk sl \
       sq sr sv-SE th tr uk uz vi zh-CN zh-TW
 
LANG_FILES_LOCATION= \
        https://ftp.mozilla.org/pub/$(COMPONENT_NAME)/releases/$(COMPONENT_VERSION)/linux-x86_64/xpi
#        https://ftp.mozilla.org/pub/$(COMPONENT_NAME)/releases/$(COMPONENT_VERSION)$(ESR)/linux-x86_64/xpi
CLEAN_PATHS += $(COMPONENT_DIR)/xpi
 
CONFIGURE_DEFAULT_DIRS=no
 
include $(WS_MAKE_RULES)/common.mk
 
RUSTUP_HOME = $(BUILD_DIR)/.rust_up
CARGO_HOME  = $(BUILD_DIR)/.cargo
 
PATH = $(CARGO_HOME)/bin:$(PATH.gnu)
 
MOZCONFIG = $(SOURCE_DIR)/mozconfig
GNU_ARCH=               x86_64-unknown-illumos
 
ifdef DEBUG
# disable code optimization
CFLAGS =
CXXFLAGS =
 
MOZCONFIG_DEBUG =    $(MOZCONFIG)
MOZCONFIG_NON_DEBUG =    /dev/null
else
MOZCONFIG_DEBUG =    /dev/null
MOZCONFIG_NON_DEBUG =    $(MOZCONFIG)
endif
 
THUNDERBIRD_LIBDIR = /usr/lib/$(MACH64)
 
COMPONENT_PRE_CONFIGURE_ACTION += \
    rm -f  $(MOZCONFIG); \
    echo "ac_add_options MOZILLA_OFFICIAL=1" >> $(MOZCONFIG) ; \
    echo "ac_add_options PKG_CONFIG=/usr/bin/amd64/pkg-config" >> $(MOZCONFIG) ; \
    echo "ac_add_options CC_TYPE=$(CC_TYPE)" >> $(MOZCONFIG) ; \
    echo "ac_add_options CC=$(CC)" >> $(MOZCONFIG) ; \
    echo "ac_add_options CXX=$(CXX)" >> $(MOZCONFIG) ; \
    echo "ac_add_options --prefix=/usr" >> $(MOZCONFIG) ; \
    echo "ac_add_options --libdir=$(THUNDERBIRD_LIBDIR)" >> $(MOZCONFIG) ; \
    echo "ac_add_options --disable-crashreporter" >> $(MOZCONFIG) ; \
    echo "ac_add_options --disable-debug-symbols" >> $(MOZCONFIG_NON_DEBUG) ; \
    echo "ac_add_options --disable-install-strip" >> $(MOZCONFIG_DEBUG) ; \
    echo "ac_add_options --disable-optimize" >> $(MOZCONFIG_DEBUG) ; \
    echo "ac_add_options --disable-tests" >> $(MOZCONFIG) ; \
    echo "ac_add_options --disable-updater" >> $(MOZCONFIG) ; \
    echo "ac_add_options --enable-application=comm/mail" >> $(MOZCONFIG) ; \
    echo "ac_add_options --enable-debug" >> $(MOZCONFIG_DEBUG) ; \
    echo "ac_add_options --enable-jemalloc" >> $(MOZCONFIG) ; \
    echo "ac_add_options --enable-js-shell" >> $(MOZCONFIG) ; \
    echo "ac_add_options --enable-official-branding" >> $(MOZCONFIG) ; \
    echo "ac_add_options --enable-optimize" >> $(MOZCONFIG_NON_DEBUG) ; \
    echo "ac_add_options --enable-pulseaudio" >> $(MOZCONFIG) ; \
    echo "ac_add_options --enable-replace-malloc" >> $(MOZCONFIG) ; \
    echo "ac_add_options --enable-system-pixman" >> $(MOZCONFIG) ; \
    echo "ac_add_options --with-intl-api" >> $(MOZCONFIG) ; \
    echo "ac_add_options --with-system-libevent" >> $(MOZCONFIG) ; \
    echo "ac_add_options --with-system-zlib" >> $(MOZCONFIG) ; \
        echo "ac_add_options --host=$(GNU_ARCH)" >> $(MOZCONFIG) ; \
        echo "ac_add_options --target=$(GNU_ARCH)" >> $(MOZCONFIG) ; \
        echo "ac_add_options --without-wasm-sandboxed-libraries" >> $(MOZCONFIG) ; \
 
# xpcom uses DEF XP_SOLARIS
CXXFLAGS += -DXP_SOLARIS -Wno-invalid-offsetof -fpermissive 
 
# 28395728
LD_MAP_NOEXBSS.sparc=
 
# libmozgtk needs to link to gtk3 and others
LD_Z_IGNORE=
 
# missing symbols from gtk3 during Firefox start
LD_B_DIRECT=
 
LANG_FILES=$(addsuffix .xpi,$(LANG_LIST))
 
CLEAN_PATHS += $(LANG_FILES)
 
$(LANG_FILES): 
    $(FETCH) --file $@  --url $(LANG_FILES_LOCATION)/$@
 
download prep:: $(LANG_FILES)
 
CONFIGURE_OPTIONS = CC=$(CC) CXX=$(CXX)
 
CONFIGURE_ENV += RUSTUP_HOME=$(RUSTUP_HOME)
CONFIGURE_ENV += CARGO_HOME=$(CARGO_HOME)
COMPONENT_BUILD_ENV += RUSTUP_HOME=$(RUSTUP_HOME)
COMPONENT_BUILD_ENV += CARGO_HOME=$(CARGO_HOME)
 
COMPONENT_BUILD_ARGS += $(JOBS:%=-j%)
 
# because we touched old-configure.in and js/src/old-configure.in
COMPONENT_PRE_CONFIGURE_ACTION += ( \
        export RUSTUP_HOME=$(RUSTUP_HOME); \
        export CARGO_HOME=$(CARGO_HOME); \
        export RUSTUP_INIT_SKIP_PATH_CHECK=yes; \
        curl https://sh.rustup.rs -sSf | bash -s -- -y --no-modify-path; \
        source $(CARGO_HOME)/env; \
        rustup install $(RUST_VERSION); \
        rustup default $(RUST_VERSION)-x86_64-unknown-illumos; \
        rustup show; \
    PATH=$(GCC_BINDIR):$(PATH) cargo install --root=$(CARGO_HOME) --vers 0.24.3 cbindgen; \
    );
 
# COMPONENT_POST_BUILD_ACTION = \
#     (cd $(@D)/mail/installer ; $(ENV) $(COMPONENT_BUILD_ENV) \
#         $(GMAKE) $(COMPONENT_BUILD_ARGS) $(COMPONENT_BUILD_TARGETS))
 
COMPONENT_POST_INSTALL_ACTION  += \
    for file in `find $(PROTO_DIR)$(THUNDERBIRD_LIBDIR)/thunderbird -name "*.so"`; \
          do \
        /usr/bin/elfedit -e 'dyn:value -s  RUNPATH "$(GCC_LIBDIR):$(THUNDERBIRD_LIBDIR)/thunderbird:$$ORIGIN"' $$file ; \
        /usr/bin/elfedit -e 'dyn:value -s  RPATH   "$(GCC_LIBDIR):$(THUNDERBIRD_LIBDIR)/thunderbird:$$ORIGIN"' $$file ; \
    done ; \
    /usr/bin/elfedit -e 'dyn:value -s  RPATH   "$(GCC_LIBDIR):$(THUNDERBIRD_LIBDIR)/thunderbird:$$ORIGIN"' $(PROTO_DIR)$(THUNDERBIRD_LIBDIR)/thunderbird/plugin-container ; \
    
COMPONENT_POST_INSTALL_ACTION += \
        $(MKDIR) $(PROTO_DIR)$(THUNDERBIRD_LIBDIR)/thunderbird/distribution/extensions/; \
        list1='$(LANG_LIST)' ; for f in $$list1 ; do \
            $(CP) $$f.xpi \
                $(PROTO_DIR)$(THUNDERBIRD_LIBDIR)/thunderbird/distribution/extensions/langpack-$$f@thunderbird.mozilla.org.xpi ; \
        done ;
 
license: install
    @echo "regenerating license text"
    unzip -c $(PROTO_DIR)$(THUNDERBIRD_LIBDIR)/$(COMPONENT_NAME)/omni.ja chrome/messenger/content/messenger/license.html \
        | lynx  -stdin --dump -nolist > $(COMPONENT_NAME).license
 
SIGNED_LIST.amd64 = libsoftokn3.so libnssdbm3.so libfreebl3.so
SIGNED_LIST.sparc = libsoftokn3.so libnssdbm3.so libfreebl_64fpu_3.so libfreebl_64int_3.so
SIGNED_LIST = $(SIGNED_LIST.$(MACH))
 
COMPONENT_POST_INSTALL_ACTION += \
    slist='$(SIGNED_LIST)' ; for f in $$slist ; do \
        mcs -d $(PROT_DIR)$(THUNDERBIRD_LIBDIR)/$(COMPONENT_NAME)/$$f ; \
        LD_LIBRARY_PATH=$(PROTO_DIR)$(THUNDERBIRD_LIBDIR)/$(COMPONENT_NAME) $(BUILD_DIR_64)/dist/bin/shlibsign -v -i $(PROTO_DIR)$(THUNDERBIRD_LIBDIR)/$(COMPONENT_NAME)/$$f ; \
        done ;
 
COMPONENT_TEST_MASTER = $(COMPONENT_TEST_RESULTS_DIR)/results-$(MACH).master
 
COMPONENT_TEST_DIR =    $(@D)/js/src
COMPONENT_TEST_TARGETS=check-jit-test
COMPONENT_TEST_TRANSFORMS = \
    '-e "/^PASSED ALL/,/Failed:/p" ' \
    '-e "/^FAILURES:/,/Failed:/p" ' \
    '-e "/.*/d" '
 
# Build dependencies
PYTHON_REQUIRED_PACKAGES += runtime/python
REQUIRED_PACKAGES += database/sqlite-3
REQUIRED_PACKAGES += developer/build/autoconf-213
REQUIRED_PACKAGES += developer/clang-17
REQUIRED_PACKAGES += gnome/config/gconf
REQUIRED_PACKAGES += library/audio/pulseaudio
REQUIRED_PACKAGES += library/http-parser
REQUIRED_PACKAGES += library/python/psutil
REQUIRED_PACKAGES += system/header/header-audio
 
# Auto-generated dependencies
REQUIRED_PACKAGES += $(GCC_RUNTIME_PKG)
REQUIRED_PACKAGES += $(GXX_RUNTIME_PKG)
REQUIRED_PACKAGES += library/c++/harfbuzz
REQUIRED_PACKAGES += library/desktop/atk
REQUIRED_PACKAGES += library/desktop/cairo
REQUIRED_PACKAGES += library/desktop/gdk-pixbuf
REQUIRED_PACKAGES += library/desktop/gtk3
REQUIRED_PACKAGES += library/desktop/pango
REQUIRED_PACKAGES += library/glib2
REQUIRED_PACKAGES += library/graphics/pixman
REQUIRED_PACKAGES += library/libevent2
REQUIRED_PACKAGES += library/zlib
REQUIRED_PACKAGES += system/library
REQUIRED_PACKAGES += system/library/fontconfig
REQUIRED_PACKAGES += system/library/freetype-2
REQUIRED_PACKAGES += system/library/libdbus
REQUIRED_PACKAGES += system/library/libdbus-glib
REQUIRED_PACKAGES += system/library/math
REQUIRED_PACKAGES += x11/library/libx11
REQUIRED_PACKAGES += x11/library/libxcb
REQUIRED_PACKAGES += x11/library/libxext
REQUIRED_PACKAGES += x11/library/libxrandr