Obtención del código fuente

El proyecto NVDA usa el sistema de control de versiones Git para su código fuente y documentación.
El repositorio git de NVDA está ubicado en https://github.com/nvaccess/nvda.git. Puedes clonarlo con el siguiente comando, que situará los archivos en un directorio llamado nvda:
git clone --recursive https://github.com/nvaccess/nvda.git
La opción --recursive se usa para recuperar varios submódulos Git necesarios.

Dependencias

El código fuente de NVDA depende de varios paquetes para ejecutarse correctamente.

Dependencias instaladas

Necesitas instalar las siguientes dependencias en tu sistema:

  • Python, versión 2.7.13 de 32 bits
  • Microsoft Visual Studio 2017 Community edition, versión 15.3 o posterior:
    • Descarga desde: https://www.visualstudio.com/downloads/
    • Al instalar Visual Studio, necesitas activar lo siguiente: en la pestaña cargas de trabajo, en el grupo Windows:
      • Desarrollo en Universal Windows Platform
      • Desarrollo para escritorio con C++
      • A continuación, en la lista resumen, bajo C++ para escritorio, en el grupo opcional, asegúrate de que se ha seleccionado lo siguiente:
        • Conjunto de herramientas VC++ 2017 v141 (x86,x64)
        • Windows 10 SDK (10.0.15063.0) para escritorio C++ x86 and x64

Submódulos Git

La mayoría de las dependencias van dentro de submódulos Git. Si no pasaste la opción –recursive a git clone, tendrás que ejecutar git submodule update –init. Cada vez que cambie el commit relacionado con un submódulo necesario (por ejemplo después de git pull), deberás ejecutar git submodule update. Si no estás seguro, ejecuta git submodule update después de hacer pull, merge o checkout.
Para referencia, las siguientes dependencias se incluyen como submódulos Git:

Otras dependencias

Estas dependencias no vienen incluidas en submódulos Git, y casi nadie las necesita.

Preparación del código fuente

Antes de que puedas ejecutar NVDA desde el código fuente, debes prepararlo. Esto se hace abriendo un símbolo del sistema, cambiando a la raíz del repositorio con el código fuente y escribiendo:
scons source
Esto debes hacerlo cada vez que cambie la versión de comtypes o se añadan o modifiquen archivos de idioma. Si quieres acceder a la documentación del usuario desde el menú ayuda de NVDA mientras lo ejecutas desde el código fuente, tendrás que añadir en la consola user_docs. Por ejemplo:
scons source user_docs
Mientras hagas pruebas simples o envíes cambios, será más rápido ejecutar scons source, ya que la documentación de usuario cambiará cada vez que se modifique el número de revisión.

Compilación de NVDAHelper con opciones de depuración

Entre otras cosas, la preparación del código fuente construye las bibliotecas de NVDAHelper.
Si tu intención es depurar NVDAHelper, puedes controlar varias opciones de depuración con la variable nvdaHelperDebugFlags en la consola. Esta variable acepta uno o más de los siguientes valores:

  • debugCRT: las bibliotecas se enlazarán con el tiempo de ejecución de C para depuración y se habilitarán las aserciones. (por defecto se deshabilitan las aserciones y se usa el crt normal).
  • RTC: se activarán las comprobaciones en tiempo de ejecución (corrupción de pila, variables sin inicializar, etc.). (por defecto no se hacen pruebas en tiempo de ejecución).
  • analyze: ejecuta el análisis de código de MSVC en todo el código de NVDAHelper, mostrando cada advertencia. (por defecto no hay análisis)

Las palabras clave none y all pueden usarse en lugar de cada valor por separado.
A continuación se muestra un ejemplo que activa las comprobaciones en tiempo de ejecución y la depuración con crt:
scons source nvdaHelperDebugFlags=debugCRT,RTC
Independientemente de las variables de depuración, siempre se generan archivos de símbolos pdb al construir. Sin embargo, no se incluyen en la distribución de NVDA. En vez de eso, scons symbolsArchive los empaqueta en un archivo separado.
Por defecto, la compilación se hace sin argumentos de optimización. Mira el argumento release más abajo para saber qué optimizaciones se activan al usarlo.

Ejecución del código fuente

Para iniciar NVDA desde el código fuente, ejecuta el archivo nvda.pyw que se encuentra en la carpeta source. Para ver una ayuda sobre los argumentos que acepta NVDA, usa las opciones --help o -h. Estos argumentos también están documentados en la guía de usuario. Ya que NVDA es una aplicación gráfica (y no de consola), es mejor ejecutarla con pythonw.exe. Sin embargo, si durante el desarrollo encuentras un error en una fase temprana del inicio de NVDA, puedes usar python.exe y probablemente obtendrás más información sobre el error.

Construcción de NVDA

Una versión binaria de NVDA puede ejecutarse en un sistema sin Python y todas las demás dependencias instaladas (tal y como hace NVAccess con las liberaciones oficiales y las versiones de desarrollo).
Se pueden construir archivos binarios y paquetes usando scons desde la raíz de la distribución del código fuente de NVDA. Para construir cualquiera de ellos, abre un símbolo del sistema y navega a este directorio.
Para hacer una versión binaria no archivada (equivalente a un portable extraído) escribe:
scons dist
La versión compilada se creará en el directorio dist.
Para crear un archivo de lanzador (un ejecutable que permite instalar NVDA o generar un portable) escribe:
scons launcher
El archivo se ubicará en el directorio output.
Para generar la documentación para desarrolladores, escribe:
scons devDocs
Los documentos para desarrolladores aparecerán en la carpeta devDocs dentro del directorio output.
Para generar documentación para desarrolladores de nvdaHelper (no incluida en devDocs):
scons devDocs_nvdaHelper
La documentación aparecerá en la carpeta devDocs\nvdaHelper dentro del directorio output.
Para generar un archivo con símbolos de depuración de varios exes y dlls, escribe:
scons symbolsArchive
El archivo se almacenará en el directorio output.
Para generar una plantilla de traducción gettext (para traductores), escribe:
scons pot
Opcionalmente, la compilación puede personalizarse proporcionando variables en la línea de órdenes:

  • version: la versión de esta compilación.
  • release: indica si esta es una liberación oficial.
    • Esto activa algunas optimizaciones del compilador de C++ como el argumento /O2 o la optimización del programa completo.
    • También indica a Python que genere bytecode optimizado.
  • publisher: el autor de esta compilación.
  • certFile: el archivo con el certificado usado para firmar ejecutables. Debe estar en formato pfx y contener la clave privada dentro.
  • certPassword: la contraseña de la clave privada del certificado. Si se omite, se asume que no hay contraseña.
  • certTimestampServer: la URL del servidor de sellado de tiempo a utilizar para la marca de tiempo authenticode en las firmas. Si se omite, la firma no se sellará.
  • outputDir: el directorio donde se ubicarán los archivos construidos.
  • targetArchitectures: las arquitecturas que debería soportar NVDA. Sus posibles valores son all, x86 y x86_64. Generalmente debería dejarse como está.

Por ejemplo, para construir un lanzador con una versión específica, podrías escribir:
scons launcher version=test1

Ejecución de pruebas automatizadas

Si haces cambios al código de NVDA, deberías ejecutar sus pruebas automatizadas. Estas pruebas ayudan a asegurar que los cambios en el código no rompen de forma involuntaria alguna funcionalidad que previamente estaba operativa.
Actualmente, NVDA dispone de dos tipos de pruebas automatizadas: pruebas unitarias y comprobación de cadenas traducibles.
Para realizar las pruebas, navega al directorio raíz del repositorio como se ha indicado más arriba.
A continuación, ejecuta:
scons tests
Para ejecutar solamente pruebas unitarias específicas, indícalas en la variable unitTests en la línea de órdenes. Las pruebas deberían proporcionarse en una lista separadas por comas. Cada prueba debería especificarse como un módulo, clase o método relativo al directorio tests\unit. Por ejemplo, para ejecutar sólo los métodos en las clases TestMove y TestSelection del archivo tests\unit\test_cursorManager.py, escribe esta orden:
scons tests unitTests=test_cursorManager.TestMove,test_cursorManager.TestSelection
Para ejecutar solamente las comprobaciones de cadenas traducibles (que comprueban que todas las cadenas tienen comentarios para traductores), escribe:
scons checkPot