summaryrefslogtreecommitdiff
path: root/extensions/strip-gplv3.configure
diff options
context:
space:
mode:
Diffstat (limited to 'extensions/strip-gplv3.configure')
-rwxr-xr-xextensions/strip-gplv3.configure97
1 files changed, 97 insertions, 0 deletions
diff --git a/extensions/strip-gplv3.configure b/extensions/strip-gplv3.configure
new file mode 100755
index 00000000..e4e836f4
--- /dev/null
+++ b/extensions/strip-gplv3.configure
@@ -0,0 +1,97 @@
+#!/usr/bin/python2
+# Copyright (C) 2013-2016 Codethink Limited
+#
+# 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; version 2 of the License.
+#
+# 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.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+''' A Morph configuration extension for removing gplv3 chunks from a system
+
+Using a hard-coded list of chunks, it will read the system's /baserock metadata
+to find the files created by that chunk, then remove them.
+
+'''
+
+import os
+import re
+import subprocess
+import sys
+
+import writeexts
+
+import imp
+scriptslib = imp.load_source('scriptslib', 'scripts/scriptslib.py')
+
+class StripGPLv3ConfigureExtension(writeexts.Extension):
+ gplv3_chunks = [
+ ['autoconf', ''],
+ ['autoconf-tarball', ''],
+ ['automake', ''],
+ ['bash', ''],
+ ['binutils', ''],
+ ['bison', ''],
+ ['ccache', ''],
+ ['cmake', ''],
+ ['flex', ''],
+ ['gawk', ''],
+ ['gcc', r'^.*lib.*\.so(\.\d+)*$'],
+ ['gdbm', ''],
+ ['gettext-tarball', ''],
+ ['gperf', ''],
+ ['groff', ''],
+ ['libtool', r'^.*lib.*\.so(\.\d+)*$'],
+ ['libtool-tarball', r'^.*lib.*\.so(\.\d+)*$'],
+ ['m4', ''],
+ ['make', ''],
+ ['nano', ''],
+ ['patch', ''],
+ ['rsync', ''],
+ ['texinfo-tarball', ''],
+ ]
+
+ def process_args(self, args):
+ target_root = args[0]
+ meta_dir = os.path.join(target_root, 'baserock')
+ metadata = scriptslib.meta_load_from_dir(meta_dir)
+
+ for chunk in self.gplv3_chunks:
+ for meta in metadata.get_name(chunk[0]):
+ self.remove_chunk(
+ target_root, reversed(meta['contents']), chunk[1])
+
+ def remove_chunk(self, target_root, chunk_contents, pattern):
+ updated_contents = []
+ for content_entry in chunk_contents:
+ pat = re.compile(pattern)
+ if len(pattern) == 0 or not pat.match(content_entry):
+ self.remove_content_entry(target_root, content_entry)
+ else:
+ updated_contents.append(content_entry)
+
+ def remove_content_entry(self, target_root, content_entry):
+ entry_path = os.path.join(target_root, './' + content_entry)
+ if not entry_path.startswith(target_root):
+ raise writeexts.ExtensionError(
+ '%s is not in %s' % (entry_path, target_root))
+ if os.path.exists(entry_path):
+ if os.path.islink(entry_path):
+ os.unlink(entry_path)
+ elif os.path.isfile(entry_path):
+ os.remove(entry_path)
+ elif os.path.isdir(entry_path):
+ if not os.listdir(entry_path):
+ os.rmdir(entry_path)
+ else:
+ raise writeexts.ExtensionError(
+ '%s is not a link, file or directory' % entry_path)
+
+StripGPLv3ConfigureExtension().run(sys.argv[1:])