* Exim - an Internet mail transport agent *
*************************************************/
-/* Copyright (c) University of Cambridge 1995 - 2017 */
+/* Copyright (c) The Exim Maintainers 2022 */
+/* Copyright (c) University of Cambridge 1995 - 2018 */
/* See the file NOTICE for conditions of use and distribution. */
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
+#include <sys/time.h>
+#include <poll.h>
#include <pwd.h>
#include <grp.h>
char *data;
} save_item;
-static const char *db_opts[] = { "", "USE_DB", "USE_GDBM", "USE_TDB" };
+static const char *db_opts[] = { "", "USE_DB", "USE_GDBM", "USE_TDB", "USE_NDBM" };
static int have_ipv6 = 0;
static int have_iconv = 0;
unsigned int test_uint_t = 0;
#endif
long test_long_t = 0;
+long long test_longlong_t = 0;
int test_int_t = 0;
FILE *base;
FILE *new;
fprintf(new, "#ifndef OFF_T_FMT\n");
if (sizeof(test_off_t) > sizeof(test_long_t))
- {
fprintf(new, "# define OFF_T_FMT \"%%lld\"\n");
- fprintf(new, "# define LONGLONG_T long long int\n");
- }
else
- {
fprintf(new, "# define OFF_T_FMT \"%%ld\"\n");
+fprintf(new, "#endif\n\n");
+
+fprintf(new, "#ifndef LONGLONG_T\n");
+if (sizeof(test_longlong_t) > sizeof(test_long_t))
+ fprintf(new, "# define LONGLONG_T long long int\n");
+else
fprintf(new, "# define LONGLONG_T long int\n");
- }
fprintf(new, "#endif\n\n");
/* Now do the same thing for time_t variables. If the length is greater than
/* Now search the makefile for certain settings */
-base = fopen("Makefile", "rb");
-if (base == NULL)
+if (!(base = fopen("Makefile", "rb")))
{
printf("*** Buildconfig: failed to open Makefile\n");
(void)fclose(new);
encountered. */
for (i = 1; i < sizeof(db_opts)/sizeof(char *); i++)
- {
if (strcmp(name, db_opts[i]) == 0)
{
if (use_which_db == i)
fprintf(new, "/* %s not set */\n", name);
break;
}
- }
if (i < sizeof(db_opts)/sizeof(char *)) continue;
/* EXIM_USER is a special case. We look in the environment for EXIM_USER or
fprintf(new, "#define FIXED_NEVER_USERS %d", j);
for (i = 0; i < j; i++) fprintf(new, ", %d", (unsigned int)vector[i]);
fprintf(new, "\n");
+ free(vector);
}
continue;
}
- /* WITH_CONTENT_SCAN is another special case: it must be set if it or
- EXPERIMENTAL_DCC is set. */
-
- if (strcmp(name, "WITH_CONTENT_SCAN") == 0)
- {
- char *wcs = getenv("WITH_CONTENT_SCAN");
- char *dcc = getenv("EXPERIMENTAL_DCC");
- fprintf(new, wcs || dcc
- ? "#define WITH_CONTENT_SCAN yes\n"
- : "/* WITH_CONTENT_SCAN not set */\n");
- continue;
- }
-
- /* DISABLE_DKIM is special; must be forced if no SUPPORT_TLS */
+ /* DISABLE_DKIM is special; must be forced if DISABLE_TLS */
if (strcmp(name, "DISABLE_DKIM") == 0)
{
char *d_dkim = getenv("DISABLE_DKIM");
- char *tls = getenv("SUPPORT_TLS");
+ char *notls = getenv("DISABLE_TLS");
if (d_dkim)
fprintf(new, "#define DISABLE_DKIM yes\n");
- else if (!tls)
+ else if (notls)
fprintf(new, "#define DISABLE_DKIM yes /* forced by lack of TLS */\n");
else
fprintf(new, "/* DISABLE_DKIM not set */\n");
defined. */
if (have_auth)
- {
if (!support_crypteq) fprintf(new, "/* Force SUPPORT_CRYPTEQ for AUTH */\n"
"#define SUPPORT_CRYPTEQ\n");
+
+/* Check poll() for timer functionality.
+Some OS' have released with it broken. */
+
+ {
+ struct timeval before, after;
+ size_t us;
+
+ gettimeofday(&before, NULL);
+ (void) poll(NULL, 0, 500);
+ gettimeofday(&after, NULL);
+
+ us = (after.tv_sec - before.tv_sec) * 1000000 +
+ (after.tv_usec - before.tv_usec);
+
+ if (us < 400000)
+ fprintf(new, "#define NO_POLL_H\n");
}
/* End off */