123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 |
- #!/bin/sh
- # directories
- SCRATCH=`pwd`/"scratch"
- ARCHS="arm64 armv7 i386 x86_64"
- FFMPEG_VERSION="3.4"
- export FFMPEG_VERSION
- HEADER_SUFFIX=".h"
- CURRENT_FOLDER=`pwd`
- FRAMEWORK_NAME="FFmpeg"
- FRAMEWORK_EXT=".framework"
- FRAMEWORK="$FRAMEWORK_NAME$FRAMEWORK_EXT"
- BUILD_FOLDER="$CURRENT_FOLDER/FFmpeg-iOS"
- BUILD_THIN_FOLDER="$CURRENT_FOLDER/thin"
- BUILD_INCLUDE_FOLDER="$BUILD_FOLDER/include"
- BUILD_LIB_FOLDER="$BUILD_FOLDER/lib"
- OUTPUT_FOLDER="$CURRENT_FOLDER/$FRAMEWORK"
- OUTPUT_INFO_PLIST_FILE="$OUTPUT_FOLDER/Info.plist"
- OUTPUT_HEADER_FOLDER="$OUTPUT_FOLDER/Headers"
- OUTPUT_UMBRELLA_HEADER="$OUTPUT_HEADER_FOLDER/ffmpeg.h"
- OUTPUT_MODULES_FOLDER="$OUTPUT_FOLDER/Modules"
- OUTPUT_MODULES_FILE="$OUTPUT_MODULES_FOLDER/module.modulemap"
- VERSION_NEW_NAME="Version.h"
- BUNDLE_ID="org.ffmpeg.FFmpeg"
- function CreateFramework() {
- rm -rf $OUTPUT_FOLDER
- mkdir -p $OUTPUT_HEADER_FOLDER $OUTPUT_MODULES_FOLDER
- }
- function CompileSource() {
- ./build-ffmpeg.sh $ARCHS
- ./build-ffmpeg.sh lipo
- }
- function MergeStaticLibrary() {
- local files=""
- for ARCH in $ARCHS; do
- folder="$SCRATCH/$ARCH"
- name="$FRAMEWORK_NAME$ARCH.a"
- ar cru $name $(find $folder -name "*.o")
- files="$files $name"
- done
- lipo -create $files -output FFmpeg
- for file in $files; do
- rm -rf $file
- done
- mv $FRAMEWORK_NAME $OUTPUT_FOLDER
- }
- function RenameHeader() {
- local include_folder="$(pwd)/FFmpeg-iOS/include"
- local need_replace_version_folder=""
- for folder in "$include_folder"/*; do
- local folder_name=`basename $folder`
- local verstion_file_name="$folder_name$VERSION_NEW_NAME"
- for header in "$folder"/*; do
- local header_name=`basename $header`
- local dst_name=$header_name
- if [ $header_name == "version.h" ]; then
- dst_name=$verstion_file_name
- fi
- local dst_folder=$OUTPUT_HEADER_FOLDER
- local file_name="$folder/$header_name"
- local dst_file_name="$dst_folder/$dst_name"
- cp $file_name $dst_file_name
- find "$dst_folder" -name "$dst_name" -type f -exec sed -i '' "s/\"version.h\"/\"$verstion_file_name\"/g" {} \;
- done
- need_replace_version_folder="$need_replace_version_folder $folder_name"
- done
- for folder_name in $need_replace_version_folder; do
- local verstion_file_name="$folder_name$VERSION_NEW_NAME"
- find $OUTPUT_HEADER_FOLDER -type f -exec sed -i '' "s/\"$folder_name\/version.h\"/\"$verstion_file_name\"/g" {} \;
- done
- find $OUTPUT_HEADER_FOLDER -type f -exec sed -i '' "s/libavformat\///g" {} \;
- find $OUTPUT_HEADER_FOLDER -type f -exec sed -i '' "s/libavutil\///g" {} \;
- find $OUTPUT_HEADER_FOLDER -type f -exec sed -i '' "s/libavcodec\///g" {} \;
- }
- # COPY MISSING inttypes.h
- function CopyInttype() {
- local file="$(xcode-select -p)/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/clang/include/inttypes.h"
- cp $file $OUTPUT_HEADER_FOLDER
- find $OUTPUT_HEADER_FOLDER -type f -exec sed -i '' "s/<inttypes.h>/\"inttypes.h\"/g" {} \;
- }
- function CreateModulemapAndUmbrellaHeader() {
- #create ffmpeg.h
- cat > $OUTPUT_UMBRELLA_HEADER <<EOF
- #import <Foundation/Foundation.h>
- #import <VideoToolbox/VideoToolbox.h>
- #import <AudioToolbox/AudioToolbox.h>
- #include "avcodec.h"
- #include "avdevice.h"
- #include "avfilter.h"
- #include "avformat.h"
- #include "avutil.h"
- #include "swscale.h"
- #include "swresample.h"
- double FFmpegVersionNumber = $FFMPEG_VERSION;
- EOF
- cat > $OUTPUT_MODULES_FILE <<EOF
- framework module $FRAMEWORK_NAME {
- umbrella header "ffmpeg.h"
- export *
- module * { export * }
- }
- EOF
- }
- function CreateInfoPlist() {
- DEFAULT_iOS_SDK_VERSION=`defaults read $(xcode-select -p)/Platforms/iPhoneOS.platform/version CFBundleShortVersionString`
- DTCompiler=`defaults read $(xcode-select -p)/../info DTCompiler`
- DTPlatformBuild=`defaults read $(xcode-select -p)/../info DTPlatformBuild`
- DTSDKBuild=`defaults read $(xcode-select -p)/../info DTSDKBuild`
- DTXcode=`defaults read $(xcode-select -p)/../info DTXcode`
- DTXcodeBuild=`defaults read $(xcode-select -p)/../info DTXcodeBuild`
- OS_BUILD_VERSION=$(sw_vers -buildVersion)
- cat > $OUTPUT_INFO_PLIST_FILE <<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>BuildMachineOSBuild</key>
- <string>$OS_BUILD_VERSION</string>
- <key>CFBundleDevelopmentRegion</key>
- <string>en</string>
- <key>CFBundleExecutable</key>
- <string>$FRAMEWORK_NAME</string>
- <key>CFBundleIdentifier</key>
- <string>$BUNDLE_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>$FFMPEG_VERSION</string>
- <key>CFBundleSignature</key>
- <string>????</string>
- <key>CFBundleSupportedPlatforms</key>
- <array>
- <string>iPhoneOS</string>
- </array>
- <key>CFBundleVersion</key>
- <string>1</string>
- <key>DTCompiler</key>
- <string>$DTCompiler</string>
- <key>DTPlatformBuild</key>
- <string>$DTPlatformBuild</string>
- <key>DTPlatformName</key>
- <string>iphoneos</string>
- <key>DTPlatformVersion</key>
- <string>$DEFAULT_iOS_SDK_VERSION</string>
- <key>DTSDKBuild</key>
- <string>$DTSDKBuild</string>
- <key>DTSDKName</key>
- <string>iphoneos$DEFAULT_iOS_SDK_VERSION</string>
- <key>DTXcode</key>
- <string>$DTXcode</string>
- <key>DTXcodeBuild</key>
- <string>$DTXcodeBuild</string>
- <key>MinimumOSVersion</key>
- <string>8.0</string>
- <key>UIDeviceFamily</key>
- <array>
- <integer>1</integer>
- <integer>2</integer>
- </array>
- </dict>
- </plist>
- EOF
- }
- CompileSource
- CreateFramework
- MergeStaticLibrary
- RenameHeader
- CreateModulemapAndUmbrellaHeader
- CopyInttype
- CreateInfoPlist
|