aboutsummaryrefslogtreecommitdiff
path: root/vcpkg/ports/nss
diff options
context:
space:
mode:
Diffstat (limited to 'vcpkg/ports/nss')
-rw-r--r--vcpkg/ports/nss/02-gen-debug-info-for-release.patch15
-rw-r--r--vcpkg/ports/nss/03-use-debug-crt-for-debug.patch13
-rwxr-xr-xvcpkg/ports/nss/configure14
-rw-r--r--vcpkg/ports/nss/include-dirs.diff49
-rw-r--r--vcpkg/ports/nss/portfile.cmake293
-rw-r--r--vcpkg/ports/nss/vcpkg.json33
6 files changed, 417 insertions, 0 deletions
diff --git a/vcpkg/ports/nss/02-gen-debug-info-for-release.patch b/vcpkg/ports/nss/02-gen-debug-info-for-release.patch
new file mode 100644
index 0000000..435abea
--- /dev/null
+++ b/vcpkg/ports/nss/02-gen-debug-info-for-release.patch
@@ -0,0 +1,15 @@
+diff -ur
+--- a/nss/coreconf/config.gypi 2021-11-09 22:46:52.555246500 -0800
++++ b/nss/coreconf/config.gypi 2021-11-10 00:49:48.044560100 -0800
+@@ -638,9 +638,11 @@
+ 'VCCLCompilerTool': {
+ 'Optimization': '<(release_optimization_level)',
+ 'RuntimeLibrary': '2', # /MD
++ 'DebugInformationFormat': '3',
+ },
+ 'VCLinkerTool': {
+ 'LinkIncremental': '1',
++ 'GenerateDebugInformation' : 'true',
+ },
+ },
+ },
diff --git a/vcpkg/ports/nss/03-use-debug-crt-for-debug.patch b/vcpkg/ports/nss/03-use-debug-crt-for-debug.patch
new file mode 100644
index 0000000..513dc39
--- /dev/null
+++ b/vcpkg/ports/nss/03-use-debug-crt-for-debug.patch
@@ -0,0 +1,13 @@
+diff --git a/nss/coreconf/config.gypi b/nss/coreconf/config.gypi
+index ae4c708..42633fc 100644
+--- a/nss/coreconf/config.gypi
++++ b/nss/coreconf/config.gypi
+@@ -622,7 +622,7 @@
+ 'VCCLCompilerTool': {
+ 'Optimization': '<(debug_optimization_level)',
+ 'BasicRuntimeChecks': '3',
+- 'RuntimeLibrary': '2', # /MD
++ 'RuntimeLibrary': '3', # /MDd
+ 'DebugInformationFormat': '3',
+ },
+ 'VCLinkerTool': {
diff --git a/vcpkg/ports/nss/configure b/vcpkg/ports/nss/configure
new file mode 100755
index 0000000..bb8882c
--- /dev/null
+++ b/vcpkg/ports/nss/configure
@@ -0,0 +1,14 @@
+#!/bin/bash
+
+filtered_options=()
+for option
+do
+ accept=yes
+ case "${option}" in
+ --host=* | --build=*) accept=no ;;
+ esac
+ if test "${accept}" = "yes"; then filtered_options+=("${option}"); fi
+done
+
+echo Invoking nss/build.sh "${filtered_options[@]}"
+exec nss/build.sh "${filtered_options[@]}"
diff --git a/vcpkg/ports/nss/include-dirs.diff b/vcpkg/ports/nss/include-dirs.diff
new file mode 100644
index 0000000..c83a4b4
--- /dev/null
+++ b/vcpkg/ports/nss/include-dirs.diff
@@ -0,0 +1,49 @@
+diff --git a/nss/lib/sqlite/exports.gyp b/nss/lib/sqlite/exports.gyp
+index 0a424ba..935b223 100644
+--- a/nss/lib/sqlite/exports.gyp
++++ b/nss/lib/sqlite/exports.gyp
+@@ -12,7 +12,6 @@
+ 'copies': [
+ {
+ 'files': [
+- 'sqlite3.h'
+ ],
+ 'destination': '<(nss_private_dist_dir)/<(module)'
+ }
+diff --git a/nss/lib/sqlite/sqlite.gyp b/nss/lib/sqlite/sqlite.gyp
+index 6a9ab3a..b98ab00 100644
+--- a/nss/lib/sqlite/sqlite.gyp
++++ b/nss/lib/sqlite/sqlite.gyp
+@@ -10,8 +10,14 @@
+ 'targets': [{
+ 'target_name': 'sqlite3',
+ 'type': 'none',
++ 'direct_dependent_settings': {
++ 'variables': {
++ 'sqlite_include_dirs%': [],
++ },
++ 'include_dirs': ['<@(sqlite_include_dirs)'],
++ },
+ 'link_settings': {
+- 'libraries': ['<(sqlite_libs)'],
++ 'libraries': ['<@(sqlite_libs)'],
+ },
+ }],
+ }, {
+diff --git a/nss/lib/zlib/zlib.gyp b/nss/lib/zlib/zlib.gyp
+index 07df9a8..215732d 100644
+--- a/nss/lib/zlib/zlib.gyp
++++ b/nss/lib/zlib/zlib.gyp
+@@ -13,6 +13,12 @@
+ 'targets': [{
+ 'target_name': 'nss_zlib',
+ 'type': 'none',
++ 'direct_dependent_settings': {
++ 'variables': {
++ 'zlib_include_dirs%': [],
++ },
++ 'include_dirs': ['<@(zlib_include_dirs)'],
++ },
+ 'link_settings': {
+ 'libraries': ['<@(zlib_libs)'],
+ },
diff --git a/vcpkg/ports/nss/portfile.cmake b/vcpkg/ports/nss/portfile.cmake
new file mode 100644
index 0000000..a0140c6
--- /dev/null
+++ b/vcpkg/ports/nss/portfile.cmake
@@ -0,0 +1,293 @@
+# - The static lib is named "ssl", conflicting with the "ssl" lib from openssl.
+# - The tools use the shared libs.
+# - The pkgconfig file refers to "ssl3"
+# - Linux distros don't install the static lib.
+# (Renaming the static lib to "ssl3" might be an alternative solution.)
+vcpkg_check_linkage(ONLY_DYNAMIC_LIBRARY)
+
+string(REPLACE "." "_" V_URL ${VERSION})
+
+vcpkg_download_distfile(ARCHIVE
+ URLS "https://ftp.mozilla.org/pub/security/nss/releases/NSS_${V_URL}_RTM/src/nss-${VERSION}.tar.gz"
+ FILENAME "nss-${VERSION}.tar.gz"
+ SHA512 5ffb1182e7d65f8895c09656d20bc7146d1616cd4f09046469b2f79f60b57083094c78da39a3f3faa5087742a19f706ce9e7928a662f9f0d3c410514cba2028f
+)
+
+vcpkg_extract_source_archive(
+ SOURCE_PATH
+ ARCHIVE "${ARCHIVE}"
+ SOURCE_BASE "${VERSION}"
+ PATCHES
+ "02-gen-debug-info-for-release.patch"
+ "03-use-debug-crt-for-debug.patch" # See https://learn.microsoft.com/dotnet/api/microsoft.visualstudio.vcprojectengine.runtimelibraryoption
+ include-dirs.diff
+)
+file(GLOB devendor "${SOURCE_PATH}/nss/lib/sqlite/*.?" "${SOURCE_PATH}/nss/lib/zlib/*.?")
+file(REMOVE ${devendor})
+file(COPY "${CURRENT_PORT_DIR}/configure" DESTINATION "${SOURCE_PATH}")
+
+function(download_distfile var url sha512)
+ string(REGEX REPLACE ".*/" "" filename "${url}")
+ vcpkg_download_distfile(archive
+ URLS "${url}"
+ FILENAME "${filename}"
+ SHA512 "${sha512}"
+ )
+ set("${var}" "${archive}" PARENT_SCOPE)
+endfunction()
+
+download_distfile(gyp_next
+ "https://files.pythonhosted.org/packages/37/3e/d920a254ad927c942a541388c84dd1af0db1af6f6c2b96e99d9ec3f3a148/gyp_next-0.20.2-py3-none-any.whl"
+ 53feff516d0de8738910e04e4e5664af27947c0a2bca856c290f9082d18678b03e917403e2c842edb62b6dd5412c625f34edb52d6d9b295c07ef34b3c18981f8
+)
+download_distfile(packaging
+ "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl"
+ a726fb46cce24f781fc8b55a3e6dea0a884ebc3b2b400ea74aa02333699f4955a5dc1e2ec5927ac72f35a624401f3f3b442882ba1cc4cadaf9c88558b5b8bdae
+)
+download_distfile(setuptools
+ "https://files.pythonhosted.org/packages/a3/dc/17031897dae0efacfea57dfd3a82fdd2a2aeb58e0ff71b77b87e44edc772/setuptools-80.9.0-py3-none-any.whl"
+ 2a0420f7faaa33d2132b82895a8282688030e939db0225ad8abb95a47bdb87b45318f10985fc3cee271a9121441c1526caa363d7f2e4a4b18b1a674068766e87
+)
+x_vcpkg_get_python_packages(
+ OUT_PYTHON_VAR PYTHON3
+ PYTHON_VERSION 3
+ PACKAGES "${gyp_next}" "${packaging}" "${setuptools}"
+)
+cmake_path(GET PYTHON3 PARENT_PATH GYP_NEXT_ROOT)
+
+# Prepend to PATH in controlled order
+vcpkg_find_acquire_program(NINJA)
+get_filename_component(NINJA_ROOT "${NINJA}" DIRECTORY)
+vcpkg_add_to_path(PREPEND "${NINJA_ROOT}")
+
+find_program(GYP_NEXT NAMES gyp PATHS "${GYP_NEXT_ROOT}" NO_DEFAULT_PATH REQUIRED)
+message(STATUS "Using ${GYP_NEXT}")
+vcpkg_add_to_path(PREPEND "${GYP_NEXT_ROOT}")
+
+# setup build.sh options -- see help.txt in nss root
+set(OPTIONS "")
+if(VCPKG_TARGET_IS_ANDROID)
+ list(APPEND OPTIONS "-DOS=android")
+elseif(VCPKG_TARGET_IS_FREEBSD)
+ list(APPEND OPTIONS "-DOS=freebsd")
+elseif(VCPKG_TARGET_IS_IOS)
+ list(APPEND OPTIONS "-DOS=ios")
+elseif(VCPKG_TARGET_IS_LINUX)
+ list(APPEND OPTIONS "-DOS=linux")
+elseif(VCPKG_TARGET_IS_OSX)
+ list(APPEND OPTIONS "-DOS=mac")
+elseif(VCPKG_TARGET_IS_OPENBSD)
+ list(APPEND OPTIONS "-DOS=openbsd")
+elseif(VCPKG_TARGET_IS_WINDOWS)
+ list(APPEND OPTIONS "-DOS=win")
+elseif(VCPKG_CROSSCOMPILING)
+ message(WARNING "Cannot determine OS setting for ${TARGET_TRIPLET}")
+endif()
+
+if(VCPKG_TARGET_ARCHITECTURE STREQUAL "x86")
+ list(APPEND OPTIONS "--target=ia32")
+else()
+ list(APPEND OPTIONS "--target=${VCPKG_TARGET_ARCHITECTURE}")
+endif()
+
+function(cygpath_u out_var input) # equivalent to cygpath -u
+ string(REGEX REPLACE "^([a-zA-Z]):/" "/\\1/" input "${input}")
+ set("${out_var}" "${input}" PARENT_SCOPE)
+endfunction()
+
+if(CMAKE_HOST_WIN32 AND VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_MINGW)
+ vcpkg_cmake_get_vars(cmake_vars_file)
+ include("${cmake_vars_file}")
+ if(VCPKG_DETECTED_MSVC)
+ list(APPEND OPTIONS "--msvc")
+ set(ENV{PYTHONUTF8} 1)
+
+ # vswhere needed in PATH
+ cmake_path(SET vswhere "$ENV{ProgramFiles\(x86\)}/Microsoft Visual Studio/Installer/vswhere.exe")
+ if(NOT EXISTS "${vswhere}")
+ vcpkg_execute_in_download_mode(
+ COMMAND "$ENV{VCPKG_COMMAND}" fetch vswhere --x-stderr-status
+ OUTPUT_VARIABLE vswhere
+ RESULT_VARIABLE error_code
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ WORKING_DIRECTORY "${DOWNLOADS}"
+ )
+ if(NOT error_code STREQUAL "0")
+ message(FATAL_ERROR "Failed to fetch vswhere.")
+ endif()
+ string(REGEX REPLACE "^.*\n *" "" vswhere "${vswhere}")
+ endif()
+ message(STATUS "Using ${vswhere}")
+ cmake_path(GET vswhere PARENT_PATH vswhere_dir)
+ vcpkg_host_path_list(APPEND ENV{PATH} "${vswhere_dir}")
+
+ # Set GYP_MSVS_OVERRIDE_PATH and GYP_MSVS_VERSION for actual cl.exe
+ if("$ENV{GYP_MSVS_OVERRIDE_PATH}" STREQUAL "" OR "$ENV{GYP_MSVS_VERSION}" STREQUAL "")
+ execute_process(
+ COMMAND "${vswhere}"
+ -nologo
+ -property resolvedInstallationPath
+ -path "${VCPKG_DETECTED_CMAKE_C_COMPILER}"
+ OUTPUT_VARIABLE msvs_installdir
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
+ message(STATUS "MSVS resolvedInstallationPath: ${msvs_installdir}")
+ if(NOT EXISTS "${msvs_installdir}")
+ message(FATAL_ERROR "Failed to determine MSVS dir for ${VCPKG_DETECTED_CMAKE_C_COMPILER}.")
+ endif()
+ cygpath_u(vspath "${msvs_installdir}")
+ set(ENV{VSPATH} "${vspath}")
+ set(ENV{GYP_MSVS_OVERRIDE_PATH} "${vspath}")
+
+ execute_process(
+ COMMAND "${vswhere}"
+ -nologo
+ -property catalog_productLineVersion
+ -path "${VCPKG_DETECTED_CMAKE_C_COMPILER}"
+ OUTPUT_VARIABLE msvs_version
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
+ message(STATUS "MSVS catalog_productLineVersion: ${msvs_version}")
+ if(NOT msvs_version MATCHES "^20..e?\$")
+ message(FATAL_ERROR "Failed to determine MSVS version for ${VCPKG_DETECTED_CMAKE_C_COMPILER}.")
+ endif()
+ set(ENV{GYP_MSVS_VERSION} "${msvs_version}")
+ endif()
+ endif()
+endif()
+
+x_vcpkg_pkgconfig_get_modules(PREFIX PC_NSPR MODULES nspr CFLAGS LIBS)
+x_vcpkg_pkgconfig_get_modules(PREFIX PC_SQLITE MODULES sqlite3 CFLAGS LIBS)
+x_vcpkg_pkgconfig_get_modules(PREFIX PC_ZLIB MODULES zlib CFLAGS LIBS)
+# Produce absolute include dirs and library dirs filepaths.
+# Manually managing MSVC syntax because gyp converts foo.lib as if it were a relative path.
+foreach(key IN ITEMS NSPR_CFLAGS_RELEASE SQLITE_CFLAGS_RELEASE ZLIB_CFLAGS_RELEASE)
+ separate_arguments(cflags UNIX_COMMAND "${PC_${key}}")
+ string(REPLACE "CFLAGS_RELEASE" "INCLUDE_DIRS" out_var "${key}")
+ set(${out_var} "")
+ foreach(item IN LISTS cflags)
+ if(item MATCHES "^-I(.*)")
+ cmake_path(SET dir NORMALIZE "${CMAKE_MATCH_1}")
+ if(CMAKE_HOST_WIN32)
+ cygpath_u(dir "${dir}")
+ else()
+ endif()
+ list(APPEND ${out_var} "${dir}")
+ endif()
+ endforeach()
+ list(JOIN ${key}_INCLUDE_DIRS ":" ${key}_INCLUDE_DIRS)
+endforeach()
+foreach(out_var IN ITEMS NSPR_LIBS_RELEASE NSPR_LIBS_DEBUG SQLITE_LIBS_RELEASE SQLITE_LIBS_DEBUG ZLIB_LIBS_RELEASE ZLIB_LIBS_DEBUG)
+ separate_arguments(libs UNIX_COMMAND "${PC_${out_var}}")
+ set(${out_var} "")
+ foreach(item IN LISTS libs)
+ if(item MATCHES "^-L(.*)")
+ cmake_path(SET dir NORMALIZE "${CMAKE_MATCH_1}")
+ if(CMAKE_HOST_WIN32)
+ cygpath_u(dir "${dir}")
+ endif()
+ if(VCPKG_DETECTED_MSVC)
+ list(APPEND ${out_var} "-LIBPATH:${dir}")
+ else()
+ list(APPEND ${out_var} "-L${dir}")
+ endif()
+ elseif(item MATCHES "^-l(.*)")
+ list(APPEND ${out_var} "${item}")
+ endif()
+ endforeach()
+endforeach()
+
+# configuring and building in an autotools-like environment, but using gyp-next and ninja
+vcpkg_make_configure(
+ SOURCE_PATH "${SOURCE_PATH}"
+ COPY_SOURCE
+ DISABLE_DEFAULT_OPTIONS
+ DISABLE_MSVC_WRAPPERS
+ DISABLE_MSVC_TRANSFORMATIONS
+ OPTIONS
+ -g
+ -v
+ -j "${VCPKG_CONCURRENCY}"
+ ${OPTIONS}
+ -Ddisable_tests=1
+ -Ddisable_werror=1
+ -Dsign_libs=0
+ -Duse_system_sqlite=1
+ -Duse_system_zlib=1
+ "--with-nspr=${NSPR_INCLUDE_DIRS}:"
+ "-Dsqlite_include_dirs=${SQLITE_INCLUDE_DIRS}"
+ "-Dzlib_include_dirs=${ZLIB_INCLUDE_DIRS}"
+ OPTIONS_DEBUG
+ "-Dnspr_libs=${NSPR_LIBS_DEBUG}"
+ "-Dsqlite_libs=${SQLITE_LIBS_DEBUG}"
+ "-Dzlib_libs=${ZLIB_LIBS_DEBUG}"
+ OPTIONS_RELEASE
+ --opt
+ "-Dnspr_libs=${NSPR_LIBS_RELEASE}"
+ "-Dsqlite_libs=${SQLITE_LIBS_RELEASE}"
+ "-Dzlib_libs=${ZLIB_LIBS_RELEASE}"
+)
+
+if(NOT VCPKG_BUILD_TYPE)
+ set(label "${TARGET_TRIPLET}-dbg")
+ set(binary_dir "${CURRENT_BUILDTREES_DIR}/${label}")
+ message(STATUS "Installing ${label} ...")
+ file(COPY "${binary_dir}/dist/Debug/lib"
+ DESTINATION "${CURRENT_PACKAGES_DIR}/debug"
+ FILES_MATCHING REGEX "[.](a|dylib|lib|so([.][0-9]+)*)\$"
+ )
+ file(GLOB runtime_debug "${binary_dir}/dist/Debug/lib/*.dll" "${binary_dir}/dist/Debug/lib/*.pdb")
+ if(NOT runtime_debug STREQUAL "")
+ file(COPY ${runtime_debug} DESTINATION "${CURRENT_PACKAGES_DIR}/debug/bin")
+ endif()
+endif()
+
+set(label "${TARGET_TRIPLET}-rel")
+set(binary_dir "${CURRENT_BUILDTREES_DIR}/${label}")
+message(STATUS "Installing ${label} ...")
+file(COPY "${binary_dir}/dist/Release/lib"
+ DESTINATION "${CURRENT_PACKAGES_DIR}"
+ FILES_MATCHING REGEX "[.](a|dylib|lib|so([.][0-9]+)*)\$"
+)
+file(GLOB runtime_release "${binary_dir}/dist/Release/lib/*.dll" "${binary_dir}/dist/Release/lib/*.pdb")
+if(NOT runtime_release STREQUAL "")
+ file(COPY ${runtime_release} DESTINATION "${CURRENT_PACKAGES_DIR}/bin")
+endif()
+
+file(COPY "${binary_dir}/dist/public/nss" DESTINATION "${CURRENT_PACKAGES_DIR}/include")
+file(COPY "${binary_dir}/dist/private/nss/" DESTINATION "${CURRENT_PACKAGES_DIR}/include/nss/private")
+
+file(READ "${SOURCE_PATH}/nss/pkg/pkg-config/nss.pc.in" pkgconfig)
+string(REPLACE "%exec_prefix%" "\${prefix}" pkgconfig "${pkgconfig}")
+string(REPLACE "%libdir%" "\${prefix}/lib" pkgconfig "${pkgconfig}")
+string(REPLACE "%includedir%" "\${prefix}/include/nss" pkgconfig "${pkgconfig}")
+string(REPLACE "%NSS_VERSION%" "${VERSION}" pkgconfig "${pkgconfig}")
+string(REPLACE "%NSPR_VERSION%" "4.36" pkgconfig "${pkgconfig}")
+string(APPEND pkgconfig "Requires.private: sqlite3\n")
+file(WRITE "${CURRENT_PACKAGES_DIR}/lib/pkgconfig/nss.pc" "${pkgconfig}")
+if(NOT VCPKG_BUILD_TYPE)
+ file(WRITE "${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/nss.pc" "${pkgconfig}")
+endif()
+vcpkg_fixup_pkgconfig()
+
+vcpkg_copy_tools(
+ TOOL_NAMES
+ "certutil"
+ "cmsutil"
+ "crlutil"
+ "hw-support"
+ "modutil"
+ "nss"
+ "pk12util"
+ "pwdecrypt"
+ "shlibsign"
+ "signtool"
+ "signver"
+ "ssltap"
+ "symkeyutil"
+ "validation"
+ SEARCH_DIR "${binary_dir}/dist/Release/bin"
+ DESTINATION "${CURRENT_PACKAGES_DIR}/tools/${PORT}"
+)
+
+vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/nss/COPYING")
diff --git a/vcpkg/ports/nss/vcpkg.json b/vcpkg/ports/nss/vcpkg.json
new file mode 100644
index 0000000..df586c1
--- /dev/null
+++ b/vcpkg/ports/nss/vcpkg.json
@@ -0,0 +1,33 @@
+{
+ "name": "nss",
+ "version": "3.113.1",
+ "description": "Network Security Services from Mozilla",
+ "homepage": "https://ftp.mozilla.org/pub/security/nss/releases/",
+ "license": "MPL-2.0",
+ "supports": "!arm32 & !(arm & windows)",
+ "dependencies": [
+ "nspr",
+ {
+ "name": "sqlite3",
+ "default-features": false
+ },
+ {
+ "name": "vcpkg-cmake-get-vars",
+ "host": true,
+ "platform": "windows & !mingw"
+ },
+ {
+ "name": "vcpkg-get-python-packages",
+ "host": true
+ },
+ {
+ "name": "vcpkg-make",
+ "host": true
+ },
+ {
+ "name": "vcpkg-pkgconfig-get-modules",
+ "host": true
+ },
+ "zlib"
+ ]
+}