Changeset 656


Ignore:
Timestamp:
Mar 8, 2010, 4:00:31 PM (15 years ago)
Author:
Dmitry A. Kuminov
Message:

qmake:qmake: os2/gnumake: Add support for the declspec(dllexport)-based DLL generation and activate this support by default which greatly reduces the number of exported symbols in Qt DLLs. The old method which causes all public symbols to be exported is still available using the "export_all" CONFIG flag (off by default). Note that DLL splitting will turn "export_all" on because otherwise it is impossible to create split DLLs at the moment (emxexp limitation).

Location:
trunk
Files:
4 edited

Legend:

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

    r550 r656  
    1010load(default_post)
    1111
    12 # convert QMAKE_TARGET_ variables to DEF_FILE_ ones
    1312build_pass|isEmpty(BUILDS) {
     13
     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
     31    # convert QMAKE_TARGET_ variables to DEF_FILE_ ones
    1432    isEmpty(DEF_FILE_VERSION) {
    1533        DEF_FILE_VERSION = $$VERSION
     
    2745        }
    2846        isEmpty(DEF_FILE_VENDOR):!isEmpty(QMAKE_TARGET_COMPANY):DEF_FILE_VENDOR = $$QMAKE_TARGET_COMPANY
    29 }
    3047
    31 build_pass|isEmpty(BUILDS) {
     48    # handle .DEF file creation for executables
    3249    contains(TEMPLATE, ".*app"):isEmpty(DEF_FILE) {
    3350        DEF_FILE_DESCR =
     
    6885                @echo DESCRIPTION \'$${DEF_FILE_DESCR}\' >> $(DEF_FILE)
    6986            QMAKE_EXTRA_TARGETS += make_exe_def
    70             QMAKE_CLEAN += $(DEF_FILE)
     87            QMAKE_CLEAN += $$make_exe_def.target
    7188        }
    7289    }
  • trunk/mkspecs/features/os2/default_pre.prf

    r593 r656  
    2525
    2626    !dll:error("splitDllBegin may only be used for DLLs!")
     27
     28    # splitDLL functionality currently requires export_all
     29    CONFIG *= export_all
     30    export(CONFIG)
    2731
    2832    1 = $$unique(1)
     
    145149
    146150    CONFIG($$SPLIT_CONFIG) {
     151
     152                # splitDLL functionality currently requires export_all
     153        !export_all:error("splitDllPart requires export_all in CONFIG!")
     154
    147155        CONFIG($$scope): {
    148156            eval($${scope}_HEADERS = $$HEADERS)
     
    184192
    185193        CONFIG($$SPLIT_CONFIG):CONFIG($$scope) {
     194
     195                        # splitDLL functionality currently requires export_all
     196            !export_all:error("splitDllEnd requires export_all in CONFIG!")
     197
    186198            eval(HEADERS = $$eval($${scope}_HEADERS))
    187199            export(HEADERS)
  • trunk/mkspecs/os2-g++/qmake.conf

    r654 r656  
    107107
    108108QMAKE_RUN_LINK          = $(LINK) $(LFLAGS) -o $(DESTDIR_TARGET) $(DEF_FILE) -Wl,$$QMAKE_OBJECTS_REF $(LIBS)
    109 QMAKE_RUN_IMPLIB        = emximp -p 128 -o $(TARGET_IMPLIB) $(DEF_FILE)
    110109
    111 QMAKE_RUN_GENDEF        = \
    112     $(if $(QT_DEV_NO_DEF_GENERATION),\
    113         @echo Warning: .DEF file generation is disabled! \
    114             (QT_DEV_NO_DEF_GENERATION=$(QT_DEV_NO_DEF_GENERATION)),\
    115         $(QMAKESPECDIR)\emxexpw.cmd -name $(basename $(TARGET)) \
    116             $(if $(DEF_FILE_VERSION),-version \"$(DEF_FILE_VERSION)\") \
    117             $(if $(DEF_FILE_DESCRIPTION),-desc \"$(DEF_FILE_DESCRIPTION)\") \
    118             $(if $(DEF_FILE_VENDOR),-vendor \"$(DEF_FILE_VENDOR)\") \
    119             -def $(DEF_FILE) $(if $(DEF_FILE_MAP),-map $(DEF_FILE_MAP)) \
    120             $(if $(DEF_FILE_TEMPLATE),-template $(DEF_FILE_TEMPLATE)) \
    121             $$QMAKE_OBJECTS_REF)
     110QMAKE_RUN_IMPLIB        = emximp -p 128 -o $@ $<
     111
     112QMAKE_RUN_GENDEF            = \
     113    $(QMAKESPECDIR)\emxexpw.cmd -name $(basename $(TARGET)) \
     114        -def $(DEF_FILE) \
     115        $(if $(DEF_FILE_VERSION),-version \"$(DEF_FILE_VERSION)\") \
     116        $(if $(DEF_FILE_DESCRIPTION),-desc \"$(DEF_FILE_DESCRIPTION)\") \
     117        $(if $(DEF_FILE_VENDOR),-vendor \"$(DEF_FILE_VENDOR)\") \
     118        $(if $(DEF_FILE_TEMPLATE),-template $(DEF_FILE_TEMPLATE))
     119
     120QMAKE_RUN_GENDEF_EXPORT_ALL = $$QMAKE_RUN_GENDEF \
     121        $(if $(DEF_FILE_MAP),-map $(DEF_FILE_MAP)) \
     122        $$QMAKE_OBJECTS_REF
    122123
    123124QMAKE_GENDEF_DEPS       = $(OBJECTS) $(MAKEFILE)
  • trunk/qmake/generators/os2/gnumake.cpp

    r629 r656  
    581581    }
    582582
    583     if (mode == DLL && !project->isEmpty("QMAKE_RUN_IMPLIB")) {
     583    if (mode == DLL) {
     584        /* we neeed $(TARGET_IMPLIB) to be in sync with getLibTarget() */
    584585        t << "TARGET_IMPLIB = $(basename $(DESTDIR_TARGET)).lib" << endl;
    585         project->values("QMAKE_CLEAN").append("$(TARGET_IMPLIB)");
    586         project->values("POST_TARGETDEPS") += escapeFileVars("$(TARGET_IMPLIB)");
    587586    }
    588587}
     
    602601            t << valGlue(var("QMAKE_RUN_GENDEF").split(";;"), "\n\t", "\n\t", "") << endl;
    603602        }
    604         if (!project->isEmpty("QMAKE_RUN_IMPLIB")) {
    605             /* generate the import library */
    606             t << escapeFileVars("$(TARGET_IMPLIB): ") << escapeFileVars("$(DEF_FILE)");
    607             t << "\n\t" << var("QMAKE_RUN_IMPLIB") << endl;
    608         }
    609603    }
    610604}
     
    648642QString GNUMakefileGenerator::getLibTarget()
    649643{
    650     if (mode == DLL && !project->isEmpty("QMAKE_RUN_IMPLIB"))
     644    if (mode == DLL)
    651645        return QString("$(notdir $(TARGET_IMPLIB))");
    652646    return Win32MakefileGenerator::getLibTarget();
Note: See TracChangeset for help on using the changeset viewer.