GNU Autotools: ¿Cómo incluir archivos de origen en el paquete de archivos 'make dist' que están por encima del directorio raíz de origen?

StackOverflow https://stackoverflow.com/questions/1836209

Pregunta

Tengo un proyecto de Subversion que usa GNU Autotools (es decir, automake, autoconf y libtool) para administrar el código fuente dentro de una subcarpeta (llamado 'sub-paquete'). Los archivos de origen referencias subpaquete que están por encima del directorio raíz de origen de la sub-paquete, y que son comunes a otras sub-paquetes. Por desgracia, cuando se ejecuta 'make dist' para crear el paquete de archivos de distribución, los archivos de origen común no sean incluidos en la distribución.

¿Hay una manera de utilizar autoconf / automake para mover estos archivos de origen comunes en un subdirectorio de la sub-paquete antes de distribuir la fuente, y tener el makefile ajustarse para apuntar a los archivos de origen reubicados correctamente? Claramente, sería posible tener el makefile mover estos archivos de origen más antes de compilar, pero para trabajar dentro del depósito de la subversión, esto causa problemas porque estos archivos movidos son controlados revisión, y es fácil de editar el archivo por accidente movido en lugar del original .

¿Fue útil?

Solución

En lugar de mover archivos de un lado (que siempre suena sospechoso para mí), ¿Por qué no utilizar los enlaces simbólicos? Usted podría tener su referencia subpaquete sólo a archivos locales, y una regla Makefile que dice "si los archivos locales no está aquí, crear un enlace simbólico al archivo de los padres". Durante make dist, el enlace simbólico será convertida a un archivo sólo de forma automática.

Otros consejos

Usted podría tener un directorio vacío en el sub-paquete, llamado, por ejemplo, "común", con un makefile que copia los archivos externos en. Posteriormente, se podría usar el objetivo dist-gancho para mover los archivos directamente en la versión de la " común" directorio que conseguirá neceser en el archivo comprimido. De esa manera usted no tiene que preocuparse de ellos por ahí y que se está editando. También tendría sobrescribir el Makefile.am, y Makefile.in Makefile en "común" como se ha copiado.

Ejemplo en subpaquete / common / Makefile.am (no probado):

dist-hook:
    cp -p $(top_srcdir)/../common/Makefile* $(top_srcdir)/../common/*.[ch] $(distdir)

No estoy 100% seguro de que esto funcionará sin embargo. Podría romper el resto de su paquete, dependiendo de donde todo lo demás espera encontrar los archivos de origen; que probablemente se romperá haciendo dist si desempaquetar el archivo tar y tratar de hacer dist desde allí. Usted debe saber que este tipo de engaño es mal visto. Pero espero que te he dado suficientes ideas para jugar con.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top