Skip to content
Snippets Groups Projects
  • Nirbheek Chauhan's avatar
    790e16ce
    cerbero: Fix loading of rsvg, ttmlsubs, resindvd under MSVC · 790e16ce
    Nirbheek Chauhan authored and GStreamer Marge Bot's avatar GStreamer Marge Bot committed
    We were setting `objc` as `[]` in the native file, because of which
    meson was auto-detecting it and finding it inside the MSYS-MinGW env.
    Then it was using that (instead of the MSVC compiler) to search for
    libraries inside `dependency()` and picked the GCC-compatible import
    libraries (`.dll.a`) for all dependencies, such as cairo, pango,
    libxml2, fontconfig, etc.
    
    The MSVC linker tried its best to chug along and mostly succeeded, but
    possibly due to format incompatibilities between `.dll.a` and `.lib`
    import library formats or bugs in GCC and/or MSVC, this led to the
    linker getting confused and looking for some libxml2 symbols both
    inside cairo *and* libxml2 DLLs, and doing the same for some cairo
    symbols too.
    
    For example, it was looking for `xmlDocGetRootElement` and
    `cairo_create` in both `libxml2-2.dll` and *also* in `libcairo-2.dll`.
    
    Since in PE images multiple references to the same symbol in different
    DLLs is allowed and all these references must be resolved at runtime,
    this was a runtime error not a build-time error. The same thing was
    also happening to resindvd.
    
    Oh, also re-enable resindvd which was accidentally disabled on MSVC
    when it was supposed to be disabled on UWP.
    
    Closes #277
    
    Part-of: <!525>
    790e16ce
    History
    cerbero: Fix loading of rsvg, ttmlsubs, resindvd under MSVC
    Nirbheek Chauhan authored and GStreamer Marge Bot's avatar GStreamer Marge Bot committed
    We were setting `objc` as `[]` in the native file, because of which
    meson was auto-detecting it and finding it inside the MSYS-MinGW env.
    Then it was using that (instead of the MSVC compiler) to search for
    libraries inside `dependency()` and picked the GCC-compatible import
    libraries (`.dll.a`) for all dependencies, such as cairo, pango,
    libxml2, fontconfig, etc.
    
    The MSVC linker tried its best to chug along and mostly succeeded, but
    possibly due to format incompatibilities between `.dll.a` and `.lib`
    import library formats or bugs in GCC and/or MSVC, this led to the
    linker getting confused and looking for some libxml2 symbols both
    inside cairo *and* libxml2 DLLs, and doing the same for some cairo
    symbols too.
    
    For example, it was looking for `xmlDocGetRootElement` and
    `cairo_create` in both `libxml2-2.dll` and *also* in `libcairo-2.dll`.
    
    Since in PE images multiple references to the same symbol in different
    DLLs is allowed and all these references must be resolved at runtime,
    this was a runtime error not a build-time error. The same thing was
    also happening to resindvd.
    
    Oh, also re-enable resindvd which was accidentally disabled on MSVC
    when it was supposed to be disabled on UWP.
    
    Closes #277
    
    Part-of: <!525>