summaryrefslogtreecommitdiff
path: root/docs/manual/adding-packages-directory.txt
diff options
context:
space:
mode:
Diffstat (limited to 'docs/manual/adding-packages-directory.txt')
-rw-r--r--docs/manual/adding-packages-directory.txt70
1 files changed, 64 insertions, 6 deletions
diff --git a/docs/manual/adding-packages-directory.txt b/docs/manual/adding-packages-directory.txt
index 058ebad1c..0852b045f 100644
--- a/docs/manual/adding-packages-directory.txt
+++ b/docs/manual/adding-packages-directory.txt
@@ -24,10 +24,16 @@ config BR2_PACKAGE_LIBFOO
http://foosoftware.org/libfoo/
---------------------------
-Of course, you can add other options to configure particular things in
-your software. You can look at examples in other packages. The syntax
-of the +Config.in+ file is the same as the one for the kernel Kconfig
-file. The documentation for this syntax is available at
+The +bool+ line, +help+ line and other meta-informations about the
+configuration option must be indented with one tab. The help text
+itself should be indented with one tab and two spaces, and it must
+mention the upstream URL of the project.
+
+Of course, you can add other sub-options into a +if
+BR2_PACKAGE_LIBFOO...endif+ statement to configure particular things
+in your software. You can look at examples in other packages. The
+syntax of the +Config.in+ file is the same as the one for the kernel
+Kconfig file. The documentation for this syntax is available at
http://lxr.free-electrons.com/source/Documentation/kbuild/kconfig-language.txt[]
Finally you have to add your new +libfoo/Config.in+ to
@@ -40,6 +46,51 @@ supposed to contain anything but the 'bare' name of the package.
source "package/libfoo/Config.in"
--------------------------
+The +Config.in+ file of your package must also ensure that
+dependencies are enabled. Typically, Buildroot uses the following
+rules:
+
+* Use a +select+ type of dependency for dependencies on
+ libraries. These dependencies are generally not obvious and it
+ therefore make sense to have the kconfig system ensure that the
+ dependencies are selected. For example, the _libgtk2_ package uses
+ +select BR2_PACKAGE_LIBGLIB2+ to make sure this library is also
+ enabled.
+
+* Use a +depends on+ type of dependency when the user really needs to
+ be aware of the dependency. Typically, Buildroot uses this type of
+ dependency for dependencies on toolchain options (large file
+ support, RPC support, IPV6 support), or for dependencies on "big"
+ things, such as the X.org system. In some cases, especially
+ dependency on toolchain options, it is recommended to add a
+ +comment+ displayed when the option is not enabled, so that the user
+ knows why the package is not available.
+
+An example illustrates both the usage of +select+ and +depends on+.
+
+--------------------------
+config BR2_PACKAGE_ACL
+ bool "acl"
+ select BR2_PACKAGE_ATTR
+ depends on BR2_LARGEFILE
+ help
+ POSIX Access Control Lists, which are used to define more
+ fine-grained discretionary access rights for files and
+ directories.
+ This package also provides libacl.
+
+ http://savannah.nongnu.org/projects/acl
+
+comment "acl requires a toolchain with LARGEFILE support"
+ depends on !BR2_LARGEFILE
+--------------------------
+
+
+Note that such dependencies will make sure that the dependency option
+is also enabled, but not necessarily built before your package. To do
+so, the dependency also needs to be expressed in the +.mk+ file of the
+package.
+
The +.mk+ file
~~~~~~~~~~~~~~
@@ -50,8 +101,8 @@ installed, etc.
Depending on the package type, the +.mk+ file must be written in a
different way, using different infrastructures:
-* *Makefiles for generic packages* (not using autotools): These are
- based on an infrastructure similar to the one used for
+* *Makefiles for generic packages* (not using autotools or CMake):
+ These are based on an infrastructure similar to the one used for
autotools-based packages, but requires a little more work from the
developer. They specify what should be done for the configuration,
compilation, installation and cleanup of the package. This
@@ -68,6 +119,13 @@ different way, using different infrastructures:
system. We cover them through a xref:autotargets-tutorial[tutorial]
and xref:autotargets-reference[reference].
+* *Makefiles for cmake-based software*: We provide a dedicated
+ infrastructure for such packages, as CMake is a more and more
+ commonly used build system and has a standardized behaviour. This
+ infrastructure 'must' be used for new packages that rely on
+ CMake. We cover them through a xref:cmaketargets-tutorial[tutorial]
+ and xref:cmaketargets-reference[reference].
+
* *Hand-written Makefiles:* These are currently obsolete, and no new
manual Makefiles should be added. However, since there are still
many of them in the tree, we keep them documented in a