QString Win32MakefileGenerator::defaultInstall(const QString &t) { if((t != "target" && t != "dlltarget") || (t == "dlltarget" && (project->first("TEMPLATE") != "lib" || !project->isActiveConfig("shared"))) || project->first("TEMPLATE") == "subdirs") return QString(); const QString root = "$(INSTALL_ROOT)"; QStringList &uninst = project->values(t + ".uninstall"); QString ret; QString targetdir = Option::fixPathToTargetOS(project->first(t + ".path"), false); targetdir = fileFixify(targetdir, FileFixifyAbsolute); if(targetdir.right(1) != Option::dir_sep) targetdir += Option::dir_sep; if(t == "target" && project->first("TEMPLATE") == "lib") { if(project->isActiveConfig("create_prl") && !project->isActiveConfig("no_install_prl") && !project->isEmpty("QMAKE_INTERNAL_PRL_FILE")) { QString dst_prl = Option::fixPathToTargetOS(project->first("QMAKE_INTERNAL_PRL_FILE")); int slsh = dst_prl.lastIndexOf(Option::dir_sep); if(slsh != -1) dst_prl = dst_prl.right(dst_prl.length() - slsh - 1); dst_prl = filePrefixRoot(root, targetdir + dst_prl); ret += "-$(INSTALL_FILE) \"" + project->first("QMAKE_INTERNAL_PRL_FILE") + "\" \"" + dst_prl + "\""; if(!uninst.isEmpty()) uninst.append("\n\t"); uninst.append("-$(DEL_FILE) \"" + dst_prl + "\""); } if(project->isActiveConfig("create_pc")) { QString dst_pc = pkgConfigFileName(false); if (!dst_pc.isEmpty()) { dst_pc = filePrefixRoot(root, targetdir + dst_pc); const QString dst_pc_dir = Option::fixPathToTargetOS(fileInfo(dst_pc).path(), false); if (!dst_pc_dir.isEmpty()) { if (!ret.isEmpty()) ret += "\n\t"; ret += mkdir_p_asstring(dst_pc_dir, true); } if(!ret.isEmpty()) ret += "\n\t"; const QString replace_rule("QMAKE_PKGCONFIG_INSTALL_REPLACE"); if (project->isEmpty(replace_rule) || project->isActiveConfig("no_sed_meta_install") || project->isEmpty("QMAKE_STREAM_EDITOR")) { ret += "-$(INSTALL_FILE) \"" + pkgConfigFileName(true) + "\" \"" + dst_pc + "\""; } else { ret += "-$(SED)"; QStringList replace_rules = project->values(replace_rule); for (int r = 0; r < replace_rules.size(); ++r) { const QString match = project->first(replace_rules.at(r) + ".match"), replace = project->first(replace_rules.at(r) + ".replace"); if (!match.isEmpty() /*&& match != replace*/) ret += " -e \"s," + match + "," + replace + ",g\""; } ret += " \"" + pkgConfigFileName(true) + "\" >\"" + dst_pc + "\""; } if(!uninst.isEmpty()) uninst.append("\n\t"); uninst.append("-$(DEL_FILE) \"" + dst_pc + "\""); } } if(project->isActiveConfig("shared") && !project->isActiveConfig("plugin")) { QString lib_target = getLibTarget(); lib_target.remove('"'); QString src_targ = (project->isEmpty("DESTDIR") ? QString("$(DESTDIR)") : project->first("DESTDIR")) + lib_target; QString dst_targ = filePrefixRoot(root, fileFixify(targetdir + lib_target, FileFixifyAbsolute)); if(!ret.isEmpty()) ret += "\n\t"; ret += QString("-$(INSTALL_FILE)") + " \"" + src_targ + "\" \"" + dst_targ + "\""; if(!uninst.isEmpty()) uninst.append("\n\t"); uninst.append("-$(DEL_FILE) \"" + dst_targ + "\""); } } if(t == "dlltarget" || project->values(t + ".CONFIG").indexOf("no_dll") == -1) { QString src_targ = "$(DESTDIR_TARGET)"; QString dst_targ = filePrefixRoot(root, fileFixify(targetdir + "$(TARGET)", FileFixifyAbsolute)); if(!ret.isEmpty()) ret += "\n\t"; ret += QString("-$(INSTALL_FILE)") + " \"" + src_targ + "\" \"" + dst_targ + "\""; if(!uninst.isEmpty()) uninst.append("\n\t"); uninst.append("-$(DEL_FILE) \"" + dst_targ + "\""); } return ret; }
QString UnixMakefileGenerator::defaultInstall(const QString &t) { if(t != "target" || project->first("TEMPLATE") == "subdirs") return QString(); bool bundle = false; const QString root = "$(INSTALL_ROOT)"; QStringList &uninst = project->values(t + ".uninstall"); QString ret, destdir=project->first("DESTDIR"); QString targetdir = Option::fixPathToTargetOS(project->first("target.path"), false); if(!destdir.isEmpty() && destdir.right(1) != Option::dir_sep) destdir += Option::dir_sep; targetdir = fileFixify(targetdir, FileFixifyAbsolute); if(targetdir.right(1) != Option::dir_sep) targetdir += Option::dir_sep; QStringList links; QString target="$(TARGET)"; QStringList &targets = project->values(t + ".targets"); if(!project->isEmpty("QMAKE_BUNDLE")) { target = project->first("QMAKE_BUNDLE"); bundle = true; } else if(project->first("TEMPLATE") == "app") { target = "$(QMAKE_TARGET)"; if(!project->isEmpty("QMAKE_CYGWIN_EXE") && !target.endsWith(".exe")) target += ".exe"; } else if(project->first("TEMPLATE") == "lib") { if(!project->isActiveConfig("staticlib") && !project->isActiveConfig("plugin")) { if(project->isEmpty("QMAKE_HPUX_SHLIB") && project->isEmpty("QMAKE_CYGWIN_SHLIB")) { links << "$(TARGET0)" << "$(TARGET1)" << "$(TARGET2)"; } else { links << "$(TARGET0)"; } } } for(int i = 0; i < targets.size(); ++i) { QString src = targets.at(i), dst = filePrefixRoot(root, targetdir + src.section('/', -1)); if(!ret.isEmpty()) ret += "\n\t"; ret += "-$(INSTALL_FILE) \"" + src + "\" \"" + dst + "\""; if(!uninst.isEmpty()) uninst.append("\n\t"); uninst.append("-$(DEL_FILE) \"" + dst + "\""); } if(!bundle && project->isActiveConfig("compile_libtool")) { QString src_targ = target; if(src_targ == "$(TARGET)") src_targ = "$(TARGETL)"; QString dst_dir = fileFixify(targetdir, FileFixifyAbsolute); if(QDir::isRelativePath(dst_dir)) dst_dir = Option::fixPathToTargetOS(Option::output_dir + Option::dir_sep + dst_dir); ret = "-$(LIBTOOL) --mode=install cp \"" + src_targ + "\" \"" + filePrefixRoot(root, dst_dir) + "\""; uninst.append("-$(LIBTOOL) --mode=uninstall \"" + src_targ + "\""); } else { QString src_targ = target; if(!destdir.isEmpty()) src_targ = Option::fixPathToTargetOS(destdir + target, false); QString dst_targ = filePrefixRoot(root, fileFixify(targetdir + target, FileFixifyAbsolute)); if(bundle) { if(!ret.isEmpty()) ret += "\n\t"; ret += "$(DEL_FILE) -r \"" + dst_targ + "\"\n\t"; } if(!ret.isEmpty()) ret += "\n\t"; QString copy_cmd("-"); if (bundle) copy_cmd += "$(INSTALL_DIR)"; else if (project->first("TEMPLATE") == "lib" && project->isActiveConfig("staticlib")) copy_cmd += "$(INSTALL_FILE)"; else copy_cmd += "$(INSTALL_PROGRAM)"; copy_cmd += " \"" + src_targ + "\" \"" + dst_targ + "\""; if(project->first("TEMPLATE") == "lib" && !project->isActiveConfig("staticlib") && project->values(t + ".CONFIG").indexOf("fix_rpath") != -1) { if(!project->isEmpty("QMAKE_FIX_RPATH")) { ret += copy_cmd; ret += "\n\t-" + var("QMAKE_FIX_RPATH") + " \"" + dst_targ + "\" \"" + dst_targ + "\""; } else if(!project->isEmpty("QMAKE_LFLAGS_RPATH")) { ret += "-$(LINK) $(LFLAGS) " + var("QMAKE_LFLAGS_RPATH") + targetdir + " -o \"" + dst_targ + "\" $(OBJECTS) $(LIBS) $(OBJCOMP)"; } else { ret += copy_cmd; } } else { ret += copy_cmd; } if(project->first("TEMPLATE") == "lib" && project->isActiveConfig("staticlib")) { if(!project->isEmpty("QMAKE_RANLIB")) ret += QString("\n\t$(RANLIB) \"") + dst_targ + "\""; } else if(!project->isActiveConfig("debug") && !project->isActiveConfig("nostrip") && !project->isEmpty("QMAKE_STRIP")) { ret += "\n\t-$(STRIP)"; if(project->first("TEMPLATE") == "lib" && !project->isEmpty("QMAKE_STRIPFLAGS_LIB")) ret += " " + var("QMAKE_STRIPFLAGS_LIB"); else if(project->first("TEMPLATE") == "app" && !project->isEmpty("QMAKE_STRIPFLAGS_APP")) ret += " " + var("QMAKE_STRIPFLAGS_APP"); if(bundle) ret = " \"" + dst_targ + "/Contents/MacOS/$(QMAKE_TARGET)\""; else ret += " \"" + dst_targ + "\""; } if(!uninst.isEmpty()) uninst.append("\n\t"); if(bundle) uninst.append("-$(DEL_FILE) -r \"" + dst_targ + "\""); else uninst.append("-$(DEL_FILE) \"" + dst_targ + "\""); if(!links.isEmpty()) { for(int i = 0; i < links.size(); ++i) { if(Option::target_mode == Option::TARG_UNIX_MODE || Option::target_mode == Option::TARG_MACX_MODE) { QString link = Option::fixPathToTargetOS(destdir + links[i], false); int lslash = link.lastIndexOf(Option::dir_sep); if(lslash != -1) link = link.right(link.length() - (lslash + 1)); QString dst_link = filePrefixRoot(root, fileFixify(targetdir + link, FileFixifyAbsolute)); if(project->isEmpty("QMAKE_CYGWIN_SHLIB")) ret += "\n\t-$(SYMLINK) \"$(TARGET)\" \"" + dst_link + "\""; else ret += "\n\t-$(INSTALL_FILE) \"" + destdir + "$(TARGET0)\" \"" + dst_link + "\""; if(!uninst.isEmpty()) uninst.append("\n\t"); uninst.append("-$(DEL_FILE) \"" + dst_link + "\""); } } } } if(project->first("TEMPLATE") == "lib") { QStringList types; types << "prl" << "libtool" << "pkgconfig"; for(int i = 0; i < types.size(); ++i) { const QString type = types.at(i); QString meta; if(type == "prl" && project->isActiveConfig("create_prl") && !project->isActiveConfig("no_install_prl") && !project->isEmpty("QMAKE_INTERNAL_PRL_FILE")) meta = prlFileName(false); if(type == "libtool" && project->isActiveConfig("create_libtool") && !project->isActiveConfig("compile_libtool")) meta = libtoolFileName(false); if(type == "pkgconfig" && project->isActiveConfig("create_pc")) meta = pkgConfigFileName(false); if(!meta.isEmpty()) { QString src_meta = meta; if(!destdir.isEmpty()) src_meta = Option::fixPathToTargetOS(destdir + meta, false); QString dst_meta = filePrefixRoot(root, fileFixify(targetdir + meta, FileFixifyAbsolute)); if(!uninst.isEmpty()) uninst.append("\n\t"); uninst.append("-$(DEL_FILE) \"" + dst_meta + "\""); const QString replace_rule("QMAKE_" + type.toUpper() + "_INSTALL_REPLACE"); const QString dst_meta_dir = fileInfo(dst_meta).path(); if(!dst_meta_dir.isEmpty()) { if(!ret.isEmpty()) ret += "\n\t"; ret += mkdir_p_asstring(dst_meta_dir, true); } QString install_meta = "$(INSTALL_FILE) \"" + src_meta + "\" \"" + dst_meta + "\""; if(project->isEmpty(replace_rule) || project->isActiveConfig("no_sed_meta_install")) { if(!ret.isEmpty()) ret += "\n\t"; ret += "-" + install_meta; } else { if(!ret.isEmpty()) ret += "\n\t"; ret += "-$(SED)"; QStringList replace_rules = project->values(replace_rule); for(int r = 0; r < replace_rules.size(); ++r) { const QString match = project->first(replace_rules.at(r) + ".match"), replace = project->first(replace_rules.at(r) + ".replace"); if(!match.isEmpty() /*&& match != replace*/) ret += " -e \"s," + match + "," + replace + ",g\""; } ret += " \"" + src_meta + "\" >\"" + dst_meta + "\""; //ret += " || " + install_meta; } } } } return ret; }