@@ -225,16 +225,11 @@ OPTIONS:
225225 Compile using -fvisibility=hidden and -fvisibility-inlines-hidden
226226
227227 --no-framework
228- Do not create the framework .
228+ Do not create the xcframework .
229229
230230 --universal
231231 Create universal FAT binary.
232232
233- --framework-header-root
234- Place headers in a 'boost' root directory in the framework rather than
235- directly in the 'Headers' directory.
236- Added for compatibility with projects that expect this structure.
237-
238233 --debug
239234 Build a debug variant.
240235
@@ -429,10 +424,6 @@ parseArgs()
429424 NO_FRAMEWORK=1
430425 ;;
431426
432- --framework-header-root)
433- HEADER_ROOT=1
434- ;;
435-
436427 -j | --threads)
437428 if [ -n " $2 " ]; then
438429 THREADS=" -j$2 "
@@ -1075,80 +1066,76 @@ buildUniversal()
10751066}
10761067
10771068# ===============================================================================
1078- buildFramework ()
1069+
1070+ buildXCFramework ()
10791071{
10801072 : " ${1:? } "
1081- FRAMEWORKDIR=" $1 "
1082- BUILDDIR=" $2 /build"
1083- PREFIXDIR=" $2 /prefix"
1073+ DISTDIR=" $1 "
10841074
10851075 FRAMEWORK_NAME=boost
1086- FRAMEWORK_VERSION=A
10871076
10881077 FRAMEWORK_CURRENT_VERSION=" $BOOST_VERSION "
10891078
1090- FRAMEWORK_BUNDLE=" $FRAMEWORKDIR /$FRAMEWORK_NAME .framework "
1091- echo " Framework: Building $FRAMEWORK_BUNDLE from $BUILDDIR ..."
1079+ FRAMEWORK_BUNDLE=" $DISTDIR /$FRAMEWORK_NAME .xcframework "
1080+ echo " Framework: Building $FRAMEWORK_BUNDLE ..."
10921081
10931082 rm -rf " $FRAMEWORK_BUNDLE "
1094- if [[ -n $HEADER_ROOT ]]; then
1095- FRAMEWORK_HEADERS=" /Headers/boost/"
1096- else
1097- FRAMEWORK_HEADERS=" /Headers/"
1098- fi
1099-
1100- echo " Framework: Setting up directories..."
1101- mkdir -p " $FRAMEWORK_BUNDLE /Versions/$FRAMEWORK_VERSION /Resources"
1102- mkdir -p " $FRAMEWORK_BUNDLE /Versions/$FRAMEWORK_VERSION /$FRAMEWORK_HEADERS "
1103- mkdir -p " $FRAMEWORK_BUNDLE /Versions/$FRAMEWORK_VERSION /Documentation"
11041083
1105- echo " Framework: Creating symlinks..."
1106- ln -s " $FRAMEWORK_VERSION " " $FRAMEWORK_BUNDLE /Versions/Current"
1107- ln -s " Versions/Current/Headers" " $FRAMEWORK_BUNDLE /Headers"
1108- ln -s " Versions/Current/Resources" " $FRAMEWORK_BUNDLE /Resources"
1109- ln -s " Versions/Current/Documentation" " $FRAMEWORK_BUNDLE /Documentation"
1110- ln -s " Versions/Current/$FRAMEWORK_NAME " " $FRAMEWORK_BUNDLE /$FRAMEWORK_NAME "
1111-
1112- FRAMEWORK_INSTALL_NAME=" $FRAMEWORK_BUNDLE /Versions/$FRAMEWORK_VERSION /$FRAMEWORK_NAME "
1084+ SLICES_COUNT=0
1085+ LIB_ARGS=()
1086+ # We'll take any of the paths we find, headers should be the same for all
1087+ # archs / plaforms.
1088+ HEADERS_PATH=" "
1089+ if [[ -n $BUILD_IOS ]]; then
1090+ for LIBPATH in " $IOS_OUTPUT_DIR " /build/* /libboost.a; do
1091+ LIB_ARGS+=(' -library' " $LIBPATH " )
1092+ SLICES_COUNT=$(( SLICES_COUNT + 1 ))
1093+ done
11131094
1114- if [[ -n $BOOTSTRAP_LIBS ]]; then
1115- echo " Lipoing library into $FRAMEWORK_INSTALL_NAME ..."
1116- cd_or_abort " $BUILDDIR "
1117- if [[ -n $BUILD_IOS ]]; then
1118- $IOS_DEV_CMD lipo -create ./* /libboost.a -o " $FRAMEWORK_INSTALL_NAME " || abort " Lipo $1 failed"
1095+ INCLUDE_DIR=" $IOS_OUTPUT_DIR /prefix/include"
1096+ if [ -d " $INCLUDE_DIR " ]; then
1097+ HEADERS_PATH=" $INCLUDE_DIR "
11191098 fi
1120- if [[ -n $BUILD_TVOS ]]; then
1121- $TVOS_DEV_CMD lipo -create ./* /libboost.a -o " $FRAMEWORK_INSTALL_NAME " || abort " Lipo $1 failed"
1099+ fi
1100+ if [[ -n $BUILD_TVOS ]]; then
1101+ for LIBPATH in " $TVOS_OUTPUT_DIR " /build/* /libboost.a; do
1102+ LIB_ARGS+=(' -library' " $LIBPATH " )
1103+ SLICES_COUNT=$(( SLICES_COUNT + 1 ))
1104+ done
1105+
1106+ INCLUDE_DIR=" $TVOS_OUTPUT_DIR /prefix/include"
1107+ if [ -d " $INCLUDE_DIR " ]; then
1108+ HEADERS_PATH=" $INCLUDE_DIR "
11221109 fi
1123- if [[ -n $BUILD_MACOS ]]; then
1124- $MACOS_DEV_CMD lipo -create ./* /libboost.a -o " $FRAMEWORK_INSTALL_NAME " || abort " Lipo $1 failed"
1110+ fi
1111+ if [[ -n $BUILD_MACOS ]]; then
1112+ for LIBPATH in " $MACOS_OUTPUT_DIR " /build/* /libboost.a; do
1113+ LIB_ARGS+=(' -library' " $LIBPATH " )
1114+ SLICES_COUNT=$(( SLICES_COUNT + 1 ))
1115+ done
1116+
1117+ INCLUDE_DIR=" $MACOS_OUTPUT_DIR /prefix/include"
1118+ if [ -d " $INCLUDE_DIR " ]; then
1119+ HEADERS_PATH=" $INCLUDE_DIR "
11251120 fi
11261121 fi
11271122
1128- echo " Framework: Copying includes..."
1129- cp -r " $PREFIXDIR /include/boost/" * " $FRAMEWORK_BUNDLE /$FRAMEWORK_HEADERS "
1130-
1131- echo " Framework: Creating plist..."
1132- cat > " $FRAMEWORK_BUNDLE /Resources/Info.plist" << EOF
1133- <?xml version="1.0" encoding="UTF-8"?>
1134- <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
1135- <plist version="1.0">
1136- <dict>
1137- <key>CFBundleExecutable</key>
1138- <string>${FRAMEWORK_NAME} </string>
1139- <key>CFBundleIdentifier</key>
1140- <string>org.boost</string>
1141- <key>CFBundleInfoDictionaryVersion</key>
1142- <string>6.0</string>
1143- <key>CFBundlePackageType</key>
1144- <string>FMWK</string>
1145- <key>CFBundleSignature</key>
1146- <string>????</string>
1147- <key>CFBundleVersion</key>
1148- <string>${FRAMEWORK_CURRENT_VERSION} </string>
1149- </dict>
1150- </plist>
1151- EOF
1123+ xcrun xcodebuild -create-xcframework \
1124+ " ${LIB_ARGS[@]} " \
1125+ -headers " $HEADERS_PATH " \
1126+ -output " $FRAMEWORK_BUNDLE "
1127+
1128+
1129+ # Fix the 'Headers' directory location in the xcframework, and update the
1130+ # Info.plist accordingly for all slices.
1131+ FRAMEWORK_HEADERS_PATH=$( find " ${FRAMEWORK_BUNDLE} " -name ' Headers' )
1132+ mv " $FRAMEWORK_HEADERS_PATH " " $FRAMEWORK_BUNDLE "
1133+
1134+ for I in $( seq 0 $(( SLICES_COUNT - 1 )) ) ; do
1135+ plutil -replace " AvailableLibraries.$I .HeadersPath" -string ' ../Headers' " $FRAMEWORK_BUNDLE /Info.plist"
1136+ done
1137+
1138+ echo " $FRAMEWORK_CURRENT_VERSION " > " $FRAMEWORK_BUNDLE /VERSION"
11521139
11531140 doneSection
11541141}
@@ -1195,9 +1182,6 @@ MACOS_OUTPUT_DIR="$OUTPUT_DIR/macos/$BUILD_VARIANT"
11951182IOS_BUILD_DIR=" $IOS_OUTPUT_DIR /build"
11961183TVOS_BUILD_DIR=" $TVOS_OUTPUT_DIR /build"
11971184MACOS_BUILD_DIR=" $MACOS_OUTPUT_DIR /build"
1198- IOS_FRAMEWORK_DIR=" $IOS_OUTPUT_DIR /framework"
1199- TVOS_FRAMEWORK_DIR=" $TVOS_OUTPUT_DIR /framework"
1200- MACOS_FRAMEWORK_DIR=" $MACOS_OUTPUT_DIR /framework"
12011185
12021186MACOS_ARCH_FLAGS=()
12031187for ARCH in " ${MACOS_ARCHS[@]} " ; do
@@ -1249,9 +1233,6 @@ printVar "XCODE_ROOT"
12491233printVar " IOS_BUILD_DIR"
12501234printVar " TVOS_BUILD_DIR"
12511235printVar " MACOS_BUILD_DIR"
1252- printVar " TVOS_FRAMEWORK_DIR"
1253- printVar " IOS_FRAMEWORK_DIR"
1254- printVar " MACOS_FRAMEWORK_DIR"
12551236printVar " THREADS"
12561237printVar " BUILD_VARIANT"
12571238echo
@@ -1301,17 +1282,9 @@ if [[ -n $UNIVERSAL ]]; then
13011282fi
13021283
13031284if [[ -z $NO_FRAMEWORK ]]; then
1304- if [[ -n $BUILD_IOS ]]; then
1305- buildFramework " $IOS_FRAMEWORK_DIR " " $IOS_OUTPUT_DIR "
1306- fi
1307-
1308- if [[ -n $BUILD_TVOS ]]; then
1309- buildFramework " $TVOS_FRAMEWORK_DIR " " $TVOS_OUTPUT_DIR "
1310- fi
1311-
1312- if [[ -n $BUILD_MACOS ]]; then
1313- buildFramework " $MACOS_FRAMEWORK_DIR " " $MACOS_OUTPUT_DIR "
1314- fi
1285+ DIST_DIR=" $CURRENT_DIR /dist"
1286+ mkdir -p " $DIST_DIR "
1287+ buildXCFramework " $DIST_DIR "
13151288fi
13161289
13171290echo " Completed successfully"
0 commit comments