# - Building a licensing description file
#
# Original Author:
# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
# http://academic.cleardefinition.com
# Iowa State University HCI Graduate Program/VRAC
#
# Copyright Iowa State University 2009-2010.
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at
# http://www.boost.org/LICENSE_1_0.txt)

define_property(GLOBAL
	PROPERTY
	PROPRIETARY_LICENSES
	BRIEF_DOCS
	"Text for proprietary licenses"
	FULL_DOCS
	"Text for proprietary licenses")
define_property(GLOBAL
	PROPERTY
	SHAREALIKE_LICENSES
	BRIEF_DOCS
	"Text for share-alike licenses"
	FULL_DOCS
	"Text for share-alike licenses (e.g. GPL)")
define_property(GLOBAL
	PROPERTY
	PERMISSIVE_LICENSES
	BRIEF_DOCS
	"Text for permissive licenses"
	FULL_DOCS
	"Text for permissive licenses (e.g. BSD, MIT, X11)")
define_property(GLOBAL
	PROPERTY
	PACKAGES_LICENSED
	BRIEF_DOCS
	"List of all packages whose licenses are registered here"
	FULL_DOCS
	"List of all packages whose licenses are registered here")
define_property(GLOBAL
	PROPERTY
	REDISTRIBUTION_WARNINGS
	BRIEF_DOCS
	"Text for important redistribution warnings"
	FULL_DOCS
	"Text for important redistribution warnings, such as 'This is not redistributable!'")


function(add_license LICENSE_TYPE_PROPERTY package license)
	get_property(def GLOBAL PROPERTY LICENSE_PACKAGE_${package} DEFINED)
	if(NOT def)
		define_property(GLOBAL
			PROPERTY
			LICENSE_PACKAGE_${package}
			BRIEF_DOCS
			"Flag to indicate the addition of the license for ${package}"
			FULL_DOCS
			"Flag to indicate the addition of the license for ${package}")
		get_property(existing GLOBAL PROPERTY ${LICENSE_TYPE_PROPERTY})
		set_property(GLOBAL
			PROPERTY
			${LICENSE_TYPE_PROPERTY}
			"${existing}${license}\n\n")

		if(ARGN)
			define_property(GLOBAL
				PROPERTY
				LICENSE_EXTRAS_PACKAGE_${package}
				BRIEF_DOCS
				"Extras (like URL) for the license for ${package}"
				FULL_DOCS
				"Extras (like URL) for the license for ${package}")
			set_property(GLOBAL
				PROPERTY
				LICENSE_EXTRAS_PACKAGE_${package}
				"${ARGN}")
		endif()

		get_property(allpackages GLOBAL PROPERTY PACKAGES_LICENSED)
		list(APPEND allpackages "${package}")
		set_property(GLOBAL PROPERTY PACKAGES_LICENSED "${allpackages}")
	endif()
endfunction()

function(add_proprietary_license package license)
	add_license(PROPRIETARY_LICENSES "${package}" "${license}" ${ARGN})
endfunction()

function(add_sharealike_license package license)
	add_license(SHAREALIKE_LICENSES "${package}" "${license}" ${ARGN})
endfunction()

function(add_permissive_license package license)
	add_license(PERMISSIVE_LICENSES "${package}" "${license}" ${ARGN})
endfunction()

function(add_redistribution_warning warning)
	get_property(existing GLOBAL PROPERTY REDISTRIBUTION_WARNINGS)
	set_property(GLOBAL
		PROPERTY
		REDISTRIBUTION_WARNINGS
		"${warning}  ${existing}")
endfunction()

function(configure_license_file input output)
	get_property(PACKAGES_LICENSED GLOBAL PROPERTY PACKAGES_LICENSED)
	if(PACKAGES_LICENSED)
		list(SORT PACKAGES_LICENSED)
		set(PACKAGES_LICENSED_BULLETED)
		foreach(package ${PACKAGES_LICENSED})
			set(EXTRAS)
			get_property(package_extras
				GLOBAL
				PROPERTY
				"LICENSE_EXTRAS_PACKAGE_${package}")
			if(package_extras)
				set(EXTRAS " ${package_extras}")
			endif()
			set(PACKAGES_LICENSED_BULLETED
				"${PACKAGES_LICENSED_BULLETED} * ${package}${EXTRAS}\n")
		endforeach()
	endif()
	get_property(REDISTRIBUTION_WARNINGS
		GLOBAL
		PROPERTY
		REDISTRIBUTION_WARNINGS)
	get_property(PROPRIETARY_LICENSES GLOBAL PROPERTY PROPRIETARY_LICENSES)
	get_property(SHAREALIKE_LICENSES GLOBAL PROPERTY SHAREALIKE_LICENSES)
	get_property(PERMISSIVE_LICENSES GLOBAL PROPERTY PERMISSIVE_LICENSES)
	configure_file("${input}" "${output}" ${ARGN})
endfunction()