@@ -71,6 +71,21 @@ swift_module_map() {
7171 echo ' }'
7272}
7373
74+ # Move headers into a Clibsodium subdirectory to avoid module.modulemap collisions
75+ # when multiple xcframeworks are used together (see swift-sodium issue #276)
76+ reorganize_headers () {
77+ local include_dir=" $1 "
78+ if [ -d " $include_dir " ] && [ ! -d " $include_dir /Clibsodium" ]; then
79+ mkdir -p " $include_dir /Clibsodium"
80+ # Move all files and directories (except Clibsodium itself) into Clibsodium/
81+ for item in " $include_dir " /* ; do
82+ if [ " $( basename " $item " ) " != " Clibsodium" ]; then
83+ mv " $item " " $include_dir /Clibsodium/"
84+ fi
85+ done
86+ fi
87+ }
88+
7489build_macos () {
7590 export BASEDIR=" ${XCODEDIR} /Platforms/MacOSX.platform/Developer"
7691 export PATH=" ${BASEDIR} /usr/bin:$BASEDIR /usr/sbin:$PATH "
@@ -420,6 +435,7 @@ echo "Bundling macOS targets..."
420435
421436mkdir -p " ${PREFIX} /macos/lib"
422437cp -a " ${MACOS_X86_64_PREFIX} /include" " ${PREFIX} /macos/"
438+ reorganize_headers " ${PREFIX} /macos/include"
423439for ext in a dylib; do
424440 lipo -create \
425441 " ${MACOS_ARM64_PREFIX} /lib/libsodium.${ext} " \
@@ -432,6 +448,7 @@ echo "Bundling iOS targets..."
432448
433449mkdir -p " ${PREFIX} /ios/lib"
434450cp -a " ${IOS64_PREFIX} /include" " ${PREFIX} /ios/"
451+ reorganize_headers " ${PREFIX} /ios/include"
435452for ext in a dylib; do
436453 LIBRARY_PATHS=" $IOS64_PREFIX /lib/libsodium.${ext} "
437454 LIBRARY_PATHS=" $LIBRARY_PATHS $IOS64E_PREFIX /lib/libsodium.${ext} "
@@ -444,6 +461,7 @@ echo "Bundling watchOS targets..."
444461
445462mkdir -p " ${PREFIX} /watchos/lib"
446463cp -a " ${WATCHOS64_32_PREFIX} /include" " ${PREFIX} /watchos/"
464+ reorganize_headers " ${PREFIX} /watchos/include"
447465for ext in a dylib; do
448466 lipo -create \
449467 " ${WATCHOS32_PREFIX} /lib/libsodium.${ext} " \
@@ -457,6 +475,7 @@ echo "Bundling tvOS targets..."
457475
458476mkdir -p " ${PREFIX} /tvos/lib"
459477cp -a " ${TVOS_PREFIX} /include" " ${PREFIX} /tvos/"
478+ reorganize_headers " ${PREFIX} /tvos/include"
460479for ext in a dylib; do
461480 lipo -create \
462481 " $TVOS_PREFIX /lib/libsodium.${ext} " \
@@ -469,6 +488,7 @@ if [ "$VISIONOS_SUPPORTED" = true ]; then
469488
470489 mkdir -p " ${PREFIX} /visionos/lib"
471490 cp -a " ${VISIONOS_PREFIX} /include" " ${PREFIX} /visionos/"
491+ reorganize_headers " ${PREFIX} /visionos/include"
472492 for ext in a dylib; do
473493 lipo -create \
474494 " $VISIONOS_PREFIX /lib/libsodium.${ext} " \
@@ -481,6 +501,7 @@ echo "Bundling Catalyst targets..."
481501
482502mkdir -p " ${PREFIX} /catalyst/lib"
483503cp -a " ${CATALYST_X86_64_PREFIX} /include" " ${PREFIX} /catalyst/"
504+ reorganize_headers " ${PREFIX} /catalyst/include"
484505for ext in a dylib; do
485506 if [ ! -f " ${CATALYST_X86_64_PREFIX} /lib/libsodium.${ext} " ]; then
486507 continue
@@ -497,6 +518,7 @@ if [ -z "$LIBSODIUM_SKIP_SIMULATORS" ]; then
497518
498519 mkdir -p " ${PREFIX} /ios-simulators/lib"
499520 cp -a " ${IOS_SIMULATOR_X86_64_PREFIX} /include" " ${PREFIX} /ios-simulators/"
521+ reorganize_headers " ${PREFIX} /ios-simulators/include"
500522 for ext in a dylib; do
501523 LIBRARY_PATHS=" ${IOS_SIMULATOR_ARM64_PREFIX} /lib/libsodium.${ext} "
502524 LIBRARY_PATHS=" $LIBRARY_PATHS ${IOS_SIMULATOR_ARM64E_PREFIX} /lib/libsodium.${ext} "
@@ -510,6 +532,7 @@ if [ -z "$LIBSODIUM_SKIP_SIMULATORS" ]; then
510532
511533 mkdir -p " ${PREFIX} /watchos-simulators/lib"
512534 cp -a " ${WATCHOS_SIMULATOR_X86_64_PREFIX} /include" " ${PREFIX} /watchos-simulators/"
535+ reorganize_headers " ${PREFIX} /watchos-simulators/include"
513536 for ext in a dylib; do
514537 lipo -create \
515538 " ${WATCHOS_SIMULATOR_ARM64_PREFIX} /lib/libsodium.${ext} " \
@@ -523,6 +546,7 @@ if [ -z "$LIBSODIUM_SKIP_SIMULATORS" ]; then
523546
524547 mkdir -p " ${PREFIX} /tvos-simulators/lib"
525548 cp -a " ${TVOS_SIMULATOR_X86_64_PREFIX} /include" " ${PREFIX} /tvos-simulators/"
549+ reorganize_headers " ${PREFIX} /tvos-simulators/include"
526550 for ext in a dylib; do
527551 lipo -create \
528552 " ${TVOS_SIMULATOR_ARM64_PREFIX} /lib/libsodium.${ext} " \
@@ -536,6 +560,7 @@ if [ -z "$LIBSODIUM_SKIP_SIMULATORS" ]; then
536560
537561 mkdir -p " ${PREFIX} /visionos-simulators/lib"
538562 cp -a " ${VISIONOS_SIMULATOR_PREFIX} /include" " ${PREFIX} /visionos-simulators/"
563+ reorganize_headers " ${PREFIX} /visionos-simulators/include"
539564 for ext in a dylib; do
540565 lipo -create \
541566 " ${VISIONOS_SIMULATOR_PREFIX} /lib/libsodium.${ext} " \
0 commit comments