summaryrefslogtreecommitdiff
path: root/Makefile.am
Commit message (Collapse)AuthorAgeFilesLines
* libnm: test that Gir data matches actual exportslr/unbreak-girLubomir Rintel2022-11-081-1/+10
| | | | | | | This verifies that what's in our public headers has version nodes, and that they match Since: tags. Not pretty (because python) but discovered a *lot* of issues.
* Makefile.am: tidy up the introspection conditional partLubomir Rintel2022-11-081-18/+18
| | | | | | | | | | | | | Use of conditionals in makefiles needs to be kept to a necessary minimum otherwise they get out of hand quickly. There's no indentation to aid reading and conditional chunks longer than a screen and nested ones are almost impossible to comprehend. The "if HAVE_INTROSPECTION" part does both. Let's make it a little less horrible. There's generally no point in making unused targets or variable assignment unless they collide with pre-built stuff or have multiple variants.
* libnm: generate "gen-metadata-nm-settings-libnm-core.xml" with meta dataThomas Haller2022-10-311-0/+49
| | | | | | | | | | | | libnm-core-impl has lots of internal meta data about the properties. In particular, which properties exist (their names), and their D-Bus type. We should use this information for our manual pages. For example, currently `man nm-settings-dbus` has nonsense like: "Value Type: array of string", when it should be reall "as". In a first step, generate an XML with that meta data for later use.
* nmcli: rename "generate-docs-nm-settings-nmcli" to ↵Thomas Haller2022-10-311-19/+19
| | | | | | | | | | "gen-metadata-nm-settings-nmcli" This is the better name, becuse this is not in particular about "docs". It's about generating an XML with the information from the settings meta data for nmcli. We will do something similar with the libnm-core meta data.
* build: pass both filenames to "tools/check-compare-generated.sh" scriptThomas Haller2022-10-311-2/+2
| | | | | | | | It just feels nicer to be explicit about the filenames and not rely on a specific naming. Also, in meson we can directly pass the target as argument, which expands to the filename but also adds a dependency.
* build/autotools: adjust hack for gettext() for other Makefile versionsThomas Haller2022-10-281-1/+2
| | | | | | | On rhel-8.7, we use a different gettext version, so the Makefile looks different. Adjust patch the source. Fixes: 7ee0da3eaffd ('build: don't "update-po" during make dist')
* lldp/systemd: remove systemd LLDP sourcesThomas Haller2022-10-251-8/+0
| | | | They are no longer used. We use now libnm-llpd instead.
* lldp: use new libnm-lldp instead of systemd's sd_lldp_rxThomas Haller2022-10-251-0/+1
|
* lldp: add libnm-lldp as fork of systemd's sd_lldp_rxThomas Haller2022-10-251-0/+30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We currently use the systemd LLDP client, which we consume by forking systemd code. That is a maintenance burden, because it's not a self-contained, stable library that we use. Hence there is a need for an individual library or properly integrating the fork in our tree. Optimally, we would create a new nettools project with an LLDP library. That was not done because: - nettools may want to be dual licensed with LGPL-2.1+ and Apache. Systemd code is LGPL-2.1+ so it is fine for NetworkManager but possibly not for nettools. - nettools provides independent librares, as such they don't have an event loop, instead they expose an epoll file descriptor and the user needs to integrate it. Systemd and NetworkManager on the other hand have their established event loop (sd_event and GMainContext, respectively). It's simpler to implement the library on those terms, in particular porting the systemd library from sd_event to GMainContext. - NetworkManager uses glib and has various helper utils. While it's possible to do without them, it's more work. The main reason to not write a new NetworkManager-agnostic library from scratch, is that it's much simpler to fork the systemd library and make it part of NetworkManager, than making it a nettools library. Do it.
* glib-aux: add NMPrioq priority queue (heap)Thomas Haller2022-10-251-0/+2
| | | | | | | | | | | | | | | | | | | Taken from systemd's "Prioq". Differences from Prioq: - It is glib-ized, so certain operations cannot fail since g_malloc() never fails. - Unlike Prioq, this structure is stack allocated. I think that makes sense, because we basically always want to embed the data structure in another object. There is never a need for passing this around as a pointer. And if you really want, you can box it yourself. - The queue either accepts a GCompareFunc or a GComareDataFunc. This is for convenience. The prioq_ensure_allocated() and prioq_ensure_put() consequently are dropped, as they would be cumbersome with this pattern and don't seem useful.
* systemd: drop invalid "user-util.h" compat headerThomas Haller2022-10-041-1/+1
| | | | | We included the original "user-util.h" header. There must be no compat header.
* core: add NMBondManager to handle NTF rules for balance-slb (MLAG)Thomas Haller2022-10-041-0/+2
|
* build: don't "update-po" during make distThomas Haller2022-10-031-0/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Instead, hack gettext's Makefile. gettext has an issue with parallel make. See [1] and [2]. Reproduce with: git reset --hard && git clean -fdx && NOCONFIGURE=yes ./autogen.sh && ./configure --enable-gtk-doc --enable-introspection && make -j distcheck V=1 We worked around this by setting "DIST_DEPENDS_ON_UPDATE_PO = yes", however that (obviously) results in regenerating source files during dist. "Source files" in the sense that the po files are commited to git and get distributed in the release. Doing this is very ugly. In particular it's ugly, because `make -C po update-po` is not reproducible and the output depends on the current time (*had one job*). Otherwise, we could just regenerate the files before doing a release. This means, running "release.sh" script ends up with a dirty tree afterwards. Also, the distributed po files are not the ones from the source tree when we did the release. Also, since "release.sh rc1" does two distributions (once for the rc1 and once for the next devel snapshot), the commit for the second distribution will have a large diff for the po files. This reverts commit 978d8eb69923 ('po: make dist depend on update-po') and hacks around the problem. [1] https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1094#note_1435313 [2] https://lists.gnu.org/archive/html/bug-gettext/2022-06/msg00022.html https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1405
* nmtui: add MACsec supportBeniamino Galvani2022-09-281-0/+2
|
* nmtui: introduce Nmt8021xFieldsBeniamino Galvani2022-09-281-4/+6
| | | | Introduce a new widget to edit 802.1X settings.
* platform: add "nmp-base.c" sourceThomas Haller2022-09-231-0/+1
| | | | | | | | "nmp-base.h" really should only contain simple defines like enum types or #define. As such, it almost does not need a source file. However, the enum-to-string methods for the enums of "nmp-base.h" need a place. Add "nmp-base.c" for that.
* platform: add "nmp-plobj.[hc]"Thomas Haller2022-09-231-0/+2
| | | | | | | | | | | | | | | | | | Our naming in libnm-platform is bad. We have NMPlatform, which is a cache of objects. Consequently we have platform methods like nm_platform_get_link(). We also have various other types that share the NMPlatform prefix, like NMPlatformIP4Address. For those we have nm_platform_ip4_address_to_string(). "methods" of a type should have the same prefix as the type, and we should not have types that share the same prefix. Also, "NMPlatformIP4Address" is a long name, and inconsistent with the strongly related NMPObjectIP4Address. Add new files to move and rename parts of the platform API.
* all: add src/nm-compat-headers for patching included system headersThomas Haller2022-09-231-0/+2
| | | | | | | | | | | | | | | | | | We already have src/linux-headers, where we have complete copies of linux user space headers. Of course that exists, because we want to use certain features and don't depend on the installed kernel headers. Which works well, because kernel user space API is stable, and we anyway want to support compiling against a newer kernel and run against an older (e.g. in a container). So having our copy of newer kernel headers is merely as if we compiled against as newer kernel. Add "src/nm-compat-headers" which has a similar purpose, but a different approach. Instead of replacing the included header entirely, include the system header and patch it with #define. Use this for "linux/if_addr.h". Of course, the approach here is that we no longer include <linux/if_addr.h> directly, but instead include "nm-compat-headers/linux/if_addr.h".
* build: fix regenerating "nm-property-infos-%.xml" files on changesThomas Haller2022-09-091-2/+7
| | | | | | | | | | | | | | | | Imagine checking out the loopback feature branch and building. Thereby the "src/libnm-client-impl/nm-property-infos-%.xml" files get generated and contains a `<setting name="loopback"/>`. Then switch back to `main` branch and type make again. Note that none of the "src/libnm-core-impl/nm-setting-*.c" files changed, except that "nm-setting-loopback.c" got removed. Consequently, the XML won't be regenerated and the followup steps will fail due to the leftover reference to the non-existing setting. Fix that by regenerating "nm-property-infos-%.xml" if "libnm-core-impl.la" changes.
* ipoib: skip validating the DEVICE when reading the ifcfg fileWen Liang2022-09-071-0/+1
| | | | | | | | | | For the ipoib connection, it is still considered as valid if the profile does not set the device name. Also, the ifcfg reader should not duplicate the checks that `nm_connection_verify()` performs (especially not wrongly). Therefore, NM should skip validating the DEVICE when reading the ifcfg file for the ipoib connection. https://bugzilla.redhat.com/show_bug.cgi?id=2122703
* glib-aux: add "libnm-glib-aux/nm-inet-utils.h"Thomas Haller2022-08-251-0/+2
|
* build: wrap lines in Makefile.am for "vapi/libnm.vapi"Thomas Haller2022-08-081-1/+5
|
* crypto: support EC private keysGeorg Müller2022-08-041-0/+4
| | | | https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1324
* platform: rename file "nmp-route-manager.[hc]" to "nmp-global-tracker.[hc]"Thomas Haller2022-07-261-2/+2
|
* libnm-client: Add public nm_conn_wireguard_import() funcChristian Glombek2022-07-211-0/+2
| | | | | | | | | | | | This commit moves the `nm_vpn_wireguard_import()` function implementation from `libnmc-base` to `libnm-client-impl`, renaming it to `nm_conn_wireguard_import()`. A new `nm_conn_utils` header file is added in `libnm-client-public`. https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/1031 https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1299
* linux-headers: include "mptcp.h" kernel headerThomas Haller2022-07-201-1/+2
| | | | Taken from v5.18, 4b0986a3613c ('Linux 5.18') from 20220522.
* doc: preserve paraghraphs in nmcli man pagesVojtech Bubela2022-07-151-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | | Improve documentation by preserving paragraphs in the nm-settings-nmcli man pages. To do that structure of src/libnm-client-impl/nm-settings-docs-gir.xml was changed to have "description" as subnode to property node instead of attribute of property node. Another subnode "description-docbook" was added - this node is then used when generating man pages. tools/generate-docs-nm-settings-docs-gir.py and man/nm-settings-dbus.xsl were also changed to accomodate for changes mentioned above. Replace xsltproc tool with python script when generating ./src/libnmc-setting/settings-docs.h. Deleted settings-docs.xsl since it was replaced by python script. Change src/libnmc-setting/settings-docs.h.in accodring to newly generated src/libnmc-setting/settings-docs.h https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/661 https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1260
* systemd: merge branch systemd into mainThomas Haller2022-07-071-2/+6
|\ | | | | | | https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1291
* | build: stop relying on intltool for i18nMartin Blanchard2022-06-271-7/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Recent gettext version can extract and merge back strings from and to various file formats, no need for intltool anymore. https://wiki.gnome.org/Initiatives/GnomeGoals/GettextMigration https://gitlab.freedesktop.org/NetworkManager/NetworkManager/issues/133 https://github.com/NetworkManager/NetworkManager/pull/303 https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/96 Clarification about the use of AM_GNU_GETTEXT_REQUIRE_VERSION: In configure.ac, specify the minimum gettext version we require, rather than the exact one. This fixes a situation where the autoconf macros used for gettext will be the latest available on the system (for example, 0.20); but the copied-in Makefile.in.in will be for the exact version specified in configure.ac (in this case, 0.19). In that situation, the gettext build rules will error out at `make` time with the message: *** error: gettext infrastructure mismatch: using a Makefile.in.in from gettext version 0.19 but the autoconf macros are from gettext version 0.20 Avoid that by specifying a minimum version dependency rather than an exact one. This should not cause problems as we haven’t committed any generated or external gettext files into git, so each developer will end up regenerating the build system for their system’s version of gettext, as expected. See the subsection of https://www.gnu.org/software/gettext/manual/html_node/Version-Control-Issues.html for more information. Note that autoreconf currently doesn’t recognise AM_GNU_GETTEXT_REQUIRE_VERSION, so we must continue also using AM_GNU_GETTEXT_VERSION. autopoint will ignore the latter if the former is present. See https://lists.gnu.org/archive/html/autoconf-patches/2015-10/msg00000.html. [lkundrak@v3.sk: Fixed the meson build, adjusted autogen.sh: droped "|| exit 1", dropped call to aclocal, dropped --copy from gtkdocize.]
* | ifcfg-rh: add support for ipv4.link-localAdrian Freihofer2022-05-271-0/+1
| |
* | libnm: replace nm-types.h by defining the types in respective headersLubomir Rintel2022-05-061-1/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The typedefs in nm-types.h confuse gtkdoc-scan. It generates a libnm-sections.txt file like this: <SECTION> <FILE>nm-types</FILE> <TITLE>NMDeviceOvs</TITLE> NMAccessPoint NMActiveConnection NMCheckpoint NMClient NMDevice ... Note the wrongly picked title and, more importantly, the object types in a bogus section. This in turn makes gtkdoc-mkdb fail to include the property and signal documentation in appropriate sections. Without nm-types.h, we need to mind the header dependencies. This means that we need to order the headers that define types before the ones that use them. Also, we need to break the depencency loops in few palces.
* | systemd: drop "nm-sd-utils-core.h" and nm_sd_utils_id128_get_machine()Thomas Haller2022-04-201-2/+0
| | | | | | | | | | | | | | | | | | | | | | | | This was only for unit testing, to check whether our reader for "/etc/machine-id" agrees with systemd's. That unit test was anyway flawed, because it actually accesses the machine-id on the test system. Anyway. Drop this. Most likely our parser is good enough, and if we get a bug report with a defect, we can unit test against that.
* | client/test: add test for --offline behaviorlr/nmcli-offlineLubomir Rintel2022-04-191-0/+1
| | | | | | | | | | Currently, only "add" and negative cases are tested. Testing "modify" would require an ability to provide input. Perhaps at some later point.
* | dns/unbound: drop deprecated "unbound" DNS pluginThomas Haller2022-04-151-2/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The "unbound" DNS plugin was very rudimentary and is deprecated since commit 4a2fe09853cd ('man: mark [main].dns=unbound as deprecated') (Jun 2021). It is part of dnssec-trigger tool, but the dnssec-trigger tool doesn't actually use it. Instead it installs a dispatcher script "/usr/lib/NetworkManager/dispatcher.d/01-dnssec-trigger". Especially, since the plugin requires "/usr/libexec/dnssec-trigger-script", which is provided by "dnssec-trigger" package on Fedora. At the same time, the package provides the dispatcher script. So I don't this works or anybody is using this. https://mail.gnome.org/archives/networkmanager-list/2022-April/msg00002.html
* | dhcp/systemd: drop dhcp4 client (and related files)Thomas Haller2022-04-141-15/+0
| | | | | | | | This code is now unused.
* | dhcp: drop internal systemd DHCPv4 clientThomas Haller2022-04-141-2/+0
| | | | | | | | | | | | | | | | | | | | This is long replaced by nettools' n-dhcp4 client. Drop it. We still require NMDhcpSystemd for the DHCPv6 client. Note that "[main].dhcp=systemd" now falls back to the internal client. But this option was undocumented and internal anyway.
* | build/autotools: avoid compiler warning generating "NM-1.0.gir"Thomas Haller2022-04-071-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We passed on the CFLAGS, but they also contain "-DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_40 -DGLIB_VERSION_MAX_ALLOWED=GLIB_VERSION_2_40" which causes compiler warnings: GISCAN src/libnm-client-impl/NM-1.0.gir /data/src/NetworkManager/tmp-introspect_17ddrdb/NM-1.0.c: In function ‘dump_object_type’: /data/src/NetworkManager/tmp-introspect_17ddrdb/NM-1.0.c:251:13: warning: Not available before 2.70 251 | if (G_TYPE_IS_FINAL (type)) | ^~~~~~~~~~~~~~~~~ /data/src/NetworkManager/tmp-introspect_17ddrdb/NM-1.0.c: In function ‘dump_fundamental_type’: /data/src/NetworkManager/tmp-introspect_17ddrdb/NM-1.0.c:369:13: warning: Not available before 2.70 369 | if (G_TYPE_IS_FINAL (type)) | ^~~~~~~~~~~~~~~~~ Filter them out. See-also: https://gitlab.gnome.org/GNOME/gobject-introspection/-/merge_requests/331
* | systemd: merge branch systemd into mainThomas Haller2022-04-051-0/+2
|\ \ | |/ | | | | https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1178
* | build: drop "check-python-black" check from autotoolsThomas Haller2022-04-011-6/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously, autotools would detect whether we have "black" in the path. And if so, it would check formatting during `make check`. That's problematic. When I run `./contrib/fedora/rpm/build_clean.sh -w test` in certain cases, it would pick up black, but then fail with Traceback (most recent call last): File "/usr/bin/black", line 5, in <module> from black import patched_main File "/usr/lib/python3.6/site-packages/black.py", line 42, in <module> from attr import dataclass, evolve, Factory ModuleNotFoundError: No module named 'attr' make[3]: *** [Makefile:21658: check-python-black] Error 1 That's an installation error of black, but still, during package build there is no need to check the formatting. We could export `NMTST_SKIP_PYTHON_BLACK=1` to prevent it, but it's still unnecessary. We check proper formatting in gitlab-ci. That is enough, it doesn't need to run during `make check`. In particular, because `black .` takes 1.5 seconds on my machine.
* | build: move nm-crypto to separate directory "src/libnm-crypto"Thomas Haller2022-03-291-33/+64
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | libnm-core currently has a dependency on crypto libraries (either "gnutls", "nss" or "null"). We need this huge dependency for few cases. Move the crypto code to a separate static library"src/libnm-crypto/libnm-crypto.la". The reasoning is that it becomes clearer where we have this dependency, to use it more consciously, and to be better see how it's used. We clearly need the crypto functionality in libnm. But do we also need it in the daemon? Could we ever link the daemon without crypto libraries? The goal of splitting the crypto part out, to better understand the crypto dependency.
* | libnm-base: add "nm-base.c" for implementing stuff from "nm-base.h"Thomas Haller2022-03-291-0/+1
| |
* | doc: rename "README" to "README.md"Thomas Haller2022-03-211-0/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | By having a ".md" extension, gitlab renders a nice page instead of showing as plain text. Currently our README is pretty bad. Partly, because it doesn't get shown nicely. Rename. The file effectively was already markdown. The old file is gone. For this we also need to change the automake flavor to "foreign" (See [1]). [1] https://autotools.info/automake/options.html#automake.options.flavors
* | linux-headers: add nl80211-vnd-intel.h kernel headerEmmanuel Grumbach2022-03-071-0/+1
| | | | | | | | | | | | | | Take from include/uapi/linux/nl80211-vnd-intel.h Linux 5.17-rc5, cfb92440ee71adcc2105b0890bb01ac3cddb8507 March 1, 2022
* | man: add NetworkManager-wait-online.service.8 manualThomas Haller2022-03-021-2/+3
| | | | | | | | | | | | | | | | | | | | | | NetworkManager-wait-online is a constant source of confusion, as it seems to delay the boot (when it's often just the messenger or either a network problem, a NetworkManager misconfiguration or a misconfiguration of other systemd services). Try to clear that up with a manual page. https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1130
* | libnm-crypto: add new option for no cryptographyChristian Eggers2022-02-211-0/+18
| | | | | | | | | | | | | | For some embedded systems, no cryptography is required at all (e.g when only using Ethernet). https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1108
* | platform: rename "nmp-route-manager.h" to "nmp-rules-manager.h"Thomas Haller2022-02-091-2/+2
| |
* | priv-helper: fix D-Bus patch to not contain forbidden character '-'Thomas Haller2022-02-091-4/+4
| | | | | | | | | | | | | | | | | | | | | | "-" is not allowed as D-Bus path and interface name, and discouraged as bus name. This cause nm-priv-helper to crash, because GDBus asserts the the object path is valid. Replace the '-' with '_'. This way, it's consistent with "nm_dispatcher". Fixes: d68ab6b8f02a ('nm-sudo: rename to nm-priv-helper')
* | systemd: merge branch systemd into mainThomas Haller2022-02-031-1/+4
|\ \ | |/ | | | | https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1068
* | iwd: Add basic P2P device class for IWDAndrew Zaborowski2022-01-211-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | Similarly as with wpa_supplicant, create NMDeviceIwdP2P objects for P2P devices based on data from IWD -- not in NMWifiFactory::create_device because that is only triggered for system netdevs and a P2P-Device virtual interface has no netdev. Unlike NMDeviceWifiP2P, NMDeviceIwdP2P's iface property is a unique string that likely doesn't match any system interface name -- in theory there doesn't need to be any related netdev on the system (such as an Infrastructure-mode interface) before a P2P-Device is added. [thaller@redhat.com: modified original patch]
* | build/autotools: fix linking libnm-log-null into various executablesThomas Haller2022-01-111-0/+6
| | | | | | | | | | | | | | | | | | | | | | | | Interestingly, on RHEL9 I suddenly get a linker error: libtool: link: gcc -Wall -Werror -Wextra -Wdeclaration-after-statement -Wfloat-equal -Wformat-nonliteral -Wformat-security -Wimplicit-function-declaration -Winit-self -Wlogical-op -Wmissing-declarations -Wmissing-include-dirs -Wmissing-prototypes -Wpointer-arith -Wshadow -Wshift-negative-value -Wstrict-prototypes -Wundef -Wvla -Wno-duplicate-decl-specifier -Wno-format-truncation -Wno-format-y2k -Wno-missing-field-initializers -Wno-pragmas -Wno-sign-compare -Wno-unknown-pragmas -Wno-unused-parameter -Wno-array-bounds -Wunused-value -Wcast-function-type -Wimplicit-fallthrough -fno-strict-aliasing -fdata-sections -ffunction-sections -Wl,--gc-sections -O2 -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64-v2 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -Wl,--version-script=./linker-script-binary.ver -Wl,-z -Wl,relro -Wl,--as-needed -Wl,-z -Wl,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -o src/nm-online/.libs/nm-online src/nm-online/nm_online-nm-online.o -Wl,--export-dynamic -pthread src/libnm-client-impl/.libs/libnm.so src/libnm-client-aux-extern/.libs/libnm-client-aux-extern.a /root/NetworkManager/contrib/fedora/rpm/NetworkManager.20220111-121006.2X0NXg/BUILD/NetworkManager-1.35.3/src/libnm-client-impl/.libs/libnm.so -lgnutls -ludev src/libnm-glib-aux/.libs/libnm-glib-aux.a src/libnm-std-aux/.libs/libnm-std-aux.a src/c-siphash/.libs/libc-siphash.a -lgio-2.0 -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -pthread /usr/bin/ld: src/libnm-glib-aux/.libs/libnm-glib-aux.a(libnm_glib_aux_la-nm-time-utils.o): in function `_t_init_global_state': /root/NetworkManager/contrib/fedora/rpm/NetworkManager.20220111-121006.2X0NXg/BUILD/NetworkManager-1.35.3/src/libnm-glib-aux/nm-time-utils.c:73: undefined reference to `_nm_utils_monotonic_timestamp_initialized' collect2: error: ld returned 1 exit status make[2]: *** [Makefile:11437: src/nm-online/nm-online] Error 1 The linker is right. Fix it.