However, opencv2.framework directory is erased and recreated on each run.
"""
-import glob, re, os, os.path, shutil, string, sys, exceptions, subprocess
+import glob, re, os, os.path, shutil, string, sys, exceptions, subprocess, argparse
+
+opencv_contrib_path = None
def execute(cmd):
try:
if arch.startswith("armv"):
cmakeargs += " -DENABLE_NEON=ON"
+ if opencv_contrib_path is not None:
+ cmakeargs += " -DOPENCV_EXTRA_MODULES_PATH=%s -DOPENCV_EXTRA_WORLD=ON" % opencv_contrib_path
+
# if cmake cache exists, just rerun cmake to update OpenCV.xcodeproj if necessary
if os.path.isfile(os.path.join(builddir, "CMakeCache.txt")):
execute("cmake %s ." % (cmakeargs,))
def put_framework_together(srcroot, dstroot):
"constructs the framework directory after all the targets are built"
+ name = "opencv2" if opencv_contrib_path is None else "opencv2_contrib"
+
# find the list of targets (basically, ["iPhoneOS", "iPhoneSimulator"])
targetlist = glob.glob(os.path.join(dstroot, "build", "*"))
targetlist = [os.path.basename(t) for t in targetlist]
# set the current dir to the dst root
currdir = os.getcwd()
- framework_dir = dstroot + "/opencv2.framework"
+ framework_dir = dstroot + "/%s.framework" % name
if os.path.isdir(framework_dir):
shutil.rmtree(framework_dir)
os.makedirs(framework_dir)
# make universal static lib
wlist = " ".join(["../build/" + t + "/lib/Release/libopencv_world.a" for t in targetlist])
- execute("lipo -create " + wlist + " -o " + dstdir + "/opencv2")
+ execute("lipo -create " + wlist + " -o " + dstdir + "/%s" % name)
# copy Info.plist
shutil.copyfile(tdir0 + "/ios/Info.plist", dstdir + "/Resources/Info.plist")
os.symlink("A", "Versions/Current")
os.symlink("Versions/Current/Headers", "Headers")
os.symlink("Versions/Current/Resources", "Resources")
- os.symlink("Versions/Current/opencv2", "opencv2")
+ os.symlink("Versions/Current/%s" % name, name)
def build_framework(srcroot, dstroot):
if __name__ == "__main__":
- if len(sys.argv) != 2:
- print "Usage:\n\t./build_framework.py <outputdir>\n\n"
- sys.exit(0)
+ parser = argparse.ArgumentParser(description='The script builds OpenCV.framework for iOS.')
+ parser.add_argument('outputdir', nargs=1, help='folder to put built framework')
+ parser.add_argument('--contrib', help="folder with opencv_contrib repository")
+ args = parser.parse_args()
+
+ # path to OpenCV main repository - hardcoded ../..
+ opencv_path = os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]), "../.."))
+ print "OpenCV:", opencv_path
+
+ # path to OpenCV_contrib repository, can be empty - global variable
+ if hasattr(args, "contrib") and args.contrib is not None:
+ if os.path.isdir(args.contrib + "/modules"):
+ opencv_contrib_path = os.path.abspath(args.contrib + "/modules")
+ print "Contrib:", opencv_contrib_path
+ else:
+ print "Note: contrib repository is bad: modules subfolder not found"
+
+ # result path - folder where framework will be located
+ output_path = os.path.abspath(args.outputdir[0])
+ print "Output:", output_path
try:
- build_framework(os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]), "../..")), os.path.abspath(sys.argv[1]))
+ build_framework(opencv_path, output_path)
except Exception as e:
print >>sys.stderr, e
sys.exit(1)