Changeset 673


Ignore:
Timestamp:
Mar 11, 2010, 3:04:05 AM (15 years ago)
Author:
Dmitry A. Kuminov
Message:

qmake: os2/gnumake: Replaced hard-coded DEF_FILE generation target with more flexible and consistent code in default_post.prf.

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/mkspecs/features/os2/default_post.prf

    r656 r673  
    11!CONFIG(windows):!CONFIG(console) {
    22    CONFIG(release, debug|release):CONFIG(qt):contains(QT, gui) {
    3         CONFIG *= windows
     3        CONFIG *= windows
    44    } else {
    5         CONFIG *= console
     5        CONFIG *= console
    66    }
    77}
     
    1212build_pass|isEmpty(BUILDS) {
    1313
    14     dll {
    15         # create the import library target
    16         make_implib.target = $(TARGET_IMPLIB)
    17         make_implib.commands = $$QMAKE_RUN_IMPLIB
    18         export_all {
    19             make_implib.depends = $(DEF_FILE)
    20             POST_TARGETDEPS += $$make_implib.target
    21         } else {
    22             make_implib.depends = $(DESTDIR_TARGET)
    23             ALL_DEPS += $$make_implib.target
    24         }
    25         QMAKE_EXTRA_TARGETS += make_implib
    26         QMAKE_CLEAN += $$make_implib.target
    27 
    28                 export_all:QMAKE_RUN_GENDEF = $$QMAKE_RUN_GENDEF_EXPORT_ALL
    29     }
    30 
    3114    # convert QMAKE_TARGET_ variables to DEF_FILE_ ones
    3215    isEmpty(DEF_FILE_VERSION) {
    3316        DEF_FILE_VERSION = $$VERSION
    34         }
    35         isEmpty(DEF_FILE_DESCRIPTION) {
    36                 !isEmpty(QMAKE_TARGET_PRODUCT):DEF_FILE_DESCRIPTION = $$QMAKE_TARGET_PRODUCT
    37                 !isEmpty(QMAKE_TARGET_DESCRIPTION) {
    38                         !isEmpty(DEF_FILE_DESCRIPTION):DEF_FILE_DESCRIPTION = $${DEF_FILE_DESCRIPTION}: $$QMAKE_TARGET_DESCRIPTION
    39                         else:DEF_FILE_DESCRIPTION = $$QMAKE_TARGET_DESCRIPTION
    40                 }
    41                 !isEmpty(QMAKE_TARGET_COPYRIGHT) {
    42                         !isEmpty(DEF_FILE_DESCRIPTION):DEF_FILE_DESCRIPTION = $${DEF_FILE_DESCRIPTION} $$QMAKE_TARGET_COPYRIGHT
    43                         else:DEF_FILE_DESCRIPTION = $$QMAKE_TARGET_COPYRIGHT
    44                 }
    45         }
    46         isEmpty(DEF_FILE_VENDOR):!isEmpty(QMAKE_TARGET_COMPANY):DEF_FILE_VENDOR = $$QMAKE_TARGET_COMPANY
     17    }
     18    isEmpty(DEF_FILE_DESCRIPTION) {
     19        !isEmpty(QMAKE_TARGET_PRODUCT):DEF_FILE_DESCRIPTION = $$QMAKE_TARGET_PRODUCT
     20        !isEmpty(QMAKE_TARGET_DESCRIPTION) {
     21            !isEmpty(DEF_FILE_DESCRIPTION):DEF_FILE_DESCRIPTION = $${DEF_FILE_DESCRIPTION}: $$QMAKE_TARGET_DESCRIPTION
     22            else:DEF_FILE_DESCRIPTION = $$QMAKE_TARGET_DESCRIPTION
     23        }
     24        !isEmpty(QMAKE_TARGET_COPYRIGHT) {
     25            !isEmpty(DEF_FILE_DESCRIPTION):DEF_FILE_DESCRIPTION = $${DEF_FILE_DESCRIPTION} $$QMAKE_TARGET_COPYRIGHT
     26            else:DEF_FILE_DESCRIPTION = $$QMAKE_TARGET_COPYRIGHT
     27        }
     28    }
     29    isEmpty(DEF_FILE_VENDOR):!isEmpty(QMAKE_TARGET_COMPANY):DEF_FILE_VENDOR = $$QMAKE_TARGET_COMPANY
    4730
    48     # handle .DEF file creation for executables
    49     contains(TEMPLATE, ".*app"):isEmpty(DEF_FILE) {
    50         DEF_FILE_DESCR =
    51         !isEmpty(DEF_FILE_VERSION)|!isEmpty(DEF_FILE_DESCRIPTION)|!isEmpty(DEF_FILE_VENDOR) {
    52             QMAKESPEC_DIR = $$dirname(QMAKESPEC)
    53             isEmpty(QMAKESPEC_DIR):QMAKESPEC_DIR = $$[QT_INSTALL_DATA]/mkspecs
    54             exists($$QMAKESPEC_DIR/os2-g++/emxexpw.cmd) {
    55                 DEF_FILE_DESCR = -printbldlevel
    56                 !isEmpty(DEF_FILE_VERSION):DEF_FILE_DESCR += -version \"$$DEF_FILE_VERSION\"
    57                 !isEmpty(DEF_FILE_DESCRIPTION):DEF_FILE_DESCR += -desc \"$$DEF_FILE_DESCRIPTION\"
    58                 !isEmpty(DEF_FILE_VENDOR):DEF_FILE_DESCR += -vendor \"$$DEF_FILE_VENDOR\"
    59                 DEF_FILE_DESCR = "$$system($$QMAKESPEC_DIR/os2-g++/emxexpw.cmd $$DEF_FILE_DESCR)"
    60             } else {
    61                 warning($$QMAKESPEC_DIR/os2-g++/emxexpw.cmd is not found!)
    62                 warning(BLDLEVEL string in .DEF will not contain all info!)
    63                 DEF_FILE_DESCR = "@$${LITERAL_HASH}vendor:version$${LITERAL_HASH}@ description"
    64                 DEF_FILE_DESCR = $$replace(DEF_FILE_DESCR, vendor, $$DEF_FILE_VENDOR)
    65                 DEF_FILE_DESCR = $$replace(DEF_FILE_DESCR, version, $$DEF_FILE_VERSION)
    66                 DEF_FILE_DESCR = $$replace(DEF_FILE_DESCR, description, $$DEF_FILE_DESCRIPTION)
     31    contains(TEMPLATE, ".*lib"):dll {
     32        # create the import library target (assumes that the generator puts
     33        # puts 'TARGET_IMPLIB... = ' to the Makefile)
     34        make_implib.target = $(TARGET_IMPLIB)
     35        make_implib.commands = $$QMAKE_RUN_IMPLIB
     36        export_all:make_implib.depends = $(DEF_FILE)
     37        else:make_implib.depends = $(DESTDIR_TARGET)
     38        ALL_DEPS += $$make_implib.target
     39        QMAKE_CLEAN += $$make_implib.target
     40        QMAKE_EXTRA_TARGETS += make_implib
     41
     42        isEmpty(DEF_FILE) {
     43            # create a .DEF file if not supplied (assumes that the generator
     44            # puts 'DEF_FILE_... = ' $$DEF_FILE... to the Makefile)
     45            make_def.target = $(DEF_FILE)
     46            make_def.depends = $(MAKEFILE)
     47            !isEmpty(DEF_FILE_TEMPLATE):make_def.depends += $(DEF_FILE_TEMPLATE)
     48            !isEmpty(DEF_FILE_MAP):make_def.depends += $(DEF_FILE_MAP)
     49            export_all:make_def.depends += $(OBJECTS)
     50            export_all:make_def.commands = $$QMAKE_RUN_GENDEF_EXPORT_ALL
     51            else:make_def.commands = $$QMAKE_RUN_GENDEF
     52            QMAKE_CLEAN += $$make_def.target
     53            QMAKE_EXTRA_TARGETS += make_def
     54        }
     55        POST_TARGETDEPS += $(DEF_FILE)
     56    }
     57
     58    contains(TEMPLATE, ".*app") {
     59        isEmpty(DEF_FILE) {
     60            # handle .DEF file creation for executables
     61            !isEmpty(DEF_FILE_VERSION)|!isEmpty(DEF_FILE_DESCRIPTION)|\
     62            !isEmpty(DEF_FILE_VENDOR)|!isEmpty(DEF_FILE_TEMPLATE) {
     63                windows:DEF_FILE_EXETYPE = WINDOWAPI
     64                else:DEF_FILE_EXETYPE = WINDOWCOMPAT
     65                make_def.target = $(DEF_FILE)
     66                make_def.depends = $(MAKEFILE)
     67                !isEmpty(DEF_FILE_TEMPLATE):make_def.depends += $(DEF_FILE_TEMPLATE)
     68                make_def.commands = $$QMAKE_RUN_GENDEF_EXE
     69                QMAKE_CLEAN += $$make_def.target
     70                QMAKE_EXTRA_TARGETS += make_def
     71                POST_TARGETDEPS += $$make_def.target
    6772            }
    68         }
    69         !isEmpty(DEF_FILE_DESCR)|wlink {
    70             # Note: neither WLINK nor EMXOMFLD allows to specify the app type of
    71             # the .EXE on the command line. For this reason, we need an implicit
    72             # .DEF which we create if no explicit .DEF file is provided in .pro,
    73             # even if DEF_FILE_DESCR is actually empty.
    74 
    75             DEF_FILE = $(OBJECTS_DIR)/$(TARGET).def
    76 
    77             windows:DEF_FILE_APPTYPE = WINDOWAPI
    78             else::DEF_FILE_APPTYPE = WINDOWCOMPAT
    79 
    80             make_exe_def.target = $(DEF_FILE)
    81             make_exe_def.depends = $(call q,$(MAKEFILE))
    82             make_exe_def.commands = \
    83                 @echo NAME $(QMAKE_TARGET) $$DEF_FILE_APPTYPE > $(DEF_FILE)
    84             !isEmpty(DEF_FILE_DESCR):make_exe_def.commands += $$escape_expand(\n\t) \
    85                 @echo DESCRIPTION \'$${DEF_FILE_DESCR}\' >> $(DEF_FILE)
    86             QMAKE_EXTRA_TARGETS += make_exe_def
    87             QMAKE_CLEAN += $$make_exe_def.target
     73        } else {
     74            POST_TARGETDEPS += $(DEF_FILE)
    8875        }
    8976    }
  • trunk/mkspecs/features/os2/default_pre.prf

    r656 r673  
    110110                    else:tgt = Part$${next}
    111111                }
    112                 eval(ALL_DEPS += $(call q,$(TARGET_IMPLIB)) $${tgt})
     112                eval(ALL_DEPS += $(TARGET_IMPLIB) $${tgt})
    113113                export(ALL_DEPS)
    114114
  • trunk/mkspecs/os2-g++/qmake.conf

    r656 r673  
    116116        $(if $(DEF_FILE_DESCRIPTION),-desc \"$(DEF_FILE_DESCRIPTION)\") \
    117117        $(if $(DEF_FILE_VENDOR),-vendor \"$(DEF_FILE_VENDOR)\") \
    118         $(if $(DEF_FILE_TEMPLATE),-template $(DEF_FILE_TEMPLATE))
     118        $(if $(DEF_FILE_TEMPLATE),-template \"$(DEF_FILE_TEMPLATE)\")
    119119
    120120QMAKE_RUN_GENDEF_EXPORT_ALL = $$QMAKE_RUN_GENDEF \
    121         $(if $(DEF_FILE_MAP),-map $(DEF_FILE_MAP)) \
     121        $(if $(DEF_FILE_MAP),-map \"$(DEF_FILE_MAP)\") \
    122122        $$QMAKE_OBJECTS_REF
    123123
    124 QMAKE_GENDEF_DEPS       = $(OBJECTS) $(MAKEFILE)
     124QMAKE_RUN_GENDEF_EXE    = $$QMAKE_RUN_GENDEF \
     125        $(if $(DEF_FILE_EXETYPE),-exe \"$(DEF_FILE_EXETYPE)\")
    125126
    126127QMAKE_LIBS              =
  • trunk/qmake/generators/os2/gnumake.cpp

    r671 r673  
    558558    }
    559559
    560     if (project->isEmpty("DEF_FILE")) {
    561         /* no DEF file supplied, we will generate one */
    562         if (mode == DLL) {
    563             t << "DEF_FILE      = $(basename $(DESTDIR_TARGET)).def" << endl;
    564             project->values("QMAKE_CLEAN").append("$(DEF_FILE)");
    565             project->values("POST_TARGETDEPS") += escapeFileVars("$(DEF_FILE)");
    566             if (!project->isEmpty("DEF_FILE_VERSION"))
    567                 t << "DEF_FILE_VERSION = " << var("DEF_FILE_VERSION") << endl;
    568             if (!project->isEmpty("DEF_FILE_DESCRIPTION"))
    569                 t << "DEF_FILE_DESCRIPTION = " << var("DEF_FILE_DESCRIPTION") << endl;
    570             if (!project->isEmpty("DEF_FILE_VENDOR"))
    571                 t << "DEF_FILE_VENDOR = " << var("DEF_FILE_VENDOR") << endl;
     560    if (mode != StaticLib) {
     561        if (project->isEmpty("DEF_FILE")) {
     562            /* no DEF file supplied, emit handy variable definitions to simplify
     563             * DEF generation rules defined somewhere in default_post.prf */
     564            bool haveSomething = false;
     565            if (!project->isEmpty("DEF_FILE_VERSION")) {
     566                t << "DEF_FILE_VERSION        = " << var("DEF_FILE_VERSION") << endl;
     567                haveSomething = true;
     568            }
     569            if (!project->isEmpty("DEF_FILE_DESCRIPTION")) {
     570                t << "DEF_FILE_DESCRIPTION    = " << var("DEF_FILE_DESCRIPTION") << endl;
     571                haveSomething = true;
     572            }
     573            if (!project->isEmpty("DEF_FILE_VENDOR")) {
     574                t << "DEF_FILE_VENDOR         = " << var("DEF_FILE_VENDOR") << endl;
     575                haveSomething = true;
     576            }
    572577            if (!project->isEmpty("DEF_FILE_TEMPLATE")) {
    573                 t << "DEF_FILE_TEMPLATE = " << escapeFilePath(var("DEF_FILE_TEMPLATE")) << endl;
    574                 project->values("QMAKE_GENDEF_DEPS") += "$(DEF_FILE_TEMPLATE)";
     578                t << "DEF_FILE_TEMPLATE       = " << escapeFilePath(var("DEF_FILE_TEMPLATE")) << endl;
     579                haveSomething = true;
    575580            }
    576581            if (!project->isEmpty("DEF_FILE_MAP")) {
    577                 t << "DEF_FILE_MAP  = " << escapeFilePath(var("DEF_FILE_MAP")) << endl;
    578                 project->values("QMAKE_GENDEF_DEPS") += "$(DEF_FILE_MAP)";
    579             }
    580         }
    581     } else {
    582         if (!project->isEmpty("DEF_FILE_TEMPLATE")) {
    583             fprintf(stderr, "Both DEF_FILE and DEF_FILE_TEMPLATE are specified.\n");
    584             fprintf(stderr, "Please specify one of them, not both.");
    585             exit(1);
    586         }
    587         t << "DEF_FILE      = " << escapeFilePath(var("DEF_FILE")) << endl;
    588         project->values("POST_TARGETDEPS") += "$(DEF_FILE)";
     582                t << "DEF_FILE_MAP            = " << escapeFilePath(var("DEF_FILE_MAP")) << endl;
     583                haveSomething = true;
     584            }
     585            if (mode == DLL) {
     586                // the DLL needs a file in any case
     587                t << "DEF_FILE      = $(basename $(DESTDIR_TARGET)).def" << endl;
     588            } else if (haveSomething) {
     589                // the EXE needs it only if there's a description info
     590                t << "DEF_FILE_EXETYPE        = " << escapeFilePath(var("DEF_FILE_EXETYPE")) << endl;
     591                t << "DEF_FILE      = $(OBJECTS_DIR)\\$(TARGET).def" << endl;
     592            }
     593        } else {
     594            if (!project->isEmpty("DEF_FILE_TEMPLATE")) {
     595                fprintf(stderr, "Both DEF_FILE and DEF_FILE_TEMPLATE are specified.\n");
     596                fprintf(stderr, "Please specify one of them, not both.");
     597                exit(1);
     598            }
     599            t << "DEF_FILE      = " << escapeFilePath(var("DEF_FILE")) << endl;
     600        }
    589601    }
    590602
     
    601613        t << escapeFileVars("$(RES_FILE): $(RC_FILE)\n\t");
    602614        t << var("QMAKE_RUN_RC2RES") << endl;
    603     }
    604 
    605     if (mode == DLL) {
    606         if (project->isEmpty("DEF_FILE")) {
    607             /* generate a DEF file for the DLL when not supplied */
    608             t << escapeFileVars("$(DEF_FILE): ") << escapeFileVars(var("QMAKE_GENDEF_DEPS"));
    609             t << valGlue(var("QMAKE_RUN_GENDEF").split(";;"), "\n\t", "\n\t", "") << endl;
    610         }
    611615    }
    612616}
Note: See TracChangeset for help on using the changeset viewer.