xref: /openbsd-src/gnu/llvm/libcxx/utils/cat_files.py (revision 46035553bfdd96e63c94e32da0210227ec2e3cf1)
1*46035553Spatrick#!/usr/bin/env python
2*46035553Spatrick#===----------------------------------------------------------------------===##
3*46035553Spatrick#
4*46035553Spatrick# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5*46035553Spatrick# See https://llvm.org/LICENSE.txt for license information.
6*46035553Spatrick# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7*46035553Spatrick#
8*46035553Spatrick#===----------------------------------------------------------------------===##
9*46035553Spatrick
10*46035553Spatrickfrom argparse import ArgumentParser
11*46035553Spatrickimport sys
12*46035553Spatrick
13*46035553Spatrickdef print_and_exit(msg):
14*46035553Spatrick    sys.stderr.write(msg + '\n')
15*46035553Spatrick    sys.exit(1)
16*46035553Spatrick
17*46035553Spatrickdef main():
18*46035553Spatrick    parser = ArgumentParser(
19*46035553Spatrick        description="Concatenate two files into a single file")
20*46035553Spatrick    parser.add_argument(
21*46035553Spatrick        '-o', '--output', dest='output', required=True,
22*46035553Spatrick        help='The output file. stdout is used if not given',
23*46035553Spatrick        type=str, action='store')
24*46035553Spatrick    parser.add_argument(
25*46035553Spatrick        'files', metavar='files',  nargs='+',
26*46035553Spatrick        help='The files to concatenate')
27*46035553Spatrick
28*46035553Spatrick    args = parser.parse_args()
29*46035553Spatrick
30*46035553Spatrick    if len(args.files) < 2:
31*46035553Spatrick        print_and_exit('fewer than 2 inputs provided')
32*46035553Spatrick    data = ''
33*46035553Spatrick    for filename in args.files:
34*46035553Spatrick        with open(filename, 'r') as f:
35*46035553Spatrick            data += f.read()
36*46035553Spatrick        if len(data) != 0 and data[-1] != '\n':
37*46035553Spatrick            data += '\n'
38*46035553Spatrick    assert len(data) > 0 and "cannot cat empty files"
39*46035553Spatrick    with open(args.output, 'w') as f:
40*46035553Spatrick        f.write(data)
41*46035553Spatrick
42*46035553Spatrick
43*46035553Spatrickif __name__ == '__main__':
44*46035553Spatrick    main()
45*46035553Spatrick    sys.exit(0)
46