Skip to content

Commit

Permalink
Merge pull request #119 from janvennemann/TIMOB-24242-2_0_X
Browse files Browse the repository at this point in the history
[TIMOB-24242] Pass extra header search paths to metabase parser (2_0_X)
  • Loading branch information
hansemannn committed Mar 2, 2017
2 parents 56e36eb + 8d6cfb6 commit de5bb98
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 5 deletions.
37 changes: 36 additions & 1 deletion iphone/plugin/hyperloop.js
Original file line number Diff line number Diff line change
Expand Up @@ -520,6 +520,39 @@ HyperloopiOSBuilder.prototype.generateSourceFiles = function generateSourceFiles
}.bind(this), callback);
}

var extraHeaderSearchPaths = [];
var extraFrameworkSearchPaths = [];
if (this.hasCocoaPods) {
var addSearchPathsFromCocoaPods = function (target, source) {
if (!source) {
return;
}

var cocoaPodsRoot = this.cocoaPodsBuildSettings.PODS_ROOT;
var paths = source.split(" ");
paths.forEach(function(path) {
if (path === '$(inherited)') {
return;
}

var searchPath = path.replace('${PODS_ROOT}', cocoaPodsRoot);
searchPath = searchPath.replace(/"/g, '');
target.push(searchPath);
});
}.bind(this);

addSearchPathsFromCocoaPods(extraHeaderSearchPaths, this.cocoaPodsBuildSettings.HEADER_SEARCH_PATHS);
addSearchPathsFromCocoaPods(extraFrameworkSearchPaths, this.cocoaPodsBuildSettings.FRAMEWORK_SEARCH_PATHS);
}
if (this.hyperloopConfig.ios.thirdparty) {
Object.keys(this.hyperloopConfig.ios.thirdparty).forEach(function(frameworkName) {
var thirdPartyFrameworkConfig = this.hyperloopConfig.ios.thirdparty[frameworkName];
var searchPath = path.resolve(this.builder.projectDir, thirdPartyFrameworkConfig.header);
extraHeaderSearchPaths.push(searchPath);
extraFrameworkSearchPaths.push(searchPath);
}.bind(this));
}

// generate the metabase from our includes
hm.metabase.generateMetabase(
this.hyperloopBuildDir,
Expand All @@ -529,7 +562,9 @@ HyperloopiOSBuilder.prototype.generateSourceFiles = function generateSourceFiles
Object.keys(this.includes),
false, // don't exclude system libraries
generateMetabaseCallback.bind(this),
this.builder.forceCleanBuild || this.forceMetabase
this.builder.forceCleanBuild || this.forceMetabase,
extraHeaderSearchPaths,
extraFrameworkSearchPaths
);
};

Expand Down
10 changes: 8 additions & 2 deletions metabase/ios/lib/metabase.js
Original file line number Diff line number Diff line change
Expand Up @@ -172,8 +172,10 @@ function generateSystemFrameworks (sdkPath, iosMinVersion, callback) {
* @param {Boolean} excludeSystem if true, will exclude any system libraries in the generated output
* @param {Function} callback function to receive the result which will be (err, json, json_file, header_file)
* @param {Boolean} force if true, will not use cache
* @param {Array} extraHeaders Array of extra header search paths passed to the metabase parser
* @param {Array} extraFrameworks Array of extra framework search paths passed to the metabase parser
*/
function generateMetabase (buildDir, sdk, sdkPath, iosMinVersion, includes, excludeSystem, callback, force, extraHeaders) {
function generateMetabase (buildDir, sdk, sdkPath, iosMinVersion, includes, excludeSystem, callback, force, extraHeaders, extraFrameworks) {
var cacheToken = crypto.createHash('md5').update(sdkPath + iosMinVersion + excludeSystem + JSON.stringify(includes)).digest('hex');
var header = path.join(buildDir, 'metabase-' + iosMinVersion + '-' + sdk + '-' + cacheToken + '.h');
var outfile = path.join(buildDir, 'metabase-' + iosMinVersion + '-' + sdk + '-' + cacheToken + '.json');
Expand Down Expand Up @@ -226,10 +228,14 @@ function generateMetabase (buildDir, sdk, sdkPath, iosMinVersion, includes, excl
if (excludeSystem) {
args.push('-x');
}
if (extraHeaders) {
if (extraHeaders && extraHeaders.length > 0) {
args.push('-hsp');
args.push('"' + extraHeaders.join(',') + '"');
}
if (extraFrameworks && extraFrameworks.length > 0) {
args.push('-fsp');
args.push('"' + extraFrameworks.join(',') + '"');
}
util.logger.trace('running', binary, 'with', args.join(' '));
var ts = Date.now();
var child = spawn(binary, args);
Expand Down
18 changes: 16 additions & 2 deletions metabase/ios/src/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -100,8 +100,9 @@ int main(int argc, char* argv[]) {
auto iphone_sim_root = arguments["-sim-sdk-path"];
auto prettify = arguments.count("-pretty") > 0;
auto excludeSys = arguments.count("-x") > 0;
auto bitArch = arguments.count("-bit") ? arguments["-bit"] : "64";
auto bitArch = arguments.count("-bit") ? arguments["-bit"] : "64";
auto includes = hyperloop::tokenize(arguments["-hsp"], ",");
auto frameworks = hyperloop::tokenize(arguments["-fsp"], ",");

std::string min_ios_version_command("-mios-simulator-version-min=" + min_ios_version);

Expand All @@ -120,7 +121,7 @@ int main(int argc, char* argv[]) {
args.push_back("-fmessage-length=0");
args.push_back("-fdiagnostics-show-note-include-stack");
args.push_back("-fmacro-backtrace-limit=0");
args.push_back(std::string("-m" + bitArch).c_str());
args.push_back(std::string("-m" + bitArch).c_str());

if (includes.size() > 0) {
for (auto i = 0; i < includes.size(); i++) {
Expand All @@ -135,6 +136,19 @@ int main(int argc, char* argv[]) {
args.push_back(strdup(each.c_str()));
}
}
if (frameworks.size() > 0) {
for (auto i = 0; i < frameworks.size(); i++) {
auto each = frameworks[i];
if (each.at(0) == (int)'"') {
each = each.substr(1);
}
if (each.at(each.length() - 1) == (int)'"') {
each = each.substr(0, each.length() - 1);
}
args.push_back("-F");
args.push_back(strdup(each.c_str()));
}
}

args.push_back("-v");
args.push_back("-isysroot");
Expand Down

0 comments on commit de5bb98

Please sign in to comment.