Add build script and objc++ bridge

This commit is contained in:
Chris Li 2016-06-21 14:00:18 -04:00
parent 553a464157
commit e70271af68
10 changed files with 907 additions and 3 deletions

8
.gitignore vendored
View File

@ -1,4 +1,6 @@
*.xcuserstate
Kiwix/libkiwix
Pods
Pods
Kiwix/libkiwix/C&C++
Kiwix/libkiwix/include
Kiwix/libkiwix/shared
Kiwix/libkiwix/static

View File

@ -0,0 +1,24 @@
//
// ZimIndexer.h
// Kiwix
//
// Created by Chris Li on 6/3/16.
// Copyright © 2016 Chris. All rights reserved.
//
#import <Foundation/Foundation.h>
@protocol ZimIndexerDelegate <NSObject>
@optional
- (void)didProcessArticle:(NSUInteger)processedArticleCount totalArticleCount:(NSUInteger)totalArticleCount;
@end
@interface ZimIndexer : NSObject
@property (nonatomic, weak) id <ZimIndexerDelegate> delegate;
- (void)start:(NSURL *)zimFileURL indexFolderURL:(NSURL *)indexFolderURL;
@end

View File

@ -0,0 +1,45 @@
//
// ZimIndexer.m
// Kiwix
//
// Created by Chris Li on 6/3/16.
// Copyright © 2016 Chris. All rights reserved.
//
#include "xapianIndexer.h"
#import "ZimIndexer.h"
@interface ZimIndexer () {
kiwix::XapianIndexer *_indexer;
}
@end
@implementation ZimIndexer
static id staticInstance = nil;
- (instancetype)init {
self = [super init];
if (self) {
_indexer = new kiwix::XapianIndexer();
_indexer->setVerboseFlag(true);
}
staticInstance = self;
return self;
}
- (void)start:(NSURL *)zimFileURL indexFolderURL:(NSURL *)indexFolderURL {
_indexer->start([zimFileURL fileSystemRepresentation], [indexFolderURL fileSystemRepresentation], ProgressCallback);
}
void ProgressCallback(const UInt processedArticleCount, const UInt totalArticleCount) {
[staticInstance progressUpdate: processedArticleCount totalArticleCount: totalArticleCount];
}
- (void)progressUpdate:(UInt)processedArticleCount totalArticleCount:(UInt)totalArticleCount {
if ([self.delegate respondsToSelector:@selector(didProcessArticle:totalArticleCount:)]) {
[self.delegate didProcessArticle:processedArticleCount totalArticleCount:totalArticleCount];
}
}
@end

58
Kiwix/libkiwix/ZimReader.h Executable file
View File

@ -0,0 +1,58 @@
//
// ZimReader.h
// KiwixTest
//
// Created by Chris Li on 8/1/14.
// Copyright (c) 2014 Chris. All rights reserved.
//
// This is the wrapper class that converts all C++ functions in reader.h to Objective-C methods
#import <Foundation/Foundation.h>
@interface ZimReader : NSObject
- (instancetype)initWithZIMFileURL:(NSURL *)url;
@property NSURL *fileURL;
#pragma mark - index
- (BOOL)hasIndex;
#pragma mark - validation
- (BOOL)isCorrupted;
#pragma mark - getData
- (NSDictionary *)dataWithContentURLString:(NSString *)contentURLString;
#pragma mark - getURLs
- (NSString *)pageURLFromTitle:(NSString *)title;//Will return nil if there is no such page with the specific title
- (NSString *)mainPageURL;//Will return nil if the zim file have no main page, not sure if this will ever happen(Does every zim file have a main page?)
- (NSString *)getRandomPageUrl;
#pragma mark - search
- (NSArray *)search:(NSString *)searchTerm;
- (NSArray *)searchSuggestionsSmart:(NSString *)searchTerm;
- (NSArray *)searchUsingIndex:(NSString *)searchTerm;
#pragma mark - get meta data
- (NSString *)getArticleCount;
- (NSString *)getMediaCount;
- (NSString *)getGlobalCount;
- (NSString *)getID;
- (NSString *)getTitle;
- (NSString *)getDesc;
- (NSString *)getLanguage;
- (NSString *)getDate;
- (NSString *)getCreator;
- (NSString *)getPublisher;
- (NSString *)getOriginID;
- (NSString *)getFileSize;
- (NSData *)getFavicon;
- (NSString *)parseURL:(NSString *)urlPath;
- (void)dealloc;
- (NSURL *)fileURL;
@end

345
Kiwix/libkiwix/ZimReader.mm Executable file
View File

@ -0,0 +1,345 @@
//
// ZimReader.m
// KiwixTest
//
// Created by Chris Li on 8/1/14.
// Copyright (c) 2014 Chris. All rights reserved.
//
#include "reader.h"
#include "xapian.h"
#include <numeric>
#import "ZimReader.h"
#define SEARCH_SUGGESTIONS_COUNT 10
@interface ZimReader () {
kiwix::Reader *_reader;
Xapian::Database *_db;
}
@end
@implementation ZimReader
- (instancetype)initWithZIMFileURL:(NSURL *)url {
self = [super init];
if (self) {
try {
_reader = new kiwix::Reader([url fileSystemRepresentation]);
} catch (const std::exception &e) {
return nil;
}
try {
NSString *zimPath = [url absoluteString];
zimPath = [zimPath stringByReplacingOccurrencesOfString:@".zimaa" withString:@".zim"];
NSURL *xapianURl = [[NSURL fileURLWithPath:zimPath] URLByAppendingPathExtension:@"idx"];
_db = new Xapian::Database([xapianURl fileSystemRepresentation]);
} catch (const Xapian::DatabaseOpeningError &e) {}
self.fileURL = url;
}
return self;
}
#pragma mark - search
- (NSArray *)search:(NSString *)searchTerm {
if(_db == nil) {
return [self searchSuggestionsSmart:searchTerm];
} else {
return [self searchUsingIndex:searchTerm];
}
}
- (NSArray *)searchSuggestionsSmart:(NSString *)searchTerm {
string searchTermC = [searchTerm cStringUsingEncoding:NSUTF8StringEncoding];
int count = SEARCH_SUGGESTIONS_COUNT;
NSString *bookID = [self getID];
NSMutableArray *results = [[NSMutableArray alloc] init];
if(_reader->searchSuggestionsSmart(searchTermC, count)) {
string titleC;
while (_reader->getNextSuggestion(titleC)) {
NSString *title = [NSString stringWithUTF8String:titleC.c_str()];
NSNumber *distance = [NSNumber numberWithInteger:[self levenshteinDistance:searchTerm andString:title]];
[results addObject:@{@"title": title,
@"bookID": bookID,
@"distance": distance}];
}
}
return results;
}
- (NSArray *)searchUsingIndex:(NSString *)searchTerm {
try {
NSArray *searchTerms = [searchTerm componentsSeparatedByString:@" "];
NSString *bookID = [self getID];
Xapian::Enquire enquire(*_db);
NSMutableArray *results = [[NSMutableArray alloc] init];
vector<string> queryTerms;
for (NSString *searchTerm in searchTerms) {
string searchTermC = [searchTerm cStringUsingEncoding:NSUTF8StringEncoding];
queryTerms.push_back(searchTermC);
}
Xapian::Query query(Xapian::Query::OP_OR, queryTerms.begin(), queryTerms.end());
enquire.set_query(query);
Xapian::MSet matches = enquire.get_mset(0, SEARCH_SUGGESTIONS_COUNT);
Xapian::MSetIterator i;
for (i = matches.begin(); i != matches.end(); ++i) {
Xapian::Document doc = i.get_document();
NSNumber *percent = [[NSNumber alloc] initWithInt:i.get_percent()];
NSString *path = [NSString stringWithUTF8String:doc.get_data().c_str()];
NSString *title = [NSString stringWithUTF8String:doc.get_value(0).c_str()];
NSString *snippet = [NSString stringWithUTF8String:doc.get_value(1).c_str()];
NSNumber *distance = [NSNumber numberWithInteger:[self levenshteinDistance:searchTerm andString:title]];
NSDictionary *result = @{@"percent": percent,
@"path": path,
@"title": title,
@"snippet": snippet,
@"bookID": bookID,
@"distance": distance};
[results addObject:result];
}
return results;
} catch(const Xapian::Error &error) {
cout << "Xapian Exception: " << error.get_msg() << endl;
return nil;
}
}
- (NSInteger)levenshteinDistance:(NSString *)strA andString:(NSString *)strB {
const string str1 = [strA cStringUsingEncoding:NSUTF8StringEncoding];
const string str2 = [strB cStringUsingEncoding:NSUTF8StringEncoding];
return levenshtein_distance(str1, str2);
}
// Source: https://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Levenshtein_distance#C.2B.2B
int levenshtein_distance(const std::string &s1, const std::string &s2)
{
// To change the type this function manipulates and returns, change
// the return type and the types of the two variables below.
int s1len = (int)s1.size();
int s2len = (int)s2.size();
auto column_start = (decltype(s1len))1;
auto column = new decltype(s1len)[s1len + 1];
std::iota(column + column_start, column + s1len + 1, column_start);
for (auto x = column_start; x <= s2len; x++) {
column[0] = x;
auto last_diagonal = x - column_start;
for (auto y = column_start; y <= s1len; y++) {
auto old_diagonal = column[y];
auto possibilities = {
column[y] + 1,
column[y - 1] + 1,
last_diagonal + (s1[y - 1] == s2[x - 1]? 0 : 1)
};
column[y] = std::min(possibilities);
last_diagonal = old_diagonal;
}
}
auto result = column[s1len];
delete[] column;
return result;
}
#pragma mark - index
- (BOOL)hasIndex {
return _db != nil;
}
#pragma mark - validation
- (BOOL)isCorrupted {
return _reader->isCorrupted();
}
#pragma mark - getContents
- (NSDictionary *)dataWithContentURLString:(NSString *)contentURLString {
NSData *contentData;
NSString *mimeType;
NSNumber *dataLength;
string pageURLStringC = [contentURLString cStringUsingEncoding:NSUTF8StringEncoding];
string content;
string contentType;
unsigned int contentLength = 0;
if (_reader->getContentByUrl(pageURLStringC, content, contentLength, contentType)) {
contentData = [NSData dataWithBytes:content.data() length:contentLength];
mimeType = [NSString stringWithUTF8String:contentType.c_str()];
dataLength = [NSNumber numberWithUnsignedInt:contentLength];
return @{@"data": contentData, @"mime": mimeType, @"length": dataLength};
} else {
return @{};
}
}
#pragma mark - getURLs
- (NSString *)pageURLFromTitle:(NSString *)title {
NSString *pageURL = nil;
string url;
if (_reader->getPageUrlFromTitle([title cStringUsingEncoding:NSUTF8StringEncoding], url)) {
pageURL = [NSString stringWithUTF8String:url.c_str()];
}
if (!pageURL) NSLog(@"zimReader: Cannot find URL of a page titled %@", title);
return pageURL;
}
- (NSString *)mainPageURL {
NSString *mainPageURL = nil;
string mainPageURLC;
mainPageURLC = _reader->getMainPageUrl();
mainPageURL = [NSString stringWithCString:mainPageURLC.c_str() encoding:NSUTF8StringEncoding];
if (!mainPageURL) NSLog(@"zimReader: Cannot find URL of main page");
return mainPageURL;
}
- (NSString *)getRandomPageUrl {
string url = _reader->getRandomPageUrl();
return [NSString stringWithUTF8String:url.c_str()];
}
#pragma mark - getCounts
- (NSString *)getArticleCount {
return [NSString stringWithFormat:@"%u", _reader->getArticleCount()];
}
- (NSString *)getMediaCount {
return [NSString stringWithFormat:@"%u", _reader->getMediaCount()];
}
- (NSString *)getGlobalCount {
return [NSString stringWithFormat:@"%u", _reader->getGlobalCount()];
}
#pragma mark - get File Attributes
- (NSString *)getID {
NSString *id = nil;
string idC;
idC = _reader->getId();
id = [NSString stringWithCString:idC.c_str() encoding:NSUTF8StringEncoding];
return id;
}
- (NSString *)getTitle {
NSString *title = nil;
string titleC;
titleC = _reader->getTitle();
title = [NSString stringWithCString:titleC.c_str() encoding:NSUTF8StringEncoding];
return title;
}
- (NSString *)getDesc {
NSString *description = nil;
string descriptionC;
descriptionC = _reader->getDescription();
description = [NSString stringWithCString:descriptionC.c_str() encoding:NSUTF8StringEncoding];
return description;
}
- (NSString *)getLanguage {
NSString *language = nil;
string languageC;
languageC = _reader->getLanguage();
language = [NSString stringWithCString:languageC.c_str() encoding:NSUTF8StringEncoding];
return language;
}
- (NSString *)getDate {
string dateC;
dateC = _reader->getDate();
NSString *dateString = [NSString stringWithCString:dateC.c_str() encoding:NSUTF8StringEncoding];
return dateString;
}
- (NSString *)getCreator {
NSString *creator = nil;
string creatorC;
creatorC = _reader->getCreator();
creator = [NSString stringWithCString:creatorC.c_str() encoding:NSUTF8StringEncoding];
return creator;
}
- (NSString *)getPublisher {
NSString *publisher = nil;
string publisherC;
publisherC = _reader->getOrigId();
publisher = [NSString stringWithCString:publisherC.c_str() encoding:NSUTF8StringEncoding];
return publisher;
}
- (NSString *)getOriginID {
NSString *originID = nil;
string originIDC;
originIDC = _reader->getOrigId();
originID = [NSString stringWithCString:originIDC.c_str() encoding:NSUTF8StringEncoding];
return originID;
}
- (NSString *)getFileSize {
return [NSString stringWithFormat:@"%u", _reader->getFileSize()];
}
- (NSData *)getFavicon {
NSData *data;
string content;
string mimeType;
if (_reader->getFavicon(content, mimeType)) {
data = [NSData dataWithBytes:content.c_str() length:content.length()];
}
return data;
}
- (NSString *)parseURL:(NSString *)urlPath {
NSString *title;
string cURL = [urlPath cStringUsingEncoding:NSUTF8StringEncoding];
char ns;
string cTitle;
if (_reader->parseUrl(cURL, &ns, cTitle)) {
title = [NSString stringWithUTF8String:cTitle.c_str()];
}
return title;
}
#pragma mark - dealloc
- (void)dealloc {
if (_reader != NULL) {
_reader->~Reader();
}
if (_db != NULL) {
_db->~Database();
}
}
@end

116
Kiwix/libkiwix/build/build-icu.sh Executable file
View File

@ -0,0 +1,116 @@
#!/bin/bash
ROOT=$(pwd)
########################## ZIM ##########################
cd icu
ICU_PATH="$(pwd)"
ICU_SOURCE_PATH=$ICU_PATH/source
ICU_FLAGS="-I$ICU_PATH/source/common/ -I$ICU_PATH/source/tools/tzcode/"
build_iOS()
{
cd $ROOT
ARCH=$1
if [ $ARCH == "i386" ] || [ $ARCH == "x86_64" ];
then
SDKROOT="$(xcodebuild -version -sdk iphonesimulator | grep -E '^Path' | sed 's/Path: //')"
else
SDKROOT="$(xcodebuild -version -sdk iphoneos | grep -E '^Path' | sed 's/Path: //')"
fi
export CC="$(xcrun -sdk iphoneos -find clang)"
export CFLAGS="-fembed-bitcode -isysroot $SDKROOT -I$SDKROOT/usr/include/ -I./include/ -arch $ARCH -miphoneos-version-min=7.0 $ICU_FLAGS"
export CXX="$(xcrun -sdk iphoneos -find clang++)"
export CXXFLAGS="$CFLAGS -stdlib=libc++ -std=c++11"
#export CPP="$CC -E"
#export CPPFLAGS="$CFLAGS"
export LDFLAGS="-arch ${ARCH} -isysroot $SDKROOT"
mkdir -p build-$ARCH && cd build-$ARCH
[ -e Makefile ] && make distclean
if [ $ARCH == "i386" ] || [ $ARCH == "x86_64" ];
then
$ICU_PATH/source/configure --prefix=$ROOT/build-$ARCH --host=i686-apple-darwin11 --enable-static --disable-shared
else
$ICU_PATH/source/configure --prefix=$ROOT/build-$ARCH --host=arm-apple-darwin --enable-static --disable-shared -with-cross-build=$ROOT/build-i386
fi
make
}
build_OSX()
{
ARCH=$1
cd $ICU_SOURCE_PATH
SDKROOT="$(xcodebuild -version -sdk macosx10.11 | grep -E '^Path' | sed 's/Path: //')"
export CC="$(xcrun -sdk macosx10.11 -find clang)"
export CFLAGS="-fembed-bitcode -isysroot $SDKROOT -arch ${ARCH} -mmacosx-version-min=10.10 $ICU_FLAGS"
export CPP="$CC -E"
export CPPFLAGS="$CFLAGS"
export LDFLAGS="-arch ${ARCH} -isysroot $SDKROOT"
./configure --prefix=$(pwd)/build/OSX/$ARCH --host=i686-apple-darwin11 --disable-static --enable-shared
make && make install && make clean
}
distribute() {
cd $ICU_SOURCE_PATH/build
mkdir -p Universal/iOS/lib
mkdir -p Universal/OSX/lib
# cd iOS/armv7/lib
# for file in *.a
# do
# cd $ICU_SOURCE_PATH/build
# lipo -create iOS/armv7/lib/$file iOS/armv7s/lib/$file iOS/arm64/lib/$file iOS/x86_64/lib/$file iOS/i386/lib/$file -output Universal/iOS/lib/$file
# done
cd OSX/i386/lib
for file in *.dylib
do
cd $ICU_SOURCE_PATH/build
lipo -create OSX/x86_64/lib/$file OSX/i386/lib/$file -output Universal/OSX/lib/$file
done
# cd $ICU_SOURCE_PATH/build
# mkdir -p Universal/include
# cp -r iOS/armv7/include Universal
}
# build_iOS i386
# build_iOS x86_64
# build_iOS armv7
# build_iOS armv7s
# build_iOS arm64
# build_OSX i386
# build_OSX x86_64
distribute
# cd $ROOT
# mkdir -p build-universal/lib
# cd build-armv7s/lib
# for file in *.a
# do
# cd $ROOT
# lipo -create build-armv7/lib/$file build-armv7s/lib/$file build-arm64/lib/$file build-i386/lib/$file build-x86_64/lib/$file -output build-universal/lib/$file
# done
# cd $ROOT/build-armv7
# make install
# cp -r $ROOT/build-armv7/include/unicode $ROOT/build-universal/unicode

View File

@ -0,0 +1,99 @@
#!/bin/bash
ROOT=$(pwd)
######################## XAPIAN ########################
XAPIANPATH=$ROOT/xapian-core-1.2.23
cd $XAPIANPATH
# ./autogen.sh
build_iOS()
{
ARCH=$1
if [ $ARCH == "i386" ] || [ $ARCH == "x86_64" ];
then
SDKROOT="$(xcodebuild -version -sdk iphonesimulator | grep -E '^Path' | sed 's/Path: //')"
else
SDKROOT="$(xcodebuild -version -sdk iphoneos | grep -E '^Path' | sed 's/Path: //')"
fi
export CC="$(xcrun -sdk iphoneos -find clang)"
export CFLAGS="-fembed-bitcode -isysroot $SDKROOT -arch ${ARCH} -miphoneos-version-min=9.0 -I$LZMAHEADERPATH"
export CPP="$CC -E"
export CPPFLAGS="$CFLAGS"
export LDFLAGS="-arch ${ARCH} -isysroot $SDKROOT"
if [ $ARCH == "i386" ] || [ $ARCH == "x86_64" ];
then
./configure --prefix=$(pwd)/build/iOS/$ARCH --host=i686-apple-darwin11 --enable-static --disable-shared
else
./configure --prefix=$(pwd)/build/iOS/$ARCH --host=arm-apple-darwin --enable-static --disable-shared
fi
make && make install && make clean
}
build_OSX()
{
ARCH=$1
SDKROOT="$(xcodebuild -version -sdk macosx10.11 | grep -E '^Path' | sed 's/Path: //')"
export MACOSX_DEPLOYMENT_TARGET="10.10"
export CC="$(xcrun -sdk macosx10.11 -find clang)"
export CFLAGS="-fembed-bitcode -isysroot $SDKROOT -arch ${ARCH} -mmacosx-version-min=10.10"
# export CPP="$CC -E"
# export CPPFLAGS="$CFLAGS -stdlib=libc++ -std=c++11"
export CXX="$(xcrun -sdk iphoneos -find clang++)"
export CXXFLAGS="$CFLAGS -stdlib=libc++ -std=gnu++11"
export LDFLAGS="-arch ${ARCH} -isysroot $SDKROOT"
./configure --prefix=$(pwd)/build/OSX/$ARCH --host=i686-apple-darwin11 --disable-static --enable-shared
make && make install && make clean
}
distribute() {
cd $XAPIANPATH/build
mkdir -p Universal/iOS/lib
mkdir -p Universal/OSX/lib
# cd iOS/armv7/lib
# for file in *.a
# do
# cd $XAPIANPATH/build
# lipo -create iOS/armv7/lib/$file iOS/armv7s/lib/$file iOS/arm64/lib/$file iOS/x86_64/lib/$file iOS/i386/lib/$file -output Universal/iOS/lib/$file
# done
cd OSX/i386/lib
for file in *.dylib
do
cd $XAPIANPATH/build
lipo -create OSX/x86_64/lib/$file OSX/i386/lib/$file -output Universal/OSX/lib/$file
done
# cd $XAPIANPATH/build
# mkdir -p Universal/include
# cp -r iOS/armv7/include Universal
}
# build_iOS i386
# build_iOS x86_64
# build_iOS armv7
# build_iOS armv7s
# build_iOS arm64
build_OSX i386
# build_OSX x86_64
distribute

101
Kiwix/libkiwix/build/build-xz.sh Executable file
View File

@ -0,0 +1,101 @@
#!/bin/bash
ROOT=$(pwd)
XZ_FOLDER_NAME='xz-5.2.2'
########################## XZ ##########################
curl -O 'http://tukaani.org/xz/xz-5.2.2.tar.gz'
tar -xvzf xz-5.2.2.tar.gz
XZPATH=$ROOT/$XZ_FOLDER_NAME
cd $XZPATH
./autogen.sh
build_iOS()
{
ARCH=$1
if [ $ARCH == "i386" ] || [ $ARCH == "x86_64" ];
then
SDKROOT="$(xcodebuild -version -sdk iphonesimulator | grep -E '^Path' | sed 's/Path: //')"
else
SDKROOT="$(xcodebuild -version -sdk iphoneos | grep -E '^Path' | sed 's/Path: //')"
fi
export CC="$(xcrun -sdk iphoneos -find clang)"
export CFLAGS="-fembed-bitcode -isysroot $SDKROOT -arch ${ARCH} -miphoneos-version-min=9.0"
export LDFLAGS="-arch ${ARCH} -isysroot $SDKROOT"
if [ $ARCH == "i386" ] || [ $ARCH == "x86_64" ];
then
./configure --prefix=$XZPATH/build/iOS/$ARCH --host=i686-apple-darwin11 --disable-static --enable-shared
else
./configure --prefix=$XZPATH/build/iOS/$ARCH --host=arm-apple-darwin --disable-static --enable-shared
fi
make && make install && make clean
}
build_OSX()
{
ARCH=$1
SDKROOT="$(xcodebuild -version -sdk macosx10.11 | grep -E '^Path' | sed 's/Path: //')"
export CC="$(xcrun -sdk macosx10.11 -find clang)"
export CFLAGS="-fembed-bitcode -isysroot $SDKROOT -arch ${ARCH} -mmacosx-version-min=10.6"
export LDFLAGS="-arch ${ARCH} -isysroot $SDKROOT"
./configure --prefix=$XZPATH/build/OSX/$ARCH --host=i686-apple-darwin11 --disable-static --enable-shared
make && make install && make clean
}
distribute() {
cd $XZPATH/build
# iOS
mkdir -p iOS/Universal/lib
cd iOS/armv7/lib
for file in *.a
do
cd $XZPATH/build
lipo -create iOS/armv7/lib/$file iOS/armv7s/lib/$file iOS/arm64/lib/$file iOS/x86_64/lib/$file iOS/i386/lib/$file -output iOS/Universal/lib/$file
done
cd iOS/armv7/lib
for file in *.dylib
do
cd $XZPATH/build
lipo -create iOS/armv7/lib/$file iOS/armv7s/lib/$file iOS/arm64/lib/$file iOS/x86_64/lib/$file iOS/i386/lib/$file -output iOS/Universal/lib/$file
done
cd $XZPATH/build
cp -r iOS/armv7/include iOS/Universal
# OS X
mkdir -p OSX/Universal/lib
cd OSX/i386/lib
for file in *.dylib
do
cd $XZPATH/build
lipo -create OSX/x86_64/lib/$file OSX/i386/lib/$file -output OSX/Universal/lib/$file
done
cd $XZPATH/build
cp -r OSX/x86_64/include OSX/Universal
}
build_iOS i386
build_iOS x86_64
build_iOS armv7
build_iOS armv7s
build_iOS arm64
build_OSX i386
build_OSX x86_64
distribute

100
Kiwix/libkiwix/build/build-zim.sh Executable file
View File

@ -0,0 +1,100 @@
#!/bin/bash
ROOT=$(pwd)
########################## ZIM ##########################
# git clone https://gerrit.wikimedia.org/r/p/openzim.git
# modify ffstream.cpp, replace stat64 with stat
LZMAHEADERPATH="/Volumes/Data/Developer/build/xz-5.2.2/build/Universal/include"
ZIMREADERPATH=$ROOT/openzim/zimlib
cd $ZIMREADERPATH
# ./autogen.sh
build_iOS()
{
ARCH=$1
if [ $ARCH == "i386" ] || [ $ARCH == "x86_64" ];
then
SDKROOT="$(xcodebuild -version -sdk iphonesimulator | grep -E '^Path' | sed 's/Path: //')"
else
SDKROOT="$(xcodebuild -version -sdk iphoneos | grep -E '^Path' | sed 's/Path: //')"
fi
export CC="$(xcrun -sdk iphoneos -find clang)"
export CFLAGS="-fembed-bitcode -isysroot $SDKROOT -arch ${ARCH} -miphoneos-version-min=9.0 -I$LZMAHEADERPATH"
export CPP="$CC -E"
export CPPFLAGS="$CFLAGS"
export LDFLAGS="-arch ${ARCH} -isysroot $SDKROOT"
if [ $ARCH == "i386" ] || [ $ARCH == "x86_64" ];
then
./configure --prefix=$(pwd)/build/iOS/$ARCH --host=i686-apple-darwin11 --enable-static --disable-shared
else
./configure --prefix=$(pwd)/build/iOS/$ARCH --host=arm-apple-darwin --enable-static --disable-shared
fi
make && make install && make clean
}
build_OSX()
{
ARCH=$1
SDKROOT="$(xcodebuild -version -sdk macosx10.11 | grep -E '^Path' | sed 's/Path: //')"
export MACOSX_DEPLOYMENT_TARGET="10.10"
export CC="$(xcrun -sdk macosx10.11 -find clang)"
export CFLAGS="-fembed-bitcode -isysroot $SDKROOT -arch ${ARCH} -mmacosx-version-min=10.10 -I$LZMAHEADERPATH"
export CXX="$(xcrun -sdk iphoneos -find clang++)"
export CXXFLAGS="$CFLAGS -stdlib=libc++ -std=c++11"
export LDFLAGS="-arch ${ARCH} -isysroot $SDKROOT"
./configure --prefix=$(pwd)/build/OSX/$ARCH --host=i686-apple-darwin11 --disable-static --enable-shared
make && make install && make clean
}
distribute() {
cd $ZIMREADERPATH/build
mkdir -p Universal/iOS/lib
mkdir -p Universal/OSX/lib
# cd iOS/armv7/lib
# for file in *.a
# do
# cd $ZIMREADERPATH/build
# lipo -create iOS/armv7/lib/$file iOS/armv7s/lib/$file iOS/arm64/lib/$file iOS/x86_64/lib/$file iOS/i386/lib/$file -output Universal/iOS/lib/$file
# done
cd OSX/i386/lib
for file in *.dylib
do
cd $ZIMREADERPATH/build
lipo -create OSX/x86_64/lib/$file OSX/i386/lib/$file -output Universal/OSX/lib/$file
done
# cd $ZIMREADERPATH/build
# mkdir -p Universal/include
# cp -r iOS/armv7/include Universal
}
# build_iOS i386
# build_iOS x86_64
# build_iOS armv7
# build_iOS armv7s
# build_iOS arm64
# build_OSX i386
# build_OSX x86_64
distribute

View File

@ -0,0 +1,14 @@
#!/bin/bash
dylibs=*.dylib
for file in $dylibs
do
install_name_tool -id @rpath/$file $file
for dependency in $dylibs
do
install_name_tool -change $dependency @rpath/$dependency $file
done
install_name_tool -change /usr/lib/liblzma.5.dylib @rpath/liblzma.5.dylib $file
otool -L $file
done