NetBSD usa el término "ports" (portes) para definir a las diferentes arquitecturas en las que funciona el sistema operativo. Su estructura de portes se llama "packages" (paquetes).
En OpenBSD, 'make' tiene soporte para ${VAR:U} y
${VAR:L} para transformar el valor de una variable a
mayúsculas o minúsculas.
De acuerdo con esto, las comprobaciones de 'make' se deberían
codificar de forma independiente del caso, v.g.:
.if ${NEED_XXX:L} == "yes"
do stuff if yes
.else
do other stuff
.endif
Existe una tendencia a asegurarse que todas las variables
reconocidas por bsd.port.mk se encuentren siempre
definidas, de modo que al final podamos quitarnos de encima
defined(GNU_GMAKE) y usar
${GNU_GMAKE:L} != "no" en su lugar.
El fichero principal bsd.port.mk ha sido fuertemente
adaptado y se han solucionado algunos problemas.
En particular, está preparado para ir paralelo a 'make'.
La funcionalidad scripts/{pre,do,post}-* se ha perdido en
el proceso.
Para reemplazar esta funcionalidad, invoque el guión
("script") a mano desde el fichero Makefile.
Note que si invoca 'make' como make VAR=value, la
asignación anulará cualquier valor que VAR
obtenga de Makefile.
Por ello, muchos parches para Makefile no son necesarios, es mucho
mejor configurar correctamente MAKE_FLAGS para disminuir la carga del
mantenimiento.
Existen dos tipos de archivos de fuentes: DISTFILES y PATCHFILES. OpenBSD los procesa de un modo uniforme y, de modo predeterminado, lo saca todo de MASTER_SITES. No hay PATCH_SITES ni PATCH_SITES_SUBDIR.
Si todos los parches que se bajaran no provinieran del mismo grupo de sitios, OpenBSD permitiría las extensiones filename:0 a filename:9, en cuyo caso usaría MASTER_SITES0 hasta MASTER_SITES9 para bajar el fichero.
Es posible que algunas arquitecturas necesiten ficheros distfiles específicos. En el pasado, esto ha causado problemas en donde ha sido preciso replicar ("mirror") distfiles. OpenBSD dispone de soporte para un tercer grupo de ficheros: SUPDISTFILES. Éstos serán considerados sólo para generar sumas de comprobación y réplicas. Nótese que es posible que SUPDISTFILES coincida en parte con DISTFILES o PATCHFILES. Por ejemplo:
DISTFILES=foo-1.0.tgz
.if ${ARCH} == "i386"
DISTFILES+=foo-i386.tgz
.elif ${ARCHI} == "sparc"
DISTFILES+=foo-sparc.tgz
.endif
SUPDISTFILES=foo-i386.tgz foo-sparc.tgz
workdir
No queremos portes que usen NO_WRKDIR.
Todos los portes de OpenBSD deben tener un directorio de trabajo.
Los detalles sobre el nombre de estos directorios de trabajo no tienen
porqué ser la preocupación de un «portador».
Si necesita averiguar uno de estos nombres, mire en el fichero
Makefile: cd ese_porte_dir && make show
VARNAME=WRKDIR le dará una idea sobre el WRKDIR
(directorio de trabajo) de ese porte.
La principal razón detrás de esa prohibición es
que en OpenBSD, bsd.port.mk actúa como un fichero
Makefile real, con dependencias.
El paso fethc depende de los distfiles y patchfiles, y el
resto de los pasos dependen de ficheros reales ubicados en el
directorio de trabajo ("cookies"), así que no pueden
existir sin un directorio de trabajo.
Debido a un accidente histórico, el fragmento
do-extract crea el directorio de trabajo.
De acuerdo con esto, pre-extract y do-extract
nunca se deberían anular.
Si la extracción de DISTFILES es especial, configure
EXTRACT_ONLY=
y lleve a cabo la extracción en post-extract.
Nota: NO_WRKSUBDIR ha sido eliminado; su funcionalidad se puede obtener configurando WRKDIST=$(WRKDIR).
Después de que una compilación se ha completado, otros
BSD proceden con la instalación del porte y a
continuación compilan un paquete con el porte instalado.
En lugar de eso, OpenBSD usa una instalación falsa. Usando
FAKE, el árbol de portes no se convierte del todo, pero se va
aproximando.
PREFIX, que suele ser
/usr/local).WRKINST, que suele ser un subdirectorio de
WRKDIR.
Los objetivos invocados para make fake son los objetivos
de instalación usuales, con la excepción de unas pocas
diferencias:
Los portes que usen imake deberían funcionar tal cual, ya que los fragmentos imake están configurados para usar DESTDIR. De forma parecida, los portes recientes que usen GNU configure no deberían necesitar ningún cambio.
Otra técnica útil es un truco de `ligado tardío': configure los portes para usar un prefijo $(DESTDIR)/usr/local, de modo que el fichero Makefile resultante tenga
prefix=$(DESTDIR)/usr/local
configurado.
Cuando el porte se compile, y puesto que DESTDIR está
configurado a nada, se usará /usr/local y la falsa
instalación pondrá todo en WRKINST/usr/local (v.g., para
portes que usen GNU configure, utilice
CONFIGURE_STYLE= gnu dest).
bsd.port.mk se dará cuenta de los
problemas en ese área.
Las opciones se han racionalizado como «sabores», para que
la construcción de paquetes pueda ser consistente.
Un porte con opciones debe configurar FLAVORS a la lista de todas las
opciones que tengan sentido para ese porte (v.g., FLAVORS=foo bar
zoinx), y entonces usar FLAVOR para verificar qué opciones han
sido seleccionadas (v.g., FLAVOR=zoinx foo).
bsd.port.mk provee algo de soporte:
Comprobar que un sabor dado ha sido seleccionado es tan simple como:
.if ${FLAVOR:L:Mzoinx}