diff options
| -rw-r--r-- | documentation/poky-ref-manual/technical-details.xml | 206 |
1 files changed, 176 insertions, 30 deletions
diff --git a/documentation/poky-ref-manual/technical-details.xml b/documentation/poky-ref-manual/technical-details.xml index 19ce9ab224..b0c0f4659e 100644 --- a/documentation/poky-ref-manual/technical-details.xml +++ b/documentation/poky-ref-manual/technical-details.xml | |||
| @@ -685,44 +685,190 @@ | |||
| 685 | <title>Enabling Commercially Licensed Recipes</title> | 685 | <title>Enabling Commercially Licensed Recipes</title> |
| 686 | 686 | ||
| 687 | <para> | 687 | <para> |
| 688 | By default, the Yocto Project build system disables components that | 688 | By default, the Yocto Project build system disables |
| 689 | have commercial licensing requirements. | 689 | components that have commercial or other special licensing |
| 690 | The following four statements in the | 690 | requirements. |
| 691 | <filename>$HOME/poky/meta/conf/distro/poky.conf</filename> file | 691 | Such requirements are defined on a |
| 692 | disable components: | 692 | recipe-by-recipe basis through the <filename>LICENSE_FLAGS</filename> variable |
| 693 | definition in the affected recipe. | ||
| 694 | For instance, the | ||
| 695 | <filename>$HOME/poky/meta/recipes-multimedia/gstreamer/gst-plugins-ugly</filename> | ||
| 696 | recipe contains the following statement: | ||
| 693 | <literallayout class='monospaced'> | 697 | <literallayout class='monospaced'> |
| 694 | COMMERCIAL_LICENSE ?= "lame gst-fluendo-mp3 libmad mpeg2dec ffmpeg qmmp" | 698 | LICENSE_FLAGS = "commercial" |
| 695 | COMMERCIAL_AUDIO_PLUGINS ?= "" | ||
| 696 | COMMERCIAL_VIDEO_PLUGINS ?= "" | ||
| 697 | COMMERCIAL_QT ?= "qmmp" | ||
| 698 | </literallayout> | 699 | </literallayout> |
| 699 | </para> | 700 | This next example shows a recipe in another layer: |
| 700 | 701 | <literallayout class='monospaced'> | |
| 701 | <para> | 702 | LICENSE_FLAGS = "license_${PN}_${PV}" |
| 702 | If you want to enable these components, you can do so by making sure you have | 703 | </literallayout> |
| 703 | the following statements in the configuration file: | 704 | In order for a component restricted by a <filename>LICENSE_FLAGS</filename> |
| 705 | definition to be enabled and included in an image, it | ||
| 706 | needs to have a matching entry in the global | ||
| 707 | <filename>LICENSE_FLAGS_WHITELIST</filename> variable, which is a variable | ||
| 708 | typically defined in your <filename>local.conf</filename> file. | ||
| 709 | For example, to enable | ||
| 710 | the <filename>$HOME/poky/meta/recipes-multimedia/gstreamer/gst-plugins-ugly</filename> | ||
| 711 | package, you could add either the string | ||
| 712 | "commercial_gst-plugins-ugly" or the more general string | ||
| 713 | "commercial" to <filename>LICENSE_FLAGS_WHITELIST</filename>. | ||
| 714 | See the | ||
| 715 | "<link linkend='license-flag-matching'>License Flag Matching</link>" section | ||
| 716 | for a full explanation of how <filename>LICENSE_FLAGS</filename> matching works. | ||
| 717 | Here is the example: | ||
| 704 | <literallayout class='monospaced'> | 718 | <literallayout class='monospaced'> |
| 719 | LICENSE_FLAGS_WHITELIST = "commercial_gst-plugins-ugly" | ||
| 720 | </literallayout> | ||
| 721 | Likewise, to additionally enable the package containing | ||
| 722 | <filename>LICENSE_FLAGS = "license_${PN}_${PV}"</filename>, and assuming | ||
| 723 | that the actual recipe name was <filename>emgd_1.10.bb</filename>, | ||
| 724 | the following string would enable that package as well as | ||
| 725 | the original <filename>gst-plugins-ugly</filename> package: | ||
| 726 | <literallayout class='monospaced'> | ||
| 727 | LICENSE_FLAGS_WHITELIST = "commercial_gst-plugins-ugly license_emgd_1.10" | ||
| 728 | </literallayout> | ||
| 729 | As a convenience, you do not need to specify the complete license string | ||
| 730 | in the whitelist for every package. | ||
| 731 | you can use an abbreviated form, which consists | ||
| 732 | of just the first portion or portions of the license string before | ||
| 733 | the initial underscore character or characters. | ||
| 734 | A partial string will match | ||
| 735 | any license that contains the given string as the first | ||
| 736 | portion of its license. | ||
| 737 | For example, the following | ||
| 738 | whitelist string will also match both of the packages | ||
| 739 | previously mentioned as well as any other packages that have | ||
| 740 | licenses starting with "commercial" or "license". | ||
| 741 | <literallayout class='monospaced'> | ||
| 742 | LICENSE_FLAGS_WHITELIST = "commercial license" | ||
| 743 | </literallayout> | ||
| 744 | </para> | ||
| 745 | |||
| 746 | <section id="license-flag-matching"> | ||
| 747 | <title>License Flag Matching</title> | ||
| 748 | |||
| 749 | <para> | ||
| 750 | The definition of 'matching' in reference to a | ||
| 751 | recipe's <filename>LICENSE_FLAGS</filename> setting is simple. | ||
| 752 | However, some things exist that you should know about in order to | ||
| 753 | correctly and effectively use it. | ||
| 754 | </para> | ||
| 755 | |||
| 756 | <para> | ||
| 757 | Before a flag | ||
| 758 | defined by a particular recipe is tested against the | ||
| 759 | contents of the <filename>LICENSE_FLAGS_WHITELIST</filename> variable, the | ||
| 760 | string <filename>_${PN}</filename> (with | ||
| 761 | <link linkend='var-PN'><filename>PN</filename></link> expanded of course) is | ||
| 762 | appended to the flag, thus automatically making each | ||
| 763 | <filename>LICENSE_FLAGS</filename> value recipe-specific. | ||
| 764 | That string is | ||
| 765 | then matched against the whitelist. | ||
| 766 | So if you specify <filename>LICENSE_FLAGS = "commercial"</filename> in recipe | ||
| 767 | "foo" for example, the string <filename>"commercial_foo"</filename> | ||
| 768 | would normally be what is specified in the whitelist in order for it to | ||
| 769 | match. | ||
| 770 | </para> | ||
| 771 | |||
| 772 | <para> | ||
| 773 | You can broaden the match by | ||
| 774 | putting any "_"-separated beginning subset of a | ||
| 775 | <filename>LICENSE_FLAGS</filename> flag in the whitelist, which will also | ||
| 776 | match. | ||
| 777 | For example, simply specifying "commercial" in | ||
| 778 | the whitelist would match any expanded <filename>LICENSE_FLAGS</filename> | ||
| 779 | definition starting with "commercial" such as | ||
| 780 | "commercial_foo" and "commercial_bar", which are the | ||
| 781 | strings that would be automatically generated for | ||
| 782 | hypothetical "foo" and "bar" recipes assuming those | ||
| 783 | recipes had simply specified the following: | ||
| 784 | <literallayout class='monospaced'> | ||
| 785 | LICENSE_FLAGS = "commercial" | ||
| 786 | </literallayout> | ||
| 787 | </para> | ||
| 788 | |||
| 789 | <para> | ||
| 790 | Broadening the match allows for a range of specificity for the items | ||
| 791 | in the whitelist, from more general to perfectly | ||
| 792 | specific. | ||
| 793 | So you have the choice of exhaustively | ||
| 794 | enumerating each license flag in the whitelist to | ||
| 795 | allow only those specific recipes into the image, or | ||
| 796 | of using a more general string to pick up anything | ||
| 797 | matching just the first component or components of the specified | ||
| 798 | string. | ||
| 799 | </para> | ||
| 800 | |||
| 801 | <para> | ||
| 802 | This scheme works even if the flag already | ||
| 803 | has <filename>_${PN}</filename> appended - the extra <filename>_${PN}</filename> is | ||
| 804 | redundant, but does not affect the outcome. | ||
| 805 | For example, a license flag of "commercial_1.2_foo" would | ||
| 806 | turn into "commercial_1.2_foo_foo" and would match | ||
| 807 | both the general "commercial" and the specific | ||
| 808 | "commercial_1.2_foo", as expected. | ||
| 809 | The flag would also match | ||
| 810 | "commercial_1.2_foo_foo" and "commercial_1.2", which | ||
| 811 | does not make much sense regarding use in the whitelist. | ||
| 812 | </para> | ||
| 813 | |||
| 814 | <para> | ||
| 815 | For a versioned string, you could instead specify | ||
| 816 | "commercial_foo_1.2", which would turn into | ||
| 817 | "commercial_foo_1.2_foo". | ||
| 818 | And, as expected, this flag allows | ||
| 819 | you to pick up this package along with | ||
| 820 | anything else "commercial" when you specify "commercial" | ||
| 821 | in the whitelist. | ||
| 822 | Or, the flag allows you to pick up this package along with anything "commercial_foo" | ||
| 823 | regardless of version when you use "commercial_foo" in the whitelist. | ||
| 824 | Finally, you can be completely specific about the package and version and specify | ||
| 825 | "commercial_foo_1.1" package and version. | ||
| 826 | </para> | ||
| 827 | </section> | ||
| 828 | |||
| 829 | <section id="other-variables-related-to-commercial-licenses"> | ||
| 830 | <title>Other Variables Related to Commercial Licenses</title> | ||
| 831 | |||
| 832 | <para> | ||
| 833 | Other helpful variables related to commercial | ||
| 834 | license handling exist and are defined in the | ||
| 835 | <filename>$HOME/poky/meta/conf/distro/include/default-distrovars.inc</filename> file: | ||
| 836 | <literallayout class='monospaced'> | ||
| 837 | COMMERCIAL_AUDIO_PLUGINS ?= "" | ||
| 838 | COMMERCIAL_VIDEO_PLUGINS ?= "" | ||
| 839 | COMMERCIAL_QT = "" | ||
| 840 | </literallayout> | ||
| 841 | If you want to enable these components, you can do so by making sure you have | ||
| 842 | the following statements in your <filename>local.conf</filename> configuration file: | ||
| 843 | <literallayout class='monospaced'> | ||
| 705 | COMMERCIAL_AUDIO_PLUGINS = "gst-plugins-ugly-mad \ | 844 | COMMERCIAL_AUDIO_PLUGINS = "gst-plugins-ugly-mad \ |
| 706 | gst-plugins-ugly-mpegaudioparse" | 845 | gst-plugins-ugly-mpegaudioparse" |
| 707 | COMMERCIAL_VIDEO_PLUGINS = "gst-plugins-ugly-mpeg2dec \ | 846 | COMMERCIAL_VIDEO_PLUGINS = "gst-plugins-ugly-mpeg2dec \ |
| 708 | gst-plugins-ugly-mpegstream gst-plugins-bad-mpegvideoparse" | 847 | gst-plugins-ugly-mpegstream gst-plugins-bad-mpegvideoparse" |
| 709 | COMMERCIAL_LICENSE = "" | 848 | COMMERCIAL_QT ?= "qmmp" |
| 710 | COMMERCIAL_QT = "" | 849 | LICENSE_FLAGS_WHITELIST = "commercial_gst-plugins-ugly commercial_gst-plugins-bad commercial_qmmp" |
| 711 | </literallayout> | 850 | </literallayout> |
| 712 | </para> | 851 | Of course, you could also create a matching whitelist |
| 713 | 852 | for those components using the more general "commercial" | |
| 714 | <para> | 853 | in the whitelist, but that would also enable all the |
| 715 | Excluding a package name from the | 854 | other packages with <filename>LICENSE_FLAGS</filename> containing |
| 716 | <filename>COMMERCIAL_LICENSE</filename> or | 855 | "commercial", which you may or may not want: |
| 717 | <filename>COMMERCIAL_QT</filename> statement enables that package. | 856 | <literallayout class='monospaced'> |
| 718 | </para> | 857 | LICENSE_FLAGS_WHITELIST = "commercial" |
| 858 | </literallayout> | ||
| 859 | </para> | ||
| 719 | 860 | ||
| 720 | <para> | 861 | <para> |
| 721 | Specifying audio and video plug-ins as part of the | 862 | Specifying audio and video plug-ins as part of the |
| 722 | <filename>COMMERCIAL_AUDIO_PLUGINS</filename> and | 863 | <filename>COMMERCIAL_AUDIO_PLUGINS</filename> and |
| 723 | <filename>COMMERCIAL_VIDEO_PLUGINS</filename> statements includes | 864 | <filename>COMMERCIAL_VIDEO_PLUGINS</filename> statements |
| 724 | the plug-ins into built images - thus adding support for media formats. | 865 | or commercial qt components as part of |
| 725 | </para> | 866 | the <filename>COMMERCIAL_QT</filename> statement (along |
| 867 | with the enabling <filename>LICENSE_FLAGS_WHITELIST</filename>) includes the | ||
| 868 | plug-ins or components into built images, thus adding | ||
| 869 | support for media formats or components. | ||
| 870 | </para> | ||
| 871 | </section> | ||
| 726 | </section> | 872 | </section> |
| 727 | </section> | 873 | </section> |
| 728 | </chapter> | 874 | </chapter> |
