diff --git a/mesonbuild/dependencies/__init__.py b/mesonbuild/dependencies/__init__.py index abc2e22b2d86..89d2285ba3a6 100644 --- a/mesonbuild/dependencies/__init__.py +++ b/mesonbuild/dependencies/__init__.py @@ -223,6 +223,7 @@ def __init__(self, name: str, environment: 'Environment', kwargs: T.Dict[str, T. 'openssl': 'misc', 'libcrypto': 'misc', 'libssl': 'misc', + 'objfw': 'misc', # From platform: 'appleframeworks': 'platform', diff --git a/mesonbuild/dependencies/misc.py b/mesonbuild/dependencies/misc.py index b255813b60b9..e57a2edb4c13 100644 --- a/mesonbuild/dependencies/misc.py +++ b/mesonbuild/dependencies/misc.py @@ -474,6 +474,24 @@ def __init__(self, name: str, env: 'Environment', kwargs: T.Dict[str, T.Any]): self.link_args.extend(sublib) +class ObjFWDependencyConfigTool(ConfigToolDependency): + + tools = ['objfw-config'] + tool_name = 'objfw-config' + + def __init__(self, name: str, environment: 'Environment', kwargs: T.Dict[str, T.Any]): + super().__init__(name, environment, kwargs) + if not self.is_found: + return + # TODO: Once Meson supports adding flags per language, only add --objcflags to ObjC + # TODO: Once Meson supports adding flags per language, add --cflags and --cxxflags + # TODO: Add support for --package, exposed as modules. + # TODO: Expose --reexport + # TODO: Expose --framework-libs + self.compile_args = self.get_config_value(['--cppflags', '--objcflags'], 'compile_args') + self.link_args = self.get_config_value(['--ldflags', '--libs'], 'link_args') + + @factory_methods({DependencyMethods.PKGCONFIG, DependencyMethods.CONFIG_TOOL, DependencyMethods.SYSTEM}) def curses_factory(env: 'Environment', for_machine: 'mesonlib.MachineChoice', @@ -616,3 +634,9 @@ def shaderc_factory(env: 'Environment', system_class=OpensslSystemDependency, cmake_class=CMakeDependencyFactory('OpenSSL', modules=['OpenSSL::SSL']), ) + +packages['objfw'] = objfw_factory = DependencyFactory( + 'objfw', + [DependencyMethods.CONFIG_TOOL], + configtool_class=ObjFWDependencyConfigTool, +) diff --git a/test cases/objc/5 objfw/TestApplication.m b/test cases/objc/5 objfw/TestApplication.m new file mode 100644 index 000000000000..ffb13f508520 --- /dev/null +++ b/test cases/objc/5 objfw/TestApplication.m @@ -0,0 +1,13 @@ +#import + +@interface TestApplication: OFObject +@end + +OF_APPLICATION_DELEGATE(TestApplication) + +@implementation TestApplication +- (void)applicationDidFinishLaunching: (OFNotification *)notification +{ + [OFApplication terminate]; +} +@end diff --git a/test cases/objc/5 objfw/meson.build b/test cases/objc/5 objfw/meson.build new file mode 100644 index 000000000000..d291b587bfc0 --- /dev/null +++ b/test cases/objc/5 objfw/meson.build @@ -0,0 +1,13 @@ +project('TestApplication', 'objc', + version: '0.1', + default_options: ['warning_level=3']) + +objfw_dep = dependency('objfw', required: false) +if not objfw_dep.found() + error('MESON_SKIP_TEST: Need objfw dependency') +endif + +exe = executable('TestApplication', 'TestApplication.m', + dependencies: [objfw_dep]) + +test('basic', exe) diff --git a/test cases/objcpp/3 objfw/TestApplication.mm b/test cases/objcpp/3 objfw/TestApplication.mm new file mode 100644 index 000000000000..ffb13f508520 --- /dev/null +++ b/test cases/objcpp/3 objfw/TestApplication.mm @@ -0,0 +1,13 @@ +#import + +@interface TestApplication: OFObject +@end + +OF_APPLICATION_DELEGATE(TestApplication) + +@implementation TestApplication +- (void)applicationDidFinishLaunching: (OFNotification *)notification +{ + [OFApplication terminate]; +} +@end diff --git a/test cases/objcpp/3 objfw/meson.build b/test cases/objcpp/3 objfw/meson.build new file mode 100644 index 000000000000..e4ca3cfae3a6 --- /dev/null +++ b/test cases/objcpp/3 objfw/meson.build @@ -0,0 +1,13 @@ +project('TestApplication', 'objcpp', + version: '0.1', + default_options: ['warning_level=3']) + +objfw_dep = dependency('objfw', required: false) +if not objfw_dep.found() + error('MESON_SKIP_TEST: Need objfw dependency') +endif + +exe = executable('TestApplication', 'TestApplication.mm', + dependencies: [objfw_dep]) + +test('basic', exe)