[vlc-devel] [PATCH 09/10] VLCKit: make sure that the right archs exist

Faustino E. Osuna enrique.osuna at gmail.com
Tue Jan 24 01:31:56 CET 2012


When preparing the framework, guarantee that the expected
architectures are present. If they are not present, or if an
unexpected architecture is present, then reconstruct the universal
binary.
---
 projects/macosx/framework/Pre-Compile.sh |   54 ++++++++++++++++++++---------
 1 files changed, 37 insertions(+), 17 deletions(-)

diff --git a/projects/macosx/framework/Pre-Compile.sh b/projects/macosx/framework/Pre-Compile.sh
index 0ac2b28..ef0aea6 100644
--- a/projects/macosx/framework/Pre-Compile.sh
+++ b/projects/macosx/framework/Pre-Compile.sh
@@ -148,34 +148,54 @@ vlc_install() {
             vlc_install_object "$main_build_dir/$src_dir/$src" "$dest_dir" "$type" $5
         else
             local fatdest="$dest_dir/$2"
-            local shouldUpdateFat="no"
+            local shouldUpdate="no"
 
-            local objects=""
+            # Determine what architectures are available in the destination image
+            local fatdest_archs=""
+            if [ -e ${fatdest} ]; then
+                fatdest_archs=`lipo -info "${fatdest}" 2> /dev/null | sed -E -e 's/[[:space:]]+$//' -e 's/.+:[[:space:]]*//' -e 's/[^[:space:]]+/(&)/g'`
 
-            # Create a temporary destination dir to store each ARCH object file
-            local tmp_dest_dir="$VLC_BUILD_DIR/tmp/$type"
-            rm -Rf "${tmp_dest_dir}/*"
-            mkdir -p "$tmp_dest_dir"
+                # Check to see if the destination image needs to be reconstructed
+                for arch in $ARCHS; do
+                    # Only install if the new image is newer than the one we have installed or the required arch is missing.
+                    if test $shouldUpdate = "no"  && (! [[ "$fatdest_archs" =~ \($arch\) ]] || test "$VLC_BUILD_DIR/$arch/$src_dir/$src" -nt "${fatdest}"); then
+                        shouldUpdate="yes"
+                    fi
+                    fatdest_archs=${fatdest_archs//\($arch\)/}
+                done
+
+                # Reconstruct the destination image, if the update flag is set or if there are more archs in the desintation then we need
+                fatdest_archs=${fatdest_archs// /}
+            else
+                # If the destination image does not exist, then we have to reconstruct it
+                shouldUpdate="yes"
+            fi
 
-            for arch in $ARCHS; do
-                local arch_src="$VLC_BUILD_DIR/$arch/$src_dir/$src"
+            # If we should update the destination image or if there were unexpected archs in the destination image, then reconstruct it
+            if test "$shouldUpdate" = "yes" || test -n "${fatdest_archs}"; then
+                # If the destination image exists, get rid of it so we can copy over the newly constructed image
+                if test -e ${fatdest}; then
+                    rm "$fatdest"
+                fi
 
-                # Only install if the new image is newer than the one we have installed.
-                if ( (! test -e ${fatdest}) || test ${arch_src} -nt ${fatdest} ); then
+                # Create a temporary destination dir to store each ARCH object file
+                local tmp_dest_dir="$VLC_BUILD_DIR/tmp/$type"
+                rm -Rf "${tmp_dest_dir}/*"
+                mkdir -p "$tmp_dest_dir"
+
+                # Search for each ARCH object file used to construct a fat image
+                local objects=""
+                for arch in $ARCHS; do
+                    local arch_src="$VLC_BUILD_DIR/$arch/$src_dir/$src"
                     vlc_install_object "$arch_src" "$tmp_dest_dir" "$type" "$5" "" ".$arch"
                     local dest="$tmp_dest_dir/$src.$arch"
-                    if test -e ${dest}; then
-                        if (! test "$dest_dir/$arch_src" -nt "${dest}"); then
-                            shouldUpdateFat="yes"
-                        fi
+                    if [ -e ${dest} ]; then
                         objects="${dest} $objects"
                     else
                         echo "Warning: building $arch_src without $arch"
                     fi
-                fi
-            done;
+                done;
 
-            if test "$shouldUpdateFat" = "yes"; then
                 echo "Creating fat $type $fatdest"
                 lipo $objects -output "$fatdest" -create
             fi
-- 
1.7.7.4




More information about the vlc-devel mailing list