From 4e6ec68e8aeaf5efd03eea4ee004008eca6966b3 Mon Sep 17 00:00:00 2001 From: Harsha Raghu Date: Fri, 28 Jul 2023 21:24:49 +0530 Subject: [PATCH] Implement versioning (#163) * driver: Implement versioning for msbuild project - While in CI have to overwrite version.info file * Implement versioning for android project * Update release.yml --- .github/workflows/release.yml | 68 +++++------ code/common/src/PVRGlobals.h | 10 +- code/common/src/version.info | 2 + code/mobile/android/PhoneVR/app/build.gradle | 8 +- .../viritualisres/phonevr/InitActivity.kt | 2 +- .../viritualisres/phonevr/MainActivity.kt | 2 +- .../mobile/android/PhoneVR/version.properties | 2 + code/mobile/android/PhoneVR/versioning.gradle | 18 +++ code/windows/PhoneVR/PhoneVR/PVRSockets.cpp | 5 +- code/windows/PhoneVR/PhoneVR/PhoneVR.vcxproj | 27 ++++- .../PhoneVR/PhoneVR/PhoneVR.vcxproj.filters | 13 ++ code/windows/PhoneVR/PhoneVR/driver.cpp | 2 +- code/windows/PhoneVR/PhoneVR/resource.h | 14 +++ code/windows/PhoneVR/PhoneVR/resource.rc | 112 ++++++++++++++++++ 14 files changed, 235 insertions(+), 50 deletions(-) create mode 100644 code/common/src/version.info create mode 100644 code/mobile/android/PhoneVR/version.properties create mode 100644 code/mobile/android/PhoneVR/versioning.gradle create mode 100644 code/windows/PhoneVR/PhoneVR/resource.h create mode 100644 code/windows/PhoneVR/PhoneVR/resource.rc diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 94322e1b..bd3ff4d0 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -21,7 +21,7 @@ on: workflow_dispatch: inputs: version: - description: "Version string (eg. v0.3-beta)" + description: "Version string (eg. 0.3.1-beta)" required: false default: "" @@ -31,53 +31,44 @@ jobs: outputs: upload_url: ${{ steps.create_release.outputs.upload_url }} release_id: ${{ steps.create_release.outputs.id }} + release_ref: ${{ steps.output_ref.outputs.release_ref }} steps: - ### TODO: #74 Stream Line Versioning VisualStudio Desktop Project + Android Studio + ALVR Linking, then can automate bumping - # - name: Configure git - # run: git config --global core.autocrlf false + - name: Configure git + run: git config --global core.autocrlf false - # - uses: actions/checkout@v2 + - uses: actions/checkout@v2 - # - uses: actions-rs/toolchain@v1 - # with: - # toolchain: stable + - name: Bump version + if: github.event.inputs.version != '' + run: | + $version = "${{ github.event.inputs.version }}" + $versionInt,$suffix = $version.Split('-') + $versioncomma = $versionInt.replace('.',',') - # - name: Bump version - # id: bump_version - # env: - # RUST_BACKTRACE: 1 - # run: | - # $versionarg = "${{ github.event.inputs.version }}" - # $versionarg = If ($versionarg.Length -gt 0) { "--version $versionarg" } else { "" } - # $out = cargo xtask bump $versionarg.split() - # echo $out - # cargo update -p alvr_common - # echo "::set-output name=version_tag::$(echo $out | sls -CaseSensitive -Pattern '^v.*$')" + echo "#define PVR_BINVERSION $versioncomma" "#define PVR_STRVERSION `"$version`"" > code/common/src/version.info + echo "VERSION=$versionInt" "VERSION_NAME=$version" > code/mobile/android/PhoneVR/version.properties - # - name: Push changes - # uses: stefanzweifel/git-auto-commit-action@v4 - # with: - # commit_message: "[Auto] Bump version" + - name: Push changes + if: github.event.inputs.version != '' + uses: stefanzweifel/git-auto-commit-action@v4 + with: + commit_message: "[Auto] Bump version" + tagging_message: v${{ github.event.inputs.version }} - # - name: Output ref for later checkouts - # id: output_ref - # run: echo "::set-output name=release_ref::$(git rev-parse HEAD)" + - name: Output ref for later checkouts + id: output_ref + run: echo "::set-output name=release_ref::$(git rev-parse HEAD)" - name: Create Release id: create_release uses: ncipollo/release-action@v1 - # env: - # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: - # tag_name: ${{ steps.bump_version.outputs.version_tag }} - tag: ${{ github.event.inputs.version }} - # release_name: PhoneVR ${{ steps.bump_version.outputs.version_tag }} - name: PhoneVR ${{ github.event.inputs.version }} + tag: v${{ github.event.inputs.version }} + name: PhoneVR v${{ github.event.inputs.version }} draft: true prerelease: false generateReleaseNotes: true - commit: master - # commitish: ${{ steps.output_ref.outputs.release_ref }} + commit: ${{ steps.output_ref.outputs.release_ref }} Build_PVR_Server: name: Build PhoneVR Server @@ -91,6 +82,8 @@ jobs: steps: - uses: actions/checkout@v3 + with: + ref: ${{ needs.prepare_release.outputs.release_ref }} # https://github.com/actions/runner-images/issues/842#issuecomment-1495115166 - name: Install MSVC 2015 (v140) and Windows 8.1 SDK @@ -131,6 +124,7 @@ jobs: steps: - uses: actions/checkout@v3 with: + ref: ${{ needs.prepare_release.outputs.release_ref }} submodules: 'true' # Set Current Date As Env Variable @@ -234,7 +228,7 @@ jobs: with: upload_url: ${{ needs.prepare_release.outputs.upload_url }} asset_path: ${{env.GRADLE_DIR}}/${{ env.MAIN_PROJECT_MODULE }}/build/outputs/apk/release/PhoneVR.apk - asset_name: PhoneVR-${{ github.event.inputs.version }}.apk + asset_name: PhoneVR-v${{ github.event.inputs.version }}.apk asset_content_type: application/vnd.android.package-archive # Step is needed because the PVRServerBuild runs as a matrix and adds files to the same artifact @@ -245,6 +239,8 @@ jobs: steps: - uses: actions/checkout@v3 + with: + ref: ${{ needs.prepare_release.outputs.release_ref }} - uses: actions/download-artifact@v3 with: @@ -269,5 +265,5 @@ jobs: with: upload_url: ${{ needs.prepare_release.outputs.upload_url }} asset_path: ${{ env.PROJECT_NAME }}-Server-Release.zip - asset_name: ${{ env.PROJECT_NAME }}-Server-${{ github.event.inputs.version }}.zip + asset_name: ${{ env.PROJECT_NAME }}-Server-v${{ github.event.inputs.version }}.zip asset_content_type: application/gzip \ No newline at end of file diff --git a/code/common/src/PVRGlobals.h b/code/common/src/PVRGlobals.h index 730956ee..e52bd734 100644 --- a/code/common/src/PVRGlobals.h +++ b/code/common/src/PVRGlobals.h @@ -93,8 +93,14 @@ inline uint32_t vers2uint(uint8_t rel, uint8_t sub, uint16_t patch) { return rel << 24 | sub << 16 | patch; } -#define PVR_SERVER_VERSION vers2uint(0, 6, 0) -#define PVR_CLIENT_VERSION vers2uint(0, 6, 0) +inline std::string versunint2str(uint32_t ver) { + return ( std::to_string(ver >> 24) + "." + std::to_string((ver >> 16) % 0x100) + "." + std::to_string((ver & 0xffff)) ); +} + +#include "version.info" + +#define PVR_SERVER_VERSION vers2uint(PVR_BINVERSION) +#define PVR_CLIENT_VERSION vers2uint(PVR_BINVERSION) std::wstring _GetExePath(void); diff --git a/code/common/src/version.info b/code/common/src/version.info new file mode 100644 index 00000000..0727907a --- /dev/null +++ b/code/common/src/version.info @@ -0,0 +1,2 @@ +#define PVR_BINVERSION 1,0,0 +#define PVR_STRVERSION "1.0.0-beta" diff --git a/code/mobile/android/PhoneVR/app/build.gradle b/code/mobile/android/PhoneVR/app/build.gradle index 92ffe246..10a35768 100644 --- a/code/mobile/android/PhoneVR/app/build.gradle +++ b/code/mobile/android/PhoneVR/app/build.gradle @@ -3,6 +3,7 @@ apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' apply plugin: 'com.android.application' apply plugin: 'com.google.gms.google-services' +apply from: '../versioning.gradle' def keystorePropertiesFile = rootProject.file("keystore.properties") def keystoreProperties = new Properties() @@ -37,8 +38,8 @@ android { applicationId "viritualisres.phonevr" minSdkVersion 24 targetSdkVersion 33 - versionCode Integer.valueOf(System.env.APPVEYOR_BUILD_NUMBER ?: 1) - versionName System.getenv("APPVEYOR_PVR_TAG") + versionCode buildVersionCode() + versionName buildVersionName() testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunnerArguments useTestStorageService: 'true' @@ -54,7 +55,7 @@ android { defaultPublishConfig 'release' publishNonDefault true - archivesBaseName = "PhoneVR-v$versionCode($versionName)" + archivesBaseName = "PhoneVR-v$versionName" } buildTypes { release { @@ -178,4 +179,3 @@ preBuild.dependsOn(buildClientLib) build.dependsOn(extractNdk) build.dependsOn(buildClientLib) clean.dependsOn(deleteNdk) - diff --git a/code/mobile/android/PhoneVR/app/src/main/java/viritualisres/phonevr/InitActivity.kt b/code/mobile/android/PhoneVR/app/src/main/java/viritualisres/phonevr/InitActivity.kt index 2bbae74a..29ce1c41 100644 --- a/code/mobile/android/PhoneVR/app/src/main/java/viritualisres/phonevr/InitActivity.kt +++ b/code/mobile/android/PhoneVR/app/src/main/java/viritualisres/phonevr/InitActivity.kt @@ -19,7 +19,7 @@ class InitActivity : AppCompatActivity() { setContentView(R.layout.activity_init) val tvVersion : TextView = findViewById(R.id.head); - tvVersion.text = "PhoneVR v" + BuildConfig.VERSION_NAME + "_" + BuildConfig.VERSION_CODE; + tvVersion.text = "PhoneVR v" + BuildConfig.VERSION_NAME; val result = HtmlCompat.fromHtml("Readme.md", HtmlCompat.FROM_HTML_MODE_LEGACY); val tvBody = findViewById(R.id.body); diff --git a/code/mobile/android/PhoneVR/app/src/main/java/viritualisres/phonevr/MainActivity.kt b/code/mobile/android/PhoneVR/app/src/main/java/viritualisres/phonevr/MainActivity.kt index 0775ffb0..1146ab88 100644 --- a/code/mobile/android/PhoneVR/app/src/main/java/viritualisres/phonevr/MainActivity.kt +++ b/code/mobile/android/PhoneVR/app/src/main/java/viritualisres/phonevr/MainActivity.kt @@ -54,7 +54,7 @@ class MainActivity : AppCompatActivity() { } val VersionTV : TextView = findViewById(R.id.tViewVersion); - VersionTV.text = "PhoneVR v" + BuildConfig.VERSION_NAME + "_" + BuildConfig.VERSION_CODE; + VersionTV.text = "PhoneVR v" + BuildConfig.VERSION_NAME; // MediaCodecInfo[] dmsadas = (new MediaCodecList(MediaCodecList.REGULAR_CODECS)).getCodecInfos(); // for (MediaCodecInfo mci : dmsadas){ diff --git a/code/mobile/android/PhoneVR/version.properties b/code/mobile/android/PhoneVR/version.properties new file mode 100644 index 00000000..244a4291 --- /dev/null +++ b/code/mobile/android/PhoneVR/version.properties @@ -0,0 +1,2 @@ +VERSION=1.0.0 +VERSION_NAME=1.0.0-beta diff --git a/code/mobile/android/PhoneVR/versioning.gradle b/code/mobile/android/PhoneVR/versioning.gradle new file mode 100644 index 00000000..81287453 --- /dev/null +++ b/code/mobile/android/PhoneVR/versioning.gradle @@ -0,0 +1,18 @@ +ext { + versionProps = { + def props = new Properties() + file("../version.properties").withInputStream { props.load(it) } + return props + } + buildVersionCode = { + def props = versionProps() + def version = props.getProperty("VERSION") + def (major, minor, patch) = version.toLowerCase().tokenize('.') + (major, minor, patch) = [major, minor, patch].collect { it.toInteger() } + (major * 10000) + (minor * 100) + patch + } + buildVersionName = { + def props = versionProps() + return props.getProperty("VERSION_NAME") + } +} \ No newline at end of file diff --git a/code/windows/PhoneVR/PhoneVR/PVRSockets.cpp b/code/windows/PhoneVR/PhoneVR/PVRSockets.cpp index 512449fb..978486da 100644 --- a/code/windows/PhoneVR/PhoneVR/PVRSockets.cpp +++ b/code/windows/PhoneVR/PhoneVR/PVRSockets.cpp @@ -92,9 +92,12 @@ void PVRStartConnectionListener(function callback) { auto msgType = (PVR_MSG)buf[3]; if (msgType == PVR_MSG::PAIR_HMD || msgType == PVR_MSG::PAIR_PHONE_CTRL) { if (vec2uint(&buf[4]) >= PVR_CLIENT_VERSION) + { + PVR_DB_I("[PVRSockets::PVRStartConnectionListener] Server v" + versunint2str(PVR_SERVER_VERSION) + " connected to Client v" + versunint2str(vec2uint(&buf[4])) ); callback(ip, msgType); + } else - PVR_DB_I("[PVRSockets::PVRStartConnectionListener] Device " + ip + " needs to be updated"); + PVR_DB_I("[PVRSockets::PVRStartConnectionListener] Device " + ip + " needs to be updated, " + "Server v" + versunint2str(PVR_SERVER_VERSION) + " connected to Client v" + versunint2str(vec2uint(&buf[4]))); } else PVR_DB_I("[PVRSockets::PVRStartConnectionListener] Invalid message from device: " + ip); diff --git a/code/windows/PhoneVR/PhoneVR/PhoneVR.vcxproj b/code/windows/PhoneVR/PhoneVR/PhoneVR.vcxproj index 2e84d30f..c640f8fb 100644 --- a/code/windows/PhoneVR/PhoneVR/PhoneVR.vcxproj +++ b/code/windows/PhoneVR/PhoneVR/PhoneVR.vcxproj @@ -94,13 +94,16 @@ Level1 Disabled _WIN32_WINNT=0x0601;WIN32;_DEBUG;_WINDOWS;_USRDLL;PHONEVR_EXPORTS;%(PreprocessorDefinitions) - $(SolutionDir)\$(ProjectDir);$(SolutionDir)\..\..\common\src;$(SolutionDir)\..\libs\json;$(SolutionDir)\..\libs\x264\include;$(SolutionDir)\..\..\common\libs\asio;$(SolutionDir)\..\..\common\libs\eigen;$(SolutionDir)\..\..\common\src\Utils;%(AdditionalIncludeDirectories) + $(SolutionDir)\$(ProjectName);$(SolutionDir)\..\..\common\src;$(SolutionDir)\..\libs\json;$(SolutionDir)\..\libs\x264\include;$(SolutionDir)\..\..\common\libs\asio;$(SolutionDir)\..\..\common\libs\eigen;$(SolutionDir)\..\..\common\src\Utils stdcpplatest Windows $(SolutionDir)\..\libs\x264\lib\x86;%(AdditionalLibraryDirectories) + + $(SolutionDir)\..\..\common\src\;%(AdditionalIncludeDirectories) + @@ -109,7 +112,7 @@ Disabled _WIN32_WINNT=0x0601;_DEBUG;_WINDOWS;_USRDLL;PHONEVR_EXPORTS;%(PreprocessorDefinitions) - $(SolutionDir)\$(ProjectName);$(SolutionDir)\..\..\common\src;$(SolutionDir)\..\libs\json;$(SolutionDir)\..\libs\x264\include;$(SolutionDir)\..\..\common\libs\asio;$(SolutionDir)\..\..\common\libs\eigen;$(SolutionDir)\..\..\common\src\Utils;%(AdditionalIncludeDirectories) + $(SolutionDir)\$(ProjectName);$(SolutionDir)\..\..\common\src;$(SolutionDir)\..\libs\json;$(SolutionDir)\..\libs\x264\include;$(SolutionDir)\..\..\common\libs\asio;$(SolutionDir)\..\..\common\libs\eigen;$(SolutionDir)\..\..\common\src\Utils;$(SolutionDir)\..\..\common\src\ stdcpplatest @@ -119,6 +122,9 @@ xcopy "$(SolutionDir)$(Configuration)\$(Platform)" "C:\Program Files (x86)\Steam\steamapps\common\SteamVR\drivers\PVRServer\bin\win64" /h /i /c /k /e /r /y + + $(SolutionDir)\..\..\common\src\;%(AdditionalIncludeDirectories) + @@ -129,7 +135,7 @@ true true _WIN32_WINNT=0x0601;WIN32;NDEBUG;_WINDOWS;_USRDLL;PHONEVR_EXPORTS;%(PreprocessorDefinitions) - $(SolutionDir)\$(ProjectName);$(SolutionDir)\..\..\common\src;$(SolutionDir)\..\libs\json;$(SolutionDir)\..\libs\x264\include;$(SolutionDir)\..\..\common\libs\asio;$(SolutionDir)\..\..\common\libs\eigen;$(SolutionDir)\..\..\common\src\Utils;%(AdditionalIncludeDirectories) + $(SolutionDir)\$(ProjectName);$(SolutionDir)\..\..\common\src;$(SolutionDir)\..\libs\json;$(SolutionDir)\..\libs\x264\include;$(SolutionDir)\..\..\common\libs\asio;$(SolutionDir)\..\..\common\libs\eigen;$(SolutionDir)\..\..\common\src\Utils stdcpplatest @@ -138,6 +144,9 @@ true $(SolutionDir)\..\libs\x264\lib\x86;%(AdditionalLibraryDirectories) + + $(SolutionDir)\..\..\common\src\;%(AdditionalIncludeDirectories) + @@ -148,7 +157,7 @@ true true _WIN32_WINNT=0x0601;NDEBUG;_WINDOWS;_USRDLL;PHONEVR_EXPORTS;%(PreprocessorDefinitions) - $(SolutionDir)\$(ProjectName);$(SolutionDir)\..\..\common\src;$(SolutionDir)\..\libs\json;$(SolutionDir)\..\libs\x264\include;$(SolutionDir)\..\..\common\libs\asio;$(SolutionDir)\..\..\common\libs\eigen;$(SolutionDir)\..\..\common\src\Utils;%(AdditionalIncludeDirectories) + $(SolutionDir)\$(ProjectName);$(SolutionDir)\..\..\common\src;$(SolutionDir)\..\libs\json;$(SolutionDir)\..\libs\x264\include;$(SolutionDir)\..\..\common\libs\asio;$(SolutionDir)\..\..\common\libs\eigen;$(SolutionDir)\..\..\common\src\Utils stdcpplatest @@ -160,6 +169,9 @@ xcopy "$(SolutionDir)$(Configuration)\$(Platform)" "C:\Program Files (x86)\Steam\steamapps\common\SteamVR\drivers\PVRServer\bin\win64" /h /i /c /k /e /r /y + + $(SolutionDir)\..\..\common\src\;%(AdditionalIncludeDirectories) + @@ -179,6 +191,13 @@ + + + + + + + diff --git a/code/windows/PhoneVR/PhoneVR/PhoneVR.vcxproj.filters b/code/windows/PhoneVR/PhoneVR/PhoneVR.vcxproj.filters index bfd82685..f02b88c2 100644 --- a/code/windows/PhoneVR/PhoneVR/PhoneVR.vcxproj.filters +++ b/code/windows/PhoneVR/PhoneVR/PhoneVR.vcxproj.filters @@ -62,5 +62,18 @@ Header Files + + Header Files + + + + + Resource Files + + + + + Resource Files + \ No newline at end of file diff --git a/code/windows/PhoneVR/PhoneVR/driver.cpp b/code/windows/PhoneVR/PhoneVR/driver.cpp index 7c111002..15218e29 100644 --- a/code/windows/PhoneVR/PhoneVR/driver.cpp +++ b/code/windows/PhoneVR/PhoneVR/driver.cpp @@ -165,7 +165,7 @@ class HMD : public ITrackedDeviceServerDriver, public IVRDisplayComponent, publi VRProperties()->SetBoolProperty(propCont, Prop_DeviceCanPowerOff_Bool, true); //VRProperties()->SetInt32Property(propCont, Prop_DeviceClass_Int32, TrackedDeviceClass_HMD); VRProperties()->SetBoolProperty(propCont, Prop_HasCamera_Bool, false); - VRProperties()->SetStringProperty(propCont, Prop_DriverVersion_String, (to_string(PVR_SERVER_VERSION >> 24) + "." + to_string((PVR_SERVER_VERSION >> 16) % 0x100)).c_str()); + VRProperties()->SetStringProperty(propCont, Prop_DriverVersion_String, versunint2str(PVR_SERVER_VERSION).c_str()); VRProperties()->SetBoolProperty(propCont, Prop_Firmware_ForceUpdateRequired_Bool, false); //TODO implement //VRProperties()->SetBoolProperty(propCont, Prop_ViveSystemButtonFixRequired_Bool, false); // ?? VRProperties()->SetBoolProperty(propCont, Prop_ReportsTimeSinceVSync_Bool, false); diff --git a/code/windows/PhoneVR/PhoneVR/resource.h b/code/windows/PhoneVR/PhoneVR/resource.h new file mode 100644 index 00000000..28f5b8c8 --- /dev/null +++ b/code/windows/PhoneVR/PhoneVR/resource.h @@ -0,0 +1,14 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by version.rc + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 101 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/code/windows/PhoneVR/PhoneVR/resource.rc b/code/windows/PhoneVR/PhoneVR/resource.rc new file mode 100644 index 00000000..97b3f168 --- /dev/null +++ b/code/windows/PhoneVR/PhoneVR/resource.rc @@ -0,0 +1,112 @@ +// Microsoft Visual C++ generated resource script. +// +#pragma code_page(65001) + +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (United States) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""winres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + +#endif // English (United States) resources +///////////////////////////////////////////////////////////////////////////// + + +///////////////////////////////////////////////////////////////////////////// +// English (India) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENN) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_INDIA + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +#include "version.info" + +VS_VERSION_INFO VERSIONINFO + FILEVERSION PVR_BINVERSION,0 + PRODUCTVERSION PVR_BINVERSION,0 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x40004L + FILETYPE 0x2L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "000904b0" + BEGIN + VALUE "CompanyName", "PhoneVR" + VALUE "FileDescription", "PhoneVR Legacy Server DLL" + VALUE "FileVersion", PVR_STRVERSION + VALUE "InternalName", "driver_PVRServer.dll" + VALUE "LegalCopyright", "Copyright (C) 2023" + VALUE "OriginalFilename", "driver_PVRServer.dll" + VALUE "ProductName", "PhoneVR Server" + VALUE "ProductVersion", PVR_STRVERSION + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x9, 1200 + END +END + +#endif // English (India) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED +