qmake/generators/unix/unixmake2.cpp
changeset 30 5dc02b23752f
parent 18 2f34d5167611
equal deleted inserted replaced
29:b72c6db6890b 30:5dc02b23752f
    79 UnixMakefileGenerator::writeMakefile(QTextStream &t)
    79 UnixMakefileGenerator::writeMakefile(QTextStream &t)
    80 {
    80 {
    81 
    81 
    82     writeHeader(t);
    82     writeHeader(t);
    83     if(!project->values("QMAKE_FAILED_REQUIREMENTS").isEmpty()) {
    83     if(!project->values("QMAKE_FAILED_REQUIREMENTS").isEmpty()) {
    84         t << "QMAKE    = "        << (project->isEmpty("QMAKE_QMAKE") ? QString("qmake") : var("QMAKE_QMAKE")) << endl;
    84         t << "QMAKE    = " << var("QMAKE_QMAKE") << endl;
    85         QStringList &qut = project->values("QMAKE_EXTRA_TARGETS");
    85         QStringList &qut = project->values("QMAKE_EXTRA_TARGETS");
    86         for(QStringList::ConstIterator it = qut.begin(); it != qut.end(); ++it)
    86         for(QStringList::ConstIterator it = qut.begin(); it != qut.end(); ++it)
    87             t << *it << " ";
    87             t << *it << " ";
    88         t << "first all clean install distclean uninstall qmake_all:" << "\n\t"
    88         t << "first all clean install distclean uninstall qmake_all:" << "\n\t"
    89           << "@echo \"Some of the required modules ("
    89           << "@echo \"Some of the required modules ("
   146     t << endl;
   146     t << endl;
   147 
   147 
   148     if(!project->isActiveConfig("staticlib")) {
   148     if(!project->isActiveConfig("staticlib")) {
   149         t << "LINK          = " << var("QMAKE_LINK") << endl;
   149         t << "LINK          = " << var("QMAKE_LINK") << endl;
   150         t << "LFLAGS        = " << var("QMAKE_LFLAGS") << endl;
   150         t << "LFLAGS        = " << var("QMAKE_LFLAGS") << endl;
   151         t << "LIBS          = " << "$(SUBLIBS) " << var("QMAKE_FRAMEWORKDIR_FLAGS") << " "
   151         t << "LIBS          = " << "$(SUBLIBS) " << var("QMAKE_FRAMEWORKPATH_FLAGS") << " "
   152           << var("QMAKE_LIBDIR_FLAGS") << " " << var("QMAKE_LIBS") << " " << var("QMAKE_LIBS_PRIVATE") << endl;
   152           << var("QMAKE_LIBDIR_FLAGS") << " " << var("QMAKE_LIBS") << " " << var("QMAKE_LIBS_PRIVATE") << endl;
   153     }
   153     }
   154 
   154 
   155     t << "AR            = " << var("QMAKE_AR") << endl;
   155     t << "AR            = " << var("QMAKE_AR") << endl;
   156     t << "RANLIB        = " << var("QMAKE_RANLIB") << endl;
   156     t << "RANLIB        = " << var("QMAKE_RANLIB") << endl;
   157     t << "QMAKE         = " << (project->isEmpty("QMAKE_QMAKE") ? QString("qmake") : var("QMAKE_QMAKE")) << endl;
   157     t << "QMAKE         = " << var("QMAKE_QMAKE") << endl;
   158     t << "TAR           = " << var("QMAKE_TAR") << endl;
   158     t << "TAR           = " << var("QMAKE_TAR") << endl;
   159     t << "COMPRESS      = " << var("QMAKE_GZIP") << endl;
   159     t << "COMPRESS      = " << var("QMAKE_GZIP") << endl;
   160     if(project->isActiveConfig("compile_libtool"))
   160     if(project->isActiveConfig("compile_libtool"))
   161         t << "LIBTOOL       = " << var("QMAKE_LIBTOOL") << endl;
   161         t << "LIBTOOL       = " << var("QMAKE_LIBTOOL") << endl;
   162     t << "COPY          = " << var("QMAKE_COPY") << endl;
   162     t << "COPY          = " << var("QMAKE_COPY") << endl;
   175     t << "CHK_DIR_EXISTS= " << var("QMAKE_CHK_DIR_EXISTS") << endl;
   175     t << "CHK_DIR_EXISTS= " << var("QMAKE_CHK_DIR_EXISTS") << endl;
   176     t << "MKDIR         = " << var("QMAKE_MKDIR") << endl;
   176     t << "MKDIR         = " << var("QMAKE_MKDIR") << endl;
   177     if(!project->isEmpty("QMAKE_MACOSX_DEPLOYMENT_TARGET"))
   177     if(!project->isEmpty("QMAKE_MACOSX_DEPLOYMENT_TARGET"))
   178         t << "export MACOSX_DEPLOYMENT_TARGET = " //exported to children processes
   178         t << "export MACOSX_DEPLOYMENT_TARGET = " //exported to children processes
   179           << project->first("QMAKE_MACOSX_DEPLOYMENT_TARGET") << endl;
   179           << project->first("QMAKE_MACOSX_DEPLOYMENT_TARGET") << endl;
       
   180 
       
   181     if (!project->isEmpty("QMAKE_SYMBIAN_SHLIB")) {
       
   182         t << "vpath %.dso " << project->values("QMAKE_LIBDIR").join(":") << endl;
       
   183         t << "vpath %.lib " << project->values("QMAKE_LIBDIR").join(":") << endl;
       
   184     }
       
   185 
   180     t << endl;
   186     t << endl;
   181 
   187 
   182     t << "####### Output directory" << endl << endl;
   188     t << "####### Output directory" << endl << endl;
   183     if (! project->values("OBJECTS_DIR").isEmpty())
   189     if (! project->values("OBJECTS_DIR").isEmpty())
   184         t << "OBJECTS_DIR   = " << var("OBJECTS_DIR") << endl;
   190         t << "OBJECTS_DIR   = " << var("OBJECTS_DIR") << endl;
   231     } else if(!project->isActiveConfig("staticlib") && project->values("QMAKE_APP_FLAG").isEmpty()) {
   237     } else if(!project->isActiveConfig("staticlib") && project->values("QMAKE_APP_FLAG").isEmpty()) {
   232         t << "TARGETA       = " << escapeFilePath(var("TARGETA")) << endl;
   238         t << "TARGETA       = " << escapeFilePath(var("TARGETA")) << endl;
   233         if(!project->isEmpty("QMAKE_BUNDLE")) {
   239         if(!project->isEmpty("QMAKE_BUNDLE")) {
   234             t << "TARGETD       = " << escapeFilePath(var("TARGET_x.y")) << endl;
   240             t << "TARGETD       = " << escapeFilePath(var("TARGET_x.y")) << endl;
   235             t << "TARGET0       = " << escapeFilePath(var("TARGET_")) << endl;
   241             t << "TARGET0       = " << escapeFilePath(var("TARGET_")) << endl;
       
   242         } else if(!project->isEmpty("QMAKE_SYMBIAN_SHLIB")) {
       
   243             t << "TARGETD       = " << escapeFilePath(var("TARGET")) << endl;
   236         } else if(project->isEmpty("QMAKE_HPUX_SHLIB")) {
   244         } else if(project->isEmpty("QMAKE_HPUX_SHLIB")) {
   237             t << "TARGETD       = " << escapeFilePath(var("TARGET_x.y.z")) << endl;
   245             t << "TARGETD       = " << escapeFilePath(var("TARGET_x.y.z")) << endl;
   238             t << "TARGET0       = " << escapeFilePath(var("TARGET_")) << endl;
   246             t << "TARGET0       = " << escapeFilePath(var("TARGET_")) << endl;
   239             t << "TARGET1       = " << escapeFilePath(var("TARGET_x")) << endl;
   247             t << "TARGET1       = " << escapeFilePath(var("TARGET_x")) << endl;
   240             t << "TARGET2       = " << escapeFilePath(var("TARGET_x.y")) << endl;
   248             t << "TARGET2       = " << escapeFilePath(var("TARGET_x.y")) << endl;
   330         if(!project->isEmpty("SUBLIBS_DIR"))
   338         if(!project->isEmpty("SUBLIBS_DIR"))
   331             libdir = project->first("SUBLIBS_DIR");
   339             libdir = project->first("SUBLIBS_DIR");
   332         t << "SUBLIBS       = ";
   340         t << "SUBLIBS       = ";
   333         QStringList &l = project->values("SUBLIBS");
   341         QStringList &l = project->values("SUBLIBS");
   334         for(QStringList::Iterator it = l.begin(); it != l.end(); ++it)
   342         for(QStringList::Iterator it = l.begin(); it != l.end(); ++it)
   335             t << libdir << "lib" << (*it) << ".a ";
   343             t << libdir << project->first("QMAKE_PREFIX_STATICLIB") << (*it) << "."
       
   344               << project->first("QMAKE_EXTENSION_STATICLIB") << " ";
   336         t << endl << endl;
   345         t << endl << endl;
   337     }
   346     }
   338     if(project->isActiveConfig("depend_prl") && !project->isEmpty("QMAKE_PRL_INTERNAL_FILES")) {
   347     if(project->isActiveConfig("depend_prl") && !project->isEmpty("QMAKE_PRL_INTERNAL_FILES")) {
   339         QStringList &l = project->values("QMAKE_PRL_INTERNAL_FILES");
   348         QStringList &l = project->values("QMAKE_PRL_INTERNAL_FILES");
   340         QStringList::Iterator it;
   349         QStringList::Iterator it;
   540                          project->first("QMAKE_FRAMEWORK_VERSION") +
   549                          project->first("QMAKE_FRAMEWORK_VERSION") +
   541                          "/$(TARGET) $(DESTDIR)$(TARGET0)") << "\n\t"
   550                          "/$(TARGET) $(DESTDIR)$(TARGET0)") << "\n\t"
   542               << "-$(DEL_FILE) " << destdir << "Versions/Current" << "\n\t"
   551               << "-$(DEL_FILE) " << destdir << "Versions/Current" << "\n\t"
   543               << varGlue("QMAKE_LN_SHLIB","-"," ", " " + project->first("QMAKE_FRAMEWORK_VERSION") +
   552               << varGlue("QMAKE_LN_SHLIB","-"," ", " " + project->first("QMAKE_FRAMEWORK_VERSION") +
   544                          " " + destdir + "Versions/Current") << "\n\t";
   553                          " " + destdir + "Versions/Current") << "\n\t";
       
   554             if(!project->isEmpty("QMAKE_POST_LINK"))
       
   555                 t << "\n\t" << var("QMAKE_POST_LINK");
       
   556             t << endl << endl;
       
   557         } else if(!project->isEmpty("QMAKE_SYMBIAN_SHLIB")) {
       
   558             t << "\n\t"
       
   559               << "-$(DEL_FILE) $(TARGET)" << "\n\t"
       
   560               << var("QMAKE_LINK_SHLIB_CMD");
       
   561             if(!destdir.isEmpty())
       
   562                 t << "\n\t"
       
   563                   << "-$(DEL_FILE) " << destdir << "$(TARGET)\n\t"
       
   564                   << "-$(MOVE) $(TARGET) " << destdir;
   545             if(!project->isEmpty("QMAKE_POST_LINK"))
   565             if(!project->isEmpty("QMAKE_POST_LINK"))
   546                 t << "\n\t" << var("QMAKE_POST_LINK");
   566                 t << "\n\t" << var("QMAKE_POST_LINK");
   547             t << endl << endl;
   567             t << endl << endl;
   548         } else if(project->isEmpty("QMAKE_HPUX_SHLIB")) {
   568         } else if(project->isEmpty("QMAKE_HPUX_SHLIB")) {
   549             t << "\n\t"
   569             t << "\n\t"
   858         QString libdir = "tmp/";
   878         QString libdir = "tmp/";
   859         if(!project->isEmpty("SUBLIBS_DIR"))
   879         if(!project->isEmpty("SUBLIBS_DIR"))
   860             libdir = project->first("SUBLIBS_DIR");
   880             libdir = project->first("SUBLIBS_DIR");
   861         QStringList &l = project->values("SUBLIBS");
   881         QStringList &l = project->values("SUBLIBS");
   862         for(it = l.begin(); it != l.end(); ++it)
   882         for(it = l.begin(); it != l.end(); ++it)
   863             t << libdir << "lib" << (*it) << ".a" << ":\n\t"
   883             t << libdir << project->first("QMAKE_PREFIX_STATICLIB") << (*it) << "."
       
   884               << project->first("QMAKE_EXTENSION_STATICLIB") << ":\n\t"
   864               << var(QString("MAKELIB") + (*it)) << endl << endl;
   885               << var(QString("MAKELIB") + (*it)) << endl << endl;
   865     }
   886     }
   866 
   887 
   867     QString destdir = project->first("DESTDIR");
   888     QString destdir = project->first("DESTDIR");
   868     if(!destdir.isEmpty() && destdir.right(1) != Option::dir_sep)
   889     if(!destdir.isEmpty() && destdir.right(1) != Option::dir_sep)
   873         t << "\t-$(DEL_FILE) -r " << bundlePath << endl;
   894         t << "\t-$(DEL_FILE) -r " << bundlePath << endl;
   874     } else if(project->isActiveConfig("compile_libtool")) {
   895     } else if(project->isActiveConfig("compile_libtool")) {
   875         t << "\t-$(LIBTOOL) --mode=clean $(DEL_FILE) " << "$(TARGET)" << endl;
   896         t << "\t-$(LIBTOOL) --mode=clean $(DEL_FILE) " << "$(TARGET)" << endl;
   876     } else if(!project->isActiveConfig("staticlib") && project->values("QMAKE_APP_FLAG").isEmpty() &&
   897     } else if(!project->isActiveConfig("staticlib") && project->values("QMAKE_APP_FLAG").isEmpty() &&
   877        !project->isActiveConfig("plugin")) {
   898        !project->isActiveConfig("plugin")) {
   878         t << "\t-$(DEL_FILE) " << destdir << "$(TARGET)" << " " << endl
   899         t << "\t-$(DEL_FILE) " << destdir << "$(TARGET)" << " " << endl;
   879           << "\t-$(DEL_FILE) " << destdir << "$(TARGET0) " << destdir << "$(TARGET1) "
   900         if (project->values("QMAKE_SYMBIAN_SHLIB").isEmpty())
   880           << destdir << "$(TARGET2) $(TARGETA)" << endl;
   901             t << "\t-$(DEL_FILE) " << destdir << "$(TARGET0) " << destdir << "$(TARGET1) "
       
   902               << destdir << "$(TARGET2) $(TARGETA)" << endl;
   881     } else {
   903     } else {
   882         t << "\t-$(DEL_FILE) " << "$(TARGET)" << " " << endl;
   904         t << "\t-$(DEL_FILE) " << "$(TARGET)" << " " << endl;
   883     }
   905     }
   884     t << varGlue("QMAKE_DISTCLEAN","\t-$(DEL_FILE) "," ","\n");
   906     t << varGlue("QMAKE_DISTCLEAN","\t-$(DEL_FILE) "," ","\n");
   885     {
   907     {
   990         if(!project->isEmpty("TARGET"))
  1012         if(!project->isEmpty("TARGET"))
   991             project->values("TARGET").first().prepend(project->first("DESTDIR"));
  1013             project->values("TARGET").first().prepend(project->first("DESTDIR"));
   992        if (!project->values("QMAKE_CYGWIN_EXE").isEmpty())
  1014        if (!project->values("QMAKE_CYGWIN_EXE").isEmpty())
   993             project->values("TARGET_EXT").append(".exe");
  1015             project->values("TARGET_EXT").append(".exe");
   994     } else if (project->isActiveConfig("staticlib")) {
  1016     } else if (project->isActiveConfig("staticlib")) {
   995         project->values("TARGET").first().prepend("lib");
  1017         project->values("TARGET").first().prepend(project->first("QMAKE_PREFIX_STATICLIB"));
   996         project->values("TARGET").first() += ".a";
  1018         project->values("TARGET").first() += "." + project->first("QMAKE_EXTENSION_STATICLIB");
   997         if(project->values("QMAKE_AR_CMD").isEmpty())
  1019         if(project->values("QMAKE_AR_CMD").isEmpty())
   998             project->values("QMAKE_AR_CMD").append("$(AR) $(TARGET) $(OBJECTS)");
  1020             project->values("QMAKE_AR_CMD").append("$(AR) $(TARGET) $(OBJECTS)");
   999     } else {
  1021     } else {
  1000         project->values("TARGETA").append(project->first("DESTDIR") + "lib" + project->first("TARGET") + ".a");
  1022         project->values("TARGETA").append(project->first("DESTDIR") + project->first("QMAKE_PREFIX_STATICLIB")
       
  1023                 + project->first("TARGET") + "." + project->first("QMAKE_EXTENSION_STATICLIB"));
  1001         if(project->isActiveConfig("compile_libtool"))
  1024         if(project->isActiveConfig("compile_libtool"))
  1002             project->values("TARGET_la") = QStringList(project->first("DESTDIR") + "lib" + project->first("TARGET") + Option::libtool_ext);
  1025             project->values("TARGET_la") = QStringList(project->first("DESTDIR") + "lib" + project->first("TARGET") + Option::libtool_ext);
  1003 
  1026 
  1004         if (!project->values("QMAKE_AR_CMD").isEmpty())
  1027         if (!project->values("QMAKE_AR_CMD").isEmpty())
  1005             project->values("QMAKE_AR_CMD").first().replace("(TARGET)","(TARGETA)");
  1028             project->values("QMAKE_AR_CMD").first().replace("(TARGET)","(TARGETA)");
  1043             else
  1066             else
  1044                 project->values("TARGET_x").append("lib" + project->first("TARGET") + "." +
  1067                 project->values("TARGET_x").append("lib" + project->first("TARGET") + "." +
  1045                                                         project->first("VER_MAJ"));
  1068                                                         project->first("VER_MAJ"));
  1046             project->values("TARGET") = project->values("TARGET_x");
  1069             project->values("TARGET") = project->values("TARGET_x");
  1047         } else if (!project->isEmpty("QMAKE_AIX_SHLIB")) {
  1070         } else if (!project->isEmpty("QMAKE_AIX_SHLIB")) {
  1048             project->values("TARGET_").append("lib" + project->first("TARGET") + ".a");
  1071             project->values("TARGET_").append(project->first("QMAKE_PREFIX_STATICLIB") + project->first("TARGET")
       
  1072                     + "." + project->first("QMAKE_EXTENSION_STATICLIB"));
  1049             if(project->isActiveConfig("lib_version_first")) {
  1073             if(project->isActiveConfig("lib_version_first")) {
  1050                 project->values("TARGET_x").append("lib" + project->first("TARGET") + "." +
  1074                 project->values("TARGET_x").append("lib" + project->first("TARGET") + "." +
  1051                                                         project->first("VER_MAJ") + "." +
  1075                                                         project->first("VER_MAJ") + "." +
  1052                                                         project->first("QMAKE_EXTENSION_SHLIB"));
  1076                                                         project->first("QMAKE_EXTENSION_SHLIB"));
  1053                 project->values("TARGET_x.y").append("lib" + project->first("TARGET") + "." +
  1077                 project->values("TARGET_x.y").append("lib" + project->first("TARGET") + "." +
  1072                                                             project->first("VER_MAJ") + "." +
  1096                                                             project->first("VER_MAJ") + "." +
  1073                                                             project->first("VER_MIN") + "." +
  1097                                                             project->first("VER_MIN") + "." +
  1074                                                             project->first("VER_PAT"));
  1098                                                             project->first("VER_PAT"));
  1075             }
  1099             }
  1076             project->values("TARGET") = project->values("TARGET_x.y.z");
  1100             project->values("TARGET") = project->values("TARGET_x.y.z");
       
  1101         } else if (!project->isEmpty("QMAKE_SYMBIAN_SHLIB")) {
       
  1102             project->values("TARGET_").append(project->first("TARGET") + "." +
       
  1103                                                    project->first("QMAKE_EXTENSION_SHLIB"));
       
  1104             project->values("TARGET") = project->values("TARGET_");
  1077         } else {
  1105         } else {
  1078             project->values("TARGET_").append("lib" + project->first("TARGET") + "." +
  1106             project->values("TARGET_").append("lib" + project->first("TARGET") + "." +
  1079                                                    project->first("QMAKE_EXTENSION_SHLIB"));
  1107                                                    project->first("QMAKE_EXTENSION_SHLIB"));
  1080             if(project->isActiveConfig("lib_version_first")) {
  1108             if(project->isActiveConfig("lib_version_first")) {
  1081                 project->values("TARGET_x").append("lib" + project->first("TARGET") + "." +
  1109                 project->values("TARGET_x").append("lib" + project->first("TARGET") + "." +