xref: /openbsd-src/share/man/man5/port-modules.5 (revision 3bef86f7bc2197c76d5fec5b22e91f84e96ed5e5)
1.\"	$OpenBSD: port-modules.5,v 1.267 2024/01/01 14:16:59 semarie Exp $
2.\"
3.\" Copyright (c) 2008 Marc Espie
4.\"
5.\" All rights reserved.
6.\"
7.\" Redistribution and use in source and binary forms, with or without
8.\" modification, are permitted provided that the following conditions
9.\" are met:
10.\" 1. Redistributions of source code must retain the above copyright
11.\"    notice, this list of conditions and the following disclaimer.
12.\" 2. Redistributions in binary form must reproduce the above copyright
13.\"    notice, this list of conditions and the following disclaimer in the
14.\"    documentation and/or other materials provided with the distribution.
15.\"
16.\" THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR
17.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19.\" IN NO EVENT SHALL THE DEVELOPERS BE LIABLE FOR ANY DIRECT, INDIRECT,
20.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26.\"
27.Dd $Mdocdate: January 1 2024 $
28.Dt PORT-MODULES 5
29.Os
30.Sh NAME
31.Nm port-modules
32.Nd documentation and conventions used in port modules
33.Sh DESCRIPTION
34The
35.Ox
36Ports framework is based on a gigantic makefile named
37.Xr bsd.port.mk 5 .
38.Pp
39In order to curb unwieldy growth, parts of the framework
40that are not always needed have been set apart in optional
41files called
42.Nm port modules ,
43which are retrieved as needed through the
44.Ev MODULES
45variable of
46.Xr bsd.port.mk 5 .
47.Pp
48Some of these modules correspond to basic mechanisms which are not
49always needed, such as GNU autoconf, or perl5.
50.Pp
51For convenience, setting
52.Ev CONFIGURE_STYLE
53in a port's main Makefile is enough to get perl5 or autoconf support, but
54.Ar gnu ,
55.Ar imake
56and
57.Ar perl5
58are actually modules, and there is some glue in
59.Xr bsd.port.mk 5
60that magically adds the required module in that case.
61This doesn't work when parsing modules.
62For instance, if you set
63.Li CONFIGURE_STYLE=gnu
64in a module, you also need to
65.Li MODULES += gnu .
66.Pp
67Other modules correspond to shortcuts for using some other ports as
68dependencies without needing to hardcode too much, such as
69the qt ports.
70.Sh THE MODULES LOOK-UP MECHANISM
71The variable
72.Ev MODULES
73should contain a list of module names.
74Some core modules are a single word, all other modules should be
75${PKGPATH}.
76If the module is
77.Pa some/dir/portname ,
78the ports framework will look for a file named
79.Pa ${PORTSDIR}/some/dir/portname/portname.port.mk
80and include it.
81.Pp
82Most modules should conform to this syntax.
83The historic practice of having a redirection file directly under
84.Pa ${PORTSDIR}/infrastructure/mk
85is deprecated for new modules.
86.Pp
87Modules may refer to each other.
88The modules mechanism has specific recursion handling such that
89adding
90.Li MODULES += foo/bar
91to a module will work as expected.
92.Sh NAMING CONVENTIONS
93Since there is no actual scope in makefiles, everything defined within
94a module will be global to the ports framework, and thus may interfere
95with other ports.
96.Pp
97As far as possible, all variables and targets belonging to a module named
98.Pa some/dir/foo
99should be named
100.Ev MODFOO_*
101and
102.Ar modfoo_* .
103.Pp
104Following the same conventions as
105.Xr bsd.port.mk 5 ,
106internal variables and targets not intended for user consumption should be
107named
108.Ev _MODFOO_*
109and
110.Ar _modfoo_* .
111.Pp
112For instance, if a module wants some value to be available for the rest
113of the world, it should define
114.Ev MODFOO_VARNAME ,
115with a name matching the basic infrastructure as far as possible.
116That is, a port that defines specific dependencies will usually
117define
118.Ev MODFOO_WANTLIB ,
119.Ev MODFOO_LIB_DEPENDS ,
120and
121.Ev MODFOO_RUN_DEPENDS ,
122as appropriate.
123.Pp
124As an exception to the naming mechanism, some ports have several distinct
125versions in the ports tree, say
126.Pa x11/qt5
127and
128.Pa x11/qt6 .
129Instead of using the namespace
130.Ev MODQT5* ,
131variables will usually drop the version suffix and be simply called
132.Ev MODQT_*
133so that a port using the module can be switched from version to version
134without needing to change everything.
135.Pp
136It is highly desirable to define names in both namespaces for such ports,
137for example to define both
138.Ev MODQT4_LIB_DEPENDS
139and
140.Ev MODQT_LIB_DEPENDS .
141Normal client ports will use
142.Ev MODQT_LIB_DEPENDS ,
143but a port may exceptionally import both modules with
144.Li MODULES += x11/qt5 x11/qt6
145and differentiate between qt5 and qt6 needs with
146.Ev MODQT5_LIB_DEPENDS
147and
148.Ev MODQT6_LIB_DEPENDS .
149See
150.Pa print/poppler
151for an example.
152.Sh OVERRIDING TARGET BEHAVIOR
153The main framework contains several hooks that allow ports to override
154normal behavior.
155This evolved as an ad-hoc framework, where only hooks that turned out
156to be needed were added.
157If several modules define the same hook, hook behaviors will be
158invoked in sequence.
159.Bl -tag -width do-configure
160.It Cm extract
161There is a
162.Cm post-extract
163hook that can be activated by defining
164.Ev MODFOO_post-extract .
165It will be run right after
166.Cm post-extract .
167.It Cm patch
168There is a
169.Cm post-patch
170hook that can be activated by defining
171.Ev MODFOO_post-patch .
172It will be run right after
173.Cm post-patch .
174.It Cm gen
175There is a
176.Cm gen
177hook that can be activated by defining
178.Ev MODFOO_gen .
179It will be run right after
180.Cm do-gen
181and before
182.Ev REORDER_DEPENDENCIES
183touches things.
184.It Cm configure
185There is a
186.Cm pre-configure
187hook that can be activated by defining
188.Ev MODFOO_pre-configure .
189It will be run right after
190.Cm pre-configure .
191The normal
192.Cm do-configure
193behavior is to invoke all
194.Ev MODFOO_configure
195contents that are defined in
196.Ev CONFIGURE_STYLE .
197By default,
198.Cm configure
199will do nothing.
200.Pp
201Some
202.Ev CONFIGURE_STYLE
203values, namely perl, gnu, imake, and autoconf,
204will automatically import the correct module.
205User-defined modules must both add to
206.Ev CONFIGURE_STYLE
207and import the correct module to override behavior.
208.Pp
209Contrary to other hooks, module behavior is not invoked in
210addition to
211.Cm do-configure ,
212but as the normal configure process.
213If
214.Cm do-configure
215is overridden, normal hook processing will not happen.
216.It Cm fake
217There is a
218.Cm pre-fake
219hook that can be activated by defining
220.Ev MODFOO_pre-fake .
221This will be invoked right after
222.Xr mtree 8 ,
223and before the normal
224.Cm pre-fake
225behavior.
226.Pp
227This can occasionally be used for ports that require some specific
228fake installation setup that will be provided by runtime dependencies.
229.It Cm install
230There is a
231.Cm post-install
232hook that can be activated by defining
233.Ev MODFOO_post-install .
234This will be invoked at the end of
235.Cm install ,
236right after the normal
237.Cm post-install
238behavior.
239.El
240.Pp
241Some targets, such as
242.Cm do-build
243or
244.Cm do-install ,
245can't be overridden simply.
246A module that, for instance, requires specific
247.Cm do-build
248behavior should do so in two steps:
249.Bl -bullet
250.It
251Define a variable named
252.Ev MODFOO_BUILD_TARGET
253that contains the commands necessary for
254.Cm do-build :
255.Bd -literal -offset indent
256MODFOO_BUILD_TARGET = cmd1; cmd2
257.Ed
258.It
259Override
260.Cm do-build
261only if it's not already defined by the port proper:
262.Bd -literal -offset indent
263\&.if !target(do-build)
264do-build:
265	@${MODFOO_BUILD_TARGET}
266\&.endif
267.Ed
268.El
269That way, if several modules require specific actions for those targets,
270the end user can choose the appropriate order in which to run the actions:
271.Bd -literal -offset indent
272do-build:
273	@${MODBAR_BUILD_TARGET}
274	@${MODFOO_BUILD_TARGET}
275	...
276.Ed
277.Sh OVERRIDING VARIABLE BEHAVIOR
278Some variables can be overridden by modules.
279Be very cautious, as this can make the module difficult to use,
280or interact badly with other modules.
281As a rule, always provide the override as:
282.Pp
283.Dl VARIABLE ?= value
284.Pp
285and provide a module-specific variable with the same value:
286.Pp
287.Dl MODFOO_VARIABLE = value .
288.Pp
289The following variables can be overridden in a relatively safe fashion:
290.Ev ALL_TARGET ,
291.Ev CONFIGURE_SCRIPT ,
292.Ev DESTDIRNAME ,
293.Ev DIST_SUBDIR ,
294.Ev DISTNAME ,
295.Ev DISTFILES ,
296.Ev EXTRACT_SUFX ,
297.Ev FAKE_FLAGS ,
298.Ev FETCH_MANUALLY ,
299.Ev HOMEPAGE ,
300.Ev IGNORE ,
301.Ev IS_INTERACTIVE ,
302.Ev LIBTOOL_FLAGS ,
303.Ev MAKE_FILE ,
304.Ev MASTER_SITES ,
305.Ev MULTI_PACKAGES ,
306.Ev NO_BUILD ,
307.Ev NO_TEST ,
308.Ev PATCH_LIST ,
309.Ev PKG_ARCH ,
310.Ev PKGNAME* ,
311.Ev PREFIX ,
312.Ev TEST_TARGET ,
313.Ev TEST_IS_INTERACTIVE ,
314.Ev REORDER_DEPENDENCIES ,
315.Ev SEPARATE_BUILD ,
316.Ev USE_GMAKE ,
317.Ev USE_LIBTOOL .
318.Pp
319The following variables can be added to in a relatively safe fashion:
320.Ev BUILD_DEPENDS ,
321.Ev CATEGORIES ,
322.Ev CONFIGURE_ARGS ,
323.Ev CONFIGURE_ENV ,
324.Ev ERRORS ,
325.Ev FAKE_FLAGS ,
326.Ev FLAVOR ,
327.Ev FLAVORS ,
328.Ev INSTALL_TARGET ,
329.Ev LIB_DEPENDS ,
330.Ev MAKE_ENV ,
331.Ev MAKE_FLAGS ,
332.Ev PKG_ARGS ,
333.Ev PSEUDO_FLAVORS ,
334.Ev TEST_DEPENDS ,
335.Ev REORDER_DEPENDENCIES ,
336.Ev RUN_DEPENDS ,
337.Ev SUBST_VARS ,
338.Ev WANTLIB .
339.Sh SPECIFIC MODULE INTERACTIONS
340Some modules correspond to extra ports that will be used mostly as
341.Ev BUILD_DEPENDS
342or
343.Ev RUN_DEPENDS .
344Such modules can safely append values directly to the
345.Ev BUILD_DEPENDS ,
346.Ev RUN_DEPENDS ,
347.Ev LIB_DEPENDS ,
348and
349.Ev WANTLIB
350variables, as long as they also define module-specific variables for
351all runtime dependencies.
352.Pp
353Simple client ports will use the module directly, and thus inherit extra
354build and runtime dependencies.
355.Pp
356More sophisticated ports can use
357.Ev MULTI_PACKAGES
358to select specific behavior: build-time dependencies will always be
359needed.
360Runtime dependencies will be selected on a subpackage basis,
361since runtime dependencies such as
362.Ev LIB_DEPENDS-sub
363do not inherit the default
364.Ev LIB_DEPENDS
365value.
366The client port's author must only bear in mind that external modules
367may add values to the default
368.Ev WANTLIB ,
369.Ev LIB_DEPENDS ,
370and
371.Ev RUN_DEPENDS ,
372and thus that it is not safe to inherit from it blindly.
373.Pp
374Modules are imported during
375.Pp
376.Dl .include <bsd.port.mk>
377.Pp
378Thus they can be affected by user choices such as setting a variable
379to Yes or No.
380Modules may make decisions based on documented
381.Ev MODFOO_BEHAVIOR
382values.
383.Pp
384When modules are processed, only a few
385.Xr bsd.port.mk 5
386variables are already defined.
387Modules may depend upon the following variables already having a sane
388value:
389.Ev DISTDIR ,
390.Ev LOCALBASE ,
391.Ev NO_DEPENDS ,
392.Ev PKGPATH ,
393.Ev PORTSDIR ,
394.Ev X11BASE
395and all arch-dependent constants from
396.Xr bsd.port.arch.mk 5 ,
397such as
398.Ev PROPERTIES
399or
400.Ev LP64_ARCHS .
401Note that this is only relevant for tests.
402It is perfectly okay to define variables or targets that depend on the
403basic ports framework without having to care whether that variable is
404already defined, since
405.Xr make 1
406performs lazy evaluation.
407.Sh CORE MODULES DOCUMENTATION
408The following modules are available.
409.Bl -tag -width do-configure
410.It apache-module
411.It cpan
412For perl ports coming from CPAN.
413Wrapper around the normal perl module that fetches the file from
414the correct location depending on
415.Ev DISTNAME ,
416and sets a default
417.Ev PKGNAME .
418Also affects
419.Ev TEST_DEPENDS ,
420.Ev CONFIGURE_STYLE ,
421.Ev PKG_ARCH ,
422and
423.Ev CATEGORIES .
424.Pp
425Some CPAN modules are only indexed by author, set
426.Li CPAN_AUTHOR=ID
427to locate the right directory.
428.Pp
429If no
430.Ev HOMEPAGE
431is defined, it will default to
432.Pa http://search.cpan.org/dist/${DISTNAME:C/-[^-]*$//}/
433.Pp
434User settings: set
435.Ev CPAN_REPORT
436to Yes,
437.Ev CPAN_REPORT_DB
438to a valid directory,
439and
440.Ev CPAN_REPORT_FROM
441to a valid email address to automate the reporting
442of regression tests to CPAN.
443.Pp
444If
445.Ev MODCPAN_EXAMPLES
446is set, the following variables will be set.
447.Ev MODCPAN_EXAMPLES_DIST
448will hold the default directory in the distfile with
449example scripts.
450.Ev MODCPAN_EXAMPLES_DIR
451will be set to the standard installation directory for
452examples.
453Sets the
454.Cm post-install
455target if none has been defined to install the examples,
456otherwise
457.Ev MODCPAN_POST_INSTALL
458should be used as such:
459.Bd -literal
460post-install:
461	...
462	${MODCPAN_POST_INSTALL}
463.Ed
464.It databases/mariadb
465Adds small framework for testing ports that require running MariaDB.
466Defines
467.Ev MODMARIADB_TEST_TARGET
468which consists actual commands to run in
469.Cm do-test
470target.
471If this target isn't defined, it will be added automatically.
472.Pp
473The actual test command to be run could be specified in the
474.Ev MODMARIADB_TEST_CMD .
475Default is similar to what
476.Xr bsd.port.mk 5
477runs itself.
478.Pp
479The MariaDB server being started will listen on UNIX domain socket
480only, minimizing impact on running system.
481The path to socket is recorded in
482.Ev MODMARIADB_TEST_SOCKET .
483Any local user will be able to connect without password.
484.Pp
485If the
486.Ev MODMARIADB_TEST_DBNAME
487variable is set, the database with such name will be set up before
488running actual test command.
489Otherwise (default), the test is responsible to call
490.Xr mysqladmin 1
491itself, if needed.
492.Pp
493The
494.Pa databases/mariadb,-server
495will get added to
496.Ev TEST_DEPENDS ,
497but not to any other
498.Ev *_DEPENDS .
499The
500.Ev MODMARIADB_CLIENT_ARGS
501and
502.Ev MODMARIADB_ADMIN_ARGS
503variables hold arguments for
504.Xr mysql 1
505and
506.Xr mysqladmin 1 ,
507respectively; those argument lists could be used in test scripts
508for connecting to test server, if they aren't satisfied by environment.
509.It databases/postgresql
510Adds small framework for testing ports that require running Postgres.
511Defines
512.Ev MODPOSTGRESQL_TEST_TARGET
513which consists actual commands to run in
514.Cm do-test
515target.
516If this target isn't defined, it will be added automatically.
517.Pp
518The actual test command to be run could be specified in the
519.Ev MODPOSTGRESQL_TEST_CMD .
520Default is similar to what
521.Xr bsd.port.mk 5
522runs itself.
523.Pp
524The Postgres server being started will listen on UNIX domain socket
525only, minimizing impact on running system.
526The path to directory where socket will be created is set by
527.Ev MODPOSTGRESQL_TEST_PGHOST ,
528defaulting to
529.Pa ${WRKDIR} .
530Any local user will be able to connect without password.
531.Pp
532If the
533.Ev MODPOSTGRESQL_TEST_DBNAME
534variable is set, the database with such name will be set up before
535running actual test command.
536Otherwise (default), the test is responsible to call
537.Xr initdb 1
538itself.
539.Pp
540The
541.Pa databases/postgresql,-server
542will get added to
543.Ev TEST_DEPENDS ,
544but not to any other
545.Ev *_DEPENDS .
546.It devel/cmake
547Adds
548.Pa devel/cmake
549to
550.Ev BUILD_DEPENDS
551and fills up
552.Ev CONFIGURE_ARGS ,
553.Ev CONFIGURE_ENV
554and
555.Ev MAKE_ENV .
556Sets up
557.Cm configure
558target.
559If
560.Ev CONFIGURE_STYLE
561was not set before, sets its value to `cmake'.
562Changes default value of
563.Ev SEPARATE_BUILD
564to `Yes' because modern CMake requires out-of-source build anyway.
565Changes
566.Ev TEST_TARGET
567to `test' as this is standard for CMake projects.
568Also this module has the following knobs:
569.Bl -tag -width Ds
570.It MODCMAKE_WANTCOLOR
571If set to `Yes', CMake will colorize its output.
572Should not be used in ports Makefiles.
573Default value is `No'.
574.It MODCMAKE_VERBOSE
575If set to `Yes', CMake will print details during configure and build
576stages about exact command being run, etc.
577Should not be used in ports Makefiles.
578Default value is `Yes'.
579.It MODCMAKE_DEBUG
580If set to `Yes', CMake will produce a debug build instead of a release
581build.
582The exact effects on the build process depend on settings specified in
583the CMake config files.
584Default value is `No'.
585.El
586Also,
587.Sq nojunk
588is added to DPB_PROPERTIES because CMake's include files parser cheats
589too much.
590.It devel/cabal
591See
592.Xr cabal-module 5
593for porting Haskell applications.
594.It devel/cargo
595See
596.Xr cargo-module 5 .
597.It devel/dconf
598Sets
599.Ev CONFIGURE_ARGS ,
600.Ev BUILD_DEPENDS
601and
602.Ev RUN_DEPENDS .
603This module is used by ports installing gsettings schemas under
604.Pa ${PREFIX}/share/glib-2.0/schemas/ .
605It requires the following goo in the PLIST:
606.Bd -literal -offset indent
607@exec %D/bin/glib-compile-schemas %D/share/glib-2.0/schemas >/dev/null
608@unexec-delete %D/bin/glib-compile-schemas %D/share/glib-2.0/schemas >/dev/null
609.Ed
610.It devel/gconf2
611A link from
612.Xr gconftool-2 1
613to
614.Xr true 1
615will be put at the front of the
616.Ev PATH .
617Sets
618.Ev CONFIGURE_ARGS ,
619.Ev BUILD_DEPENDS
620and
621.Ev RUN_DEPENDS .
622According to the values of
623.Ev MODGCONF2_LIBDEP ,
624sets
625.Ev LIB_DEPENDS .
626User settings: set
627.Ev MODGCONF2_SCHEMAS_DIR
628to the directory name under
629.Pa ${LOCALBASE}/share/schemas/
630where schemas files will be installed.
631.It devel/meson
632Adds
633.Pa devel/meson
634and
635.Pa devel/ninja
636to
637.Ev BUILD_DEPENDS .
638Sets up
639.Cm configure
640target.
641If
642.Ev CONFIGURE_STYLE
643was not set before, sets its value to `meson'.
644Changes default value of
645.Ev SEPARATE_BUILD
646to `Yes' because meson requires out-of-source build.
647If
648.Ev CONFIGURE_STYLE
649is 'meson',
650.Ev MODMESON_CONFIGURE_ARGS
651and
652.Ev MODMESON_CONFIGURE_ENV
653will add default values to
654.Ev CONFIGURE_ARGS
655and
656.Ev CONFIGURE_ENV .
657Also this module has the following knob:
658.Bl -tag -width Ds
659.It MODMESON_WANTCOLOR
660If set to `Yes', meson will colorize its output.
661Should not be used in ports Makefiles.
662Default value is `No'.
663.El
664.It devel/qmake
665See
666.Xr qmake-module 5 .
667.It devel/scons
668Adds
669.Pa devel/scons
670to
671.Ev BUILD_DEPENDS .
672Sets
673.Ev MODSCONS_BIN
674and
675.Ev MODSCONS_ENV .
676Also defines an overridable
677.Ev MODSCONS_FLAGS .
678It provides a
679.Cm do-build
680and
681.Cm do-install
682targets that can be overridden in the port Makefile.
683.It font
684Used for ports which primarily install fonts.
685Affects
686.Ev PKG_ARCH
687and
688.Ev EXTRACT_SUFX .
689Appends to
690.Ev CATEGORIES .
691When
692.Ev TYPEFACE
693is set in combination with
694.Ev V
695or
696.Ev VERSION ,
697it sets
698.Ev PKGNAME .
699.Ev TYPEFACE
700should be set to the name of the typeface.
701This sets
702.Ev FONTDIR
703using said typeface name.
704A
705.Cm do-install
706target is provided if the port itself does not provide it.
707This installs fonts from
708.Ev WRKSRC
709in the distribution.
710If one or more file extensions are listed in
711.Ev FONTTYPES ,
712files of those types will be used.
713Otherwise, otf files are preferred, with a fallback to ttf.
714.It fortran
715Sets
716.Ev MODFORTRAN_LIB_DEPENDS ,
717.Ev MODFORTRAN_WANTLIB ,
718.Ev MODFORTRAN_BUILD_DEPENDS .
719Set
720.Ev MODFORTRAN_COMPILER
721to `gfortran', or `flang', depending on what the port requires.
722The default is `gfortran'.
723The dependencies are chosen according to
724.Ev MODFORTRAN_COMPILER .
725.It gcc4
726If
727.Ev COMPILER_VERSION
728is not gcc4 (defined by
729.Pa /usr/share/mk/bsd.own.mk ) ,
730and architecture is in
731.Ev MODGCC4_ARCHS ,
732then the gcc4 compilers will be put at the front of the path.
733By default, only C language support is included by this module.
734If other languages are needed, they must be listed in
735.Ev MODGCC4_LANGS
736(e.g. c++, fortran).
737The
738.Ev MODGCC4_VERSION
739variable can be used to change the version of gcc.
740By default gcc 4.9 is used.
741If
742.Ev MODGCC4_LANGS
743contains c++, this module provides
744.Ev MODGCC4_CPPLIBDEP
745and
746.Ev MODGCC4_CPPWANTLIB .
747.It gnu
748This module is documented in the main
749.Xr bsd.port.mk 5
750manpage.
751.It imake
752This module is documented in the main
753.Xr bsd.port.mk 5
754manpage.
755.It java
756Set
757.Li MODJAVA_VER=x.y
758to use exactly the JDK x.y,
759.Li MODJAVA_VER=x.y+
760to use any x.y or higher version.
761Set
762.Li MODJAVA_JRERUN=Yes
763if the port only needs the JRE at runtime.
764The module sets
765.Ev JAVA_HOME ,
766.Ev ONLY_FOR_ARCHS ,
767.Ev MODJAVA_RUN_DEPENDS ,
768.Ev MODJAVA_SHARE_DIR ,
769.Ev MODJAVA_JAR_DIR ,
770.Ev MODJAVA_EXAMPLE_DIR
771and
772.Ev MODJAVA_DOC_DIR .
773It appends to
774.Ev BUILD_DEPENDS ,
775.Ev RUN_DEPENDS ,
776.Ev CATEGORIES
777and
778.Ev SUBST_VARS .
779If
780.Li MODJAVA_BUILD=ant
781then this module provides
782.Ev MODJAVA_BUILD_DIR ,
783.Ev MODJAVA_BUILD_FILE
784and
785.Ev MODJAVA_BUILD_TARGET_NAME ,
786as well as a
787.Cm do-build
788target (if not already defined).
789It heeds
790.Ev NO_BUILD .
791.It lang/clang
792Similar to gcc4 module.
793If architecture is in MODCLANG_ARCHS, the Clang compilers will be
794put at the front of the path.
795By default, only C language support is included by this module.
796If other languages are needed, they must be listed in
797.Ev MODCLANG_LANGS
798(e.g. c++).
799Sets
800.Ev MODCLANG_VERSION
801which is also appended to
802.Ev SUBST_VARS .
803.It lang/erlang
804.It lang/go
805See
806.Xr go-module 5 .
807.It lang/lua
808Sets
809.Ev MODLUA_BIN ,
810.Ev MODLUA_DATADIR ,
811.Ev MODLUA_DEP ,
812.Ev MODLUA_DEP_VERSION ,
813.Ev MODLUA_DOCDIR ,
814.Ev MODLUA_EXAMPLEDIR ,
815.Ev MODLUA_INCL_DIR ,
816.Ev MODLUA_LIB ,
817.Ev MODLUA_LIBDIR ,
818.Ev MODLUA_VERSION ,
819.Ev MODLUA_WANTLIB .
820Appends to
821.Ev CATEGORIES .
822Also appends to
823.Ev BUILD_DEPENDS ,
824unless
825.Ev NO_BUILD
826has been set to Yes.
827Also appends to
828.Ev RUN_DEPENDS ,
829unless
830.Ev MODLUA_RUNDEP
831is set to No.
832Appends
833.Ev MODLUA_VERSION ,
834.Ev MODLUA_LIB ,
835.Ev MODLUA_INCL_DIR ,
836.Ev MODLUA_EXAMPLEDIR ,
837.Ev MODLUA_DOCDIR ,
838.Ev MODLUA_LIBDIR ,
839.Ev MODLUA_DATADIR ,
840.Ev MODLUA_DEP ,
841.Ev MODLUA_DEP_VERSION ,
842.Ev MODLUA_BIN
843to
844.Ev SUBST_VARS .
845.Ev MODLUA_DEFAULT_VERSION
846is set to 5.1.
847.Ev MODLUA_VERSION is set to
848.Ev MODLUA_DEFAULT_VERSION
849by default.
850Ports can be built with several lua versions.
851If no FLAVOR is set, it defaults to MODLUA_DEFAULT_VERSION.
852Otherwise the FULLPKGNAME is adjusted, if MODLUA_SA is not set.
853In order to set a build, run or test dependency on a lua port,
854use the following, which will propagate the currently used flavor:
855.Ev MODLUA_BUILD_DEPENDS ,
856.Ev MODLUA_TEST_DEPENDS ,
857.Ev MODLUA_RUN_DEPENDS .
858.It lang/mono
859Sets
860.Ev MODMONO_ONLY_FOR_ARCHS ,
861.Ev CONFIGURE_ENV ,
862.Ev MAKE_FLAGS ,
863.Ev MODMONO_BUILD_DEPENDS
864and
865.Ev MODMONO_RUN_DEPENDS .
866If
867.Ev MODMONO_DEPS
868is set to Yes,
869.Pa lang/mono
870is appended to
871.Ev BUILD_DEPENDS
872and
873.Ev RUN_DEPENDS .
874.Ev DLLMAP_FILES
875defines in which files the module will substitute hardcoded
876shared library versions using a
877.Cm post-configure
878target.
879.It lang/ocaml
880Appends to
881.Ev BUILD_DEPENDS
882and
883.Ev MAKE_ENV .
884Appends to
885.Ev RUN_DEPENDS
886unless
887.Ev MODOCAML_RUNDEP
888is set to No, or set to if-not-native and native compilation
889is supported on this architecture.
890Including this module selects a %%native%% plist fragment and
891.Ev ocaml_native
892property depending on whether the architecture supports native
893compilation.
894If dynamic linking is supported on the native architecture,
895the %%dynlink%% plist fragment and
896.Ev ocaml_native_dynlink
897property is set.
898When
899.Ev CONFIGURE_STYLE
900is set to `oasis',
901overrides for the
902.Cm do-build ,
903.Cm do-install ,
904and
905.Cm do-test
906targets are added.
907.It lang/php
908Used for ports using PHP in some way:
909either extensions to PHP, or software written in PHP.
910Sets
911.Ev MODPHP_RUN_DEPENDS ,
912.Ev MODPHP_LIB_DEPENDS ,
913.Ev MODPHP_WANTLIB ,
914.Ev MODPHP_BIN ,
915.Ev MODPHP_PHPIZE ,
916.Ev MODPHP_PHP_CONFIG ,
917.Ev MODPHP_INCDIR
918and
919.Ev MODPHP_LIBDIR .
920Adds to
921.Ev RUN_DEPENDS
922unless
923.Ev MODPHP_RUNDEP
924is set to No.
925Adds to
926.Ev BUILD_DEPENDS
927if
928.Ev MODPHP_BUILDDEP
929is set to Yes.
930If
931.Ev MODPHP_DO_PHPIZE
932is set, prepares a build environment for extensions that use phpize.
933.Pp
934Ports using PDO for database connectivity often have a choice of
935dependencies (pdo_sqlite, pdo_mysql, pdo_pgsql and others).
936The module constructs
937.Ev MODPHP_PDO_DEPENDS
938from the PDO types listed in
939.Ev MODPHP_PDO_ALLOWED
940(defaulting to "sqlite mysql pgsql").
941This can be added to
942.Ev RUN_DEPENDS
943and allows any of these PDO packages to satisfy the dependency, with
944.Ev MODPHP_PDO_PREF
945(sqlite by default) chosen if none are installed.
946.It lang/php/pecl
947Used for ports for PHP PECL extensions.
948Sets default
949.Ev MASTER_SITES ,
950.Ev HOMEPAGE ,
951.Ev EXTRACT_SUFX ,
952.Ev DESTDIRNAME ,
953.Ev MODPHP_DO_SAMPLE ,
954.Ev MODPHP_DO_PHPIZE ,
955.Ev AUTOCONF_VERSION ,
956.Ev AUTOMAKE_VERSION ,
957.Ev LIBTOOL_FLAGS .
958Provides a default
959.Ev TEST_TARGET
960and
961.Ev TEST_FLAGS
962unless
963.Ev NO_TEST
964or a
965.Cm do-test
966target is defined.
967Adds common dependencies to
968.Ev RUN_DEPENDS
969and
970.Ev BUILD_DEPENDS .
971Sets a default
972.Ev PKGNAME
973and appends to
974.Ev CATEGORIES .
975.It lang/python
976See
977.Xr python-module 5 .
978.It lang/ruby
979See
980.Xr ruby-module 5 .
981.It lang/rust
982Ports using Rust must use this module so a rebuild can be triggered via
983.Ev SYSTEM_VERSION-rust
984on updates of the lang/rust port or changes to the Rust standard library.
985Sets
986.Ev MODRUST_WANTLIB
987as appropriate for the architecture so it can be added to
988.Ev WANTLIB .
989It adds lang/rust to the
990.Ev BUILD_DEPENDS
991unless
992.Ev MODRUST_BUILDDEP
993is set to anything but
994.Dq yes .
995.It lang/tcl
996Sets
997.Ev MODTCL_VERSION ,
998.Ev MODTCL_BIN ,
999.Ev MODTCL_INCDIR ,
1000.Ev MODTCL_LIBDIR ,
1001.Ev MODTCL_BUILD_DEPENDS ,
1002.Ev MODTCL_RUN_DEPENDS ,
1003.Ev MODTCL_LIB ,
1004.Ev MODTCL_LIB_DEPENDS ,
1005and
1006.Ev MODTCL_CONFIG .
1007.Ev MODTCL_VERSION
1008is the default version used by all Tcl ports and may be overridden.
1009Provides
1010.Ev MODTCL_TCLSH_ADJ
1011and
1012.Ev MODTCL_WISH_ADJ
1013shell fragments to patch the interpreter path in executable scripts.
1014Also affects
1015.Ev CATEGORIES
1016and
1017.Ev SUBST_VARS .
1018.It perl
1019This module is documented in the main
1020.Xr bsd.port.mk 5
1021manpage.
1022.It security/heimdal
1023A link from ${LOCALBASE}/heimdal/bin/krb5-config
1024to
1025.Xr krb5-config 1
1026will be put at the front of the path.
1027Sets
1028.Ev LIB_DEPENDS
1029and
1030.Ev WANTLIB
1031according to the values of
1032.Ev MODHEIMDAL_LIB_DEPENDS ,
1033and
1034.Ev MODHEIMDAL_WANTLIB .
1035.It textproc/intltool
1036Sets
1037.Ev MODINTLTOOL_OVERRIDE .
1038.Pa textproc/intltool
1039is added to
1040.Ev BUILD_DEPENDS .
1041.Ev MODINTLTOOL_OVERRIDE
1042changes the paths of
1043.Ev INTLTOOL_EXTRACT ,
1044.Ev INTLTOOL_MERGE
1045and
1046.Ev INTLTOOL_UPDATE
1047to use the installed versions of intltool-extract,
1048intltool-merge and intltool-update, instead of the version's packages into the
1049distfile of the port using this module.
1050Also affects
1051.Ev CONFIGURE_ENV ,
1052.Ev MAKE_ENV
1053and
1054.Ev MAKE_FLAGS
1055by appending
1056.Ev MODINTLTOOL_OVERRIDE
1057to them.
1058.It www/mozilla
1059Sets
1060.Ev PKGNAME ,
1061.Ev HOMEPAGE ,
1062.Ev MASTER_SITES ,
1063.Ev DISTNAME ,
1064.Ev USE_GMAKE ,
1065and
1066.Ev ONLY_FOR_ARCHS .
1067.Ev EXTRACT_SUFX
1068defaults to .tar.bz2.
1069.Pp
1070Adds common dependencies to
1071.Ev LIB_DEPENDS ,
1072.Ev WANTLIB ,
1073.Ev RUN_DEPENDS
1074and
1075.Ev BUILD_DEPENDS .
1076Sets common
1077.Ev CONFIGURE_ARGS ,
1078.Ev MAKE_ENV
1079and
1080.Ev CONFIGURE_ENV .
1081Sets
1082.Ev MOB
1083variable as source directory
1084and
1085.Ev MOZ
1086as target directory within
1087.Cm do-install .
1088.Pp
1089Individual port Makefile must set
1090.Ev MOZILLA_PROJECT ,
1091.Ev MOZILLA_CODENAME ,
1092.Ev MOZILLA_VERSION ,
1093.Ev MOZILLA_BRANCH ,
1094.Ev MOZILLA_LIBS
1095and
1096.Ev MOZILLA_DATADIRS
1097variables.
1098Port can also append values to
1099.Ev MOZILLA_SUBST_FILES
1100which contains the list of
1101files to run
1102.Ev SUBST_CMD
1103on during
1104.Cm pre-configure ,
1105and
1106.Ev MOZILLA_AUTOCONF_DIRS
1107which
1108contains the list of dirs where
1109.Ev AUTOCONF
1110will be run during
1111.Cm pre-configure .
1112.It www/pear
1113Used for PHP PEAR ports.
1114Sets default
1115.Ev MASTER_SITES ,
1116.Ev EXTRACT_SUFX ,
1117.Ev PKGNAME .
1118Sets
1119.Ev PREFIX
1120to
1121.Pa /var/www .
1122Sets
1123.Ev NO_TEST
1124unless a
1125.Cm do-test
1126target is defined.
1127Adds common dependencies to
1128.Ev RUN_DEPENDS
1129and
1130.Ev BUILD_DEPENDS ,
1131sets
1132.Ev MAKE_FILE
1133and
1134.Ev FAKE_FLAGS
1135appropriately.
1136Makes
1137.Ev PEAR_LIBDIR
1138and
1139.Ev PEAR_PHPBIN
1140available for use in the port.
1141Sets a default
1142.Ev PKGNAME
1143and appends to
1144.Ev CATEGORIES .
1145.It x11/gnome
1146See
1147.Xr gnome-module 5 .
1148.It x11/gnustep
1149.It x11/qt5 and x11/qt6
1150All qt* modules share a common
1151.Ev MODQT_*
1152namespace for simple ports.
1153The qt5 module also defines the same variables under
1154.Ev MODQT5_*
1155and the qt6 module also defines the same variables under
1156.Ev MODQT6_* ,
1157to allow ports to use both modules, such as
1158.Pa print/poppler .
1159.Pp
1160Those modules define
1161.Ev MODQT*_LIBDIR
1162as the libraries location,
1163.Ev MODQT*_INCDIR
1164as the include files location,
1165.Ev MODQT*_QTDIR
1166as the global qt directory location,
1167.Ev MODQT*_CONFIGURE_ARGS
1168as standard GNU configure-style parameters to locate the include and libraries.
1169.Pp
1170The location of Qt-specific tools
1171.Nm lrelease ,
1172.Nm moc ,
1173.Nm qmake
1174and
1175.Nm uic
1176is available through
1177.Ev MODQT*_LRELEASE ,
1178.Ev MODQT*_MOC ,
1179.Ev MODQT*_QMAKE
1180and
1181.Ev MODQT*_UIC .
1182.Ev MODQT*_OVERRIDE_UIC
1183controls whether the default setup will force a value of
1184.Ev UIC
1185or not.
1186The value of
1187.Ev MOC
1188is always forced to ${MODQT*_MOC}.
1189.Pp
1190In most cases the
1191.Pa devel/qmake
1192module should be used instead of using
1193.Ev MODQT*_QMAKE
1194directly.
1195.Pp
1196The modules add to
1197.Ev CONFIGURE_ENV , MAKE_ENV
1198and
1199.Ev MAKE_FLAGS .
1200They define appropriate
1201.Ev MODQT*_LIB_DEPENDS
1202and
1203.Ev MODQT*_WANTLIB .
1204.Pp
1205Note that Qt5 and Qt6 have their code split over several libraries.
1206Both modules qt5 and qt6 doesn't set
1207.Ev MODQT*_WANTLIB
1208at all.
1209Qt5 and Qt6 consist of many so called Qt modules, these Qt modules should be
1210added to
1211.Ev LIB_DEPENDS ,
1212.Ev BUILD_DEPENDS
1213or
1214.Ev RUN_DEPENDS
1215manually.
1216.It x11/tk
1217Sets
1218.Ev MODTK_VERSION ,
1219.Ev MODTK_BIN ,
1220.Ev MODTK_INCDIR ,
1221.Ev MODTK_LIBDIR ,
1222.Ev MODTK_BUILD_DEPENDS ,
1223.Ev MODTK_RUN_DEPENDS ,
1224.Ev MODTK_LIB ,
1225.Ev MODTK_LIB_DEPENDS ,
1226and
1227.Ev MODTK_CONFIG .
1228.Ev MODTK_VERSION
1229is the default version used by all Tk ports and
1230may be overridden.
1231Automatically adds the
1232.Pa lang/tcl
1233module, provides a default
1234.Ev MODTCL_VERSION
1235to match
1236.Ev MODTK_VERSION ,
1237and affects
1238.Ev CATEGORIES
1239and
1240.Ev SUBST_VARS .
1241Note the
1242.Ev MODTCL_WISH_ADJ
1243shell fragment in the
1244.Pa lang/tcl
1245module.
1246.It x11/xfce4
1247Sets
1248.Ev DIST_SUBDIR ,
1249.Ev EXTRACT_SUFX ,
1250.Ev CONFIGURE_STYLE ,
1251.Ev CONFIGURE_ENV
1252and
1253.Ev USE_GMAKE .
1254If
1255.Ev MODXFCE_ICON_CACHE
1256is set to yes, it adds
1257.Pa x11/gtk+4,-guic
1258to
1259.Ev RUN_DEPENDS .
1260Unless
1261.Ev XFCE_NO_SRC
1262is set,
1263.Pa textproc/intltool
1264is added to
1265.Ev MODULES .
1266Also affects
1267.Ev CATEGORIES .
1268.Pp
1269Xfce ports can be divided into five categories: core libraries and
1270applications, goodies, artwork, thunar plugins, and panel plugins.
1271.Ev HOMEPAGE ,
1272.Ev MASTER_SITES
1273and
1274.Ev DISTNAME
1275are built using
1276.Ev XFCE_VERSION
1277(which defaults to
1278.Ev XFCE_DESKTOP_VERSION
1279if not set) and either
1280.Ev XFCE_PROJECT ,
1281.Ev XFCE_GOODIE ,
1282.Ev XFCE_ARTWORK ,
1283.Ev THUNAR_PLUGIN
1284or
1285.Ev XFCE_PLUGIN .
1286One of the latter has to be provided by the port Makefile.
1287.El
1288.Sh SEE ALSO
1289.Xr make 1 ,
1290.Xr bsd.port.mk 5 ,
1291.Xr cabal-module 5 ,
1292.Xr cargo-module 5 ,
1293.Xr gnome-module 5 ,
1294.Xr go-module 5 ,
1295.Xr python-module 5 ,
1296.Xr qmake-module 5 ,
1297.Xr ruby-module 5 ,
1298.Xr ports 7
1299