• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/usr/bin/env python3
2
3# Copyright Hans Dembinski 2019
4# Distributed under the Boost Software License, Version 1.0.
5# See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt
6
7import sys
8from os.path import abspath, join
9import re
10import datetime
11
12project_dir = "/".join(abspath(__file__).split("/")[:-2])
13
14filename = abspath(sys.argv[1])
15
16copyright = """// Copyright Hans Dembinski {}
17//
18// Distributed under the Boost Software License, Version 1.0.
19// (See accompanying file LICENSE_1_0.txt
20// or copy at http://www.boost.org/LICENSE_1_0.txt)
21
22""".format(datetime.datetime.today().year)
23
24if filename.endswith(".hpp"):
25    with open(filename) as f:
26        content = f.read()
27    if not content.startswith("// Copyright"):
28        content = copyright + content
29
30    sub = filename[len(project_dir) + 1:]
31    if sub.startswith("include/boost/"):
32        sub = sub[len("include/boost/"):]
33    if sub.startswith("test/"):
34        sub = "histogram/" + sub
35    guard_name = "BOOST_" + sub.replace(".", "_").replace("/", "_").upper()
36
37    if guard_name not in content:
38        lines = content.split("\n")
39        for end, line in enumerate(lines):
40            if line.startswith("//"):
41                continue
42            break
43        for start in range(end, len(lines)):
44            if lines[start] != "":
45                break
46        lines = lines[:end] + ["", "#ifndef " + guard_name, "#define " + guard_name, ""] + lines[start:]
47        while lines[-1] == "":
48            lines.pop()
49        lines += ["", "#endif // " + guard_name, ""]
50        content = "\n".join(lines)
51
52    with open(filename, "w") as f:
53        f.write(content)
54