From 8c580427b13242f671f96f5adf5785a029e6ace2 Mon Sep 17 00:00:00 2001 From: Dean Ellis Date: Wed, 12 Feb 2020 10:02:46 +0000 Subject: [PATCH] Bump libzip to 1.6.1 In order to build libzip 1.6.1 we had to switch over to using an actual Windows machine. This was because libzip now no longer compiles in mingw. To help with this we are using the excellent [vcpkg](https://github.com/Microsoft/vcpkg) project. This project helps us grab and install dependencies in a cross platform manner. However it is only used on windows at the moment. --- .gitmodules | 3 + .../LibZipSharp.UnitTest.csproj | 13 ++- LibZipSharp.props | 2 +- azure-pipelines.yml | 107 +++++++++++++++--- external/libzip | 2 +- external/vcpkg | 1 + libZipSharp.csproj | 6 +- libzip-static.patch | 11 +- 8 files changed, 115 insertions(+), 30 deletions(-) create mode 160000 external/vcpkg diff --git a/.gitmodules b/.gitmodules index f3d230c4..0b515221 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ [submodule "external/libzip"] path = external/libzip url = https://github.com/nih-at/libzip.git +[submodule "external/vcpkg"] + path = external/vcpkg + url = https://github.com/Microsoft/vcpkg diff --git a/LibZipSharp.UnitTest/LibZipSharp.UnitTest.csproj b/LibZipSharp.UnitTest/LibZipSharp.UnitTest.csproj index b280deb2..ea2cb2a2 100644 --- a/LibZipSharp.UnitTest/LibZipSharp.UnitTest.csproj +++ b/LibZipSharp.UnitTest/LibZipSharp.UnitTest.csproj @@ -1,7 +1,8 @@  - net471 + net471 + $(TargetFrameworks);netcoreapp3.1 false true @@ -9,11 +10,11 @@ - - + + - + @@ -32,8 +33,8 @@ mono - \ No newline at end of file diff --git a/LibZipSharp.props b/LibZipSharp.props index 2fc0f023..9eeb7b53 100644 --- a/LibZipSharp.props +++ b/LibZipSharp.props @@ -1,5 +1,5 @@ - <_LibZipSharpNugetVersion>1.0.10 + <_LibZipSharpNugetVersion>1.0.11 \ No newline at end of file diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 0102fe0d..ab9201a5 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -14,6 +14,51 @@ variables: stages: - stage: Build jobs: + - job: buildWindows + pool: + vmImage: vs2017-win2016 + steps: + - script: | + echo "Hello" + git submodule update --init --recursive + cd external/vcpkg + bootstrap-vcpkg.bat + displayName: "Build vcpkg" + - script: | + external\vcpkg\vcpkg.exe integrate install + external\vcpkg\vcpkg.exe install zlib:x64-windows-static bzip2:x64-windows-static + mkdir .\build\Windows\64 + cd .\build\Windows\64 + cmake -DCMAKE_TOOLCHAIN_FILE=..\..\..\external\vcpkg\scripts\buildsystems\vcpkg.cmake ..\..\..\external\libzip -G "Visual Studio 15 2017 Win64" -DBUILD_SHARED_LIBS=on -DVCPKG_TARGET_TRIPLET=x64-windows-static + cmake --build . --config Release + displayName: "x64 Build" + - script: | + external\vcpkg\vcpkg.exe integrate install + external\vcpkg\vcpkg.exe install zlib:x86-windows-static bzip2:x86-windows-static + mkdir .\build\Windows\32 + cd .\build\Windows\32 + cmake -DCMAKE_TOOLCHAIN_FILE=..\..\..\external\vcpkg\scripts\buildsystems\vcpkg.cmake ..\..\..\external\libzip -G "Visual Studio 15 2017" -DBUILD_SHARED_LIBS=on -DVCPKG_TARGET_TRIPLET=x86-windows-static + cmake --build . --config Release + displayName: "x86 Build" + - task: ArchiveFiles@2 + inputs: + rootFolderOrFile: build\Windows\64\lib\Release\zip.dll + includeRootFolder: false + archiveType: 7z + replaceExistingArchive: true + archiveFile: $(Build.ArtifactStagingDirectory)\libzip-windows-x86.7z + - task: ArchiveFiles@2 + inputs: + rootFolderOrFile: build\Windows\64\lib\Release\zip.dll + includeRootFolder: false + archiveType: 7z + replaceExistingArchive: true + archiveFile: $(Build.ArtifactStagingDirectory)\libzip-windows-x64.7z + - task: PublishBuildArtifacts@1 + displayName: upload artifacts + inputs: + artifactName: 'native' + pathtoPublish: $(Build.ArtifactStagingDirectory) - job: buildlinux pool: vmImage: ubuntu-16.04 @@ -36,14 +81,14 @@ stages: displayName: 'Build Linux x86' - task: ArchiveFiles@2 inputs: - rootFolderOrFile: build/Linux/32/lib/libzip.so.5.0 + rootFolderOrFile: build/Linux/32/lib/libzip.so.5.1 includeRootFolder: false archiveType: 7z replaceExistingArchive: true archiveFile: $(Build.ArtifactStagingDirectory)/libzip-linux-x86.7z - task: ArchiveFiles@2 inputs: - rootFolderOrFile: build/Linux/64/lib/libzip.so.5.0 + rootFolderOrFile: build/Linux/64/lib/libzip.so.5.1 includeRootFolder: false archiveType: 7z replaceExistingArchive: true @@ -54,21 +99,23 @@ stages: artifactName: 'native' pathtoPublish: $(Build.ArtifactStagingDirectory) - job: build - dependsOn: buildlinux + dependsOn: + - buildlinux + - buildWindows pool: - vmImage: xcode9-macos10.13 + vmImage: macOS-10.14 steps: - bash: | - brew tap xamarin/xamarin-android-windeps - brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/a6542037a48a55061a4c319e6bb174b3715f7cbe/Formula/mingw-w64.rb - brew install mingw-w64 p7zip - brew install ninja xamarin/xamarin-android-windeps/mingw-zlib + brew install p7zip ninja git submodule update --init --recursive - bash: | HOSTOS=Darwin ./build_native - ./build_windows + displayName: 'Build Darwin' + - bash: | mkdir -p build/Linux/64 mkdir -p build/Linux/32 + mkdir -p build/Windows/64 + mkdir -p build/Windows/32 find build/* | grep libzip - task: DownloadBuildArtifacts@0 displayName: download artifacts @@ -85,10 +132,23 @@ stages: inputs: archiveFilePatterns: $(Build.ArtifactStagingDirectory)/native/libzip-linux-x86.7z destinationFolder: build/Linux/32 + - task: ExtractFiles@1 + displayName: Extract 64 bit Windows native + inputs: + archiveFilePatterns: $(Build.ArtifactStagingDirectory)/native/libzip-windows-x64.7z + destinationFolder: build/Windows/64 + - task: ExtractFiles@1 + displayName: Extract 32 bit Windows native + inputs: + archiveFilePatterns: $(Build.ArtifactStagingDirectory)/native/libzip-windows-x86.7z + destinationFolder: build/Windows/32 - bash: | - mv build/Linux/32/libzip.so.5.0 build/Linux/32/libzip.so - mv build/Linux/64/libzip.so.5.0 build/Linux/64/libzip.so + mv build/Linux/32/libzip.so.5.1 build/Linux/32/libzip.so + mv build/Linux/64/libzip.so.5.1 build/Linux/64/libzip.so + mv build/Windows/32/zip.dll build/Windows/32/libzip.dll + mv build/Windows/64/zip.dll build/Windows/64/libzip.dll rm $(Build.ArtifactStagingDirectory)/native/libzip-linux-*.7z + rm $(Build.ArtifactStagingDirectory)/native/libzip-windows-*.7z displayName: 'Find libzip' - task: MSBuild@1 displayName: 'Build solution libZipSharp.csproj' @@ -136,22 +196,37 @@ stages: solution: LibZipSharp.UnitTest/LibZipSharp.UnitTest.csproj configuration: Release msbuildArguments: /restore /t:RunNunitTests /p:ReferenceNuget=True /v:diag + - task: DotNetCoreCLI@2 + displayName: "Run Tests under .net Core" + inputs: + command: test + projects: 'LibZipSharp.UnitTest/LibZipSharp.UnitTest.csproj' + arguments: '--configuration Release --framework netcoreapp3.1 --no-build' - job: testmacos displayName: 'Test MacOS' pool: - vmImage: xcode9-macos10.13 + vmImage: macOS-10.14 steps: - task: DownloadBuildArtifacts@0 displayName: download artifacts inputs: artifactName: NuGet downloadPath: $(Build.SourcesDirectory) + - task: UseDotNet@2 + inputs: + version: '3.1.x' - task: MSBuild@1 displayName: 'Build solution LibZipSharp.UnitTest/LibZipSharp.UnitTest.csproj' inputs: solution: LibZipSharp.UnitTest/LibZipSharp.UnitTest.csproj configuration: Release msbuildArguments: /restore /t:RunNunitTests /p:ReferenceNuget=True /v:diag + # - task: DotNetCoreCLI@2 + # displayName: "Run Tests under .net Core" + # inputs: + # command: test + # projects: 'LibZipSharp.UnitTest/LibZipSharp.UnitTest.csproj' + # arguments: '--configuration Release --framework netcoreapp3.1 --no-build' - job: testwindows displayName: 'Test Windows' pool: @@ -163,11 +238,17 @@ stages: artifactName: NuGet downloadPath: $(Build.SourcesDirectory) - task: MSBuild@1 - displayName: 'Build solution LibZipSharp.UnitTest/LibZipSharp.UnitTest.csproj' + displayName: 'Build solution LibZipSharp.UnitTest/LibZipSharp.UnitTest.csproj and Run tests' inputs: solution: LibZipSharp.UnitTest/LibZipSharp.UnitTest.csproj configuration: Release msbuildArguments: /restore /t:RunNunitTests /p:ReferenceNuget=True /v:diag + - task: DotNetCoreCLI@2 + displayName: "Run Tests under .net Core" + inputs: + command: test + projects: 'LibZipSharp.UnitTest/LibZipSharp.UnitTest.csproj' + arguments: '--configuration Release --framework netcoreapp3.1 --no-build' - stage: Publish dependsOn: Test condition: eq(variables['System.TeamProject'], 'devdiv') # only sign the packages when running on Windows, and using the private server which has the certificates diff --git a/external/libzip b/external/libzip index b95cf3fd..4e3e0351 160000 --- a/external/libzip +++ b/external/libzip @@ -1 +1 @@ -Subproject commit b95cf3fdd4c1271f922017f092d02a878873425c +Subproject commit 4e3e0351a2f99735f98578f4e68d28ac80f8a94d diff --git a/external/vcpkg b/external/vcpkg new file mode 160000 index 00000000..7365cd74 --- /dev/null +++ b/external/vcpkg @@ -0,0 +1 @@ +Subproject commit 7365cd74ef79a1f5f7a7bd6ff064a3e573ca4baa diff --git a/libZipSharp.csproj b/libZipSharp.csproj index eace8d2b..2ffb7b23 100644 --- a/libZipSharp.csproj +++ b/libZipSharp.csproj @@ -43,9 +43,9 @@ libZipSharp.dll.config PreserveNewest - - - + + + diff --git a/libzip-static.patch b/libzip-static.patch index 3a6513e5..eac59d6e 100644 --- a/libzip-static.patch +++ b/libzip-static.patch @@ -2,12 +2,11 @@ diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 92c4becc..e58b7db3 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt -@@ -211,7 +211,7 @@ ENDIF() - - ADD_LIBRARY(zip ${LIBZIP_SOURCES} ${LIBZIP_EXTRA_FILES} ${LIBZIP_OPTIONAL_FILES} ${LIBZIP_OPSYS_FILES}) - SET_TARGET_PROPERTIES(zip PROPERTIES VERSION 5.0 SOVERSION 5) --TARGET_LINK_LIBRARIES(zip ${ZLIB_LIBRARY} ${OPTIONAL_LIBRARY}) -+TARGET_LINK_LIBRARIES(zip ${ZLIB_LIBRARY} ${OPTIONAL_LIBRARY} OpenSSL::Crypto -ldl -pthread) +@@ -228,7 +228,7 @@ ENDIF() + + +-TARGET_LINK_LIBRARIES(zip PRIVATE ${ZLIB_LIBRARIES} ${OPTIONAL_LIBRARY}) ++TARGET_LINK_LIBRARIES(zip PRIVATE ${ZLIB_LIBRARY} ${OPTIONAL_LIBRARY} OpenSSL::Crypto -ldl -pthread) INSTALL(TARGETS zip RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}