hc
2024-08-19 eb6b9ee90f50f13c5abb885ce483802d6262f2b5
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
################################################################################
#
# exim
#
################################################################################
 
EXIM_VERSION = 4.95
EXIM_SOURCE = exim-$(EXIM_VERSION).tar.xz
EXIM_SITE = https://ftp.exim.org/pub/exim/exim4
EXIM_LICENSE = GPL-2.0+
EXIM_LICENSE_FILES = LICENCE
EXIM_CPE_ID_VENDOR = exim
EXIM_SELINUX_MODULES = exim mta
EXIM_DEPENDENCIES = host-berkeleydb host-pcre pcre berkeleydb host-pkgconf
 
# Modify a variable value. It must already exist in the file, either
# commented or not.
define exim-config-change # variable-name, variable-value
   $(SED) 's,^[#[:space:]]*$1[[:space:]]*=.*$$,$1=$2,' \
       $(@D)/Local/Makefile
endef
 
# Comment-out a variable. Has no effect if it does not exits.
define exim-config-unset # variable-name
   $(SED) 's,^\([[:space:]]*$1[[:space:]]*=.*$$\),# \1,' \
       $(@D)/Local/Makefile
endef
 
# Add a variable definition. It must not already exist in the file,
# otherwise it would be defined twice with potentially different values.
define exim-config-add # variable-name, variable-value
   echo "$1=$2" >>$(@D)/Local/Makefile
endef
 
define EXIM_USE_CUSTOM_CONFIG_FILE
   $(INSTALL) -m 0644 $(BR2_PACKAGE_EXIM_CUSTOM_CONFIG_FILE) \
       $(@D)/Local/Makefile
endef
 
define EXIM_USE_DEFAULT_CONFIG_FILE
   $(INSTALL) -m 0644 $(@D)/src/EDITME $(@D)/Local/Makefile
   $(call exim-config-change,BIN_DIRECTORY,/usr/sbin)
   $(call exim-config-change,CONFIGURE_FILE,/etc/exim/configure)
   $(call exim-config-change,LOG_FILE_PATH,/var/log/exim/exim_%slog)
   $(call exim-config-change,PID_FILE_PATH,/var/run/exim/exim.pid)
   $(call exim-config-change,EXIM_USER,ref:exim)
   $(call exim-config-change,EXIM_GROUP,mail)
   $(call exim-config-change,TRANSPORT_LMTP,yes)
   $(call exim-config-change,PCRE_LIBS,-lpcre)
   $(call exim-config-change,PCRE_CONFIG,no)
   $(call exim-config-change,HAVE_ICONV,no)
   $(call exim-config-unset,EXIM_MONITOR)
   $(call exim-config-change,AUTH_PLAINTEXT,yes)
   $(call exim-config-change,AUTH_CRAM_MD5,yes)
   $(call exim-config-unset,SUPPORT_DANE)
endef
 
ifeq ($(BR2_PACKAGE_DOVECOT),y)
EXIM_DEPENDENCIES += dovecot
define EXIM_USE_DEFAULT_CONFIG_FILE_DOVECOT
   $(call exim-config-change,AUTH_DOVECOT,yes)
endef
endif
 
ifeq ($(BR2_PACKAGE_CLAMAV),y)
EXIM_DEPENDENCIES += clamav
define EXIM_USE_DEFAULT_CONFIG_FILE_CLAMAV
   $(call exim-config-change,WITH_CONTENT_SCAN,yes)
endef
endif
 
ifeq ($(BR2_PACKAGE_OPENSSL),y)
EXIM_DEPENDENCIES += host-openssl openssl
define EXIM_USE_DEFAULT_CONFIG_FILE_OPENSSL
   $(call exim-config-change,USE_OPENSSL,yes)
   $(call exim-config-change,USE_OPENSSL_PC,openssl)
endef
else
define EXIM_USE_DEFAULT_CONFIG_FILE_OPENSSL
   $(call exim-config-change,DISABLE_TLS,yes)
endef
endif
 
# musl does not provide struct ip_options nor struct ip_opts (but it is
# available with both glibc and uClibc)
ifeq ($(BR2_TOOLCHAIN_USES_MUSL),y)
define EXIM_FIX_IP_OPTIONS_FOR_MUSL
   $(SED) 's/#define GLIBC_IP_OPTIONS/#define DARWIN_IP_OPTIONS/' \
       $(@D)/OS/os.h-Linux
endef
endif
 
define EXIM_CONFIGURE_TOOLCHAIN
   $(call exim-config-add,CC,$(TARGET_CC))
   $(call exim-config-add,CFLAGS,$(TARGET_CFLAGS))
   $(call exim-config-add,AR,$(TARGET_AR) cq)
   $(call exim-config-add,RANLIB,$(TARGET_RANLIB))
   $(call exim-config-add,HOSTCC,$(HOSTCC))
   $(call exim-config-add,HOSTCFLAGS,$(HOSTCFLAGS))
   $(EXIM_FIX_IP_OPTIONS_FOR_MUSL)
endef
 
ifneq ($(call qstrip,$(BR2_PACKAGE_EXIM_CUSTOM_CONFIG_FILE)),)
define EXIM_CONFIGURE_CMDS
   $(EXIM_USE_CUSTOM_CONFIG_FILE)
   $(EXIM_CONFIGURE_TOOLCHAIN)
endef
else # CUSTOM_CONFIG
define EXIM_CONFIGURE_CMDS
   $(EXIM_USE_DEFAULT_CONFIG_FILE)
   $(EXIM_USE_DEFAULT_CONFIG_FILE_DOVECOT)
   $(EXIM_USE_DEFAULT_CONFIG_FILE_CLAMAV)
   $(EXIM_USE_DEFAULT_CONFIG_FILE_OPENSSL)
   $(EXIM_CONFIGURE_TOOLCHAIN)
endef
endif # CUSTOM_CONFIG
 
# exim needs a bit of love to build statically
ifeq ($(BR2_STATIC_LIBS),y)
EXIM_STATIC_FLAGS = LFLAGS="-pthread --static"
endif
 
# We need the host version of macro_predef during the build, before
# building it we need to prepare the makefile.
define EXIM_BUILD_CMDS
   $(TARGET_MAKE_ENV) build=br $(MAKE) -C $(@D) makefile
   $(HOST_MAKE_ENV) $(MAKE) -C $(@D)/build-br macro_predef \
       CC="$(HOSTCC)" \
       LNCC="$(HOSTCC)" \
       CFLAGS="-std=c99 $(HOST_CFLAGS)" \
       LFLAGS="-fPIC $(HOST_LDFLAGS)"
   $(TARGET_MAKE_ENV) build=br $(MAKE) -C $(@D) $(EXIM_STATIC_FLAGS) \
       CFLAGS="-std=c99 $(TARGET_CFLAGS)"
endef
 
# Need to replicate the LFLAGS in install, as exim still wants to build
# something when installing...
define EXIM_INSTALL_TARGET_CMDS
   DESTDIR=$(TARGET_DIR) INSTALL_ARG="-no_chown -no_symlink" build=br \
     $(MAKE) -C $(@D) $(EXIM_STATIC_FLAGS) \
       CFLAGS="-std=c99 $(TARGET_CFLAGS)" \
       install
   chmod u+s $(TARGET_DIR)/usr/sbin/exim
endef
 
define EXIM_USERS
   exim 88 mail 8 * - - - exim
endef
 
define EXIM_INSTALL_INIT_SYSV
   $(INSTALL) -D -m 755 package/exim/S86exim \
       $(TARGET_DIR)/etc/init.d/S86exim
endef
 
define EXIM_INSTALL_INIT_SYSTEMD
   $(INSTALL) -D -m 644 package/exim/exim.service \
       $(TARGET_DIR)/usr/lib/systemd/system/exim.service
endef
 
$(eval $(generic-package))