blob: f71d55e40fcca0dda375ade6b96ed9bddef0ef7a [file] [log] [blame]
var path = require('path'),
M_EXTENSION = /[.]m$/, SOURCE_FILE = 'sourcecode.c.objc',
H_EXTENSION = /[.]h$/, HEADER_FILE = 'sourcecode.c.h',
BUNDLE_EXTENSION = /[.]bundle$/, BUNDLE = '"wrapper.plug-in"',
XIB_EXTENSION = /[.]xib$/, XIB_FILE = 'file.xib',
DYLIB_EXTENSION = /[.]dylib$/, DYLIB = '"compiled.mach-o.dylib"',
FRAMEWORK_EXTENSION = /[.]framework/, FRAMEWORK = 'wrapper.framework',
ARCHIVE_EXTENSION = /[.]a$/, ARCHIVE = 'archive.ar',
DEFAULT_SOURCE_TREE = '"<group>"',
DEFAULT_FILE_ENCODING = 4;
function detectLastType(path) {
if (M_EXTENSION.test(path))
return SOURCE_FILE;
if (H_EXTENSION.test(path))
return HEADER_FILE;
if (BUNDLE_EXTENSION.test(path))
return BUNDLE;
if (XIB_EXTENSION.test(path))
return XIB_FILE;
if (FRAMEWORK_EXTENSION.test(path))
return FRAMEWORK;
if (DYLIB_EXTENSION.test(path))
return DYLIB;
if (ARCHIVE_EXTENSION.test(path))
return ARCHIVE;
// dunno
return 'unknown';
}
function fileEncoding(file) {
if (file.lastType != BUNDLE) {
return DEFAULT_FILE_ENCODING;
}
}
function defaultSourceTree(file) {
if (file.lastType == DYLIB || file.lastType == FRAMEWORK) {
return 'SDKROOT';
} else {
return DEFAULT_SOURCE_TREE;
}
}
function correctPath(file, filepath) {
if (file.lastType == FRAMEWORK) {
return 'System/Library/Frameworks/' + filepath;
} else if (file.lastType == DYLIB) {
return 'usr/lib/' + filepath;
} else {
return filepath;
}
}
function correctGroup(file) {
if (file.lastType == SOURCE_FILE) {
return 'Sources';
} else if (file.lastType == DYLIB || file.lastType == ARCHIVE) {
return 'Frameworks';
} else {
return 'Resources';
}
}
function pbxFile(filepath, opt) {
var opt = opt || {};
this.lastType = opt.lastType || detectLastType(filepath);
this.path = correctPath(this, filepath);
this.basename = path.basename(filepath);
this.group = correctGroup(this);
this.sourceTree = opt.sourceTree || defaultSourceTree(this);
this.fileEncoding = opt.fileEncoding || fileEncoding(this);
if (opt.weak && opt.weak === true)
this.settings = { ATTRIBUTES: ['Weak'] };
if (opt.compilerFlags) {
if (!this.settings)
this.settings = {};
this.settings.COMPILER_FLAGS = opt.compilerFlags;
}
}
module.exports = pbxFile;