Commit Graph

4159 Commits

Author SHA1 Message Date
Mike Fleetwood 81c2271311 Recognise NBDs (Network Block Devices) (#247)
Network Block Devices are not displayed in GParted as partitionable
devices.  They do appear in /proc/partitions, are reported by
fdisk -l [1] and by ped_device_probe_all() from libparted.  Therefore
include them.

Create NBD device for testing:
    # truncate -s 1G /tmp/disk-1G.img
    # nbd-server -C /dev/null 9000 /tmp/disk-1G.img
    # nbd-client localhost 9000 /dev/nbd0

After creating a couple of partitions for testing, the contents of
/proc/partitions looks like this:
    # egrep 'name|nbd' /proc/partitions
    major minor  #blocks  name
      43        0    1048576 nbd0
      43        1     262144 nbd0p1
      43        2     785408 nbd0p2

Listing all disks using fdisk:
    # fdisk -l
    ...

    Disk /dev/nbd0: 1 GiB, 1073741824 bytes, 2097152 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: dos
    Disk identifier: 0x081b1cd1

    Device      Boot  Start     End Sectors  Size Id Type
    /dev/nbd0p1        2048  526335  524288  256M 83 Linux
    /dev/nbd0p2      526336 2097151 1570816  767M 83 Linux

Temporarily apply this patch to GParted so that it ignores the devices it
currently selects from /proc/partitions to use what get_device_probe_all()
reports.  GParted shows NBDs.
    $ git diff --unified=1
    diff --git a/src/GParted_Core.cc b/src/GParted_Core.cc
    index 1629f94f..abea7a0b 100644
    --- a/src/GParted_Core.cc
    +++ b/src/GParted_Core.cc
    @@ -172,3 +172,3 @@ void GParted_Core::set_devices_thread( std::vector<Device> * pdevices )
            //try to find all available devices if devices exist in /proc/partitions
    -       std::vector<Glib::ustring> temp_devices = Proc_Partitions_Info::get_device_paths();
    +       std::vector<Glib::ustring> temp_devices;
            if ( ! temp_devices .empty() )

Tidy-up NBD device:
    # nbd-client -d /dev/ndb0
    # killall nbd-server
    # rm /tmp/disk-1G.img

[1] man fdisk
    "-l, --list
        List the partition tables for the specified devices and then
        exit.  If no devices are given, the devices mentioned in
        /proc/partitions (if this file exists) are used.
    "

Closes #247 - GParted does not list NBD (Network Block Device) devices
              in the GUI
2024-03-17 15:44:34 +00:00
Aurimas Černius a45b6c178b Update Lithuanian translation 2024-03-16 21:00:26 +00:00
Martin 267e21463d Update Slovenian translation 2024-03-09 12:37:55 +00:00
Rūdolfs Mazurs 87419c2d99 Update Latvian translation 2024-03-02 17:03:56 +00:00
Curtis Gedak b63bcd17b5 Append -git to version for continuing development 2024-02-26 09:34:30 -07:00
Curtis Gedak ce61e1ee5a ========== gparted-1.6.0 ========== 2024-02-26 09:18:39 -07:00
Curtis Gedak e02f628569 Update copyright years 2024-02-26 09:15:09 -07:00
Mike Fleetwood 16c2533af0 Document future Debian/Ubuntu build time dependency in README (!121)
When preparing the GParted Live 1.6.0 distribution, which is based on
Debian unstable ("sid"), compiling GParted failed like this:
    $ make
    ...
    /usr/bin/msgfmt --desktop --template gparted.desktop.in -d ./po -o gparted.desktop
    chmod +x gparted
    /usr/bin/msgfmt --xml --template org.gnome.gparted.policy.in -d ./po -o org.gnome.gparted.policy
    /usr/bin/msgfmt: cannot locate ITS rules for org.gnome.gparted.policy.in
    make[3]: *** [Makefile:1060: org.gnome.gparted.policy] Error 1
    make[3]: *** Waiting for unfinished jobs....
    make[3]: Leaving directory '/root/gparted/gparted-1.6.0-beta1'
    make[2]: *** [Makefile:618: all-recursive] Error 1
    make[2]: Leaving directory '/root/gparted/gparted-1.6.0-beta1'
    make[1]: *** [Makefile:452: all] Error 2
    make[1]: Leaving directory '/root/gparted/gparted-1.6.0-beta1'
    dh_auto_build: error: make -j16 returned exit code 2
    make: *** [debian/rules:9: build] Error 25
    dpkg-buildpackage: error: debian/rules build subprocess returned exit
    status 2
    debuild: fatal error at line 1184:
    dpkg-buildpackage -us -uc -ui failed

This was also previously reported in the GParted Forum [1].  Future
Debian 13 ("trixie") and Ubuntu 24.04 LTS ("nobel") releases have moved
the needed gettext translation rules for .policy XML files:
    /usr/share/gettext/its/policy.its
    /usr/share/gettext/its/policy.loc
to new package libpolkit-gobject-1-dev not installed by default.
Document this new build time dependency.

Also see commits [2][3] where the equivalent change was needed in the
Alpine Linux and CentOS continuous integration images.

[1] GParted forum / [SOLVED] Unable to build "msgfmt: cannot locate ITS
    rules for org..."
    http://gparted-forum.surf4.info/viewtopic.php?id=18136
[2] 57ae8f888b
    Fix .policy file translation failure in Alpine Linux CI image (!107)
[3] 8450d8c605
    Fix .policy file translation failure in CentOS CI image (!107)

Closed !121 - Document future Debian/Ubuntu build time dependency in
              README
2024-02-25 19:21:42 +00:00
Cheng-Chia Tseng 8b5493c891 Update Chinese (Taiwan) translation 2024-02-10 17:33:12 +00:00
Mike Fleetwood 2a8ec0e4bb Remove final namespace qualifiers from use of GParted's own enums
... because it is not necessary and clutters the code.
2024-02-08 16:19:20 +00:00
Mike Fleetwood adca4d4089 Remove optional desktop filemanager dependency from README
... now Attempt Data Rescue has been removed and GParted no longer has
code to show "file:/tmp/gparted-roview-XXXXXX" URIs.  Missed in earlier
commit:
    8ce9074ac6
    Remove Attempt Data Rescue and use of gpart (!118)
2024-02-08 16:19:20 +00:00
Mike Fleetwood 3b5cc486bf Rename Makefile.am variables to APPSTREAM*/appstream* (#241)
As the AppStream 1.0 [1] specification no longer describes them as
appdata files, but instead as metainfo files, rename the Makefile.am
variables for consistency with the name of the standard.

[1] AppStream 1.0
    https://www.freedesktop.org/software/appstream/docs/index.html

Closes #241 - Move appstream metadata out of legacy path
2024-02-08 16:19:20 +00:00
Mike Fleetwood 6da0d61f07 Install AppStream file into ${datadir}/metainfo (#241)
AppData files always were a subset of the AppStream specification
[1][2].  AppStream 0.12 specification [3] onwards says the metainfo
files will be found when placed in /usr/share/metainfo/ *AND* that
/usr/share/appdata/ is a legacy location *AND* a future release of
AppStream will likely drop support for it [4].

Debian 10, RHEL 7 and Ubuntu 18.04 LTS distributions all have the
/usr/share/metainfo/ directory containing application .appdata.xml and
.metainfo.xml files.  Ubuntu 16.04 LTS does not have the directory
despite the AppStream specification [3] claiming it does.  As old
supported distributions do have the directory, unconditionally update
this.

For reference are these commits in projects GNOME System Monitor [4] and
Evince [5] from 2017 making the same change.

[1] AppData Specification [circa 2016]
    https://web.archive.org/web/20160903181519/https://people.freedesktop.org/~hughsient/appdata/
    "Rather than create a new schema from scratch, we'll be using a
    subset of the AppStream metadata proposal.

    Applications wishing to have long descriptions, screenshots and
    other useful things are required to ship one or more files in
    /usr/share/appdata/%{id}.appdata.xml.
    "
[2] AppStream 0.4, 2.2 AppData XML files [circa 2013]
    https://web.archive.org/web/20131204004054/http://www.freedesktop.org/software/appstream/docs/sect-AppStream-Metadata-AppData.html
[3] AppStream 0.12, 2.1.2 Filesystem locations [circa 2020]
    https://web.archive.org/web/20200615042130/https://www.freedesktop.org/software/appstream/docs/chap-Metadata.html#spec-component-location
    "2.1.2 Filesystem locations

    Upstream projects can ship one or more metainfo files in
    /usr/share/metainfo/%{id}.metainfo.xml, where id is a unique
    identifier of this specific component.

    (>) Note
    Component metadata of type desktop-application as described in
    Section 2.2, "Desktop Applications" can be installed with an
    .appdata.xml extension as well for historical reasons.  AppStream
    implementations will read the XML files as long as they end up in
    the right location on the filesystem.

    (!) Important: Legacy Path
    AppStream tools scan the /usr/share/appdata/ path for legacy
    compatibility as well.  It should not be used anymore by new
    software though, even on older Linux distributions (like RHEL 7 and
    Ubuntu 16.04 LTS) the metainfo path is well supported.  Support for
    the legacy path will likely be dropped completely with a future
    AppStream 1.0 release.
    "
[4] [GNOME System Monitor] Install appdata to the new location
    (bgo#790146)
    43dc057771
[5] [Evince] build: Install appstream metadata to non-deprecated
    location
    8cae24ea48

Closes #241 - Move appstream metadata out of legacy path
2024-02-08 16:19:20 +00:00
Daniel Rusek b602a73e59 Update Czech translation 2024-02-07 14:22:06 +00:00
Daniel Mustieles f4b0cdfbe6 Updated Spanish translation 2024-01-30 10:15:22 +01:00
Fran Dieguez 836cb11f95 Update Galician translation 2024-01-26 10:19:25 +00:00
Danial Behzadi 26151e26b3 Update Persian translation 2024-01-20 11:59:38 +00:00
Anders Jonsson 3f1ada096a Update Swedish translation 2023-12-28 18:53:27 +00:00
Juliano de Souza Camargo 548645b1c6 Update Brazilian Portuguese translation 2023-11-30 16:41:34 +00:00
Mike Fleetwood 5a6b8afc53 Refactor xfs::set_used_sectors() into if fail return early pattern (!119)
Closes !119 -  Tidy-ups for file system interface classes
2023-10-29 15:50:43 +00:00
Mike Fleetwood a603828275 Refactor reiserfs::set_used_sectors() into if fail return early pattern (!119)
Closes !119 -  Tidy-ups for file system interface classes
2023-10-29 15:50:43 +00:00
Mike Fleetwood 1f72c5f0e5 Refactor reiser4::set_used_sectors() into if fail return early pattern (!119)
Closes !119 -  Tidy-ups for file system interface classes
2023-10-29 15:50:43 +00:00
Mike Fleetwood 9364923d4a Refactor nilfs2::set_used_sectors() into if fail return early pattern (!119)
Closes !119 -  Tidy-ups for file system interface classes
2023-10-29 15:50:43 +00:00
Mike Fleetwood e565215a74 Refactor ext2::set_used_sectors() into if fail return early (!119)
... code pattern.  This is to make the code easier to understand by not
having to remember if condition context for indented code over longer
distances.  This has been done before.  Here are just 2 examples:

[1] 75bda733bb
    Refactor run_blkid_load_cache() into if fail return early (#131)
[2] 407e0ac6e3
    Refactor fat16::read_label() into if fail return early pattern (!104)

Closes !119 -  Tidy-ups for file system interface classes
2023-10-29 15:50:43 +00:00
Mike Fleetwood 5eef90497b Remove now unused T, N & S FileSystem member variables (!119)
Now those member variables are unused remove them.

Closes !119 -  Tidy-ups for file system interface classes
2023-10-29 15:50:43 +00:00
Mike Fleetwood 9c6ea6457e Stop using member variables T, N & S in xfs class (!119)
Restructure the variable parsing code into "if leading text found then
scan the number" pattern.

Closes !119 -  Tidy-ups for file system interface classes
2023-10-29 15:50:43 +00:00
Mike Fleetwood 43a17ecd66 Stop using member variables T, N & S in reiserfs class (!119)
Restructure the variable parsing code into "if leading text found then
scan the number" pattern.

Anchor leading text matches to the start of a new line in the output.

Closes !119 -  Tidy-ups for file system interface classes
2023-10-29 15:50:43 +00:00
Mike Fleetwood 334448d25f Stop using member variables T, N & S in reiser4 class (!119)
Restructure the variable parsing code into "if leading text found then
scan the number" pattern.

Closes !119 -  Tidy-ups for file system interface classes
2023-10-29 15:50:43 +00:00
Mike Fleetwood eadb18a95d Stop using member variables T, N & S in nilfs2 class (!119)
And restructure the variable parsing code into "if leading text found
then scan the number" pattern.

Anchor leading text matches to the start of a new line in the output.

Closes !119 -  Tidy-ups for file system interface classes
2023-10-29 15:50:43 +00:00
Mike Fleetwood c7faeeeead Stop using member variables T & N in linux_swap, luks & lvm2_pv classes (!119)
Closes !119 -  Tidy-ups for file system interface classes
2023-10-29 15:50:43 +00:00
Mike Fleetwood ef3e1d1cce Stop using member variables T, N & S in ext2 class (!119)
FileSystem member variables T, N & S are being used like local variables
in many of the file system specific set_used_sectors() methods.  They
are only used within each set_used_sectors() call and not used to
represent persistent information of a FileSystem interface class or to
pass information between separate methods.  Therefore stop using them
and replace them with local variables instead.

This block of code finds a field in the output and scans the number:
    Glib::ustring::size_type index = output.find("Block count:");
    if (index >= output.length() ||
        sscanf(output.substr(index).c_str(), "Block count: %lld", &T) != 1)
            T = -1;
The if statement says "if leading text is not found or scanning the
number fails then assign -1".  A sequence of two negatives leading to
assigning an error value is hard to understand.  Instead this an
equivalent block from btrfs::set_used_sectors():
    long long total_bytes = -1;
    Glib::ustring::size_type index = output.find("\ntotal_bytes");
    if (index < output.length())
            sscanf(output.substr(index).c_str(), "\ntotal_bytes %lld", &total_bytes);
This assigns a default error value and the if statement says "if leading
text found then scan the number".  Much simpler to understand.
Therefore change the code around to use this same pattern.

Anchor the leading text matches to the start of a new line in the
output where possible.  Just because it's what some of the other file
system's set_used_sectors() methods do (btrfs, reiser4 and xfs) and it
seems like more robust text matching.

Closes !119 -  Tidy-ups for file system interface classes
2023-10-29 15:50:43 +00:00
Mike Fleetwood 92dfbac0d1 Stop using floating point calculation in most FS set_used_sectors() methods (!119)
Replace floating point calculation to convert size and space figures
from file system block sized units to sectors with an integer
calculation.  Do this for the same reasons discussed in commit "Stop
using floating point calculations in FS resize() methods" earlier in
this patchset.  This will limit the largest file system that GParted can
read the usage of to 8 EiB - 1 bytes.

There is still a floating point calculation in btrfs::set_used_sectors()
which is being left because that is apportioning used space figure
between multiple devices.

Closes !119 -  Tidy-ups for file system interface classes
2023-10-29 15:50:43 +00:00
Mike Fleetwood 10e9f14306 Reorder construction of ext2/3/4 resize command (!119)
So that it is similar to other calls to execute_command() and for grep
friendliness.

Closes !119 -  Tidy-ups for file system interface classes
2023-10-29 15:50:43 +00:00
Mike Fleetwood 1d2a02b6ec Reorder construction of nilfs2 resize command (!119)
Pass string literal containing the nilfs2 resize command to
execute_command() rather than a string variable containing the same
command.  This makes it the same as how most of the other calls to
execute_command() are written and it makes it more grep friendly.

Before:
    $ grep execute_command src/nilfs2.cc
        if ( ! Utils::execute_command( "nilfs-tune -l " + Glib::shell_quote( partition.get_path() ),
        if ( ! Utils::execute_command( "nilfs-tune -l " + Glib::shell_quote( partition.get_path() ),
        return ! execute_command( "nilfs-tune -L " + Glib::shell_quote( partition.get_filesystem_label() ) +
        if ( ! Utils::execute_command( "nilfs-tune -l " + Glib::shell_quote( partition.get_path() ),
        return ! execute_command( "nilfs-tune -U " + Glib::shell_quote( Utils::generate_uuid() ) +
        return ! execute_command( "mkfs.nilfs2 -L " + Glib::shell_quote( new_partition.get_filesystem_label() ) +
            success &= ! execute_command( "mount -v -t nilfs2 " + Glib::shell_quote( partition_new.get_path() ) +
>>          success &= ! execute_command( cmd, operationdetail, EXEC_CHECK_STATUS );
                success &= ! execute_command( "umount -v " + Glib::shell_quote( mount_point ),

After:
    $ grep execute_command src/nilfs2.cc
        if ( ! Utils::execute_command( "nilfs-tune -l " + Glib::shell_quote( partition.get_path() ),
        if ( ! Utils::execute_command( "nilfs-tune -l " + Glib::shell_quote( partition.get_path() ),
        return ! execute_command( "nilfs-tune -L " + Glib::shell_quote( partition.get_filesystem_label() ) +
        if ( ! Utils::execute_command( "nilfs-tune -l " + Glib::shell_quote( partition.get_path() ),
        return ! execute_command( "nilfs-tune -U " + Glib::shell_quote( Utils::generate_uuid() ) +
        return ! execute_command( "mkfs.nilfs2 -L " + Glib::shell_quote( new_partition.get_filesystem_label() ) +
            success &= ! execute_command( "mount -v -t nilfs2 " + Glib::shell_quote( partition_new.get_path() ) +
>>          success &= ! execute_command("nilfs-resize -v -y " + Glib::shell_quote(partition_new.get_path()) + size,
                success &= ! execute_command( "umount -v " + Glib::shell_quote( mount_point ),

Closes !119 -  Tidy-ups for file system interface classes
2023-10-29 15:50:43 +00:00
Mike Fleetwood f098ba1ec7 Stop using floating point calculations in FS resize() methods (!119)
A number of the file system specific resize() methods use floating point
calculations to convert from the new partition size in sectors to the
new file system size to be passed to the resize command in bytes or
kibibytes.  This is bad because there could be rounding errors
converting from integer to floating point, performing the calculation
and converting back.  Replace with integer only multiply and divide
calculations.  Integer division always truncates [1] which is exactly
what is needed.  The largest integer will be the size of the file system
in bytes held in a signed 64-bit long long, or Sector or Byte_Value
typedef of the same type.  This will limit the size that a file system
can be shrunk to, to 8 EiB - 1 byte.

[1] C++ Arithmetic operators
    https://en.cppreference.com/w/cpp/language/operator_arithmetic
        "the algebraic quotient of integer division is truncated towards
        zero (fractional part is discarded)"

Closes !119 -  Tidy-ups for file system interface classes
2023-10-29 15:50:43 +00:00
Sergej A 9ace657bb0 Update Russian translation 2023-10-22 16:02:03 +00:00
Florentina Mușat dc00b32260 Update Romanian translation 2023-10-21 12:29:03 +00:00
Anders Jonsson bbfec821ad Update Swedish translation 2023-10-19 11:32:28 +00:00
Alan Mortensen b5fb850dbb Update Danish translation 2023-10-12 15:24:22 +00:00
Yuri Chornoivan 78c1de74f1 Update Ukrainian translation 2023-10-05 17:43:34 +00:00
Mike Fleetwood 35e85e5b02 Write file system type as "[Encrypted] FSTYPE" to saved details
The GUI displays the file system of an open encrypted file system as
"[Encrypted] FSTYPE" [1].  However saved details just writes the file
system type as "luks".  Update saved details writing code to use the
same method the GUI currently uses [2].

[1] commit cb3cc505ce
    Display "[Encrypted] FSTYPE" in the File System column (#760080)

[2] commit bd6fc67afb
    Provide virtual Partition::get_filesystem_string() method (#774818)
2023-10-04 16:03:09 +00:00
Mike Fleetwood 1115fa2be8 Increment GParted Manual version 2023-10-04 16:03:09 +00:00
Mike Fleetwood 3d2dec2e11 Remove Attempt Data Rescue from the GParted Manual (!118)
Keep the paragraph discussing photorec and move just after testdisk is
mentioned in the Recovering Partition Tables section.

Closes !118 - Remove Attempt Data Rescue and use of gpart
2023-10-04 16:03:09 +00:00
Mike Fleetwood 8ce9074ac6 Remove Attempt Data Rescue and use of gpart (!118)
gpart scans a drive trying to guess the location of partitions when an
MBR partition table is lost [1].  However the tool is unmaintained,
takes hours or days of 100% CPU time to scan a drive and provides no
progress indication [2][3][4].  We keep recommending killing the gpart
process and using TestDisk [5] instead.

Therefore remove Device > Attempt Data Rescue and the use of gpart from
GParted.

[1] Gpart
    https://github.com/baruch/gpart
[2] Have you had a good or bad experience with Dev->Attempt Data Rescue?
    http://gparted-forum.surf4.info/viewtopic.php?id=17992
    No good, only bad experiences using gpart were reported.
[3] Gparted does not say anything
    http://gparted-forum.surf4.info/viewtopic.php?id=17749
    Forum user reported waiting 48 hours with no progress indication.
    We recommended using TestDisk.
[4] How cancel Data Rescue process?
    http://gparted-forum.surf4.info/viewtopic.php?id=18143
    Forum user reported it will take 3 days to scan their external 480GB
    drive.  We recommended using TestDisk instead.
[5] TestDisk, Data Recovery
    https://www.cgsecurity.org/wiki/TestDisk

Closes !118 - Remove Attempt Data Rescue and use of gpart
2023-10-04 16:03:09 +00:00
Mike Fleetwood 2febe04665 Replace deprecated Google Test API INSTANTIATE_TEST_CASE_P() (!117)
When compiling the tests, this warning is reported:

    $ make check
    ... warning: ...: INSTANTIATE_TEST_CASE_P is deprecated, please use INSTANTIATE_TEST_SUITE_P [-Wdeprecated-declarations]
       static_assert(::testing::internal::InstantiateTestCase_P_IsDeprecated(), \
                                          ^
    test_SupportedFileSystems.cc:625:1: note: in expansion of macro 'INSTANTIATE_TEST_CASE_P'

Google Test 1.10.0 release notes [1] say:
    High Level Changes:
    This release deprecated "....TEST_CASE" API in favor of
    "....TEST_SUITE".  In a nutshell if you have code that uses
    something like "INSTANTIATE_TYPED_TEST_CASE_P " - this and all other
    "*_TEST_CASE " are now deprecated in favor of more standard
    _TEST_SUITE.

Replace the deprecated API with the new API.

[1] Google Test release v1.10.0
    https://github.com/google/googletest/releases/tag/release-1.10.0

Closes !117 - Require C++11 compilation
2023-09-23 15:30:15 +00:00
Mike Fleetwood 1ccb782156 Update to Google Test 1.10.0 (!117)
So far GParted includes Google Test 1.8.1 [1], which was the latest
release which supported pre-C++11 compilers [2].  Now that GParted
requires C++11 compilation, update to Google Test 1.10.0.  Replace the
following files and directories from Google Test 1.10.0:
    LICENSE
    README.md
    include/
    src/
Note the LICENSE file is identical, where as the other files have
changed.  This includes file additions and removals, hence the change
to Makefile.am too.

Even though Google Test releases up to and including 1.12.1 are
compilable with C++11 compilers [3], it is not possible to upgrade
beyond Google Test 1.10.0 at this time because later releases fail to
compile on on still supported RHEL / CentOS 7 with this error:

    $ cd lib/gtest
    $ make check
    ...
    ./include/gtest/gtest-matchers.h:414:12: error: 'is_trivially_copy_constructible' is not a member of 'std'
                std::is_trivially_copy_constructible<M>::value &&
                ^

This failure turns out to be because GCC libstdc++ 4.8.5 doesn't include
is_trivially_copy_constructible et al [4][5].

[1] commit 2b222978f5
    Update to Google Test 1.8.1
[2] Google Test release v1.8.1
    https://github.com/google/googletest/releases/tag/release-1.8.1
    "The 1.8.x is the last release supporting pre-C++11 compilers."
[3] Google Test release v1.12.1
    https://github.com/google/googletest/releases/tag/release-1.12.1
    "This will be the last release to support C++11.  Future releases
    will require at least C++14."
[4] 'is_trivially_copyable' is not a member of 'std'
    https://stackoverflow.com/questions/25123458/is-trivially-copyable-is-not-a-member-of-std/25123551#25123551
    "Some of them are not implemented.  If we look at libstdc++'s C++11
    status page:
    Type properties are listed as partially implemented.
    They list as missing:
    ...
    is trivially_copy_constructible
    "
[5] The GNU C++ Library, 1. Status, C++11
    https://gcc.gnu.org/onlinedocs/gcc-4.8.3/libstdc++/manual/manual/status.html#status.iso.2011
    "
    | Section  | Description     | Status  | Comments
    ...
    | 20.9.4.3 | Type properties | Partial | Missing
    is_trivially_copyable, is_trivially_constructible,
    is_trivially_default_constructible, is_trivially_copy_constructible,
    is_trivially_move_constructible, is_trivially_assignable,
    is_trivially_default_assignable, is_trivially_copy_assignable,
    is_trivially_move_assignable |
    "

Closes !117 - Require C++11 compilation
2023-09-23 15:30:15 +00:00
Mike Fleetwood 3b469273de C++11: Also convert NULL to nullptr in unit tests (!117)
Closes !117 - Require C++11 compilation
2023-09-23 15:30:15 +00:00
Mike Fleetwood 40665913bf C++11: Convert NULL to nullptr (!117)
In C++11, nullptr [1] is the strongly typed value to use instead of the
macro NULL [2].  Use everywhere [3][4].

[1] nullptr, the pointer literal (since C++11)
    https://en.cppreference.com/w/cpp/language/nullptr
[2] NULL
    https://en.cppreference.com/w/cpp/types/NULL
[3] Bjarne Stroustrup's C++ Style and Technique FAQ, Should I use NULL
    or 0?
    https://www.stroustrup.com/bs_faq2.html#null
        "In C++, the definition of NULL is 0, so there is only an
        aesthetic difference.  I prefer to avoid macros, so I use 0.
        Another problem with NULL is that people sometimes mistakenly
        believe that it is different from 0 and/or not an integer.  In
        pre-standard code, NULL was/is sometimes defined to something
        unsuitable and therefore had/has to be avoided.  That's less
        common these days.

        If you have to name the null pointer, call it nullptr; that's
        what it's called in C++11.  Then, "nullptr" will be a keyword.
        "
[4] What is nullptr in C++? Advantages, Use Cases & Examples
    https://favtutor.com/blogs/nullptr-cpp
        "Advantages of nullptr
        ...
        Compatible: Null pointers are compatible with null pointer
        constants in the C style (such as NULL and 0).  This implies
        that old C code that uses these constants and null pointers can
        communicate with each other in C++.
        "

Closes !117 - Require C++11 compilation
2023-09-23 15:30:15 +00:00
Mike Fleetwood 6bf7668f8e Increase minimum required gtkmm to 3.18.0 (!117)
As discussed in the previous commit the oldest supported distributions
now provide gtkmm versions higher that 3.18.0 (which requires C++11
compilation).  Therefore increase the minimum required version to gtkmm
3.18.0.  This allows removal of HAVE_LABEL_SET_XALIGN autoconf
definition and associated fallback code.

Closes !117 - Require C++11 compilation
2023-09-23 15:30:15 +00:00
Mike Fleetwood 9f473b70cb Always require C++11 compilation (!117)
All the oldest supported distributions now have versions of GTK C++
libraries which require C++11 compilation, therefore forcing GParted to
require C++11 compilation [1][2][3].  Fragment of existing ./configure
output which lists the library versions requiring C++11 compilation:

    $ ./configure
    ...
    checking for glibmm >= 2.45.40 which requires C++11 compilation... yes
    checking for libsigc++ >= 2.5.1 which requires C++11 compilation... yes
    checking for gtkmm >= 3.18.0 which requires C++11 compilation... yes
    checking whether g++ supports C++11 features with -std=gnu++11... yes

The oldest supported distributions and their versions of GTK C++
libraries and GCC compiler:

    Distribution        gtkmm    glibmm   libsigc++   gcc

    Debian 10           3.24.0   2.58.0   2.10.1      4.8.3
    RHEL / CentOS 7.9   3.22.2   2.56.0   2.10.0      4.8.5
    SLES 12 SP5         3.20.1   2.48.1   2.8.0       4.8
    Ubuntu 20.04 LTS    3.24.2   2.64.2   2.10.2      9.3.0

Technically GCC didn't have full C++11 support until GCC 4.8.1 [6] and
SLES 12 SP5 only has GCC 4.8 (as well as many later versions of GCC).
However which ever version of the GCC compiler is being used to compile
the GTK C++ libraries it must have all the features needed to compile
those libraries.

Simplify the configure script and just always require a C++11 capable
compiler.  This also allows the use of C++11 features in the GParted
code.

[1] commit cc0740148e
    port-to-gtk3: Switch to Gtkmm3 (#7)
[2] commit 707bae6fed
    Enable C++11 compilation when using libsigc++ 2.5.1 and later (#758545)
[3] commit d6d7cb2bbf
    Enable C++11 compilation when using glibmm 2.45.40 and later (#756035)
[4] SUSE Product Support Lifecycle, SUSE Linux Enterprise Server 12
    https://www.suse.com/lifecycle/#suse-linux-enterprise-server-12
[5] SUSE package search
    https://scc.suse.com/packages?name=SUSE%20Linux%20Enterprise%20Server&version=12.5&arch=x86_64&query=&module=
[6] C++ Standards Support in GCC, C++11 Support in GCC
    https://gcc.gnu.org/projects/cxx-status.html#cxx11

Closes !117 - Require C++11 compilation
2023-09-23 15:30:15 +00:00