vlc/vlc-2.1 | branch: master | Konstantinos Tsanaktsidis <[email protected]> | Thu Jun 12 13:34:46 2014 +0000| [646642e2a2e925b0aa24baf66011ac431e3de89e] | committer: Jean-Baptiste Kempf
Fix libmod_plugin undefined __imp_ symbols building for win32 When building current HEAD of master for x86_64-w64-mingw32 against current contribs, compilation fails at libmod_plugin due to undefined symbols of the form __imp_ModPlug_*. This patch modifies libmodplug in contribs by adding -DMODPLUG_STATIC to CFlags in the pkg-config file. A bug is also fixed in the main build system to make sure the CFLAGS are picked up from this pkg-config file. This problem occurs because of the following code in contrib/x86_64-w64-mingw32/include/libmodplug/modplug.h. This code is present in libmodplug obtained from running "make fetch & make" in the contribs directory, but not present in the prebuilt contribs obtained from running "make prebuilt". #if defined(_WIN32) || defined(__CYGWIN__) # if defined(MODPLUG_BUILD) && defined(DLL_EXPORT) # define MODPLUG_EXPORT __declspec(dllexport) # elif defined(MODPLUG_BUILD) || defined(MODPLUG_STATIC) # define MODPLUG_EXPORT # else # define MODPLUG_EXPORT __declspec(dllimport) # endif When building for Windows, if MODPLUG_STATIC is not defined, MODPLUG_EXPORT is defined as "__declspec(dllimport)". On Windows, dynamic symbols are prefixed with "__imp_", so this causes GCC to adjust the symbol references to the libmodplug functions accordingly. This patch therefore adds a patch to contribs for libmodplug's pkg-config file. It adds -DMODPLUG_STATIC to CFlags, so that when libmod_plugin is building it will have the correct symbol names. However, there is also a bug in the build system that needs to be fixed for this to work. The configure script sets a CXXFLAGS_mod containing the output of pkg-config for libmodplug, but not CFLAGS_mod. Additionally, the Makefile.ac for libmod_plugin sets CXXFLAGS when in fact the relevant files (mod.c) are plain C. Autotools therefore ignores these CXXFLAGS when generating a makefile. The solution is to add a macro to configure.ac to set CFLAGS_mod. Signed-off-by: Jean-Baptiste Kempf <[email protected]> (cherry picked from commit 298616dd2bec030956000d1a5e115268e78091e8) Signed-off-by: Jean-Baptiste Kempf <[email protected]> Conflicts: modules/demux/Makefile.am > http://git.videolan.org/gitweb.cgi/vlc/vlc-2.1.git/?a=commit;h=646642e2a2e925b0aa24baf66011ac431e3de89e --- configure.ac | 1 + contrib/src/modplug/modplug-win32-static.patch | 9 +++++++++ contrib/src/modplug/rules.mak | 1 + 3 files changed, 11 insertions(+) diff --git a/configure.ac b/configure.ac index a684338..2407d3b 100644 --- a/configure.ac +++ b/configure.ac @@ -2053,6 +2053,7 @@ if test "${enable_mod}" != "no" ; then PKG_CHECK_MODULES(LIBMODPLUG, [libmodplug >= 0.8.4 libmodplug != 0.8.8], [ VLC_ADD_PLUGIN([mod]) VLC_ADD_CXXFLAGS([mod],[$LIBMODPLUG_CFLAGS]) + VLC_ADD_CFLAGS([mod],[$LIBMODPLUG_CFLAGS]) #modules/demux/mod.c needs CFLAGS_mod, not CXXFLAGS_mod VLC_ADD_LIBS([mod],[$LIBMODPLUG_LIBS]) ],[ AS_IF([test -n "${enable_mod}"], diff --git a/contrib/src/modplug/modplug-win32-static.patch b/contrib/src/modplug/modplug-win32-static.patch new file mode 100644 index 0000000..4cd93a4 --- /dev/null +++ b/contrib/src/modplug/modplug-win32-static.patch @@ -0,0 +1,9 @@ +diff -rupN libmodplug-old/libmodplug.pc.in libmodplug-new/libmodplug.pc.in +--- libmodplug-old/libmodplug.pc.in 2013-08-23 09:55:58.000000000 +1000 ++++ libmodplug-new/libmodplug.pc.in 2014-06-12 20:59:17.705886752 +1000 +@@ -9,4 +9,4 @@ Version: @VERSION@ + Requires: + Libs: -L${libdir} -lmodplug + Libs.private: -lstdc++ -lm +-Cflags: -I${includedir} ++Cflags: -I${includedir} -DMODPLUG_STATIC diff --git a/contrib/src/modplug/rules.mak b/contrib/src/modplug/rules.mak index 8ac2484..a82a4d3 100644 --- a/contrib/src/modplug/rules.mak +++ b/contrib/src/modplug/rules.mak @@ -15,6 +15,7 @@ $(TARBALLS)/libmodplug-$(MODPLUG_VERSION).tar.gz: libmodplug: libmodplug-$(MODPLUG_VERSION).tar.gz .sum-modplug $(UNPACK) + $(APPLY) $(SRC)/modplug/modplug-win32-static.patch $(call pkg_static,"libmodplug.pc.in") $(MOVE) _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
