--- title: Chapter 14. A Sample Makefile prev: books/porters-handbook/porting-dads next: books/porters-handbook/order description: A sample Makefile that can be used to create a new FreeBSD Port tags: ["sample", "makefile"] showBookMenu: true weight: 14 params: path: "/books/porters-handbook/porting-samplem/" --- [[porting-samplem]] = A Sample Makefile :doctype: book :toc: macro :toclevels: 1 :icons: font :sectnums: :sectnumlevels: 6 :sectnumoffset: 14 :partnums: :source-highlighter: rouge :experimental: :images-path: books/porters-handbook/ ifdef::env-beastie[] ifdef::backend-html5[] :imagesdir: ../../../../images/{images-path} endif::[] ifndef::book[] include::shared/authors.adoc[] include::shared/mirrors.adoc[] include::shared/releases.adoc[] include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists.adoc[] include::shared/{{% lang %}}/urls.adoc[] toc::[] endif::[] ifdef::backend-pdf,backend-epub3[] include::../../../../../shared/asciidoctor.adoc[] endif::[] endif::[] ifndef::env-beastie[] toc::[] include::../../../../../shared/asciidoctor.adoc[] endif::[] Here is a sample [.filename]#Makefile# that can be used to create a new port. The format shown is the recommended one for crossref:order[, ordering] variables, empty lines between sections, and so on. This format is designed so that the most important information is easy to locate. Refer to crossref:testing[, the chapter about testing] to learn more about tools for linting, formatting, and checking the [.filename]#Makefile#. [.programlisting] .... PORTNAME= xdvi <1> DISTVERSION= 18.2 CATEGORIES= print MASTER_SITES= ${MASTER_SITE_XCONTRIB} <2> MASTER_SITE_SUBDIR= applications PKGNAMEPREFIX= ja- DISTNAME= xdvi-pl18 EXTRACT_SUFX= .tar.Z <3> PATCH_SITES= ftp://ftp.sra.co.jp/pub/X11/japanese/ <4> PATCHFILES= xdvi-18.patch1.gz xdvi-18.patch2.gz PATCH_DIST_STRIP= -p1 <5> MAINTAINER= asami@FreeBSD.org <6> COMMENT= DVI Previewer for the X Window System WWW= http://xdvi.sourceforge.net/ LICENSE= BSD2CLAUSE <7> LICENSE_FILE= ${WRKSRC}/LICENSE RUN_DEPENDS= gs:print/ghostscript <8> USES= gmake <9> <10> IS_INTERACTIVE= yes <11> WRKSRC= ${WRKDIR}/xdvi-new <12> GNU_CONFIGURE= yes <13> <14> OPTIONS_DEFINE= DOCS EXAMPLES FOO OPTIONS_DEFAULT=FOO OPTIONS_SUB= yes <15> FOO_DESC= Enable foo support FOO_CONFIGURE_ENABLE= foo <16> MY_FAVORITE_RESPONSE= "yeah, right" <17> pre-fetch: i go fetch something, yeah post-patch: i need to do something after patch, great pre-install: and then some more stuff before installing, wow .include <18> .... <1> Section to describe the port itself and the master site -- `PORTNAME` and `PORTVERSION` or the `DISTVERSION*` variables are always first, followed by `CATEGORIES`, and then `MASTER_SITES`, which can be followed by `MASTER_SITE_SUBDIR`. `PKGNAMEPREFIX` and `PKGNAMESUFFIX`, if needed, will be after that. Then comes `DISTNAME`, `EXTRACT_SUFX` and/or `DISTFILES`, and then `EXTRACT_ONLY`, as necessary. <2> Do not forget the trailing slash (`/`) if not using `MASTER_SITE_*` macros. <3> Set this if the source is not in the standard ".tar.gz" form. <4> Section for distributed patches -- can be empty. <5> If the distributed patches were not made relative to `WRKSRC`, this may need to be tweaked. <6> Maintainer; *mandatory*! This is the person who is volunteering to handle port updates, build breakages, and to whom a users can direct questions and bug reports. To keep the quality of the Ports Collection as high as possible, we do not accept new ports that are assigned to "ports@FreeBSD.org". <7> License -- should not be empty. <8> Dependencies -- can be empty. <9> If the port requires GNU make instead of the default FreeBSD `make` (man:make[1]) to build. For example, some X applications require `xmkmf -a` to run, in which case the port would need `USES=imake`. <10> This section is for other standard [.filename]#bsd.port.mk# variables that do not belong to any of the above. <11> If the ports asks interactive questions during configure, build, install. <12> If it extracts to a directory other than `DISTNAME`. <13> If it requires a `configure` script generated by GNU autoconf to be run. <14> This section is for handling ports options. <15> Set `OPTIONS_SUB` if options will change the list of files in the crossref:plist[plist-sub, plist]. <16> Non-standard variables to be used in the rules below. <17> Special rules, in the order they are called by the ports framework. <18> Finally, the epilogue.