[vlc-commits] VLCKit: make sure that the right archs exist

Faustino E. Osuna git at videolan.org
Thu Jan 26 15:09:36 CET 2012


vlc | branch: master | Faustino E. Osuna <enrique.osuna at gmail.com> | Tue Jan 24 01:31:56 2012 +0100| [3562db63c343c0d2c7c516393d73e303566ae0bb] | committer: Jean-Baptiste Kempf

VLCKit: make sure that the right archs exist

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.

Signed-off-by: Jean-Baptiste Kempf <jb at videolan.org>

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=3562db63c343c0d2c7c516393d73e303566ae0bb
---

 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



More information about the vlc-commits mailing list