summaryrefslogtreecommitdiff
path: root/packaging
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2025-01-26 21:16:13 +0200
committerJussi Pakkanen <jpakkane@gmail.com>2025-01-26 21:16:13 +0200
commitae9ae8adced6bf2e0f78c752c4d64e2fcfe0844f (patch)
tree2d4dba940d2f0c94b7c6742618c5ae40d5303361 /packaging
parent0cbc4e1e1ae1bd2b10092ccbda30cc2bcc36de6c (diff)
downloadmeson-ae9ae8adced6bf2e0f78c752c4d64e2fcfe0844f.tar.gz
Add deb package creation script.
Diffstat (limited to 'packaging')
-rwxr-xr-xpackaging/mpackage.py102
1 files changed, 102 insertions, 0 deletions
diff --git a/packaging/mpackage.py b/packaging/mpackage.py
new file mode 100755
index 000000000..a075e0627
--- /dev/null
+++ b/packaging/mpackage.py
@@ -0,0 +1,102 @@
+#!/usr/bin/env python3
+
+# Converts a release tarball to a Debian package.
+
+# This script only works on Jussi's private release machine.
+
+import os, sys, subprocess, re, shutil
+import tarfile
+from glob import glob
+import pathlib
+
+assert(os.getcwd() == '/home/jpakkane')
+
+packdir = 'mesonpackaging'
+relfile = packdir + '/releases'
+
+files = glob('meson/dist/*.tar.gz')
+assert(len(files) == 1)
+infile = files[0]
+
+with tarfile.open(infile , 'r') as tf:
+ for e in tf.getmembers():
+ if '__pycache__' in e.name or e.name.endswith('.pyc'):
+ sys.exit('Source archive has Python binary files:' + str(e.name))
+
+fname = os.path.split(infile)[1]
+tmp = fname.replace('-', '_')
+if '0rc' in fname:
+ version = tmp[6:-7]
+ base_version = tmp[6:-10]
+ extension = tmp[-7:]
+ rcnum = tmp[-8:-7]
+ dchversion = base_version + '~rc' + rcnum
+ origname = tmp[:11] + '~rc' + rcnum + '.orig' + extension
+else:
+ origname = tmp[:11] + '.orig.' + tmp[-6:]
+ version = tmp[6:-7]
+ dchversion = version
+version_lines = pathlib.Path(relfile).read_text().split('\n')[:-1]
+prev_ver = version_lines[-1]
+version_lines.append(version)
+print('Deb orig name is', origname)
+print('Version is', version)
+print('Previous version is', prev_ver)
+assert(prev_ver)
+outdir = os.path.join(packdir, version)
+origfile = os.path.join(packdir, version, origname)
+if not os.path.exists(outdir):
+ os.mkdir(outdir)
+ shutil.copyfile(infile, origfile)
+ subprocess.check_call(['tar', 'xf', origname], cwd=outdir)
+ extractdir = glob(os.path.join(packdir, version, 'meson-*'))[0]
+ fromdeb = glob(os.path.join(packdir, prev_ver, 'meson-*/debian'))[0]
+ todeb = os.path.join(extractdir, 'debian')
+ shutil.copytree(fromdeb, todeb)
+ myenv = os.environ.copy()
+ myenv['EDITOR'] = 'emacs'
+ subprocess.check_call(['dch', '-v', dchversion + '-1'], cwd=extractdir, env=myenv)
+ pathlib.Path(relfile).write_text('\n'.join(version_lines) + '\n')
+else:
+ extractdir = glob(os.path.join(packdir, version, 'meson-*'))[0]
+ print('Outdir already exists')
+
+subprocess.check_call(['debuild', '-S'], cwd=extractdir)
+
+subprocess.call(['sudo rm -rf /var/cache/pbuilder/result/*'], shell=True)
+subprocess.check_call('sudo pbuilder --build *.dsc 2>&1 | tee buildlog.txt',
+ shell=True,
+ cwd=outdir)
+subprocess.check_call('sudo dpkg -i /var/cache/pbuilder/result/meson*all.deb',
+ shell=True)
+
+if os.path.exists('smoke/build'):
+ shutil.rmtree('smoke/build')
+if os.path.exists('smoke/buildcross'):
+ shutil.rmtree('smoke/buildcross')
+subprocess.check_call(['meson', 'setup', 'build'], cwd='smoke')
+subprocess.check_call(['ninja', 'test'], cwd='smoke/build')
+subprocess.check_call(['ninja', 'reconfigure'], cwd='smoke/build')
+subprocess.check_call(['ninja', 'test'], cwd='smoke/build')
+#subprocess.check_call(['/usr/bin/meson',
+# 'env2mfile',
+# '--cross',
+# '--debarch',
+# 'armhf',
+# '-o',
+# 'cross-file.txt'], cwd='smoke')
+subprocess.check_call(['/usr/share/meson/debcrossgen',
+ '--arch',
+ 'armhf',
+ '-o',
+ 'cross-file.txt'], cwd='smoke')
+subprocess.check_call(['meson',
+ 'setup',
+ 'buildcross',
+ '--cross-file',
+ 'cross-file.txt'], cwd='smoke')
+subprocess.check_call(['ninja', 'test'], cwd='smoke/buildcross')
+subprocess.check_call(['sudo', 'apt-get', '-y', 'remove', 'meson'])
+subprocess.call('rm meson-*tar.gz*', shell=True)
+subprocess.check_call(['cp', infile, '.'])
+subprocess.check_call(['gpg', '--detach-sign', '--armor', fname])