Ignore:
Timestamp:
Jun 21, 2009, 9:24:04 PM (16 years ago)
Author:
Dmitry A. Kuminov
Message:

qmake: os2/GNUMAKE: Added DEF file recognition/generation (#4).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/qmake/generators/os2/gnumake.cpp

    r39 r42  
    200200    init_flag = true;
    201201
    202     if(project->first("TEMPLATE") == "app")
     202    if(project->first("TEMPLATE") == "app") {
     203        mode = App;
    203204        project->values("QMAKE_APP_FLAG").append("1");
    204     else if(project->first("TEMPLATE") == "lib")
     205    } else if(project->first("TEMPLATE") == "lib") {
     206        mode = project->isActiveConfig("staticlib") ? StaticLib : DLL;
    205207        project->values("QMAKE_LIB_FLAG").append("1");
    206     else if(project->first("TEMPLATE") == "subdirs") {
     208    else if(project->first("TEMPLATE") == "subdirs") {
    207209        MakefileGenerator::init();
    208210        if(project->isEmpty("QMAKE_COPY_FILE"))
     
    250252        QString preCompHeader = var("PRECOMPILED_DIR")
    251253                         + QFileInfo(project->first("PRECOMPILED_HEADER")).fileName();
    252         preCompHeaderOut = preCompHeader + ".gch";
    253         project->values("QMAKE_CLEAN").append(preCompHeaderOut + Option::dir_sep + "c");
    254         project->values("QMAKE_CLEAN").append(preCompHeaderOut + Option::dir_sep + "c++");
    255 
    256         project->values("QMAKE_RUN_CC").clear();
    257         project->values("QMAKE_RUN_CC").append("$(CC) -c -include " + preCompHeader +
    258                                                     " $(CFLAGS) $(INCPATH) -o $obj $src");
     254preCompHeaderOut = preCompHeader + ".gch";
     255project->values("QMAKE_CLEAN").append(preCompHeaderOut + Option::dir_sep + "c");
     256project->values("QMAKE_CLEAN").append(preCompHeaderOut + Option::dir_sep + "c++");
     257
     258project->values("QMAKE_RUN_CC").clear();
     259        project->values("QMAKE_RUN_CC").append("$(CC) -c -include " + preCompHeader +
     260                                               " $(CFLAGS) $(INCPATH) -o $obj $src");
    259261        project->values("QMAKE_RUN_CC_IMP").clear();
    260         project->values("QMAKE_RUN_CC_IMP").append("$(CC)  -c -include " + preCompHeader +
    261                                                         " $(CFLAGS) $(INCPATH) -o $@ $<");
     262project->values("QMAKE_RUN_CC_IMP").append("$(CC)  -c -include " + preCompHeader +
     263                                                   " $(CFLAGS) $(INCPATH) -o $@ $<");
    262264        project->values("QMAKE_RUN_CXX").clear();
    263         project->values("QMAKE_RUN_CXX").append("$(CXX) -c -include " + preCompHeader +
    264                                                      " $(CXXFLAGS) $(INCPATH) -o $obj $src");
     265project->values("QMAKE_RUN_CXX").append("$(CXX) -c -include " + preCompHeader +
     266                                                " $(CXXFLAGS) $(INCPATH) -o $obj $src");
    265267        project->values("QMAKE_RUN_CXX_IMP").clear();
    266         project->values("QMAKE_RUN_CXX_IMP").append("$(CXX) -c -include " + preCompHeader +
    267                                                          " $(CXXFLAGS) $(INCPATH) -o $@ $<");
     268project->values("QMAKE_RUN_CXX_IMP").append("$(CXX) -c -include " + preCompHeader +
     269                                                    " $(CXXFLAGS) $(INCPATH) -o $@ $<");
    268270    }
    269271}
     
    271273void GNUMakefileGenerator::fixTargetExt()
    272274{
    273     Win32MakefileGenerator::fixTargetExt();
     275    if (mode == App)
     276        project->values("TARGET_EXT").append(".exe");
     277    else if (mode == DLL)
     278        project->values("TARGET_EXT").append(project->first("TARGET_VERSION_EXT") + ".dll");
     279    else
     280        project->values("TARGET_EXT").append(".lib");
    274281}
    275282
     
    293300void GNUMakefileGenerator::writeLibsPart(QTextStream &t)
    294301{
    295     if(project->isActiveConfig("staticlib") && project->first("TEMPLATE") == "lib") {
     302    if) {
    296303        t << "LIB           = " << var("QMAKE_LIB") << endl;
    297304    } else {
     
    346353    t << "all: " << escapeDependencyPath(fileFixify(Option::output.fileName())) << " " << valGlue(escapeDependencyPaths(project->values("ALL_DEPS"))," "," "," ") << " $(DESTDIR_TARGET)" << endl << endl;
    347354    t << "$(DESTDIR_TARGET): " << var("PRE_TARGETDEPS") << " $(OBJECTS) " << var("POST_TARGETDEPS");
    348     if(!project->isEmpty("QMAKE_PRE_LINK"))
     355    if(!project->isEmpty("QMAKE_PRE_LINK"))
    349356        t << "\n\t" <<var("QMAKE_PRE_LINK");
    350     if(project->first("TEMPLATE") == "lib" && project->isActiveConfig("staticlib")) {
     357    if) {
    351358        /* static library */
    352359        t << "\n\t" << var("QMAKE_RUN_LIB");
     
    357364            t << "\n\t" << var("QMAKE_RUN_RC2EXE");
    358365        }
    359         if (project->first("TEMPLATE") == "lib") {
    360             if (!project->isEmpty("QMAKE_RUN_IMPLIB"))
    361                 t << "\n\t" << var("QMAKE_RUN_IMPLIB");
     366        if (mode == DLL && !project->isEmpty("QMAKE_RUN_IMPLIB")) {
     367            t << "\n\t" << var("QMAKE_RUN_IMPLIB");
    362368        }
    363369    }
     
    375381        t << "RES_FILE      = " << valList(escapeFilePaths(project->values("RES_FILE"))) << endl;
    376382    }
    377     if (project->first("TEMPLATE") == "lib" && !project->isActiveConfig("staticlib") &&
    378         !project->isEmpty( "QMAKE_RUN_IMPLIB")) {
     383    if (mode == DLL && !project->isEmpty("QMAKE_RUN_IMPLIB")) {
    379384        t << "TARGET_IMPLIB = $(basename $(DESTDIR_TARGET)).lib" << endl;
    380         project->values("QMAKE_CLEAN").append( "$(TARGET_IMPLIB)" );
     385        project->values("QMAKE_CLEAN").append("$(TARGET_IMPLIB)");
     386    }
     387
     388    if (project->isEmpty("DEF_FILE")) {
     389        /* no DEF file supplied, we will generate one */
     390        if (mode == DLL) {
     391            t << "DEF_FILE      = $(basename $(DESTDIR_TARGET)).def" << endl;
     392            project->values("QMAKE_CLEAN").append("$(DEF_FILE)");
     393            project->values("POST_TARGETDEPS") += "$(DEF_FILE)";
     394            if (!project->isEmpty("DEF_FILE_TEMPLATE")) {
     395                t << "DEF_FILE_TEMPLATE = " << escapeFilePath(var("DEF_FILE_TEMPLATE")) << endl;
     396                project->values("QMAKE_GENDEF_DEPS") += "$(DEF_FILE_TEMPLATE)";
     397            }
     398            if (!project->isEmpty("DEF_FILE_MAP")) {
     399                t << "DEF_FILE_MAP  = " << escapeFilePath(var("DEF_FILE_MAP")) << endl;
     400                project->values("QMAKE_GENDEF_DEPS") += "$(DEF_FILE_MAP)";
     401            }
     402        }
     403    } else {
     404        if (!project->isEmpty("DEF_FILE_TEMPLATE")) {
     405            fprintf(stderr, "Both DEF_FILE and DEF_FILE_TEMPLATE are specified.\n");
     406            fprintf(stderr, "Please specify one of them, not both.");
     407            exit(1);
     408        }
     409        t << "DEF_FILE      = " << escapeFilePath(var("DEF_FILE")) << endl;
     410        project->values("POST_TARGETDEPS") += "$(DEF_FILE)";
    381411    }
    382412}
     
    389419        t << var("QMAKE_RUN_RC2RES") << endl;
    390420    }
     421
     422
     423
     424
     425
     426
    391427}
    392428
     
    396432        return;
    397433
    398     if (!project->values("RC_FILE").isEmpty()) {
    399         if (!project->values("RES_FILE").isEmpty()) {
     434    if (!project->)) {
     435        if (!project->)) {
    400436            fprintf(stderr, "Both rc and res file specified.\n");
    401437            fprintf(stderr, "Please specify one of them, not both.");
     
    409445    }
    410446
    411     if (!project->values("RES_FILE").isEmpty())
     447    if (!project->))
    412448        project->values("POST_TARGETDEPS") += "$(RES_FILE)";
    413449}
Note: See TracChangeset for help on using the changeset viewer.