From a338eaaa026a0baa50725a3547d4589c35880709 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Wed, 28 Jan 2026 23:03:26 +0100 Subject: [PATCH] apple-xcframework: move headers into a Clibsodium subdirectory The generated Clibsodium.xcframework will have headers at Headers/Clibsodium/ instead of Headers/ This prevents the module.modulemap collision when used alongside other xcframeworks. --- dist-build/apple-xcframework.sh | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/dist-build/apple-xcframework.sh b/dist-build/apple-xcframework.sh index 5e78fb91..21628256 100755 --- a/dist-build/apple-xcframework.sh +++ b/dist-build/apple-xcframework.sh @@ -92,6 +92,21 @@ swift_module_map() { echo '}' } +# Move headers into a Clibsodium subdirectory to avoid module.modulemap collisions +# when multiple xcframeworks are used together (see swift-sodium issue #276) +reorganize_headers() { + local include_dir="$1" + if [ -d "$include_dir" ] && [ ! -d "$include_dir/Clibsodium" ]; then + mkdir -p "$include_dir/Clibsodium" + # Move all files and directories (except Clibsodium itself) into Clibsodium/ + for item in "$include_dir"/*; do + if [ "$(basename "$item")" != "Clibsodium" ]; then + mv "$item" "$include_dir/Clibsodium/" + fi + done + fi +} + build_macos() { export BASEDIR="${XCODEDIR}/Platforms/MacOSX.platform/Developer" export PATH="${BASEDIR}/usr/bin:$BASEDIR/usr/sbin:$PATH" @@ -452,6 +467,7 @@ echo "Bundling macOS targets..." mkdir -p "${PREFIX}/macos/lib" cp -a "${MACOS_X86_64_PREFIX}/include" "${PREFIX}/macos/" +reorganize_headers "${PREFIX}/macos/include" for ext in a dylib; do lipo -create \ "${MACOS_ARM64_PREFIX}/lib/libsodium.${ext}" \ @@ -464,6 +480,7 @@ echo "Bundling iOS targets..." mkdir -p "${PREFIX}/ios/lib" cp -a "${IOS64_PREFIX}/include" "${PREFIX}/ios/" +reorganize_headers "${PREFIX}/ios/include" for ext in a dylib; do LIBRARY_PATHS="$IOS64_PREFIX/lib/libsodium.${ext}" LIBRARY_PATHS="$LIBRARY_PATHS $IOS64E_PREFIX/lib/libsodium.${ext}" @@ -476,6 +493,7 @@ echo "Bundling watchOS targets..." mkdir -p "${PREFIX}/watchos/lib" cp -a "${WATCHOS64_32_PREFIX}/include" "${PREFIX}/watchos/" +reorganize_headers "${PREFIX}/watchos/include" for ext in a dylib; do lipo -create \ "${WATCHOS32_PREFIX}/lib/libsodium.${ext}" \ @@ -489,6 +507,7 @@ echo "Bundling tvOS targets..." mkdir -p "${PREFIX}/tvos/lib" cp -a "${TVOS_PREFIX}/include" "${PREFIX}/tvos/" +reorganize_headers "${PREFIX}/tvos/include" for ext in a dylib; do lipo -create \ "$TVOS_PREFIX/lib/libsodium.${ext}" \ @@ -501,6 +520,7 @@ if [ "$VISIONOS_SUPPORTED" = true ]; then mkdir -p "${PREFIX}/visionos/lib" cp -a "${VISIONOS_PREFIX}/include" "${PREFIX}/visionos/" + reorganize_headers "${PREFIX}/visionos/include" for ext in a dylib; do lipo -create \ "$VISIONOS_PREFIX/lib/libsodium.${ext}" \ @@ -513,6 +533,7 @@ echo "Bundling Catalyst targets..." mkdir -p "${PREFIX}/catalyst/lib" cp -a "${CATALYST_X86_64_PREFIX}/include" "${PREFIX}/catalyst/" +reorganize_headers "${PREFIX}/catalyst/include" for ext in a dylib; do if [ ! -f "${CATALYST_X86_64_PREFIX}/lib/libsodium.${ext}" ]; then continue @@ -529,6 +550,7 @@ if [ -z "$LIBSODIUM_SKIP_SIMULATORS" ]; then mkdir -p "${PREFIX}/ios-simulators/lib" cp -a "${IOS_SIMULATOR_X86_64_PREFIX}/include" "${PREFIX}/ios-simulators/" + reorganize_headers "${PREFIX}/ios-simulators/include" for ext in a dylib; do LIBRARY_PATHS="${IOS_SIMULATOR_ARM64_PREFIX}/lib/libsodium.${ext}" LIBRARY_PATHS="$LIBRARY_PATHS ${IOS_SIMULATOR_ARM64E_PREFIX}/lib/libsodium.${ext}" @@ -545,6 +567,7 @@ if [ -z "$LIBSODIUM_SKIP_SIMULATORS" ]; then mkdir -p "${PREFIX}/watchos-simulators/lib" cp -a "${WATCHOS_SIMULATOR_X86_64_PREFIX}/include" "${PREFIX}/watchos-simulators/" + reorganize_headers "${PREFIX}/watchos-simulators/include" for ext in a dylib; do lipo -create \ "${WATCHOS_SIMULATOR_ARM64_PREFIX}/lib/libsodium.${ext}" \ @@ -558,6 +581,7 @@ if [ -z "$LIBSODIUM_SKIP_SIMULATORS" ]; then mkdir -p "${PREFIX}/tvos-simulators/lib" cp -a "${TVOS_SIMULATOR_X86_64_PREFIX}/include" "${PREFIX}/tvos-simulators/" + reorganize_headers "${PREFIX}/tvos-simulators/include" for ext in a dylib; do lipo -create \ "${TVOS_SIMULATOR_ARM64_PREFIX}/lib/libsodium.${ext}" \ @@ -571,6 +595,7 @@ if [ -z "$LIBSODIUM_SKIP_SIMULATORS" ]; then mkdir -p "${PREFIX}/visionos-simulators/lib" cp -a "${VISIONOS_SIMULATOR_PREFIX}/include" "${PREFIX}/visionos-simulators/" + reorganize_headers "${PREFIX}/visionos-simulators/include" for ext in a dylib; do lipo -create \ "${VISIONOS_SIMULATOR_PREFIX}/lib/libsodium.${ext}" \