[llvm] r238740 - In MSVC builds embed a VERSIONINFO resource in our exe and DLL files.

Sean Silva chisophugis at gmail.com
Mon Jun 1 18:40:17 PDT 2015


Did this ever get discussed? http://reviews.llvm.org/D7828 seems empty.

-- Sean Silva

On Mon, Jun 1, 2015 at 5:41 AM, Greg Bedwell <greg_bedwell at sn.scee.net>
wrote:

> Author: gbedwell
> Date: Mon Jun  1 07:41:55 2015
> New Revision: 238740
>
> URL: http://llvm.org/viewvc/llvm-project?rev=238740&view=rev
> Log:
> In MSVC builds embed a VERSIONINFO resource in our exe and DLL files.
>
> This embeds Windows version information into our executables and DLLs.
> The most visible place to view this data is in the details tab of the file
> properties window in Windows explorer.
>
> Differential Revision: http://reviews.llvm.org/D7828
>
> Added:
>     llvm/trunk/resources/
>     llvm/trunk/resources/windows_version_resource.rc
> Modified:
>     llvm/trunk/cmake/modules/AddLLVM.cmake
>
> Modified: llvm/trunk/cmake/modules/AddLLVM.cmake
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/cmake/modules/AddLLVM.cmake?rev=238740&r1=238739&r2=238740&view=diff
>
> ==============================================================================
> --- llvm/trunk/cmake/modules/AddLLVM.cmake (original)
> +++ llvm/trunk/cmake/modules/AddLLVM.cmake Mon Jun  1 07:41:55 2015
> @@ -228,6 +228,78 @@ function(set_output_directory target bin
>    endif()
>  endfunction()
>
> +# If on Windows and building with MSVC, add the resource script
> containing the
> +# VERSIONINFO data to the project.  This embeds version resource
> information
> +# into the output .exe or .dll.
> +# TODO: Enable for MinGW Windows builds too.
> +#
> +function(add_windows_version_resource_file OUT_VAR)
> +  set(sources ${ARGN})
> +  if (MSVC)
> +    set(resource_file
> ${LLVM_SOURCE_DIR}/resources/windows_version_resource.rc)
> +    set(sources ${sources} ${resource_file})
> +    source_group("Resource Files" ${resource_file})
> +    set(windows_resource_file ${resource_file} PARENT_SCOPE)
> +  endif(MSVC)
> +
> +  set(${OUT_VAR} ${sources} PARENT_SCOPE)
> +endfunction(add_windows_version_resource_file)
> +
> +# set_windows_version_resource_properties(name resource_file...
> +#   VERSION_MAJOR int
> +#     Optional major version number (defaults to LLVM_VERSION_MAJOR)
> +#   VERSION_MINOR int
> +#     Optional minor version number (defaults to LLVM_VERSION_MINOR)
> +#   VERSION_PATCHLEVEL int
> +#     Optional patchlevel version number (defaults to LLVM_VERSION_PATCH)
> +#   VERSION_STRING
> +#     Optional version string (defaults to PACKAGE_VERSION)
> +#   PRODUCT_NAME
> +#     Optional product name string (defaults to "LLVM")
> +#   )
> +function(set_windows_version_resource_properties name resource_file)
> +  cmake_parse_arguments(ARG
> +    ""
> +
> "VERSION_MAJOR;VERSION_MINOR;VERSION_PATCHLEVEL;VERSION_STRING;PRODUCT_NAME"
> +    ""
> +    ${ARGN})
> +
> +  if (NOT DEFINED ARG_VERSION_MAJOR)
> +    set(ARG_VERSION_MAJOR ${LLVM_VERSION_MAJOR})
> +  endif()
> +
> +  if (NOT DEFINED ARG_VERSION_MINOR)
> +    set(ARG_VERSION_MINOR ${LLVM_VERSION_MINOR})
> +  endif()
> +
> +  if (NOT DEFINED ARG_VERSION_PATCHLEVEL)
> +    set(ARG_VERSION_PATCHLEVEL ${LLVM_VERSION_PATCH})
> +  endif()
> +
> +  if (NOT DEFINED ARG_VERSION_STRING)
> +    set(ARG_VERSION_STRING ${PACKAGE_VERSION})
> +  endif()
> +
> +  if (NOT DEFINED ARG_PRODUCT_NAME)
> +    set(ARG_PRODUCT_NAME "LLVM")
> +  endif()
> +
> +  get_target_property(target_location ${name} LOCATION)
> +  get_filename_component(target_filename ${target_location} NAME)
> +
> +  set_property(SOURCE ${resource_file}
> +               PROPERTY COMPILE_DEFINITIONS
> +               "RC_VERSION_FIELD_1=${ARG_VERSION_MAJOR}"
> +               "RC_VERSION_FIELD_2=${ARG_VERSION_MINOR}"
> +               "RC_VERSION_FIELD_3=${ARG_VERSION_PATCHLEVEL}"
> +               "RC_VERSION_FIELD_4=0"
> +               "RC_FILE_VERSION=\"${ARG_VERSION_STRING}\""
> +               "RC_INTERNAL_NAME=\"${name}\""
> +               "RC_ORIGINAL_FILENAME=\"${target_filename}\""
> +               "RC_PRODUCT_NAME=\"${ARG_PRODUCT_NAME}\""
> +               "RC_PRODUCT_VERSION=\"${ARG_VERSION_STRING}\"")
> +endfunction(set_windows_version_resource_properties)
> +
>  # llvm_add_library(name sources...
>  #   SHARED;STATIC
>  #     STATIC by default w/o BUILD_SHARED_LIBS.
> @@ -316,10 +388,17 @@ function(llvm_add_library name)
>    if(ARG_MODULE)
>      add_library(${name} MODULE ${ALL_FILES})
>    elseif(ARG_SHARED)
> +    add_windows_version_resource_file(ALL_FILES ${ALL_FILES})
>      add_library(${name} SHARED ${ALL_FILES})
>    else()
>      add_library(${name} STATIC ${ALL_FILES})
>    endif()
> +
> +  if(DEFINED windows_resource_file)
> +    set_windows_version_resource_properties(${name}
> ${windows_resource_file})
> +    set(windows_resource_file ${windows_resource_file} PARENT_SCOPE)
> +  endif()
> +
>    set_output_directory(${name} ${LLVM_RUNTIME_OUTPUT_INTDIR}
> ${LLVM_LIBRARY_OUTPUT_INTDIR})
>    llvm_update_compile_flags(${name})
>    add_link_opts( ${name} )
> @@ -482,11 +561,18 @@ endmacro(add_llvm_loadable_module name)
>
>  macro(add_llvm_executable name)
>    llvm_process_sources( ALL_FILES ${ARGN} )
> +  add_windows_version_resource_file(ALL_FILES ${ALL_FILES})
> +
>    if( EXCLUDE_FROM_ALL )
>      add_executable(${name} EXCLUDE_FROM_ALL ${ALL_FILES})
>    else()
>      add_executable(${name} ${ALL_FILES})
>    endif()
> +
> +  if(DEFINED windows_resource_file)
> +    set_windows_version_resource_properties(${name}
> ${windows_resource_file})
> +  endif()
> +
>    llvm_update_compile_flags(${name})
>    add_link_opts( ${name} )
>
>
> Added: llvm/trunk/resources/windows_version_resource.rc
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/resources/windows_version_resource.rc?rev=238740&view=auto
>
> ==============================================================================
> --- llvm/trunk/resources/windows_version_resource.rc (added)
> +++ llvm/trunk/resources/windows_version_resource.rc Mon Jun  1 07:41:55
> 2015
> @@ -0,0 +1,89 @@
> +// Microsoft Visual C++ resource script for embedding version information.
> +// The format is described at:
> +//
> http://msdn.microsoft.com/en-gb/library/windows/desktop/aa380599(v=vs.85).aspx
> +// The VERSIONINFO resource is described at:
> +//
> https://msdn.microsoft.com/en-gb/library/windows/desktop/aa381058(v=vs.85).aspx
> +
> +
> +// Default values for required fields.
> +
> +#ifndef RC_VERSION_FIELD_1
> +#define RC_VERSION_FIELD_1 0
> +#endif
> +
> +#ifndef RC_VERSION_FIELD_2
> +#define RC_VERSION_FIELD_2 0
> +#endif
> +
> +#ifndef RC_VERSION_FIELD_3
> +#define RC_VERSION_FIELD_3 0
> +#endif
> +
> +#ifndef RC_VERSION_FIELD_4
> +#define RC_VERSION_FIELD_4 0
> +#endif
> +
> +#ifndef RC_COMPANY_NAME
> +#define RC_COMPANY_NAME ""
> +#endif
> +
> +#ifndef RC_FILE_DESCRIPTION
> +#define RC_FILE_DESCRIPTION ""
> +#endif
> +
> +#ifndef RC_FILE_VERSION
> +#define RC_FILE_VERSION ""
> +#endif
> +
> +#ifndef RC_INTERNAL_NAME
> +#define RC_INTERNAL_NAME ""
> +#endif
> +
> +#ifndef RC_ORIGINAL_FILENAME
> +#define RC_ORIGINAL_FILENAME ""
> +#endif
> +
> +#ifndef RC_PRODUCT_NAME
> +#define RC_PRODUCT_NAME ""
> +#endif
> +
> +#ifndef RC_PRODUCT_VERSION
> +#define RC_PRODUCT_VERSION ""
> +#endif
> +
> +
> +1 VERSIONINFO
> +FILEVERSION
> RC_VERSION_FIELD_1,RC_VERSION_FIELD_2,RC_VERSION_FIELD_3,RC_VERSION_FIELD_4
> +BEGIN
> +  BLOCK "StringFileInfo"
> +  BEGIN
> +    BLOCK "040904B0"
> +    BEGIN
> +      // Required strings
> +      VALUE "CompanyName", RC_COMPANY_NAME
> +      VALUE "FileDescription", RC_FILE_DESCRIPTION
> +      VALUE "FileVersion", RC_FILE_VERSION
> +      VALUE "InternalName", RC_INTERNAL_NAME
> +      VALUE "OriginalFilename", RC_ORIGINAL_FILENAME
> +      VALUE "ProductName", RC_PRODUCT_NAME
> +      VALUE "ProductVersion", RC_PRODUCT_VERSION
> +
> +      // Optional strings
> +#ifdef RC_COMMENTS
> +        VALUE "Comments", RC_COMMENTS
> +#endif
> +
> +#ifdef RC_COPYRIGHT
> +        VALUE "LegalCopyright", RC_COPYRIGHT
> +#endif
> +    END
> +  END
> +
> +  BLOCK "VarFileInfo"
> +  BEGIN
> +    // The translation must correspond to the above BLOCK inside
> StringFileInfo
> +    // langID     0x0409  U.S. English
> +    // charsetID  0x04B0  Unicode
> +    VALUE "Translation", 0x0409, 0x04B0
> +  END
> +END
> \ No newline at end of file
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150601/7cfe2d5b/attachment.html>


More information about the llvm-commits mailing list