diff --git a/.fvmrc b/.fvmrc index 827b556..14bb2a9 100644 --- a/.fvmrc +++ b/.fvmrc @@ -1,3 +1,3 @@ { - "flutter": "3.47.5" + "flutter": "3.50.0" } diff --git a/.github/actions/setup-zig/action.yml b/.github/actions/setup-zig/action.yml index 9c4a5bb..50bf220 100644 --- a/.github/actions/setup-zig/action.yml +++ b/.github/actions/setup-zig/action.yml @@ -5,7 +5,7 @@ inputs: version: description: Zig version to install required: false - default: '0.16.0' + default: '0.17.1' runs: using: composite diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0a5b855..ef128fe 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -92,6 +92,23 @@ jobs: flutter pub get flutter build apk --debug + - name: Enable KVM access + run: | + echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules + sudo udevadm control --reload-rules + sudo udevadm trigger --name-match=kvm + + - name: Run Android hash smoke test + uses: reactivecircus/android-emulator-runner@v2 + with: + working-directory: example + api-level: 35 + target: google_apis + arch: x86_64 + profile: pixel_2 + emulator-options: -no-window -no-audio -no-boot-anim -gpu swiftshader_indirect -no-snapshot + script: flutter test integration_test/hash_smoke_test.dart -d emulator-5554 + build-ios: runs-on: macos-latest @@ -123,6 +140,20 @@ jobs: flutter pub get flutter build ios --debug --no-codesign + - name: Run iOS hash smoke test + run: | + set -euo pipefail + device_id="$(xcrun simctl list devices available | awk -F '[()]' '/iPhone/ { print $2; exit }')" + if [[ -z "${device_id}" ]]; then + echo 'No available iPhone Simulator found.' >&2 + xcrun simctl list devices available >&2 + exit 1 + fi + xcrun simctl boot "${device_id}" 2>/dev/null || true + xcrun simctl bootstatus "${device_id}" -b + cd example + flutter test integration_test/hash_smoke_test.dart -d "${device_id}" + build-macos: runs-on: macos-latest @@ -166,6 +197,12 @@ jobs: exit 1 fi + - name: Run macOS hash smoke test + run: | + flutter config --enable-macos-desktop + cd example + flutter test integration_test/hash_smoke_test.dart -d macos + build-linux: runs-on: ubuntu-latest @@ -178,7 +215,7 @@ jobs: - name: Install Linux desktop dependencies run: | sudo apt-get update - sudo apt-get install -y clang cmake ninja-build pkg-config libgtk-3-dev liblzma-dev + sudo apt-get install -y clang cmake ninja-build pkg-config libgtk-3-dev liblzma-dev xvfb - name: Setup Flutter uses: subosito/flutter-action@v2 @@ -203,6 +240,11 @@ jobs: flutter pub get flutter build linux --debug + - name: Run Linux hash smoke test + run: | + cd example + xvfb-run -a flutter test integration_test/hash_smoke_test.dart -d linux + build-windows: runs-on: windows-latest @@ -238,6 +280,12 @@ jobs: flutter pub get flutter build windows --debug + - name: Run Windows hash smoke test + shell: pwsh + run: | + Set-Location example + flutter test integration_test/hash_smoke_test.dart -d windows + verify-prebuilts: runs-on: macos-latest diff --git a/.metadata b/.metadata index 4e84bd6..1650f9c 100644 --- a/.metadata +++ b/.metadata @@ -4,7 +4,7 @@ # This file should be version controlled and should not be manually edited. version: - revision: "ad70ec4617166f1c38e5d2bfd388af71fda14f06" + revision: "ab2912035e160d9cad6306df307576da6128ebdb" channel: "stable" project_type: package_ffi @@ -13,23 +13,23 @@ project_type: package_ffi migration: platforms: - platform: root - create_revision: ad70ec4617166f1c38e5d2bfd388af71fda14f06 - base_revision: ad70ec4617166f1c38e5d2bfd388af71fda14f06 + create_revision: ab2912035e160d9cad6306df307576da6128ebdb + base_revision: ab2912035e160d9cad6306df307576da6128ebdb - platform: android - create_revision: ad70ec4617166f1c38e5d2bfd388af71fda14f06 - base_revision: ad70ec4617166f1c38e5d2bfd388af71fda14f06 + create_revision: ab2912035e160d9cad6306df307576da6128ebdb + base_revision: ab2912035e160d9cad6306df307576da6128ebdb - platform: ios - create_revision: ad70ec4617166f1c38e5d2bfd388af71fda14f06 - base_revision: ad70ec4617166f1c38e5d2bfd388af71fda14f06 + create_revision: ab2912035e160d9cad6306df307576da6128ebdb + base_revision: ab2912035e160d9cad6306df307576da6128ebdb - platform: linux - create_revision: ad70ec4617166f1c38e5d2bfd388af71fda14f06 - base_revision: ad70ec4617166f1c38e5d2bfd388af71fda14f06 + create_revision: ab2912035e160d9cad6306df307576da6128ebdb + base_revision: ab2912035e160d9cad6306df307576da6128ebdb - platform: macos - create_revision: ad70ec4617166f1c38e5d2bfd388af71fda14f06 - base_revision: ad70ec4617166f1c38e5d2bfd388af71fda14f06 + create_revision: ab2912035e160d9cad6306df307576da6128ebdb + base_revision: ab2912035e160d9cad6306df307576da6128ebdb - platform: windows - create_revision: ad70ec4617166f1c38e5d2bfd388af71fda14f06 - base_revision: ad70ec4617166f1c38e5d2bfd388af71fda14f06 + create_revision: ab2912035e160d9cad6306df307576da6128ebdb + base_revision: ab2912035e160d9cad6306df307576da6128ebdb # User provided section diff --git a/CHANGELOG.md b/CHANGELOG.md index 4b03b74..00d4e04 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,29 @@ # Releases +## 0.0.6 + +### Changed + +- Updated the bundled Zig core to `zig-files-hash` `v0.0.8` / Zig `0.17.1`. +- Removed the Apple static-library repacking workaround now that Zig emits correctly aligned Mach-O archives ([ziglang/zig#35984](https://codeberg.org/ziglang/zig/pulls/35984)). +- Updated the Zig CI version and platform build scripts for the new core version. C ABI remains v4. +- Adapted the iOS Simulator build hook to Flutter 3.50's stricter native asset + validation by extracting the requested architecture from the universal Zig + dylib. + +### Example app + +- Migrated the example app from Flutter's deprecated Material import to the + standalone `material_ui` package recommended for Flutter 3.50. + +### CI / validation + +- Added target-platform hash smoke tests for Android, iOS, macOS, Linux, and + Windows. Each target verifies the reference SHA-256 digest through both + `stringHash` and `fileHash`. + +--- + ## 0.0.5 ### Changed diff --git a/README.md b/README.md index 610addd..90d25bf 100644 --- a/README.md +++ b/README.md @@ -55,7 +55,7 @@ Use the package from pub.dev: ```yaml dependencies: - flutter_file_hash: ^0.0.5 + flutter_file_hash: ^0.0.6 ``` For local development, use a path dependency: diff --git a/analysis_options.yaml b/analysis_options.yaml index 756c0f4..534f26d 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -2,6 +2,11 @@ analyzer: exclude: - build/** - android/** + - ios/** + - web/** + - windows/** + - macos/** + - linux/** include: package:flutter_lints/flutter.yaml # Additional information about this file can be found at diff --git a/android/build.gradle.kts b/android/build.gradle.kts index 0c7c45a..b807613 100644 --- a/android/build.gradle.kts +++ b/android/build.gradle.kts @@ -2,14 +2,14 @@ group = "com.preeternal.flutter_file_hash" version = "1.0-SNAPSHOT" buildscript { - val kotlinVersion = "2.3.20" + val kotlinVersion = "2.4.0" repositories { google() mavenCentral() } dependencies { - classpath("com.android.tools.build:gradle:9.0.1") + classpath("com.android.tools.build:gradle:9.1.1") classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion") } } diff --git a/example/.fvmrc b/example/.fvmrc index 827b556..14bb2a9 100644 --- a/example/.fvmrc +++ b/example/.fvmrc @@ -1,3 +1,3 @@ { - "flutter": "3.47.5" + "flutter": "3.50.0" } diff --git a/example/android/gradle/wrapper/gradle-wrapper.properties b/example/android/gradle/wrapper/gradle-wrapper.properties index 2d428bf..a20f2c4 100644 --- a/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/example/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.1-all.zip diff --git a/example/android/settings.gradle.kts b/example/android/settings.gradle.kts index c21f0c5..b88c625 100644 --- a/example/android/settings.gradle.kts +++ b/example/android/settings.gradle.kts @@ -19,8 +19,8 @@ pluginManagement { plugins { id("dev.flutter.flutter-plugin-loader") version "1.0.0" - id("com.android.application") version "9.0.1" apply false - id("org.jetbrains.kotlin.android") version "2.3.20" apply false + id("com.android.application") version "9.1.1" apply false + id("org.jetbrains.kotlin.android") version "2.4.0" apply false } include(":app") diff --git a/example/integration_test/hash_smoke_test.dart b/example/integration_test/hash_smoke_test.dart new file mode 100644 index 0000000..9cd2ed9 --- /dev/null +++ b/example/integration_test/hash_smoke_test.dart @@ -0,0 +1,36 @@ +import 'dart:io'; + +import 'package:flutter_file_hash/flutter_file_hash.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:integration_test/integration_test.dart'; + +const _sha256Abc = + 'ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad'; + +void main() { + IntegrationTestWidgetsFlutterBinding.ensureInitialized(); + + testWidgets('hashes the reference vector on the target platform', ( + tester, + ) async { + expect(stringHash('abc', algorithm: HashAlgorithm.sha256), _sha256Abc); + + final tempDir = await Directory.systemTemp.createTemp( + 'flutter_file_hash_smoke_', + ); + try { + final file = File.fromUri(tempDir.uri.resolve('input.txt')); + await file.writeAsString('abc'); + expect( + await fileHash(file.path, algorithm: HashAlgorithm.sha256), + _sha256Abc, + ); + } finally { + await tempDir.delete(recursive: true); + } + + // Keep a clear marker in CI logs in addition to the test assertion. + // ignore: avoid_print + print('FILE_HASH_FLUTTER_SMOKE_PASS'); + }); +} diff --git a/example/lib/main.dart b/example/lib/main.dart index ffcbf64..9029ce2 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -4,9 +4,9 @@ import 'dart:io'; import 'dart:math' as math; import 'package:file_selector/file_selector.dart'; -import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_file_hash/flutter_file_hash.dart'; +import 'package:material_ui/material_ui.dart'; void main() { runApp(const HashExampleApp()); @@ -322,26 +322,29 @@ class _HashDemoPageState extends State { }, ), const SizedBox(height: 8), - CheckboxListTile( - contentPadding: EdgeInsets.zero, - controlAffinity: ListTileControlAffinity.leading, - value: _useMmap, - onChanged: _fileRunning || _benchmarkRunning - ? null - : (value) { - setState(() { - _useMmap = value ?? false; - _fileHash = ''; - _fileElapsedMs = null; - _fileStatus = null; - _benchmarkResults = const []; - _benchmarkStatus = null; - }); - }, - title: const Text('Use mmap for local files'), - subtitle: Text( - 'Applies to Hash file and Benchmark. Use only stable local files; ignored for Android content:// URIs.', - style: TextStyle(color: palette.muted), + Material( + type: MaterialType.transparency, + child: CheckboxListTile( + contentPadding: EdgeInsets.zero, + controlAffinity: ListTileControlAffinity.leading, + value: _useMmap, + onChanged: _fileRunning || _benchmarkRunning + ? null + : (value) { + setState(() { + _useMmap = value ?? false; + _fileHash = ''; + _fileElapsedMs = null; + _fileStatus = null; + _benchmarkResults = const []; + _benchmarkStatus = null; + }); + }, + title: const Text('Use mmap for local files'), + subtitle: Text( + 'Applies to Hash file and Benchmark. Use only stable local files; ignored for Android content:// URIs.', + style: TextStyle(color: palette.muted), + ), ), ), ], diff --git a/example/pubspec.lock b/example/pubspec.lock index ba8bb2a..5fd9607 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -29,10 +29,10 @@ packages: dependency: transitive description: name: clock - sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b + sha256: e51d50bca3217c9a9fa2b41a30e4a38971133f5f9ec7a3d57bae095007f1d28e url: "https://pub.dev" source: hosted - version: "1.1.2" + version: "1.1.3" code_assets: dependency: transitive description: @@ -73,6 +73,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.9" + cupertino_ui: + dependency: transitive + description: + name: cupertino_ui + sha256: "369e39a1c5c030a6212589c3da1809920b1c2cfade7b02aade7695bfa4b88c3a" + url: "https://pub.dev" + source: hosted + version: "1.1.6" fake_async: dependency: transitive description: @@ -89,6 +97,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.2.0" + file: + dependency: transitive + description: + name: file + sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4 + url: "https://pub.dev" + source: hosted + version: "7.0.1" file_selector: dependency: "direct main" description: @@ -158,13 +174,18 @@ packages: description: flutter source: sdk version: "0.0.0" + flutter_driver: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" flutter_file_hash: dependency: "direct main" description: path: ".." relative: true source: path - version: "0.0.5" + version: "0.0.6" flutter_lints: dependency: "direct dev" description: @@ -173,6 +194,11 @@ packages: url: "https://pub.dev" source: hosted version: "6.0.0" + flutter_localizations: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" flutter_test: dependency: "direct dev" description: flutter @@ -183,6 +209,11 @@ packages: description: flutter source: sdk version: "0.0.0" + fuchsia_remote_debug_protocol: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" hooks: dependency: transitive description: @@ -207,6 +238,19 @@ packages: url: "https://pub.dev" source: hosted version: "4.1.2" + integration_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + intl: + dependency: transitive + description: + name: intl + sha256: "1ca20c894b1717686a2319b8548763d812bc0aabdac580420a44c5178c57a867" + url: "https://pub.dev" + source: hosted + version: "0.20.3" leak_tracker: dependency: transitive description: @@ -239,6 +283,14 @@ packages: url: "https://pub.dev" source: hosted version: "6.1.0" + listen: + dependency: transitive + description: + name: listen + sha256: "47501a08016a43fcad79252439d723f50f14f88fa7bfd8a177e0a417e5c9e1f2" + url: "https://pub.dev" + source: hosted + version: "1.0.1" logging: dependency: transitive description: @@ -263,6 +315,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.13.0" + material_ui: + dependency: "direct main" + description: + name: material_ui + sha256: "474c135fd46b56ff1d35ca982155e8863d28fbc6464d1192acf4ee53a738680e" + url: "https://pub.dev" + source: hosted + version: "1.11.0" meta: dependency: transitive description: @@ -279,6 +339,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.9.1" + platform: + dependency: transitive + description: + name: platform + sha256: a36d119c13416516a7b5913fbe8af8531e11633d784c550b2125f76c758524ec + url: "https://pub.dev" + source: hosted + version: "3.2.0" plugin_platform_interface: dependency: transitive description: @@ -287,6 +355,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.8" + process: + dependency: transitive + description: + name: process + sha256: "4242ba3508d37e01808bdf71ad1d5bb93a8d671bf2e7450e6b1b353fb0808891" + url: "https://pub.dev" + source: hosted + version: "5.0.6" pub_semver: dependency: transitive description: @@ -320,10 +396,10 @@ packages: dependency: transitive description: name: stack_trace - sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1" + sha256: "277654b3034d17ac6f9f1cb5595db011b1d5d41e8806866db28e0abaa101c490" url: "https://pub.dev" source: hosted - version: "1.12.1" + version: "1.12.2" stream_channel: dependency: transitive description: @@ -340,6 +416,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.4.1" + sync_http: + dependency: transitive + description: + name: sync_http + sha256: "7f0cd72eca000d2e026bcd6f990b81d0ca06022ef4e32fb257b30d3d1014a961" + url: "https://pub.dev" + source: hosted + version: "0.3.1" term_glyph: dependency: transitive description: @@ -352,10 +436,10 @@ packages: dependency: transitive description: name: test_api - sha256: "2a122cbe059f8b610d3a5415f42e255b6c17b1f21eee1d960f31080237fb4f11" + sha256: "0a10344e901e5b2e63819567951cb6a06673ed6b84f40462188ff5a0c41f371f" url: "https://pub.dev" source: hosted - version: "0.7.12" + version: "0.7.14" typed_data: dependency: transitive description: @@ -388,6 +472,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.1" + webdriver: + dependency: transitive + description: + name: webdriver + sha256: "28b82ec894fed45dd71c23ba62d1af973ed97dd59a4f5790a4d38b0b13e5657e" + url: "https://pub.dev" + source: hosted + version: "3.2.0" yaml: dependency: transitive description: diff --git a/example/pubspec.yaml b/example/pubspec.yaml index 9f5638b..614467e 100644 --- a/example/pubspec.yaml +++ b/example/pubspec.yaml @@ -43,9 +43,12 @@ dependencies: # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 file_selector: ^1.1.0 + material_ui: ^1.11.0 dev_dependencies: flutter_test: sdk: flutter + integration_test: + sdk: flutter # The "flutter_lints" package below contains a set of recommended lints to # encourage good coding practices. The lint set provided by the package is diff --git a/example/test/hash_example_app_test.dart b/example/test/hash_example_app_test.dart new file mode 100644 index 0000000..79b114e --- /dev/null +++ b/example/test/hash_example_app_test.dart @@ -0,0 +1,27 @@ +import 'package:flutter_file_hash_example/main.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:material_ui/material_ui.dart'; + +void main() { + testWidgets('renders and toggles the mmap option without framework errors', ( + tester, + ) async { + tester.view.physicalSize = const Size(1200, 1800); + tester.view.devicePixelRatio = 1; + addTearDown(tester.view.resetPhysicalSize); + addTearDown(tester.view.resetDevicePixelRatio); + + await tester.pumpWidget(const HashExampleApp()); + await tester.pumpAndSettle(); + expect(tester.takeException(), isNull); + + final mmapOption = find.byType(CheckboxListTile); + await tester.ensureVisible(mmapOption); + expect(tester.widget(mmapOption).value, isFalse); + + await tester.tap(mmapOption); + await tester.pumpAndSettle(); + expect(tester.takeException(), isNull); + expect(tester.widget(mmapOption).value, isTrue); + }); +} diff --git a/hook/build.dart b/hook/build.dart index 6241765..88fbb55 100644 --- a/hook/build.dart +++ b/hook/build.dart @@ -66,14 +66,20 @@ final class _PrebuiltZigFilesHashBuilder { final variant = code.iOS.targetSdk == IOSSdk.iPhoneSimulator ? 'ios-simulator-universal' : 'ios-arm64'; - return root.resolve('ios/$variant/${OS.iOS.dylibFileName(_libraryName)}'); + final prebuilt = root.resolve( + 'ios/$variant/${OS.iOS.dylibFileName(_libraryName)}', + ); + if (code.iOS.targetSdk == IOSSdk.iPhoneSimulator) { + return _thinAppleDylib(prebuilt, code.targetArchitecture, OS.iOS); + } + return prebuilt; } if (code.targetOS == OS.macOS) { final universal = root.resolve( 'macos/universal/${OS.macOS.dylibFileName(_libraryName)}', ); - return _thinMacOSDylib(universal, code.targetArchitecture); + return _thinAppleDylib(universal, code.targetArchitecture, OS.macOS); } if (code.targetOS == OS.linux) { @@ -93,12 +99,16 @@ final class _PrebuiltZigFilesHashBuilder { throw BuildError(message: 'Unsupported target OS: ${code.targetOS}'); } - Future _thinMacOSDylib(Uri universal, Architecture architecture) async { + Future _thinAppleDylib( + Uri universal, + Architecture architecture, + OS os, + ) async { output.dependencies.add(universal); - final archName = _macOSLipoArch(architecture); + final archName = _appleLipoArch(architecture); final outputUri = input.outputDirectory.resolve( - 'zig-files-hash/$archName/${OS.macOS.dylibFileName(_libraryName)}', + 'zig-files-hash/$archName/${os.dylibFileName(_libraryName)}', ); final outputFile = File.fromUri(outputUri); await outputFile.parent.create(recursive: true); @@ -114,7 +124,7 @@ final class _PrebuiltZigFilesHashBuilder { if (result.exitCode != 0) { throw BuildError( message: - 'Failed to thin macOS flutter_file_hash prebuilt for $archName.\n' + 'Failed to thin $os flutter_file_hash prebuilt for $archName.\n' '${result.stderr}', ); } @@ -141,10 +151,10 @@ String _simpleArch(Architecture arch) { }; } -String _macOSLipoArch(Architecture arch) { +String _appleLipoArch(Architecture arch) { return switch (arch) { Architecture.arm64 => 'arm64', Architecture.x64 => 'x86_64', - _ => throw BuildError(message: 'Unsupported macOS architecture: $arch'), + _ => throw BuildError(message: 'Unsupported Apple architecture: $arch'), }; } diff --git a/pubspec.yaml b/pubspec.yaml index 89ab82d..bb1e659 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: flutter_file_hash description: "Native Flutter file and string hashing powered by Zig, with SHA, MD5, HMAC, BLAKE3, XXH3, cancellation, mmap, and Android content:// support." -version: 0.0.5 +version: 0.0.6 repository: https://github.com/Preeternal/flutter-file-hash environment: diff --git a/scripts/build-zig-ios.sh b/scripts/build-zig-ios.sh index 33456a9..b3ab726 100755 --- a/scripts/build-zig-ios.sh +++ b/scripts/build-zig-ios.sh @@ -32,30 +32,6 @@ if [[ ! -f "${ZIG_CORE_DIR}/build.zig" ]]; then exit 1 fi -repack_static_library() { - local input_lib="$1" - local output_lib="$2" - local work_dir - work_dir="$(mktemp -d)" - - ( - cd "${work_dir}" - xcrun ar -x "${input_lib}" - - local objects=(*.o) - if [[ ! -e "${objects[0]}" ]]; then - echo "No object files found in ${input_lib}" >&2 - exit 1 - fi - - chmod u+rw "${objects[@]}" - xcrun libtool -static -o "${output_lib}" "${objects[@]}" - xcrun ranlib "${output_lib}" - ) - - rm -rf "${work_dir}" -} - build_target() { local target="$1" local out_lib="$2" @@ -70,7 +46,7 @@ build_target() { --prefix "${prefix_dir}" ) - repack_static_library "${prefix_dir}/lib/libzig_files_hash_c_api_static.a" "${out_lib}" + cp "${prefix_dir}/lib/libzig_files_hash_c_api_static.a" "${out_lib}" rm -rf "${prefix_dir}" } diff --git a/scripts/build-zig-macos.sh b/scripts/build-zig-macos.sh index c901b1c..eee9f8f 100755 --- a/scripts/build-zig-macos.sh +++ b/scripts/build-zig-macos.sh @@ -32,30 +32,6 @@ if [[ ! -f "${ZIG_CORE_DIR}/build.zig" ]]; then exit 1 fi -repack_static_library() { - local input_lib="$1" - local output_lib="$2" - local work_dir - work_dir="$(mktemp -d)" - - ( - cd "${work_dir}" - xcrun ar -x "${input_lib}" - - local objects=(*.o) - if [[ ! -e "${objects[0]}" ]]; then - echo "No object files found in ${input_lib}" >&2 - exit 1 - fi - - chmod u+rw "${objects[@]}" - xcrun libtool -static -o "${output_lib}" "${objects[@]}" - xcrun ranlib "${output_lib}" - ) - - rm -rf "${work_dir}" -} - build_target() { local target="$1" local out_lib="$2" @@ -70,7 +46,7 @@ build_target() { --prefix "${prefix_dir}" ) - repack_static_library "${prefix_dir}/lib/libzig_files_hash_c_api_static.a" "${out_lib}" + cp "${prefix_dir}/lib/libzig_files_hash_c_api_static.a" "${out_lib}" rm -rf "${prefix_dir}" } diff --git a/third_party/zig-files-hash b/third_party/zig-files-hash index 3f3b27d..3525404 160000 --- a/third_party/zig-files-hash +++ b/third_party/zig-files-hash @@ -1 +1 @@ -Subproject commit 3f3b27d39d2572cd1cb4d25a07e6bdf4ec39ced0 +Subproject commit 3525404b99c0a04b07d8ad6dbaf0b5cdea264692