# #
###############################################################################
-AC_PREREQ([2.64])
+AC_PREREQ([2.69])
AC_INIT([pakfire],
- [0.9.27],
+ [0.9.29],
[info@ipfire.org],
[pakfire],
- [http://git.ipfire.org/?p=pakfire.git;a=summary])
+ [https://git.ipfire.org/?p=pakfire.git;a=summary])
AC_CONFIG_MACRO_DIR([m4])
AC_CONFIG_HEADERS([config.h])
AC_DEFINE(ENABLE_DEBUG, [1], [Debug messages.])
])
+# Online Tests
+AC_ARG_ENABLE([online-tests],
+ AS_HELP_STRING(
+ [--enable-online-tests],
+ [enable tests that require internet access @<:@default=disabled@:>@]
+ ), [], [enable_online_tests=no]
+)
+AS_IF([test "x$enable_online_tests" = "xyes"], [
+ AC_DEFINE(ENABLE_ONLINE_TESTS, [1], [Online Tests])
+])
+
+# Man Pages
+
+have_man_pages=no
+AC_ARG_ENABLE(man_pages, AS_HELP_STRING([--disable-man-pages],
+ [do not install man pages]))
+AS_IF([test "x$enable_man_pages" != xno], [have_man_pages=yes])
+AM_CONDITIONAL(ENABLE_MAN_PAGES, [test "x$have_man_pages" = "xyes"])
+
+AC_PATH_PROG([XSLTPROC], [xsltproc])
+
+AC_CHECK_PROGS(ASCIIDOC, [asciidoc])
+if test "${have_man_pages}" = "yes" && test -z "${ASCIIDOC}"; then
+ AC_MSG_ERROR([Required program 'asciidoc' not found])
+fi
+
# pkg-config
PKG_PROG_PKG_CONFIG
# This makes sure pkg.m4 is available.
# C Compiler
AC_PROG_CC
-AC_PROG_CC_C99
-AC_PROG_CC_C_O
-AC_PROG_GCC_TRADITIONAL
-AC_OPENMP
CC_CHECK_FLAGS_APPEND([with_cflags], [CFLAGS], [\
- -pipe \
+ -std=gnu11 \
-Wall \
-Wextra \
- -Wno-inline \
- -Wundef \
- "-Wformat=2 -Wformat-security -Wformat-nonliteral" \
+ -Warray-bounds=2 \
+ -Wdate-time \
+ -Wendif-labels \
+ -Werror=format=2 \
+ -Werror=format-signedness \
+ -Werror=implicit-function-declaration \
+ -Werror=implicit-int \
+ -Werror=incompatible-pointer-types \
+ -Werror=int-conversion \
+ -Werror=missing-declarations \
+ -Werror=missing-prototypes \
+ -Werror=overflow \
+ -Werror=override-init \
+ -Werror=return-type \
+ -Werror=shift-count-overflow \
+ -Werror=shift-overflow=2 \
+ -Werror=strict-flex-arrays \
+ -Werror=undef \
+ -Wfloat-equal \
+ -Wimplicit-fallthrough=5 \
+ -Winit-self \
+ -Wlogical-op \
+ -Wmissing-include-dirs \
+ -Wmissing-noreturn \
+ -Wnested-externs \
+ -Wold-style-definition \
+ -Wpointer-arith \
+ -Wredundant-decls \
+ -Wshadow \
+ -Wstrict-aliasing=2 \
+ -Wstrict-prototypes \
+ -Wsuggest-attribute=noreturn \
+ -Wunused-function \
+ -Wwrite-strings \
+ -Wzero-length-bounds \
-Wno-unused-parameter \
- -Wno-unused-result \
- -fno-strict-aliasing \
- -ffunction-sections \
- -fdata-sections \
- -fstack-protector-all \
- --param=ssp-buffer-size=4])
-AC_SUBST([OUR_CFLAGS], $with_cflags)
+ -Wno-missing-field-initializers \
+ -fdiagnostics-show-option \
+ -fno-common \
+])
-AS_CASE([$CFLAGS], [*-O[[12345g\ ]]*],
- [CC_CHECK_FLAGS_APPEND([with_cppflags], [CPPFLAGS], [\
- -Wp,-D_FORTIFY_SOURCE=2])],
- [AC_MSG_RESULT([skipping -D_FORTIFY_SOURCE, optimization not enabled])])
-AC_SUBST([OUR_CPPFLAGS], $with_cppflags)
+# Enable -fanalyzer if requested
+AC_ARG_ENABLE([analyzer],
+ AS_HELP_STRING([--enable-analyzer], [enable static analyzer (-fanalyzer) @<:@default=disabled@:>@]),
+ [], [enable_analyzer=no])
+AS_IF([test "x$enable_analyzer" = "xyes"],
+ CC_CHECK_FLAGS_APPEND([with_cflags], [CFLAGS], [-fanalyzer])
+)
+
+# Enable -fno-semantic-interposition (if available)
+CC_CHECK_FLAGS_APPEND([with_cflags], [CFLAGS], [-fno-semantic-interposition])
+CC_CHECK_FLAGS_APPEND([with_ldflags], [LDFLAGS], [-fno-semantic-interposition])
-CC_CHECK_FLAGS_APPEND([with_ldflags], [LDFLAGS], [\
- -Wl,--as-needed \
- -Wl,--no-undefined \
- -Wl,--gc-sections \
- -Wl,-z,relro \
- -Wl,-z,now])
+AC_SUBST([OUR_CPPFLAGS], $with_cppflags)
+AC_SUBST([OUR_CFLAGS], $with_cflags)
AC_SUBST([OUR_LDFLAGS], $with_ldflags)
+# C Types
+AC_TYPE_INT64_T
+AC_TYPE_INTMAX_T
+AC_TYPE_INTPTR_T
+AC_TYPE_MODE_T
+AC_TYPE_OFF_T
+AC_TYPE_PID_T
+AC_TYPE_SIZE_T
+AC_TYPE_SSIZE_T
+AC_TYPE_UID_T
+AC_TYPE_UINT64_T
+
# Bison
AC_PROG_YACC
exit 1
fi
-# Python
-AM_PATH_PYTHON([3.6])
-
AC_C_CONST
AC_CHECK_LIB([m], [round])
AC_CHECK_HEADERS([ \
- ctypes.h \
+ ctype.h \
+ dirent.h \
+ errno.h \
fcntl.h \
+ fnmatch.h \
+ fts.h \
+ ftw.h \
+ glob.h \
+ grp.h \
+ libgen.h \
+ libintl.h \
+ linux/bpf.h \
+ linux/capability.h \
+ linux/limits.h \
+ linux/magic.h \
+ linux/sched.h \
math.h \
+ pwd.h \
regex.h \
sched.h \
+ signal.h \
stdarg.h \
+ stdint.h \
+ stdio.h \
stdlib.h \
string.h \
syslog.h \
+ sys/capability.h \
sys/epoll.h \
+ sys/file.h \
+ sys/ioctl.h \
+ sys/mount.h \
sys/personality.h \
+ sys/prctl.h \
+ sys/random.h \
+ sys/resource.h \
+ sys/sendfile.h \
sys/stat.h \
- unistd.h
+ sys/sysmacros.h \
+ sys/types.h \
+ sys/user.h \
+ sys/utsname.h \
+ sys/vfs.h \
+ sys/wait.h \
+ time.h \
+ unistd.h \
+ utime.h
])
AC_CHECK_FUNCS([ \
- assert \
+ asprintf \
+ bpf \
epoll_ctl \
epoll_create1 \
epoll_wait \
+ flock \
fnctl \
+ getpid \
+ glob \
+ nftw \
+ openlog \
personality \
+ prctl \
+ remove \
secure_getenv \
+ sendfile \
+ snprintf \
strcmp \
strdup \
+ syslog \
qsort \
- unshare
+ uname \
+ unlink \
+ vasprintf \
+ vsnprintf
])
-save_LIBS="$LIBS"
-
-# libdl
-LIBS=
-AC_SEARCH_LIBS([dlsym], [dl], [], [AC_MSG_ERROR([*** Dynamic linking loader library not found])])
-DL_LIBS="$LIBS"
-AC_SUBST(DL_LIBS)
+# Python Stuff
+AM_PATH_PYTHON([3.6])
-LIBS="$save_LIBS"
+AX_PYTHON_MODULE([kerberos], [fatal])
+AX_PYTHON_MODULE([setproctitle], [fatal])
+AX_PYTHON_MODULE([systemd], [fatal])
+AX_PYTHON_MODULE([tornado], [fatal])
-PKG_CHECK_MODULES([ARCHIVE], [libarchive >= 3.3.3])
+# Libraries we depend on
+PKG_CHECK_MODULES([ARCHIVE], [libarchive >= 3.4.0])
+PKG_CHECK_MODULES([BPF], [libbpf])
+PKG_CHECK_MODULES([CAP], [libcap])
PKG_CHECK_MODULES([CURL], [libcurl])
+PKG_CHECK_MODULES([ELF], [libelf])
PKG_CHECK_MODULES([PYTHON_DEVEL], [python-${PYTHON_VERSION}-embed],
[], [PKG_CHECK_MODULES([PYTHON_DEVEL], [python-${PYTHON_VERSION}])])
-PKG_CHECK_MODULES([JSON_C], [json-c])
+PKG_CHECK_MODULES([JSON_C], [json-c >= 0.15])
+PKG_CHECK_MODULES([KRB5], [krb5])
PKG_CHECK_MODULES([LZMA], [liblzma])
+PKG_CHECK_MODULES([MAGIC], [libmagic])
+PKG_CHECK_MODULES([NL3], [libnl-3.0])
+PKG_CHECK_MODULES([NL3_ROUTE], [libnl-route-3.0])
PKG_CHECK_MODULES([OPENSSL], [openssl >= 1.1.1])
PKG_CHECK_MODULES([PCRE2], [libpcre2-8])
-PKG_CHECK_MODULES([SOLV], [libsolv])
+PKG_CHECK_MODULES([SECCOMP], [libseccomp])
+PKG_CHECK_MODULES([SOLV], [libsolv >= 0.7.5])
PKG_CHECK_MODULES([SQLITE3], [sqlite3])
+PKG_CHECK_MODULES([SYSTEMD], [libsystemd],
+ [AC_DEFINE([HAVE_SYSTEMD], [1], [Use systemd])])
PKG_CHECK_MODULES([UUID], [uuid])
PKG_CHECK_MODULES([ZSTD], [libzstd])
-AM_PATH_GPGME([1.6.0], [], [AC_MSG_ERROR([*** GPGME not found])])
+save_LIBS="$LIBS"
+
+# subid
+#LIBS=
+#AC_SEARCH_LIBS([subid_init], [subid],
+# [AC_DEFINE([HAVE_SUBID], [], [subid is present])],
+# [AC_MSG_WARN([*** subid library not found])])
+#SUBID_LIBS="$LIBS"
+#AC_SUBST(SUBID_LIBS)
+
+LIBS="$save_LIBS"
AC_ARG_WITH([systemdsystemunitdir],
AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [Directory for systemd service files]),
AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir])
AM_CONDITIONAL(HAVE_SYSTEMD, [test -n "$with_systemdsystemunitdir"])
-AC_DEFINE_UNQUOTED([PAKFIRE_CONFIG_PATH], ["${sysconfdir}/${PACKAGE_NAME}"],
+AC_DEFINE_UNQUOTED([PAKFIRE_CONFIG_DIR], ["${sysconfdir}/${PACKAGE_NAME}"],
[The path where Pakfire stores configuration files])
-AC_DEFINE_UNQUOTED([PAKFIRE_CACHE_PATH], ["/var/cache/${PACKAGE_NAME}"],
- [The path where Pakfire stores temporary data])
+AC_DEFINE_UNQUOTED([PAKFIRE_CACHE_DIR], ["/var/cache/${PACKAGE_NAME}"],
+ [The path where Pakfire caches downloaded data])
AC_DEFINE_UNQUOTED([PAKFIRE_PRIVATE_DIR], ["/var/lib/${PACKAGE_NAME}"],
[The path where Pakfire stores its private data])
AC_DEFINE_UNQUOTED([PAKFIRE_SCRIPTS_DIR], ["${PREFIX}/lib/${PACKAGE_NAME}"],
[The path where Pakfire stores its scripts])
+AC_DEFINE_UNQUOTED([PAKFIRE_TMP_DIR], ["/var/tmp"],
+ [The path where Pakfire stores temporary data])
AC_CONFIG_FILES([
Makefile
$PACKAGE_NAME $VERSION
Debug: ${enable_debug}
+ Online Tests: ${enable_online_tests}
- CFLAGS: ${OUR_CFLAGS} ${CFLAGS}
CPPFLAGS: ${OUR_CPPFLAGS} ${CPPFLAGS}
+ CFLAGS: ${OUR_CFLAGS} ${CFLAGS}
LDFLAGS: ${OUR_LDFLAGS} ${LDFLAGS}
PYTHON_CFLAGS: ${PYTHON_DEVEL_CFLAGS}
PYTHON_LIBS: ${PYTHON_DEVEL_LIBS}