2024-02-26 09:34:30 -07:00
|
|
|
AC_INIT([gparted],[1.6.0-git],[https://gitlab.gnome.org/GNOME/gparted/issues])
|
2013-03-10 06:02:45 -06:00
|
|
|
AC_PREREQ([2.50])
|
2008-04-07 14:10:28 -06:00
|
|
|
|
2010-06-24 08:37:06 -06:00
|
|
|
AC_CONFIG_SRCDIR([src/main.cc])
|
2008-04-07 14:10:28 -06:00
|
|
|
AC_CONFIG_HEADERS([config.h])
|
2008-08-05 09:34:10 -06:00
|
|
|
AC_CONFIG_MACRO_DIR([m4])
|
2004-10-21 09:32:57 -06:00
|
|
|
|
Silence subdir-objects warning from automake 1.14 (#781978)
Configuring GParted on a machine with automake >= 1.14 produces this
warning:
$ ./autogen.sh
...
lib/gtest/Makefile.am:58: warning: source file 'src/gtest-all.cc' is in a subdirectory,
lib/gtest/Makefile.am:58: but option 'subdir-objects' is disabled
automake: warning: possible forward-incompatibility.
automake: At least a source file is in a subdirectory, but the 'subdir-objects'
automake: automake option hasn't been enabled. For now, the corresponding output
automake: object file(s) will be placed in the top-level directory. However,
automake: this behaviour will change in future Automake versions: they will
automake: unconditionally cause object files to be placed in the same subdirectory
automake: of the corresponding sources.
automake: You are advised to start using 'subdir-objects' option throughout your
automake: project, to avoid future incompatibilities.
lib/gtest/Makefile.am:60: warning: source file 'src/gtest_main.cc' is in a subdirectory,
lib/gtest/Makefile.am:60: but option 'subdir-objects' is disabled
lib/gtest/Makefile.am: installing './depcomp'
tests/Makefile.am:22: warning: source file '../src/BlockSpecial.cc' is in a subdirectory,
tests/Makefile.am:22: but option 'subdir-objects' is disabled
tests/Makefile.am:23: warning: source file '../src/PipeCapture.cc' is in a subdirectory,
tests/Makefile.am:23: but option 'subdir-objects' is disabled
...
From the automake 1.14 NEWS file:
http://git.savannah.gnu.org/cgit/automake.git/tree/NEWS?h=v1.14#n125
"The next major Automake version (2.0) will unconditionally activate
the 'subdir-objects' option. In order to smooth out the transition,
we now give a warning (in the category 'unsupported') whenever a
source file is present in a subdirectory but the 'subdir-object' is
not enabled. For example, the following usage will trigger such a
warning:
bin_PROGRAMS = sub/foo
sub_foo_SOURCES = sub/main.c sub/bar.c
"
Set the subdir-objects automake option, silencing the warning.
Bug 781978 - Add Google Test C++ test framework
2017-06-21 06:55:59 -06:00
|
|
|
AM_INIT_AUTOMAKE([1.9 subdir-objects])
|
2004-09-19 16:32:22 -06:00
|
|
|
AM_MAINTAINER_MODE
|
2004-09-19 14:24:53 -06:00
|
|
|
|
2004-09-20 09:46:21 -06:00
|
|
|
|
2004-09-23 13:32:57 -06:00
|
|
|
dnl======================
|
2013-03-10 06:02:45 -06:00
|
|
|
dnl checks for programs
|
2004-09-23 13:32:57 -06:00
|
|
|
dnl======================
|
2004-09-19 14:24:53 -06:00
|
|
|
AC_PROG_CXX
|
2014-07-06 11:57:22 -06:00
|
|
|
AC_PROG_CC
|
2022-06-04 02:06:54 -06:00
|
|
|
LT_INIT
|
2014-08-10 02:13:22 -06:00
|
|
|
AC_PROG_AWK
|
2014-11-14 02:14:40 -07:00
|
|
|
dnl Check for pkg-config early to avoid splitting message when first used.
|
|
|
|
PKG_CHECK_EXISTS
|
2004-09-19 14:24:53 -06:00
|
|
|
|
2008-08-05 09:34:10 -06:00
|
|
|
|
2008-07-23 11:56:57 -06:00
|
|
|
dnl======================
|
2017-06-20 09:15:12 -06:00
|
|
|
dnl Find graphical privilege escalation program
|
2008-07-23 11:56:57 -06:00
|
|
|
dnl======================
|
2017-08-24 06:09:05 -06:00
|
|
|
dnl Check for pkexec >= 0.102 for it's ability to run X11 apps.
|
2017-08-04 00:38:56 -06:00
|
|
|
AM_CONDITIONAL([INSTALL_POLKIT_ACTIONS], false)
|
2017-08-12 04:52:30 -06:00
|
|
|
PKEXEC_REQUIRED_VERSION='0.102'
|
|
|
|
AC_MSG_CHECKING([for pkexec >= $PKEXEC_REQUIRED_VERSION])
|
|
|
|
PKEXEC_REQUIRED_INT=`echo "$PKEXEC_REQUIRED_VERSION" | $AWK -F. '{print $1 * 10000 + $2}'`
|
|
|
|
PKEXEC_VERSION_OUTPUT=`pkexec --version 2> /dev/null` ||
|
|
|
|
AC_MSG_RESULT([not found])
|
|
|
|
if test "x$PKEXEC_VERSION_OUTPUT" != 'x'; then
|
|
|
|
PKEXEC_FOUND_VERSION=`echo "$PKEXEC_VERSION_OUTPUT" | head -1 | cut -d' ' -f3`
|
|
|
|
PKEXEC_FOUND_INT=`echo "$PKEXEC_FOUND_VERSION" | $AWK -F. '{print $1 * 10000 + $2}'`
|
|
|
|
AC_MSG_RESULT([$PKEXEC_FOUND_VERSION found])
|
|
|
|
if test "$PKEXEC_FOUND_INT" -ge "$PKEXEC_REQUIRED_INT"; then
|
2017-08-24 06:09:05 -06:00
|
|
|
GKSUPROG='pkexec --disable-internal-agent'
|
2017-08-12 04:52:30 -06:00
|
|
|
AC_SUBST([GKSUPROG])
|
|
|
|
AM_CONDITIONAL([INSTALL_POLKIT_ACTIONS], true)
|
2017-06-20 09:15:12 -06:00
|
|
|
fi
|
2017-08-12 04:52:30 -06:00
|
|
|
fi
|
|
|
|
|
|
|
|
dnl Check for alternative graphical privilege escalation programs.
|
|
|
|
if test "x$GKSUPROG" = 'x'; then
|
|
|
|
AC_CHECK_PROGS([GKSUPROG], [gksudo gksu kdesudo "xdg-su -c"], [])
|
2017-06-20 09:15:12 -06:00
|
|
|
fi
|
2008-05-08 16:31:53 -06:00
|
|
|
|
2008-08-05 09:34:10 -06:00
|
|
|
|
2004-09-23 13:32:57 -06:00
|
|
|
dnl======================
|
2013-03-10 06:02:45 -06:00
|
|
|
dnl i18n stuff
|
2004-09-23 13:32:57 -06:00
|
|
|
dnl======================
|
2004-09-20 09:46:21 -06:00
|
|
|
GETTEXT_PACKAGE=gparted
|
2010-06-24 08:37:06 -06:00
|
|
|
AC_SUBST([GETTEXT_PACKAGE])
|
|
|
|
AC_DEFINE_UNQUOTED([GETTEXT_PACKAGE], "$GETTEXT_PACKAGE", [description])
|
2004-09-20 09:46:21 -06:00
|
|
|
|
2022-08-26 05:05:18 -06:00
|
|
|
AM_GNU_GETTEXT_VERSION([0.19.8])
|
|
|
|
AM_GNU_GETTEXT([external])
|
|
|
|
|
2004-09-23 13:32:57 -06:00
|
|
|
|
|
|
|
|
|
|
|
dnl======================
|
2013-03-10 06:02:45 -06:00
|
|
|
dnl checks for libs
|
2004-09-23 13:32:57 -06:00
|
|
|
dnl======================
|
2014-08-10 03:05:55 -06:00
|
|
|
AC_CHECK_LIB([uuid], [uuid_generate], [], AC_MSG_ERROR([*** libuuid not found.]))
|
|
|
|
AC_CHECK_LIB([dl], [dlopen], [], AC_MSG_ERROR([*** libdl not found.]))
|
|
|
|
AC_CHECK_LIB([parted], [ped_device_read], [], AC_MSG_ERROR([*** libparted not found.]))
|
2008-05-08 16:31:53 -06:00
|
|
|
|
2004-10-30 16:17:20 -06:00
|
|
|
|
2014-11-13 13:53:54 -07:00
|
|
|
dnl Check for minimum required libparted version.
|
|
|
|
dnl 1) Check using pkg-config.
|
|
|
|
dnl (Older distros tend to not provide pkg-config information for libparted).
|
|
|
|
dnl 2) Check by linking and running a program to report libparted version directly.
|
2018-12-18 10:34:35 -07:00
|
|
|
LIBPARTED_REQUIRED_VERSION='2.2'
|
2014-11-13 13:53:54 -07:00
|
|
|
AC_MSG_CHECKING([for libparted >= $LIBPARTED_REQUIRED_VERSION (querying pkg-config)])
|
2014-08-10 02:13:22 -06:00
|
|
|
LIBPARTED_REQUIRED_INT=`echo "$LIBPARTED_REQUIRED_VERSION" |
|
2015-08-11 12:29:12 -06:00
|
|
|
$AWK -F. '{print $1 * 1000000 + $2 * 10000 + $3}'`
|
2014-11-13 13:53:54 -07:00
|
|
|
dnl 1) Check using pkg-config.
|
|
|
|
PKG_CHECK_EXISTS(
|
|
|
|
[libparted],
|
|
|
|
[LIBPARTED_FOUND_VERSION=`$PKG_CONFIG --modversion libparted`
|
|
|
|
LIBPARTED_FOUND_INT=`echo "$LIBPARTED_FOUND_VERSION" |
|
2015-08-11 12:29:12 -06:00
|
|
|
$AWK -F. '{print $1 * 1000000 + $2 * 10000 + $3}'`
|
2014-11-13 13:53:54 -07:00
|
|
|
AC_MSG_RESULT([$LIBPARTED_FOUND_VERSION])
|
|
|
|
test "$LIBPARTED_FOUND_INT" -ge "$LIBPARTED_REQUIRED_INT" ||
|
|
|
|
AC_MSG_ERROR([*** libparted too old. Require libparted >= $LIBPARTED_REQUIRED_VERSION but only found libparted $LIBPARTED_FOUND_VERSION.])
|
|
|
|
],
|
|
|
|
[AC_MSG_RESULT([not found])
|
|
|
|
dnl 2) Check by linking and running a program to report libparted version
|
|
|
|
dnl directly.
|
|
|
|
AC_MSG_CHECKING([for libparted >= $LIBPARTED_REQUIRED_VERSION (querying libparted)])
|
|
|
|
AC_RUN_IFELSE(
|
|
|
|
[AC_LANG_SOURCE(
|
|
|
|
[[
|
2006-09-06 14:45:55 -06:00
|
|
|
#include <stdio.h>
|
2014-08-10 02:13:22 -06:00
|
|
|
#include <stdlib.h>
|
2006-09-06 14:45:55 -06:00
|
|
|
#include <parted/parted.h>
|
2004-10-23 14:28:46 -06:00
|
|
|
|
2014-08-10 02:13:22 -06:00
|
|
|
int main()
|
2006-09-06 14:45:55 -06:00
|
|
|
{
|
2014-08-10 02:13:22 -06:00
|
|
|
const char *version = ped_get_version();
|
|
|
|
if (version == NULL)
|
2006-09-14 14:34:49 -06:00
|
|
|
{
|
2014-08-10 02:13:22 -06:00
|
|
|
fprintf(stderr, "ERROR: ped_get_version() returned NULL\n");
|
|
|
|
return EXIT_FAILURE;
|
2006-09-14 14:34:49 -06:00
|
|
|
}
|
2014-08-10 02:13:22 -06:00
|
|
|
printf("%s\n", version);
|
|
|
|
return EXIT_SUCCESS;
|
2006-09-06 14:45:55 -06:00
|
|
|
}
|
2014-11-13 13:53:54 -07:00
|
|
|
]]
|
|
|
|
)],
|
|
|
|
dnl Run test program again to cache libparted version.
|
|
|
|
[LIBPARTED_FOUND_VERSION=`./conftest$EXEEXT`
|
|
|
|
LIBPARTED_FOUND_INT=`echo "$LIBPARTED_FOUND_VERSION" |
|
2015-08-11 12:29:12 -06:00
|
|
|
$AWK -F. '{print $1 * 1000000 + $2 * 10000 + $3}'`
|
2014-11-13 13:53:54 -07:00
|
|
|
test "$LIBPARTED_FOUND_INT" -ge "$LIBPARTED_REQUIRED_INT" ||
|
|
|
|
AC_MSG_ERROR([*** libparted too old. Require libparted >= $LIBPARTED_REQUIRED_VERSION but only found libparted $LIBPARTED_FOUND_VERSION.])
|
|
|
|
],
|
|
|
|
[AC_MSG_ERROR([*** Error querying libparted version. Check config.log for details.])]
|
|
|
|
)]
|
2013-03-10 06:02:45 -06:00
|
|
|
)
|
2006-09-06 14:45:55 -06:00
|
|
|
|
|
|
|
|
2015-02-21 09:43:42 -07:00
|
|
|
dnl Check for libparted 2.0 to 3.0 inclusive for a bug where loop table
|
|
|
|
dnl creation doesn't delete old partitions.
|
|
|
|
LIBPARTED_MIN_WANTED_VERSION='2.0'
|
|
|
|
LIBPARTED_MAX_WANTED_VERSION='3.0'
|
|
|
|
AC_MSG_CHECKING([for $LIBPARTED_MIN_WANTED_VERSION <= libparted <= $LIBPARTED_MAX_WANTED_VERSION (loop table creation doesn't delete old partitions)])
|
|
|
|
LIBPARTED_MIN_WANTED_INT=`echo "$LIBPARTED_MIN_WANTED_VERSION" |
|
2015-08-11 12:29:12 -06:00
|
|
|
$AWK -F. '{print $1 * 1000000 + $2 * 10000 + $3}'`
|
2015-02-21 09:43:42 -07:00
|
|
|
LIBPARTED_MAX_WANTED_INT=`echo "$LIBPARTED_MAX_WANTED_VERSION" |
|
2015-08-11 12:29:12 -06:00
|
|
|
$AWK -F. '{print $1 * 1000000 + $2 * 10000 + $3}'`
|
2015-02-21 09:43:42 -07:00
|
|
|
if test "$LIBPARTED_MIN_WANTED_INT" -le "$LIBPARTED_FOUND_INT" -a \
|
|
|
|
"$LIBPARTED_FOUND_INT" -le "$LIBPARTED_MAX_WANTED_INT"; then
|
|
|
|
need_loop_delete_old_ptns_workaround=yes
|
|
|
|
AC_DEFINE([ENABLE_LOOP_DELETE_OLD_PTNS_WORKAROUND], 1,
|
|
|
|
[Define to 1 to enable deletion of old partitions before creating a loop table workaround])
|
|
|
|
AC_MSG_RESULT([(cached) yes])
|
|
|
|
else
|
|
|
|
need_loop_delete_old_ptns_workaround=no
|
|
|
|
AC_MSG_RESULT([(cached) no])
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
2014-08-05 14:47:20 -06:00
|
|
|
dnl Check for ped_file_system_resize() function to determine the existence
|
|
|
|
dnl of the API in the original parted library. Available in parted <= 2.4.
|
2014-08-04 17:24:12 -06:00
|
|
|
dnl
|
|
|
|
dnl NOTE:
|
|
|
|
dnl For AC_CHECK_LIB the default action-if-found ($3) includes extending
|
|
|
|
dnl LIBS with the newly found library ($1) thus:
|
|
|
|
dnl LIBS="-l$1 $LIBS"
|
|
|
|
dnl
|
|
|
|
dnl As the default action-if-found is overridden, LIBS isn't extended so
|
|
|
|
dnl saving and restoring LIBS isn't required.
|
2014-08-06 16:17:00 -06:00
|
|
|
have_old_lp_fs_resize_api=no
|
2014-08-05 14:47:20 -06:00
|
|
|
AC_CHECK_LIB(
|
|
|
|
[parted], [ped_file_system_resize],
|
2014-08-06 16:17:00 -06:00
|
|
|
[have_old_lp_fs_resize_api=yes]
|
2014-08-05 14:47:20 -06:00
|
|
|
)
|
|
|
|
|
|
|
|
|
2014-08-06 16:17:00 -06:00
|
|
|
dnl If not already found, check for ped_file_system_resize() function in
|
|
|
|
dnl the parted-fs-resize library to determine the need to use the new
|
|
|
|
dnl library. Available in parted >= 3.1.
|
|
|
|
have_new_lp_fs_resize_lib=no
|
|
|
|
AS_IF(
|
|
|
|
[test "x$have_old_lp_fs_resize_api" != xyes],
|
|
|
|
[AC_CHECK_LIB(
|
|
|
|
[parted-fs-resize], [ped_file_system_resize],
|
2014-08-10 03:05:55 -06:00
|
|
|
[have_new_lp_fs_resize_lib=yes
|
|
|
|
LIBS="-lparted-fs-resize $LIBS"
|
|
|
|
]
|
2014-08-06 16:17:00 -06:00
|
|
|
)]
|
2012-03-03 11:47:39 -07:00
|
|
|
)
|
|
|
|
|
|
|
|
|
Only explicitly flush devices when using libparted < 3.2 (#259)
During device probing GParted always explicitly calls ped_device_sync()
to flush the caches for coherency between the whole disk device and the
partition devices [1]. As the GParted_Core::flush_device() comment
explains, since v3.1.61-gfb99ba5 [2], libparted flushes the devices
every time a device is opened [3], so also explicitly doing this in
GParted is unnecessary. Therefore stop explicitly flushing the devices
in GParted, except when using libparted 3.1 and older which doesn't do
it itself.
The ped_device_open() and ped_device_close() needed for the
ped_device_sync() is also a trigger of device changes and udev rule
execution performing LVM Volume Group activation, because libparted
opens the device read-write [4]. This is another reason to remove it
when possible. However even when eliminated it does not solve the issue
of LVM VG activation because other triggers remain. Do want this change
first though so that the sequence of libparted calls isn't changed
immediately after documenting them and fixing the issue and so that
there is no doubt that this change doesn't fix the issue.
Removing this extra device flush saves a little bit of time, depending
on the speed of the drive and number of partitions. Sample savings on
my desktop:
Drive type and partitions Saving (seconds)
----------------------------- ----------------
fast SSD with 3 partitions 0.05
slow SSD with 12 partitions 0.27
HDD with 1 partition 0.05
VHDD in VM with 1 partition 0.14
VHDD in VM with 10 partitions 0.58
Also the settle_device() call in flush_device() needs to be kept to wait
for device changes and udev rule execution whether it is GParted
explicitly flushing the device or just libparted automatically doing it
for cache coherency in ped_device_get(). This is because:
1. Libparted <= 3.2 opens the whole disk device read-write for
ped_device_get() [5]. (This was changed with parted
v3.2.26-g44d5ae0 [6] to open the whole disk device read-only).
2. Libparted up to and including the latest 3.6 release still opens all
partition devices read-write for ped_device_get() [7].
3. A whole disk device FAT32 file system looks enough like a partition
table that both the Linux kernel and libparted think it is
partitioned:
# mkfs.fat -F32 /dev/sdb
mkfs.fat 4.2 (2021-01-31)
# grep sdb /proc/partitions
8 16 8388608 sdb
8 17 8388607 sdb1
# parted /dev/sdb print
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sdb: 8590MB
Sector size (logical/physical): 512B/512B
Partition Table: loop
Disk Flags:
Number Start End Size File system Flags
1 0s 16777215s 16777216s fat32
So the ped_device_get() call on a whole disk device FAT32 file system
still triggers device change and udev rule execution which needs to be
waited for, as this is exactly the case fixed previously by commit:
1382e0b828f630a705cecd97c346dfc6267909bf
Wait for udev change on /dev/DISK when querying whole device FS (!46)
[1] 3bea067596e3e2d6513cda2a66df1b3e4fa432fb
Flush devices when scanning to prevent reading stale signatures (#723842)
[2] Revert "linux-commit: do not unnecessarily open partition device nodes"
http://git.savannah.gnu.org/cgit/parted.git/commit/?id=fb99ba5ebd0dc34204fc9f1014131d5d494805bc
[3] parted libparted/arch/linux.c:_device_open()
https://git.savannah.gnu.org/cgit/parted.git/tree/libparted/arch/linux.c?h=v3.6#n1752
1709 static int
1710 linux_open (PedDevice* dev)
1711 {
1712 return _device_open (dev, RW_MODE);
1713 }
1714
1715 static int
1716 _device_open (PedDevice* dev, int flags)
...
1752 _flush_cache (dev);
[4] parted libparted/device.c:ped_device_open() v3.6
https://git.savannah.gnu.org/cgit/parted.git/tree/libparted/device.c?h=v3.6#n226
parted libparted/arch/linux.c v3.6
https://git.savannah.gnu.org/cgit/parted.git/tree/libparted/arch/linux.c?h=v3.6
ped_device_open(...)
ped_architecture->dev_ops->open(...) = linux_open(...)
_device_open(..., RW_MODE)
open(..., O_RDWR)
[5] parted libparted/device.c:ped_device_get() v3.2
https://git.savannah.gnu.org/cgit/parted.git/tree/libparted/device.c?h=v3.2#n149
parted libparted/arch/linux.c v3.2
https://git.savannah.gnu.org/cgit/parted.git/tree/libparted/arch/linux.c?h=v3.2
ped_device_get(...)
ped_architecture->dev_ops->_new(...) = linux_new()
init_ide(...)
init_scsi(...)
init_generic(...)
ped_device_open(...)
ped_architecture->dev_ops->open(...) = linux_open(...)
open(..., O_RDWR)
[6] libparted: Use read only when probing devices on linux (#1245144)
http://git.savannah.gnu.org/cgit/parted.git/commit/?id=44d5ae0115c4ecfe3158748309e9912c5aede92d
[7] parted libparted/arch/linux.v v3.6
http://git.savannah.gnu.org/cgit/parted.git/tree/libparted/arch/linux.c?h=v3.6#n1660
1660 static void
1661 _flush_cache (PedDevice* dev)
...
1673 for (i = 1; i < lpn; i++) {
...
1680 if (!_partition_is_mounted_by_path(name)) {
1681 fd = open (name, WR_MODE, 0);
Closes #259 - Trying to deactivate LVM PV fails
2024-08-25 13:19:09 -06:00
|
|
|
dnl Check for libparted < 3.2 which needs explicit flush for coherency between
|
|
|
|
dnl whole disk device and partition devices.
|
|
|
|
LIBPARTED_FIXED_VERSION='3.2'
|
|
|
|
AC_MSG_CHECKING([for libparted < $LIBPARTED_FIXED_VERSION (need explicit flush for device coherency workaround)])
|
|
|
|
LIBPARTED_FIXED_INT=`echo "$LIBPARTED_FIXED_VERSION" |
|
|
|
|
$AWK -F. '{print $1 * 1000000 + $2 * 10000 + $3}'`
|
|
|
|
if test "$LIBPARTED_FOUND_INT" -lt "$LIBPARTED_FIXED_INT"; then
|
|
|
|
need_explicit_flush_workaround=yes
|
|
|
|
AC_DEFINE([ENABLE_EXPLICIT_FLUSH_WORKAROUND], 1,
|
|
|
|
[Define to 1 to enable explicit flush for device coherency workaround])
|
|
|
|
AC_MSG_RESULT([(cached) yes])
|
|
|
|
else
|
|
|
|
need_explicit_flush_workaround=no
|
|
|
|
AC_MSG_RESULT([(cached) no])
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
2014-08-10 15:35:27 -06:00
|
|
|
dnl Check for libparted >= 3.2 for online resize support.
|
|
|
|
LIBPARTED_WANTED_VERSION='3.2'
|
|
|
|
AC_MSG_CHECKING([for libparted >= $LIBPARTED_WANTED_VERSION (online resize)])
|
|
|
|
LIBPARTED_WANTED_INT=`echo "$LIBPARTED_WANTED_VERSION" |
|
2015-08-11 12:29:12 -06:00
|
|
|
$AWK -F. '{print $1 * 1000000 + $2 * 10000 + $3}'`
|
2014-08-10 15:35:27 -06:00
|
|
|
if test "$LIBPARTED_FOUND_INT" -ge "$LIBPARTED_WANTED_INT"; then
|
|
|
|
have_online_resize=yes
|
|
|
|
AC_MSG_RESULT([(cached) yes])
|
|
|
|
else
|
|
|
|
have_online_resize=no
|
|
|
|
AC_MSG_RESULT([(cached) no])
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
2012-03-03 11:47:39 -07:00
|
|
|
dnl Check if have libparted fs resize capability
|
|
|
|
if test [ ${have_old_lp_fs_resize_api} = yes -o ${have_new_lp_fs_resize_lib} = yes ]; then
|
|
|
|
AC_DEFINE([HAVE_LIBPARTED_FS_RESIZE], [1], [Define to 1 if have libparted fs resize capability])
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
2012-01-06 07:23:43 -07:00
|
|
|
dnl gthread
|
|
|
|
PKG_CHECK_MODULES([GTHREAD], [gthread-2.0])
|
|
|
|
AC_SUBST([GTHREAD_LIBS])
|
|
|
|
AC_SUBST([GTHREAD_CFLAGS])
|
|
|
|
|
2006-09-06 14:45:55 -06:00
|
|
|
dnl GTKMM
|
2023-08-31 02:50:33 -06:00
|
|
|
PKG_CHECK_MODULES([GTKMM], [gtkmm-3.0 >= 3.18.0])
|
2010-06-24 08:37:06 -06:00
|
|
|
AC_SUBST([GTKMM_LIBS])
|
|
|
|
AC_SUBST([GTKMM_CFLAGS])
|
2004-09-23 13:32:57 -06:00
|
|
|
|
2004-09-20 09:46:21 -06:00
|
|
|
|
2018-03-06 14:09:11 -07:00
|
|
|
dnl Check for glibmm minimum required version.
|
2018-12-24 02:52:15 -07:00
|
|
|
PKG_CHECK_MODULES([GLIBMM], [glibmm-2.4 >= 2.32.0])
|
2013-03-03 15:58:05 -07:00
|
|
|
|
|
|
|
|
2023-08-30 12:01:40 -06:00
|
|
|
dnl Require C++11 compilation.
|
|
|
|
AX_CXX_COMPILE_STDCXX_11()
|
2016-03-24 10:09:43 -06:00
|
|
|
|
Enable C++11 compilation when using glibmm 2.45.40 and later (#756035)
Glibmm 2.45.40 and later uses features in the ISO C++ 2011 standard.
The NEWS file [1] says:
Changes in 2.46 compared to 2.44:
General:
* Use, and require C++11, using features such as move operations,
noexcept auto, = delete, nulltpr, override.
(Murray Cumming, Kjell Ahlstedt)
Also found this by Murray Cumming [2]:
glibmm 2.45.40 requires C++11, both for its own build and by any
apps that use it. gtkmm also now requires C++11.
I think you are seeing a symptom of building the application without
C++11 support. For instance, using CXXFLAGS="--std=c++11", though
you'd be better of using an m4 macro such as
AX_CXX_COMPILE_STDCXX_11().
Without enabling C++11 compiler features, compilation of GParted with
the latest glibmm library fails with errors such as these:
/usr/include/glibmm-2.4/glibmm/ustring.h:267:14: error: expected ';' at end of member declaration
~ustring() noexcept;
^
/usr/include/glibmm-2.4/glibmm/ustring.h:267:14: error: 'noexcept' does not name a type
~ustring() noexcept;
^
/usr/include/glibmm-2.4/glibmm/ustring.h:267:14: note: C++11 'noexcept' only available with -std=c++11 or -std=gnu++11
[1] glibmm NEWS file
https://git.gnome.org/browse/glibmm/tree/NEWS?id=934e8290ce913b12e251ea617d0fc8ac53c385c6
[2] https://bugs.launchpad.net/ubuntu/+source/glibmm2.4/+bug/1478367
Bug 756035 - GParted does not compile with newer gtkmm libraries in
Fedora 23
2015-10-04 04:26:51 -06:00
|
|
|
|
2019-05-01 04:57:38 -06:00
|
|
|
dnl Check for gtkmm >= 3.22 to determine availability of Gtk::ScrolledWindow::set_propagate_natural_width().
|
|
|
|
AC_MSG_CHECKING([for Gtk::ScrolledWindow::set_propagate_natural_width() method])
|
|
|
|
PKG_CHECK_EXISTS(
|
|
|
|
[gtkmm-3.0 >= 3.22.0],
|
|
|
|
[AC_DEFINE([HAVE_SET_PROPAGATE_NATURAL_WIDTH], 1,
|
|
|
|
[Define to 1 if gtkmm provides Gtk::ScrolledWindow::set_propagate_natural_width() method.])
|
|
|
|
AC_MSG_RESULT([yes])
|
|
|
|
],
|
|
|
|
[AC_MSG_RESULT([no])]
|
|
|
|
)
|
|
|
|
|
Enable C++11 compilation when using glibmm 2.45.40 and later (#756035)
Glibmm 2.45.40 and later uses features in the ISO C++ 2011 standard.
The NEWS file [1] says:
Changes in 2.46 compared to 2.44:
General:
* Use, and require C++11, using features such as move operations,
noexcept auto, = delete, nulltpr, override.
(Murray Cumming, Kjell Ahlstedt)
Also found this by Murray Cumming [2]:
glibmm 2.45.40 requires C++11, both for its own build and by any
apps that use it. gtkmm also now requires C++11.
I think you are seeing a symptom of building the application without
C++11 support. For instance, using CXXFLAGS="--std=c++11", though
you'd be better of using an m4 macro such as
AX_CXX_COMPILE_STDCXX_11().
Without enabling C++11 compiler features, compilation of GParted with
the latest glibmm library fails with errors such as these:
/usr/include/glibmm-2.4/glibmm/ustring.h:267:14: error: expected ';' at end of member declaration
~ustring() noexcept;
^
/usr/include/glibmm-2.4/glibmm/ustring.h:267:14: error: 'noexcept' does not name a type
~ustring() noexcept;
^
/usr/include/glibmm-2.4/glibmm/ustring.h:267:14: note: C++11 'noexcept' only available with -std=c++11 or -std=gnu++11
[1] glibmm NEWS file
https://git.gnome.org/browse/glibmm/tree/NEWS?id=934e8290ce913b12e251ea617d0fc8ac53c385c6
[2] https://bugs.launchpad.net/ubuntu/+source/glibmm2.4/+bug/1478367
Bug 756035 - GParted does not compile with newer gtkmm libraries in
Fedora 23
2015-10-04 04:26:51 -06:00
|
|
|
|
2021-05-15 11:52:50 -06:00
|
|
|
dnl Check for gtk+-3.0 >= 3.22 to determine availability of gtk_show_uri_on_window() function.
|
|
|
|
AC_MSG_CHECKING([for gtk_show_uri_on_window() function])
|
|
|
|
PKG_CHECK_EXISTS(
|
|
|
|
[gtk+-3.0 >= 3.22.0],
|
|
|
|
[AC_DEFINE([HAVE_GTK_SHOW_URI_ON_WINDOW], 1,
|
|
|
|
[Define to 1 if gtk provides gtk_show_uri_on_window function.])
|
|
|
|
AC_MSG_RESULT([yes])
|
|
|
|
],
|
|
|
|
[AC_MSG_RESULT([no])]
|
|
|
|
)
|
|
|
|
|
|
|
|
|
2017-04-20 11:44:41 -06:00
|
|
|
dnl Definitions for building of and with gtest. Gets flags for pthread via earlier
|
|
|
|
dnl gthread package check.
|
|
|
|
GTEST_CPPFLAGS="-DGTEST_HAS_PTHREAD=1"
|
2017-05-01 13:37:16 -06:00
|
|
|
GTEST_CXXFLAGS="$GTHREAD_CFLAGS $GTKMM_CFLAGS"
|
2017-04-20 11:44:41 -06:00
|
|
|
GTEST_LDFLAGS=
|
2017-05-01 13:37:16 -06:00
|
|
|
GTEST_LIBS="$GTHREAD_LIBS $GTKMM_LIBS"
|
2017-04-20 11:44:41 -06:00
|
|
|
AC_SUBST([GTEST_CPPFLAGS])
|
|
|
|
AC_SUBST([GTEST_CXXFLAGS])
|
|
|
|
AC_SUBST([GTEST_LDFLAGS])
|
|
|
|
AC_SUBST([GTEST_LIBS])
|
|
|
|
|
|
|
|
|
2008-09-15 11:23:11 -06:00
|
|
|
dnl======================
|
2014-11-09 05:54:30 -07:00
|
|
|
dnl check whether to build documentation - gnome-doc-utils
|
2008-09-15 11:23:11 -06:00
|
|
|
dnl======================
|
2014-08-12 14:36:08 -06:00
|
|
|
AC_ARG_ENABLE(
|
|
|
|
[doc],
|
|
|
|
AS_HELP_STRING(
|
|
|
|
[--disable-doc],
|
|
|
|
dnl Autoconf quadrigraphs '@<:@' = '[' and '@:>@' = ']'
|
|
|
|
[disable building help documentation @<:@default=enabled@:>@]),
|
|
|
|
[enable_doc=$enableval],
|
|
|
|
[enable_doc=yes]
|
|
|
|
)
|
2008-09-15 11:23:11 -06:00
|
|
|
|
2014-08-12 14:36:08 -06:00
|
|
|
AC_MSG_CHECKING([whether help documentation should be built])
|
|
|
|
if test "x$enable_doc" = xyes; then
|
|
|
|
AC_DEFINE([ENABLE_HELP_DOC], [1], [Define to 1 when help documentation is built])
|
2008-09-15 11:23:11 -06:00
|
|
|
AC_MSG_RESULT([yes])
|
2014-08-12 14:36:08 -06:00
|
|
|
else
|
|
|
|
AC_MSG_RESULT([no])
|
2008-09-15 11:23:11 -06:00
|
|
|
fi
|
|
|
|
|
2014-08-12 14:36:08 -06:00
|
|
|
if test "x$enable_doc" = xyes; then
|
2019-02-23 03:39:57 -07:00
|
|
|
dnl YELP_HELP_INIT has to start at column 0 for gnome-autogen.sh to detect it
|
|
|
|
dnl and automatically required yelp.m4.
|
|
|
|
YELP_HELP_INIT
|
2008-09-15 11:23:11 -06:00
|
|
|
fi
|
|
|
|
|
2014-08-12 14:36:08 -06:00
|
|
|
AM_CONDITIONAL([BUILD_HELP_DOC], [test "x$enable_doc" = xyes])
|
2008-09-15 11:23:11 -06:00
|
|
|
|
|
|
|
|
2011-02-22 13:22:49 -07:00
|
|
|
dnl======================
|
|
|
|
dnl check whether to use native libparted dmraid support
|
|
|
|
dnl======================
|
2014-08-12 05:11:58 -06:00
|
|
|
AC_ARG_ENABLE(
|
|
|
|
[libparted_dmraid],
|
|
|
|
AS_HELP_STRING(
|
|
|
|
[--enable-libparted-dmraid],
|
|
|
|
[use native libparted /dev/mapper dmraid support @<:@default=disabled@:>@]),
|
|
|
|
[enable_libparted_dmraid=$enableval],
|
|
|
|
[enable_libparted_dmraid=no]
|
|
|
|
)
|
2011-02-22 13:22:49 -07:00
|
|
|
|
2014-08-12 05:11:58 -06:00
|
|
|
AC_MSG_CHECKING([whether to use native libparted /dev/mapper dmraid support])
|
|
|
|
if test "x$enable_libparted_dmraid" = xyes; then
|
|
|
|
AC_DEFINE([USE_LIBPARTED_DMRAID], [1],
|
|
|
|
[Define to 1 to use native libparted /dev/mapper dmraid support])
|
2011-02-22 13:22:49 -07:00
|
|
|
AC_MSG_RESULT([yes])
|
|
|
|
else
|
|
|
|
AC_MSG_RESULT([no])
|
|
|
|
fi
|
|
|
|
|
2014-08-10 15:35:27 -06:00
|
|
|
|
2013-11-15 09:27:12 -07:00
|
|
|
dnl======================
|
|
|
|
dnl check whether to enable online resize support
|
|
|
|
dnl======================
|
2014-08-10 15:35:27 -06:00
|
|
|
AC_ARG_ENABLE(
|
|
|
|
[online-resize],
|
|
|
|
AS_HELP_STRING(
|
|
|
|
[--enable-online-resize],
|
|
|
|
[enable online resize support @<:@default=auto@:>@]),
|
|
|
|
[enable_online_resize=$enableval],
|
|
|
|
[enable_online_resize=$have_online_resize]
|
|
|
|
)
|
2013-11-15 09:27:12 -07:00
|
|
|
|
|
|
|
AC_MSG_CHECKING([whether online resize support is enabled])
|
2014-08-10 15:35:27 -06:00
|
|
|
if test "x$enable_online_resize" = xyes; then
|
|
|
|
AC_DEFINE([ENABLE_ONLINE_RESIZE], [1], [Define to 1 if online resize is enabled])
|
2013-11-15 09:27:12 -07:00
|
|
|
AC_MSG_RESULT([yes])
|
|
|
|
else
|
|
|
|
AC_MSG_RESULT([no])
|
|
|
|
fi
|
2011-02-22 13:22:49 -07:00
|
|
|
|
2014-08-10 15:35:27 -06:00
|
|
|
|
2017-07-17 11:31:51 -06:00
|
|
|
dnl Check whether to explicitly grant root access to the display.
|
|
|
|
AC_ARG_ENABLE(
|
|
|
|
[xhost-root],
|
|
|
|
AS_HELP_STRING(
|
|
|
|
[--enable-xhost-root],
|
|
|
|
[enable explicitly granting root access to the display @<:@default=disabled@:>@]),
|
|
|
|
[enable_xhost_root=$enableval],
|
|
|
|
[enable_xhost_root=no]
|
|
|
|
)
|
|
|
|
|
|
|
|
AC_MSG_CHECKING([whether to explicitly grant root access to the display])
|
|
|
|
if test "x$enable_xhost_root" = 'xyes'; then
|
|
|
|
AC_MSG_RESULT([yes])
|
|
|
|
else
|
|
|
|
AC_MSG_RESULT([no])
|
|
|
|
fi
|
|
|
|
AC_SUBST([ENABLE_XHOST_ROOT], $enable_xhost_root)
|
|
|
|
|
|
|
|
|
2008-04-07 14:10:28 -06:00
|
|
|
AC_CONFIG_FILES([
|
2004-09-19 14:24:53 -06:00
|
|
|
Makefile
|
2008-09-22 16:41:49 -06:00
|
|
|
data/Makefile
|
|
|
|
data/icons/Makefile
|
2008-04-14 09:50:11 -06:00
|
|
|
doc/Makefile
|
2008-08-05 09:34:10 -06:00
|
|
|
help/Makefile
|
2004-09-19 14:24:53 -06:00
|
|
|
include/Makefile
|
2017-04-20 11:44:41 -06:00
|
|
|
lib/Makefile
|
|
|
|
lib/gtest/Makefile
|
2004-09-19 14:24:53 -06:00
|
|
|
src/Makefile
|
2004-09-20 09:46:21 -06:00
|
|
|
po/Makefile.in
|
2017-04-30 05:34:37 -06:00
|
|
|
tests/Makefile
|
2004-09-19 14:24:53 -06:00
|
|
|
])
|
2008-04-07 14:10:28 -06:00
|
|
|
|
2008-08-05 09:34:10 -06:00
|
|
|
AC_OUTPUT
|
2008-09-15 11:23:11 -06:00
|
|
|
|
|
|
|
|
|
|
|
dnl======================
|
|
|
|
dnl Summary
|
|
|
|
dnl======================
|
|
|
|
|
|
|
|
echo ""
|
2012-03-03 11:47:39 -07:00
|
|
|
echo "======================== Final configuration ==========================="
|
|
|
|
echo " Installing into prefix : $prefix"
|
2008-09-15 11:23:11 -06:00
|
|
|
echo ""
|
2014-08-12 14:36:08 -06:00
|
|
|
echo " Build help documentation? : $enable_doc"
|
2008-09-15 11:23:11 -06:00
|
|
|
echo ""
|
2012-03-03 11:47:39 -07:00
|
|
|
echo " Use native libparted dmraid support? : $enable_libparted_dmraid"
|
2011-06-08 10:38:55 -06:00
|
|
|
echo ""
|
2017-07-17 11:31:51 -06:00
|
|
|
echo " Explicitly grant root access to the display? : $enable_xhost_root"
|
|
|
|
echo ""
|
2012-03-03 11:47:39 -07:00
|
|
|
echo " --- Features Based On Libparted Version ---"
|
2015-02-21 09:43:42 -07:00
|
|
|
echo " Need delete old partitions before"
|
|
|
|
echo " creating a loop table workaround? : $need_loop_delete_old_ptns_workaround"
|
2012-03-03 11:47:39 -07:00
|
|
|
echo " Have old libparted file system resizing API? : $have_old_lp_fs_resize_api"
|
|
|
|
echo " Have new libparted file system resizing LIB? : $have_new_lp_fs_resize_lib"
|
Only explicitly flush devices when using libparted < 3.2 (#259)
During device probing GParted always explicitly calls ped_device_sync()
to flush the caches for coherency between the whole disk device and the
partition devices [1]. As the GParted_Core::flush_device() comment
explains, since v3.1.61-gfb99ba5 [2], libparted flushes the devices
every time a device is opened [3], so also explicitly doing this in
GParted is unnecessary. Therefore stop explicitly flushing the devices
in GParted, except when using libparted 3.1 and older which doesn't do
it itself.
The ped_device_open() and ped_device_close() needed for the
ped_device_sync() is also a trigger of device changes and udev rule
execution performing LVM Volume Group activation, because libparted
opens the device read-write [4]. This is another reason to remove it
when possible. However even when eliminated it does not solve the issue
of LVM VG activation because other triggers remain. Do want this change
first though so that the sequence of libparted calls isn't changed
immediately after documenting them and fixing the issue and so that
there is no doubt that this change doesn't fix the issue.
Removing this extra device flush saves a little bit of time, depending
on the speed of the drive and number of partitions. Sample savings on
my desktop:
Drive type and partitions Saving (seconds)
----------------------------- ----------------
fast SSD with 3 partitions 0.05
slow SSD with 12 partitions 0.27
HDD with 1 partition 0.05
VHDD in VM with 1 partition 0.14
VHDD in VM with 10 partitions 0.58
Also the settle_device() call in flush_device() needs to be kept to wait
for device changes and udev rule execution whether it is GParted
explicitly flushing the device or just libparted automatically doing it
for cache coherency in ped_device_get(). This is because:
1. Libparted <= 3.2 opens the whole disk device read-write for
ped_device_get() [5]. (This was changed with parted
v3.2.26-g44d5ae0 [6] to open the whole disk device read-only).
2. Libparted up to and including the latest 3.6 release still opens all
partition devices read-write for ped_device_get() [7].
3. A whole disk device FAT32 file system looks enough like a partition
table that both the Linux kernel and libparted think it is
partitioned:
# mkfs.fat -F32 /dev/sdb
mkfs.fat 4.2 (2021-01-31)
# grep sdb /proc/partitions
8 16 8388608 sdb
8 17 8388607 sdb1
# parted /dev/sdb print
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sdb: 8590MB
Sector size (logical/physical): 512B/512B
Partition Table: loop
Disk Flags:
Number Start End Size File system Flags
1 0s 16777215s 16777216s fat32
So the ped_device_get() call on a whole disk device FAT32 file system
still triggers device change and udev rule execution which needs to be
waited for, as this is exactly the case fixed previously by commit:
1382e0b828f630a705cecd97c346dfc6267909bf
Wait for udev change on /dev/DISK when querying whole device FS (!46)
[1] 3bea067596e3e2d6513cda2a66df1b3e4fa432fb
Flush devices when scanning to prevent reading stale signatures (#723842)
[2] Revert "linux-commit: do not unnecessarily open partition device nodes"
http://git.savannah.gnu.org/cgit/parted.git/commit/?id=fb99ba5ebd0dc34204fc9f1014131d5d494805bc
[3] parted libparted/arch/linux.c:_device_open()
https://git.savannah.gnu.org/cgit/parted.git/tree/libparted/arch/linux.c?h=v3.6#n1752
1709 static int
1710 linux_open (PedDevice* dev)
1711 {
1712 return _device_open (dev, RW_MODE);
1713 }
1714
1715 static int
1716 _device_open (PedDevice* dev, int flags)
...
1752 _flush_cache (dev);
[4] parted libparted/device.c:ped_device_open() v3.6
https://git.savannah.gnu.org/cgit/parted.git/tree/libparted/device.c?h=v3.6#n226
parted libparted/arch/linux.c v3.6
https://git.savannah.gnu.org/cgit/parted.git/tree/libparted/arch/linux.c?h=v3.6
ped_device_open(...)
ped_architecture->dev_ops->open(...) = linux_open(...)
_device_open(..., RW_MODE)
open(..., O_RDWR)
[5] parted libparted/device.c:ped_device_get() v3.2
https://git.savannah.gnu.org/cgit/parted.git/tree/libparted/device.c?h=v3.2#n149
parted libparted/arch/linux.c v3.2
https://git.savannah.gnu.org/cgit/parted.git/tree/libparted/arch/linux.c?h=v3.2
ped_device_get(...)
ped_architecture->dev_ops->_new(...) = linux_new()
init_ide(...)
init_scsi(...)
init_generic(...)
ped_device_open(...)
ped_architecture->dev_ops->open(...) = linux_open(...)
open(..., O_RDWR)
[6] libparted: Use read only when probing devices on linux (#1245144)
http://git.savannah.gnu.org/cgit/parted.git/commit/?id=44d5ae0115c4ecfe3158748309e9912c5aede92d
[7] parted libparted/arch/linux.v v3.6
http://git.savannah.gnu.org/cgit/parted.git/tree/libparted/arch/linux.c?h=v3.6#n1660
1660 static void
1661 _flush_cache (PedDevice* dev)
...
1673 for (i = 1; i < lpn; i++) {
...
1680 if (!_partition_is_mounted_by_path(name)) {
1681 fd = open (name, WR_MODE, 0);
Closes #259 - Trying to deactivate LVM PV fails
2024-08-25 13:19:09 -06:00
|
|
|
echo " Need explicit flush for device coherency"
|
|
|
|
echo " workaround? : $need_explicit_flush_workaround"
|
2014-08-10 15:35:27 -06:00
|
|
|
echo " Enable online resize support? : $enable_online_resize"
|
2010-03-01 11:04:17 -07:00
|
|
|
echo ""
|
2012-03-03 11:47:39 -07:00
|
|
|
echo " If all settings are OK, type make and then (as root) make install"
|
|
|
|
echo "========================================================================"
|