Windows: Start using a `vcpkg export` bundle.

Create a library bundle using `vcpkg export ... --zip` as described at
https://vcpkg.readthedocs.io/en/latest/users/integration/#export-command.

The bundle includes the following packages:

gettext     0.19-8
glib        2.52.3-13
libffi      3.1-4
libiconv    1.15-5
liblzma     5.2.4
libxml2     2.9.9-4
pcre        8.41-1
zlib        1.2.11-5

It also includes a CMake toolchain file which we might want to make use
of in the future.

This means we no longer compile Zlib locally. Update the CMake environment
accordingly and remove zlib from win-setup.ps1.

It includes PDBs, so add them to the PDB .zip.

Change-Id: I0a94904a86d836e990019dab62af506573be1f35
Reviewed-on: https://code.wireshark.org/review/31377
Petri-Dish: Gerald Combs <gerald@wireshark.org>
Tested-by: Petri Dish Buildbot
Reviewed-by: Gerald Combs <gerald@wireshark.org>
This commit is contained in:
Gerald Combs 2019-01-04 15:37:46 -08:00
parent f57a73d688
commit acc96e5206
8 changed files with 109 additions and 81 deletions

View File

@ -1096,31 +1096,7 @@ ws_find_package(KERBEROS ENABLE_KERBEROS HAVE_KERBEROS)
ws_find_package(CARES ENABLE_CARES HAVE_C_ARES "1.5.0")
# Zlib compression
if(ENABLE_ZLIB)
if (WIN32)
# On Windows we build our own version of zlib, so add the paths
set(ZLIB_SRC_DIR "${_PROJECT_LIB_DIR}/zlib-1.2.11-2-ws")
set(SKIP_INSTALL_STATIC True)
set(SKIP_INSTALL_HEADERS True)
set(SKIP_INSTALL_FILES True)
set(ZLIB_EXPORTS "WiresharkTargets")
add_subdirectory("${ZLIB_SRC_DIR}" "${CMAKE_BINARY_DIR}/zlib")
unset(SKIP_INSTALL_STATIC)
unset(SKIP_INSTALL_HEADERS)
unset(SKIP_INSTALL_FILES)
set(ZLIB_INCLUDE_DIR "${ZLIB_SRC_DIR}" "${CMAKE_BINARY_DIR}/zlib")
set(ZLIB_LIBRARY zlib)
set(ZLIB_DLL "zlib1.dll")
set_target_properties(zlib PROPERTIES FOLDER "Libs/zlib")
# Annoyingly zlib also builds some other stuff we aren't interested in
set_target_properties(zlibstatic PROPERTIES
FOLDER "Libs/zlib"
EXCLUDE_FROM_ALL True
EXCLUDE_FROM_DEFAULT_BUILD True
)
endif()
ws_find_package(ZLIB ENABLE_ZLIB HAVE_ZLIB)
endif()
ws_find_package(ZLIB ENABLE_ZLIB HAVE_ZLIB)
# LZ4 compression
ws_find_package(LZ4 ENABLE_LZ4 HAVE_LZ4)
@ -1715,13 +1691,11 @@ if(WIN32)
# XXX Can (and should) we iterate over these similar to the way
# the top-level CMakeLists.txt iterates over the package list?
# Required DLLs.
# The gio, gnutls, png, and other OBS-generated DLLs depend on
# zlib1.dll. We compile zlib locally but the Debug configuration
# (the default) creates zlibd1.dll.
# Required DLLs and their corresponding PDBs.
add_custom_command(TARGET copy_cli_dlls PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${GLIB2_DLLS} $<$<CONFIG:Debug>:zlib1.dll>
${GLIB2_DLLS}
${GLIB2_PDBS}
"${_dll_output_dir}"
WORKING_DIRECTORY "${GLIB2_DLL_DIR}"
)
@ -1770,7 +1744,12 @@ if(WIN32)
list (APPEND OPTIONAL_DLLS "${BCG729_DLL_DIR}/${BCG729_DLL}")
endif(BCG729_FOUND)
if (LIBXML2_FOUND)
list (APPEND OPTIONAL_DLLS "${LIBXML2_DLL_DIR}/${LIBXML2_DLL}")
foreach( _dll ${LIBXML2_DLLS} )
list (APPEND OPTIONAL_DLLS "${LIBXML2_DLL_DIR}/${_dll}")
endforeach(_dll)
foreach( _pdb ${LIBXML2_PDBS} )
list (APPEND OPTIONAL_PDBS "${LIBXML2_DLL_DIR}/${_pdb}")
endforeach(_pdb)
endif(LIBXML2_FOUND)
if (SMI_FOUND)
list (APPEND OPTIONAL_DLLS "${SMI_DLL_DIR}/${SMI_DLL}")
@ -1819,6 +1798,10 @@ if(WIN32)
if (WINSPARKLE_FOUND)
list (APPEND OPTIONAL_DLLS "${WINSPARKLE_DLL_DIR}/${WINSPARKLE_DLL}")
endif(WINSPARKLE_FOUND)
if (ZLIB_FOUND)
list (APPEND OPTIONAL_DLLS "${ZLIB_DLL_DIR}/${ZLIB_DLL}")
list (APPEND OPTIONAL_PDBS "${ZLIB_DLL_DIR}/${ZLIB_PDB}")
endif(ZLIB_FOUND)
# With libs downloaded to c:/wireshark-win64-libs this currently
# (early 2018) expands to about 1900 characters.

View File

@ -20,7 +20,7 @@ if( GLIB2_MAIN_INCLUDE_DIR AND GLIB2_LIBRARIES )
endif()
include( FindWSWinLibs )
FindWSWinLibs( "glib2-*" "GLIB2_HINTS" )
FindWSWinLibs( "vcpkg-export-*" "GLIB2_HINTS" )
if (NOT WIN32)
find_package(PkgConfig)
@ -74,6 +74,7 @@ find_path( GLIB2_INTERNAL_INCLUDE_DIR
glibconfig.h
HINTS
"${GLIB2_INCLUDEDIR}"
"${GLIB2_HINTS}/include"
"${glib2LibDir}"
${CMAKE_SYSTEM_LIBRARY_PATH}
PATH_SUFFIXES
@ -100,25 +101,45 @@ if( GLIB2_FOUND )
set( GLIB2_INCLUDE_DIRS ${GLIB2_MAIN_INCLUDE_DIR} ${GLIB2_INTERNAL_INCLUDE_DIR} )
if ( WIN32 AND GLIB2_FOUND )
set ( GLIB2_DLL_DIR "${GLIB2_HINTS}/bin"
CACHE PATH "Path to GLib 2 DLLs"
CACHE PATH "Path to GLib2 DLLs"
)
# XXX Are GIO and GObject really necessary?
# libglib and libgio in glib2-2.52.2-1.34-win32ws depend on
# libgcc_s_sjlj-1.dll, now included with gnutls-3.6.3-1-win32ws.
# (64-bit GLib does not depend on libgcc_s).
# GTK+ required GObject and GIO. We probably don't.
file( GLOB _glib2_dlls RELATIVE "${GLIB2_DLL_DIR}"
"${GLIB2_DLL_DIR}/libglib-*.dll"
"${GLIB2_DLL_DIR}/libgio-*.dll"
"${GLIB2_DLL_DIR}/libgmodule-*.dll"
"${GLIB2_DLL_DIR}/libgobject-*.dll"
"${GLIB2_DLL_DIR}/libintl-*.dll"
#"${GLIB2_DLL_DIR}/libgcc_s_*.dll"
# "${GLIB2_DLL_DIR}/gio-2.dll"
"${GLIB2_DLL_DIR}/glib-2.dll"
"${GLIB2_DLL_DIR}/gmodule-2.dll"
# "${GLIB2_DLL_DIR}/gobject-2.dll"
"${GLIB2_DLL_DIR}/gthread-2.dll"
"${GLIB2_DLL_DIR}/libcharset.dll"
# gnutls-3.6.3-1-win64ws ships with libffi-6.dll
# "${GLIB2_DLL_DIR}/libffi.dll"
"${GLIB2_DLL_DIR}/libiconv.dll"
"${GLIB2_DLL_DIR}/libintl.dll"
"${GLIB2_DLL_DIR}/pcre.dll"
# "${GLIB2_DLL_DIR}/pcre16.dll"
# "${GLIB2_DLL_DIR}/pcre32.dll"
# "${GLIB2_DLL_DIR}/pcrecpp.dll"
# "${GLIB2_DLL_DIR}/pcreposix.dll"
)
set ( GLIB2_DLLS ${_glib2_dlls}
# We're storing filenames only. Should we use STRING instead?
CACHE FILEPATH "GLib 2 DLL list"
)
mark_as_advanced( GLIB2_DLL_DIR GLIB2_DLLS )
file( GLOB _glib2_pdbs RELATIVE "${GLIB2_DLL_DIR}"
"${GLIB2_DLL_DIR}/glib-2.pdb"
"${GLIB2_DLL_DIR}/gmodule-2.pdb"
"${GLIB2_DLL_DIR}/gthread-2.pdb"
"${GLIB2_DLL_DIR}/libcharset.pdb"
"${GLIB2_DLL_DIR}/libiconv.pdb"
"${GLIB2_DLL_DIR}/libintl.pdb"
"${GLIB2_DLL_DIR}/pcre.pdb"
)
set ( GLIB2_PDBS ${_glib2_pdbs}
CACHE FILEPATH "GLib2 PDB list"
)
mark_as_advanced( GLIB2_DLL_DIR GLIB2_DLLS GLIB2_PDBS )
endif()
elseif( GLIB2_FIND_REQUIRED )
message( SEND_ERROR "Package required but not found" )

View File

@ -8,7 +8,7 @@
#
include(FindWSWinLibs)
FindWSWinLibs("glib2-*" "GMODULE2_HINTS")
FindWSWinLibs("vcpkg-export-*" "GMODULE2_HINTS")
if(NOT WIN32)
find_package(PkgConfig QUIET)

View File

@ -8,7 +8,7 @@
#
include(FindWSWinLibs)
FindWSWinLibs("glib2-*" "GTHREAD2_HINTS")
FindWSWinLibs("vcpkg-export-*" "GTHREAD2_HINTS")
if(NOT WIN32)
find_package(PkgConfig QUIET)

View File

@ -48,7 +48,7 @@ The following cache variables may also be set:
#]=======================================================================]
include(FindWSWinLibs)
FindWSWinLibs("libxml2-.*" LIBXML2_HINTS)
FindWSWinLibs("vcpkg-export-.*" LIBXML2_HINTS)
# use pkg-config to get the directories and then use these values
# in the find_path() and find_library() calls
@ -112,4 +112,4 @@ if(LibXml2_FOUND AND NOT TARGET LibXml2::LibXml2)
set_property(TARGET LibXml2::LibXml2 APPEND PROPERTY IMPORTED_LOCATION "${LIBXML2_LIBRARY}")
endif()
AddWSWinDLL(LibXml2 LIBXML2_HINTS "libxml2-*")
AddWSWinDLLS(LibXml2 LIBXML2_HINTS "libxml2*" "lzma*")

View File

@ -42,6 +42,7 @@ function( FindWSWinLibs _WS_LIB_SEARCH_PATH _LIB_HINT_VAR )
endif()
endfunction()
# Add a single DLL
function(AddWSWinDLL _PKG_NAME _PKG_HINTS _DLL_GLOB)
if(WIN32 AND ${_PKG_NAME}_FOUND)
string(TOUPPER ${_PKG_NAME} _PKG_VAR)
@ -54,9 +55,51 @@ function(AddWSWinDLL _PKG_NAME _PKG_HINTS _DLL_GLOB)
set ( ${_PKG_VAR}_DLL ${_pkg_dll}
CACHE STRING "${_PKG_NAME} DLL file name"
)
mark_as_advanced( ${_PKG_VAR}_DLL_DIR ${_PKG_VAR}_DLL )
file( GLOB _pkg_pdb RELATIVE "${${_PKG_VAR}_DLL_DIR}"
"${${_PKG_VAR}_DLL_DIR}/${_DLL_GLOB}.pdb"
)
set ( ${_PKG_VAR}_PDB ${_pkg_pdb}
CACHE STRING "${_PKG_NAME} PDB file name"
)
mark_as_advanced( ${_PKG_VAR}_DLL_DIR ${_PKG_VAR}_DLL ${_PKG_VAR}_PDB )
else()
set( ${_PKG_VAR}_DLL_DIR )
set( ${_PKG_VAR}_DLL )
endif()
endfunction()
# Add a list of DLLs
function(AddWSWinDLLS _PKG_NAME _PKG_HINTS) # ...DLL globs
if(WIN32 AND ${_PKG_NAME}_FOUND)
string(TOUPPER ${_PKG_NAME} _PKG_VAR)
set ( ${_PKG_VAR}_DLL_DIR "${${_PKG_HINTS}}/bin"
CACHE PATH "Path to ${_PKG_NAME} DLLs"
)
set (_pkg_dlls)
set (_pkg_pdbs)
foreach(_dll_glob ${ARGN})
file( GLOB _pkg_dll RELATIVE "${${_PKG_VAR}_DLL_DIR}"
"${${_PKG_VAR}_DLL_DIR}/${_dll_glob}.dll"
)
list(APPEND _pkg_dlls "${_pkg_dll}")
file( GLOB _pkg_pdb RELATIVE "${${_PKG_VAR}_DLL_DIR}"
"${${_PKG_VAR}_DLL_DIR}/${_dll_glob}.pdb"
)
list(APPEND _pkg_pdbs "${_pkg_pdb}")
endforeach()
set ( ${_PKG_VAR}_DLLS ${_pkg_dlls}
CACHE FILEPATH "${_PKG_NAME} DLL list"
)
set ( ${_PKG_VAR}_PDBS ${_pkg_pdbs}
CACHE FILEPATH "${_PKG_NAME} PDB list"
)
mark_as_advanced( ${_PKG_VAR}_DLL_DIR ${_PKG_VAR}_DLLS ${_PKG_VAR}_PDBS )
else()
set( ${_PKG_VAR}_DLL_DIR )
set( ${_PKG_VAR}_DLLS )
set( ${_PKG_VAR}_PDBS )
endif()
endfunction()

View File

@ -8,6 +8,7 @@
# ZLIB_FOUND - True if zlib found.
# ZLIB_DLL_DIR - (Windows) Path to the zlib DLL.
# ZLIB_DLL - (Windows) Name of the zlib DLL.
# ZLIB_PDB - (Windows) Name of the zlib PDB.
#
# ZLIB_VERSION_STRING - The version of zlib found (x.y.z)
# ZLIB_VERSION_MAJOR - The major version of zlib
@ -34,9 +35,9 @@
# (To distribute this file outside of CMake, substitute the full
# License text for the above reference.)
# We set these manually on Windows.
#INCLUDE(FindWSWinLibs)
#FindWSWinLibs("zlib" "ZLIB_HINTS")
include( FindWSWinLibs )
# Zlib is included with GLib2
FindWSWinLibs( "vcpkg-export-*" "ZLIB_HINTS" )
if (NOT ZLIB_INCLUDE_DIR OR NOT ZLIB_LIBRARY)
find_package(PkgConfig)
@ -88,16 +89,10 @@ IF(ZLIB_INCLUDE_DIR AND EXISTS "${ZLIB_INCLUDE_DIR}/zlib.h")
ENDIF()
#
# Sigh. On Windows, we build libz as part of the Wireshark build
# process, so we don't necessarily *have* a libz library to search
# for inflatePrime() at this point; the search fails on the buildbots,
# for example. See bug 13850.
#
# So, on Windows, we just assume we have a new enough version of
# libz, so that it has inflatePrime().
# inflatePrime was added in zlib 1.2.2.4 in 2005. We're guaranteed
# to have it on Windows.
#
IF(WIN32)
MESSAGE(STATUS "Zlib might not be built yet; assume it contains inflatePrime")
SET(HAVE_INFLATEPRIME ON)
ELSE()
INCLUDE(CMakePushCheckState)
@ -133,24 +128,14 @@ FIND_PACKAGE_HANDLE_STANDARD_ARGS(ZLIB REQUIRED_VARS ZLIB_LIBRARY ZLIB_INCLUDE_D
VERSION_VAR ZLIB_VERSION_STRING)
IF(ZLIB_FOUND)
AddWSWinDLL(ZLIB ZLIB_HINTS "zlib*")
SET(ZLIB_INCLUDE_DIRS ${ZLIB_INCLUDE_DIR})
SET(ZLIB_LIBRARIES ${ZLIB_LIBRARY})
#if (WIN32)
# set ( ZLIB_DLL_DIR "${ZLIB_HINTS}"
# CACHE PATH "Path to the Zlib DLL"
# )
# file( GLOB _zlib_dll RELATIVE "${ZLIB_DLL_DIR}"
# "${ZLIB_DLL_DIR}/zlib1.dll"
# )
# set ( ZLIB_DLL ${_zlib_dll}
# # We're storing filenames only. Should we use STRING instead?
# CACHE FILEPATH "Zlib DLL file name"
# )
# mark_as_advanced( ZLIB_DLL_DIR ZLIB_DLL )
#endif()
ELSE()
SET(ZLIB_INCLUDE_DIRS )
SET(ZLIB_LIBRARIES )
SET(ZLIB_DLL_DIR )
SET(ZLIB_DLL )
SET(ZLIB_PDB )
ENDIF()

View File

@ -69,8 +69,8 @@ Param(
# trouble instead of trying to catch exceptions everywhere.
$ErrorActionPreference = "Stop"
$Win64CurrentTag = "2019-02-08"
$Win32CurrentTag = "2019-02-08"
$Win64CurrentTag = "2019-03-18"
$Win32CurrentTag = "2019-03-18"
# Archive file / SHA256
$Win64Archives = @{
@ -78,12 +78,10 @@ $Win64Archives = @{
"bcg729-1.0.4-win64ws.zip" = "9a095fda4c39860d96f0c568830faa6651cd17635f68e27aa6de46c689aa0ee2";
"c-ares-1.15.0-win64ws.zip" = "ade864fd08e887d353a9c939fa6e68b0bf3e08761b6e81f60ce15e6543256552";
"gnutls-3.6.3-1-win64ws.zip" = "994ac2578e7b4ca01e589ab2598927d53f7370bc3ff679f3006b0e6bb7a06df4";
"glib2-2.52.2-1.31-win64ws.zip" = "e19a7812db6715c632a5bbf96452ab474a4eaf0c6aaee999323ac7beb7ebe6db";
"krb5-1.17-1-win64ws.zip" = "1f4a7ab86ae331ea9e58c9776a60def81ae9fe622882b2e8da2ad6ce6f6fb1d8";
"libgcrypt-1.8.3-win64ws.zip" = "53b1c636cb89de308ca4ea01b4990cf1deca7f6c2446189c7ff6e971137ffd76";
"libsmi-svn-40773-win64ws.zip" = "571fcee71d741bf847c3247d4c2e1c42388ca6a9feebe08fc0d4ce053571d15d";
"libssh-0.7.3-1-win64ws.zip" = "3a81b9f4a914a46f15243bbb13b6919ef1c20d4bf502c47646caeccff2cbd75c";
"libxml2-2.9.9-win64ws.zip" = "4ee89f74f650e52c1ba524fea3dd8529030c94e1ac5b91af34f22376f438fc43";
"lua-5.2.4-unicode-win64-vc14.zip" = "e8968d2c7871ce1ea82cbd29ac1b3a2c59d3dec25e483c5e12de85df66f5d928";
"lz4-1.7.5-win64ws.zip" = "dc946b68238c25cbc216901332d608d7f4b084be2d401210f74ce68b9b93207f";
"MaxMindDB-1.3.2-win64ws.zip" = "9025c43e9b21ff0bfbaf206b8ed96e2920ef1434107f789e4c7c0c1d8b508952";
@ -91,9 +89,9 @@ $Win64Archives = @{
"sbc-1.3-1-win64ws.zip" = "08cef6898c421277a6582ef3225d8820f74a037cbd5b6e673a4d8f4593ce80a1";
"snappy-1.1.3-1-win64ws.zip" = "692a15e70f2cdeca621988a46e936d3651e7feb5176981f2656a5e913c394bcc";
"spandsp-0.0.6-1-win64ws.zip" = "0e46c61a5a8dca562c36e88a8962a50c1ec1a9fcf89dd05996dac5a79e454527";
"vcpkg-export-20190318-win64ws.zip" = "72c2c43594b0581de2bc86517870a561cc40df294662502536b2a6c06cace87e";
"WinSparkle-0.5.7.zip" = "56d396ef0c4e8b0589ea74134e484376ca6459d972cd1ab1da6b9624d82e6d04";
"WpdPack_4_1_2.zip" = "ea799cf2f26e4afb1892938070fd2b1ca37ce5cf75fec4349247df12b784edbd";
"zlib-1.2.11-2-ws.zip" = "82764f71649cdc1e5467686289936ca7f632966186e2fce35df94037e4ecb596";
}
$Win32Archives = @{
@ -101,12 +99,10 @@ $Win32Archives = @{
"bcg729-1.0.4-win32ws.zip" = "b785ec78dec6bca8252130eb884bfa28c1140001dd7369a535579176de9e4271";
"c-ares-1.15.0-win32ws.zip" = "a54151203a631b478470aaa21b3a1fde6178f2fea9f15a1a6da4bfcecc92cfcd";
"gnutls-3.6.3-1-win32ws.zip" = "42d8313ffb888f525d6c39330c39bcc2182e68ee8433a09dd85e1f1e1474f592";
"glib2-2.52.2-1.34-win32ws.zip" = "28c426a7b64c1cd5b058c2f25685ddfaebca29083bd8f94fec2a8910ece6faf0";
"krb5-1.17-1-win32ws.zip" = "f90cac08355ccfe624652d3e05f8e2e077b8830382315d4ea0a6fa52af08260b";
"libgcrypt-1.8.3-win32ws.zip" = "409b72f2809019050cca91b9e670047c50a0752ff52999089178da54ef926393";
"libsmi-svn-40773-win32ws.zip" = "44bc81edfeb8948322ca365fc632e419383907c305cc922e6b74fdbb13827958";
"libssh-0.7.3-1-win32ws.zip" = "b02f0d318175194ac538a24c9c9fc280a0ecad69fb3afd4945c106b4b7c4fa6f";
"libxml2-2.9.9-win32ws.zip" = "af41d0869533f06c6878cd49146253acb4dd58c4987bfd579803c42ee10ca7b2";
"lua-5.2.4-unicode-win32-vc14.zip" = "ca2368a83f623674178e9441f71fb791e3c0b46f208e3dac28c6ac735f034bff";
"lz4-1.7.5-win32ws.zip" = "1b2e4b509163bc5039c0694369b9e40ba27cdbf4c4c88fcd454ba6a34c79b41b";
"MaxMindDB-1.3.2-win32ws.zip" = "5c8b4bf3092da8fad6edb005a5283c6a74b7e115a50da010953eed77d33c11b7";
@ -114,9 +110,9 @@ $Win32Archives = @{
"sbc-1.3-1-win32ws.zip" = "ad37825e9ace4b849a5442c08f1ed7e30634e6b774bba4307fb86f35f82e71ba";
"snappy-1.1.3-1-win32ws.zip" = "2508ef7c5d27655c356d7b86a00ac887fc178eab5df63595b8793953dae5c379";
"spandsp-0.0.6-1-win32ws.zip" = "3c25f2f4d641d4257ec9922f6db77346a8eed2e360e7d0e27b828ade19c4705b";
"vcpkg-export-20190318-win32ws.zip" = "5f9eb78b1ea9e6762c2a4104e0126f1f5453919dc9df66fef2b1e0be8d8c5829";
"WinSparkle-0.5.7.zip" = "56d396ef0c4e8b0589ea74134e484376ca6459d972cd1ab1da6b9624d82e6d04";
"WpdPack_4_1_2.zip" = "ea799cf2f26e4afb1892938070fd2b1ca37ce5cf75fec4349247df12b784edbd";
"zlib-1.2.11-2-ws.zip" = "82764f71649cdc1e5467686289936ca7f632966186e2fce35df94037e4ecb596";
}
# Subdirectory to extract an archive to