Add version information to DLLs.
authorJeremy Kolb <jkolb@wsi.com>
Sun, 25 May 2008 14:09:56 +0000 (14:09 +0000)
committerRamiro Polla <ramiro.polla@gmail.com>
Sun, 25 May 2008 14:09:56 +0000 (14:09 +0000)
Patch by Jeremy Kolb.

Originally committed as revision 13379 to svn://svn.ffmpeg.org/ffmpeg/trunk

common.mak
configure

index 88a816e..609ff3f 100644 (file)
@@ -32,6 +32,9 @@ CFLAGS = -DHAVE_AV_CONFIG_H -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE \
 %.d: %.cpp
        $(DEPEND_CMD) > $@
 
+%.rco: %.rc
+       windres -I$(BUILD_ROOT) $< $@
+
 %$(EXESUF): %.c
 
 install: install-libs install-headers
@@ -66,9 +69,9 @@ checkheaders: $(filter-out %_template.ho,$(ALLHEADERS:.h=.ho))
 DEPS := $(OBJS:.o=.d)
 depend dep: $(DEPS)
 
-CLEANSUFFIXES = *.o *~ *.ho
+CLEANSUFFIXES = *.o *~ *.ho *.rco
 LIBSUFFIXES   = *.a *.lib *.so *.so.* *.dylib *.dll *.def *.dll.a *.exp *.map
-DISTCLEANSUFFIXES = *.d
+DISTCLEANSUFFIXES = *.d *.rc
 
 define RULES
 $(SUBDIR)%$(EXESUF): $(SUBDIR)%.o
index 86394e9..a0f9a5f 100755 (executable)
--- a/configure
+++ b/configure
@@ -1084,6 +1084,7 @@ TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
 TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}${EXESUF}"
 TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
 TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
+TMPRC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.rc"
 TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
 TMPSH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.sh"
 
@@ -1236,12 +1237,15 @@ case $target_os in
             VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
         fi
         disable ffserver
+        enabled shared && enable dllinfo
         SLIBPREF=""
         SLIBSUF=".dll"
         EXESUF=".exe"
         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
         SLIB_EXTRA_CMD='-lib /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
+        SLIB_EXTRA_OBJS="dllinfo.rco"
+        SLIB_EXTRA_DEP='$(SUBDIR)../version.h'
         SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
             install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"'
         SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
@@ -2069,6 +2073,8 @@ if enabled shared; then
     echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
     echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
     echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
+    echo "SLIB_EXTRA_OBJS=${SLIB_EXTRA_OBJS}" >> config.mak
+    echo "SLIB_EXTRA_DEP=${SLIB_EXTRA_DEP}" >> config.mak
     echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
     echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
 fi
@@ -2215,3 +2221,69 @@ else
     pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
     apply libswscale.pc sed s/^Libs:.*$/Libs:/
 fi
+
+# build dll configuration for windows.
+
+dllinfo_generate() {
+    name=$1
+    description=$2
+    version=$3
+    major=${version%%.*}
+    version_commas=`echo $version | tr . ,`,0
+    dllname=`echo $name | sed s/lib//`
+
+    license_str="This FFmpeg build is distributed under the terms of the GNU $license.\r\n"
+    test "$license" = "unredistributable" &&
+        license_str="This FFmpeg build may not be distributed publicly.\r\n"
+
+    cat <<EOF >$TMPRC
+#include <WinVer.h>
+#include "version.h"
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION $version_commas
+ PRODUCTVERSION $version_commas
+ FILEFLAGSMASK 0x17L
+ FILEFLAGS 0x0L
+ FILEOS VOS__WINDOWS32
+ FILETYPE VFT_DLL
+ FILESUBTYPE 0x0L
+BEGIN
+    BLOCK "StringFileInfo"
+    BEGIN
+        BLOCK "040904b0"
+        BEGIN
+            VALUE "Comments",            "$license_str"
+                                         "Source code is available at http://ffmpeg.org"
+            VALUE "CompanyName",         "FFmpeg"
+            VALUE "FileDescription",     "$description"
+            VALUE "FileVersion",         "$version"
+            VALUE "InternalName",        "$name"
+            VALUE "LegalCopyright",      "(C) 2000-2008 Fabrice Bellard, et al."
+            VALUE "LegalTrademarks",     "FFmpeg"
+            VALUE "OriginalFilename",    "$dllname-$major.dll"
+            VALUE "ProductName",         "$name"
+            VALUE "ProductVersion",      FFMPEG_VERSION
+        END
+    END
+    BLOCK "VarFileInfo"
+    BEGIN
+        VALUE "Translation", 0x409, 1200
+    END
+END
+EOF
+
+    if ! cmp -s $TMPRC $name/dllinfo.rc; then
+        mv -f $TMPRC $name/dllinfo.rc
+    fi
+    rm -f $TMPRC
+}
+
+if test "$dllinfo" = "yes"; then
+    dllinfo_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
+    dllinfo_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION"
+    dllinfo_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION"
+    dllinfo_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION"
+    dllinfo_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION"
+    dllinfo_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
+    dllinfo_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION"
+fi