Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/debian/cdbs/1/rules/copyright-check.mk
blob: d4ead0ddbc1cd3031de8f1a470914bca2dca98f0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# -*- mode: makefile; coding: utf-8 -*-
# Copyright © 2005-2008 Jonas Smedegaard <dr@jones.dk>
# Description: Check for changes to copyright notices in source
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation; either version 2, or (at
# your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
# 02111-1307 USA.

_cdbs_scripts_path ?= /usr/lib/cdbs
_cdbs_rules_path ?= /usr/share/cdbs/1/rules
_cdbs_class_path ?= /usr/share/cdbs/1/class

ifndef _cdbs_rules_copyright-check
_cdbs_rules_copyright-check := 1

include $(_cdbs_rules_path)/buildcore.mk$(_cdbs_makefile_suffix)

CDBS_BUILD_DEPENDS := $(CDBS_BUILD_DEPENDS), devscripts (>= 2.10.7)

# Single regular expression for files to include or ignore
DEB_COPYRIGHT_CHECK_REGEX = .*
DEB_COPYRIGHT_CHECK_IGNORE_REGEX = ^(debian/.*|(.*/)?config\.(guess|sub|rpath)(\..*)?)$

pre-build:: debian/stamp-copyright-check

debian/stamp-copyright-check:
	@echo 'Scanning upstream source for new/changed copyright notices (except debian subdir!)...'

# Perl in shell in make requires extra care:
#  * Single-quoting ('...') protects against shell expansion
#  * Double-dollar ($$) expands to plain dollar ($) in make
	licensecheck -c '$(DEB_COPYRIGHT_CHECK_REGEX)' -r --copyright -i '$(DEB_COPYRIGHT_CHECK_IGNORE_REGEX)' * \
		| LC_ALL=C perl -e \
	'$$n=0; while (<>) {'\
	'	if (/^([^:\s][^:]+):[\s]+(\S.*?)\s*$$/) {'\
	'		$$files[$$n]{name}=$$1;'\
	'		$$files[$$n]{license}=$$2;'\
	'	};'\
	'	if (/^\s*\[Copyright:\s*(\S.*?)\s*\]/) {'\
	'		$$files[$$n]{copyright}=$$1;'\
	'	};'\
	'	/^$$/ and $$n++;'\
	'};'\
	'foreach $$file (@files) {'\
	'	$$file->{license} =~ s/\s*\(with incorrect FSF address\)//;'\
	'	$$file->{license} =~ s/\s+\(v([^)]+) or later\)/-$$1+/;'\
	'	$$file->{copyright} =~ s/(?<=(\b\d{4}))(?{$$y=$$^N})\s*[,-]\s*((??{$$y+1}))\b/-$$2/g;'\
	'	$$file->{copyright} =~ s/(?<=\b\d{4})\s*-\s*\d{4}(?=\s*-\s*(\d{4})\b)//g;'\
	'	$$pattern = "$$file->{license} [$$file->{copyright}]";'\
	'	push @{ $$patternfiles{"$$pattern"} }, $$file->{name};'\
	'};'\
	'foreach $$pattern ( sort {'\
	'			@{$$patternfiles{$$b}} <=> @{$$patternfiles{$$a}}'\
	'			||'\
	'			$$a cmp $$b'\
	'		} keys %patternfiles ) {'\
	'	print "$$pattern: ", join(", ", sort @{ $$patternfiles{$$pattern} }), "\n";'\
	'};'\
		> debian/copyright_newhints
	@patterncount="`cat debian/copyright_newhints | sed 's/^[^:]*://' | LANG=C sort -u | grep . -c -`"; \
		echo "Found $$patterncount different copyright and licensing combinations."
	@if [ ! -f debian/copyright_hints ]; then touch debian/copyright_hints; fi
	@newstrings=`diff -u debian/copyright_hints debian/copyright_newhints | sed '1,2d' | egrep '^\+' - | sed 's/^\+//'`; \
		if [ -n "$$newstrings" ]; then \
			echo "ERROR: The following new or changed copyright notices discovered:"; \
			echo; \
			echo "$$newstrings"; \
			echo; \
			echo "To fix the situation please do the following:"; \
			echo "  1) Investigate the above changes and update debian/copyright as needed"; \
			echo "  2) Replace debian/copyright_hints with debian/copyright_newhints"; \
			exit 1; \
		fi
	
	@echo 'No new copyright notices found - assuming no news is good news...'
	rm -f debian/copyright_newhints
	touch $@

clean::
	rm -f debian/stamp-copyright-check

endif