networkmanager_1.52.0.bb 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320
  1. SUMMARY = "NetworkManager is a program for providing detection and \
  2. configuration for systems to automatically connect to networks."
  3. DESCRIPTION = "NetworkManager is a program for providing detection and \
  4. configuration for systems to automatically connect to networks. \
  5. NetworkManager's functionality can be useful for both wireless and wired \
  6. networks. For wireless networks, NetworkManager prefers known wireless \
  7. networks and has the ability to switch to the most reliable network. \
  8. NetworkManager-aware applications can switch from online and offline mode. \
  9. NetworkManager also prefers wired connections over wireless ones, has support \
  10. for modem connections and certain types of VPN."
  11. HOMEPAGE = "https://wiki.gnome.org/Projects/NetworkManager"
  12. SECTION = "net/misc"
  13. LICENSE = "GPL-2.0-or-later & LGPL-2.1-or-later"
  14. LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
  15. file://COPYING.LGPL;md5=4fbd65380cdd255951079008b364516c \
  16. "
  17. DEPENDS = " \
  18. glib-2.0 \
  19. python3-pygobject-native \
  20. coreutils-native \
  21. intltool-native \
  22. libxslt-native \
  23. libnl \
  24. libnvme \
  25. udev \
  26. util-linux \
  27. util-linux-libuuid \
  28. libndp \
  29. curl \
  30. dbus \
  31. "
  32. DEPENDS:append:class-target = " bash-completion"
  33. inherit meson gettext update-rc.d systemd gobject-introspection update-alternatives upstream-version-is-even pkgconfig
  34. SRC_URI = " \
  35. git://github.com/NetworkManager/NetworkManager.git;protocol=https;branch=main;tag=${PV} \
  36. file://${BPN}.initd \
  37. file://enable-dhcpcd.conf \
  38. file://enable-iwd.conf \
  39. "
  40. SRC_URI:append:libc-musl = "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-lld', ' file://0001-linker-scripts-Do-not-export-_IO_stdin_used.patch', '', d)}"
  41. SRCREV = "995a28fa1ccc54ad22e794294c3c6783cc3f30ed"
  42. S = "${WORKDIR}/git"
  43. # ['auto', 'symlink', 'file', 'netconfig', 'resolvconf']
  44. NETWORKMANAGER_DNS_RC_MANAGER_DEFAULT ??= "auto"
  45. # ['dhclient', 'dhcpcd', 'internal', 'nettools']
  46. NETWORKMANAGER_DHCP_DEFAULT ??= "internal"
  47. # The default gets detected based on whether /usr/sbin/nft or /usr/sbin/iptables is installed, with nftables preferred.
  48. # ['', 'iptables', 'nftables']
  49. NETWORKMANAGER_FIREWALL_DEFAULT ??= "nftables"
  50. EXTRA_OEMESON = "\
  51. -Difcfg_rh=false \
  52. -Dtests=yes \
  53. -Dudev_dir=${nonarch_base_libdir}/udev \
  54. -Dlibpsl=false \
  55. -Dqt=false \
  56. -Dconfig_dns_rc_manager_default=${NETWORKMANAGER_DNS_RC_MANAGER_DEFAULT} \
  57. -Dconfig_dhcp_default=${NETWORKMANAGER_DHCP_DEFAULT} \
  58. -Diptables=${sbindir}/iptables \
  59. -Dnft=${sbindir}/nft \
  60. "
  61. # stolen from https://github.com/void-linux/void-packages/blob/master/srcpkgs/NetworkManager/template
  62. # avoids:
  63. # | ../NetworkManager-1.16.0/libnm-core/nm-json.c:106:50: error: 'RTLD_DEEPBIND' undeclared (first use in this function); did you mean 'RTLD_DEFAULT'?
  64. CFLAGS:append:libc-musl = " \
  65. -DRTLD_DEEPBIND=0 \
  66. "
  67. PACKAGECONFIG ??= "readline nss ifupdown dnsmasq nmcli \
  68. ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'systemd', bb.utils.contains('DISTRO_FEATURES', 'x11', 'consolekit', '', d), d)} \
  69. ${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'bluez5', '', d)} \
  70. ${@bb.utils.filter('DISTRO_FEATURES', 'wifi polkit ppp', d)} \
  71. ${@bb.utils.contains('DISTRO_FEATURES', 'selinux', 'selinux audit', '', d)} \
  72. ${@bb.utils.contains('DISTRO_FEATURES_BACKFILL_CONSIDERED', 'gobject-introspection-data', '', 'vala', d)} \
  73. "
  74. inherit ${@bb.utils.contains('PACKAGECONFIG', 'vala', 'vala', '', d)}
  75. PACKAGECONFIG[systemd] = "\
  76. -Dsystemdsystemunitdir=${systemd_unitdir}/system -Dsession_tracking=systemd,\
  77. -Dsystemdsystemunitdir=no -Dsystemd_journal=false -Dsession_tracking=no\
  78. "
  79. PACKAGECONFIG[polkit] = "-Dpolkit=true,-Dpolkit=false,polkit"
  80. PACKAGECONFIG[bluez5] = "-Dbluez5_dun=true,-Dbluez5_dun=false,bluez5"
  81. # consolekit is not picked by shlibs, so add it to RDEPENDS too
  82. PACKAGECONFIG[consolekit] = "-Dsession_tracking_consolekit=true,-Dsession_tracking_consolekit=false,consolekit,consolekit"
  83. PACKAGECONFIG[modemmanager] = "-Dmodem_manager=true,-Dmodem_manager=false,modemmanager mobile-broadband-provider-info"
  84. PACKAGECONFIG[ppp] = "-Dppp=true -Dpppd=${sbindir}/pppd,-Dppp=false,ppp"
  85. PACKAGECONFIG[dnsmasq] = "-Ddnsmasq=${bindir}/dnsmasq"
  86. PACKAGECONFIG[nss] = "-Dcrypto=nss,,nss"
  87. PACKAGECONFIG[resolvconf] = "-Dresolvconf=${base_sbindir}/resolvconf,-Dresolvconf=no,,resolvconf"
  88. PACKAGECONFIG[gnutls] = "-Dcrypto=gnutls,,gnutls"
  89. PACKAGECONFIG[crypto-null] = "-Dcrypto=null"
  90. PACKAGECONFIG[wifi] = "-Dwext=true -Dwifi=true,-Dwext=false -Dwifi=false"
  91. PACKAGECONFIG[iwd] = "-Diwd=true,-Diwd=false"
  92. PACKAGECONFIG[ifupdown] = "-Difupdown=true,-Difupdown=false"
  93. PACKAGECONFIG[cloud-setup] = "-Dnm_cloud_setup=true,-Dnm_cloud_setup=false"
  94. PACKAGECONFIG[nmcli] = "-Dnmcli=true,-Dnmcli=false"
  95. PACKAGECONFIG[nmtui] = "-Dnmtui=true,-Dnmtui=false,libnewt"
  96. PACKAGECONFIG[readline] = "-Dreadline=libreadline,,readline"
  97. PACKAGECONFIG[libedit] = "-Dreadline=libedit,,libedit"
  98. PACKAGECONFIG[ovs] = "-Dovs=true,-Dovs=false,jansson"
  99. PACKAGECONFIG[audit] = "-Dlibaudit=yes,-Dlibaudit=no"
  100. PACKAGECONFIG[selinux] = "-Dselinux=true,-Dselinux=false,libselinux"
  101. PACKAGECONFIG[vala] = "-Dvapi=true,-Dvapi=false"
  102. PACKAGECONFIG[dhcpcd] = "-Ddhcpcd=${base_sbindir}/dhcpcd,-Ddhcpcd=no,,dhcpcd"
  103. PACKAGECONFIG[dhclient] = "-Ddhclient=yes,-Ddhclient=no,,dhcp"
  104. PACKAGECONFIG[concheck] = "-Dconcheck=true,-Dconcheck=false"
  105. PACKAGECONFIG[adsl] = ",,"
  106. PACKAGECONFIG[wwan] = ",,"
  107. # The following PACKAGECONFIG is used to determine whether NM is managing /etc/resolv.conf itself or not
  108. PACKAGECONFIG[man-resolv-conf] = ",,"
  109. PACKAGES =+ " \
  110. libnm \
  111. ${PN}-adsl \
  112. ${PN}-bluetooth \
  113. ${PN}-cloud-setup \
  114. ${PN}-nmcli \
  115. ${PN}-nmcli-bash-completion \
  116. ${PN}-nmtui \
  117. ${PN}-wifi \
  118. ${PN}-wwan \
  119. ${PN}-ovs \
  120. ${PN}-ppp \
  121. ${PN}-daemon \
  122. "
  123. SYSTEMD_PACKAGES = "${PN}-daemon ${PN}-cloud-setup"
  124. INITSCRIPT_PACKAGES = "${PN}-daemon"
  125. NETWORKMANAGER_PLUGINDIR = "${libdir}/NetworkManager/${PV}"
  126. NETWORKMANAGER_DISPATCHERDIR = "${nonarch_libdir}/NetworkManager/dispatcher.d"
  127. SUMMARY:libnm = "Libraries for adding NetworkManager support to applications"
  128. FILES:libnm = "\
  129. ${libdir}/libnm.so.* \
  130. ${libdir}/girepository-1.0/NM-1.0.typelib \
  131. "
  132. SUMMARY:${PN}-adsl = "ADSL device plugin for NetworkManager"
  133. FILES:${PN}-adsl = "${NETWORKMANAGER_PLUGINDIR}/libnm-device-plugin-adsl.so"
  134. RDEPENDS:${PN}-adsl += "${PN}-daemon"
  135. SUMMARY:${PN}-bluetooth = "Bluetooth device plugin for NetworkManager"
  136. FILES:${PN}-bluetooth = "${NETWORKMANAGER_PLUGINDIR}/libnm-device-plugin-bluetooth.so"
  137. RDEPENDS:${PN}-bluetooth += "${PN}-daemon ${@bb.utils.contains('PACKAGECONFIG', 'bluez5', '${PN}-wwan bluez5', '', d)}"
  138. SUMMARY:${PN}-cloud-setup = "Automatically configure NetworkManager in cloud"
  139. FILES:${PN}-cloud-setup = " \
  140. ${libexecdir}/nm-cloud-setup \
  141. ${systemd_system_unitdir}/nm-cloud-setup.service \
  142. ${systemd_system_unitdir}/nm-cloud-setup.timer \
  143. ${libdir}/NetworkManager/dispatcher.d/90-nm-cloud-setup.sh \
  144. ${libdir}/NetworkManager/dispatcher.d/no-wait.d/90-nm-cloud-setup.sh \
  145. "
  146. RDEPENDS:${PN}-cloud-setup += "${PN}-daemon"
  147. ALLOW_EMPTY:${PN}-cloud-setup = "1"
  148. SYSTEMD_SERVICE:${PN}-cloud-setup = "${@bb.utils.contains('PACKAGECONFIG', 'cloud-setup', 'nm-cloud-setup.service nm-cloud-setup.timer', '', d)}"
  149. SUMMARY:${PN}-nmcli = "NetworkManager command line client"
  150. FILES:${PN}-nmcli = " \
  151. ${bindir}/nmcli \
  152. "
  153. RDEPENDS:${PN}-nmcli += "${PN}-daemon"
  154. SUMMARY:${PN}-nmcli-bash-completion = "NetworkManager command line client bash completion"
  155. FILES:${PN}-nmcli-bash-completion = "${datadir}/bash-completion/completions/nmcli"
  156. RDEPENDS:${PN}-nmcli-bash-completion = "bash-completion"
  157. SUMMARY:${PN}-nmtui = "NetworkManager curses-based UI"
  158. FILES:${PN}-nmtui = " \
  159. ${bindir}/nmtui \
  160. ${bindir}/nmtui-edit \
  161. ${bindir}/nmtui-connect \
  162. ${bindir}/nmtui-hostname \
  163. "
  164. RDEPENDS:${PN}-nmtui += "${PN}-daemon"
  165. SUMMARY:${PN}-wifi = "Wifi plugin for NetworkManager"
  166. FILES:${PN}-wifi = "\
  167. ${NETWORKMANAGER_PLUGINDIR}/libnm-device-plugin-wifi.so \
  168. ${libdir}/NetworkManager/conf.d/enable-iwd.conf \
  169. "
  170. def get_wifi_deps(d):
  171. packageconfig = (d.getVar('PACKAGECONFIG') or "").split()
  172. if 'wifi' in packageconfig:
  173. if 'iwd' in packageconfig:
  174. return 'iwd'
  175. else:
  176. return 'wpa-supplicant'
  177. else:
  178. return ''
  179. RDEPENDS:${PN}-wifi += "${PN}-daemon ${@get_wifi_deps(d)}"
  180. SUMMARY:${PN}-wwan = "Mobile broadband device plugin for NetworkManager"
  181. FILES:${PN}-wwan = "\
  182. ${NETWORKMANAGER_PLUGINDIR}/libnm-device-plugin-wwan.so \
  183. ${NETWORKMANAGER_PLUGINDIR}/libnm-wwan.so \
  184. "
  185. RDEPENDS:${PN}-wwan += "${PN}-daemon ${@bb.utils.contains('PACKAGECONFIG','modemmanager','modemmanager','',d)}"
  186. SUMMARY:${PN}-ovs = "Open vSwitch device plugin for NetworkManager"
  187. FILES:${PN}-ovs = "\
  188. ${NETWORKMANAGER_PLUGINDIR}/libnm-device-plugin-ovs.so \
  189. ${systemd_system_unitdir}/NetworkManager.service.d/NetworkManager-ovs.conf \
  190. "
  191. RDEPENDS:${PN}-ovs += "${PN}-daemon"
  192. SUMMARY:${PN}-ppp = "PPP plugin for NetworkManager"
  193. FILES:${PN}-ppp = "\
  194. ${NETWORKMANAGER_PLUGINDIR}/libnm-ppp-plugin.so \
  195. ${libdir}/pppd/*/nm-pppd-plugin.so \
  196. "
  197. RDEPENDS:${PN}-ppp += "${PN}-daemon ${@bb.utils.contains('PACKAGECONFIG','ppp','ppp','',d)}"
  198. FILES:${PN}-dev += " \
  199. ${libdir}/pppd/*/*.la \
  200. ${libdir}/NetworkManager/*.la \
  201. ${NETWORKMANAGER_PLUGINDIR}/*.la \
  202. ${datadir}/dbus-1/interfaces/*.xml \
  203. "
  204. SUMMARY:${PN}-daemon += "The NetworkManager daemon"
  205. FILES:${PN}-daemon += " \
  206. ${bindir}/nm-online \
  207. ${datadir}/dbus-1 \
  208. ${datadir}/polkit-1 \
  209. ${libdir}/NetworkManager \
  210. ${libexecdir} \
  211. ${localstatedir}/lib/NetworkManager \
  212. ${NETWORKMANAGER_DISPATCHERDIR} \
  213. ${nonarch_base_libdir}/udev/* \
  214. ${nonarch_libdir}/firewalld \
  215. ${nonarch_libdir}/NetworkManager/conf.d \
  216. ${nonarch_libdir}/NetworkManager/dispatcher.d/no-wait.d \
  217. ${nonarch_libdir}/NetworkManager/dispatcher.d/pre-down.d \
  218. ${nonarch_libdir}/NetworkManager/dispatcher.d/pre-up.d \
  219. ${nonarch_libdir}/NetworkManager/system-connections \
  220. ${nonarch_libdir}/NetworkManager/VPN \
  221. ${sbindir}/NetworkManager \
  222. ${sysconfdir}/init.d/network-manager \
  223. ${sysconfdir}/NetworkManager \
  224. ${sysconfdir}/resolv-conf.NetworkManager \
  225. ${sysconfdir}/sysconfig/network-scripts \
  226. ${systemd_system_unitdir} \
  227. "
  228. RDEPENDS:${PN}-daemon += "\
  229. ${@bb.utils.contains('PACKAGECONFIG', 'ifupdown', 'bash', '', d)} \
  230. "
  231. RRECOMMENDS:${PN}-daemon += "\
  232. ${NETWORKMANAGER_FIREWALL_DEFAULT} \
  233. ${@bb.utils.filter('PACKAGECONFIG', 'dnsmasq', d)} \
  234. "
  235. INITSCRIPT_NAME:${PN}-daemon = "network-manager"
  236. SYSTEMD_SERVICE:${PN}-daemon = "\
  237. NetworkManager.service \
  238. NetworkManager-dispatcher.service \
  239. "
  240. RCONFLICTS:${PN}-daemon += "connman"
  241. ALTERNATIVE_PRIORITY = "100"
  242. ALTERNATIVE:${PN}-daemon = "${@bb.utils.contains('PACKAGECONFIG','man-resolv-conf','resolv-conf','',d)}"
  243. ALTERNATIVE_TARGET[resolv-conf] = "${@bb.utils.contains('PACKAGECONFIG','man-resolv-conf','${sysconfdir}/resolv-conf.NetworkManager','',d)}"
  244. ALTERNATIVE_LINK_NAME[resolv-conf] = "${@bb.utils.contains('PACKAGECONFIG','man-resolv-conf','${sysconfdir}/resolv.conf','',d)}"
  245. # The networkmanager package is an empty meta package which weakly depends on all the compiled features.
  246. # Install this package to get all plugins and related dependencies installed. Alternatively just install
  247. # plugins and related dependencies e.g. by installing networkmanager-wifi or networkmanager-wwan
  248. # packages to the firmware.
  249. ALLOW_EMPTY:${PN} = "1"
  250. RRECOMMENDS:${PN} += "\
  251. ${@bb.utils.contains('PACKAGECONFIG','adsl','${PN}-adsl','',d)} \
  252. ${@bb.utils.contains('PACKAGECONFIG','bluez5','${PN}-bluetooth','',d)} \
  253. ${@bb.utils.contains('PACKAGECONFIG','cloud-setup','${PN}-cloud-setup','',d)} \
  254. ${@bb.utils.contains('PACKAGECONFIG','nmcli','${PN}-nmcli','',d)} \
  255. ${@bb.utils.contains('PACKAGECONFIG','nmtui','${PN}-nmtui','',d)} \
  256. ${@bb.utils.contains('PACKAGECONFIG','wifi','${PN}-wifi','',d)} \
  257. ${@bb.utils.contains('PACKAGECONFIG','wwan','${PN}-wwan','',d)} \
  258. ${@bb.utils.contains('PACKAGECONFIG','ovs','${PN}-ovs','',d)} \
  259. ${@bb.utils.contains('PACKAGECONFIG','ppp','${PN}-ppp','',d)} \
  260. "
  261. do_install:append() {
  262. install -Dm 0755 ${UNPACKDIR}/${BPN}.initd ${D}${sysconfdir}/init.d/network-manager
  263. rm -rf ${D}/run ${D}${localstatedir}/run
  264. if ${@bb.utils.contains('PACKAGECONFIG','man-resolv-conf','true','false',d)}; then
  265. # For read-only filesystem, do not create links during bootup
  266. ln -sf ../run/NetworkManager/resolv.conf ${D}${sysconfdir}/resolv-conf.NetworkManager
  267. # systemd v210 and newer do not need this rule file
  268. rm ${D}/${nonarch_base_libdir}/udev/rules.d/84-nm-drivers.rules
  269. fi
  270. # Enable iwd if compiled
  271. if ${@bb.utils.contains('PACKAGECONFIG','iwd','true','false',d)}; then
  272. install -Dm 0644 ${UNPACKDIR}/enable-iwd.conf ${D}${nonarch_libdir}/NetworkManager/conf.d/enable-iwd.conf
  273. fi
  274. # Enable dhcpd if compiled
  275. if ${@bb.utils.contains('PACKAGECONFIG','dhcpcd','true','false',d)}; then
  276. install -Dm 0644 ${UNPACKDIR}/enable-dhcpcd.conf ${D}${nonarch_libdir}/NetworkManager/conf.d/enable-dhcpcd.conf
  277. fi
  278. }