Chapter 24. Frequently Asked Questions
Prev | Part II. The pkgsrc developer's guide | Next

## Chapter 24. Frequently Asked Questions

This section contains the answers to questions that may arise when you are writing a package. If you don't find your question answered here, first have a look in the other chapters, and if you still don't have the answer, ask on the `pkgsrc-users` mailing list.

24.1. What is the difference between MAKEFLAGS, .MAKEFLAGS and MAKE_FLAGS?
24.2. What is the difference between MAKE, GMAKE and MAKE_PROGRAM?
24.3. What is the difference between CC, PKG_CC and PKGSRC_COMPILER?
24.4. Why does make show-var VARNAME=BUILDLINK_PREFIX.foo say it's empty?
24.5. What does ${MASTER_SITE_SOURCEFORGE:=package/} mean? I don't understand the := inside it.
24.6. Which mailing lists are there for package developers?
24.7. Where is the pkgsrc documentation?
24.8. I have a little time to kill. What shall I do?

24.1. | What is the difference between `MAKEFLAGS`, `.MAKEFLAGS` and `MAKE_FLAGS`?
| `MAKEFLAGS` are the flags passed to the pkgsrc-internal invocations of make(1). `MAKE_FLAGS` are the flags that are passed to the `MAKE_PROGRAM` when building the package. `.MAKEFLAGS` is an internal variable of bmake and should not be used by packages.
24.2. | What is the difference between `MAKE`, `GMAKE` and `MAKE_PROGRAM`?
| `MAKE` is the path to the make(1) program that is used in the pkgsrc infrastructure. `GMAKE` is the path to GNU Make, but you need to say `USE_TOOLS+=gmake` to use that. `MAKE_PROGRAM` is the path to the Make program that is used for building the package.
24.3. | What is the difference between `CC`, `PKG_CC` and `PKGSRC_COMPILER`?
| `CC` is the path to the real C compiler, which can be configured by the pkgsrc user. `PKG_CC` is the path to the compiler wrapper. `PKGSRC_COMPILER` is not a path to a compiler, but the type of compiler that should be used. See `mk/compiler.mk` for more information about the latter variable.
24.4. | Why does make show-var VARNAME=BUILDLINK_PREFIX.`foo` say it's empty?
| For optimization reasons, some variables are only available in the “wrapper” phase and later. To “simulate” the wrapper phase, append PKG_PHASE=wrapper to the above command.
24.5. | What does `${MASTER_SITE_SOURCEFORGE:=package/}` mean? I don't understand the `:=` inside it.
| The `:=` is not an assignment operator, even though it may look like one. Instead, it is a degenerate form of `${LIST:`old_string`=`new_string`}`, which is documented in the make(1) man page and which is commonly used in the form `${SRCS:.c=.o}`. In the case of `MASTER_SITE_*`, `old_string` is the empty string and `new_string` is `package/`. That's where the `:` and the `=` fall together.
24.6. | Which mailing lists are there for package developers?
| tech-pkg This is a list for technical discussions related to pkgsrc development, e.g. soliciting feedback for changes to pkgsrc infrastructure, proposed new features, questions related to porting pkgsrc to a new platform, advice for maintaining a package, patches that affect many packages, help requests moved from pkgsrc-users when an infrastructure bug is found, etc. pkgsrc-bugs All bug reports in category "pkg" sent with send-pr(1) appear here. Please do not report your bugs here directly; use one of the other mailing lists.
24.7. | Where is the pkgsrc documentation?
| There are many places where you can find documentation about pkgsrc: The pkgsrc guide (this document) is a collection of chapters that explain large parts of pkgsrc, but some chapters tend to be outdated. Which ones they are is hard to say. On the mailing list archives (see https://mail-index.NetBSD.org/), you can find discussions about certain features, announcements of new parts of the pkgsrc infrastructure and sometimes even announcements that a certain feature has been marked as obsolete. The benefit here is that each message has a date appended to it. Many of the files in the `mk/` directory start with a comment that describes the purpose of the file and how it can be used by the pkgsrc user and package authors. An easy way to find this documentation is to run bmake help. The CVS log messages are a rich source of information, but they tend to be highly abbreviated, especially for actions that occur often. Some contain a detailed description of what has changed, but they are geared towards the other pkgsrc developers, not towards an average pkgsrc user. They also only document changes, so if you don't know what has been before, these messages may not be worth too much to you. Some parts of pkgsrc are only “implicitly documented”, that is the documentation exists only in the mind of the developer who wrote the code. To get this information, use the cvs annotate command to see who has written it and ask on the `tech-pkg` mailing list, so that others can find your questions later (see above). To be sure that the developer in charge reads the mail, you may CC him or her.
24.8. | I have a little time to kill. What shall I do?
| This is not really an FAQ yet, but here's the answer anyway. Run pkg_chk -N (from the `pkgtools/pkg_chk` package). It will tell you about newer versions of installed packages that are available, but not yet updated in pkgsrc. Browse `pkgsrc/doc/TODO` — it contains a list of suggested new packages and a list of cleanups and enhancements for pkgsrc that would be nice to have. Review packages for which review was requested on the tech-pkg mailing list.

Prev | Up | Next
Chapter 23. Submitting and Committing | Home | Part III. The pkgsrc infrastructure internals