From cf0d1d6290f6f2c324e1793f479f79f9823f71fa Mon Sep 17 00:00:00 2001 From: Eric Lemanissier Date: Thu, 14 Jan 2021 13:13:03 +0100 Subject: [PATCH 1/2] gobject-introspection 1.66.1 --- .../gobject-introspection/all/conandata.yml | 4 + .../gobject-introspection/all/conanfile.py | 111 ++++++++++++++++++ .../all/test_package/CMakeLists.txt | 8 ++ .../all/test_package/conanfile.py | 25 ++++ .../all/test_package/test_package.c | 11 ++ recipes/gobject-introspection/config.yml | 3 + 6 files changed, 162 insertions(+) create mode 100644 recipes/gobject-introspection/all/conandata.yml create mode 100644 recipes/gobject-introspection/all/conanfile.py create mode 100644 recipes/gobject-introspection/all/test_package/CMakeLists.txt create mode 100644 recipes/gobject-introspection/all/test_package/conanfile.py create mode 100644 recipes/gobject-introspection/all/test_package/test_package.c create mode 100644 recipes/gobject-introspection/config.yml diff --git a/recipes/gobject-introspection/all/conandata.yml b/recipes/gobject-introspection/all/conandata.yml new file mode 100644 index 0000000000000..f5747c2eae817 --- /dev/null +++ b/recipes/gobject-introspection/all/conandata.yml @@ -0,0 +1,4 @@ +sources: + "1.66.1": + url: "https://download.gnome.org/sources/gobject-introspection/1.66/gobject-introspection-1.66.1.tar.xz" + sha256: "dd44a55ee5f426ea22b6b89624708f9e8d53f5cc94e5485c15c87cb30e06161d" diff --git a/recipes/gobject-introspection/all/conanfile.py b/recipes/gobject-introspection/all/conanfile.py new file mode 100644 index 0000000000000..eed498d23069d --- /dev/null +++ b/recipes/gobject-introspection/all/conanfile.py @@ -0,0 +1,111 @@ +from conans import ConanFile, tools, Meson, VisualStudioBuildEnvironment +from conans.errors import ConanInvalidConfiguration +import os +import shutil +import glob + + +class GobjectIntrospectionConan(ConanFile): + name = "gobject-introspection" + description = "GObject introspection is a middleware layer between C libraries (using GObject) and language bindings" + topics = ("conan", "gobject-instrospection") + url = "https://github.com/conan-io/conan-center-index" + homepage = "https://gitlab.gnome.org/GNOME/gobject-introspection" + license = "LGPL-2.1" + settings = "os", "arch", "compiler", "build_type" + options = {"shared": [True, False], "fPIC": [True, False]} + default_options = {"shared": False, "fPIC": True} + _source_subfolder = "source_subfolder" + _build_subfolder = "build_subfolder" + generators = "pkg_config" + + @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 + + def config_options(self): + if self.settings.os == "Windows": + del self.options.fPIC + self.options.shared = True + + def build_requirements(self): + self.build_requires("meson/0.56.1") + self.build_requires("pkgconf/1.7.3") + if self.settings.os == "Windows": + self.build_requires("winflexbison/2.5.22") + else: + self.build_requires("flex/2.6.4") + self.build_requires("bison/3.7.1") + + def requirements(self): + self.requires("glib/2.67.1") + + 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() + defs["build_introspection_data"] = self.options["glib"].shared + + meson.configure( + source_folder=self._source_subfolder, + args=["--wrap-mode=nofallback"], + build_folder=self._build_subfolder, + defs=defs, + ) + return meson + + def build(self): + tools.replace_in_file( + os.path.join(self._source_subfolder, "meson.build"), + "subdir('tests')", + "#subdir('tests')", + ) + tools.replace_in_file( + os.path.join(self._source_subfolder, "meson.build"), + "if meson.version().version_compare('>=0.54.0')", + "if false", + ) + + with tools.environment_append( + VisualStudioBuildEnvironment(self).vars + if self._is_msvc + else {"PKG_CONFIG_PATH": self.build_folder} + ): + meson = self._configure_meson() + meson.build() + + 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() + 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.names["pkg_config"] = "gobject-introspection-1.0" + self.cpp_info.libs = ["girepository-1.0"] + self.cpp_info.includedirs.append( + os.path.join("include", "gobject-introspection-1.0") + ) + + 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) diff --git a/recipes/gobject-introspection/all/test_package/CMakeLists.txt b/recipes/gobject-introspection/all/test_package/CMakeLists.txt new file mode 100644 index 0000000000000..7b9b613cbb24a --- /dev/null +++ b/recipes/gobject-introspection/all/test_package/CMakeLists.txt @@ -0,0 +1,8 @@ +cmake_minimum_required(VERSION 3.1) +project(test_package C) + +include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) +conan_basic_setup() + +add_executable(${PROJECT_NAME} test_package.c) +target_link_libraries(${PROJECT_NAME} ${CONAN_LIBS}) diff --git a/recipes/gobject-introspection/all/test_package/conanfile.py b/recipes/gobject-introspection/all/test_package/conanfile.py new file mode 100644 index 0000000000000..c3dfda05c0109 --- /dev/null +++ b/recipes/gobject-introspection/all/test_package/conanfile.py @@ -0,0 +1,25 @@ +from conans import ConanFile, CMake, tools +import os + + +class TestPackageConan(ConanFile): + settings = "os", "compiler", "build_type", "arch" + generators = "cmake", "cmake_find_package", "pkg_config" + + def build(self): + if self.settings.os != 'Windows': + self.run('g-ir-annotation-tool --version', run_environment=True) + self.run('g-ir-compiler --version', run_environment=True) + self.run('g-ir-generate --version', run_environment=True) + self.run('g-ir-inspect -h', run_environment=True) + self.run('g-ir-scanner --version', run_environment=True) + + cmake = CMake(self) + cmake.configure() + cmake.build() + + def test(self): + if not tools.cross_building(self.settings): + bin_path = os.path.join("bin", "test_package") + self.run(bin_path, run_environment=True) + diff --git a/recipes/gobject-introspection/all/test_package/test_package.c b/recipes/gobject-introspection/all/test_package/test_package.c new file mode 100644 index 0000000000000..326f59d50b641 --- /dev/null +++ b/recipes/gobject-introspection/all/test_package/test_package.c @@ -0,0 +1,11 @@ +#include + +#include "girepository.h" + +int main(int argc, char **argv) +{ + printf("gobject introspection version %d.%d.%d\n", + gi_get_major_version(), + gi_get_minor_version(), + gi_get_micro_version()); +} diff --git a/recipes/gobject-introspection/config.yml b/recipes/gobject-introspection/config.yml new file mode 100644 index 0000000000000..a06bb4ba2b798 --- /dev/null +++ b/recipes/gobject-introspection/config.yml @@ -0,0 +1,3 @@ +versions: + "1.66.1": + folder: all From 4ded8b4e4d389d18adaffc76bd11e0bed3a43ec6 Mon Sep 17 00:00:00 2001 From: Eric Lemanissier Date: Thu, 14 Jan 2021 13:56:41 +0100 Subject: [PATCH 2/2] disble windows also, fix UB in test_package.c --- recipes/gobject-introspection/all/conanfile.py | 3 ++- recipes/gobject-introspection/all/test_package/test_package.c | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/recipes/gobject-introspection/all/conanfile.py b/recipes/gobject-introspection/all/conanfile.py index eed498d23069d..2c37ae5905713 100644 --- a/recipes/gobject-introspection/all/conanfile.py +++ b/recipes/gobject-introspection/all/conanfile.py @@ -32,7 +32,8 @@ def configure(self): def config_options(self): if self.settings.os == "Windows": del self.options.fPIC - self.options.shared = True + if self.settings.os == "Windows": + raise ConanInvalidConfiguration("%s recipe does not support windows. Contributions are welcome!", self.name) def build_requirements(self): self.build_requires("meson/0.56.1") diff --git a/recipes/gobject-introspection/all/test_package/test_package.c b/recipes/gobject-introspection/all/test_package/test_package.c index 326f59d50b641..c1b18cd52e49e 100644 --- a/recipes/gobject-introspection/all/test_package/test_package.c +++ b/recipes/gobject-introspection/all/test_package/test_package.c @@ -8,4 +8,5 @@ int main(int argc, char **argv) gi_get_major_version(), gi_get_minor_version(), gi_get_micro_version()); + return 0; }