Le manuel officiel de R distingue trois niveaux de signalement dans les résultats de contrôle d’un paquet : ERROR, WARNING et NOTE (documentation de R CMD check). Cette différence justifie une règle simple : si un paquet scientifique doit fonctionner sur macOS, ou si son flux de développement dépend de composants propres au Mac, exécutez R CMD check dans un environnement macOS natif, après avoir vérifié R et la chaîne d’outils. Un contrôle réussi sur Mac ne valide ni Windows, ni Linux, ni une décision d’acceptation de CRAN.
Ce guide s’adresse aux chercheurs et doctorants qui maintiennent un paquet R pour leur équipe et doivent vérifier les sources, les tests et la documentation avant publication ou transmission. Il convient aussi aux développeurs de code natif qui doivent diagnostiquer la compilation sur macOS arm64, ainsi qu’aux équipes techniques universitaires qui organisent une validation pour des collègues sans Mac.
Avant le contrôle : fixer l’environnement de référence
Une vérification n’est utile que si l’équipe peut comprendre dans quelles conditions elle a été exécutée. Avant de lancer les commandes, notez la version de R, la version de macOS, l’architecture utilisée, l’état des dépendances et l’identifiant du commit contrôlé. Ces éléments ne constituent pas une garantie de reproductibilité, mais ils permettent de comparer un échec observé sur le Mac à celui d’un autre poste ou d’une exécution ultérieure.
Pour consigner les informations de base, ouvrez une session R depuis le terminal et enregistrez le résultat des commandes suivantes dans le compte rendu de validation :
R.version.string
R.version$platform
sessionInfo()
Vérifiez aussi que le répertoire de travail correspond bien à une copie propre du projet. Une installation locale de dépendance ou un fichier ignoré par le système de gestion de versions peut autrement masquer un problème de paquet incomplet. Le commit et les fichiers présents doivent être ceux que l’équipe prévoit réellement de construire et de transmettre.
La chaîne Apple mérite une vérification distincte. Les Apple Command Line Tools fournissent des outils de développement en ligne de commande ; leur installation et leur sélection se gèrent séparément de l’installation complète de Xcode. Les instructions d’Apple décrivent l’installation des outils en ligne de commande et le choix des outils actifs. Contrôlez le chemin sélectionné et le compilateur disponible :
xcode-select -p
clang --version
Ces commandes servent à observer l’environnement, pas à prouver que chaque dépendance du paquet est présente ou compatible. Si le chemin affiché ne correspond pas à l’installation attendue, corrigez d’abord la sélection des outils en suivant la documentation Apple. N’installez pas automatiquement l’application complète Xcode pour chaque échec : le besoin dépend du paquet, des outils invoqués et des bibliothèques qu’il utilise.
À retenir : la présence d’un compilateur ne prouve pas que le paquet peut être lié correctement. Il faut aussi vérifier les en-têtes, les bibliothèques système, l’architecture et les options de compilation effectivement utilisées.
Que faut-il préparer avant de lancer R CMD check sur Mac ?
Préparez une copie propre des sources, les dépendances déclarées, l’identifiant du commit et les informations de R, macOS et architecture. Vérifiez ensuite que les outils en ligne de commande actifs sont ceux prévus. Si le paquet appelle une bibliothèque système ou un compilateur particulier, consignez également comment cette dépendance est installée : sans ce contexte, un résultat difficile à reproduire ne permet pas de séparer un défaut du paquet d’un écart entre machines.
Construction des sources : contrôler ce qui sera transmis
Contrôler uniquement le répertoire de travail ne suffit pas toujours. Le contrôle doit aussi porter sur l’archive source que l’équipe prévoit de distribuer : c’est cette étape qui aide à repérer les fichiers manquants, les chemins accidentellement locaux ou les éléments qui ne sont pas inclus dans le paquet construit. La documentation de R décrit les opérations de construction et de vérification dans le manuel Writing R Extensions, tandis que la documentation des outils R détaille les fonctions liées à la construction et au contrôle des paquets.
Depuis le dossier parent du paquet, la séquence de base est :
R CMD build nom_du_paquet
R CMD check nom_du_paquet_1.0.tar.gz
Remplacez les noms d’exemple par ceux du projet et utilisez l’archive produite par la construction, pas un nom supposé. Consultez la sortie de R CMD build pour confirmer que la création de l’archive s’est terminée sans erreur, puis passez cette archive à R CMD check. Le manuel officiel de R explique aussi les options de contrôle, dont --as-cran. Cette option peut aider à examiner un paquet dans un mode orienté vers les contrôles associés à CRAN ; elle ne transforme pas un résultat local en pré-acceptation officielle.
Conservez la sortie complète de la commande et le répertoire de résultats créé par le contrôle. Dans le dossier de validation, associez ces éléments au commit et aux informations d’environnement enregistrées précédemment. Un extrait terminal seul est souvent insuffisant : il peut montrer le résumé sans le contexte qui indique à quelle étape le problème est apparu.
À la lecture du compte rendu, séparez les trois niveaux mentionnés dans le manuel :
ERRORsignale un échec qui empêche de considérer le contrôle comme réussi.WARNINGidentifie un problème à examiner et à résoudre avant de conclure que le paquet est prêt.NOTEapporte une information ou signale un point qui demande une interprétation documentée.
Cette classification évite deux erreurs opposées : considérer toute note comme un blocage absolu, ou traiter une erreur comme une simple remarque. Il faut lire le détail associé et relier chaque message à une étape précise : construction, installation, compilation, exécution des tests, exemples ou documentation.
Compilation : isoler la source d’un échec natif
Les paquets qui contiennent du C, du C++ ou du Fortran, ou qui s’appuient sur une bibliothèque système, ajoutent une couche de diagnostic. Un échec de compilation peut venir du code du paquet, d’un en-tête absent, d’une bibliothèque introuvable, d’un outil actif différent de celui attendu ou d’une incompatibilité entre architectures. Le message final n’identifie pas toujours à lui seul la cause initiale : l’équipe doit remonter aux premières lignes pertinentes du journal, plutôt que de modifier le code à partir de la dernière erreur affichée.
Commencez par relever le nom du fichier source, la commande de compilation et le premier message d’erreur significatif. Vérifiez ensuite, séparément, que les en-têtes invoqués existent, que la bibliothèque liée est disponible et que les outils sélectionnés correspondent à l’environnement prévu. Le manuel R sur les contrôles et les variables d’environnement apporte des précisions utiles sur le déroulement de ces opérations.
Par où commencer lorsqu’une erreur de compilation survient sur Mac ?
Par le premier échec du journal, puis par la dépendance qu’il mentionne. Si un fichier d’en-tête manque, examinez l’installation de la bibliothèque qui le fournit ; si une commande ou un compilateur inattendu apparaît, vérifiez les outils actifs ; si le code est effectivement rejeté, réduisez le problème à un exemple minimal. Cette démarche permet de ne pas attribuer au code R une panne qui vient en réalité d’une dépendance ou d’un environnement différent.
Pour isoler l’origine, reproduisez l’échec dans une copie propre du projet et changez une seule condition à la fois. Par exemple, comparez le résultat avec et sans la dépendance externe seulement si cette comparaison correspond à l’architecture réelle du paquet. Évitez de recommander une installation universelle de compilateur ou de bibliothèque : le correctif doit suivre le message d’erreur et les dépendances déclarées, pas une recette appliquée indistinctement à tous les projets.
Pour un paquet destiné à Apple Silicon, contrôlez que les dépendances et les bibliothèques chargées appartiennent à une architecture cohérente avec celle de R et de l’exécution. Une compilation qui réussit sur une installation donnée ne valide pas automatiquement une autre combinaison d’architecture et de dépendances. Le résultat doit donc préciser l’environnement testé, et non seulement indiquer « compilation réussie ».
Tests et documentation : valider le parcours scientifique
Après la compilation, examinez les tests, les exemples, les vignettes et les fichiers d’aide. Un contrôle complet doit pouvoir les exécuter dans un contexte propre, sans dépendre d’un fichier conservé dans le dossier personnel d’un auteur, d’une donnée privée inaccessible à l’équipe ou d’un objet créé manuellement dans une session interactive. Le manuel R consacré à la construction et au contrôle des paquets décrit les étapes prises en compte par R CMD check ; la documentation de la fonction testInstalledPackage précise également le contrôle de tests sur un paquet installé.
Pour chaque échec, identifiez d’abord la catégorie concernée. Un test qui ne trouve pas un fichier peut révéler un chemin absolu ou une donnée absente de l’archive ; un exemple qui échoue peut dépendre d’un état de session antérieur ; une vignette qui ne se construit pas peut révéler une dépendance documentaire non déclarée ou une instruction devenue obsolète. Corrigez la cause dans le paquet, puis reconstruisez l’archive avant de relancer le contrôle : vérifier uniquement une modification dans le répertoire source ne confirme pas qu’elle figure dans le livrable.
Comment localiser un échec de vignette ou de documentation ?
Repérez l’étape et le fichier mentionnés dans le journal, puis reproduisez la construction dans une session propre, à partir de l’archive construite. Vérifiez les dépendances de génération, les chemins d’accès aux données, les liens internes et les exemples intégrés aux pages d’aide. Si la vignette utilise une ressource volumineuse ou un accès externe, déterminez si cette dépendance fait partie du fonctionnement attendu ou si le document doit être adapté pour se construire sans elle.
Les résultats scientifiques demandent une interprétation spécifique. Des différences d’arrondi ou de comportement entre plateformes ne doivent pas être neutralisées avec un seuil improvisé. La tolérance numérique et les résultats attendus doivent être définis par le projet, justifiés par le type de calcul et appliqués de manière cohérente aux plateformes visées. Pour une analyse audio ou vidéo, par exemple, l’équipe peut aussi vérifier que les exemples utilisent bien les fichiers d’entrée prévus et qu’ils ne dépendent pas d’un chemin propre à une station de travail. Cela relève de la validation du flux scientifique, et non d’une garantie générale que tous les environnements produiront des sorties identiques.
Choisir la validation adaptée : Mac local, autre plateforme ou environnement distant
Le choix dépend de ce que le paquet doit démontrer. Un contrôle sur Mac répond à une question de compatibilité dans l’environnement testé ; une vérification multiplateforme exige de contrôler les autres systèmes concernés ; une soumission à CRAN relève en plus de la politique en vigueur et de l’évaluation du dépôt. La CRAN Repository Policy doit être relue avant une soumission, car un résultat local ne garantit pas que le dépôt acceptera le paquet.
| Option | Ce qu’elle permet de vérifier | Limite à garder en tête | À privilégier quand |
|---|---|---|---|
| Contrôle natif sur Mac | Construction, compilation et exécution dans l’environnement macOS effectivement consigné | Ne valide pas Windows ou Linux | Le paquet doit prendre en charge macOS ou dépend d’éléments propres au Mac |
| Contrôle sous Windows ou Linux | Comportements et dépendances propres au système testé | Ne remplace pas le contrôle macOS si cette plateforme est visée | Le logiciel est distribué sur plusieurs systèmes |
| Contrôle orienté CRAN et examen de la politique | Préparation à des exigences et contrôles associés à une soumission | Ne constitue pas une garantie d’acceptation | Le projet prévoit une soumission à CRAN |
Un résultat réussi sur Mac signifie-t-il que le paquet fonctionne sous Windows et Linux ?
Non. Il indique que le paquet a passé les contrôles exécutés dans l’environnement macOS consigné. Les bibliothèques système, les compilateurs, les chemins, les comportements de fichiers et les dépendances peuvent différer selon le système. Si le projet annonce la prise en charge de Windows ou Linux, organisez des contrôles distincts sur ces plateformes et consignez leurs résultats séparément.
Lorsque l’équipe ne dispose pas d’un Mac sur place, un environnement macOS distant peut compléter les machines existantes. Il est alors utile pour exécuter les commandes, observer les journaux et préparer une validation ciblée, à condition que le projet puisse être transmis de façon sûre et que l’environnement choisi corresponde aux besoins du test. NodeMini présente son accès à des Mac distants ; avant de retenir cette solution, vérifiez les exigences de confidentialité de l’équipe, la méthode d’accès aux données et la possibilité de conserver les journaux nécessaires à l’audit.
Le contrôle distant ne supprime pas la nécessité d’une méthode reproductible. Le développeur doit fournir une copie du projet identifiée par commit, préciser les dépendances nécessaires et récupérer l’archive construite ainsi que les résultats du contrôle. Si un accès réseau ou des fichiers confidentiels sont indispensables, l’équipe doit d’abord valider que ce mode d’accès est compatible avec ses règles institutionnelles. Pour comparer des besoins ponctuels et une utilisation suivie, examinez les conditions de commande d’un Mac mini distant sans confondre disponibilité d’une machine et validation technique du paquet.
Pour l’équipe : un journal exploitable associe le résultat, le commit, l’environnement, les dépendances installées et les limites connues. Sans ces éléments, la mention « vérifié sur Mac » ne suffit pas à reproduire ni à transmettre le contrôle.
Remise du paquet : formuler une conclusion vérifiable
Avant de publier ou de transférer le projet, rassemblez l’archive réellement contrôlée, la sortie complète de R CMD check, les informations d’environnement, les erreurs corrigées et les points restant à examiner. Ajoutez une liste explicite des plateformes non testées. Cette synthèse évite qu’un prochain mainteneur interprète un contrôle macOS comme une certification générale.
La documentation de R sur l’installation et l’administration de R sur macOS peut aider à décrire le contexte d’installation, tandis que le manuel sur les extensions précise les vérifications disponibles. Pour une équipe qui envisage CRAN, relisez la politique de soumission en vigueur juste avant l’envoi : les exigences doivent être vérifiées au moment de la démarche, et non déduites d’un ancien journal.
La conclusion de validation peut rester concise, mais elle doit distinguer les preuves des hypothèses. Indiquez que l’archive précise a passé ou non le contrôle dans l’environnement macOS consigné, mentionnez les problèmes résolus et les limites restantes, puis nommez les autres plateformes qui nécessitent leur propre exécution. Si Windows, Linux ou une soumission à CRAN sont visés, planifiez ces étapes au lieu de les déduire du résultat obtenu sur Mac.
Pour une équipe sans Mac, un poste de laboratoire reste préférable lorsque les tests exigent des périphériques physiques, un accès local protégé ou une charge soutenue et régulière. En revanche, pour une validation macOS ponctuelle avant publication ou une vérification ciblée d’un paquet, l’environnement distant évite de devoir acheter immédiatement une machine dédiée. Si le laboratoire compare cette option à son dispositif actuel, les limites à examiner sont concrètes : l’absence de Mac empêche le contrôle natif, une machine Linux ou Windows ne reproduit pas la chaîne macOS, et un transfert manuel du projet peut compliquer la conservation des journaux. Dans ce cas, une session temporaire sur un Mac distant via NodeMini peut compléter le parc existant ; le choix doit rester lié au calendrier du paquet et aux règles de données de l’établissement, plutôt qu’à la promesse qu’un seul contrôle couvrirait toutes les plateformes.