Skip to content

Commit

Permalink
libmount/2.39: Switch to Meson
Browse files Browse the repository at this point in the history
  • Loading branch information
jwillikers committed Oct 10, 2023
1 parent 29d0e1d commit f1538ce
Show file tree
Hide file tree
Showing 11 changed files with 176 additions and 31 deletions.
9 changes: 0 additions & 9 deletions recipes/libmount/all/conandata.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,3 @@ sources:
"2.39":
url: "https://mirrors.edge.kernel.org/pub/linux/utils/util-linux/v2.39/util-linux-2.39.tar.xz"
sha256: "32b30a336cda903182ed61feb3e9b908b762a5e66fe14e43efb88d37162075cb"
"2.36.2":
url: "https://mirrors.edge.kernel.org/pub/linux/utils/util-linux/v2.36/util-linux-2.36.2.tar.xz"
sha256: "f7516ba9d8689343594356f0e5e1a5f0da34adfbc89023437735872bb5024c5f"
"2.36":
url: "https://mirrors.edge.kernel.org/pub/linux/utils/util-linux/v2.36/util-linux-2.36.tar.xz"
sha256: "9e4b1c67eb13b9b67feb32ae1dc0d50e08ce9e5d82e1cccd0ee771ad2fa9e0b1"
"2.33.1":
url: "https://mirrors.edge.kernel.org/pub/linux/utils/util-linux/v2.33/util-linux-2.33.1.tar.xz"
sha256: "c14bd9f3b6e1792b90db87696e87ec643f9d63efa0a424f092a5a6b2f2dbef21"
53 changes: 35 additions & 18 deletions recipes/libmount/all/conanfile.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
from conan import ConanFile
from conan.errors import ConanInvalidConfiguration
from conan.tools.files import copy, get, rm, rmdir
from conan.tools.gnu import Autotools, AutotoolsToolchain
from conan.tools.env import VirtualBuildEnv, VirtualRunEnv
from conan.tools.files import copy, get, replace_in_file, rm, rmdir
from conan.tools.layout import basic_layout
from conan.tools.meson import Meson, MesonToolchain
import os

required_conan_version = ">=1.53.0"
Expand All @@ -18,7 +19,6 @@ class LibmountConan(ConanFile):
url = "https://github.com/conan-io/conan-center-index"
homepage = "https://git.kernel.org/pub/scm/utils/util-linux/util-linux.git"
license = "LGPL-2.1-or-later"

package_type = "library"
settings = "os", "arch", "compiler", "build_type"
options = {
Expand All @@ -32,9 +32,9 @@ class LibmountConan(ConanFile):

def configure(self):
if self.options.shared:
del self.options.fPIC
self.settings.rm_safe("compiler.libcxx")
self.options.rm_safe("fPIC")
self.settings.rm_safe("compiler.cppstd")
self.settings.rm_safe("compiler.libcxx")

def layout(self):
basic_layout(self, src_folder="src")
Expand All @@ -43,33 +43,50 @@ def validate(self):
if self.settings.os != "Linux":
raise ConanInvalidConfiguration(f"{self.ref} only supports Linux")

def build_requirements(self):
self.tool_requires("bison/3.8.2")
self.tool_requires("meson/1.2.2")
if not self.conf.get("tools.gnu:pkg_config", default=False, check_type=str):
self.tool_requires("pkgconf/2.0.3")

def source(self):
get(self, **self.conan_data["sources"][self.version], strip_root=True)

def generate(self):
tc = AutotoolsToolchain(self)
tc.configure_args.extend([
"--disable-all-programs",
"--enable-libmount",
"--enable-libblkid",
])
tc = MesonToolchain(self)
tc.project_options["auto_features"] = "disabled"
tc.project_options["build-libblkid"] = "enabled"
tc.project_options["build-libmount"] = "enabled"
tc.generate()
virtual_build_env = VirtualBuildEnv(self)
virtual_build_env.generate()
virtual_run_env = VirtualRunEnv(self)
virtual_run_env.generate()

def _patch_sources(self):
# Disable translations.
replace_in_file(self, os.path.join(self.source_folder, "meson.build"), "subdir('po')", "#subdir('po')")
# Disable tests for libmount.
replace_in_file(self, os.path.join(self.source_folder, "libmount", "meson.build"), "foreach libmount_test: libmount_tests", "foreach libmount_test: []")

def build(self):
autotools = Autotools(self)
autotools.configure()
autotools.make()
self._patch_sources()
meson = Meson(self)
meson.configure()
meson.build()

def package(self):
copy(self, "COPYING", src=os.path.join(self.source_folder, "libmount"), dst=os.path.join(self.package_folder, "licenses"))
copy(self, "COPYING.LGPL-2.1-or-later", src=os.path.join(self.source_folder, "Documentation", "licenses"), dst=os.path.join(self.package_folder, "licenses"))
autotools = Autotools(self)
autotools.install()
copy(self, "COPYING", os.path.join(self.source_folder, "libmount"), os.path.join(self.package_folder, "licenses"))
copy(self, "COPYING.LGPL-2.1-or-later", os.path.join(self.source_folder, "Documentation", "licenses"), os.path.join(self.package_folder, "licenses"))
meson = Meson(self)
meson.install()
rmdir(self, os.path.join(self.package_folder, "sbin"))
rmdir(self, os.path.join(self.package_folder, "share"))
rmdir(self, os.path.join(self.package_folder, "lib", "pkgconfig"))
rmdir(self, os.path.join(self.package_folder, "usr"))
rm(self, "*.la", os.path.join(self.package_folder, "lib"))
# util-linux always builds both the shared and static libraries of libblkid, so delete the one that isn't needed.
rm(self, "libblkid.a" if self.options.shared else "libblkid.so*", os.path.join(self.package_folder, "lib"))

def package_info(self):
self.cpp_info.libs = ["mount", "blkid"]
Expand Down
2 changes: 1 addition & 1 deletion recipes/libmount/all/test_package/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.1)
cmake_minimum_required(VERSION 3.15)
project(test_package LANGUAGES C)

find_package(libmount REQUIRED CONFIG)
Expand Down
10 changes: 10 additions & 0 deletions recipes/libmount/autotools/conandata.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
sources:
"2.36.2":
url: "https://mirrors.edge.kernel.org/pub/linux/utils/util-linux/v2.36/util-linux-2.36.2.tar.xz"
sha256: "f7516ba9d8689343594356f0e5e1a5f0da34adfbc89023437735872bb5024c5f"
"2.36":
url: "https://mirrors.edge.kernel.org/pub/linux/utils/util-linux/v2.36/util-linux-2.36.tar.xz"
sha256: "9e4b1c67eb13b9b67feb32ae1dc0d50e08ce9e5d82e1cccd0ee771ad2fa9e0b1"
"2.33.1":
url: "https://mirrors.edge.kernel.org/pub/linux/utils/util-linux/v2.33/util-linux-2.33.1.tar.xz"
sha256: "c14bd9f3b6e1792b90db87696e87ec643f9d63efa0a424f092a5a6b2f2dbef21"
78 changes: 78 additions & 0 deletions recipes/libmount/autotools/conanfile.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
from conan import ConanFile
from conan.errors import ConanInvalidConfiguration
from conan.tools.files import copy, get, rm, rmdir
from conan.tools.gnu import Autotools, AutotoolsToolchain
from conan.tools.layout import basic_layout
import os

required_conan_version = ">=1.53.0"


class LibmountConan(ConanFile):
name = "libmount"
description = (
"The libmount library is used to parse /etc/fstab, /etc/mtab and "
"/proc/self/mountinfo files, manage the mtab file, evaluate mount options, etc"
)
topics = ("mount", "linux", "util-linux")
url = "https://github.com/conan-io/conan-center-index"
homepage = "https://git.kernel.org/pub/scm/utils/util-linux/util-linux.git"
license = "LGPL-2.1-or-later"

package_type = "library"
settings = "os", "arch", "compiler", "build_type"
options = {
"shared": [True, False],
"fPIC": [True, False],
}
default_options = {
"shared": False,
"fPIC": True,
}

def configure(self):
if self.options.shared:
del self.options.fPIC
self.settings.rm_safe("compiler.libcxx")
self.settings.rm_safe("compiler.cppstd")

def layout(self):
basic_layout(self, src_folder="src")

def validate(self):
if self.settings.os != "Linux":
raise ConanInvalidConfiguration(f"{self.ref} only supports Linux")

def source(self):
get(self, **self.conan_data["sources"][self.version], strip_root=True)

def generate(self):
tc = AutotoolsToolchain(self)
tc.configure_args.extend([
"--disable-all-programs",
"--enable-libmount",
"--enable-libblkid",
])
tc.generate()

def build(self):
autotools = Autotools(self)
autotools.configure()
autotools.make()

def package(self):
copy(self, "COPYING", src=os.path.join(self.source_folder, "libmount"), dst=os.path.join(self.package_folder, "licenses"))
copy(self, "COPYING.LGPL-2.1-or-later", src=os.path.join(self.source_folder, "Documentation", "licenses"), dst=os.path.join(self.package_folder, "licenses"))
autotools = Autotools(self)
autotools.install()
rmdir(self, os.path.join(self.package_folder, "sbin"))
rmdir(self, os.path.join(self.package_folder, "share"))
rmdir(self, os.path.join(self.package_folder, "lib", "pkgconfig"))
rmdir(self, os.path.join(self.package_folder, "usr"))
rm(self, "*.la", os.path.join(self.package_folder, "lib"))

def package_info(self):
self.cpp_info.libs = ["mount", "blkid"]
self.cpp_info.system_libs = ["rt"]
self.cpp_info.includedirs.append(os.path.join("include", "libmount"))
self.cpp_info.set_property("pkg_config_name", "mount")
7 changes: 7 additions & 0 deletions recipes/libmount/autotools/test_package/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
cmake_minimum_required(VERSION 3.1)
project(test_package LANGUAGES C)

find_package(libmount REQUIRED CONFIG)

add_executable(${PROJECT_NAME} test_package.c)
target_link_libraries(${PROJECT_NAME} PRIVATE libmount::libmount)
26 changes: 26 additions & 0 deletions recipes/libmount/autotools/test_package/conanfile.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
from conan import ConanFile
from conan.tools.build import can_run
from conan.tools.cmake import CMake, cmake_layout
import os


class TestPackageConan(ConanFile):
settings = "os", "arch", "compiler", "build_type"
generators = "CMakeToolchain", "CMakeDeps", "VirtualRunEnv"
test_type = "explicit"

def layout(self):
cmake_layout(self)

def requirements(self):
self.requires(self.tested_reference_str)

def build(self):
cmake = CMake(self)
cmake.configure()
cmake.build()

def test(self):
if can_run(self):
bin_path = os.path.join(self.cpp.build.bindirs[0], "test_package")
self.run(bin_path, env="conanrun")
16 changes: 16 additions & 0 deletions recipes/libmount/autotools/test_package/test_package.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
#include <libmount/libmount.h>

#include <stdio.h>
#include <stdlib.h>

int main()
{
struct libmnt_context *ctx = mnt_new_context();
if (!ctx) {
printf("failed to initialize libmount\n");
return EXIT_FAILURE;
}
printf("path to fstab: %s", mnt_get_fstab_path());
mnt_free_context(ctx);
return EXIT_SUCCESS;
}
6 changes: 3 additions & 3 deletions recipes/libmount/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ versions:
"2.39":
folder: all
"2.36.2":
folder: all
folder: autotools
"2.36":
folder: all
folder: autotools
"2.33.1":
folder: all
folder: autotools

0 comments on commit f1538ce

Please sign in to comment.