2012-01-09 18 views
14

Escribo muchos componentes y bibliotecas para Delphi, la mayoría de los cuales requieren el uso de BPL Packaging para que puedan instalarse en el IDE.Paquete (BPL) Sufijo de nombre automático

Esto es lo suficientemente simple y funciona bien, hasta que desee mantener un único conjunto de archivos de proyecto de paquete (en un único grupo de proyecto), pero también desee compilar y distribuir esos mismos paquetes para diferentes versiones de Delphi.

Hasta ahora he sido la creación de un proyecto de paquete diferente para cada versión de Delphi, y definiendo explícitamente un identificador de versión de Delphi como un sufijo (por ejemplo Kinect_XE.bpl y Kinect_XE2.bpl).

Soy consciente de que, en las opciones del proyecto para un proyecto de paquete, bajo Descripción, existen los campos LIB prefijo y (lo más importante para mis necesidades) LIB sufijo.

Soy consciente de que si pongo un valor en LIB sufijo, se agregará al final del nombre de archivo del BPL compilado.

Mi pregunta, sin embargo, es en primer lugar si es posible tener el IDE rellenar automáticamente el campo LIB sufijo con el IDE/RTL Versión número, y si es así ... ¿cómo?

Estoy bastante seguro de que esto es posible, ya que parecería que vcl120.bpl (y sus homólogos para cada respectiva versión de Delphi) pueden ser referenciados (como requisitos) de sus propios paquetes utilizando sólo vcl en lugar de tener que escribir el completo vcl120. De hecho, este es el mismo comportamiento que espero lograr ... donde mis paquetes pueden intrareferenciarse entre sí (como sea necesario) sin tener que proporcionar referencias específicas de la versión para acomodar los sufijos.

Igualmente importante es que resolver esto me permitirá mantener un único conjunto de archivos de proyecto en un solo grupo de proyectos (con la obvia excepción de XE2 donde sus archivos de proyecto no necesariamente se comportan muy bien con las versiones anteriores de Delphi a Plataformas Además).

sospecho que pueda necesitar para poner un valor como $ (VER) (o algo similar) en el sufijo campo LIB, pero eso no parece corresponder a trabajar y he fregado Google en busca de la correcta solución.

Espero que te ayudemos!

ACTUALIZA 1

ahora estoy escribiendo un plugin IDE para usarse con (en lo más mínimo) Delphi 2007 a XE2, lo que da DLL y BPL proyecta una nueva opción llamada AutoSuffix. Cuando se activa En, cualquier IDE con el complemento AutoSuffix instalado aplicará inmediatamente el sufijo de versión IDE correcto al proyecto.

El complemento AutoSuffix estará disponible (libremente) para todos en las próximas 24 horas, y esta pregunta se actualizó en consecuencia.

ACTUALIZACIÓN 2

bien ... Delphi 2007 está siendo un dolor! He hecho que AutoSuffix funcione con 2009 a XE2, hasta ahora, pero 2007 requiere un poco más de tiempo (se agradece la paciencia).

ACTUALIZACIÓN 3

Parecería como si Embarcadero haber escuchado nuestra voz colectiva para la unificación paquete más simple entre las versiones.

Mark va a presionar esto para ver si las versiones futuras de Delphi pueden acomodar una característica {$ LIBSUFFIX AUTO}. Espero volver a escuchar muy pronto si este será el caso. Si es así, ciertamente afecta la forma en que AutoSuffix deberá funcionar en XE2 y versiones anteriores (ya que actualmente no proporciona el sencillo interruptor AUTO ... tiene su propio método).

Mi esperanza ahora es que EMB tomará en serio esta petición, proporcionar como una característica integral en el futuro, por lo que se convierte en un simple caso de utilizar AutoSuffix en las versiones existentes para unificar el proceso al otro lado de todas las versiones!

+0

No es la versión del compilador, sino más bien una versión IDE/RTL. – OnTheFly

+0

Correcto ... ¡editado en consecuencia! ¡Un error tonto de mi parte! – LaKraven

+2

Aparece ** O no hay ningún informe n. ° 83229, o no está autorizado para ver ese informe. ** cuando intento acceder a él (inicie sesión) – LaKraven

Respuesta

5

AFAIK para Delphi hasta XE2 no hay automatismo para hacer esto.

En cuanto a la requiere cláusula: cuando require otro paquete que está utilizando realmente el DCP, que no hereda el LIBSUFFIX. Por lo tanto, es suficiente requerir VCL.dcp durante el tiempo de compilación, mientras que VCL160.bpl se usa realmente durante el tiempo de ejecución. El DCP incluye el nombre BPL completo para resolver eso.

Esto hace que el enfoque LIBSUFFIX sea superior al simple "cambiar el nombre del paquete para cada versión de Delphi".

Una solución como la sugerida en QC83229 haría que sea más fácil transportar un paquete a una versión más nueva de Delphi, pero entonces aún está atascado con archivos dproj que no son compatibles con versiones anteriores.

Normalmente uso diferentes carpetas para cada versión Delphi, donde solo se almacenan los archivos del proyecto. Para una nueva versión de Delphi, solo tengo que copiar una carpeta y cambiar la LIBSUFFIX.

+0

+1, buena idea. ¿Es QC'ed? – kludg

+0

@Serg: sí, pero privado por el momento. ver los comentarios a la pregunta –

+0

¡Estoy construyendo un complemento para abordar el problema mientras hablamos! – LaKraven

3

LIBSUFFIX directiva está en el archivo * .dpk, y puede editar el archivo * .dpk manualmente.

Se puede escribir, por ejemplo

{$IFDEF CONDITIONALEXPRESSIONS} 
    {$IF CompilerVersion = 20.0} 
{$LIBSUFFIX '120'} 
    {$IFEND} 
    {$IF CompilerVersion = 21.0} 
{$LIBSUFFIX '140'} 
    {$IFEND} 
{$ENDIF} 

Lo malo es que el IDE no respeta las modificaciones manuales de archivo * .dpk y los borra a continuación, realiza cambios en un paquete. Es por eso que algunos proveedores de componentes que usan definiciones condicionales en el archivo * .dpk dicen en las instrucciones de instalación si se les pide que guarden los cambios dicen 'NO'.

+0

También se almacena en el archivo .dproj bajo el nombre de propiedad 'DllSuffix'. No tengo idea de qué configuración gana y por qué está duplicada. –

+0

Además, esas directivas deben estar en la parte inferior de la fuente del paquete, ya que el sistema no está en el alcance hasta el final de 'contiene'. – OnTheFly

+5

La instalación de todo el paquete en Delphi es un infierno. Con Delphi 7 ha tenido 2 archivos para información del paquete (* .dpk y * .res), ahora tiene 3 archivos, con duplicación, aunque 1 archivo es más que suficiente. Lamentablemente, a Embarcadero no le importa. – kludg

2

Mi sugerencia sería agregar esto como una opción configurable para proyectar conjuntos de opciones (ver QC#86491.) En lugar de actualizar todos los paquetes, sería suficiente actualizar un solo archivo de conjunto de opciones.

De hecho, parece que la etiqueta DllSuffix es reconocida por los archivos de conjunto de opciones en Delphi XE/XE2. Agregar <DllSuffix>160</DllSuffix> a la sección <PropertyGroup> de un archivo de conjunto de opciones hará que el sufijo se anexe al paquete en el administrador del proyecto. Sin embargo, aún debe abrir las opciones del proyecto y hacer clic en Aceptar para guardarlo en el archivo .dpk.

Estoy de acuerdo en que sería extremadamente útil con esta característica (que podría pensar también para los paquetes de la RTL.)

Cuestiones relacionadas