Hi, I would like to adopt gobject-introsection package, because the latest glib2.0 2.83.4 requires newer gobject-introspection.
Thanks in advance. -- Takashi Yano <takashi.y...@nifty.ne.jp>
inherit gnome2 python3 meson NAME="gobject-introspection" VERSION=1.82.0 RELEASE=1 CATEGORY="Libs" SUMMARY="GObject Introspection tools" DESCRIPTION="The goal of the project is to describe GObject APIs and collect them in a uniform, machine readable format." HOMEPAGE="https://gi.readthedocs.io/en/latest/" LICENSE="GPL-2.0-or-later AND LGPL-2.0-or-later AND MIT" PATCH_URI=" 1.62.0-cygwin-fixes.patch 1.62.0-python-linkage.patch 1.60.2-shlib-tests.patch fix-cairo-library-name.patch drop-unbuildable-gir-tests.patch " CYGMESON_ARGS=" --auto-features=auto -Dcairo=enabled -Ddoctool=enabled -Dgtk_doc=true -Dpython=${PYTHON3} " PKG_NAMES="${NAME} libgirepository1.0_1 libgirepository1.0-devel libgirepository1.0-doc" gobject_introspection_CATEGORY="Devel" gobject_introspection_SUMMARY="GObject Introspection tools" gobject_introspection_REQUIRES="libgirepository1.0-devel python${PYTHON3_PKGVERSION}-mako" gobject_introspection_CONTENTS="--exclude=gir-1.0 --exclude=gtk-doc usr/bin/g-ir-* usr/lib/${NAME}/ usr/share/" libgirepository1_0_1_SUMMARY="GObject Introspection library (runtime)" libgirepository1_0_1_CONTENTS="usr/bin/cyggirepository-1.0-1.dll" libgirepository1_0_devel_REQUIRES="girepository-GIRepository2.0" libgirepository1_0_devel_SUMMARY="GObject Introspection library (development)" libgirepository1_0_devel_CONTENTS="usr/include/ usr/lib/libgirepository-1.0.* usr/lib/pkgconfig/" libgirepository1_0_doc_CATEGORY="Doc" libgirepository1_0_doc_SUMMARY="GObject Introspection library (API docs)" libgirepository1_0_doc_CONTENTS="usr/share/gtk-doc/" PKG_NAMES+=" girepository-cairo1.0 girepository-GIRepository2.0 girepository-GLib2.0 girepository-x11" girepository_cairo1_0_SUMMARY="GObject Introspection data for libcairo" girepository_cairo1_0_CONTENTS="usr/*/gir*/cairo-1.0.*" girepository_GIRepository2_0_SUMMARY="GObject Introspection library (GObject Introspection data)" girepository_GIRepository2_0_CONTENTS="usr/*/gir*/GIRepository-2.0.*" girepository_GLib2_0_SUMMARY="GLib GObjectIntrospection data" girepository_GLib2_0_CONTENTS="--exclude=GIR* --exclude=GL-* usr/*/gir*/G*-2.0.*" girepository_x11_SUMMARY="GObject Introspection data for X11 libraries" girepository_x11_CONTENTS="--exclude=cairo-1.0.* --exclude=G*-2.0.* usr/*/gir*/" BUILD_REQUIRES=" \ bison \ docbook-xml45 \ flex \ gnome-common \ gtk-doc \ libcairo-devel \ libffi-devel \ libglib2.0-devel \ python3-devel \ python39-mako \ python39-markdown \ " DEPS_PATH="/usr/lib/gobject-introspection/giscanner"
From a6e392e504353c4c987b6ff56eb36cf090d2b7f5 Mon Sep 17 00:00:00 2001 From: Jon Turney <jon.tur...@dronecode.org.uk> Date: Thu, 2 Jan 2025 19:30:21 +0000 Subject: [PATCH] Cygwin patch --- girepository/girepository.c | 2 +- giscanner/ccompiler.py | 4 ++++ giscanner/shlibs.py | 11 +++++++++++ giscanner/utils.py | 2 +- 4 files changed, 17 insertions(+), 2 deletions(-) diff --git a/girepository/girepository.c b/girepository/girepository.c index 08149da8..86f43d92 100644 --- a/girepository/girepository.c +++ b/girepository/girepository.c @@ -85,7 +85,7 @@ struct _GIRepositoryPrivate G_DEFINE_TYPE_WITH_CODE (GIRepository, g_irepository, G_TYPE_OBJECT, G_ADD_PRIVATE (GIRepository)); -#ifdef G_PLATFORM_WIN32 +#ifdef G_OS_WIN32 #include <windows.h> diff --git a/giscanner/ccompiler.py b/giscanner/ccompiler.py index 35549da2..81022dac 100644 --- a/giscanner/ccompiler.py +++ b/giscanner/ccompiler.py @@ -183,6 +183,10 @@ class CCompiler(object): if os.name == 'nt': runtime_path_envvar = ['LIB', 'PATH'] + elif os.name == 'nt' or sys.platform == 'cygwin': + runtime_path_envvar = ['PATH'] + # Search the current directory first + args.append('-L.') else: runtime_path_envvar = ['LD_LIBRARY_PATH', 'DYLD_FALLBACK_LIBRARY_PATH'] # Search the current directory first diff --git a/giscanner/shlibs.py b/giscanner/shlibs.py index e6de7bb6..34ca4d4d 100644 --- a/giscanner/shlibs.py +++ b/giscanner/shlibs.py @@ -46,6 +46,17 @@ def _resolve_libtool(options, binary, libraries): # We say that if something in the output looks like libpangoft2<blah> # then the *first* such in the output is the soname. def _ldd_library_pattern(library_name): + if platform.platform().startswith('CYGWIN'): + return re.compile(r"""^ + # Require trailing slash to avoid matching liblibfoo when looking for libfoo. + (.*[/])? + cyg%s + # Prohibit library name characters to avoid matching libpangoft2 when looking for libpango. + [^/A-Za-z0-9_] + # Anything but the path separator to avoid matching directories. + [^/]* + $""" % re.escape(library_name), re.VERBOSE) + return re.compile(r"""^ # Require trailing slash to avoid matching liblibfoo when looking for libfoo. (.*[/])? diff --git a/giscanner/utils.py b/giscanner/utils.py index 25160c3e..3c91ae27 100644 --- a/giscanner/utils.py +++ b/giscanner/utils.py @@ -78,7 +78,7 @@ def to_underscores_noprefix(name): return name -_libtool_pat = re.compile("dlname='([A-z0-9\\.\\-\\+]+)'\n") +_libtool_pat = re.compile("dlname='([A-z0-9/\\.\\-\\+]+)'\n") def _extract_dlname_field(la_file): -- 2.45.1
--- origsrc/gobject-introspection-1.62.0/giscanner/meson.build 2025-01-05 20:27:13.679459400 +0000 +++ src/gobject-introspection-1.62.0/giscanner/meson.build 2025-01-05 21:03:13.093453100 +0000 @@ -92,7 +92,7 @@ giscanner_lib = static_library('giscanne ) # https://github.com/mesonbuild/meson/issues/4117 -if host_machine.system() == 'windows' +if host_machine.system() == 'windows' or host_machine.system() == 'cygwin' python_ext_dep = python.dependency() else python_ext_dep = python.dependency().partial_dependency(compile_args: true)
--- origsrc/gobject-introspection-1.60.2/tests/scanner/test_shlibs.py 2019-03-25 20:17:44.000000000 +0000 +++ src/gobject-introspection-1.60.2/tests/scanner/test_shlibs.py 2025-01-06 18:09:53.452858600 +0000 @@ -4,33 +4,40 @@ import os from giscanner.shlibs import resolve_from_ldd_output, sanitize_shlib_path +# XXX: maybe we should also accept 'lib' as a prefix in _ldd_library_pattern to +# avoid having to change all these tests? and add some cygwin specific ones? +if os.uname()[0].startswith('CYGWIN'): + libprefix='cyg' +else: + libprefix='lib' + class TestLddParser(unittest.TestCase): def test_resolve_from_ldd_output(self): output = '''\ - libglib-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007fbe12d68000) - libgtk-3.so.0 => /usr/lib/x86_64-linux-gnu/libgtk-3.so.0 (0x00007fbe12462000) - libgdk-3.so.0 => /usr/lib/x86_64-linux-gnu/libgdk-3.so.0 (0x00007fbe1216c000) - libpango-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libpango-1.0.so.0 (0x00007fbe11d1a000) - libatk-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libatk-1.0.so.0 (0x00007fbe11af4000)''' + {0}glib-2.0.so.0 => /usr/lib/x86_64-linux-gnu/{0}glib-2.0.so.0 (0x00007fbe12d68000) + {0}gtk-3.so.0 => /usr/lib/x86_64-linux-gnu/{0}gtk-3.so.0 (0x00007fbe12462000) + {0}gdk-3.so.0 => /usr/lib/x86_64-linux-gnu/{0}gdk-3.so.0 (0x00007fbe1216c000) + {0}pango-1.0.so.0 => /usr/lib/x86_64-linux-gnu/{0}pango-1.0.so.0 (0x00007fbe11d1a000) + {0}atk-1.0.so.0 => /usr/lib/x86_64-linux-gnu/{0}atk-1.0.so.0 (0x00007fbe11af4000)'''.format(libprefix) libraries = ['glib-2.0', 'gtk-3', 'pango-1.0'] self.assertEqual( - ['libglib-2.0.so.0', 'libgtk-3.so.0', 'libpango-1.0.so.0'], + ['{0}glib-2.0.so.0'.format(libprefix), '{0}gtk-3.so.0'.format(libprefix), '{0}pango-1.0.so.0'.format(libprefix)], resolve_from_ldd_output(libraries, output)) @unittest.skipUnless(os.name == "posix", "posix only") def test_resolve_from_ldd_output_macos_rpath(self): output = '''\ - @rpath/libbarapp-1.0.dylib (compatibility version 0.0.0, current version 0.0.0) - /foo/libgio-2.0.0.dylib (compatibility version 5801.0.0, current version 5801.3.0) - /foo/libgmodule-2.0.0.dylib (compatibility version 5801.0.0, current version 5801.3.0)''' + @rpath/{0}barapp-1.0.dylib (compatibility version 0.0.0, current version 0.0.0) + /foo/{0}gio-2.0.0.dylib (compatibility version 5801.0.0, current version 5801.3.0) + /foo/{0}gmodule-2.0.0.dylib (compatibility version 5801.0.0, current version 5801.3.0)'''.format(libprefix) libraries = ['barapp-1.0'] shlibs = resolve_from_ldd_output(libraries, output) - self.assertEqual(shlibs, ['@rpath/libbarapp-1.0.dylib']) - self.assertEqual(sanitize_shlib_path(shlibs[0]), 'libbarapp-1.0.dylib') + self.assertEqual(shlibs, ['@rpath/{0}barapp-1.0.dylib'.format(libprefix)]) + self.assertEqual(sanitize_shlib_path(shlibs[0]), '{0}barapp-1.0.dylib'.format(libprefix)) @unittest.skipUnless(os.name == "posix", "posix only") def test_sanitize_shlib_path(self): @@ -51,34 +58,34 @@ class TestLddParser(unittest.TestCase): def test_prefixed_library_name(self): output = '''\ - /usr/lib/liblibX.so - /usr/lib/libX.so''' + /usr/lib/{0}{0}X.so + /usr/lib/{0}X.so'''.format(libprefix) self.assertEqual( - ['/usr/lib/libX.so'], + ['/usr/lib/{0}X.so'.format(libprefix)], resolve_from_ldd_output(['X'], output)) self.assertEqual( - ['/usr/lib/liblibX.so'], - resolve_from_ldd_output(['libX'], output)) + ['/usr/lib/{0}{0}X.so'.format(libprefix)], + resolve_from_ldd_output(['{0}X'.format(libprefix)], output)) def test_suffixed_library_name(self): output = '''\ - libpangocairo.so.0 => /usr/lib/x86_64-linux-gnu/libpangocairo.so.0 (0x00) - libpangoft2.so.0 => /usr/lib/x86_64-linux-gnu/libpangoft2.so.0 (0x00) - libpango.so.0 => /usr/lib/x86_64-linux-gnu/libpango.so.0 (0x00)''' + {0}pangocairo.so.0 => /usr/lib/x86_64-linux-gnu/{0}pangocairo.so.0 (0x00) + {0}pangoft2.so.0 => /usr/lib/x86_64-linux-gnu/{0}pangoft2.so.0 (0x00) + {0}pango.so.0 => /usr/lib/x86_64-linux-gnu/{0}pango.so.0 (0x00)'''.format(libprefix) libraries = ['pango'] self.assertEqual( - ['libpango.so.0'], + ['{0}pango.so.0'.format(libprefix)], resolve_from_ldd_output(libraries, output)) def test_header_is_ignored(self): output = '''/tmp-introspection/libfoo.so.999: - 0000000000000000 0000000000000000 rlib 0 3 0 /usr/local/lib/libfoo.so.1''' + 0000000000000000 0000000000000000 rlib 0 3 0 /usr/local/lib/{}foo.so.1'''.format(libprefix) libraries = ['foo'] self.assertEqual( - ['/usr/local/lib/libfoo.so.1'], + ['/usr/local/lib/{}foo.so.1'.format(libprefix)], resolve_from_ldd_output(libraries, output)) def test_executable_path_includes_library_name(self): @@ -88,29 +95,29 @@ class TestLddParser(unittest.TestCase): output = '''/usr/ports/pobj/libgepub-0.6.0/build-amd64/tmp-introspectnxmyodg1/Gepub-0.6: Start End Type Open Ref GrpRef Name 00001066c8400000 00001066c8605000 exe 2 0 0 /usr/ports/pobj/libgepub-0.6.0/build-amd64/tmp-introspectnxmyodg1/Gepub-0.6 - 000010690019c000 00001069003a8000 rlib 0 1 0 /usr/local/lib/libgepub-0.6.so.0.0''' + 000010690019c000 00001069003a8000 rlib 0 1 0 /usr/local/lib/{0}gepub-0.6.so.0.0'''.format(libprefix) libraries = ['gepub-0.6'] self.assertEqual( - ['/usr/local/lib/libgepub-0.6.so.0.0'], + ['/usr/local/lib/{0}gepub-0.6.so.0.0'.format(libprefix)], resolve_from_ldd_output(libraries, output)) def test_library_path_includes_library_name(self): output = '''/usr/ports/pobj/gnome-music-3.28.1/build-amd64/tmp-introspectuz5xaun3/Gd-1.0: Start End Type Open Ref GrpRef Name 0000070e40f00000 0000070e41105000 exe 2 0 0 /usr/ports/pobj/gnome-music-3.28.1/build-amd64/tmp-introspectuz5xaun3/Gd-1.0 - 00000710f9b39000 00000710f9d51000 rlib 0 1 0 /usr/ports/pobj/gnome-music-3.28.1/build-amd64/subprojects/libgd/libgd/libgd.so''' + 00000710f9b39000 00000710f9d51000 rlib 0 1 0 /usr/ports/pobj/gnome-music-3.28.1/build-amd64/subprojects/libgd/libgd/{0}gd.so'''.format(libprefix) libraries = ['gd'] self.assertEqual( - ['/usr/ports/pobj/gnome-music-3.28.1/build-amd64/subprojects/libgd/libgd/libgd.so'], + ['/usr/ports/pobj/gnome-music-3.28.1/build-amd64/subprojects/libgd/libgd/{0}gd.so'.format(libprefix)], resolve_from_ldd_output(libraries, output)) def test_basename(self): - output = '''/usr/lib/libfoo.so''' + output = '''/usr/lib/{0}foo.so'''.format(libprefix) self.assertEqual( - ['/usr/lib/libfoo.so'], + ['/usr/lib/{0}foo.so'.format(libprefix)], resolve_from_ldd_output(['foo'], output))
--- origsrc/gobject-introspection-1.62.0/gir/meson.build 2019-09-09 20:22:10.000000000 +0100 +++ src/gobject-introspection-1.62.0/gir/meson.build 2025-01-07 13:56:17.722556800 +0000 @@ -7,6 +7,8 @@ elif host_machine.system() == 'windows' else cairo_library_name = 'libcairo-gobject-2.dll' endif +elif host_machine.system() == 'cygwin' + cairo_library_name = 'cygcairo-gobject-2.dll' elif host_machine.system() == 'darwin' cairo_library_name = 'libcairo-gobject.2.dylib' else
--- origsrc/gobject-introspection-1.82.0/tests/meson.build 2024-09-13 22:08:54.000000000 +0900 +++ src/gobject-introspection-1.82.0/tests/meson.build 2025-02-24 21:43:48.638287400 +0900 @@ -124,6 +132,7 @@ test_typelibs = [] if (glib_dep.type_name() == 'pkgconfig' and test_girscanner.found() and get_option('build_introspection_data') == true) + if host_machine.system() != 'cygwin' test_gir_files += [custom_target('gir-everything', input: test_everything_sources + test_everything_headers, output: 'Everything-1.0.gir', @@ -149,6 +158,7 @@ if (glib_dep.type_name() == 'pkgconfig' '@INPUT@', ] )] + endif test_gir_files += [custom_target('gir-gimarshallingtests', input: test_marshalling_sources + test_marshalling_headers, --- origsrc/gobject-introspection-1.82.0/tests/offsets/meson.build 2024-09-13 22:08:54.000000000 +0900 +++ src/gobject-introspection-1.82.0/tests/offsets/meson.build 2025-02-24 21:35:37.089302300 +0900 @@ -12,7 +12,7 @@ test_offsets_lib = shared_library('offse ) if glib_dep.type_name() == 'pkgconfig' - + if host_machine.system() != 'cygwin' test_offsets_gir = custom_target('gir-offsets', input: test_offsets_sources + test_offsets_headers, output: 'Offsets-1.0.gir', @@ -50,6 +50,7 @@ if glib_dep.type_name() == 'pkgconfig' '--includedir', meson.current_build_dir() ], ) + endif gitestoffsets_exe = executable('gitestoffsets', 'gitestoffsets.c', @@ -64,12 +65,13 @@ if glib_dep.type_name() == 'pkgconfig' test_offsets_env.prepend('PATH', join_paths(build_root, 'girepository')) endif + if host_machine.system() != 'cygwin' test('test_offsets.py', python, args: files('test_offsets.py'), env: test_offsets_env, depends: [gitestoffsets_exe, test_offsets_typelib], ) - + endif endif --- origsrc/gobject-introspection-1.82.0/tests/scanner/meson.build 2024-09-13 22:08:54.000000000 +0900 +++ src/gobject-introspection-1.82.0/tests/scanner/meson.build 2025-02-24 21:56:05.207263700 +0900 @@ -315,6 +315,7 @@ if (glib_dep.type_name() == 'pkgconfig' command: gircompiler_command, ) + if host_machine.system() != 'cygwin' gtkfrob_gir = custom_target('gir-gtkfrob', input: ['gtkfrob.c', 'gtkfrob.h'], output: 'GtkFrob-1.0.gir', @@ -353,6 +354,7 @@ if (glib_dep.type_name() == 'pkgconfig' depends: [gobject_gir], command: gircompiler_command, ) + endif gettype_gir = custom_target('gir-gettype', input: ['gettype.c', 'gettype.h'], @@ -532,7 +534,7 @@ if (glib_dep.type_name() == 'pkgconfig' ) test_typelibs += regress_typelib - if host_system != 'windows' + if host_system != 'windows' and host_machine.system() != 'cygwin' regress_unix_gir = custom_target('gir-regress-unix', input: [ '../../gobject-introspection-tests/regress-unix.c',