Skip to content

Commit

Permalink
util-linux: use meson to build
Browse files Browse the repository at this point in the history
Compiles faster, is PIC by default, and does not have pkgconfig files
with wrong paths.

Add various fixes to it as it seems cross compilation was never tested.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
  • Loading branch information
neheb authored and chunkeey committed May 15, 2022
1 parent d93aae1 commit 28cec43
Show file tree
Hide file tree
Showing 16 changed files with 384 additions and 51 deletions.
117 changes: 66 additions & 51 deletions package/utils/util-linux/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -25,14 +25,10 @@ PKG_LICENSE_FILES:= COPYING \
libuuid/COPYING \
Documentation/licenses/COPYING.BSD-3

PKG_BUILD_PARALLEL:=1

PKG_FIXUP:=autoreconf
PKG_INSTALL:=1

DISABLE_NLS:=--disable-nls

include $(INCLUDE_DIR)/package.mk
include $(INCLUDE_DIR)/meson.mk

define Package/util-linux/Default
SECTION:=utils
Expand Down Expand Up @@ -552,44 +548,69 @@ define Package/wipefs/description
libblkid.
endef

CONFIGURE_ARGS += \
--disable-use-tty-group \
--disable-rpath \
--disable-tls \
--disable-su \
--disable-sulogin \
--disable-makeinstall-chown \
--disable-login \
--disable-nologin \
--disable-lslogins \
--disable-runuser \
--disable-chfn-chsh \
--disable-raw \
--without-python \
--without-udev \
--without-readline \
--without-libmagic \
--with-ncursesw

TARGET_CFLAGS += $(FPIC) -std=gnu99
MESON_ARGS += \
-Dsystemd=disabled \
-Dtinfo=disabled \
-Dcryptsetup=disabled \
-Dlibutil=disabled \
-Dlibutempter=disabled \
-Dlibpcre2-posix=disabled \
-Dlibuser=disabled \
-Duse-tty-group=false \
-Duse-tls=false \
-Dbuild-python=disabled \
-Dbuild-zramctl=disabled \
-Dbuild-fsck=disabled \
-Dbuild-wipefs=disabled \
-Dbuild-fallocate=disabled \
-Dbuild-setpriv=disabled \
-Dbuild-hardlink=disabled \
-Dbuild-cramfs=disabled \
-Dbuild-bfs=disabled \
-Dbuild-minix=disabled \
-Dbuild-fdformat=disabled \
-Dbuild-lslogins=disabled \
-Dbuild-wdctl=disabled \
-Dbuild-cal=disabled \
-Dbuild-switch_root=disabled \
-Dbuild-pivot_root=disabled \
-Dbuild-lsmem=disabled \
-Dbuild-lsirq=disabled \
-Dbuild-irqtop=disabled \
-Dbuild-chmem=disabled \
-Dbuild-ipcrm=disabled \
-Dbuild-rfkill=disabled \
-Dbuild-tunelp=disabled \
-Dbuild-kill=disabled \
-Dbuild-last=disabled \
-Dbuild-utmpdump=disabled \
-Dbuild-line=disabled \
-Dbuild-mesg=disabled \
-Dbuild-raw=disabled \
-Dbuild-vipw=disabled \
-Dbuild-newgrp=disabled \
-Dbuild-chfn-chsh=disabled \
-Dbuild-login=disabled \
-Dbuild-nologin=disabled \
-Dbuild-sulogin=disabled \
-Dbuild-su=disabled \
-Dbuild-runuser=disabled \
-Dbuild-ul=disabled \
-Dbuild-pg=disabled \
-Dbuild-write=disabled \
-Dbuild-bash-completion=disabled \
-Dbuild-pylibmount=disabled \
-Dreadline=disabled \
-Dmagic=disabled \
-Dncursesw=enabled

define Build/InstallDev
$(INSTALL_DIR) $(1)/usr/lib/pkgconfig
$(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/blkid.pc $(1)/usr/lib/pkgconfig
$(SED) 's,/usr/include,$$$${prefix}/include,g' $(1)/usr/lib/pkgconfig/blkid.pc
$(SED) 's,/usr/lib,$$$${exec_prefix}/lib,g' $(1)/usr/lib/pkgconfig/blkid.pc
$(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/fdisk.pc $(1)/usr/lib/pkgconfig
$(SED) 's,/usr/include,$$$${prefix}/include,g' $(1)/usr/lib/pkgconfig/fdisk.pc
$(SED) 's,/usr/lib,$$$${exec_prefix}/lib,g' $(1)/usr/lib/pkgconfig/fdisk.pc
$(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/mount.pc $(1)/usr/lib/pkgconfig
$(SED) 's,/usr/include,$$$${prefix}/include,g' $(1)/usr/lib/pkgconfig/mount.pc
$(SED) 's,/usr/lib,$$$${exec_prefix}/lib,g' $(1)/usr/lib/pkgconfig/mount.pc
$(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/smartcols.pc $(1)/usr/lib/pkgconfig
$(SED) 's,/usr/include,$$$${prefix}/include,g' $(1)/usr/lib/pkgconfig/smartcols.pc
$(SED) 's,/usr/lib,$$$${exec_prefix}/lib,g' $(1)/usr/lib/pkgconfig/smartcols.pc
$(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/uuid.pc $(1)/usr/lib/pkgconfig
$(SED) 's,/usr/include,$$$${prefix}/include,g' $(1)/usr/lib/pkgconfig/uuid.pc
$(SED) 's,/usr/lib,$$$${exec_prefix}/lib,g' $(1)/usr/lib/pkgconfig/uuid.pc

$(INSTALL_DIR) $(1)/usr/include/blkid
$(CP) $(PKG_INSTALL_DIR)/usr/include/blkid/blkid.h $(1)/usr/include/blkid
Expand All @@ -603,43 +624,37 @@ define Build/InstallDev
$(CP) $(PKG_INSTALL_DIR)/usr/include/libsmartcols/libsmartcols.h $(1)/usr/include/libsmartcols

$(INSTALL_DIR) $(1)/usr/lib
$(CP) $(PKG_INSTALL_DIR)/lib/libblkid.so* $(1)/usr/lib
$(CP) $(PKG_INSTALL_DIR)/lib/libfdisk.so* $(1)/usr/lib
$(CP) $(PKG_INSTALL_DIR)/lib/libmount.so* $(1)/usr/lib
$(CP) $(PKG_INSTALL_DIR)/lib/libuuid.so* $(1)/usr/lib
$(CP) $(PKG_INSTALL_DIR)/lib/libsmartcols.so* $(1)/usr/lib

$(LN) libblkid.so.1 $(1)/usr/lib/libblkid.so
$(LN) libfdisk.so.1 $(1)/usr/lib/libfdisk.so
$(LN) libmount.so.1 $(1)/usr/lib/libmount.so
$(LN) libuuid.so.1 $(1)/usr/lib/libuuid.so
$(LN) libsmartcols.so.1 $(1)/usr/lib/libsmartcols.so
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libblkid.so* $(1)/usr/lib
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libfdisk.so* $(1)/usr/lib
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libmount.so* $(1)/usr/lib
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libuuid.so* $(1)/usr/lib
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libsmartcols.so* $(1)/usr/lib
endef


define Package/libfdisk/install
$(INSTALL_DIR) $(1)/usr/lib
$(CP) $(PKG_INSTALL_DIR)/lib/libfdisk.so.* $(1)/usr/lib/
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libfdisk.so.* $(1)/usr/lib/
endef

define Package/libblkid/install
$(INSTALL_DIR) $(1)/usr/lib
$(CP) $(PKG_INSTALL_DIR)/lib/libblkid.so.* $(1)/usr/lib/
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libblkid.so.* $(1)/usr/lib/
endef

define Package/libmount/install
$(INSTALL_DIR) $(1)/usr/lib
$(CP) $(PKG_INSTALL_DIR)/lib/libmount.so.* $(1)/usr/lib/
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libmount.so.* $(1)/usr/lib/
endef

define Package/libsmartcols/install
$(INSTALL_DIR) $(1)/usr/lib
$(CP) $(PKG_INSTALL_DIR)/lib/libsmartcols.so.* $(1)/usr/lib/
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libsmartcols.so.* $(1)/usr/lib/
endef

define Package/libuuid/install
$(INSTALL_DIR) $(1)/usr/lib
$(CP) $(PKG_INSTALL_DIR)/lib/libuuid.so.* $(1)/usr/lib/
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libuuid.so.* $(1)/usr/lib/
endef

define Package/agetty/install
Expand Down
20 changes: 20 additions & 0 deletions package/utils/util-linux/patches/010-meson-typo.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
From c387d4fe7a1435a762a5b7d8b75feb13ad613315 Mon Sep 17 00:00:00 2001
From: Anatoly Pugachev <matorola@gmail.com>
Date: Fri, 8 Apr 2022 15:34:16 +0300
Subject: [PATCH] libfdisk: meson.build fix typo

---
libfdisk/meson.build | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

--- a/libfdisk/meson.build
+++ b/libfdisk/meson.build
@@ -11,7 +11,7 @@ libfdisk_h = configure_file(
output : 'libfdisk.h',
configuration : defs,
install : build_libfdisk,
- install_dir : join_paths(get_option('includedir'), 'libfisk'),
+ install_dir : join_paths(get_option('includedir'), 'libfdisk'),
)

lib_fdisk_sources = '''
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
From 38b15ca2dc4ca32bbe4a2449e1c7b645e4577840 Mon Sep 17 00:00:00 2001
From: Rosen Penev <rosenp@gmail.com>
Date: Fri, 29 Apr 2022 16:53:43 -0700
Subject: [PATCH 1/7] meson: fix compilation without systemd

systemdsystemunitdir is used elsewhere.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
meson.build | 1 +
1 file changed, 1 insertion(+)

--- a/meson.build
+++ b/meson.build
@@ -720,6 +720,7 @@ if fs_search_path_extra != ''
endif
conf.set_quoted('FS_SEARCH_PATH', fs_search_path)

+systemdsystemunitdir = ''
if systemd.found()
systemdsystemunitdir = systemd.get_pkgconfig_variable('systemdsystemunitdir')
endif
34 changes: 34 additions & 0 deletions package/utils/util-linux/patches/030-meson-don-t-use-run.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
From e25db9169450d3d5fb43656a2eae5c08999310f4 Mon Sep 17 00:00:00 2001
From: Rosen Penev <rosenp@gmail.com>
Date: Fri, 29 Apr 2022 16:56:54 -0700
Subject: [PATCH 2/7] meson: don't use run

Fixes cross compilation. run is not needed anyway.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
meson.build | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)

--- a/meson.build
+++ b/meson.build
@@ -577,8 +577,7 @@ int main(void) {
return tzname ? 0 : 1;
}
'''.format(have ? 1 : 0)
-result = cc.run(code, name : 'using tzname[]')
-have = result.compiled() and result.returncode() == 0
+have = cc.compiles(code, name : 'using tzname[]')
conf.set('HAVE_TZNAME', have ? 1 : false)

socket_libs = []
@@ -641,8 +640,7 @@ int main(void) {
return (*__progname != 0);
}
'''
-result = cc.run(code, name : 'using __progname')
-have = result.compiled() and result.returncode() == 0
+have = cc.compiles(code, name : 'using __progname')
conf.set('HAVE___PROGNAME', have ? 1 : false)

build_plymouth_support = get_option('build-plymouth-support')
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
From 4194bb5b35e9b5f3296bf17b7cabcc5cb1632ba3 Mon Sep 17 00:00:00 2001
From: Rosen Penev <rosenp@gmail.com>
Date: Fri, 29 Apr 2022 16:55:15 -0700
Subject: [PATCH 3/7] meson: fix cpu_set_t test

_GNU_SOURCE is needed here.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
meson.build | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

--- a/meson.build
+++ b/meson.build
@@ -379,7 +379,7 @@ endforeach
have = cc.has_header('sched.h')
conf.set10('HAVE_DECL_CPU_ALLOC', have)
# We get -1 if the size cannot be determined
-have_cpu_set_t = cc.sizeof('cpu_set_t', prefix : '#include <sched.h>') > 0
+have_cpu_set_t = cc.sizeof('cpu_set_t', prefix : '#define _GNU_SOURCE\n#include <sched.h>') > 0
conf.set('HAVE_CPU_SET_T', have_cpu_set_t ? 1 : false)

have = cc.has_header_symbol('stdlib.h', 'environ')
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
From 1e9e2b9fe365cc4a0025d44dc0a9c54bfffe9058 Mon Sep 17 00:00:00 2001
From: Rosen Penev <rosenp@gmail.com>
Date: Fri, 29 Apr 2022 18:16:17 -0700
Subject: [PATCH 4/7] meson: fix environ search

musl has it defined in unistd.h and hidden behind _GNU_SOURCE.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
meson.build | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

--- a/meson.build
+++ b/meson.build
@@ -382,7 +382,7 @@ conf.set10('HAVE_DECL_CPU_ALLOC', have)
have_cpu_set_t = cc.sizeof('cpu_set_t', prefix : '#define _GNU_SOURCE\n#include <sched.h>') > 0
conf.set('HAVE_CPU_SET_T', have_cpu_set_t ? 1 : false)

-have = cc.has_header_symbol('stdlib.h', 'environ')
+have = cc.has_header_symbol('unistd.h', 'environ', prefix : '#define _GNU_SOURCE')
conf.set10('HAVE_ENVIRON_DECL', have)

have = cc.has_header_symbol('signal.h', 'sighandler_t')
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
From 5d7557eb3827664b2b78145373907f2a6994bdf9 Mon Sep 17 00:00:00 2001
From: Rosen Penev <rosenp@gmail.com>
Date: Fri, 29 Apr 2022 18:17:52 -0700
Subject: [PATCH 5/7] meson: add _GNU_SOURCE for sighandler_t

musl requires it.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
meson.build | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

--- a/meson.build
+++ b/meson.build
@@ -385,7 +385,7 @@ conf.set('HAVE_CPU_SET_T', have_cpu_set_
have = cc.has_header_symbol('unistd.h', 'environ', prefix : '#define _GNU_SOURCE')
conf.set10('HAVE_ENVIRON_DECL', have)

-have = cc.has_header_symbol('signal.h', 'sighandler_t')
+have = cc.has_header_symbol('signal.h', 'sighandler_t', prefix : '#define _GNU_SOURCE')
conf.set('HAVE_SIGHANDLER_T', have ? 1 : false)

have = cc.has_header_symbol('string.h', 'strsignal')
24 changes: 24 additions & 0 deletions package/utils/util-linux/patches/070-meson-fix-isnan-check.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
From 777652585924034deeba98ae3192f26bc32bb661 Mon Sep 17 00:00:00 2001
From: Rosen Penev <rosenp@gmail.com>
Date: Fri, 29 Apr 2022 18:19:53 -0700
Subject: [PATCH 6/7] meson: fix isnan check

musl only has isnan as a macro, not as a function. Handle the former
case.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
meson.build | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

--- a/meson.build
+++ b/meson.build
@@ -622,7 +622,7 @@ rtas_libs = cc.find_library('rtas', requ
conf.set('HAVE_LIBRTAS', rtas_libs.found() ? 1 : false)

math_libs = []
-if not cc.has_function('isnan')
+if not cc.has_header_symbol('math.h', 'isnan')
lib = cc.find_library('m', required : true)
if (cc.has_function('isnan', dependencies : lib) and
cc.has_function('__isnan', dependencies : lib))
23 changes: 23 additions & 0 deletions package/utils/util-linux/patches/080-meson-fix-tzname-check.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
From 9a6b2618b46a859388139d1eb18f876886786659 Mon Sep 17 00:00:00 2001
From: Rosen Penev <rosenp@gmail.com>
Date: Fri, 29 Apr 2022 19:00:53 -0700
Subject: [PATCH] meson: fix tzname check

tzname is not a type but a variable. sizeof only works on types.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
meson.build | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

--- a/meson.build
+++ b/meson.build
@@ -565,7 +565,7 @@ have = cc.has_member('struct tm', 'tm_zo
prefix : '#include <time.h>')
conf.set('HAVE_STRUCT_TM_TM_ZONE', have ? 1 : false)

-have = cc.sizeof('tzname', prefix : '#include <time.h>') > 0
+have = cc.has_header_symbol('time.h', 'tzname')
conf.set('HAVE_DECL_TZNAME', have ? 1 : false)

code = '''
18 changes: 18 additions & 0 deletions package/utils/util-linux/patches/090-meson-libpam.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
--- a/meson.build
+++ b/meson.build
@@ -299,10 +299,14 @@ conf.set('HAVE_LIBUDEV', lib_udev.found(

lib_crypt = cc.find_library('crypt')

-lib_pam = cc.find_library('pam')
+req_libpam = not (get_option('build-login').disabled() or get_option('build-chfn-chsh').disabled()
+ or get_option('build-su').disabled() or get_option('build-runuser').disabled())
+lib_pam = cc.find_library('pam', required : req_libpam)
if lib_pam.found()
lib_pam_misc = cc.find_library('pam_misc')
lib_pam = [lib_pam, lib_pam_misc]
+else
+ lib_pam_misc = declare_dependency()
endif

lib_cryptsetup = dependency(

0 comments on commit 28cec43

Please sign in to comment.