#!/usr/bin/python3
#
# Copyright (c) 2016-2018 The Khronos Group Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# Ensure config/extDependency.py is up-to-date before we import it.
# If it is up to date, 'make' will print a useless warning without '-s'.
import argparse,subprocess,sys
subprocess.check_call(['make', '-s', 'config/extDependency.py'])

# Alter sys.path to import config/extDependency.py.
sys.path = sys.path + [ 'config' ]

from genspec import *
from extDependency import allExts, khrExts

# Eventually, these may be defined by extDependency.py
allVersions = [ 'VK_VERSION_1_0', 'VK_VERSION_1_1' ]
Version1_0 = [ 'VK_VERSION_1_0' ]

if __name__ == '__main__':
    parser = argparse.ArgumentParser()

    parser.add_argument('-internal', action='store_true',
                        help='Generate internal build, not public')
    parser.add_argument('-norefpages', action='store_true',
                        help='Do not generate refpages')
    parser.add_argument('-pdf', action='store_true',
                        help='Always generate PDF outputs')
    parser.add_argument('-nov11', action='store_false', dest='v11',
                        help='Suppress Vulkan 1.1 targets')
    parser.add_argument('-v10', action='store_true',
                        help='Generate Vulkan 1.0 targets')

    args = parser.parse_args()

    if args.internal:
        # For internal build & pseudo-release
        repoDir = '/home/tree/git/vulkan'
        outDir = '/home/tree/git/vulkan/out'
    else:
        # For public release
        repoDir = '/home/tree/git/Vulkan-Docs'
        outDir = '/home/tree/git/registry/vulkan/specs'

        # Always build PDF for public releases
        args.pdf = True

    if args.norefpages:
        refPageTargets = ''
    else:
        # Just generate separate reference pages, not the single-page
        # 'manhtml' and 'manpdf' refpage targets.
        refPageTargets = ' manhtmlpages'
        # refPageTargets += ' manhtml'
        # if args.pdf:
        #    refPageTargets += ' manpdf'

    specTargets = ' html'
    if args.pdf:
        specTargets += ' pdf'

    print('echo Info: Building release from', repoDir, 'to', outDir)
    print('echo Info: Building spec targets', specTargets)
    print('')

    # Vulkan 1.1 specs
    if args.v11:
        # Build ref pages and validusage targets only for 1.1 + all
        # extensions.
        buildBranch('1.1-extensions',
                    versions = allVersions,
                    extensions = allExts,
                    ratified = False,
                    apititle = '(with all registered Vulkan extensions)',
                    xmlTargets = 'clobber install',
                    specTargets = specTargets + ' validusage' + refPageTargets,
                    repoDir = repoDir,
                    outDir = outDir)

        buildBranch('1.1-khr-extensions',
                    versions = allVersions,
                    extensions = khrExts,
                    ratified = True,
                    apititle = '(with KHR extensions)',
                    xmlTargets = 'clobber install',
                    specTargets = specTargets,
                    repoDir = repoDir,
                    outDir = outDir)

        # Build style guide and registry documentation targets only for 1.1
        # + no extensions.
        buildBranch('1.1',
                    versions = allVersions,
                    extensions = None,
                    ratified = True,
                    apititle = None,
                    xmlTargets = 'clobber install',
                    specTargets = specTargets + ' styleguide registry',
                    repoDir = repoDir,
                    outDir = outDir,
                    needRefSources = True)

    # Vulkan 1.0 specs. Only build the core spec now that 1.1 is out.
    if args.v10:
        buildBranch('1.0-extensions',
                versions = Version1_0,
                extensions = allExts,
                ratified = False,
                apititle = '(with all registered Vulkan extensions)',
                xmlTargets = 'clobber install',
                specTargets = specTargets,
                repoDir = repoDir,
                outDir = outDir)

        buildBranch('1.0-wsi_extensions',
                versions = Version1_0,
                extensions = khrExts,
                ratified = True,
                apititle = '(with KHR extensions)',
                xmlTargets = 'clobber install',
                specTargets = specTargets,
                repoDir = repoDir,
                outDir = outDir)

        buildBranch('1.0',
                versions = Version1_0,
                extensions = None,
                ratified = True,
                apititle = None,
                xmlTargets = 'clobber install',
                specTargets = specTargets,
                repoDir = repoDir,
                outDir = outDir)
    else:
        print('echo Info: Not building 1.0 specs yet')

    print('echo Info: post-generation cleanup')
    createTags(releaseNum(), buildOnFriday())
