| #!/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('-', '_') | |
| assert fname.endswith('.tar.gz') | |
| version_part = fname.split('-', 1)[1][:-7] | |
| if 'rc' in version_part: | |
| base_version, rcnum = version_part.split('rc') | |
| version = base_version + 'rc' + rcnum | |
| extension = tmp[-7:] | |
| dchversion = base_version + '~rc' + rcnum | |
| origname = tmp.split('rc', 1)[0] + '~rc' + rcnum + '.orig' + extension | |
| else: | |
| origname = tmp[:-7] + '.orig.' + tmp[-6:] | |
| version = version_part | |
| 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]) |