LGPL-2.1-only

Identifier: LGPL-2.1-only_alexa-auto-sdk_v1.6.2

from conans import ConanFile, tools, Meson, VisualStudioBuildEnvironment from conans.errors import ConanInvalidConfiguration import os import shutil import glob class GLibConan(ConanFile): python_requires = "aac-sdk-tools/1.0" python_requires_extend = "aac-sdk-tools.BaseSdkDependency" name = "glib" version = "2.67.1" description = "GLib provides the core application building blocks for libraries and applications written in C" topics = ("conan", "glib", "gobject", "gio", "gmodule") url = "https://github.com/conan-io/conan-center-index" homepage = "https://gitlab.gnome.org/GNOME/glib" license = "LGPL-2.1" settings = "os", "arch", "compiler", "build_type" options = { "shared": [True, False], "fPIC": [True, False], "with_pcre": [True, False], "with_elf": [True, False], "with_selinux": [True, False], "with_mount": [True, False], } default_options = { "shared": False, "fPIC": True, "with_pcre": True, "with_elf": False, "with_mount": False, "with_selinux": False, } _source_subfolder = "source_subfolder" _build_subfolder = "build_subfolder" short_paths = True generators = "pkg_config" requires = ["libffi/3.3#ffae58cd59893a5e077a16c473adf8b5"] build_requires = ["meson/0.56.2", "pkgconf/1.7.3"] @property def _is_msvc(self): return self.settings.compiler == "Visual Studio" def configure(self): if self.options.shared: del self.options.fPIC del self.settings.compiler.libcxx del self.settings.compiler.cppstd if self.settings.os == "Windows" and not self.options.shared: raise ConanInvalidConfiguration( "glib can not be built as static library on Windows. " "see https://gitlab.gnome.org/GNOME/glib/-/issues/692" ) if tools.Version(self.version) < "2.67.0" and not self.options.with_elf: raise ConanInvalidConfiguration("libelf dependency can't be disabled in glib < 2.67.0") def config_options(self): if self.settings.os == "Windows": del self.options.fPIC self.options.shared = True if self.settings.os != "Linux": del self.options.with_mount del self.options.with_selinux def requirements(self): if self.options.with_pcre: self.requires("pcre/8.44#50abeceaacae2133e3ce9e340e714976") if self.options.with_elf: self.requires("libelf/0.8.13") if self.options.get_safe("with_mount"): self.requires("libmount/2.36") if self.options.get_safe("with_selinux"): self.requires("libselinux/3.1") if self.settings.os != "Linux": # for Linux, gettext is provided by libc self.requires("libgettext/0.20.1#78b03f9a69ec94e302bd4d352579ccf7") if tools.is_apple_os(self.settings.os): self.requires("libiconv/1.16#eae489614aa6b1b8ca652cc33d3c26a9") def source(self): tools.get(**self.conan_data["sources"][self.version]) extracted_dir = self.name + "-" + self.version os.rename(extracted_dir, self._source_subfolder) def _configure_meson(self): meson = Meson(self) defs = dict() if tools.is_apple_os(self.settings.os): defs["iconv"] = "external" # https://gitlab.gnome.org/GNOME/glib/issues/1557 defs["selinux"] = "enabled" if self.options.get_safe("with_selinux") else "disabled" defs["libmount"] = "enabled" if self.options.get_safe("with_mount") else "disabled" defs["internal_pcre"] = not self.options.with_pcre if self.settings.os == "FreeBSD": defs["xattr"] = "false" defs["tests"] = "false" if tools.Version(self.version) >= "2.67.0": defs["libelf"] = "enabled" if self.options.with_elf else "disabled" meson.configure( source_folder=self._source_subfolder, args=["--wrap-mode=nofallback"], build_folder=self._build_subfolder, defs=defs, ) return meson def _patch_sources(self): if self.version < "2.67.2": tools.replace_in_file( os.path.join(self._source_subfolder, "meson.build"), "build_tests = not meson.is_cross_build() or (meson.is_cross_build() and meson.has_exe_wrapper())", "build_tests = false", ) tools.replace_in_file( os.path.join(self._source_subfolder, "meson.build"), "subdir('fuzzing')", "#subdir('fuzzing')", ) # https://gitlab.gnome.org/GNOME/glib/-/issues/2152 for filename in [ os.path.join(self._source_subfolder, "meson.build"), os.path.join(self._source_subfolder, "glib", "meson.build"), os.path.join(self._source_subfolder, "gobject", "meson.build"), os.path.join(self._source_subfolder, "gio", "meson.build"), ]: tools.replace_in_file(filename, "subdir('tests')", "#subdir('tests')") # allow to find gettext tools.replace_in_file( os.path.join(self._source_subfolder, "meson.build"), "libintl = cc.find_library('intl', required : false)", "libintl = cc.find_library('gnuintl', required : false)", ) tools.replace_in_file( os.path.join( self._source_subfolder, "gio", "gdbus-2.0", "codegen", "gdbus-codegen.in", ), "'share'", "'res'", ) if self.settings.os != "Linux": tools.replace_in_file( os.path.join(self._source_subfolder, "meson.build"), "if cc.has_function('ngettext')", "if false #cc.has_function('ngettext')", ) def build(self): self._patch_sources() with tools.environment_append(VisualStudioBuildEnvironment(self).vars) if self._is_msvc else tools.no_op(): meson = self._configure_meson() meson.build() def _fix_library_names(self): if self.settings.compiler == "Visual Studio": with tools.chdir(os.path.join(self.package_folder, "lib")): for filename_old in glob.glob("*.a"): filename_new = filename_old[3:-2] + ".lib" self.output.info("rename %s into %s" % (filename_old, filename_new)) shutil.move(filename_old, filename_new) def package(self): self.copy(pattern="COPYING", dst="licenses", src=self._source_subfolder) with tools.environment_append(VisualStudioBuildEnvironment(self).vars) if self._is_msvc else tools.no_op(): meson = self._configure_meson() meson.install() self._fix_library_names() tools.rmdir(os.path.join(self.package_folder, "lib", "pkgconfig")) shutil.move( os.path.join(self.package_folder, "share"), os.path.join(self.package_folder, "res"), ) for pdb_file in glob.glob(os.path.join(self.package_folder, "bin", "*.pdb")): os.unlink(pdb_file) def package_info(self): self.cpp_info.components["glib-2.0"].libs = ["glib-2.0"] if self.settings.os in ["Linux", "FreeBSD"]: self.cpp_info.components["glib-2.0"].system_libs.append("pthread") if self.settings.os == "Windows": self.cpp_info.components["glib-2.0"].system_libs.extend( ["ws2_32", "ole32", "shell32", "user32", "advapi32"] ) if self.settings.os == "Macos": self.cpp_info.components["glib-2.0"].system_libs.append("resolv") self.cpp_info.components["glib-2.0"].frameworks.extend(["Foundation", "CoreServices", "CoreFoundation"]) self.cpp_info.components["glib-2.0"].includedirs.append(os.path.join("include", "glib-2.0")) self.cpp_info.components["glib-2.0"].includedirs.append(os.path.join("lib", "glib-2.0", "include")) if self.options.with_pcre: self.cpp_info.components["glib-2.0"].requires.append("pcre::pcre") if self.settings.os != "Linux": self.cpp_info.components["glib-2.0"].requires.append("libgettext::libgettext") if tools.is_apple_os(self.settings.os): self.cpp_info.components["glib-2.0"].requires.append("libiconv::libiconv") self.cpp_info.components["gmodule-no-export-2.0"].libs = ["gmodule-2.0"] if self.settings.os in ["Linux", "FreeBSD"]: self.cpp_info.components["gmodule-no-export-2.0"].system_libs.append("pthread") self.cpp_info.components["gmodule-no-export-2.0"].system_libs.append("dl") self.cpp_info.components["gmodule-no-export-2.0"].requires.append("glib-2.0") self.cpp_info.components["gmodule-export-2.0"].requires.extend(["gmodule-no-export-2.0", "glib-2.0"]) if self.settings.os in ["Linux", "FreeBSD"]: self.cpp_info.components["gmodule-export-2.0"].sharedlinkflags.append("-Wl,--export-dynamic") self.cpp_info.components["gmodule-2.0"].requires.extend(["gmodule-no-export-2.0", "glib-2.0"]) if self.settings.os in ["Linux", "FreeBSD"]: self.cpp_info.components["gmodule-2.0"].sharedlinkflags.append("-Wl,--export-dynamic") self.cpp_info.components["gobject-2.0"].libs = ["gobject-2.0"] self.cpp_info.components["gobject-2.0"].requires.append("glib-2.0") self.cpp_info.components["gobject-2.0"].requires.append("libffi::libffi") self.cpp_info.components["gthread-2.0"].libs = ["gthread-2.0"] if self.settings.os in ["Linux", "FreeBSD"]: self.cpp_info.components["gthread-2.0"].system_libs.append("pthread") self.cpp_info.components["gthread-2.0"].requires.append("glib-2.0") self.cpp_info.components["gio-2.0"].libs = ["gio-2.0"] if self.settings.os == "Linux": self.cpp_info.components["gio-2.0"].system_libs.append("resolv") if self.settings.os in ["Linux", "FreeBSD"]: self.cpp_info.components["gio-2.0"].system_libs.append("dl") self.cpp_info.components["gio-2.0"].requires.extend(["glib-2.0", "gobject-2.0", "gmodule-2.0"]) if self.settings.os == "Macos": self.cpp_info.components["gio-2.0"].frameworks.append("AppKit") if self.options.get_safe("with_mount"): self.cpp_info.components["gio-2.0"].requires.append("libmount::libmount") if self.options.get_safe("with_selinux"): self.cpp_info.components["gio-2.0"].requires.append("libselinux::libselinux") if self.settings.os == "Windows": self.cpp_info.components["gio-windows-2.0"].requires = [ "gobject-2.0", "gmodule-no-export-2.0", "gio-2.0", ] self.cpp_info.components["gio-windows-2.0"].includedirs = [os.path.join("include", "gio-win32-2.0")] else: self.cpp_info.components["gio-unix-2.0"].requires.extend(["gobject-2.0", "gio-2.0"]) self.cpp_info.components["gio-unix-2.0"].includedirs = [os.path.join("include", "gio-unix-2.0")] # giomoduledir variable is necessary for glib-networking to build successfully gio_custom_content = "giomoduledir=${libdir}/gio/modules" self.cpp_info.components["gio-2.0"].set_property("pkg_config_custom_content", gio_custom_content) self.env_info.GLIB_COMPILE_SCHEMAS = os.path.join(self.package_folder, "bin", "glib-compile-schemas") self.cpp_info.components["gresource"].libs = [] # this is actually an executable if self.options.get_safe("with_elf", True): self.cpp_info.components["gresource"].requires.append("libelf::libelf") # this is actually an executable bin_path = os.path.join(self.package_folder, "bin") self.output.info("Appending PATH env var with: {}".format(bin_path)) self.env_info.PATH.append(bin_path) NOTICE Alexa Auto - Wake-word Loopback detection extension Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.

previous

next