Partager via


vcpkg_extract_source_archive

Extrayez une archive.

Utilisation

vcpkg_extract_source_archive(
    <out-var>
    ARCHIVE <path>
    [NO_REMOVE_ONE_LEVEL]
    [SKIP_PATCH_CHECK]
    [PATCHES <patch>...]
    [SOURCE_BASE <base>]
    [BASE_DIRECTORY <relative-path> | WORKING_DIRECTORY <absolute-path>]
)

Paramètres

<out-var>

Nom de la variable à définir avec le répertoire contenant le contenu extrait.

ARCHIVE

Chemin complet de l’archive à extraire.

NO_REMOVE_ONE_LEVEL

Ignorez la suppression du répertoire de niveau supérieur de l’archive.

La plupart des archives contiennent un seul répertoire de niveau supérieur, par exemple :

zlib-1.2.11/
    doc/
        ...
    examples/
        ...
    ChangeLog
    CMakeLists.txt
    README
    zlib.h
    ...

Par défaut, vcpkg_extract_source_archive supprime ce répertoire et déplace tout le contenu dans le répertoire retourné dans <out-var>. S’il n’existe aucun répertoire de niveau supérieur, il s’agit d’une erreur.

Avec cet indicateur, le répertoire de niveau supérieur est conservé et il n’est pas une erreur de ne pas en avoir un.

SKIP_PATCH_CHECK

Silence et ignorer les erreurs lors de l’application de correctifs.

Cette option ne doit être transmise qu’en mode instable comme --head. Si les sources sont épinglées, l’échec de l’application d’un correctif doit être considéré comme une erreur irrécupérable.

CORRECTIFS

Liste des correctifs à appliquer à la source extraite.

Les correctifs seront appliqués dans l’ordre, une fois les répertoires de niveau supérieur supprimés (voir NO_REMOVE_ONE_LEVEL). Les chemins relatifs sont interprétés par rapport au répertoire de port actuel.

Si un correctif doit être appliqué de manière conditionnelle en fonction des informations cibles, vous pouvez construire une liste et la plaquer.

set(patches "")
if(VCPKG_TARGET_IS_WINDOWS)
    list(APPEND patches only-windows.patch)
endif()
vcpkg_extract_source_archive(src
    ARCHIVE "${archive}"
    PATCHES
        always-applied.patch
        ${patches}
)

SOURCE_BASE

Nom de l’annuaire extrait.

Ne doit pas contenir de séparateurs de chemin d’accès (/ ou \\).

Consultez WORKING_DIRECTORY pour plus d’informations.

BASE_DIRECTORY

Sous-dossier racine du répertoire extrait.

La valeur par défaut est src. Doit être un chemin relatif.

Consultez WORKING_DIRECTORY pour plus d’informations.

WORKING_DIRECTORY

Dossier racine du répertoire extrait.

La valeur par défaut est ${CURRENT_BUILDTREES_DIR}/<BASE_DIRECTORY>. Doit être un chemin absolu.

vcpkg_extract_source_archive extrait l’archive dans <WORKING_DIRECTORY>/<SOURCE_BASE>-<short-hash>.clean. Si le dossier existe, il est supprimé avant l’extraction. Sans spécifier SOURCE_BASE, BASE_DIRECTORYou , ce WORKING_DIRECTORYsera par défaut .${CURRENT_BUILDTREES_DIR}/src/<archive-stem>-<short-hash>.clean

En --editable mode :

  1. Aucun suffixe n’est .clean ajouté au dossier extrait
  2. Le dossier extrait n’est pas supprimé. S’il existe, vcpkg_extract_source_archive ne fait rien.

<short-hash> identifie sans ambiguïté un ensemble particulier de contenu d’archive et de fichier de correctif. Toutes les modifications apportées au contenu du répertoire de travail après l’appel de cette fonction doivent être appliquées de manière inconditionnelle afin d’éviter un comportement inattendu en mode modifiable.

Exemples

vcpkg_download_distfile(
    archive # "archive" is set to the path to the downloaded file
    URLS "https://nmap.org/dist/nmap-7.70.tar.bz2"
    FILENAME "nmap-7.70.tar.bz2"
    SHA512 084c148b022ff6550e269d976d0077f7932a10e2ef218236fe13aa3a70b4eb6506df03329868fc68cb3ce78e4360b200f5a7a491d3145028fed679ef1c9ecae5
)
vcpkg_extract_source_archive(
    src # "src" is set to the path to the extracted files
    ARCHIVE "${archive}"
    SOURCE_BASE nmap.org-nmap-7.70
    PATCHES
        0001-disable-werror.patch
)
vcpkg_cmake_configure(SOURCE_PATH "${src}")

Notes

Syntaxe déconseillée

Cette commande prend également en charge une surcharge déconseillée :

vcpkg_extract_source_archive(<archive> [<working_directory>])

La surcharge déconseillée extrait <archive>${working_directory}/<archive-filename>.extracted si la cible n’existe pas. Ce comportement incorrect permet aux correctifs et à d’autres modifications de fuite entre différentes builds, ce qui entraîne des erreurs de débogage difficiles à déboguer.

Toutes les utilisations de la surcharge déconseillée doivent être remplacées par la syntaxe de l’utilisation ci-dessus en ajoutant un paramètre explicite ARCHIVE et en remplaçant les références directes au chemin extrait par des utilisations du <out-var>.

Remplacement

Cette commande remplace vcpkg_extract_source_archive_ex().

Source

scripts/cmake/vcpkg_extract_source_archive.cmake