ffmpeg-kit/scripts/function-apple.sh

1489 lines
41 KiB
Bash
Raw Normal View History

2020-11-23 00:51:45 +02:00
#!/bin/bash
source "${BASEDIR}/scripts/function.sh"
export FFMPEG_LIBS=("libavcodec" "libavdevice" "libavfilter" "libavformat" "libavutil" "libswresample" "libswscale")
get_ffmpeg_kit_version() {
2021-11-02 00:19:28 +02:00
local FFMPEG_KIT_VERSION=$(grep 'const FFmpegKitVersion' "${BASEDIR}"/apple/src/FFmpegKitConfig.m | grep -Eo '\".*\"' | sed -e 's/\"//g')
2020-11-23 00:51:45 +02:00
if [[ -z ${FFMPEG_KIT_LTS_BUILD} ]]; then
echo "${FFMPEG_KIT_VERSION}"
else
echo "${FFMPEG_KIT_VERSION}.LTS"
fi
}
get_external_library_version() {
local library_version=$(grep Version "${BASEDIR}"/prebuilt/"$(get_build_directory)"/pkgconfig/"$1".pc 2>>"${BASEDIR}"/build.log | sed 's/Version://g;s/\ //g')
echo "${library_version}"
}
#
# 1. architecture index
#
disable_ios_architecture_not_supported_on_detected_sdk_version() {
local ARCH_NAME=$(get_arch_name $1)
case ${ARCH_NAME} in
armv7 | armv7s | i386)
2021-10-06 23:13:07 +03:00
# SUPPORTED UNTIL IOS SDK 10.3.1
if [[ $(compare_versions "$IOS_MIN_VERSION" "10.3.1") -le 0 ]]; then
2020-11-23 00:51:45 +02:00
local SUPPORTED=1
else
local SUPPORTED=0
2020-11-23 00:51:45 +02:00
fi
;;
arm64e)
2021-10-06 23:13:07 +03:00
# INTRODUCED IN IOS SDK 10.1
if [[ $(compare_versions "$IOS_MIN_VERSION" "10.1") -ge 1 ]]; then
2020-11-23 00:51:45 +02:00
local SUPPORTED=1
else
local SUPPORTED=0
fi
;;
x86-64-mac-catalyst)
# INTRODUCED IN IOS SDK 13.0
2021-11-02 00:19:28 +02:00
if [[ $(compare_versions "$DETECTED_IOS_SDK_VERSION" "13.0") -ge 1 ]]; then
2020-11-23 00:51:45 +02:00
local SUPPORTED=1
else
local SUPPORTED=0
fi
;;
arm64-mac-catalyst)
2020-11-23 00:51:45 +02:00
# INTRODUCED IN IOS SDK 14.0
2021-11-02 00:19:28 +02:00
if [[ $(compare_versions "$DETECTED_IOS_SDK_VERSION" "14.0") -ge 1 ]]; then
local SUPPORTED=1
else
local SUPPORTED=0
fi
;;
arm64-simulator)
# INTRODUCED IN IOS SDK 14.0
2021-11-02 00:19:28 +02:00
if [[ $(compare_versions "$DETECTED_IOS_SDK_VERSION" "14.0") -ge 1 ]]; then
2020-11-23 00:51:45 +02:00
local SUPPORTED=1
else
local SUPPORTED=0
fi
;;
*)
local SUPPORTED=1
;;
esac
if [[ ${SUPPORTED} -ne 1 ]]; then
if [[ -z ${BUILD_FORCE} ]]; then
2021-11-02 00:19:28 +02:00
echo -e "INFO: Disabled ${ARCH_NAME} architecture which is not supported with Min iOS Target $IOS_MIN_VERSION and Min Mac Catalyst Target $MAC_CATALYST_MIN_VERSION on iOS SDK $DETECTED_IOS_SDK_VERSION\n" 1>>"${BASEDIR}"/build.log 2>&1
2020-11-23 00:51:45 +02:00
disable_arch "${ARCH_NAME}"
fi
fi
}
2021-02-27 14:33:12 +02:00
#
# 1. architecture index
#
disable_tvos_architecture_not_supported_on_detected_sdk_version() {
local ARCH_NAME=$(get_arch_name $1)
case ${ARCH_NAME} in
arm64-simulator)
# INTRODUCED IN TVOS SDK 14.0
2021-11-02 00:19:28 +02:00
if [[ $(compare_versions "$DETECTED_TVOS_SDK_VERSION" "14.0") -ge 1 ]]; then
2021-02-27 14:33:12 +02:00
local SUPPORTED=1
else
local SUPPORTED=0
fi
;;
*)
local SUPPORTED=1
;;
esac
if [[ ${SUPPORTED} -ne 1 ]]; then
if [[ -z ${BUILD_FORCE} ]]; then
2021-11-02 00:19:28 +02:00
echo -e "INFO: Disabled ${ARCH_NAME} architecture which is not supported on tvOS SDK $DETECTED_TVOS_SDK_VERSION\n" 1>>"${BASEDIR}"/build.log 2>&1
2021-02-27 14:33:12 +02:00
disable_arch "${ARCH_NAME}"
fi
fi
}
2020-11-23 00:51:45 +02:00
#
# 1. architecture index
#
disable_macos_architecture_not_supported_on_detected_sdk_version() {
local ARCH_NAME=$(get_arch_name $1)
case ${ARCH_NAME} in
arm64)
# INTRODUCED IN MACOS SDK 11.0
2021-11-02 00:19:28 +02:00
if [[ $(compare_versions "$DETECTED_MACOS_SDK_VERSION" "11.0") -ge 1 ]]; then
2020-11-23 00:51:45 +02:00
local SUPPORTED=1
else
local SUPPORTED=0
fi
;;
*)
local SUPPORTED=1
;;
esac
if [[ ${SUPPORTED} -ne 1 ]]; then
if [[ -z ${BUILD_FORCE} ]]; then
2021-11-02 00:19:28 +02:00
echo -e "INFO: Disabled ${ARCH_NAME} architecture which is not supported on macOS SDK $DETECTED_MACOS_SDK_VERSION\n" 1>>"${BASEDIR}"/build.log 2>&1
2020-11-23 00:51:45 +02:00
disable_arch "${ARCH_NAME}"
fi
fi
}
build_apple_architecture_variant_strings() {
2021-01-09 18:24:56 +02:00
export ALL_IOS_ARCHITECTURES="$(get_apple_architectures_for_variant "${ARCH_VAR_IOS}")"
export IPHONEOS_ARCHITECTURES="$(get_apple_architectures_for_variant "${ARCH_VAR_IPHONEOS}")"
export IPHONE_SIMULATOR_ARCHITECTURES="$(get_apple_architectures_for_variant "${ARCH_VAR_IPHONESIMULATOR}")"
export MAC_CATALYST_ARCHITECTURES="$(get_apple_architectures_for_variant "${ARCH_VAR_MAC_CATALYST}")"
2021-01-11 03:06:18 +02:00
export ALL_TVOS_ARCHITECTURES="$(get_apple_architectures_for_variant "${ARCH_VAR_TVOS}")"
2021-01-09 18:24:56 +02:00
export APPLETVOS_ARCHITECTURES="$(get_apple_architectures_for_variant "${ARCH_VAR_APPLETVOS}")"
export APPLETV_SIMULATOR_ARCHITECTURES="$(get_apple_architectures_for_variant "${ARCH_VAR_APPLETVSIMULATOR}")"
export MACOSX_ARCHITECTURES="$(get_apple_architectures_for_variant "${ARCH_VAR_MACOS}")"
2020-11-23 00:51:45 +02:00
}
#
# 1. architecture variant
#
# DEPENDS TARGET_ARCH_LIST VARIABLE
#
is_apple_architecture_variant_supported() {
local ARCHITECTURE_VARIANT="$1"
local TARGET_ARCHITECTURES=("$(get_apple_architectures_for_variant "${ARCHITECTURE_VARIANT}")")
local SUPPORTED="0"
for ARCH in "${TARGET_ARCH_LIST[@]}"; do
if [[ " ${TARGET_ARCHITECTURES[*]} " == *" ${ARCH} "* ]]; then
SUPPORTED="1"
fi
done
echo "${SUPPORTED}"
}
#
# 1. folder path
#
initialize_folder() {
rm -rf "$1" 1>>"${BASEDIR}"/build.log 2>&1
if [[ $? -ne 0 ]]; then
return 1
fi
mkdir -p "$1" 1>>"${BASEDIR}"/build.log 2>&1
if [[ $? -ne 0 ]]; then
return 1
fi
return 0
}
#
# 1. architecture variant
#
# DEPENDS TARGET_ARCH_LIST VARIABLE
#
create_ffmpeg_universal_library() {
local ARCHITECTURE_VARIANT="$1"
local TARGET_ARCHITECTURES=("$(get_apple_architectures_for_variant "${ARCHITECTURE_VARIANT}")")
local LIBRARY_NAME="ffmpeg"
2021-11-02 00:19:28 +02:00
local UNIVERSAL_LIBRARY_DIRECTORY="${BASEDIR}/.tmp/$(get_universal_library_directory "${ARCHITECTURE_VARIANT}")"
local FFMPEG_UNIVERSAL_LIBRARY_DIRECTORY="${UNIVERSAL_LIBRARY_DIRECTORY}/${LIBRARY_NAME}"
2020-11-23 00:51:45 +02:00
local LIPO="$(xcrun --sdk "$(get_default_sdk_name)" -f lipo)"
if [[ $(is_apple_architecture_variant_supported "${ARCHITECTURE_VARIANT}") -eq 0 ]]; then
# THERE ARE NO ARCHITECTURES ENABLED FOR THIS LIBRARY TYPE
return
fi
# INITIALIZE UNIVERSAL LIBRARY DIRECTORY
initialize_folder "${FFMPEG_UNIVERSAL_LIBRARY_DIRECTORY}"
initialize_folder "${FFMPEG_UNIVERSAL_LIBRARY_DIRECTORY}/include"
initialize_folder "${FFMPEG_UNIVERSAL_LIBRARY_DIRECTORY}/lib"
2020-11-23 00:51:45 +02:00
local FFMPEG_DEFAULT_BUILD_PATH="${BASEDIR}/prebuilt/$(get_default_build_directory)/ffmpeg"
# COPY HEADER FILES
cp -r "${FFMPEG_DEFAULT_BUILD_PATH}"/include/* "${FFMPEG_UNIVERSAL_LIBRARY_DIRECTORY}"/include 1>>"${BASEDIR}"/build.log 2>&1
cp "${FFMPEG_DEFAULT_BUILD_PATH}"/include/config.h "${FFMPEG_UNIVERSAL_LIBRARY_DIRECTORY}"/include 1>>"${BASEDIR}"/build.log 2>&1
2020-11-23 00:51:45 +02:00
for FFMPEG_LIB in "${FFMPEG_LIBS[@]}"; do
local FFMPEG_LIB_UNIVERSAL_LIBRARY_PATH="${FFMPEG_UNIVERSAL_LIBRARY_DIRECTORY}/lib/${FFMPEG_LIB}.dylib"
2020-11-23 00:51:45 +02:00
LIPO_COMMAND="${LIPO} -create"
for ARCH in "${TARGET_ARCH_LIST[@]}"; do
if [[ " ${TARGET_ARCHITECTURES[*]} " == *" ${ARCH} "* ]]; then
local FULL_LIBRARY_PATH="${BASEDIR}/prebuilt/$(get_build_directory)/${LIBRARY_NAME}/lib/${FFMPEG_LIB}.$(get_ffmpeg_library_version ${FFMPEG_LIB}).dylib"
2020-11-23 00:51:45 +02:00
LIPO_COMMAND+=" ${FULL_LIBRARY_PATH}"
fi
done
LIPO_COMMAND+=" -output ${FFMPEG_LIB_UNIVERSAL_LIBRARY_PATH}"
2020-11-23 00:51:45 +02:00
${LIPO_COMMAND} 1>>"${BASEDIR}"/build.log 2>&1
[[ $? -ne 0 ]] && exit_universal_library "${FFMPEG_LIB}"
2020-11-23 00:51:45 +02:00
done
# COPY UNIVERSAL LIBRARY LICENSES
if [[ ${GPL_ENABLED} == "yes" ]]; then
cp "${BASEDIR}"/LICENSE.GPLv3 "${FFMPEG_UNIVERSAL_LIBRARY_DIRECTORY}"/LICENSE 1>>"${BASEDIR}"/build.log 2>&1
2020-11-23 00:51:45 +02:00
else
cp "${BASEDIR}"/LICENSE.LGPLv3 "${FFMPEG_UNIVERSAL_LIBRARY_DIRECTORY}"/LICENSE 1>>"${BASEDIR}"/build.log 2>&1
2020-11-23 00:51:45 +02:00
fi
for library in {0..46}; do
if [[ ${ENABLED_LIBRARIES[$library]} -eq 1 ]]; then
local ENABLED_LIBRARY_NAME="$(get_library_name ${library})"
local ENABLED_LIBRARY_NAME_UPPERCASE=$(echo "${ENABLED_LIBRARY_NAME}" | tr '[a-z]' '[A-Z]')
RC=$(copy_external_library_license "${library}" "${FFMPEG_UNIVERSAL_LIBRARY_DIRECTORY}"/LICENSE.${ENABLED_LIBRARY_NAME_UPPERCASE})
[[ ${RC} -ne 0 ]] && exit_universal_library "${LIBRARY_NAME}"
fi
done
2020-11-23 00:51:45 +02:00
echo -e "DEBUG: ${LIBRARY_NAME} universal library built for $(get_apple_architecture_variant "${ARCHITECTURE_VARIANT}") platform successfully\n" 1>>"${BASEDIR}"/build.log 2>&1
}
#
# 1. architecture variant
#
# DEPENDS TARGET_ARCH_LIST VARIABLE
#
create_ffmpeg_kit_universal_library() {
local ARCHITECTURE_VARIANT="$1"
local TARGET_ARCHITECTURES=("$(get_apple_architectures_for_variant "${ARCHITECTURE_VARIANT}")")
local LIBRARY_NAME="ffmpeg-kit"
2021-11-02 00:19:28 +02:00
local UNIVERSAL_LIBRARY_DIRECTORY="${BASEDIR}/.tmp/$(get_universal_library_directory "${ARCHITECTURE_VARIANT}")"
local FFMPEG_KIT_UNIVERSAL_LIBRARY_DIRECTORY="${UNIVERSAL_LIBRARY_DIRECTORY}/${LIBRARY_NAME}"
2020-11-23 00:51:45 +02:00
local LIPO="$(xcrun --sdk "$(get_default_sdk_name)" -f lipo)"
if [[ $(is_apple_architecture_variant_supported "${ARCHITECTURE_VARIANT}") -eq 0 ]]; then
# THERE ARE NO ARCHITECTURES ENABLED FOR THIS LIBRARY TYPE
return
fi
# INITIALIZE UNIVERSAL LIBRARY DIRECTORY
initialize_folder "${FFMPEG_KIT_UNIVERSAL_LIBRARY_DIRECTORY}"
initialize_folder "${FFMPEG_KIT_UNIVERSAL_LIBRARY_DIRECTORY}/include"
initialize_folder "${FFMPEG_KIT_UNIVERSAL_LIBRARY_DIRECTORY}/lib"
2020-11-23 00:51:45 +02:00
local FFMPEG_KIT_DEFAULT_BUILD_PATH="${BASEDIR}/prebuilt/$(get_default_build_directory)/ffmpeg-kit"
# COPY HEADER FILES
cp -r "${FFMPEG_KIT_DEFAULT_BUILD_PATH}"/include/* "${FFMPEG_KIT_UNIVERSAL_LIBRARY_DIRECTORY}"/include 1>>"${BASEDIR}"/build.log 2>&1
local FFMPEG_KIT_UNIVERSAL_LIBRARY_PATH="${FFMPEG_KIT_UNIVERSAL_LIBRARY_DIRECTORY}/lib/libffmpegkit.dylib"
2020-11-23 00:51:45 +02:00
LIPO_COMMAND="${LIPO} -create"
for ARCH in "${TARGET_ARCH_LIST[@]}"; do
if [[ " ${TARGET_ARCHITECTURES[*]} " == *" ${ARCH} "* ]]; then
local FULL_LIBRARY_PATH="${BASEDIR}/prebuilt/$(get_build_directory)/${LIBRARY_NAME}/lib/libffmpegkit.dylib"
2020-11-23 00:51:45 +02:00
LIPO_COMMAND+=" ${FULL_LIBRARY_PATH}"
fi
done
LIPO_COMMAND+=" -output ${FFMPEG_KIT_UNIVERSAL_LIBRARY_PATH}"
2020-11-23 00:51:45 +02:00
${LIPO_COMMAND} 1>>"${BASEDIR}"/build.log 2>&1
[[ $? -ne 0 ]] && exit_universal_library "${LIBRARY_NAME}"
2020-11-23 00:51:45 +02:00
# COPY UNIVERSAL LIBRARY LICENSES
if [[ ${GPL_ENABLED} == "yes" ]]; then
cp "${BASEDIR}"/LICENSE.GPLv3 "${FFMPEG_KIT_UNIVERSAL_LIBRARY_DIRECTORY}"/LICENSE 1>>"${BASEDIR}"/build.log 2>&1
2020-11-23 00:51:45 +02:00
else
cp "${BASEDIR}"/LICENSE.LGPLv3 "${FFMPEG_KIT_UNIVERSAL_LIBRARY_DIRECTORY}"/LICENSE 1>>"${BASEDIR}"/build.log 2>&1
2020-11-23 00:51:45 +02:00
fi
echo -e "DEBUG: ${LIBRARY_NAME} universal library built for $(get_apple_architecture_variant "${ARCHITECTURE_VARIANT}") platform successfully\n" 1>>"${BASEDIR}"/build.log 2>&1
}
#
# 1. architecture variant
#
create_ffmpeg_framework() {
local ARCHITECTURE_VARIANT="$1"
local LIBRARY_NAME="ffmpeg"
2021-11-02 00:19:28 +02:00
local UNIVERSAL_LIBRARY_DIRECTORY="${BASEDIR}/.tmp/$(get_universal_library_directory "${ARCHITECTURE_VARIANT}")"
local FFMPEG_UNIVERSAL_LIBRARY_PATH="${UNIVERSAL_LIBRARY_DIRECTORY}/${LIBRARY_NAME}"
2020-11-23 00:51:45 +02:00
if [[ $(is_apple_architecture_variant_supported "${ARCHITECTURE_VARIANT}") -eq 0 ]]; then
# THERE ARE NO ARCHITECTURES ENABLED FOR THIS LIBRARY TYPE
return
fi
for FFMPEG_LIB in "${FFMPEG_LIBS[@]}"; do
local FFMPEG_LIB_UPPERCASE=$(echo "${FFMPEG_LIB}" | tr '[a-z]' '[A-Z]')
local CAPITAL_CASE_FFMPEG_LIB_NAME=$(to_capital_case "${FFMPEG_LIB}")
# EXTRACT FFMPEG VERSION
local FFMPEG_LIB_VERSION="$(get_ffmpeg_library_version $FFMPEG_LIB)"
2020-11-23 00:51:45 +02:00
# INITIALIZE FRAMEWORK DIRECTORY
local FFMPEG_LIB_FRAMEWORK_PATH="${BASEDIR}/prebuilt/$(get_framework_directory "${ARCHITECTURE_VARIANT}")/${FFMPEG_LIB}.framework"
initialize_folder "${FFMPEG_LIB_FRAMEWORK_PATH}"
2021-11-02 00:19:28 +02:00
if [[ ${ARCHITECTURE_VARIANT} -eq ${ARCH_VAR_MAC_CATALYST} ]] || [[ ${ARCHITECTURE_VARIANT} -eq ${ARCH_VAR_MACOS} ]]; then
2020-11-23 00:51:45 +02:00
2021-11-02 00:19:28 +02:00
# VERSIONED FRAMEWORK
local FFMPEG_LIB_FRAMEWORK_RESOURCE_PATH="${FFMPEG_LIB_FRAMEWORK_PATH}/Versions/A/Resources"
initialize_folder "${FFMPEG_LIB_FRAMEWORK_PATH}/Versions/A/Headers"
initialize_folder "${FFMPEG_LIB_FRAMEWORK_PATH}/Versions/A/Resources"
# LINK CURRENT VERSION
ln -s "A" "${FFMPEG_LIB_FRAMEWORK_PATH}/Versions/Current" 1>>"${BASEDIR}"/build.log 2>&1
ln -s "Versions/Current/Headers" "${FFMPEG_LIB_FRAMEWORK_PATH}/Headers" 1>>"${BASEDIR}"/build.log 2>&1
ln -s "Versions/Current/Resources" "${FFMPEG_LIB_FRAMEWORK_PATH}/Resources" 1>>"${BASEDIR}"/build.log 2>&1
ln -s "Versions/Current/${FFMPEG_LIB}" "${FFMPEG_LIB_FRAMEWORK_PATH}/${FFMPEG_LIB}" 1>>"${BASEDIR}"/build.log 2>&1
# COPY HEADER FILES
cp -r "${FFMPEG_UNIVERSAL_LIBRARY_PATH}/include/${FFMPEG_LIB}"/* "${FFMPEG_LIB_FRAMEWORK_PATH}/Versions/A/Headers" 1>>"${BASEDIR}"/build.log 2>&1
# COPY LIBRARY FILE
cp "${FFMPEG_UNIVERSAL_LIBRARY_PATH}/lib/${FFMPEG_LIB}.dylib" "${FFMPEG_LIB_FRAMEWORK_PATH}/Versions/A/${FFMPEG_LIB}" 1>>"${BASEDIR}"/build.log 2>&1
else
# DEFAULT FRAMEWORK
local FFMPEG_LIB_FRAMEWORK_RESOURCE_PATH="${FFMPEG_LIB_FRAMEWORK_PATH}"
initialize_folder "${FFMPEG_LIB_FRAMEWORK_PATH}/Headers"
# COPY HEADER FILES
cp -r "${FFMPEG_UNIVERSAL_LIBRARY_PATH}/include/${FFMPEG_LIB}"/* "${FFMPEG_LIB_FRAMEWORK_PATH}"/Headers 1>>"${BASEDIR}"/build.log 2>&1
# COPY LIBRARY FILE
cp "${FFMPEG_UNIVERSAL_LIBRARY_PATH}/lib/${FFMPEG_LIB}.dylib" "${FFMPEG_LIB_FRAMEWORK_PATH}/${FFMPEG_LIB}" 1>>"${BASEDIR}"/build.log 2>&1
fi
2020-11-23 00:51:45 +02:00
# COPY FRAMEWORK LICENSES
if [[ "${GPL_ENABLED}" == "yes" ]]; then
2021-11-02 00:19:28 +02:00
cp "${BASEDIR}/LICENSE.GPLv3" "${FFMPEG_LIB_FRAMEWORK_RESOURCE_PATH}/LICENSE" 1>>"${BASEDIR}"/build.log 2>&1
2020-11-23 00:51:45 +02:00
else
2021-11-02 00:19:28 +02:00
cp "${BASEDIR}/LICENSE.LGPLv3" "${FFMPEG_LIB_FRAMEWORK_RESOURCE_PATH}/LICENSE" 1>>"${BASEDIR}"/build.log 2>&1
2020-11-23 00:51:45 +02:00
fi
2021-11-02 00:19:28 +02:00
# COPY EXTERNAL LIBRARY LICENSES
if [[ "${FFMPEG_LIB}" == "libavcodec" ]]; then
for library in {0..46}; do
if [[ ${ENABLED_LIBRARIES[$library]} -eq 1 ]]; then
local ENABLED_LIBRARY_NAME="$(get_library_name ${library})"
local ENABLED_LIBRARY_NAME_UPPERCASE=$(echo "${ENABLED_LIBRARY_NAME}" | tr '[a-z]' '[A-Z]')
2020-11-23 00:51:45 +02:00
2021-11-02 00:19:28 +02:00
RC=$(copy_external_library_license "${library}" ${FFMPEG_LIB_FRAMEWORK_RESOURCE_PATH}/LICENSE.${ENABLED_LIBRARY_NAME_UPPERCASE})
2021-11-02 00:19:28 +02:00
[[ ${RC} -ne 0 ]] && exit_universal_library "${LIBRARY_NAME}"
fi
done
fi
build_info_plist "${FFMPEG_LIB_FRAMEWORK_RESOURCE_PATH}/Info.plist" "${FFMPEG_LIB}" "com.arthenica.ffmpegkit.${CAPITAL_CASE_FFMPEG_LIB_NAME}" "${FFMPEG_LIB_VERSION}" "${FFMPEG_LIB_VERSION}" "${ARCHITECTURE_VARIANT}"
2021-11-02 00:19:28 +02:00
echo -e "DEBUG: ${FFMPEG_LIB} framework built for $(get_apple_architecture_variant "${ARCHITECTURE_VARIANT}") platform successfully\n" 1>>"${BASEDIR}"/build.log 2>&1
done
2020-11-23 00:51:45 +02:00
}
#
# 1. architecture variant
#
create_ffmpeg_kit_framework() {
local ARCHITECTURE_VARIANT="$1"
local LIBRARY_NAME="ffmpeg-kit"
2021-11-02 00:19:28 +02:00
local UNIVERSAL_LIBRARY_DIRECTORY="${BASEDIR}/.tmp/$(get_universal_library_directory "${ARCHITECTURE_VARIANT}")"
local FFMPEG_KIT_UNIVERSAL_LIBRARY_DIRECTORY="${UNIVERSAL_LIBRARY_DIRECTORY}/${LIBRARY_NAME}"
2020-11-23 00:51:45 +02:00
if [[ $(is_apple_architecture_variant_supported "${ARCHITECTURE_VARIANT}") -eq 0 ]]; then
# THERE ARE NO ARCHITECTURES ENABLED FOR THIS LIBRARY TYPE
return
fi
local FFMPEG_KIT_VERSION=$(get_ffmpeg_kit_version)
# INITIALIZE FRAMEWORK DIRECTORY
local FFMPEG_KIT_FRAMEWORK_PATH="${BASEDIR}/prebuilt/$(get_framework_directory "${ARCHITECTURE_VARIANT}")/ffmpegkit.framework"
initialize_folder "${FFMPEG_KIT_FRAMEWORK_PATH}"
2021-11-02 00:19:28 +02:00
if [[ ${ARCHITECTURE_VARIANT} -eq ${ARCH_VAR_MAC_CATALYST} ]] || [[ ${ARCHITECTURE_VARIANT} -eq ${ARCH_VAR_MACOS} ]]; then
# VERSIONED FRAMEWORK
local FFMPEG_KIT_FRAMEWORK_RESOURCE_PATH="${FFMPEG_KIT_FRAMEWORK_PATH}/Versions/A/Resources"
2020-11-23 00:51:45 +02:00
2021-11-02 00:19:28 +02:00
initialize_folder "${FFMPEG_KIT_FRAMEWORK_PATH}/Versions/A/Headers"
initialize_folder "${FFMPEG_KIT_FRAMEWORK_PATH}/Versions/A/Modules"
initialize_folder "${FFMPEG_KIT_FRAMEWORK_PATH}/Versions/A/Resources"
# LINK CURRENT VERSION
ln -s "A" "${FFMPEG_KIT_FRAMEWORK_PATH}/Versions/Current" 1>>"${BASEDIR}"/build.log 2>&1
ln -s "Versions/Current/Headers" "${FFMPEG_KIT_FRAMEWORK_PATH}/Headers" 1>>"${BASEDIR}"/build.log 2>&1
ln -s "Versions/Current/Modules" "${FFMPEG_KIT_FRAMEWORK_PATH}/Modules" 1>>"${BASEDIR}"/build.log 2>&1
ln -s "Versions/Current/Resources" "${FFMPEG_KIT_FRAMEWORK_PATH}/Resources" 1>>"${BASEDIR}"/build.log 2>&1
ln -s "Versions/Current/ffmpegkit" "${FFMPEG_KIT_FRAMEWORK_PATH}/ffmpegkit" 1>>"${BASEDIR}"/build.log 2>&1
# COPY HEADER FILES
cp -r "${FFMPEG_KIT_UNIVERSAL_LIBRARY_DIRECTORY}"/include/* "${FFMPEG_KIT_FRAMEWORK_PATH}/Versions/A/Headers" 1>>"${BASEDIR}"/build.log 2>&1
# COPY LIBRARY FILE
cp "${FFMPEG_KIT_UNIVERSAL_LIBRARY_DIRECTORY}/lib/libffmpegkit.dylib" "${FFMPEG_KIT_FRAMEWORK_PATH}/Versions/A/ffmpegkit" 1>>"${BASEDIR}"/build.log 2>&1
else
# DEFAULT FRAMEWORK
local FFMPEG_KIT_FRAMEWORK_RESOURCE_PATH="${FFMPEG_KIT_FRAMEWORK_PATH}"
initialize_folder "${FFMPEG_KIT_FRAMEWORK_PATH}/Headers"
initialize_folder "${FFMPEG_KIT_FRAMEWORK_PATH}/Modules"
# COPY HEADER FILES
cp -r "${FFMPEG_KIT_UNIVERSAL_LIBRARY_DIRECTORY}"/include/* "${FFMPEG_KIT_FRAMEWORK_PATH}"/Headers 1>>"${BASEDIR}"/build.log 2>&1
# COPY LIBRARY FILE
cp "${FFMPEG_KIT_UNIVERSAL_LIBRARY_DIRECTORY}/lib/libffmpegkit.dylib" "${FFMPEG_KIT_FRAMEWORK_PATH}"/ffmpegkit 1>>"${BASEDIR}"/build.log 2>&1
fi
2020-11-23 00:51:45 +02:00
# COPY FRAMEWORK LICENSES
if [[ "${GPL_ENABLED}" == "yes" ]]; then
2021-11-02 00:19:28 +02:00
cp "${BASEDIR}/LICENSE.GPLv3" "${FFMPEG_KIT_FRAMEWORK_RESOURCE_PATH}/LICENSE" 1>>"${BASEDIR}"/build.log 2>&1
2020-11-23 00:51:45 +02:00
else
2021-11-02 00:19:28 +02:00
cp "${BASEDIR}/LICENSE.LGPLv3" "${FFMPEG_KIT_FRAMEWORK_RESOURCE_PATH}/LICENSE" 1>>"${BASEDIR}"/build.log 2>&1
2020-11-23 00:51:45 +02:00
fi
2021-11-02 00:19:28 +02:00
# COPYING STRIP SCRIPT FOR SHARED LIBRARY
cp ${BASEDIR}/tools/release/apple/strip-frameworks.sh ${FFMPEG_KIT_FRAMEWORK_RESOURCE_PATH} 1>>${BASEDIR}/build.log 2>&1
build_info_plist "${FFMPEG_KIT_FRAMEWORK_RESOURCE_PATH}/Info.plist" "ffmpegkit" "com.arthenica.ffmpegkit.FFmpegKit" "${FFMPEG_KIT_VERSION}" "${FFMPEG_KIT_VERSION}" "${ARCHITECTURE_VARIANT}"
2020-11-23 00:51:45 +02:00
build_modulemap "${FFMPEG_KIT_FRAMEWORK_PATH}/Modules/module.modulemap"
echo -e "DEBUG: ffmpeg-kit framework built for $(get_apple_architecture_variant "${ARCHITECTURE_VARIANT}") platform successfully\n" 1>>"${BASEDIR}"/build.log 2>&1
}
create_ffmpeg_xcframework() {
for FFMPEG_LIB in "${FFMPEG_LIBS[@]}"; do
# INITIALIZE FRAMEWORK DIRECTORY
local FRAMEWORK_NAME="${FFMPEG_LIB}"
local XCFRAMEWORK_PATH=${BASEDIR}/prebuilt/$(get_xcframework_directory)/${FRAMEWORK_NAME}.xcframework
initialize_folder "${XCFRAMEWORK_PATH}"
local BUILD_COMMAND="xcodebuild -create-xcframework "
for ARCHITECTURE_VARIANT in "${ARCHITECTURE_VARIANT_ARRAY[@]}"; do
if [[ $(is_apple_architecture_variant_supported "${ARCHITECTURE_VARIANT}") -eq 1 ]]; then
local FRAMEWORK_PATH=${BASEDIR}/prebuilt/$(get_framework_directory "${ARCHITECTURE_VARIANT}")/${FRAMEWORK_NAME}.framework
BUILD_COMMAND+=" -framework ${FRAMEWORK_PATH}"
fi
done
BUILD_COMMAND+=" -output ${XCFRAMEWORK_PATH}"
# EXECUTE CREATE FRAMEWORK COMMAND
COMMAND_OUTPUT=$(${BUILD_COMMAND} 2>&1)
RC=$?
echo -e "DEBUG: ${COMMAND_OUTPUT}\n" 1>>"${BASEDIR}"/build.log 2>&1
if [[ ${RC} -ne 0 ]]; then
exit_xcframework "${FRAMEWORK_NAME}"
2020-11-23 00:51:45 +02:00
fi
# DO NOT ALLOW EMPTY FRAMEWORKS
if [[ ${COMMAND_OUTPUT} == *"is empty in library"* ]]; then
exit_xcframework "${FRAMEWORK_NAME}"
2020-11-23 00:51:45 +02:00
fi
echo -e "DEBUG: xcframework for ${FFMPEG_LIB} built successfully\n" 1>>"${BASEDIR}"/build.log 2>&1
done
}
create_ffmpeg_kit_xcframework() {
local FRAMEWORK_NAME="ffmpegkit"
# INITIALIZE FRAMEWORK DIRECTORY
local XCFRAMEWORK_PATH=${BASEDIR}/prebuilt/$(get_xcframework_directory)/${FRAMEWORK_NAME}.xcframework
initialize_folder "${XCFRAMEWORK_PATH}"
local BUILD_COMMAND="xcodebuild -create-xcframework "
for ARCHITECTURE_VARIANT in "${ARCHITECTURE_VARIANT_ARRAY[@]}"; do
if [[ $(is_apple_architecture_variant_supported "${ARCHITECTURE_VARIANT}") -eq 1 ]]; then
local FRAMEWORK_PATH=${BASEDIR}/prebuilt/$(get_framework_directory "${ARCHITECTURE_VARIANT}")/${FRAMEWORK_NAME}.framework
BUILD_COMMAND+=" -framework ${FRAMEWORK_PATH}"
fi
done
BUILD_COMMAND+=" -output ${XCFRAMEWORK_PATH}"
# EXECUTE CREATE FRAMEWORK COMMAND
COMMAND_OUTPUT=$(${BUILD_COMMAND} 2>&1)
RC=$?
echo -e "DEBUG: ${COMMAND_OUTPUT}\n" 1>>"${BASEDIR}"/build.log 2>&1
if [[ ${RC} -ne 0 ]]; then
exit_xcframework "${FRAMEWORK_NAME}"
2020-11-23 00:51:45 +02:00
fi
# DO NOT ALLOW EMPTY FRAMEWORKS
if [[ ${COMMAND_OUTPUT} == *"is empty in library"* ]]; then
exit_xcframework "${FRAMEWORK_NAME}"
2020-11-23 00:51:45 +02:00
fi
echo -e "DEBUG: xcframework for ffmpeg-kit built successfully\n" 1>>"${BASEDIR}"/build.log 2>&1
}
#
# DEPENDS TARGET_ARCH_LIST VARIABLE
#
get_default_build_directory() {
ARCH=${TARGET_ARCH_LIST[0]}
get_build_directory
}
get_build_directory() {
local LTS_POSTFIX=""
if [[ -n ${FFMPEG_KIT_LTS_BUILD} ]]; then
LTS_POSTFIX="-lts"
fi
case ${ARCH} in
x86-64)
echo "apple-${FFMPEG_KIT_BUILD_TYPE}-x86_64${LTS_POSTFIX}"
;;
x86-64-mac-catalyst)
echo "apple-${FFMPEG_KIT_BUILD_TYPE}-x86_64-mac-catalyst${LTS_POSTFIX}"
;;
*)
echo "apple-${FFMPEG_KIT_BUILD_TYPE}-${ARCH}${LTS_POSTFIX}"
;;
esac
}
#
# 1. framework type
#
get_framework_directory() {
local FRAMEWORK_TYPE="$1"
local LTS_POSTFIX=""
if [[ -n ${FFMPEG_KIT_LTS_BUILD} ]]; then
LTS_POSTFIX="-lts"
fi
case $FRAMEWORK_TYPE in
2021-01-09 18:24:56 +02:00
"${ARCH_VAR_IOS}")
2020-11-23 00:51:45 +02:00
echo "bundle-apple-framework-ios${LTS_POSTFIX}"
;;
2021-01-09 18:24:56 +02:00
"${ARCH_VAR_IPHONEOS}")
2020-11-23 00:51:45 +02:00
echo "bundle-apple-framework-iphoneos${LTS_POSTFIX}"
;;
2021-01-09 18:24:56 +02:00
"${ARCH_VAR_IPHONESIMULATOR}")
2020-11-23 00:51:45 +02:00
echo "bundle-apple-framework-iphonesimulator${LTS_POSTFIX}"
;;
2021-01-09 18:24:56 +02:00
"${ARCH_VAR_MAC_CATALYST}")
2020-11-23 00:51:45 +02:00
echo "bundle-apple-framework-mac-catalyst${LTS_POSTFIX}"
;;
2021-01-11 03:06:18 +02:00
"${ARCH_VAR_TVOS}")
2020-11-23 00:51:45 +02:00
echo "bundle-apple-framework-tvos${LTS_POSTFIX}"
;;
2021-01-09 18:24:56 +02:00
"${ARCH_VAR_APPLETVOS}")
2020-11-23 00:51:45 +02:00
echo "bundle-apple-framework-appletvos${LTS_POSTFIX}"
;;
2021-01-09 18:24:56 +02:00
"${ARCH_VAR_APPLETVSIMULATOR}")
2020-11-23 00:51:45 +02:00
echo "bundle-apple-framework-appletvsimulator${LTS_POSTFIX}"
;;
2021-01-09 18:24:56 +02:00
"${ARCH_VAR_MACOS}")
2020-11-23 00:51:45 +02:00
echo "bundle-apple-framework-macos${LTS_POSTFIX}"
;;
esac
}
get_xcframework_directory() {
local LTS_POSTFIX=""
if [[ -n ${FFMPEG_KIT_LTS_BUILD} ]]; then
LTS_POSTFIX="-lts"
fi
echo "bundle-apple-xcframework-${FFMPEG_KIT_BUILD_TYPE}${LTS_POSTFIX}"
}
2021-01-09 18:24:56 +02:00
get_umbrella_xcframework_directory() {
local LTS_POSTFIX=""
if [[ -n ${FFMPEG_KIT_LTS_BUILD} ]]; then
LTS_POSTFIX="-lts"
fi
echo "bundle-apple-xcframework${LTS_POSTFIX}"
}
2020-11-23 00:51:45 +02:00
#
# 1. architecture variant
#
get_universal_library_directory() {
local ARCHITECTURE_VARIANT="$1"
local LTS_POSTFIX=""
if [[ -n ${FFMPEG_KIT_LTS_BUILD} ]]; then
LTS_POSTFIX="-lts"
fi
case ${ARCHITECTURE_VARIANT} in
2021-01-09 18:24:56 +02:00
"${ARCH_VAR_IOS}")
2020-11-23 00:51:45 +02:00
echo "bundle-apple-universal-ios${LTS_POSTFIX}"
;;
2021-01-09 18:24:56 +02:00
"${ARCH_VAR_IPHONEOS}")
2020-11-23 00:51:45 +02:00
echo "bundle-apple-universal-iphoneos${LTS_POSTFIX}"
;;
2021-01-09 18:24:56 +02:00
"${ARCH_VAR_IPHONESIMULATOR}")
2020-11-23 00:51:45 +02:00
echo "bundle-apple-universal-iphonesimulator${LTS_POSTFIX}"
;;
2021-01-09 18:24:56 +02:00
"${ARCH_VAR_MAC_CATALYST}")
2020-11-23 00:51:45 +02:00
echo "bundle-apple-universal-mac-catalyst${LTS_POSTFIX}"
;;
2021-01-11 03:06:18 +02:00
"${ARCH_VAR_TVOS}")
2020-11-23 00:51:45 +02:00
echo "bundle-apple-universal-tvos${LTS_POSTFIX}"
;;
2021-01-09 18:24:56 +02:00
"${ARCH_VAR_APPLETVOS}")
2020-11-23 00:51:45 +02:00
echo "bundle-apple-universal-appletvos${LTS_POSTFIX}"
;;
2021-01-09 18:24:56 +02:00
"${ARCH_VAR_APPLETVSIMULATOR}")
2020-11-23 00:51:45 +02:00
echo "bundle-apple-universal-appletvsimulator${LTS_POSTFIX}"
;;
2021-01-09 18:24:56 +02:00
"${ARCH_VAR_MACOS}")
2020-11-23 00:51:45 +02:00
echo "bundle-apple-universal-macos${LTS_POSTFIX}"
;;
esac
}
#
# 1. architecture variant
#
get_apple_architecture_variant() {
local ARCHITECTURE_VARIANT="$1"
local LTS_POSTFIX=""
if [[ -n ${FFMPEG_KIT_LTS_BUILD} ]]; then
LTS_POSTFIX="-lts"
fi
case ${ARCHITECTURE_VARIANT} in
2021-01-09 18:24:56 +02:00
"${ARCH_VAR_IOS}")
echo "ios${LTS_POSTFIX}"
;;
"${ARCH_VAR_IPHONEOS}")
2020-11-23 00:51:45 +02:00
echo "iphoneos${LTS_POSTFIX}"
;;
2021-01-09 18:24:56 +02:00
"${ARCH_VAR_IPHONESIMULATOR}")
2020-11-23 00:51:45 +02:00
echo "iphonesimulator${LTS_POSTFIX}"
;;
2021-01-09 18:24:56 +02:00
"${ARCH_VAR_MAC_CATALYST}")
2020-11-23 00:51:45 +02:00
echo "mac-catalyst${LTS_POSTFIX}"
;;
2021-01-11 03:06:18 +02:00
"${ARCH_VAR_TVOS}")
2020-11-23 00:51:45 +02:00
echo "tvos${LTS_POSTFIX}"
;;
2021-01-09 18:24:56 +02:00
"${ARCH_VAR_APPLETVOS}")
2020-11-23 00:51:45 +02:00
echo "appletvos${LTS_POSTFIX}"
;;
2021-01-09 18:24:56 +02:00
"${ARCH_VAR_APPLETVSIMULATOR}")
2020-11-23 00:51:45 +02:00
echo "appletvsimulator${LTS_POSTFIX}"
;;
2021-01-09 18:24:56 +02:00
"${ARCH_VAR_MACOS}")
echo "macos${LTS_POSTFIX}"
2020-11-23 00:51:45 +02:00
;;
esac
}
#
# 1. architecture variant
#
get_apple_architectures_for_variant() {
local ARCHITECTURE_VARIANT="$1"
local ARCHITECTURES=""
case ${ARCHITECTURE_VARIANT} in
2021-01-09 18:24:56 +02:00
"${ARCH_VAR_IOS}")
for index in ${ARCH_ARMV7} ${ARCH_ARMV7S} ${ARCH_ARM64} ${ARCH_ARM64E} ${ARCH_I386} ${ARCH_X86_64} ${ARCH_X86_64_MAC_CATALYST} ${ARCH_ARM64_MAC_CATALYST} ${ARCH_ARM64_SIMULATOR}; do
2020-11-23 00:51:45 +02:00
ARCHITECTURES+=" $(get_full_arch_name "${index}") "
done
;;
2021-01-09 18:24:56 +02:00
"${ARCH_VAR_IPHONEOS}")
for index in ${ARCH_ARMV7} ${ARCH_ARMV7S} ${ARCH_ARM64} ${ARCH_ARM64E}; do
2020-11-23 00:51:45 +02:00
ARCHITECTURES+=" $(get_full_arch_name "${index}") "
done
;;
2021-01-09 18:24:56 +02:00
"${ARCH_VAR_IPHONESIMULATOR}")
for index in ${ARCH_I386} ${ARCH_X86_64} ${ARCH_ARM64_SIMULATOR}; do
2020-11-23 00:51:45 +02:00
ARCHITECTURES+=" $(get_full_arch_name "${index}") "
done
;;
2021-01-09 18:24:56 +02:00
"${ARCH_VAR_MAC_CATALYST}")
for index in ${ARCH_X86_64_MAC_CATALYST} ${ARCH_ARM64_MAC_CATALYST}; do
2020-11-23 00:51:45 +02:00
ARCHITECTURES+=" $(get_full_arch_name "${index}") "
done
;;
2021-01-11 03:06:18 +02:00
"${ARCH_VAR_TVOS}")
2021-02-27 14:33:12 +02:00
for index in ${ARCH_ARM64} ${ARCH_X86_64} ${ARCH_ARM64_SIMULATOR}; do
2020-11-23 00:51:45 +02:00
ARCHITECTURES+=" $(get_full_arch_name "${index}") "
done
;;
2021-01-09 18:24:56 +02:00
"${ARCH_VAR_APPLETVOS}")
for index in ${ARCH_ARM64}; do
2020-11-23 00:51:45 +02:00
ARCHITECTURES+=" $(get_full_arch_name "${index}") "
done
;;
2021-01-09 18:24:56 +02:00
"${ARCH_VAR_APPLETVSIMULATOR}")
2021-02-27 14:33:12 +02:00
for index in ${ARCH_X86_64} ${ARCH_ARM64_SIMULATOR}; do
2020-11-23 00:51:45 +02:00
ARCHITECTURES+=" $(get_full_arch_name "${index}") "
done
;;
2021-01-09 18:24:56 +02:00
"${ARCH_VAR_MACOS}")
for index in ${ARCH_ARM64} ${ARCH_X86_64}; do
2020-11-23 00:51:45 +02:00
ARCHITECTURES+=" $(get_full_arch_name "${index}") "
done
;;
esac
echo "${ARCHITECTURES}"
}
get_cmake_osx_architectures() {
case ${ARCH} in
arm64 | arm64-*)
echo "arm64"
;;
arm64e)
echo "arm64e"
;;
x86-64*)
echo "x86_64"
;;
*)
echo "${ARCH}"
;;
esac
}
get_target_cpu() {
case ${ARCH} in
arm64*)
echo "arm64"
;;
x86-64*)
echo "x86_64"
;;
*)
echo "${ARCH}"
;;
esac
}
get_static_archive_name() {
case $1 in
5) echo "libmp3lame" ;;
6) echo "libass" ;;
10) echo "libvpx" ;;
12) echo "libxml2" ;;
21) echo "libvidstab" ;;
23) echo "libilbc" ;;
27) echo "libaom" ;;
29) echo "libtwolame" ;;
30) echo "libSDL2" ;;
31) echo "libtesseract" ;;
34) echo "libgif" ;;
36) echo "libogg" ;;
37) echo "libpng" ;;
42) echo "libsndfile" ;;
43) echo "liblept" ;;
44) echo "libsamplerate" ;;
*) echo lib"$(get_library_name "$1")" ;;
esac
}
build_modulemap() {
local FILE_PATH="$1"
cat >"${FILE_PATH}" <<EOF
framework module ffmpegkit {
header "AbstractSession.h"
2020-11-23 00:51:45 +02:00
header "ArchDetect.h"
header "AtomicLong.h"
header "ExecuteCallback.h"
2020-11-23 00:51:45 +02:00
header "FFmpegKit.h"
header "FFmpegKitConfig.h"
header "FFmpegSession.h"
2020-11-23 00:51:45 +02:00
header "FFprobeKit.h"
header "FFprobeSession.h"
header "Level.h"
header "Log.h"
header "LogCallback.h"
header "LogRedirectionStrategy.h"
header "MediaInformation.h"
header "MediaInformationJsonParser.h"
header "MediaInformationSession.h"
header "Packages.h"
header "ReturnCode.h"
header "Session.h"
header "SessionState.h"
2020-11-23 00:51:45 +02:00
header "Statistics.h"
header "StatisticsCallback.h"
2020-11-23 00:51:45 +02:00
header "StreamInformation.h"
header "ffmpegkit_exception.h"
export *
}
EOF
}
build_info_plist() {
local FILE_PATH="$1"
local FRAMEWORK_NAME="$2"
local FRAMEWORK_ID="$3"
local FRAMEWORK_SHORT_VERSION="$4"
local FRAMEWORK_VERSION="$5"
local ARCHITECTURE_VARIANT="$6"
2020-11-23 00:51:45 +02:00
case ${FFMPEG_KIT_BUILD_TYPE} in
ios)
case ${ARCHITECTURE_VARIANT} in
"${ARCH_VAR_MAC_CATALYST}")
local MINIMUM_VERSION_KEY="LSMinimumSystemVersion"
;;
*)
local MINIMUM_VERSION_KEY="MinimumOSVersion"
;;
esac
2020-11-23 00:51:45 +02:00
local MINIMUM_OS_VERSION="${IOS_MIN_VERSION}"
local SUPPORTED_PLATFORMS="iPhoneOS"
;;
tvos)
local MINIMUM_VERSION_KEY="MinimumOSVersion"
2020-11-23 00:51:45 +02:00
local MINIMUM_OS_VERSION="${TVOS_MIN_VERSION}"
local SUPPORTED_PLATFORMS="AppleTVOS"
;;
macos)
local MINIMUM_VERSION_KEY="LSMinimumSystemVersion"
2020-11-23 00:51:45 +02:00
local MINIMUM_OS_VERSION="${MACOS_MIN_VERSION}"
local SUPPORTED_PLATFORMS="MacOSX"
;;
esac
cat >${FILE_PATH} <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleExecutable</key>
<string>${FRAMEWORK_NAME}</string>
<key>CFBundleIdentifier</key>
<string>${FRAMEWORK_ID}</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>${FRAMEWORK_NAME}</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>${FRAMEWORK_SHORT_VERSION}</string>
<key>CFBundleVersion</key>
<string>${FRAMEWORK_VERSION}</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>${MINIMUM_VERSION_KEY}</key>
2020-11-23 00:51:45 +02:00
<string>${MINIMUM_OS_VERSION}</string>
<key>CFBundleSupportedPlatforms</key>
<array>
<string>${SUPPORTED_PLATFORMS}</string>
</array>
<key>NSPrincipalClass</key>
<string></string>
</dict>
</plist>
EOF
}
get_default_sdk_name() {
case ${FFMPEG_KIT_BUILD_TYPE} in
ios)
echo "iphoneos"
;;
tvos)
echo "appletvos"
;;
macos)
echo "macosx"
;;
esac
}
get_sdk_name() {
case ${ARCH} in
armv7 | armv7s | arm64e)
echo "iphoneos"
;;
arm64)
case ${FFMPEG_KIT_BUILD_TYPE} in
ios)
echo "iphoneos"
;;
tvos)
echo "appletvos"
;;
macos)
echo "macosx"
;;
esac
;;
x86-64)
case ${FFMPEG_KIT_BUILD_TYPE} in
ios)
echo "iphonesimulator"
;;
tvos)
echo "appletvsimulator"
;;
macos)
echo "macosx"
;;
esac
;;
2021-02-27 14:33:12 +02:00
i386)
2020-11-23 00:51:45 +02:00
echo "iphonesimulator"
;;
2021-02-27 14:33:12 +02:00
arm64-simulator)
case ${FFMPEG_KIT_BUILD_TYPE} in
ios)
echo "iphonesimulator"
;;
tvos)
echo "appletvsimulator"
;;
esac
;;
2020-11-23 00:51:45 +02:00
*-mac-catalyst)
echo "macosx"
;;
esac
}
get_min_version_cflags() {
case ${ARCH} in
armv7 | armv7s | arm64e)
echo "-miphoneos-version-min=$(get_min_sdk_version)"
;;
arm64)
case ${FFMPEG_KIT_BUILD_TYPE} in
ios)
echo "-miphoneos-version-min=$(get_min_sdk_version)"
;;
tvos)
echo "-mappletvos-version-min=$(get_min_sdk_version)"
;;
macos)
echo "-mmacosx-version-min=$(get_min_sdk_version)"
;;
esac
;;
x86-64)
case ${FFMPEG_KIT_BUILD_TYPE} in
ios)
echo "-mios-simulator-version-min=$(get_min_sdk_version)"
;;
tvos)
echo "-mappletvsimulator-version-min=$(get_min_sdk_version)"
;;
macos)
echo "-mmacosx-version-min=$(get_min_sdk_version)"
;;
esac
;;
2021-02-27 14:33:12 +02:00
i386)
2020-11-23 00:51:45 +02:00
echo "-mios-simulator-version-min=$(get_min_sdk_version)"
;;
2021-02-27 14:33:12 +02:00
arm64-simulator)
case ${FFMPEG_KIT_BUILD_TYPE} in
ios)
echo "-mios-simulator-version-min=$(get_min_sdk_version)"
;;
tvos)
echo "-mappletvsimulator-version-min=$(get_min_sdk_version)"
;;
esac
;;
2020-11-23 00:51:45 +02:00
*-mac-catalyst)
echo "-miphoneos-version-min=$(get_min_sdk_version)"
;;
esac
}
get_min_sdk_version() {
case ${ARCH} in
*-mac-catalyst)
echo "${MAC_CATALYST_MIN_VERSION}"
2020-11-23 00:51:45 +02:00
;;
*)
case ${FFMPEG_KIT_BUILD_TYPE} in
ios)
echo "${IOS_MIN_VERSION}"
;;
tvos)
echo "${TVOS_MIN_VERSION}"
;;
macos)
echo "${MACOS_MIN_VERSION}"
;;
esac
;;
esac
}
get_sdk_path() {
2021-03-02 01:25:17 +02:00
echo "$(xcrun --sdk "$(get_sdk_name)" --show-sdk-path 2>>"${BASEDIR}"/build.log)"
2020-11-23 00:51:45 +02:00
}
#
# 1. XCFRAMEWORK NAME
#
exit_xcframework() {
echo -e "INFO: Building $1 xcframework failed\n" 1>>"${BASEDIR}"/build.log 2>&1
echo -e "failed\n\nSee build.log for details\n"
exit 1
}
#
# 1. FRAMEWORK NAME
#
exit_framework() {
echo -e "INFO: Building $1 framework failed\n" 1>>"${BASEDIR}"/build.log 2>&1
echo -e "failed\n\nSee build.log for details\n"
exit 1
}
#
# 1. UNIVERSAL LIBRARY NAME
#
exit_universal_library() {
echo -e "\nINFO: Failed to build universal $1 library\n" 1>>"${BASEDIR}"/build.log 2>&1
echo -e "failed\n\nSee build.log for details\n"
exit 1
}
2021-01-30 01:35:05 +02:00
create_mason_cross_file() {
cat >"$1" <<EOF
[binaries]
c = '$CC'
cpp = '$CXX'
ar = '$AR'
strip = '$STRIP'
pkgconfig = 'pkg-config'
[properties]
sys_root = '$SDK_PATH'
has_function_printf = true
[host_machine]
system = '$(get_meson_target_host_family)'
cpu_family = '$(get_meson_target_cpu_family)'
cpu = '$(get_target_cpu)'
endian = 'little'
[built-in options]
default_library = 'static'
prefix = '${LIB_INSTALL_PREFIX}'
EOF
}
2020-11-23 00:51:45 +02:00
create_fontconfig_package_config() {
local FONTCONFIG_VERSION="$1"
cat >"${INSTALL_PKG_CONFIG_DIR}/fontconfig.pc" <<EOF
prefix=${BASEDIR}/prebuilt/$(get_build_directory)/fontconfig
exec_prefix=\${prefix}
libdir=\${exec_prefix}/lib
includedir=\${prefix}/include
sysconfdir=\${prefix}/etc
localstatedir=\${prefix}/var
PACKAGE=fontconfig
confdir=\${sysconfdir}/fonts
cachedir=\${localstatedir}/cache/\${PACKAGE}
Name: Fontconfig
Description: Font configuration and customization library
Version: ${FONTCONFIG_VERSION}
Requires: freetype2 >= 21.0.15, uuid, expat >= 2.2.0, libiconv
Requires.private:
Libs: -L\${libdir} -lfontconfig
Libs.private:
Cflags: -I\${includedir}
EOF
}
create_freetype_package_config() {
local FREETYPE_VERSION="$1"
cat >"${INSTALL_PKG_CONFIG_DIR}/freetype2.pc" <<EOF
prefix=${BASEDIR}/prebuilt/$(get_build_directory)/freetype
exec_prefix=\${prefix}
libdir=\${exec_prefix}/lib
includedir=\${prefix}/include
Name: FreeType 2
URL: https://freetype.org
Description: A free, high-quality, and portable font engine.
Version: ${FREETYPE_VERSION}
Requires: libpng
Requires.private:
Libs: -L\${libdir} -lfreetype
Libs.private:
Cflags: -I\${includedir}/freetype2
EOF
}
create_giflib_package_config() {
local GIFLIB_VERSION="$1"
cat >"${INSTALL_PKG_CONFIG_DIR}/giflib.pc" <<EOF
prefix=${BASEDIR}/prebuilt/$(get_build_directory)/giflib
exec_prefix=\${prefix}
libdir=\${prefix}/lib
includedir=\${prefix}/include
Name: giflib
Description: gif library
Version: ${GIFLIB_VERSION}
Requires:
Libs: -L\${libdir} -lgif
Cflags: -I\${includedir}
EOF
}
create_gmp_package_config() {
local GMP_VERSION="$1"
cat >"${INSTALL_PKG_CONFIG_DIR}/gmp.pc" <<EOF
prefix=${BASEDIR}/prebuilt/$(get_build_directory)/gmp
exec_prefix=\${prefix}
libdir=\${prefix}/lib
includedir=\${prefix}/include
Name: gmp
Description: gnu mp library
Version: ${GMP_VERSION}
Requires:
Libs: -L\${libdir} -lgmp
Cflags: -I\${includedir}
EOF
}
create_gnutls_package_config() {
local GNUTLS_VERSION="$1"
2021-11-02 00:19:28 +02:00
local EXTRA_LIBS="$2"
2020-11-23 00:51:45 +02:00
cat >"${INSTALL_PKG_CONFIG_DIR}/gnutls.pc" <<EOF
prefix=${BASEDIR}/prebuilt/$(get_build_directory)/gnutls
exec_prefix=\${prefix}
libdir=\${exec_prefix}/lib
includedir=\${prefix}/include
Name: gnutls
Description: GNU TLS Implementation
Version: ${GNUTLS_VERSION}
Requires: nettle, hogweed
Cflags: -I\${includedir}
2021-11-02 00:19:28 +02:00
Libs: -L\${libdir} -lgnutls ${EXTRA_LIBS}
2020-11-23 00:51:45 +02:00
Libs.private: -lgmp
EOF
}
create_libmp3lame_package_config() {
local LAME_VERSION="$1"
cat >"${INSTALL_PKG_CONFIG_DIR}/libmp3lame.pc" <<EOF
prefix=${BASEDIR}/prebuilt/$(get_build_directory)/lame
exec_prefix=\${prefix}
libdir=\${exec_prefix}/lib
includedir=\${prefix}/include
Name: libmp3lame
Description: lame mp3 encoder library
Version: ${LAME_VERSION}
Requires:
Libs: -L\${libdir} -lmp3lame
Cflags: -I\${includedir}
EOF
}
create_libiconv_system_package_config() {
local LIB_ICONV_VERSION=$(grep '_LIBICONV_VERSION' "${SDK_PATH}"/usr/include/iconv.h | grep -Eo '0x.*' | grep -Eo '.* ')
cat >"${INSTALL_PKG_CONFIG_DIR}/libiconv.pc" <<EOF
prefix=${SDK_PATH}/usr
exec_prefix=\${prefix}
libdir=\${exec_prefix}/lib
includedir=\${prefix}/include
Name: libiconv
Description: Character set conversion library
Version: ${LIB_ICONV_VERSION}
Requires:
Libs: -L\${libdir} -liconv -lcharset
Cflags: -I\${includedir}
EOF
}
create_libpng_package_config() {
local LIBPNG_VERSION="$1"
cat >"${INSTALL_PKG_CONFIG_DIR}/libpng.pc" <<EOF
prefix=${BASEDIR}/prebuilt/$(get_build_directory)/libpng
exec_prefix=\${prefix}
libdir=\${exec_prefix}/lib
includedir=\${prefix}/include
Name: libpng
Description: Loads and saves PNG files
Version: ${LIBPNG_VERSION}
Requires:
Cflags: -I\${includedir}
Libs: -L\${libdir} -lpng
EOF
}
create_libvorbis_package_config() {
local LIBVORBIS_VERSION="$1"
cat >"${INSTALL_PKG_CONFIG_DIR}/vorbis.pc" <<EOF
prefix=${BASEDIR}/prebuilt/$(get_build_directory)/libvorbis
exec_prefix=\${prefix}
libdir=\${prefix}/lib
includedir=\${prefix}/include
Name: vorbis
Description: vorbis is the primary Ogg Vorbis library
Version: ${LIBVORBIS_VERSION}
Requires: ogg
Libs: -L\${libdir} -lvorbis -lm
Cflags: -I\${includedir}
EOF
cat >"${INSTALL_PKG_CONFIG_DIR}/vorbisenc.pc" <<EOF
prefix=${BASEDIR}/prebuilt/$(get_build_directory)/libvorbis
exec_prefix=\${prefix}
libdir=\${prefix}/lib
includedir=\${prefix}/include
Name: vorbisenc
Description: vorbisenc is a library that provides a convenient API for setting up an encoding environment using libvorbis
Version: ${LIBVORBIS_VERSION}
Requires: vorbis
Conflicts:
Libs: -L\${libdir} -lvorbisenc
Cflags: -I\${includedir}
EOF
cat >"${INSTALL_PKG_CONFIG_DIR}/vorbisfile.pc" <<EOF
prefix=${BASEDIR}/prebuilt/$(get_build_directory)/libvorbis
exec_prefix=\${prefix}
libdir=\${prefix}/lib
includedir=\${prefix}/include
Name: vorbisfile
Description: vorbisfile is a library that provides a convenient high-level API for decoding and basic manipulation of all Vorbis I audio streams
Version: ${LIBVORBIS_VERSION}
Requires: vorbis
Conflicts:
Libs: -L\${libdir} -lvorbisfile
Cflags: -I\${includedir}
EOF
}
create_libxml2_package_config() {
local LIBXML2_VERSION="$1"
cat >"${INSTALL_PKG_CONFIG_DIR}/libxml-2.0.pc" <<EOF
prefix=${BASEDIR}/prebuilt/$(get_build_directory)/libxml2
exec_prefix=\${prefix}
libdir=\${exec_prefix}/lib
includedir=\${prefix}/include
modules=1
Name: libXML
Version: ${LIBXML2_VERSION}
Description: libXML library version2.
Requires: libiconv
Libs: -L\${libdir} -lxml2
Libs.private: -lz -lm
Cflags: -I\${includedir} -I\${includedir}/libxml2
EOF
}
create_snappy_package_config() {
local SNAPPY_VERSION="$1"
cat >"${INSTALL_PKG_CONFIG_DIR}/snappy.pc" <<EOF
prefix=${BASEDIR}/prebuilt/$(get_build_directory)/snappy
exec_prefix=\${prefix}
libdir=\${prefix}/lib
includedir=\${prefix}/include
Name: snappy
Description: a fast compressor/decompressor
Version: ${SNAPPY_VERSION}
Requires:
Libs: -L\${libdir} -lz -lc++
Cflags: -I\${includedir}
EOF
}
create_soxr_package_config() {
local SOXR_VERSION="$1"
cat >"${INSTALL_PKG_CONFIG_DIR}/soxr.pc" <<EOF
prefix=${BASEDIR}/prebuilt/$(get_build_directory)/soxr
exec_prefix=\${prefix}
libdir=\${prefix}/lib
includedir=\${prefix}/include
Name: soxr
Description: High quality, one-dimensional sample-rate conversion library
Version: ${SOXR_VERSION}
Requires:
Libs: -L\${libdir} -lsoxr
Cflags: -I\${includedir}
EOF
}
create_tesseract_package_config() {
local TESSERACT_VERSION="$1"
cat >"${INSTALL_PKG_CONFIG_DIR}/tesseract.pc" <<EOF
prefix=${BASEDIR}/prebuilt/$(get_build_directory)/tesseract
exec_prefix=\${prefix}
bindir=\${exec_prefix}/bin
datarootdir=\${prefix}/share
datadir=\${datarootdir}
libdir=\${exec_prefix}/lib
includedir=\${prefix}/include
Name: tesseract
Description: An OCR Engine that was developed at HP Labs between 1985 and 1995... and now at Google.
URL: https://github.com/tesseract-ocr/tesseract
Version: ${TESSERACT_VERSION}
Requires: lept
Libs: -L\${libdir} -ltesseract
Cflags: -I\${includedir}
EOF
}
create_libuuid_system_package_config() {
local UUID_VERSION="$1"
cat >"${INSTALL_PKG_CONFIG_DIR}/uuid.pc" <<EOF
prefix=${SDK_PATH}
exec_prefix=\${prefix}
libdir=\${exec_prefix}/usr/lib
includedir=\${prefix}/include
Name: uuid
Description: Universally unique id library
Version: ${UUID_VERSION}
Requires:
Cflags: -I\${includedir}
Libs: -L\${libdir}
EOF
}
create_xvidcore_package_config() {
local XVIDCORE_VERSION="$1"
cat >"${INSTALL_PKG_CONFIG_DIR}/xvidcore.pc" <<EOF
prefix=${BASEDIR}/prebuilt/$(get_build_directory)/xvidcore
exec_prefix=\${prefix}
libdir=\${prefix}/lib
includedir=\${prefix}/include
Name: xvidcore
Description: the main MPEG-4 de-/encoding library
Version: ${XVIDCORE_VERSION}
Requires:
Libs: -L\${libdir}
Cflags: -I\${includedir}
EOF
}
create_zlib_system_package_config() {
ZLIB_VERSION=$(grep '#define ZLIB_VERSION' "${SDK_PATH}"/usr/include/zlib.h | grep -Eo '\".*\"' | sed -e 's/\"//g')
cat >"${INSTALL_PKG_CONFIG_DIR}/zlib.pc" <<EOF
prefix=${SDK_PATH}/usr
exec_prefix=\${prefix}
libdir=\${exec_prefix}/lib
includedir=\${prefix}/include
Name: zlib
Description: zlib compression library
Version: ${ZLIB_VERSION}
Requires:
Libs: -L\${libdir} -lz
Cflags: -I\${includedir}
EOF
}
create_bzip2_system_package_config() {
BZIP2_VERSION=$(grep -Eo 'version.*of' "${SDK_PATH}"/usr/include/bzlib.h | sed -e 's/of//;s/version//g;s/\ //g')
cat >"${INSTALL_PKG_CONFIG_DIR}/bzip2.pc" <<EOF
prefix=${SDK_PATH}/usr
exec_prefix=\${prefix}
libdir=\${exec_prefix}/lib
includedir=\${prefix}/include
Name: bzip2
Description: library for lossless, block-sorting data compression
Version: ${BZIP2_VERSION}
Requires:
Libs: -L\${libdir} -lbz2
Cflags: -I\${includedir}
EOF
}