[FFmpeg-devel] [PATCH] Add versioning information to dlls

Ramiro Polla ramiro
Thu May 22 05:46:51 CEST 2008


>>> This patch adds support for generating .rc files and then linking 
>>> them with the dlls created by ffmpeg.  This information can be used 
>>> to identify the product version by the user and is also available to 
>>> installer programs for ease of updating etc.
>>>     
>>
>> Diego, Mans, ping?

[...]

> +# 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//`
> +    
> +    case "$license" in
> +        'GPL' | 'LGPL')
> +            license_str="This FFmpeg build is distributed under the terms of the GNU $license.\r\n"
> +            ;;
> +        'unredistributable')
> +            license_str="This FFmpeg build may not be distributed publicly.\r\n"
> +            ;;
> +    esac

I'm pretty sure this can be simplified. Something like:

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"

Get the version information from av*.h

[...]
> Index: subdir.mak
> ===================================================================
> --- subdir.mak	(revision 13216)
> +++ subdir.mak	(working copy)
> @@ -27,7 +27,9 @@
>  $(SUBDIR)$(SLIBNAME): $(SUBDIR)$(SLIBNAME_WITH_MAJOR)
>  	cd ./$(SUBDIR) && $(LN_S) $(SLIBNAME_WITH_MAJOR) $(SLIBNAME)
>  
> -$(SUBDIR)$(SLIBNAME_WITH_MAJOR): $(OBJS)
> +$(SUBDIR)$(SLIB_EXTRA_OBJS): $(SLIB_EXTRA_DEP) 
                                                  ^
> +
> +$(SUBDIR)$(SLIBNAME_WITH_MAJOR): $(OBJS) $(SUBDIR)$(SLIB_EXTRA_OBJS)
>  	$(SLIB_CREATE_DEF_CMD)
>  	$(CC) $(SHFLAGS) $(FFLDFLAGS) -o $$@ $$^ $(FFEXTRALIBS) $(EXTRAOBJS)
>  	$(SLIB_EXTRA_CMD)
> Index: common.mak
> ===================================================================
> --- common.mak	(revision 13216)
> +++ common.mak	(working copy)
> @@ -32,6 +32,9 @@
>  %.d: %.cpp
>  	$(DEPEND_CMD) > $@
>  
> +%.rco: %.rc
> +	windres -I$(BUILD_ROOT) $< $@
> +
>  %$(EXESUF): %.c
>  
>  install: install-libs install-headers
> @@ -66,9 +69,9 @@
>  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 
                                ^

There are a few trailing whitespaces in your patch. It's an item on the 
patch submission checklist Diego pointed out.

You can also let the dependency files (.d) check for version.h and 
av*.h. Just add a rule for %.d: %.rc, add the extra objs to DEPS, and 
make a DEPEND_CMD for .rc files that treats them as C files (-xc flag 
for gcc). That way you can avoid SLIB_EXTRA_DEP.

Ramiro Polla




More information about the ffmpeg-devel mailing list