odygrd / quill

Asynchronous Low Latency C++ Logging Library
MIT License
1.36k stars 142 forks source link

Installing with vcpkg unable to be found in cmake #504

Closed ricosolana closed 1 month ago

ricosolana commented 1 month ago

I was going to post this to the vcpkg issue git, but then it seems to fit here better.

Describe the bug Installing quill with vcpkg install quill and running a simple cmake project in Visual Studio fails to locate quill.

Environment

To Reproduce Steps to reproduce the behavior:

  1. Installed latest c++ tools using Visual Studio installer
  2. git clone https://github.com/microsoft/vcpkg
  3. cd vcpkg && bootstrap-vcpkg.bat -disableMetrics && vcpkg.exe integrate install
  4. vcpkg.exe install quill
  5. Launch Visual Studio
  6. Create an sample cmake project, checkmark solution in same folder as project (to avoid multiple folders).
  7. Before add_executable in the CMakeLists.txt add this: find_package(quill CONFIG REQUIRED) and save; it should start the cmake setup.

The error appears.

Expected behavior The cmake setup succeeds without issue.

Failure logs

1> CMake generation started for configuration: 'x64-debug'.
1> Environment settings:
1>     CommandPromptType=Native
1>     DevEnvDir=C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\
1>     ExtensionSdkDir=C:\Program Files (x86)\Microsoft SDKs\Windows Kits\10\ExtensionSDKs
1>     EXTERNAL_INCLUDE=C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.40.33807\include;C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.40.33807\ATLMFC\include;C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\VS\include;C:\Program Files (x86)\Windows Kits\10\include\10.0.20348.0\ucrt;C:\Program Files (x86)\Windows Kits\10\\include\10.0.20348.0\\um;C:\Program Files (x86)\Windows Kits\10\\include\10.0.20348.0\\shared;C:\Program Files (x86)\Windows Kits\10\\include\10.0.20348.0\\winrt;C:\Program Files (x86)\Windows Kits\10\\include\10.0.20348.0\\cppwinrt;C:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\include\um
1>     Framework40Version=v4.0
1>     FrameworkDir=C:\Windows\Microsoft.NET\Framework64\
1>     FrameworkDir64=C:\Windows\Microsoft.NET\Framework64\
1>     FrameworkVersion=v4.0.30319
1>     FrameworkVersion64=v4.0.30319
1>     FSHARPINSTALLDIR=C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\FSharp\Tools
1>     INCLUDE=C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.40.33807\include;C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.40.33807\ATLMFC\include;C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\VS\include;C:\Program Files (x86)\Windows Kits\10\include\10.0.20348.0\ucrt;C:\Program Files (x86)\Windows Kits\10\\include\10.0.20348.0\\um;C:\Program Files (x86)\Windows Kits\10\\include\10.0.20348.0\\shared;C:\Program Files (x86)\Windows Kits\10\\include\10.0.20348.0\\winrt;C:\Program Files (x86)\Windows Kits\10\\include\10.0.20348.0\\cppwinrt;C:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\include\um
1>     LIB=C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.40.33807\ATLMFC\lib\x64;C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.40.33807\lib\x64;C:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\lib\um\x64;C:\Program Files (x86)\Windows Kits\10\lib\10.0.20348.0\ucrt\x64;C:\Program Files (x86)\Windows Kits\10\\lib\10.0.20348.0\\um\x64
1>     LIBPATH=C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.40.33807\ATLMFC\lib\x64;C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.40.33807\lib\x64;C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.40.33807\lib\x86\store\references;C:\Program Files (x86)\Windows Kits\10\UnionMetadata\10.0.20348.0;C:\Program Files (x86)\Windows Kits\10\References\10.0.20348.0;C:\Windows\Microsoft.NET\Framework64\v4.0.30319
1>     NETFXSDKDir=C:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\
1>     Path=C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.40.33807\bin\HostX64\x64;C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\VC\VCPackages;C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\TestWindow;C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer;C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\bin\Roslyn;C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools\x64\;C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\FSharp\Tools;C:\Program Files\Microsoft Visual Studio\2022\Community\Team Tools\DiagnosticsHub\Collector;C:\Program Files (x86)\Windows Kits\10\bin\10.0.20348.0\\x64;C:\Program Files (x86)\Windows Kits\10\bin\\x64;C:\Program Files\Microsoft Visual Studio\2022\Community\\MSBuild\Current\Bin\amd64;C:\Windows\Microsoft.NET\Framework64\v4.0.30319;C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\;C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\Tools\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files\dotnet\;C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit\;C:\Program Files\Git\cmd;C:\Users\rj\AppData\Local\Microsoft\WindowsApps;C:\Users\rj\.dotnet\tools;C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin;C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\Ninja;C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\VC\Linux\bin\ConnectionManagerExe
1>     PROMPT=$P$G
1>     UCRTVersion=10.0.20348.0
1>     UniversalCRTSdkDir=C:\Program Files (x86)\Windows Kits\10\
1>     VCIDEInstallDir=C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\VC\
1>     VCINSTALLDIR=C:\Program Files\Microsoft Visual Studio\2022\Community\VC\
1>     VCToolsInstallDir=C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.40.33807\
1>     VCToolsRedistDir=C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Redist\MSVC\14.40.33807\
1>     VCToolsVersion=14.40.33807
1>     VS170COMNTOOLS=C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\Tools\
1>     VSCMD_ARG_app_plat=Desktop
1>     VSCMD_ARG_HOST_ARCH=x64
1>     VSCMD_ARG_no_logo=1
1>     VSCMD_ARG_TGT_ARCH=x64
1>     VSCMD_DEBUG=5 
1>     VSCMD_VER=17.10.1
1>     VSINSTALLDIR=C:\Program Files\Microsoft Visual Studio\2022\Community\
1>     WindowsLibPath=C:\Program Files (x86)\Windows Kits\10\UnionMetadata\10.0.20348.0;C:\Program Files (x86)\Windows Kits\10\References\10.0.20348.0
1>     WindowsSdkBinPath=C:\Program Files (x86)\Windows Kits\10\bin\
1>     WindowsSdkDir=C:\Program Files (x86)\Windows Kits\10\
1>     WindowsSDKLibVersion=10.0.20348.0\
1>     WindowsSdkVerBinPath=C:\Program Files (x86)\Windows Kits\10\bin\10.0.20348.0\
1>     WindowsSDKVersion=10.0.20348.0\
1>     WindowsSDK_ExecutablePath_x64=C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools\x64\
1>     WindowsSDK_ExecutablePath_x86=C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools\
1>     __DOTNET_ADD_64BIT=1
1>     __DOTNET_PREFERRED_BITNESS=64
1>     __VSCMD_PREINIT_PATH=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files\dotnet\;C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit\;C:\Program Files\Git\cmd;C:\Users\rj\AppData\Local\Microsoft\WindowsApps;C:\Users\rj\.dotnet\tools
1>     SystemDrive=C:
1>     ProgramFiles(x86)=C:\Program Files (x86)
1>     ProgramW6432=C:\Program Files
1>     PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 165 Stepping 2, GenuineIntel
1>     TMP=C:\Users\rj\AppData\Local\Temp
1>     PROCESSOR_ARCHITECTURE=AMD64
1>     ThreadedWaitDialogDpiContext=-4
1>     PkgDefApplicationConfigFile=C:\Users\rj\AppData\Local\Microsoft\VisualStudio\17.0_9a830ca0\devenv.exe.config
1>     PROCESSOR_REVISION=a502
1>     ServiceHubLogSessionKey=F8B5DA52
1>     FPS_BROWSER_APP_PROFILE_STRING=Internet Explorer
1>     FPS_BROWSER_USER_PROFILE_STRING=Default
1>     LOGONSERVER=\\DESKTOP-EJSC2L4
1>     TEMP=C:\Users\rj\AppData\Local\Temp
1>     USERNAME=rj
1>     SystemRoot=C:\Windows
1>     VSSKUEDITION=Community
1>     OneDrive=C:\Users\rj\OneDrive
1>     CommonProgramFiles=C:\Program Files\Common Files
1>     ProgramData=C:\ProgramData
1>     VsPerMonitorDpiAwarenessEnabled.9596=TRUE
1>     VSAPPIDDIR=C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\
1>     HOMEPATH=\Users\rj
1>     COMPUTERNAME=DESKTOP-EJSC2L4
1>     CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files
1>     ALLUSERSPROFILE=C:\ProgramData
1>     CommonProgramW6432=C:\Program Files\Common Files
1>     VS_Perf_Session_GCHeapCount=2
1>     EFC_5108=1
1>     GCExpConfigUsedInSession=3
1>     VisualStudioDir=C:\Users\rj\Documents\Visual Studio 2022
1>     SESSIONNAME=Console
1>     DriverData=C:\Windows\System32\Drivers\DriverData
1>     HOMEDRIVE=C:
1>     windir=C:\Windows
1>     NUMBER_OF_PROCESSORS=6
1>     OS=Windows_NT
1>     ProgramFiles=C:\Program Files
1>     ComSpec=C:\Windows\system32\cmd.exe
1>     PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
1>     VSLANG=1033
1>     PSModulePath=C:\Program Files\WindowsPowerShell\Modules;C:\Windows\system32\WindowsPowerShell\v1.0\Modules
1>     APPDATA=C:\Users\rj\AppData\Roaming
1>     USERDOMAIN=DESKTOP-EJSC2L4
1>     PROCESSOR_LEVEL=6
1>     USERPROFILE=C:\Users\rj
1>     LOCALAPPDATA=C:\Users\rj\AppData\Local
1>     VisualStudioVersion=17.0
1>     VisualStudioEdition=Microsoft Visual Studio Community 2022
1>     USERDOMAIN_ROAMINGPROFILE=DESKTOP-EJSC2L4
1>     PUBLIC=C:\Users\Public
1>     VSAPPIDNAME=devenv.exe
1>     MSBuildLoadMicrosoftTargetsReadOnly=true
1> Command line: "C:\Windows\system32\cmd.exe" /c "%SYSTEMROOT%\System32\chcp.com 65001 >NUL && "C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe"  -G "Ninja"  -DCMAKE_C_COMPILER:STRING="cl.exe" -DCMAKE_CXX_COMPILER:STRING="cl.exe" -DCMAKE_BUILD_TYPE:STRING="Debug" -DCMAKE_INSTALL_PREFIX:PATH="C:/Users/rj/source/repos/CMakeProject1/out/install/x64-debug"   -DCMAKE_MAKE_PROGRAM="C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\Ninja\ninja.exe" "C:\Users\rj\source\repos\CMakeProject1" 2>&1"
1> Working directory: C:/Users/rj/source/repos/CMakeProject1/out/build/x64-debug
1> [CMake] CMake Error at C:\Users\rj\source\repos\CMakeProject1\CMakeLists.txt:14 (find_package):
1> [CMake]   Could not find a package configuration file provided by "quill" with any of
1> [CMake]   the following names:
1> [CMake] 
1> [CMake]     quillConfig.cmake
1> [CMake]     quill-config.cmake
1> [CMake] 
1> [CMake]   Add the installation prefix of "quill" to CMAKE_PREFIX_PATH or set
1> [CMake]   "quill_DIR" to a directory containing one of the above files.  If "quill"
1> [CMake]   provides a separate development package or SDK, be sure it has been
1> [CMake]   installed.
1> [CMake] 
1> [CMake] 
1> [CMake] -- Configuring incomplete, errors occurred!
1> 'C:\Windows\system32\cmd.exe' '/c "%SYSTEMROOT%\System32\chcp.com 65001 >NUL && "C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe"  -G "Ninja"  -DCMAKE_C_COMPILER:STRING="cl.exe" -DCMAKE_CXX_COMPILER:STRING="cl.exe" -DCMAKE_BUILD_TYPE:STRING="Debug" -DCMAKE_INSTALL_PREFIX:PATH="C:/Users/rj/source/repos/CMakeProject1/out/install/x64-debug"   -DCMAKE_MAKE_PROGRAM="C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\Ninja\ninja.exe" "C:\Users\rj\source\repos\CMakeProject1" 2>&1"' execution failed with error: ''C:\Windows\system32\cmd.exe' '/c "%SYSTEMROOT%\System32\chcp.com 65001 >NUL && "C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe"  -G "Ninja"  -DCMAKE_C_COMPILER:STRING="cl.exe" -DCMAKE_CXX_COMPILER:STRING="cl.exe" -DCMAKE_BUILD_TYPE:STRING="Debug" -DCMAKE_INSTALL_PREFIX:PATH="C:/Users/rj/source/repos/CMakeProject1/out/install/x64-debug"   -DCMAKE_MAKE_PROGRAM="C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\Ninja\ninja.exe" "C:\Users\rj\source\repos\CMakeProject1" 2>&1"' returned with exit code: 1'.

Additional context Possibly related, this same error also occurs when using building a different project using quill on Linux, also using the latest vcpkg. I got around this by manually building quill with make (git clone https://github.com/odygrd/quill.git && cd quill && cmake . && make install).

odygrd commented 1 month ago

Hey, I tried to reproduce it, but I am able to use it via vcpkg.

i used the recommended cmake lines from vcpkg in a new vs project and it worked

quill is header-only and can be used from CMake via:

  find_path(QUILL_INCLUDE_DIRS "quill/Backend.h")
  target_include_directories(main PRIVATE ${QUILL_INCLUDE_DIRS})

Here is the commands i ran and the output on my windows machine


PS C:\Users\odygr> git clone https://github.com/microsoft/vcpkg
Cloning into 'vcpkg'...
remote: Enumerating objects: 241203, done.
remote: Counting objects: 100% (412/412), done.
remote: Compressing objects: 100% (294/294), done.
remote: Total 241203 (delta 204), reused 260 (delta 118), pack-reused 240791
Receiving objects: 100% (241203/241203), 71.70 MiB | 32.69 MiB/s, done.
Resolving deltas: 100% (160569/160569), done.
Updating files: 100% (11527/11527), done.
PS C:\Users\odygr> cd .\vcpkg\
PS C:\Users\odygr\vcpkg> ls

    Directory: C:\Users\odygr\vcpkg

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        21/07/2024     23:02                .github
d-----        21/07/2024     23:02                docs
d-----        21/07/2024     23:02                ports
d-----        21/07/2024     23:02                scripts
d-----        21/07/2024     23:02                toolsrc
d-----        21/07/2024     23:02                triplets
d-----        21/07/2024     23:02                versions
-a----        21/07/2024     23:02            141 .gitattributes
-a----        21/07/2024     23:02           5590 .gitignore
-a----        21/07/2024     23:02              0 .vcpkg-root
-a----        21/07/2024     23:02            102 bootstrap-vcpkg.bat
-a----        21/07/2024     23:02            109 bootstrap-vcpkg.sh
-a----        21/07/2024     23:02           2432 CONTRIBUTING.md
-a----        21/07/2024     23:02           2785 CONTRIBUTING_pt.md
-a----        21/07/2024     23:02           2186 CONTRIBUTING_zh.md
-a----        21/07/2024     23:02           1073 LICENSE.txt
-a----        21/07/2024     23:02           2334 NOTICE.txt
-a----        21/07/2024     23:02           2538 NOTICE_pt.txt
-a----        21/07/2024     23:02           6922 README.md
-a----        21/07/2024     23:02           2757 SECURITY.md
-a----        21/07/2024     23:02            923 shell.nix

PS C:\Users\odygr\vcpkg> .\bootstrap-vcpkg.bat
Downloading https://github.com/microsoft/vcpkg-tool/releases/download/2024-07-10/vcpkg.exe -> C:\Users\odygr\vcpkg\vcpkg.exe... done.
Validating signature... done.

vcpkg package management program version 2024-07-10-d2dfc73769081bdd9b782d08d27794780b7a99b9

See LICENSE.txt for license information.
Telemetry
---------
vcpkg collects usage data in order to help us improve your experience.
The data collected by Microsoft is anonymous.
You can opt-out of telemetry by re-running the bootstrap-vcpkg script with -disableMetrics,
passing --disable-metrics to vcpkg on the command line,
or by setting the VCPKG_DISABLE_METRICS environment variable.

Read more about vcpkg telemetry at docs/about/privacy.md

PS C:\Users\odygr\vcpkg> .\vcpkg.exe integrate install
Applied user-wide integration for this vcpkg root.
CMake projects should use: "-DCMAKE_TOOLCHAIN_FILE=C:/Users/odygr/vcpkg/scripts/buildsystems/vcpkg.cmake"

All MSBuild C++ projects can now #include any installed libraries. Linking will be handled automatically. Installing new libraries will make them instantly available.

PS C:\Users\odygr\vcpkg> .\vcpkg.exe list
No packages are installed. Did you mean `search`?

PS C:\Users\odygr\vcpkg> .\vcpkg.exe install quill
Computing installation plan...
A suitable version of cmake was not found (required v3.29.2).
Downloading https://github.com/Kitware/CMake/releases/download/v3.29.2/cmake-3.29.2-windows-i386.zip
Extracting cmake...
The following packages will be built and installed:
    quill:x64-windows@5.0.0
Detecting compiler hash for triplet x64-windows...
A suitable version of powershell-core was not found (required v7.2.21).
Downloading https://github.com/PowerShell/PowerShell/releases/download/v7.2.21/PowerShell-7.2.21-win-x64.zip
Extracting powershell-core...
Compiler found: C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.39.33519/bin/Hostx64/x64/cl.exe
A suitable version of 7zip was not found (required v24.6.0).
Downloading https://github.com/ip7z/7zip/releases/download/24.06/7z2406-extra.7z
Extracting 7zip...
Restored 0 package(s) from C:\Users\odygr\AppData\Local\vcpkg\archives in 246 us. Use --debug to see more details.
Installing 1/1 quill:x64-windows@5.0.0...
Building quill:x64-windows@5.0.0...
-- Downloading https://github.com/odygrd/quill/archive/v5.0.0.tar.gz -> odygrd-quill-v5.0.0.tar.gz...
-- Extracting source C:/Users/odygr/vcpkg/downloads/odygrd-quill-v5.0.0.tar.gz
-- Using source at C:/Users/odygr/vcpkg/buildtrees/quill/src/v5.0.0-93905edf62.clean
-- Installing: C:/Users/odygr/vcpkg/packages/quill_x64-windows/share/quill/copyright
-- Performing post-build validation
Stored binaries in 1 destinations in 73.4 ms.
Elapsed time to handle quill:x64-windows: 1.6 s
quill:x64-windows package ABI: 2d00975e59ec47390f099fe6d5f72027ac3f8ec40f47d7e83839ffcfc46c2ddd
Total install time: 1.6 s
quill is header-only and can be used from CMake via:

  find_path(QUILL_INCLUDE_DIRS "quill/Backend.h")
  target_include_directories(main PRIVATE ${QUILL_INCLUDE_DIRS})
odygrd commented 1 month ago

The vcpkg port is simply copying the headers so you won’t be able to use find_package in cmake when installed from vcpkg.

This might be related to Vcpkg policy for header only libraries @RT2Code might know the reason :)

https://github.com/microsoft/vcpkg/blob/821100d967e1737d96414a308e3f7cbe0d1abf18/ports/quill/portfile.cmake#L9

The make install command from the repo is different and also adds the quill-config file which allows you to call find_package

https://github.com/odygrd/quill/blob/ffac1d0a58b3b233c6399bb8aa8eb8491e105045/quill/CMakeLists.txt#L185

odygrd commented 2 weeks ago

The vcpkg port has changed in version 6.1.2 and now should be able to find the package with cmake native support