[ffigen] Test on mac, to cover objective C (#289)
diff --git a/pkgs/ffigen/.github/workflows/test-package.yml b/pkgs/ffigen/.github/workflows/test-package.yml index 8da431d..67a6c95 100644 --- a/pkgs/ffigen/.github/workflows/test-package.yml +++ b/pkgs/ffigen/.github/workflows/test-package.yml
@@ -59,3 +59,25 @@ with: github-token: ${{ secrets.GITHUB_TOKEN }} path-to-lcov: lcov.info + + mac-test: + needs: analyze + runs-on: macos-latest + steps: + - uses: actions/checkout@v2 + - uses: dart-lang/setup-dart@v1.0 + with: + sdk: stable + - name: Install dependencies + run: dart pub get + - name: Build test dylib + run: cd test/native_test && dart build_test_dylib.dart && cd ../.. + - name: Run VM tests + run: dart test --platform vm + - name: Collect coverage + run: ./tool/coverage.sh + - name: Upload coverage + uses: coverallsapp/github-action@v1.1.2 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + path-to-lcov: lcov.info
diff --git a/pkgs/ffigen/lib/src/header_parser/includer.dart b/pkgs/ffigen/lib/src/header_parser/includer.dart index 0b3505b..4f3bbbf 100644 --- a/pkgs/ffigen/lib/src/header_parser/includer.dart +++ b/pkgs/ffigen/lib/src/header_parser/includer.dart
@@ -70,7 +70,8 @@ // Objective C has some extra system headers that have a non-empty sourceFile. if (config.language == Language.objc && - sourceFile.startsWith(strings.clangDefaultObjCSystemHeaderPath)) { + strings.objCInternalDirectories + .any((path) => sourceFile.startsWith(path))) { return false; }
diff --git a/pkgs/ffigen/lib/src/strings.dart b/pkgs/ffigen/lib/src/strings.dart index 2e57de7..2140572 100644 --- a/pkgs/ffigen/lib/src/strings.dart +++ b/pkgs/ffigen/lib/src/strings.dart
@@ -42,6 +42,14 @@ '/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include'; const clangDefaultObjCSystemHeaders = ['objc/NSObject.h']; +// Internal objective C directories that are automatically pulled in by clang, +// and should be excluded from output (unless explicitly used). +const objCInternalDirectories = [ + clangDefaultObjCSystemHeaderPath, + '/Applications/Xcode.app/Contents/Developer', + '/usr/local/opt/llvm/lib', +]; + const headers = 'headers'; // Sub-fields of headers
diff --git a/pkgs/ffigen/test/header_parser_tests/expected_bindings/_expected_objc_basic_types_bindings.dart b/pkgs/ffigen/test/header_parser_tests/expected_bindings/_expected_objc_basic_types_bindings.dart index 5cd8096..8fe008b 100644 --- a/pkgs/ffigen/test/header_parser_tests/expected_bindings/_expected_objc_basic_types_bindings.dart +++ b/pkgs/ffigen/test/header_parser_tests/expected_bindings/_expected_objc_basic_types_bindings.dart
@@ -24,7 +24,3 @@ class ObjCObject extends ffi.Opaque {} class ObjCSel extends ffi.Opaque {} - -const int true1 = 1; - -const int false1 = 0;