repro the dep issue
diff --git a/pkgs/ffigen/hook/build.dart b/pkgs/ffigen/hook/build.dart index f6ad322..871a850 100644 --- a/pkgs/ffigen/hook/build.dart +++ b/pkgs/ffigen/hook/build.dart
@@ -77,7 +77,7 @@ if (codeConfig.targetOS == OS.macOS) { final builder = await CustomBuilder.create( input, - input.packageRoot.resolve('../').toFilePath(), + input.packageRoot.toFilePath(), ); // Build swift_class_test.swift. There's no swift compilation package, so @@ -140,42 +140,11 @@ ); } - // Build package:objective_c sources into objc_test as a workaround for - // dependency native asset resolution in tests. - final objcPkgDir = input.packageRoot.resolve('../objective_c/'); - final objcSrcDir = Directory.fromUri(objcPkgDir.resolve('src/')); - final objcCFlags = [ - ...cFlags, - '-I', - objcPkgDir.resolve('src/').toFilePath(), - ]; - final objcMFlags = [...objcCFlags, '-x', 'objective-c', '-fobjc-arc']; - - final objcDependencies = <Uri>[]; - for (final file in objcSrcDir.listSync(recursive: true)) { - if (file is File) { - final path = file.path; - if (path.endsWith('.c')) { - objcDependencies.add(file.uri); - objFiles.add(await builder.buildObject(file.uri, objcCFlags)); - } else if (path.endsWith('.m')) { - objcDependencies.add(file.uri); - objFiles.add(await builder.buildObject(file.uri, objcMFlags)); - } else if (path.endsWith('.h')) { - objcDependencies.add(file.uri); - } - } - } - final refTracker = objcPkgDir.resolve('test/reference_tracker.m'); - if (File.fromUri(refTracker).existsSync()) { - objcDependencies.add(refTracker); - objFiles.add(await builder.buildObject(refTracker, objcMFlags)); - } - final gcInject = objcPkgDir.resolve('test/gc_inject.m'); - if (File.fromUri(gcInject).existsSync()) { - objcDependencies.add(gcInject); - objFiles.add(await builder.buildObject(gcInject, objcMFlags)); - } + // Add dart_api_dl.c from objective_c package. + final dartApiDl = input.packageRoot.resolve( + '../objective_c/src/include/dart_api_dl.c', + ); + objFiles.add(await builder.buildObject(dartApiDl, cFlags)); const objcAsset = 'objc_test'; final objcLib = input.outputDirectory.resolve('$objcAsset.dylib'); @@ -183,16 +152,9 @@ ...cFlags, '-framework', 'Foundation', - '-undefined', - 'dynamic_lookup', ]); - output.dependencies.addAll([ - ...mFiles, - ...hFiles, - swiftFile, - ...objcDependencies, - ]); + output.dependencies.addAll([...mFiles, ...hFiles, swiftFile, dartApiDl]); output.assets.code.add( CodeAsset(
diff --git a/pkgs/ffigen/test/native_objc_test/util.dart b/pkgs/ffigen/test/native_objc_test/util.dart index 0e537f1..4995d73 100644 --- a/pkgs/ffigen/test/native_objc_test/util.dart +++ b/pkgs/ffigen/test/native_objc_test/util.dart
@@ -2,7 +2,7 @@ // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. -@DefaultAsset('package:ffigen/objc_test') +@DefaultAsset('package:objective_c/objective_c.dylib') library; import 'dart:ffi';
diff --git a/pkgs/objective_c/lib/src/internal.dart b/pkgs/objective_c/lib/src/internal.dart index a35a70e..a4c407d 100644 --- a/pkgs/objective_c/lib/src/internal.dart +++ b/pkgs/objective_c/lib/src/internal.dart
@@ -4,7 +4,6 @@ import 'dart:async'; import 'dart:ffi'; -import 'dart:io'; import 'dart:isolate'; import 'package:ffi/ffi.dart'; @@ -235,44 +234,12 @@ bool _dartAPIInitialized = false; void _ensureDartAPI() { if (!_dartAPIInitialized) { - _tryLoadDylibFallback(); final result = c.initializeApi(NativeApi.initializeApiDLData); assert(result == 0); _dartAPIInitialized = true; } } -void _tryLoadDylibFallback() { - if (DynamicLibrary.process().providesSymbol('DOBJC_initializeApi')) { - return; - } - final candidates = [ - Platform.script.resolve('../lib/objective_c.dylib').toFilePath(), - Platform.script.resolve('../lib/objc_test.dylib').toFilePath(), - Platform.script.resolve('objective_c.dylib').toFilePath(), - Platform.script.resolve('objc_test.dylib').toFilePath(), - '${Directory.current.path}/.dart_tool/lib/objective_c.dylib', - '${Directory.current.path}/.dart_tool/lib/objc_test.dylib', - ]; - for (final path in candidates) { - if (File(path).existsSync()) { - try { - final dlopen = DynamicLibrary.process() - .lookupFunction< - Pointer<Void> Function(Pointer<Utf8>, Int32), - Pointer<Void> Function(Pointer<Utf8>, int) - >('dlopen'); - final pathPtr = path.toNativeUtf8(); - dlopen(pathPtr, 0x8 | 0x2); // RTLD_GLOBAL | RTLD_NOW - calloc.free(pathPtr); - if (DynamicLibrary.process().providesSymbol('DOBJC_initializeApi')) { - return; - } - } catch (_) {} - } - } -} - c.Dart_FinalizableHandle _newFinalizableHandle( _FinalizablePointer finalizable, ) { @@ -618,10 +585,7 @@ } /// Only for use by FFIgen bindings. -final ContextPtr objCContext = () { - _ensureDartAPI(); - return c.createContext(); -}(); +final ContextPtr objCContext = c.createContext(); // Not exported by ../objective_c.dart, because they're only for testing. bool blockHasRegisteredClosure(BlockPtr block) =>