################################################################################ # # exim # ################################################################################ EXIM_VERSION = 4.97.1 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-pcre2 pcre2 berkeleydb host-pkgconf # 0006-Fix-regex-n-use-after-free.-Bug-2915.patch EXIM_IGNORE_CVES += CVE-2022-3559 # built without dmarc support EXIM_IGNORE_CVES += CVE-2022-3620 # 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 exist. 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,-lpcre2-8) $(call exim-config-change,PCRE2_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)) $(call exim-config-add,EXTRALIBS,$(EXIM_EXTRALIBS)) $(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 ifeq ($(BR2_PACKAGE_LIBEXECINFO),y) EXIM_DEPENDENCIES += libexecinfo EXIM_EXTRALIBS += -lexecinfo else ifeq ($(BR2_TOOLCHAIN_USES_GLIBC),) EXIM_CFLAGS = -DNO_EXECINFO 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) $(EXIM_CFLAGS)" exim endef # Need to replicate the LFLAGS in install, as exim still wants to build # something when installing... define EXIM_INSTALL_TARGET_CMDS cd $(@D)/build-br; \ DESTDIR=$(TARGET_DIR) build=br \ ../scripts/exim_install -no_chown -no_symlink exim 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))