7cceb35219
Teach rpm-ostree to interpret rebases where the remote component is a path to a local repo, e.g.: rpm-ostree rebase /mnt/ostree/repo:my/target/ref Essentially, the local remote in this case is considered "ephemeral". It's kind of the equivalent of, on traditional systems: dnf install --repofrompath repo,/path/to/repodata ... The use case for this is in OpenShift v4, in which upgrades are done from containers containing the OSTree commit. There, we want to point RPM-OSTree directly at the repo in the mounted container and rebase to the checksum. For now, the option is marked experimental. One major reason for this is that the way we pass the repo differs on RHEL7 vs other platforms. (See comment block in `rpmostree-dbus-helpers.c` for details). Related: https://github.com/openshift/machine-config-operator/issues/314 Co-authored-by: Colin Walters <walters@verbum.org> Closes: #1732 Approved by: cgwalters
316 lines
12 KiB
Plaintext
316 lines
12 KiB
Plaintext
AC_PREREQ([2.63])
|
|
dnl To do a release, increment this number, commit, then submit it as a PR
|
|
dnl to merge via homu. After that, do `git pull origin && git reset --hard origin/master`.
|
|
dnl Then draft release notes highlighting changes and generate the shortlog using
|
|
dnl <https://github.com/cgwalters/homegit/blob/master/bin/git-shortlog-with-prs>.
|
|
dnl Then use <https://github.com/cgwalters/git-evtag> to create a signed tag with the
|
|
dnl release notes as its content.
|
|
dnl Then git push origin v201X.XX.
|
|
dnl Then create the xz tarball from `make -f Makefile.dist-packaging dist-snapshot`.
|
|
dnl Then create a GitHub release for the new release tag and attach the tarball.
|
|
m4_define([year_version], [2019])
|
|
m4_define([release_version], [1])
|
|
m4_define([package_version], [year_version.release_version])
|
|
AC_INIT([rpm-ostree], [package_version], [atomic-devel@projectatomic.io])
|
|
AC_CONFIG_HEADER([config.h])
|
|
AC_CONFIG_MACRO_DIR([buildutil])
|
|
AC_CONFIG_AUX_DIR([build-aux])
|
|
dnl Versioning information
|
|
AC_SUBST([YEAR_VERSION], [year_version])
|
|
AC_SUBST([RELEASE_VERSION], [release_version])
|
|
AC_SUBST([PACKAGE_VERSION], [package_version])
|
|
|
|
AM_INIT_AUTOMAKE([1.11 -Wno-portability foreign no-define tar-ustar no-dist-gzip dist-xz subdir-objects])
|
|
AM_MAINTAINER_MODE([enable])
|
|
AM_SILENT_RULES([yes])
|
|
AC_USE_SYSTEM_EXTENSIONS
|
|
AC_SYS_LARGEFILE
|
|
|
|
AC_PROG_CC
|
|
dnl we don't today use C++ in rpm-ostree, only in libdnf,
|
|
dnl but this has the side effect of setting CXXFLAGS with -g
|
|
dnl if not set, which we definitely want; cmake doesn't do that.
|
|
AC_PROG_CXX
|
|
AM_PROG_CC_C_O
|
|
|
|
# dbus system dir
|
|
AC_MSG_CHECKING(for dbus system services directory)
|
|
if test "$enable_prefix_only" = "yes"; then
|
|
dbusservicedir='${datadir}/dbus-1/system-services'
|
|
else
|
|
dbusservicedir='${datadir}/dbus-1/system-services'
|
|
if test "$dbusservicedir" = ""; then
|
|
AC_MSG_ERROR(Couldn't find dbus services directory. Try installing dbus-devel)
|
|
fi
|
|
fi
|
|
AC_SUBST([dbusservicedir], [$dbusservicedir])
|
|
AC_MSG_RESULT(dbusservicedir)
|
|
|
|
dnl Keep this in sync with the version in ostree
|
|
AS_IF([echo "$CFLAGS" | grep -q -E -e '-Werror($| )'], [], [
|
|
CC_CHECK_FLAGS_APPEND([WARN_CFLAGS], [CFLAGS], [\
|
|
-pipe \
|
|
-Wall \
|
|
-Werror=empty-body \
|
|
-Werror=strict-prototypes \
|
|
-Werror=missing-prototypes \
|
|
-Werror=implicit-function-declaration \
|
|
"-Werror=format=2 -Werror=format-security -Werror=format-nonliteral" \
|
|
-Werror=pointer-arith -Werror=init-self \
|
|
-Werror=missing-declarations \
|
|
-Werror=return-type \
|
|
-Werror=switch \
|
|
-Werror=overflow \
|
|
-Werror=int-conversion \
|
|
-Werror=parenthesis \
|
|
-Werror=undef \
|
|
-Werror=incompatible-pointer-types \
|
|
-Werror=misleading-indentation \
|
|
-Werror=missing-include-dirs -Werror=aggregate-return \
|
|
-Wstrict-aliasing=2 \
|
|
-Werror=unused-result \
|
|
])])
|
|
AC_SUBST(WARN_CFLAGS)
|
|
|
|
AC_MSG_CHECKING([for -fsanitize=address in CFLAGS])
|
|
if echo $CFLAGS | grep -q -e -fsanitize=address; then
|
|
AC_MSG_RESULT([yes])
|
|
using_asan=yes
|
|
else
|
|
AC_MSG_RESULT([no])
|
|
fi
|
|
AM_CONDITIONAL(BUILDOPT_ASAN, [test x$using_asan = xyes])
|
|
|
|
# Initialize libtool
|
|
LT_PREREQ([2.2.4])
|
|
LT_INIT([disable-static])
|
|
|
|
RPM_OSTREE_FEATURES=""
|
|
AC_SUBST([RPM_OSTREE_FEATURES])
|
|
|
|
PKG_PROG_PKG_CONFIG
|
|
|
|
save_LIBS="$LIBS"
|
|
LIBS=
|
|
AC_SEARCH_LIBS([cap_init], [cap], [], [AC_MSG_ERROR([*** POSIX caps library not found])])
|
|
CAP_LIBS="$LIBS"
|
|
AC_SUBST(CAP_LIBS)
|
|
LIBS="$save_LIBS"
|
|
|
|
# Remember to update AM_CPPFLAGS in Makefile.am when bumping GIO req.
|
|
PKG_CHECK_MODULES(PKGDEP_GIO_UNIX, [gio-unix-2.0])
|
|
PKG_CHECK_MODULES(PKGDEP_RPMOSTREE, [gio-unix-2.0 >= 2.50.0 json-glib-1.0
|
|
ostree-1 >= 2018.9
|
|
libsystemd
|
|
polkit-gobject-1
|
|
rpm librepo libsolv
|
|
libarchive])
|
|
|
|
dnl -ldl: https://github.com/ostreedev/ostree/commit/1f832597fc83fda6cb8daf48c4495a9e1590774c
|
|
dnl -ldl: https://github.com/rust-lang/rust/issues/47714
|
|
dnl -lm: needed for rand crate in debug mode
|
|
dnl See also rpmostree_core_linkage_for_rust()
|
|
PKGDEP_RPMOSTREE_LIBS="$PKGDEP_RPMOSTREE_LIBS -Wl,--push-state,--no-as-needed,-ldl,-lm,--pop-state"
|
|
|
|
# We just keep rust-specific deps separate for better tracking
|
|
# The `libcurl` one is redundant since we already require it for libostree. `openssl`
|
|
# is required by libcurl anyway, but we need to link to it directly too because
|
|
# curl-rust uses it.
|
|
PKG_CHECK_MODULES(PKGDEP_RPMOSTREE_RS, [libcurl openssl])
|
|
|
|
dnl bundled libdnf
|
|
PKGDEP_RPMOSTREE_CFLAGS="-I $(pwd)/libdnf -I $(pwd)/libdnf-build $PKGDEP_RPMOSTREE_CFLAGS"
|
|
PKGDEP_RPMOSTREE_LIBS="-L$(pwd)/libdnf-build/libdnf -ldnf $PKGDEP_RPMOSTREE_LIBS"
|
|
|
|
dnl This is the current version in Fedora 25.
|
|
AS_IF([pkg-config --atleast-version=4.13.0.1 rpm], [
|
|
have_modern_rpm=true
|
|
AC_DEFINE([BUILDOPT_HAVE_RPMSQ_SET_INTERRUPT_SAFETY], 1, [Set to 1 if we have interrupt safety API])
|
|
AC_DEFINE([BUILDOPT_HAVE_RPM_FILETRIGGERS], 1, [Set to 1 if we have file triggers])
|
|
AC_DEFINE([BUILDOPT_HAVE_RPMFILES], 1, [Set to 1 if we have rpmfiles API])
|
|
], [have_modern_rpm=false])
|
|
dnl See usage
|
|
AS_IF([pkg-config --atleast-version=4.14.2 rpm], [
|
|
AC_DEFINE([BUILDOPT_HAVE_NEW_RPM_VERIFY], 1, [Set to 1 if we have rpmtsSetVfyLevel])
|
|
])
|
|
librpm_version="$(pkg-config rpm --modversion)"
|
|
|
|
AC_ARG_ENABLE(dfd_over_dbus,
|
|
AS_HELP_STRING([--enable-dfd-over-dbus],
|
|
[Enable passing dfd over D-Bus (default: yes)]),,
|
|
[enable_dfd_over_dbus=yes])
|
|
AS_IF([test x$enable_dfd_over_dbus = xyes], [
|
|
AC_DEFINE(HAVE_DFD_OVER_DBUS, 1, [Define if we can pass dfd over D-Bus])
|
|
])
|
|
|
|
AC_PATH_PROG([XSLTPROC], [xsltproc])
|
|
|
|
GLIB_TESTS
|
|
LIBGLNX_CONFIGURE
|
|
|
|
AC_CHECK_TOOL(GPERF, gperf)
|
|
AS_IF([test -z "$GPERF"],
|
|
AC_MSG_ERROR([*** gperf not found])
|
|
)
|
|
dnl stolen from https://github.com/systemd/systemd/commit/c9f7b4d
|
|
GPERF_TEST="$(echo foo,bar | ${GPERF} -L ANSI-C)"
|
|
AC_COMPILE_IFELSE(
|
|
[AC_LANG_PROGRAM([
|
|
#include <string.h>
|
|
const char * in_word_set(const char *, size_t);
|
|
$GPERF_TEST]
|
|
)],
|
|
[GPERF_LEN_TYPE=size_t],
|
|
[AC_COMPILE_IFELSE(
|
|
[AC_LANG_PROGRAM([
|
|
#include <string.h>
|
|
const char * in_word_set(const char *, unsigned);
|
|
$GPERF_TEST]
|
|
)],
|
|
[GPERF_LEN_TYPE=unsigned],
|
|
[AC_MSG_ERROR([** unable to determine gperf len type])]
|
|
)]
|
|
)
|
|
AC_DEFINE_UNQUOTED([GPERF_LEN_TYPE], [$GPERF_LEN_TYPE], [gperf len type])
|
|
|
|
m4_ifdef([GOBJECT_INTROSPECTION_CHECK], [
|
|
GOBJECT_INTROSPECTION_CHECK([1.34.0])
|
|
])
|
|
AM_CONDITIONAL(BUILDOPT_INTROSPECTION, test "x$found_introspection" = xyes)
|
|
|
|
m4_ifdef([GTK_DOC_CHECK], [
|
|
GTK_DOC_CHECK([1.15], [--flavour no-tmpl])
|
|
],[
|
|
AM_CONDITIONAL([ENABLE_GTK_DOC],[false])
|
|
])
|
|
|
|
AC_ARG_ENABLE(installed_tests,
|
|
AS_HELP_STRING([--enable-installed-tests],
|
|
[Install test programs (default: no)]),,
|
|
[enable_installed_tests=no])
|
|
AM_CONDITIONAL(BUILDOPT_INSTALL_TESTS, test x$enable_installed_tests = xyes)
|
|
|
|
AC_ARG_ENABLE(new-name,
|
|
AS_HELP_STRING([--enable-new-name],
|
|
[Install additionally as nts (default: no)]),,
|
|
[enable_new_name=no])
|
|
AM_CONDITIONAL(BUILDOPT_NEW_NAME, test x$enable_new_name = xyes)
|
|
|
|
AC_ARG_WITH(bubblewrap,
|
|
AS_HELP_STRING([--with-bubblewrap],
|
|
[Path to bubblewrap binary (default: /usr/bin/bwrap)]),,
|
|
[with_bubblewrap=/usr/bin/bwrap])
|
|
AC_DEFINE_UNQUOTED(WITH_BUBBLEWRAP_PATH, ["$with_bubblewrap"], [Define to bubblewrap path])
|
|
|
|
dnl Some distributions may want to support the client tooling, but not
|
|
dnl the server side.
|
|
AC_ARG_ENABLE(compose-tooling,
|
|
AS_HELP_STRING([--enable-compose-tooling],
|
|
[Build compose tooling]),,
|
|
[enable_compose_tooling=yes])
|
|
AM_CONDITIONAL(BUILDOPT_COMPOSE_TOOLING, [test x$enable_compose_tooling = xyes])
|
|
AS_IF([test x$enable_compose_tooling = xyes], [
|
|
AC_DEFINE(HAVE_COMPOSE_TOOLING, 1, [Define if we are building compose tooling])
|
|
])
|
|
if test x$enable_compose_tooling != xno; then RPM_OSTREE_FEATURES="$RPM_OSTREE_FEATURES compose"; fi
|
|
|
|
AC_PATH_PROG([cargo], [cargo])
|
|
AS_IF([test -z "$cargo"], [AC_MSG_ERROR([cargo is required for --enable-rust])])
|
|
AC_PATH_PROG([rustc], [rustc])
|
|
AS_IF([test -z "$rustc"], [AC_MSG_ERROR([rustc is required for --enable-rust])])
|
|
|
|
dnl https://github.com/projectatomic/rpm-ostree/pull/1573
|
|
dnl We support 3 modes for bindgen:
|
|
dnl - External /usr/bin/cbindgen (Fedora + CI)
|
|
dnl - Downloading it from crates.io (CentOS + CI builds)
|
|
dnl - Not running it at all, and using a pre-built rpmostree-rust.h (Koji)
|
|
AS_IF([test -d "${srcdir}"/rust/vendor],
|
|
[cbindgen=dist],
|
|
[AC_PATH_PROG([cbindgen], [cbindgen])])
|
|
AM_CONDITIONAL(HAVE_PREBUILT_CBINDGEN, [test "${cbindgen}" = "dist"])
|
|
AM_CONDITIONAL(HAVE_EXTERNAL_CBINDGEN, [test -n "${cbindgen}" && test "${cbindgen}" != dist])
|
|
|
|
AC_MSG_CHECKING(whether to build in debug mode)
|
|
debug_release=release
|
|
if $(echo $CFLAGS |grep -q -E "(-O0|-Og)"); then
|
|
debug_release=debug
|
|
fi
|
|
AC_MSG_RESULT($debug_release)
|
|
|
|
dnl These bits based on gnome:librsvg/configure.ac
|
|
dnl By default, we build in release mode (but without LTO!)
|
|
AC_ARG_ENABLE(rust-debug,
|
|
AC_HELP_STRING([--enable-rust-debug],
|
|
[Build Rust code with debugging information [default=no]]),
|
|
[rust_debug_release=$enableval],
|
|
[rust_debug_release=$debug_release])
|
|
dnl Canonicalize yes/no to debug/release
|
|
AS_IF([test x$rust_debug_release = xno ], [rust_debug_release=release])
|
|
AS_IF([test x$rust_debug_release = xyes ], [rust_debug_release=debug])
|
|
|
|
RUST_TARGET_SUBDIR=${rust_debug_release}
|
|
AC_SUBST([RUST_TARGET_SUBDIR])
|
|
AM_CONDITIONAL(RUST_DEBUG, [test "x$rust_debug_release" = "xdebug"])
|
|
dnl Unconditional now.
|
|
RPM_OSTREE_FEATURES="$RPM_OSTREE_FEATURES rust"
|
|
|
|
dnl Only use this for package builds, as it will hackily edit Cargo.toml right now
|
|
AC_ARG_ENABLE(lto,
|
|
AC_HELP_STRING([--enable-lto],
|
|
[Build code with Link Time Optimization [default=no]]))
|
|
dnl https://github.com/rust-lang/cargo/issues/4349
|
|
dnl https://bugzilla.mozilla.org/show_bug.cgi?id=1386371
|
|
if test "${enable_lto}" = yes; then
|
|
if ! grep -q '^lto.*=true' rust/Cargo.toml 2>/dev/null; then
|
|
echo '# Inserted by configure --enable-lto' >> rust/Cargo.toml
|
|
echo "lto = true" >> rust/Cargo.toml
|
|
fi
|
|
fi
|
|
|
|
dnl And propagate the release/debug type to cmake
|
|
cmake_args=-DCMAKE_BUILD_TYPE=RelWithDebugInfo
|
|
if test ${debug_release} = debug; then
|
|
cmake_args="-DCMAKE_BUILD_TYPE=Debug"
|
|
fi
|
|
export cmake_args
|
|
|
|
dnl I picked /usr/libexec/rpm-ostree just because we need an
|
|
dnl arbitrary path - we don't actually install there.
|
|
(set -euo pipefail; mkdir -p libdnf-build && cd libdnf-build &&
|
|
set -x &&
|
|
export CXXFLAGS &&
|
|
cmake \
|
|
-DCMAKE_INSTALL_PREFIX:PATH=/usr/libexec/rpm-ostree \
|
|
-DINCLUDE_INSTALL_DIR:PATH=/usr/libexec/rpm-ostree/include \
|
|
-DLIB_INSTALL_DIR:PATH=/usr/libexec/rpm-ostree \
|
|
-DSYSCONF_INSTALL_DIR:PATH=/usr/libexec/rpm-ostree/etc \
|
|
-DSHARE_INSTALL_PREFIX:PATH=/usr/libexec/rpm-ostree/share \
|
|
-DBUILD_SHARED_LIBS:BOOL=ON \
|
|
-DWITH_SWDB:BOOL=0 \
|
|
-DWITH_BINDINGS:BOOL=0 \
|
|
-DWITH_HTML:BOOL=0 \
|
|
-DWITH_MAN:BOOL=0 \
|
|
${cmake_args} ../libdnf) || exit 1
|
|
|
|
AC_CONFIG_FILES([
|
|
Makefile
|
|
api-doc/Makefile
|
|
src/lib/rpm-ostree-1.pc
|
|
src/lib/rpmostree-version.h
|
|
])
|
|
AC_OUTPUT
|
|
|
|
echo "
|
|
$PACKAGE $VERSION
|
|
|
|
built with modern RPM (e.g. Fedora 25+): $have_modern_rpm ($librpm_version)
|
|
nts name: $enable_new_name
|
|
compose tooling: $enable_compose_tooling
|
|
introspection: $found_introspection
|
|
bubblewrap: $with_bubblewrap
|
|
gtk-doc: $enable_gtk_doc
|
|
rust: $rust_debug_release (lto: ${enable_lto:-no})
|
|
cbindgen: ${cbindgen:-internal}
|
|
use dfd over D-Bus: $enable_dfd_over_dbus
|
|
"
|