generic-poky/meta/classes/license.bbclass

106 lines
4.9 KiB
Plaintext
Raw Normal View History

# Populates LICENSE_DIRECTORY as set in distro config with the license files as set by
Initial commit of license reporting: This is an intial commit for the license reporting system. A few notes: The LICENSE fields needs to be standardized throughout poky. As it stands, we throw a warning if the license file is not found (either because it does not exist or because LICENSE_FILE_CHKSUM is munged) in the generic license directory. This should eventually become an error. I've seen a few places where Apache-v2.0 is written differently and I'm sure this will throw the above warning. This does not put the license data on the rootfs. Also, I provide both the actual license text and a link to the best guess of the generic_license. That guessing is not very robust and I'm loath to get into a bunch of pattern matching rather than standardize LICENSE. This adds one new param to poky.conf and one new to license.bbclass: LICENSE_DIR: the base directory we copy all the license results to (set in license.bbclass) COMMON_LICENSE_DIR: this is the directory that holds all the common generic license files. currently meta/files/common-licenses (set in poky.conf) TODO: - We should verify the common-licenses. I stripped these from my Ubuntu 10.10 system. - We should allow the capability of licenses on the rootfs, although the resulting image created would be a lot larger. - More common-licenses. I don't include bzip, zlib, ICS.... I should, but that means tracking down a lot of licenses. - General cleanup of licensing and standardization of names. We should standardize on a naming convention. What's in licenses.conf should match up with what is in the recipes which should match with what is in common-licenses. Outside the scope of this though. See: http://bugzilla.pokylinux.org/show_bug.cgi?id=650
2011-01-27 19:25:12 +00:00
# LIC_FILES_CHKSUM.
# TODO:
# - We should also enable the ability to put the generated license directory onto the
# rootfs
# - Gather up more generic licenses
# - There is a real issue revolving around license naming standards. See license names
# licenses.conf and compare them to the license names in the recipes. You'll see some
# differences and that should be corrected.
LICENSE_DIRECTORY ??= "${DEPLOY_DIR_IMAGE}/licenses"
LICSSTATEDIR = "${WORKDIR}/license-destdir/"
Initial commit of license reporting: This is an intial commit for the license reporting system. A few notes: The LICENSE fields needs to be standardized throughout poky. As it stands, we throw a warning if the license file is not found (either because it does not exist or because LICENSE_FILE_CHKSUM is munged) in the generic license directory. This should eventually become an error. I've seen a few places where Apache-v2.0 is written differently and I'm sure this will throw the above warning. This does not put the license data on the rootfs. Also, I provide both the actual license text and a link to the best guess of the generic_license. That guessing is not very robust and I'm loath to get into a bunch of pattern matching rather than standardize LICENSE. This adds one new param to poky.conf and one new to license.bbclass: LICENSE_DIR: the base directory we copy all the license results to (set in license.bbclass) COMMON_LICENSE_DIR: this is the directory that holds all the common generic license files. currently meta/files/common-licenses (set in poky.conf) TODO: - We should verify the common-licenses. I stripped these from my Ubuntu 10.10 system. - We should allow the capability of licenses on the rootfs, although the resulting image created would be a lot larger. - More common-licenses. I don't include bzip, zlib, ICS.... I should, but that means tracking down a lot of licenses. - General cleanup of licensing and standardization of names. We should standardize on a naming convention. What's in licenses.conf should match up with what is in the recipes which should match with what is in common-licenses. Outside the scope of this though. See: http://bugzilla.pokylinux.org/show_bug.cgi?id=650
2011-01-27 19:25:12 +00:00
addtask populate_lic after do_patch before do_package
do_populate_lic[dirs] = "${LICSSTATEDIR}/${PN}"
do_populate_lic[cleandirs] = "${LICSSTATEDIR}"
Initial commit of license reporting: This is an intial commit for the license reporting system. A few notes: The LICENSE fields needs to be standardized throughout poky. As it stands, we throw a warning if the license file is not found (either because it does not exist or because LICENSE_FILE_CHKSUM is munged) in the generic license directory. This should eventually become an error. I've seen a few places where Apache-v2.0 is written differently and I'm sure this will throw the above warning. This does not put the license data on the rootfs. Also, I provide both the actual license text and a link to the best guess of the generic_license. That guessing is not very robust and I'm loath to get into a bunch of pattern matching rather than standardize LICENSE. This adds one new param to poky.conf and one new to license.bbclass: LICENSE_DIR: the base directory we copy all the license results to (set in license.bbclass) COMMON_LICENSE_DIR: this is the directory that holds all the common generic license files. currently meta/files/common-licenses (set in poky.conf) TODO: - We should verify the common-licenses. I stripped these from my Ubuntu 10.10 system. - We should allow the capability of licenses on the rootfs, although the resulting image created would be a lot larger. - More common-licenses. I don't include bzip, zlib, ICS.... I should, but that means tracking down a lot of licenses. - General cleanup of licensing and standardization of names. We should standardize on a naming convention. What's in licenses.conf should match up with what is in the recipes which should match with what is in common-licenses. Outside the scope of this though. See: http://bugzilla.pokylinux.org/show_bug.cgi?id=650
2011-01-27 19:25:12 +00:00
python do_populate_lic() {
"""
Populate LICENSE_DIRECTORY with licenses.
"""
import os
import bb
import shutil
# All the license types for the package
license_types = bb.data.getVar('LICENSE', d, True)
# All the license files for the package
lic_files = bb.data.getVar('LIC_FILES_CHKSUM', d, True)
pn = bb.data.getVar('PN', d, True)
# The base directory we wrangle licenses to
destdir = os.path.join(bb.data.getVar('LICSSTATEDIR', d, True), pn)
Initial commit of license reporting: This is an intial commit for the license reporting system. A few notes: The LICENSE fields needs to be standardized throughout poky. As it stands, we throw a warning if the license file is not found (either because it does not exist or because LICENSE_FILE_CHKSUM is munged) in the generic license directory. This should eventually become an error. I've seen a few places where Apache-v2.0 is written differently and I'm sure this will throw the above warning. This does not put the license data on the rootfs. Also, I provide both the actual license text and a link to the best guess of the generic_license. That guessing is not very robust and I'm loath to get into a bunch of pattern matching rather than standardize LICENSE. This adds one new param to poky.conf and one new to license.bbclass: LICENSE_DIR: the base directory we copy all the license results to (set in license.bbclass) COMMON_LICENSE_DIR: this is the directory that holds all the common generic license files. currently meta/files/common-licenses (set in poky.conf) TODO: - We should verify the common-licenses. I stripped these from my Ubuntu 10.10 system. - We should allow the capability of licenses on the rootfs, although the resulting image created would be a lot larger. - More common-licenses. I don't include bzip, zlib, ICS.... I should, but that means tracking down a lot of licenses. - General cleanup of licensing and standardization of names. We should standardize on a naming convention. What's in licenses.conf should match up with what is in the recipes which should match with what is in common-licenses. Outside the scope of this though. See: http://bugzilla.pokylinux.org/show_bug.cgi?id=650
2011-01-27 19:25:12 +00:00
# The license files are located in S/LIC_FILE_CHECKSUM.
srcdir = bb.data.getVar('S', d, True)
# Directory we store the generic licenses as set in the distro configuration
Initial commit of license reporting: This is an intial commit for the license reporting system. A few notes: The LICENSE fields needs to be standardized throughout poky. As it stands, we throw a warning if the license file is not found (either because it does not exist or because LICENSE_FILE_CHKSUM is munged) in the generic license directory. This should eventually become an error. I've seen a few places where Apache-v2.0 is written differently and I'm sure this will throw the above warning. This does not put the license data on the rootfs. Also, I provide both the actual license text and a link to the best guess of the generic_license. That guessing is not very robust and I'm loath to get into a bunch of pattern matching rather than standardize LICENSE. This adds one new param to poky.conf and one new to license.bbclass: LICENSE_DIR: the base directory we copy all the license results to (set in license.bbclass) COMMON_LICENSE_DIR: this is the directory that holds all the common generic license files. currently meta/files/common-licenses (set in poky.conf) TODO: - We should verify the common-licenses. I stripped these from my Ubuntu 10.10 system. - We should allow the capability of licenses on the rootfs, although the resulting image created would be a lot larger. - More common-licenses. I don't include bzip, zlib, ICS.... I should, but that means tracking down a lot of licenses. - General cleanup of licensing and standardization of names. We should standardize on a naming convention. What's in licenses.conf should match up with what is in the recipes which should match with what is in common-licenses. Outside the scope of this though. See: http://bugzilla.pokylinux.org/show_bug.cgi?id=650
2011-01-27 19:25:12 +00:00
generic_directory = bb.data.getVar('COMMON_LICENSE_DIR', d, True)
if not generic_directory:
raise bb.build.FuncFailed("COMMON_LICENSE_DIR is unset. Please set this in your distro config")
if not lic_files:
# No recipe should have an invalid license file. This is checked else
# where, but let's be pedantic
bb.note(pn + ": Recipe file does not have license file information.")
return True
for url in lic_files.split():
(type, host, path, user, pswd, parm) = bb.decodeurl(url)
# We want the license file to be copied into the destination
srclicfile = os.path.join(srcdir, path)
ret = bb.copyfile(srclicfile, os.path.join(destdir, os.path.basename(path)))
# If the copy didn't occur, something horrible went wrong and we fail out
if ret is False or ret == 0:
bb.warn("%s could not be copied for some reason. It may not exist. WARN for now." % srclicfile)
# This takes some explaining.... we now are going to go an try to symlink
# to a generic file. But, with the way LICENSE works, a package can have multiple
# licenses. Some of them are, for example, GPLv2+, which means it can use that version
# of GPLv2 specified in it's license, or a later version of GPLv2. For the purposes of
# what we're doing here, we really don't track license revisions (although we may want to)
# So, we strip out the + and link to a generic GPLv2
#
# That said, there are some entries into LICENSE that either have no generic (bzip, zlib, ICS)
# or the LICENSE is messy (Apache 2.0 .... when they mean Apache-2.0). This should be corrected
# but it's outside of scope for this.
#
# Also, you get some clever license fields with logic in the field.
# I'm sure someone has written a logic parser for these fields, but if so, I don't know where it is.
# So what I do is just link to every license mentioned in the license field.
for license_type in ((license_types.replace('+', '').replace('|', '&')
.replace('(', '').replace(')', '').replace(';', '')
.replace(',', '').replace(" ", "").split("&"))):
if os.path.isfile(os.path.join(generic_directory, license_type)):
Initial commit of license reporting: This is an intial commit for the license reporting system. A few notes: The LICENSE fields needs to be standardized throughout poky. As it stands, we throw a warning if the license file is not found (either because it does not exist or because LICENSE_FILE_CHKSUM is munged) in the generic license directory. This should eventually become an error. I've seen a few places where Apache-v2.0 is written differently and I'm sure this will throw the above warning. This does not put the license data on the rootfs. Also, I provide both the actual license text and a link to the best guess of the generic_license. That guessing is not very robust and I'm loath to get into a bunch of pattern matching rather than standardize LICENSE. This adds one new param to poky.conf and one new to license.bbclass: LICENSE_DIR: the base directory we copy all the license results to (set in license.bbclass) COMMON_LICENSE_DIR: this is the directory that holds all the common generic license files. currently meta/files/common-licenses (set in poky.conf) TODO: - We should verify the common-licenses. I stripped these from my Ubuntu 10.10 system. - We should allow the capability of licenses on the rootfs, although the resulting image created would be a lot larger. - More common-licenses. I don't include bzip, zlib, ICS.... I should, but that means tracking down a lot of licenses. - General cleanup of licensing and standardization of names. We should standardize on a naming convention. What's in licenses.conf should match up with what is in the recipes which should match with what is in common-licenses. Outside the scope of this though. See: http://bugzilla.pokylinux.org/show_bug.cgi?id=650
2011-01-27 19:25:12 +00:00
gen_lic_dest = os.path.join(bb.data.getVar('LICENSE_DIRECTORY', d, True), "common-licenses")
try:
bb.mkdirhier(gen_lic_dest)
except:
pass
try:
bb.copyfile(os.path.join(generic_directory, license_type), os.path.join(gen_lic_dest, license_type))
except:
bb.warn("%s: No generic license file exists for: %s at %s" % (pn, license_type, generic_directory))
pass
try:
os.symlink(os.path.join(gen_lic_dest, license_type), os.path.join(destdir, "generic_" + license_type))
except:
bb.warn("%s: No generic license file exists for: %s at %s" % (pn, license_type, generic_directory))
pass
else:
bb.warn("%s: Something went wrong with copying: %s to %s" % (pn, license_type, generic_directory))
bb.warn("This could be either because we do not have a generic for this license or the LICENSE field is incorrect")
pass
}
SSTATETASKS += "do_populate_lic"
do_populate_lic[sstate-name] = "populate-lic"
do_populate_lic[sstate-inputdirs] = "${LICSSTATEDIR}"
do_populate_lic[sstate-outputdirs] = "${LICENSE_DIRECTORY}/"
python do_populate_lic_setscene () {
sstate_setscene(d)
}
addtask do_populate_lic_setscene