1# - Building a licensing description file
2#
3# Original Author:
4# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
5# http://academic.cleardefinition.com
6# Iowa State University HCI Graduate Program/VRAC
7#
8# Copyright Iowa State University 2009-2010.
9# Distributed under the Boost Software License, Version 1.0.
10# (See accompanying file LICENSE_1_0.txt or copy at
11# http://www.boost.org/LICENSE_1_0.txt)
12
13define_property(GLOBAL
14	PROPERTY
15	PROPRIETARY_LICENSES
16	BRIEF_DOCS
17	"Text for proprietary licenses"
18	FULL_DOCS
19	"Text for proprietary licenses")
20define_property(GLOBAL
21	PROPERTY
22	SHAREALIKE_LICENSES
23	BRIEF_DOCS
24	"Text for share-alike licenses"
25	FULL_DOCS
26	"Text for share-alike licenses (e.g. GPL)")
27define_property(GLOBAL
28	PROPERTY
29	PERMISSIVE_LICENSES
30	BRIEF_DOCS
31	"Text for permissive licenses"
32	FULL_DOCS
33	"Text for permissive licenses (e.g. BSD, MIT, X11)")
34define_property(GLOBAL
35	PROPERTY
36	PACKAGES_LICENSED
37	BRIEF_DOCS
38	"List of all packages whose licenses are registered here"
39	FULL_DOCS
40	"List of all packages whose licenses are registered here")
41define_property(GLOBAL
42	PROPERTY
43	REDISTRIBUTION_WARNINGS
44	BRIEF_DOCS
45	"Text for important redistribution warnings"
46	FULL_DOCS
47	"Text for important redistribution warnings, such as 'This is not redistributable!'")
48
49
50function(add_license LICENSE_TYPE_PROPERTY package license)
51	get_property(def GLOBAL PROPERTY LICENSE_PACKAGE_${package} DEFINED)
52	if(NOT def)
53		define_property(GLOBAL
54			PROPERTY
55			LICENSE_PACKAGE_${package}
56			BRIEF_DOCS
57			"Flag to indicate the addition of the license for ${package}"
58			FULL_DOCS
59			"Flag to indicate the addition of the license for ${package}")
60		get_property(existing GLOBAL PROPERTY ${LICENSE_TYPE_PROPERTY})
61		set_property(GLOBAL
62			PROPERTY
63			${LICENSE_TYPE_PROPERTY}
64			"${existing}${license}\n\n")
65
66		if(ARGN)
67			define_property(GLOBAL
68				PROPERTY
69				LICENSE_EXTRAS_PACKAGE_${package}
70				BRIEF_DOCS
71				"Extras (like URL) for the license for ${package}"
72				FULL_DOCS
73				"Extras (like URL) for the license for ${package}")
74			set_property(GLOBAL
75				PROPERTY
76				LICENSE_EXTRAS_PACKAGE_${package}
77				"${ARGN}")
78		endif()
79
80		get_property(allpackages GLOBAL PROPERTY PACKAGES_LICENSED)
81		list(APPEND allpackages "${package}")
82		set_property(GLOBAL PROPERTY PACKAGES_LICENSED "${allpackages}")
83	endif()
84endfunction()
85
86function(add_proprietary_license package license)
87	add_license(PROPRIETARY_LICENSES "${package}" "${license}" ${ARGN})
88endfunction()
89
90function(add_sharealike_license package license)
91	add_license(SHAREALIKE_LICENSES "${package}" "${license}" ${ARGN})
92endfunction()
93
94function(add_permissive_license package license)
95	add_license(PERMISSIVE_LICENSES "${package}" "${license}" ${ARGN})
96endfunction()
97
98function(add_redistribution_warning warning)
99	get_property(existing GLOBAL PROPERTY REDISTRIBUTION_WARNINGS)
100	set_property(GLOBAL
101		PROPERTY
102		REDISTRIBUTION_WARNINGS
103		"${warning}  ${existing}")
104endfunction()
105
106function(configure_license_file input output)
107	get_property(PACKAGES_LICENSED GLOBAL PROPERTY PACKAGES_LICENSED)
108	if(PACKAGES_LICENSED)
109		list(SORT PACKAGES_LICENSED)
110		set(PACKAGES_LICENSED_BULLETED)
111		foreach(package ${PACKAGES_LICENSED})
112			set(EXTRAS)
113			get_property(package_extras
114				GLOBAL
115				PROPERTY
116				"LICENSE_EXTRAS_PACKAGE_${package}")
117			if(package_extras)
118				set(EXTRAS " ${package_extras}")
119			endif()
120			set(PACKAGES_LICENSED_BULLETED
121				"${PACKAGES_LICENSED_BULLETED} * ${package}${EXTRAS}\n")
122		endforeach()
123	endif()
124	get_property(REDISTRIBUTION_WARNINGS
125		GLOBAL
126		PROPERTY
127		REDISTRIBUTION_WARNINGS)
128	get_property(PROPRIETARY_LICENSES GLOBAL PROPERTY PROPRIETARY_LICENSES)
129	get_property(SHAREALIKE_LICENSES GLOBAL PROPERTY SHAREALIKE_LICENSES)
130	get_property(PERMISSIVE_LICENSES GLOBAL PROPERTY PERMISSIVE_LICENSES)
131	configure_file("${input}" "${output}" ${ARGN})
132endfunction()
133
134