#!/bin/sh
#
# Copyright (c) 2012 James Almer
# Copyright (c) 2013 Tiancheng "Timothy" Gu
#
# This file is part of FFmpeg.
#
# FFmpeg is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# FFmpeg is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with FFmpeg; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA

## Help
die() {
    cat <<EOF >&2
This script is used to generate Windows resources file for the FFmpeg libraries.
The output .rc file is to be compiled by windres(1). It is mainly useful for
FFmpeg developers to tweak and regenerate all resources files at once.

Usage: $0 <libname> <comment>

The script will output the file to '<libname>/<libname-without-lib>res.rc'.

Example: $0 libavcodec 'FFmpeg codecs library'
EOF
    exit 1
}

# Script to generate all:
# (to remove prefix '# ' and add 'tools/' as prefix: sed -r 's/^.{2}/tools\//')
# gen-rc libavutil     "FFmpeg utility library"
# gen-rc libavcodec    "FFmpeg codec library"
# gen-rc libavformat   "FFmpeg container format library"
# gen-rc libavdevice   "FFmpeg device handling library"
# gen-rc libavfilter   "FFmpeg audio/video filtering library"
# gen-rc libpostproc   "FFmpeg postprocessing library"
# gen-rc libavresample "Libav audio resampling library"
# gen-rc libswscale    "FFmpeg image rescaling library"
# gen-rc libswresample "FFmpeg audio resampling library"

## Sanity checks and argument parsing
if test $# -lt 2 || test $# -gt 3; then
    die
fi

name=$1
shortname=${name#lib}
comment=$2
capname=`echo $name | awk '{print toupper($0)}'`
version=${capname}_VERSION

mkdir -p "$name"
output="$name/${shortname}res.rc"

## REAL magic
cat <<EOF > $output
/*
 * Windows resource file for $name
 *
 * Copyright (C) 2012 James Almer
 * Copyright (C) 2013 Tiancheng "Timothy" Gu
 *
 * This file is part of FFmpeg.
 *
 * FFmpeg is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * FFmpeg is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with FFmpeg; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 */

#include <windows.h>
#include "$name/version.h"
#include "libavutil/ffversion.h"
#include "config.h"

1 VERSIONINFO
FILEVERSION     ${version}_MAJOR, ${version}_MINOR, ${version}_MICRO, 0
PRODUCTVERSION  ${version}_MAJOR, ${version}_MINOR, ${version}_MICRO, 0
FILEFLAGSMASK   VS_FFI_FILEFLAGSMASK
FILEOS          VOS_NT_WINDOWS32
FILETYPE        VFT_DLL
{
    BLOCK "StringFileInfo"
    {
        BLOCK "040904B0"
        {
            VALUE "CompanyName",      "FFmpeg Project"
            VALUE "FileDescription",  "$comment"
            VALUE "FileVersion",      AV_STRINGIFY($version)
            VALUE "InternalName",     "$name"
            VALUE "LegalCopyright",   "Copyright (C) 2000-" AV_STRINGIFY(CONFIG_THIS_YEAR) " FFmpeg Project"
            VALUE "OriginalFilename", "$shortname" BUILDSUF "-" AV_STRINGIFY(${version}_MAJOR) SLIBSUF
            VALUE "ProductName",      "FFmpeg"
            VALUE "ProductVersion",   FFMPEG_VERSION
        }
    }

    BLOCK "VarFileInfo"
    {
        VALUE "Translation", 0x0409, 0x04B0
    }
}
EOF
