mirror of
https://github.com/kiwix/kiwix-apple.git
synced 2025-09-22 02:52:39 -04:00
Add build script and objc++ bridge
This commit is contained in:
parent
553a464157
commit
e70271af68
8
.gitignore
vendored
8
.gitignore
vendored
@ -1,4 +1,6 @@
|
||||
|
||||
*.xcuserstate
|
||||
Kiwix/libkiwix
|
||||
Pods
|
||||
Pods
|
||||
Kiwix/libkiwix/C&C++
|
||||
Kiwix/libkiwix/include
|
||||
Kiwix/libkiwix/shared
|
||||
Kiwix/libkiwix/static
|
24
Kiwix/libkiwix/ZimIndexer.h
Normal file
24
Kiwix/libkiwix/ZimIndexer.h
Normal 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
|
||||
|
45
Kiwix/libkiwix/ZimIndexer.mm
Normal file
45
Kiwix/libkiwix/ZimIndexer.mm
Normal 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
58
Kiwix/libkiwix/ZimReader.h
Executable 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
345
Kiwix/libkiwix/ZimReader.mm
Executable 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
116
Kiwix/libkiwix/build/build-icu.sh
Executable 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
|
99
Kiwix/libkiwix/build/build-xapian.sh
Executable file
99
Kiwix/libkiwix/build/build-xapian.sh
Executable 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
101
Kiwix/libkiwix/build/build-xz.sh
Executable 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
100
Kiwix/libkiwix/build/build-zim.sh
Executable 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
|
||||
|
14
Kiwix/libkiwix/build/installname.sh
Executable file
14
Kiwix/libkiwix/build/installname.sh
Executable 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
|
Loading…
x
Reference in New Issue
Block a user