forked from extern/httpie-cli
110 lines
2.7 KiB
Python
110 lines
2.7 KiB
Python
import stat
|
|
import subprocess
|
|
from pathlib import Path
|
|
from typing import Iterator, Tuple
|
|
|
|
BUILD_DIR = Path(__file__).parent
|
|
HTTPIE_DIR = BUILD_DIR.parent.parent.parent
|
|
|
|
EXTRAS_DIR = HTTPIE_DIR / 'extras'
|
|
MAN_PAGES_DIR = EXTRAS_DIR / 'man'
|
|
|
|
SCRIPT_DIR = BUILD_DIR / Path('scripts')
|
|
HOOKS_DIR = SCRIPT_DIR / 'hooks'
|
|
|
|
DIST_DIR = BUILD_DIR / 'dist'
|
|
|
|
TARGET_SCRIPTS = {
|
|
SCRIPT_DIR / 'http_cli.py': [],
|
|
SCRIPT_DIR / 'httpie_cli.py': ['--hidden-import=pip'],
|
|
}
|
|
|
|
|
|
def build_binaries() -> Iterator[Tuple[str, Path]]:
|
|
for target_script, extra_args in TARGET_SCRIPTS.items():
|
|
subprocess.check_call(
|
|
[
|
|
'pyinstaller',
|
|
'--onefile',
|
|
'--noupx',
|
|
'-p',
|
|
HTTPIE_DIR,
|
|
'--additional-hooks-dir',
|
|
HOOKS_DIR,
|
|
*extra_args,
|
|
target_script,
|
|
]
|
|
)
|
|
|
|
for executable_path in DIST_DIR.iterdir():
|
|
if executable_path.suffix:
|
|
continue
|
|
stat_r = executable_path.stat()
|
|
executable_path.chmod(stat_r.st_mode | stat.S_IEXEC)
|
|
yield executable_path.stem, executable_path
|
|
|
|
|
|
def build_packages(http_binary: Path, httpie_binary: Path) -> None:
|
|
import httpie
|
|
|
|
# Mapping of src_file -> dst_file
|
|
files = [
|
|
(http_binary, '/usr/bin/http'),
|
|
(http_binary, '/usr/bin/https'),
|
|
(httpie_binary, '/usr/bin/httpie'),
|
|
]
|
|
files.extend(
|
|
(man_page, f'/usr/share/man/man1/{man_page.name}')
|
|
for man_page in MAN_PAGES_DIR.glob('*.1')
|
|
)
|
|
|
|
# A list of additional dependencies
|
|
deps = [
|
|
'python3 >= 3.7',
|
|
'python3-pip'
|
|
]
|
|
|
|
processed_deps = [
|
|
f'--depends={dep}'
|
|
for dep in deps
|
|
]
|
|
processed_files = [
|
|
'='.join([str(src.resolve()), dst]) for src, dst in files
|
|
]
|
|
for target in ['deb', 'rpm']:
|
|
subprocess.check_call(
|
|
[
|
|
'fpm',
|
|
'--force',
|
|
'-s',
|
|
'dir',
|
|
'-t',
|
|
target,
|
|
'--name',
|
|
'httpie',
|
|
'--version',
|
|
httpie.__version__,
|
|
'--description',
|
|
httpie.__doc__.strip(),
|
|
'--license',
|
|
httpie.__licence__,
|
|
*processed_deps,
|
|
*processed_files,
|
|
],
|
|
cwd=DIST_DIR,
|
|
)
|
|
|
|
|
|
def main():
|
|
binaries = dict(build_binaries())
|
|
build_packages(binaries['http_cli'], binaries['httpie_cli'])
|
|
|
|
# Rename http_cli/httpie_cli to http/httpie
|
|
binaries['http_cli'].rename(DIST_DIR / 'http')
|
|
binaries['httpie_cli'].rename(DIST_DIR / 'httpie')
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|