#!/usr/bin/python3
from __future__ import unicode_literals

import argparse
import os.path
import pipes
import subprocess
import sys

def run(cmd):
    print(cmd)
    ret = subprocess.call(cmd, shell=True)
    if ret != 0:
        sys.exit(ret)

parser = argparse.ArgumentParser()
parser.add_argument("-l", "--lang", required=True, action="append", default=[])
parser.add_argument("-m", "--mo-pattern", required=True)
parser.add_argument("source_dir", nargs="+")

args = parser.parse_args()

for lang in args.lang:
    popattern = "{}.po".format(lang)
    mofile = args.mo_pattern.replace("%", lang)
    if os.path.exists(mofile):
        reftime = os.path.getmtime(mofile)
    else:
        reftime = 0

    source_files = []
    run_msgfmt = False
    for directory in args.source_dir:
        popath = os.path.join(directory, popattern)
        if os.path.exists(popath):
            source_files.append(popath)
            if os.path.getmtime(popath) > reftime:
                run_msgfmt = True

    if run_msgfmt:
        run("mkdir -p {}".format(pipes.quote(os.path.dirname(mofile))))
        run("msgcat --use-first {} | msgfmt - -o {}".format(
            " ".join(map(pipes.quote, source_files)),
            pipes.quote(mofile)))
