浏览代码

MVK: completely re-write the way we create static libraries

This removes the aggregation target from the xcodeproj, always compiles both for simulator and device and will solve linking issues in client apps

further, this prepares compiling MVK as a dynamic library
Felix Paul Kühne 10 年之前
父节点
当前提交
018fb2596f
共有 4 个文件被更改,包括 222 次插入230 次删除
  1. 33 122
      MobileVLCKit.xcodeproj/project.pbxproj
  2. 0 59
      MobileVLCKit/AggregateStaticPlugins.sh
  3. 0 44
      MobileVLCKit/MobileVLCKit.xcconfig
  4. 189 5
      buildMobileVLCKit.sh

+ 33 - 122
MobileVLCKit.xcodeproj/project.pbxproj

@@ -6,20 +6,6 @@
 	objectVersion = 46;
 	objects = {
 
-/* Begin PBXAggregateTarget section */
-		7A5ECAF911DE917B00F66AF3 /* Aggregate static plugins */ = {
-			isa = PBXAggregateTarget;
-			buildConfigurationList = 7A5ECB1011DE919F00F66AF3 /* Build configuration list for PBXAggregateTarget "Aggregate static plugins" */;
-			buildPhases = (
-				7A5ECAF811DE917B00F66AF3 /* Aggregate static plugins script */,
-			);
-			dependencies = (
-			);
-			name = "Aggregate static plugins";
-			productName = "Aggregate static plugins";
-		};
-/* End PBXAggregateTarget section */
-
 /* Begin PBXBuildFile section */
 		6360B0E211E7F0C000EAD790 /* VLCMediaDiscoverer.m in Sources */ = {isa = PBXBuildFile; fileRef = 6360B0E111E7F0C000EAD790 /* VLCMediaDiscoverer.m */; };
 		6360B10611E7F27300EAD790 /* VLCMediaDiscoverer.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 6360B0E311E7F0D300EAD790 /* VLCMediaDiscoverer.h */; };
@@ -44,16 +30,6 @@
 		AACBBE4A0F95108600F1A2B1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AACBBE490F95108600F1A2B1 /* Foundation.framework */; };
 /* End PBXBuildFile section */
 
-/* Begin PBXContainerItemProxy section */
-		CCD5C82E15947E6B00AED565 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 7A5ECAF911DE917B00F66AF3;
-			remoteInfo = "Aggregate static plugins";
-		};
-/* End PBXContainerItemProxy section */
-
 /* Begin PBXCopyFilesBuildPhase section */
 		7A5ECB6211DE961B00F66AF3 /* Copy Headers */ = {
 			isa = PBXCopyFilesBuildPhase;
@@ -97,12 +73,11 @@
 		7A5ECAD911DE8FAB00F66AF3 /* VLCAudio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLCAudio.h; path = Headers/Public/VLCAudio.h; sourceTree = "<group>"; };
 		7A5ECAE411DE8FEF00F66AF3 /* VLCLibVLCBridging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLCLibVLCBridging.h; path = Headers/Internal/VLCLibVLCBridging.h; sourceTree = "<group>"; };
 		7A5ECAE511DE8FEF00F66AF3 /* VLCEventManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLCEventManager.h; path = Headers/Internal/VLCEventManager.h; sourceTree = "<group>"; };
-		7A5ECB3311DE948C00F66AF3 /* MobileVLCKit.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = MobileVLCKit.xcconfig; path = MobileVLCKit/MobileVLCKit.xcconfig; sourceTree = "<group>"; };
 		7A5ECB3411DE94D600F66AF3 /* vlc-plugins.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "vlc-plugins.h"; path = "MobileVLCKit/vlc-plugins.h"; sourceTree = "<group>"; };
 		7A5ECB9D11DE975700F66AF3 /* MobileVLCKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MobileVLCKit.h; path = Headers/Public/MobileVLCKit.h; sourceTree = "<group>"; };
-		7A5ECBAC11DE987400F66AF3 /* AggregateStaticPlugins.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = AggregateStaticPlugins.sh; path = MobileVLCKit/AggregateStaticPlugins.sh; sourceTree = "<group>"; };
 		7D5F8009185B72EB00C2CD75 /* VLCMediaListPlayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VLCMediaListPlayer.m; path = Sources/VLCMediaListPlayer.m; sourceTree = "<group>"; };
 		7D5F800B185B730F00C2CD75 /* VLCMediaListPlayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLCMediaListPlayer.h; path = Headers/Public/VLCMediaListPlayer.h; sourceTree = "<group>"; };
+		7D8938951B500042008F2B14 /* vlc-plugins.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "vlc-plugins.xcconfig"; path = "MobileVLCKit/vlc-plugins.xcconfig"; sourceTree = "<group>"; };
 		AA747D9E0F9514B9006C5449 /* MobileVLCKit_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MobileVLCKit_Prefix.pch; sourceTree = SOURCE_ROOT; };
 		AACBBE490F95108600F1A2B1 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
 		D2AAC07E0554694100DB518D /* libMobileVLCKit.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libMobileVLCKit.a; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -168,8 +143,7 @@
 		32C88DFF0371C24200C91783 /* Other Sources */ = {
 			isa = PBXGroup;
 			children = (
-				7A5ECBAC11DE987400F66AF3 /* AggregateStaticPlugins.sh */,
-				7A5ECB3311DE948C00F66AF3 /* MobileVLCKit.xcconfig */,
+				7D8938951B500042008F2B14 /* vlc-plugins.xcconfig */,
 				AA747D9E0F9514B9006C5449 /* MobileVLCKit_Prefix.pch */,
 			);
 			name = "Other Sources";
@@ -217,7 +191,6 @@
 			buildRules = (
 			);
 			dependencies = (
-				CCD5C82F15947E6B00AED565 /* PBXTargetDependency */,
 			);
 			name = MobileVLCKit;
 			productName = MobileVLCKit;
@@ -245,28 +218,10 @@
 			projectRoot = "";
 			targets = (
 				D2AAC07D0554694100DB518D /* MobileVLCKit */,
-				7A5ECAF911DE917B00F66AF3 /* Aggregate static plugins */,
 			);
 		};
 /* End PBXProject section */
 
-/* Begin PBXShellScriptBuildPhase section */
-		7A5ECAF811DE917B00F66AF3 /* Aggregate static plugins script */ = {
-			isa = PBXShellScriptBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			inputPaths = (
-			);
-			name = "Aggregate static plugins script";
-			outputPaths = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-			shellPath = /bin/sh;
-			shellScript = "/bin/sh ${SRCROOT}/MobileVLCKit/AggregateStaticPlugins.sh\nexit 0\n";
-		};
-/* End PBXShellScriptBuildPhase section */
-
 /* Begin PBXSourcesBuildPhase section */
 		D2AAC07B0554694100DB518D /* Sources */ = {
 			isa = PBXSourcesBuildPhase;
@@ -287,45 +242,10 @@
 		};
 /* End PBXSourcesBuildPhase section */
 
-/* Begin PBXTargetDependency section */
-		CCD5C82F15947E6B00AED565 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 7A5ECAF911DE917B00F66AF3 /* Aggregate static plugins */;
-			targetProxy = CCD5C82E15947E6B00AED565 /* PBXContainerItemProxy */;
-		};
-/* End PBXTargetDependency section */
-
 /* Begin XCBuildConfiguration section */
-		1DEB921F08733DC00010E9CD /* Debug */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = 7A5ECB3311DE948C00F66AF3 /* MobileVLCKit.xcconfig */;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				ARCHS = (
-					"$(ARCHS_STANDARD_INCLUDING_64_BIT)",
-					armv7s,
-				);
-				CLANG_CXX_LIBRARY = "libc++";
-				CLANG_ENABLE_OBJC_ARC = YES;
-				COPY_PHASE_STRIP = NO;
-				DSTROOT = /tmp/MobileVLCKit.dst;
-				GCC_C_LANGUAGE_STANDARD = gnu11;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = MobileVLCKit_Prefix.pch;
-				GCC_SYMBOLS_PRIVATE_EXTERN = YES;
-				HEADER_SEARCH_PATHS = "$(SRCROOT)/MobileVLCKit/ImportedSources/vlc/include";
-				INSTALL_PATH = /usr/local/lib;
-				IPHONEOS_DEPLOYMENT_TARGET = 5.1.1;
-				PRODUCT_NAME = MobileVLCKit;
-				VLC_SRC_DIR = "$(PROJECT_DIR)/MobileVLCKit/ImportedSources/vlc";
-			};
-			name = Debug;
-		};
 		1DEB922008733DC00010E9CD /* Release */ = {
 			isa = XCBuildConfiguration;
-			baseConfigurationReference = 7A5ECB3311DE948C00F66AF3 /* MobileVLCKit.xcconfig */;
+			baseConfigurationReference = 7D8938951B500042008F2B14 /* vlc-plugins.xcconfig */;
 			buildSettings = {
 				ALWAYS_SEARCH_USER_PATHS = NO;
 				ARCHS = (
@@ -342,64 +262,64 @@
 				GCC_SYMBOLS_PRIVATE_EXTERN = YES;
 				HEADER_SEARCH_PATHS = "$(SRCROOT)/MobileVLCKit/ImportedSources/vlc/include";
 				INSTALL_PATH = /usr/local/lib;
-				IPHONEOS_DEPLOYMENT_TARGET = 5.1.1;
+				IPHONEOS_DEPLOYMENT_TARGET = 7.0;
+				OTHER_LIBTOOLFLAGS = "$(PROJECT_DIR)/MobileVLCKit/ImportedSources/vlc/install-ios/core/libcompat.a $(PROJECT_DIR)/MobileVLCKit/ImportedSources/vlc/install-ios/core/libvlc.a $(PROJECT_DIR)/MobileVLCKit/ImportedSources/vlc/install-ios/core/libvlccore.a $(VLC_PLUGINS_LDFLAGS) $(OTHER_CFLAGS)";
 				PRODUCT_NAME = MobileVLCKit;
-				VLC_SRC_DIR = "$(PROJECT_DIR)/MobileVLCKit/ImportedSources/vlc";
 			};
 			name = Release;
 		};
-		1DEB922308733DC00010E9CD /* Debug */ = {
+		1DEB922408733DC00010E9CD /* Release */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				ARCHS = "$(ARCHS_STANDARD_32_BIT)";
 				GCC_C_LANGUAGE_STANDARD = c99;
-				GCC_OPTIMIZATION_LEVEL = 0;
 				GCC_WARN_ABOUT_RETURN_TYPE = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
-				IPHONEOS_DEPLOYMENT_TARGET = 5.1;
+				IPHONEOS_DEPLOYMENT_TARGET = 7.0;
 				OTHER_LDFLAGS = "-ObjC";
 				SDKROOT = iphoneos;
 				SKIP_INSTALL = YES;
 			};
-			name = Debug;
+			name = Release;
 		};
-		1DEB922408733DC00010E9CD /* Release */ = {
+		7D8938931B500013008F2B14 /* Debug */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				ARCHS = "$(ARCHS_STANDARD_32_BIT)";
 				GCC_C_LANGUAGE_STANDARD = c99;
 				GCC_WARN_ABOUT_RETURN_TYPE = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
-				IPHONEOS_DEPLOYMENT_TARGET = 5.1;
+				IPHONEOS_DEPLOYMENT_TARGET = 7.0;
 				OTHER_LDFLAGS = "-ObjC";
 				SDKROOT = iphoneos;
 				SKIP_INSTALL = YES;
 			};
-			name = Release;
-		};
-		7A5ECAFA11DE917B00F66AF3 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)";
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				IPHONEOS_DEPLOYMENT_TARGET = 5.1.1;
-				PRODUCT_NAME = "Aggregate static plugins";
-			};
 			name = Debug;
 		};
-		7A5ECAFB11DE917B00F66AF3 /* Release */ = {
+		7D8938941B500013008F2B14 /* Debug */ = {
 			isa = XCBuildConfiguration;
+			baseConfigurationReference = 7D8938951B500042008F2B14 /* vlc-plugins.xcconfig */;
 			buildSettings = {
-				ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)";
-				COPY_PHASE_STRIP = YES;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				IPHONEOS_DEPLOYMENT_TARGET = 5.1.1;
-				PRODUCT_NAME = "Aggregate static plugins";
-				ZERO_LINK = NO;
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				ARCHS = (
+					"$(ARCHS_STANDARD_INCLUDING_64_BIT)",
+					armv7s,
+				);
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_OBJC_ARC = YES;
+				DSTROOT = /tmp/MobileVLCKit.dst;
+				ENABLE_NS_ASSERTIONS = NO;
+				GCC_C_LANGUAGE_STANDARD = gnu11;
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				GCC_PREFIX_HEADER = MobileVLCKit_Prefix.pch;
+				GCC_SYMBOLS_PRIVATE_EXTERN = YES;
+				HEADER_SEARCH_PATHS = "$(SRCROOT)/MobileVLCKit/ImportedSources/vlc/include";
+				INSTALL_PATH = /usr/local/lib;
+				IPHONEOS_DEPLOYMENT_TARGET = 7.0;
+				OTHER_LIBTOOLFLAGS = "$(PROJECT_DIR)/MobileVLCKit/ImportedSources/vlc/install-ios/core/libcompat.a $(PROJECT_DIR)/MobileVLCKit/ImportedSources/vlc/install-ios/core/libvlc.a $(PROJECT_DIR)/MobileVLCKit/ImportedSources/vlc/install-ios/core/libvlccore.a $(VLC_PLUGINS_LDFLAGS) $(OTHER_CFLAGS)";
+				PRODUCT_NAME = MobileVLCKit;
 			};
-			name = Release;
+			name = Debug;
 		};
 /* End XCBuildConfiguration section */
 
@@ -407,8 +327,8 @@
 		1DEB921E08733DC00010E9CD /* Build configuration list for PBXNativeTarget "MobileVLCKit" */ = {
 			isa = XCConfigurationList;
 			buildConfigurations = (
-				1DEB921F08733DC00010E9CD /* Debug */,
 				1DEB922008733DC00010E9CD /* Release */,
+				7D8938941B500013008F2B14 /* Debug */,
 			);
 			defaultConfigurationIsVisible = 0;
 			defaultConfigurationName = Release;
@@ -416,17 +336,8 @@
 		1DEB922208733DC00010E9CD /* Build configuration list for PBXProject "MobileVLCKit" */ = {
 			isa = XCConfigurationList;
 			buildConfigurations = (
-				1DEB922308733DC00010E9CD /* Debug */,
 				1DEB922408733DC00010E9CD /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		7A5ECB1011DE919F00F66AF3 /* Build configuration list for PBXAggregateTarget "Aggregate static plugins" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				7A5ECAFA11DE917B00F66AF3 /* Debug */,
-				7A5ECAFB11DE917B00F66AF3 /* Release */,
+				7D8938931B500013008F2B14 /* Debug */,
 			);
 			defaultConfigurationIsVisible = 0;
 			defaultConfigurationName = Release;

+ 0 - 59
MobileVLCKit/AggregateStaticPlugins.sh

@@ -1,59 +0,0 @@
-#!/bin/sh
-
-# Pre-Compile.sh
-# MobileVLC
-#
-# Copyright Pierre d'Herbemont
-# License is the same as the COPYING file at root of the project
-
-
-pushd `dirname $0` > /dev/null
-PROJECT_DIR=`pwd`
-popd > /dev/null
-
-echo "PROJECT DIR = $PROJECT_DIR"
-
-ARCH=$ARCHS
-VLC_SRC_DIR="$PROJECT_DIR/ImportedSources/vlc"
-
-if [ "$PLATFORM_NAME" = "iphoneos" ]; then
-VLC_BUILD_DIR="$VLC_SRC_DIR/build-ios-OS/$CURRENT_ARCH"
-VLC_INSTALL_DIR="$VLC_SRC_DIR/install-ios-OS/$CURRENT_ARCH"
-else
-VLC_BUILD_DIR="$VLC_SRC_DIR/build-ios-Simulator/$CURRENT_ARCH"
-VLC_INSTALL_DIR="$VLC_SRC_DIR/install-ios-Simulator/$CURRENT_ARCH"
-fi
-
-VLC_CONTRIB_DIR="$VLC_INSTALL_DIR/contribs/"
-LDFLAGS=""
-
-echo "VLC_BUILD_DIR   = $VLC_BUILD_DIR"
-echo "VLC_INSTALL_DIR = $VLC_INSTALL_DIR"
-echo "SRC DIR         = $VLC_SRC_DIR"
-echo "VLC_CONTRIB_DIR = $VLC_CONTRIB_DIR"
-
-echo "=== Building for $ARCH ==="
-echo "-"
-
-echo "// This file is autogenerated by $(basename $0)\n\n" > $PROJECT_DIR/vlc-plugins.h
-echo "// This file is autogenerated by $(basename $0)\n\n" > $PROJECT_DIR/vlc-plugins.xcconfig
-
-VLC_MODULES=`ls $VLC_INSTALL_DIR/lib/vlc/plugins/lib*_plugin.a|tr \\\\n \ `
-#echo $VLC_MODULES
-BUILTINS="const void *vlc_static_modules[] = {\n"; \
-
-LDFLAGS=""
-DEFINITION=""
-
-for file in $VLC_MODULES; do
-  name=`echo $file | sed 's/.*\/lib//' | sed 's/_plugin\.a//'`
-  symbol=`nm -g $file | grep _vlc_entry__|cut -d" " -f 3|sed 's/_vlc_entry/vlc_entry/'`
-  DEFINITION+="int $symbol (int (*)(void *, void *, int, ...), void *);\n";
-  BUILTINS+=" $symbol,\n"
-  LDFLAGS+="\$(VLC_INSTALL_DIR)/lib/vlc/plugins/lib${name}_plugin.a "
-done;
-
-BUILTINS="$BUILTINS NULL\n};\n"
-
-echo -e "VLC_PLUGINS_LDFLAGS=$LDFLAGS" >> $PROJECT_DIR/vlc-plugins.xcconfig
-echo -e "$DEFINITION\n$BUILTINS" >> $PROJECT_DIR/vlc-plugins.h

+ 0 - 44
MobileVLCKit/MobileVLCKit.xcconfig

@@ -1,44 +0,0 @@
-//
-//  vlc.xcconfig
-//  VLC
-//
-//  Created by Pierre d'Herbemont on 6/26/10.
-//  Copyright 2010-2013 VLC Authors and VideoLAN. All rights reserved.
-//
-
-
-VLC_SRC_DIR=$(PROJECT_DIR)/MobileVLCKit/ImportedSources/vlc
-VLC_PLATFORM[sdk=iphonesimulator*]=Simulator
-VLC_PLATFORM[sdk=iphoneos*]=OS
-VLC_INSTALL_DIR=$(VLC_SRC_DIR)/install-ios-$(VLC_PLATFORM)/$(CURRENT_ARCH)
-
-//OTHER_CFLAGS= -ObjC -all_load
-#include "vlc-plugins.xcconfig"
-
-VLC_CONTRIB_DIR=$VLC_INSTALL_DIR/contribs
-ARCHIVE=$(VLC_CONTRIB_DIR)/lib/libarchive.a
-AVCODEC=$(VLC_CONTRIB_DIR)/lib/libavutil.a ${VLC_CONTRIB_DIR}/lib/libavcodec.a $(VLC_CONTRIB_DIR)/lib/libavformat.a $(VLC_CONTRIB_DIR)/lib/libswscale.a $(VLC_CONTRIB_DIR)/lib/libgsm.a
-DVBPSI=$(VLC_CONTRIB_DIR)/lib/libdvbpsi.a
-FLAC=$(VLC_CONTRIB_DIR)/lib/libFLAC.a
-FREETYPE=$(VLC_CONTRIB_DIR)/lib/libfreetype.a
-FRIBIDI=$(VLC_CONTRIB_DIR)/lib/libfribidi.a
-ASS=$(VLC_CONTRIB_DIR)/lib/libass.a
-GCRYPT=$(VLC_CONTRIB_DIR)/lib/libgcrypt.a $(VLC_CONTRIB_DIR)/lib/libgpg-error.a
-HARFBUZZ=$(VLC_CONTRIB_DIR)/lib/libharfbuzz.a
-LIVE555=$(VLC_CONTRIB_DIR)/lib/libUsageEnvironment.a $(VLC_CONTRIB_DIR)/lib/libBasicUsageEnvironment.a $(VLC_CONTRIB_DIR)/lib/libgroupsock.a $(VLC_CONTRIB_DIR)/lib/libz.a $(VLC_CONTRIB_DIR)/lib/libliveMedia.a
-MKV=$(VLC_CONTRIB_DIR)/lib/libebml.a $(VLC_CONTRIB_DIR)/lib/libmatroska.a
-MODPLUG=$(VLC_CONTRIB_DIR)/lib/libmodplug.a
-MP3=$(VLC_CONTRIB_DIR)/lib/libmpg123.a
-OPUS=$(VLC_CONTRIB_DIR)/lib/libopus.a
-OGG=$(VLC_CONTRIB_DIR)/lib/libogg.a $(VLC_CONTRIB_DIR)/lib/libtheora.a $(VLC_CONTRIB_DIR)/lib/libtheoradec.a $(VLC_CONTRIB_DIR)/lib/libtheoraenc.a $(VLC_CONTRIB_DIR)/lib/libvorbis.a $(VLC_CONTRIB_DIR)/lib/libvorbisenc.a $(VLC_CONTRIB_DIR)/lib/libvorbisfile.a
-PICS=$(VLC_CONTRIB_DIR)/lib/libpng.a $(VLC_CONTRIB_DIR)/lib/libopenjpeg.a
-SPEEX=$(VLC_CONTRIB_DIR)/lib/libspeex.a $(VLC_CONTRIB_DIR)/lib/libspeexdsp.a
-TAGLIB=$(VLC_CONTRIB_DIR)/lib/libtag.a $(VLC_CONTRIB_DIR)/lib/libtag_c.a
-VPX=$(VLC_CONTRIB_DIR)/lib/libvpx.a
-XML=$(VLC_CONTRIB_DIR)/lib/libxml2.a
-ZLIB=$(VLC_CONTRIB_DIR)/lib/libz.a
-SSH=$(VLC_CONTRIB_DIR)/lib/libssh2.a
-DSM=$(VLC_CONTRIB_DIR)/lib/libtasn1.a $(VLC_CONTRIB_DIR)/lib/libdsm.a
-ZVBI=$(VLC_CONTRIB_DIR)/lib/libzvbi.a
-
-OTHER_LIBTOOLFLAGS=$(ARCHIVE) $(ASS) $(AVCODEC) $(DVBPSI) $(FLAC) $(FRIBIDI) $(FREETYPE) $(GCRYPT) $(HARFBUZZ) $(LIVE555) $(MKV) $(MODPLUG) $(MP3) $(OGG) $(OPUS) $(PICS) $(SPEEX) $(TAGLIB) $(XML) $(VPX) $(SSH) $(DSM) $(ZLIB) $(ZVBI) $(VLC_INSTALL_DIR)/lib/vlc/libcompat.a  $(VLC_INSTALL_DIR)/lib/libvlc.a $(VLC_INSTALL_DIR)/lib/libvlccore.a $(VLC_PLUGINS_LDFLAGS) $(OTHER_CFLAGS)

+ 189 - 5
buildMobileVLCKit.sh

@@ -1,11 +1,11 @@
 #!/bin/sh
 # Copyright (C) Pierre d'Herbemont, 2010
-# Copyright (C) Felix Paul Kühne, 2012-2013
+# Copyright (C) Felix Paul Kühne, 2012-2015
 
 set -e
 
 BUILD_DEVICE=yes
-BUILD_SIMULATOR=no
+BUILD_SIMULATOR=yes
 BUILD_FRAMEWORK=no
 SDK=`xcrun --sdk iphoneos --show-sdk-version`
 SDK_MIN=7.0
@@ -31,6 +31,7 @@ OPTIONS
    -n       Skip script steps requiring network interaction
    -l       Skip libvlc compilation
    -w       Build a limited stack of non-scary libraries only
+   -y		Build universal static libraries
 EOF
 }
 
@@ -196,9 +197,6 @@ buildMobileKit() {
 
     spopd # MobileVLCKit/ImportedSources
 
-    buildxcodeproj MobileVLCKit "Aggregate static plugins"
-    buildxcodeproj MobileVLCKit "MobileVLCKit"
-
     info "Build for $PLATFORM completed"
 }
 
@@ -208,6 +206,192 @@ fi
 if [ "$BUILD_SIMULATOR" != "no" ]; then
     buildMobileKit iphonesimulator
 fi
+
+DEVICEARCHS=""
+SIMULATORARCHS=""
+
+doVLCLipo() {
+    FILEPATH="$1"
+    FILE="$2"
+    PLUGIN="$3"
+    files=""
+
+    info "...$FILEPATH$FILE"
+
+    for i in $DEVICEARCHS
+    do
+        files="install-ios-OS/$i/lib/$FILEPATH$FILE $files"
+    done
+
+    for i in $SIMULATORARCHS
+    do
+        files="install-ios-Simulator/$i/lib/$FILEPATH$FILE $files"
+    done
+
+    if [ "$PLUGIN" != "no" ]; then
+        lipo $files -create -output install-ios/plugins/$FILE
+    else
+        lipo $files -create -output install-ios/core/$FILE
+    fi
+}
+
+doContribLipo() {
+    LIBNAME="$1"
+    files=""
+
+    info "...$LIBNAME"
+
+    for i in $DEVICEARCHS
+    do
+        if [ "$i" != "arm64" ]; then
+            files="contrib/$i-apple-darwin11-$i/lib/$LIBNAME $files"
+        else
+            files="contrib/aarch64-apple-darwin11-aarch64/lib/$LIBNAME $files"
+        fi
+    done
+
+    for i in $SIMULATORARCHS
+    do
+        files="contrib/$i-apple-darwin11-$i/lib/$LIBNAME $files"
+    done
+
+    lipo $files -create -output install-ios/contrib/$LIBNAME
+}
+
+get_symbol()
+{
+    echo "$1" | grep vlc_entry_$2|cut -d" " -f 3|sed 's/_vlc/vlc/'
+}
+
+info "building universal static libs"
+PROJECT_DIR=`pwd`
+
+# remove old module list
+rm -f $PROJECT_DIR/MobileVLCKit/vlc-plugins.h
+rm -f $PROJECT_DIR/MobileVLCKit/vlc-plugins.xcconfig
+
+spushd MobileVLCKit/ImportedSources/vlc
+rm -rf install-ios
+mkdir install-ios
+mkdir install-ios/core
+mkdir install-ios/contrib
+mkdir install-ios/plugins
+spopd # vlc
+
+spushd MobileVLCKit/ImportedSources/vlc/install-ios-OS
+for i in `ls .`
+do
+	DEVICEARCHS="$DEVICEARCHS $i"
+done
+spopd # vlc-install-ios-OS
+
+spushd MobileVLCKit/ImportedSources/vlc/install-ios-Simulator
+for i in `ls .`
+do
+	SIMULATORARCHS="$SIMULATORARCHS $i"
+done
+spopd # vlc-install-ios-Simulator
+
+# arm64 got the lowest number of modules
+VLCMODULES=""
+spushd MobileVLCKit/ImportedSources/vlc/install-ios-OS/arm64/lib/vlc/plugins
+for i in `ls *.a`
+do
+	VLCMODULES="$i $VLCMODULES"
+done
+spopd # vlc/install-ios-OS/arm64/lib/vlc/plugins
+
+# collect ARMv7/s specific neon modules
+VLCNEONMODULES=""
+spushd MobileVLCKit/ImportedSources/vlc/install-ios-OS/armv7/lib/vlc/plugins
+for i in `ls *.a | grep neon`
+do
+	VLCNEONMODULES="$i $VLCNEONMODULES"
+done
+spopd # vlc/install-ios-OS/armv7/lib/vlc/plugins
+
+spushd MobileVLCKit/ImportedSources/vlc
+
+# lipo all the vlc libraries and its plugins
+doVLCLipo "" "libvlc.a" "no"
+doVLCLipo "" "libvlccore.a" "no"
+doVLCLipo "vlc/" "libcompat.a" "no"
+for i in $VLCMODULES
+do
+	doVLCLipo "vlc/plugins/" $i "yes"
+done
+
+# lipo contrib libraries
+CONTRIBLIBS=""
+spushd contrib/armv7-apple-darwin11-armv7/lib
+for i in `ls *.a`
+do
+	CONTRIBLIBS="$i $CONTRIBLIBS"
+done
+spopd # contrib/armv7-apple-darwin11-armv7/lib
+for i in $CONTRIBLIBS
+do
+	doContribLipo $i
+done
+
+# lipo the remaining NEON plugins
+DEVICEARCHS="armv7 armv7s"
+SIMULATORARCHS=""
+for i in $VLCNEONMODULES
+do
+	doVLCLipo "vlc/plugins/" $i "yes"
+done
+
+# create module list
+info "creating module list"
+echo "// This file is autogenerated by $(basename $0)\n\n" > $PROJECT_DIR/MobileVLCKit/vlc-plugins.h
+echo "// This file is autogenerated by $(basename $0)\n\n" > $PROJECT_DIR/MobileVLCKit/vlc-plugins.xcconfig
+
+# arm64 got the lowest number of modules
+BUILTINS="const void *vlc_static_modules[] = {\n"; \
+
+LDFLAGS=""
+DEFINITIONS=""
+
+# add contrib libraries to LDFLAGS
+for file in $CONTRIBLIBS
+do
+	LDFLAGS+="\$(PROJECT_DIR)/MobileVLCKit/ImportedSources/vlc/install-ios/contrib/$file "
+done
+
+for file in $VLCMODULES
+do
+	symbols=$(nm -g -arch armv7 install-ios/plugins/$file)
+	entryname=$(get_symbol "$symbols" _)
+	DEFINITIONS+="int $entryname (int (*)(void *, void *, int, ...), void *);\n";
+	BUILTINS+=" $entryname,\n"
+	LDFLAGS+="\$(PROJECT_DIR)/MobileVLCKit/ImportedSources/vlc/install-ios/plugins/$file "
+	info "...$entryname"
+done;
+
+BUILTINS+="#ifdef __arm__\n"
+DEFINITIONS+="#ifdef __arm__\n"
+for file in $VLCNEONMODULES
+do
+	symbols=$(nm -g -arch armv7 install-ios/plugins/$file)
+	entryname=$(get_symbol "$symbols" _)
+	DEFINITIONS+="int $entryname (int (*)(void *, void *, int, ...), void *);\n";
+	BUILTINS+=" $entryname,\n"
+	LDFLAGS+="\$(PROJECT_DIR)/MobileVLCKit/ImportedSources/vlc/install-ios/plugins/$file "
+	info "...$entryname"
+done;
+BUILTINS+="#endif\n"
+DEFINITIONS+="#endif\n"
+
+BUILTINS="$BUILTINS NULL\n};\n"
+
+echo "$DEFINITIONS\n$BUILTINS" > $PROJECT_DIR/MobileVLCKit/vlc-plugins.h
+echo "VLC_PLUGINS_LDFLAGS=$LDFLAGS" > $PROJECT_DIR/MobileVLCKit/vlc-plugins.xcconfig
+
+spopd # vlc
+
+info "all done"
+
 if [ "$BUILD_FRAMEWORK" != "no" ]; then
     info "Building MobileVLCKit.framework"