Skip to content

Commit

Permalink
GH-19: Replaced libcurl-devel with vcpkg ports
Browse files Browse the repository at this point in the history
Added `brotli` and `zstd` as additional compression engines
  • Loading branch information
negrutiu committed May 18, 2024
1 parent bd4fabb commit 239fcc3
Show file tree
Hide file tree
Showing 65 changed files with 2,278 additions and 49 deletions.
6 changes: 2 additions & 4 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,11 @@
/packages/*.zip
/packages/*.7z

/libcurl-devel
libcurl-devel*.7z
libcurl-devel*.7z.etag

/tests/*.exe
/tests/_*

/vcpkg

/Debug-*
/Release-*
/ipch
Expand Down
29 changes: 29 additions & 0 deletions Directory.Build.props
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<Project>
<Import Project="$(MSBuildThisFileDirectory)User.props" Condition="Exists('$(MSBuildThisFileDirectory)User.props')"/>

<PropertyGroup>
<VcpkgTriplet Condition="'$(VcpkgTriplet)'=='' And '$(Platform)'=='Win32'">x86-windows-static</VcpkgTriplet>
<VcpkgTriplet Condition="'$(VcpkgTriplet)'=='' And '$(Platform)'=='x64'">x64-windows-static</VcpkgTriplet>
<VcpkgRootDir Condition="'$(VcpkgRootDir)'==''">$(SolutionDir)vcpkg\$(VcpkgTriplet)\</VcpkgRootDir>
<VcpkgInstalledDir Condition="'$(VcpkgInstalledDir)'==''">$(VcpkgRootDir)installed\$(VcpkgTriplet)\</VcpkgInstalledDir>
</PropertyGroup>

<ItemDefinitionGroup Condition="$(MSBuildProjectExtension) == '.vcxproj'">
<ClCompile>
<AdditionalIncludeDirectories>$(VcpkgInstalledDir)include;$(VcpkgInstalledDir)include\openssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
</ItemDefinitionGroup>

<ItemDefinitionGroup Condition="$(Configuration.Contains('Debug')) and '$(MSBuildProjectExtension)' == '.vcxproj'">
<Link>
<AdditionalLibraryDirectories>$(VcpkgInstalledDir)debug\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>

<ItemDefinitionGroup Condition="$(Configuration.Contains('Release')) and '$(MSBuildProjectExtension)' == '.vcxproj'">
<Link>
<AdditionalLibraryDirectories>$(VcpkgInstalledDir)lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>

</Project>
6 changes: 4 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,9 @@ Pop $0
Project | License
:------ | :----------------------------------------------------
NScurl itself | [BSD3](LICENSE.md)
libcurl | [MIT/X inspired](https://curl.haxx.se/docs/copyright.html)
OpenSSL | [Apache v2](https://www.openssl.org/source/license.html)
brotli | [MIT](https://github.com/google/brotli/blob/master/LICENSE)
curl | [MIT/X inspired](https://curl.haxx.se/docs/copyright.html)
nghttp2 | [MIT](https://github.com/nghttp2/nghttp2/blob/master/COPYING)
OpenSSL | [Apache v2](https://www.openssl.org/source/license.html)
zlib | [zlib](https://www.zlib.net/zlib_license.html)
zstd | [BSD3](https://github.com/facebook/zstd/blob/dev/LICENSE)
20 changes: 0 additions & 20 deletions _acquire_libcurl-devel.bat

This file was deleted.

9 changes: 8 additions & 1 deletion _build_Release.cmd
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,16 @@ cd /d "%~dp0"

:dependencies
call _acquire_pluginapi.bat || exit /b !errorlevel!
call _acquire_libcurl-devel.bat || exit /b !errorlevel!
call _acquire_curl-ca-bundle.bat || exit /b !errorlevel!

REM | https://stackoverflow.com/questions/33584587/how-to-wait-all-batch-files-to-finish-before-exiting
echo Building vcpkg ...
(
start "vcpkg x86" cmd /C _build_vcpkg.bat Win32 msvc
start "vcpkg x64" cmd /C _build_vcpkg.bat x64 msvc
) | set /P "="


:DEFINITIONS
set BUILD_SOLUTION=%CD%\NScurl.sln
if "%1" neq "" set BUILD_CONFIG=%~1
Expand Down
9 changes: 8 additions & 1 deletion _build_Release_mingw.bat
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,16 @@ cd /d "%~dp0"

:dependencies
call _acquire_pluginapi.bat || exit /b !errorlevel!
call _acquire_libcurl-devel.bat || exit /b !errorlevel!
call _acquire_curl-ca-bundle.bat || exit /b !errorlevel!

REM | https://stackoverflow.com/questions/33584587/how-to-wait-all-batch-files-to-finish-before-exiting
echo Building vcpkg ...
(
start "vcpkg x86" cmd /C _build_vcpkg.bat Win32 mingw
start "vcpkg x64" cmd /C _build_vcpkg.bat x64 mingw
) | set /P "="


:x86
if not exist "%MINGW32%\bin\gcc.exe" echo ERROR: Missing "%MINGW32%" && pause && exit /B 2
set PATH=%MINGW32%\bin;%ORIGINAL_PATH%
Expand Down
78 changes: 78 additions & 0 deletions _build_vcpkg.bat
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
REM | marius.negrutiu@protonmail.com
@echo off
setlocal EnableDelayedExpansion

REM | script.bat <Win32|x64|arm64> <msvc|mingw> <static|dynamic>
set arch=%~1
set compiler=%~2
set runtime=%~3
set vcpkg_dir=
set vcpkg_triplet=

if /i "%arch%" equ "" set arch=x86
if /i "%arch%" equ "Win32" set arch=x86
echo _x86_x64_arm64_ | findstr /I "_%arch%_" > nul
if %errorlevel% neq 0 echo ERROR: Unexpected architecture. Use Win32^|x64^|arm64&& exit /b -57

if "%compiler%" equ "" set compiler=mingw
echo _msvc_mingw_ | findstr /I "_%compiler%_" > nul
if %errorlevel% neq 0 echo ERROR: Unexpected compiler. Use msvc^|mingw&& exit /b -57

if "%runtime%" equ "" set runtime=static
echo _static_dynamic_ | findstr /I "_%runtime%_" > nul
if %errorlevel% neq 0 echo ERROR: Unexpected linkage type. Use static^|dynamic&& exit /b -57

if /i "%compiler%" equ "mingw" set vcpkg_triplet=%arch%-mingw-%runtime%
if /i "%compiler%" equ "msvc" if /i "%runtime%" equ "static" set vcpkg_triplet=%arch%-windows-%runtime%
if /i "%compiler%" equ "msvc" if /i "%runtime%" equ "dynamic" set vcpkg_triplet=%arch%-windows

set vcpkg_dir=%~dp0vcpkg\%vcpkg_triplet%

title vcpkg -^> %vcpkg_triplet%

REM | -------------------------------------------------------------------------

if /i "%compiler%" equ "mingw" if /i "%arch%" equ "x64" if exist "%SystemDrive%\msys64\mingw64\bin" set PATH=%SystemDrive%\msys64\mingw64\bin;%PATH%
if /i "%compiler%" equ "mingw" if /i "%arch%" equ "x86" if exist "%SystemDrive%\msys64\mingw32\bin" set PATH=%SystemDrive%\msys64\mingw32\bin;%PATH%

if /i "%compiler%" equ "mingw" if /i "%arch%" equ "x64" if exist "%SystemDrive%\msys2\mingw64\bin" set PATH=%SystemDrive%\msys2\mingw64\bin;%PATH%
if /i "%compiler%" equ "mingw" if /i "%arch%" equ "x86" if exist "%SystemDrive%\msys2\mingw32\bin" set PATH=%SystemDrive%\msys2\mingw32\bin;%PATH%

REM | -------------------------------------------------------------------------

if exist "%vcpkg_dir%\.gitignore" (
pushd "%vcpkg_dir%"
git pull --verbose || exit /b !errorlevel!
call "%vcpkg_dir%\bootstrap-vcpkg.bat" -disableMetrics || exit /b !errorlevel!
popd
) else (
pushd "%vcpkg_dir%\.."
git clone https://github.com/Microsoft/vcpkg.git "%vcpkg_dir%" || exit /b !errorlevel!
call "%vcpkg_dir%\bootstrap-vcpkg.bat" -disableMetrics || exit /b !errorlevel!
popd
)

REM | -------------------------------------------------------------------------

set vcpkg_installed=%vcpkg_dir%\installed
set vcpkg_downloads=%vcpkg_dir%\downloads
set vcpkg_buildtrees=%vcpkg_dir%\buildtrees
set vcpkg_packages=%vcpkg_dir%\packages
REM set vcpkg_archives=%vcpkg_dir%\archives
set vcpkg_archives=%~dp0vcpkg\archives

mkdir "%vcpkg_dir%" > nul 2> nul
pushd "%vcpkg_dir%"

vcpkg.exe ^
install ^
--triplet=%vcpkg_triplet% ^
--x-install-root="%vcpkg_installed%" ^
--downloads-root="%vcpkg_downloads%" ^
--x-buildtrees-root="%vcpkg_buildtrees%" ^
--binarysource=clear;files,"%vcpkg_archives%",readwrite ^
--x-packages-root="%vcpkg_packages%" ^
--no-print-usage

popd
exit /b %errorlevel%
2 changes: 2 additions & 0 deletions _cleanup.bat
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ rd /S /Q ipch
for /D %%a in (Debug*) do rd /S /Q "%%a"
for /D %%a in (Release*) do rd /S /Q "%%a"

rd /Q /S "vcpkg"

rd /Q /S "src\nscurl\nsis"
del /Q "src\nscurl\curl-ca-bundle.crt"
rd /Q /S "packages\current"
Expand Down
11 changes: 6 additions & 5 deletions _make_package.bat
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,12 @@ call :file %workdir%\Test\NScurl-Test-build.bat tests\NScurl-Test-build.bat
call :file %workdir%\NScurl.readme.md src\nscurl\NScurl.readme.md
call :file %workdir%\README.md README.md
call :file %workdir%\LICENSE.md LICENSE.md
call :file %workdir%\LICENSE.curl.md libcurl-devel\src\curl\COPYING
call :file %workdir%\LICENSE.libcurl-devel.md libcurl-devel\LICENSE.md
call :file %workdir%\LICENSE.nghttp2.md libcurl-devel\src\nghttp2\COPYING
call :file %workdir%\LICENSE.openssl.md libcurl-devel\src\openssl\LICENSE.txt
call :file %workdir%\LICENSE.zlib.md libcurl-devel\src\zlib\LICENSE
call :file %workdir%\LICENSE.brotli.md vcpkg\x86-mingw-static\installed\x86-mingw-static\share\brotli\copyright
call :file %workdir%\LICENSE.curl.md vcpkg\x86-mingw-static\installed\x86-mingw-static\share\curl\copyright
call :file %workdir%\LICENSE.nghttp2.md vcpkg\x86-mingw-static\installed\x86-mingw-static\share\nghttp2\copyright
call :file %workdir%\LICENSE.openssl.md vcpkg\x86-mingw-static\installed\x86-mingw-static\share\openssl\copyright
call :file %workdir%\LICENSE.zlib.md vcpkg\x86-mingw-static\installed\x86-mingw-static\share\zlib\copyright
call :file %workdir%\LICENSE.zstd.md vcpkg\x86-mingw-static\installed\x86-mingw-static\share\zstd\copyright

pushd %workdir%
"%Z7%" a "..\NScurl-%RCVER%.7z" * -r || pause && exit /b !errorlevel!
Expand Down
20 changes: 16 additions & 4 deletions src/nscurl/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@
PROJECT = NScurl
BIN = $(PROJECT).dll
OBJ = pluginapi.o main.o utils.o crypto.o curl.o queue.o gui.o resource.res
INC = -I. -I../../libcurl-devel/include -I../../libcurl-devel/include/openssl
LIB = -lcurl -lssl -lcrypto -lnghttp2_static -lzlibstatic -ladvapi32 -lkernel32 -luser32 -lversion -lws2_32 -lcrypt32 -lmsvcrt -lgcc
INC =
LIB = -lcurl -lssl -lcrypto -lbrotlidec -lbrotlicommon -lnghttp2 -lzlib -lzstd -ladvapi32 -lkernel32 -luser32 -lversion -lws2_32 -lcrypt32 -lmsvcrt -lgcc

_OBJ = $(patsubst %,$(OUTDIR)/%,$(OBJ))
_BIN = $(patsubst %,$(OUTDIR)/%,$(BIN))
Expand All @@ -31,13 +31,25 @@ STATIC = $(OUTDIR)/lib$(PROJECT).a
# http://linux.die.net/man/1/ld
#

# vcpkg
ifeq ($(ARCH), X64)
VCPKG_TRIPLET = x64-mingw-static
else
VCPKG_TRIPLET = x86-mingw-static
endif

VCPKG_INSTALLED = ../../vcpkg/$(VCPKG_TRIPLET)/installed/$(VCPKG_TRIPLET)

INC += -I$(VCPKG_INSTALLED)/include -I$(VCPKG_INSTALLED)/include/openssl
LIB += -L$(VCPKG_INSTALLED)/lib

# ARCH
ifeq ($(ARCH), X64)
CFLAGS += -Wall -DNDEBUG -L../../libcurl-devel/mingw-curl_openssl-Release-x64-Legacy/lib
CFLAGS += -Wall -DNDEBUG
LDFLAGS += -Wl,-e'DllMain' -Wl,--high-entropy-va
RCFLAGS += -F pe-x86-64
else
CFLAGS += -Wall -DNDEBUG -L../../libcurl-devel/mingw-curl_openssl-Release-Win32-Legacy/lib -march=pentium2
CFLAGS += -Wall -DNDEBUG -march=pentium2
LDFLAGS += -Wl,-e'_DllMain'
RCFLAGS += -F pe-i386
endif
Expand Down
16 changes: 4 additions & 12 deletions src/nscurl/NScurl.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -89,12 +89,10 @@
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(SolutionDir)libcurl-devel/include;$(SolutionDir)libcurl-devel/include/openssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<AdditionalDependencies>version.lib;libcurl.lib;libcrypto_static.lib;libssl_static.lib;nghttp2_static.lib;zlibstatic.lib;ws2_32.lib;Wldap32.lib;Crypt32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>$(SolutionDir)libcurl-devel\MSVC-curl_openssl-Debug-$(Platform)-HTTP_ONLY\lib</AdditionalLibraryDirectories>
<AdditionalDependencies>version.lib;libcurl-d.lib;libcrypto.lib;libssl.lib;nghttp2.lib;zlibd.lib;zstd.lib;brotlicommon.lib;brotlidec.lib;ws2_32.lib;Wldap32.lib;Crypt32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-x86-unicode|Win32'">
Expand All @@ -103,12 +101,10 @@
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(SolutionDir)libcurl-devel/include;$(SolutionDir)libcurl-devel/include/openssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<AdditionalDependencies>version.lib;libcurl.lib;libcrypto_static.lib;libssl_static.lib;nghttp2_static.lib;zlibstatic.lib;ws2_32.lib;Wldap32.lib;Crypt32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>$(SolutionDir)libcurl-devel\MSVC-curl_openssl-Debug-$(Platform)-HTTP_ONLY\lib</AdditionalLibraryDirectories>
<AdditionalDependencies>version.lib;libcurl-d.lib;libcrypto.lib;libssl.lib;nghttp2.lib;zlibd.lib;zstd.lib;brotlicommon.lib;brotlidec.lib;ws2_32.lib;Wldap32.lib;Crypt32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-x86-ansi|Win32'">
Expand All @@ -120,14 +116,12 @@
<EnableEnhancedInstructionSet>StreamingSIMDExtensions</EnableEnhancedInstructionSet>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
<AdditionalIncludeDirectories>$(SolutionDir)libcurl-devel/include;$(SolutionDir)libcurl-devel/include/openssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>version.lib;libcurl.lib;libcrypto_static.lib;libssl_static.lib;nghttp2_static.lib;zlibstatic.lib;ws2_32.lib;Wldap32.lib;Crypt32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>version.lib;libcurl.lib;libcrypto.lib;libssl.lib;nghttp2.lib;zlib.lib;zstd.lib;brotlicommon.lib;brotlidec.lib;ws2_32.lib;Wldap32.lib;Crypt32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<AdditionalLibraryDirectories>$(SolutionDir)libcurl-devel\MSVC-curl_openssl-Release-$(Platform)-HTTP_ONLY\lib</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-x86-unicode|Win32'">
Expand All @@ -139,14 +133,12 @@
<EnableEnhancedInstructionSet>StreamingSIMDExtensions</EnableEnhancedInstructionSet>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
<AdditionalIncludeDirectories>$(SolutionDir)libcurl-devel/include;$(SolutionDir)libcurl-devel/include/openssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>version.lib;libcurl.lib;libcrypto_static.lib;libssl_static.lib;nghttp2_static.lib;zlibstatic.lib;ws2_32.lib;Wldap32.lib;Crypt32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>$(SolutionDir)libcurl-devel\MSVC-curl_openssl-Release-$(Platform)-HTTP_ONLY\lib</AdditionalLibraryDirectories>
<AdditionalDependencies>version.lib;libcurl.lib;libcrypto.lib;libssl.lib;nghttp2.lib;zlib.lib;zstd.lib;brotlicommon.lib;brotlidec.lib;ws2_32.lib;Wldap32.lib;Crypt32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
Expand Down
17 changes: 17 additions & 0 deletions vcpkg.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"$schema": "https://raw.githubusercontent.com/microsoft/vcpkg/master/scripts/vcpkg.schema.json",
"name": "noname",
"version": "1.0.0.0",
"dependencies":
[
{
"name": "curl",
"default-features": false,
"features": ["http2", "openssl", "brotli", "zstd", "tool"]
}
],
"vcpkg-configuration": {
"overlay-ports": [ "vcpkg_overlay_ports" ],
"overlay-triplets": [ "vcpkg_overlay_triplets" ]
}
}
24 changes: 24 additions & 0 deletions vcpkg_overlay_ports/curl/0002_fix_uwp.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
index 6f84919..b838245 100644
--- a/lib/CMakeLists.txt
+++ b/lib/CMakeLists.txt
@@ -162,6 +162,9 @@ if(BUILD_STATIC_LIBS)
INTERPROCEDURAL_OPTIMIZATION_RELEASE TRUE
INTERPROCEDURAL_OPTIMIZATION_RELWITHDEBINFO TRUE)
endif()
+ if(CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
+ set_property(TARGET ${LIB_STATIC} APPEND PROPERTY COMPILE_DEFINITIONS "_WINSOCK_DEPRECATED_NO_WARNINGS")
+ endif()
if(CMAKEVERSION AND CMAKESONAME)
set_target_properties(${LIB_STATIC} PROPERTIES
VERSION ${CMAKEVERSION} SOVERSION ${CMAKESONAME})
@@ -197,6 +200,9 @@ if(BUILD_SHARED_LIBS)
INTERPROCEDURAL_OPTIMIZATION_RELEASE TRUE
INTERPROCEDURAL_OPTIMIZATION_RELWITHDEBINFO TRUE)
endif()
+ if(CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
+ set_property(TARGET ${LIB_SHARED} APPEND PROPERTY COMPILE_DEFINITIONS "_WINSOCK_DEPRECATED_NO_WARNINGS")
+ endif()
if(CMAKEVERSION AND CMAKESONAME)
set_target_properties(${LIB_SHARED} PROPERTIES
VERSION ${CMAKEVERSION} SOVERSION ${CMAKESONAME})
12 changes: 12 additions & 0 deletions vcpkg_overlay_ports/curl/0005_remove_imp_suffix.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
index b838245..3199160 100644
--- a/lib/CMakeLists.txt
+++ b/lib/CMakeLists.txt
@@ -92,7 +92,6 @@ endif()
if(WIN32 AND
NOT IMPORT_LIB_SUFFIX AND
CMAKE_STATIC_LIBRARY_SUFFIX STREQUAL CMAKE_IMPORT_LIBRARY_SUFFIX)
- set(IMPORT_LIB_SUFFIX "_imp")
endif()

# Whether to do a single compilation pass for libcurl sources and reuse these
Loading

0 comments on commit 239fcc3

Please sign in to comment.