224 lines
6.0 KiB
Python
224 lines
6.0 KiB
Python
#!/usr/bin/env python
|
|
#
|
|
# Copyright 2019-2019 by Martin Moene
|
|
#
|
|
# Distributed under the Boost Software License, Version 1.0.
|
|
# (See accompanying file LICENSE.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
|
#
|
|
# script/upload-conan.py, Python 3.4 and later
|
|
#
|
|
|
|
import argparse
|
|
import os
|
|
import re
|
|
import sys
|
|
import subprocess
|
|
|
|
# Configuration:
|
|
|
|
cfg_github_project = 'optional-lite'
|
|
cfg_github_user = 'martinmoene'
|
|
cfg_description = '(unused)'
|
|
|
|
cfg_cmakelists = 'CMakeLists.txt'
|
|
cfg_readme = 'Readme.md'
|
|
cfg_license = 'LICENSE.txt'
|
|
cfg_ref_prefix = 'v'
|
|
|
|
cfg_sha512 = 'dadeda'
|
|
cfg_vcpkg_description = '(no description found)'
|
|
cfg_vcpkg_root = os.environ['VCPKG_ROOT']
|
|
|
|
cfg_cmake_optpfx = "OPTIONAL_LITE"
|
|
|
|
# End configuration.
|
|
|
|
# vcpkg control and port templates:
|
|
|
|
tpl_path_vcpkg_control = '{vcpkg}/ports/{prj}/CONTROL'
|
|
tpl_path_vcpkg_portfile = '{vcpkg}/ports/{prj}/portfile.cmake'
|
|
|
|
tpl_vcpkg_control =\
|
|
"""Source: {prj}
|
|
Version: {ver}
|
|
Description: {desc}"""
|
|
|
|
tpl_vcpkg_portfile =\
|
|
"""include(vcpkg_common_functions)
|
|
|
|
vcpkg_from_github(
|
|
OUT_SOURCE_PATH SOURCE_PATH
|
|
REPO {usr}/{prj}
|
|
REF {ref}
|
|
SHA512 {sha}
|
|
)
|
|
|
|
vcpkg_configure_cmake(
|
|
SOURCE_PATH ${{SOURCE_PATH}}
|
|
PREFER_NINJA
|
|
OPTIONS
|
|
-D{optpfx}_OPT_BUILD_TESTS=OFF
|
|
-D{optpfx}_OPT_BUILD_EXAMPLES=OFF
|
|
)
|
|
|
|
vcpkg_install_cmake()
|
|
|
|
vcpkg_fixup_cmake_targets(
|
|
CONFIG_PATH lib/cmake/${{PORT}}
|
|
)
|
|
|
|
file(REMOVE_RECURSE
|
|
${{CURRENT_PACKAGES_DIR}}/debug
|
|
${{CURRENT_PACKAGES_DIR}}/lib
|
|
)
|
|
|
|
file(INSTALL
|
|
${{SOURCE_PATH}}/{lic} DESTINATION ${{CURRENT_PACKAGES_DIR}}/share/${{PORT}} RENAME copyright
|
|
)"""
|
|
|
|
tpl_vcpkg_note_sha =\
|
|
"""
|
|
Next actions:
|
|
- Obtain package SHA: 'vcpkg install {prj}', copy SHA mentioned in 'Actual hash: [...]'
|
|
- Add SHA to package: 'script\create-vcpkg --sha={sha}'
|
|
- Install package : 'vcpkg install {prj}'"""
|
|
|
|
tpl_vcpkg_note_install =\
|
|
"""
|
|
Next actions:
|
|
- Install package: 'vcpkg install {prj}'"""
|
|
|
|
# End of vcpkg templates
|
|
|
|
def versionFrom( filename ):
|
|
"""Obtain version from CMakeLists.txt"""
|
|
with open( filename, 'r' ) as f:
|
|
content = f.read()
|
|
version = re.search(r'VERSION\s(\d+\.\d+\.\d+)', content).group(1)
|
|
return version
|
|
|
|
def descriptionFrom( filename ):
|
|
"""Obtain description from CMakeLists.txt"""
|
|
with open( filename, 'r' ) as f:
|
|
content = f.read()
|
|
description = re.search(r'DESCRIPTION\s"(.*)"', content).group(1)
|
|
return description if description else cfg_vcpkg_description
|
|
|
|
def vcpkgRootFrom( path ):
|
|
return path if path else './vcpkg'
|
|
|
|
def to_ref( version ):
|
|
"""Add prefix to version/tag, like v1.2.3"""
|
|
return cfg_ref_prefix + version
|
|
|
|
def control_path( args ):
|
|
"""Create path like vcpks/ports/_project_/CONTROL"""
|
|
return tpl_path_vcpkg_control.format( vcpkg=args.vcpkg_root, prj=args.project )
|
|
|
|
def portfile_path( args ):
|
|
"""Create path like vcpks/ports/_project_/portfile.cmake"""
|
|
return tpl_path_vcpkg_portfile.format( vcpkg=args.vcpkg_root, prj=args.project )
|
|
|
|
def createControl( args ):
|
|
"""Create vcpkg CONTROL file"""
|
|
output = tpl_vcpkg_control.format(
|
|
prj=args.project, ver=args.version, desc=args.description )
|
|
if args.verbose:
|
|
print( "Creating control file '{f}':".format( f=control_path( args ) ) )
|
|
if args.verbose > 1:
|
|
print( output )
|
|
os.makedirs( os.path.dirname( control_path( args ) ), exist_ok=True )
|
|
with open( control_path( args ), 'w') as f:
|
|
print( output, file=f )
|
|
|
|
def createPortfile( args ):
|
|
"""Create vcpkg portfile"""
|
|
output = tpl_vcpkg_portfile.format(
|
|
optpfx=cfg_cmake_optpfx, usr=args.user, prj=args.project, ref=to_ref(args.version), sha=args.sha, lic=cfg_license )
|
|
if args.verbose:
|
|
print( "Creating portfile '{f}':".format( f=portfile_path( args ) ) )
|
|
if args.verbose > 1:
|
|
print( output )
|
|
os.makedirs( os.path.dirname( portfile_path( args ) ), exist_ok=True )
|
|
with open( portfile_path( args ), 'w') as f:
|
|
print( output, file=f )
|
|
|
|
def printNotes( args ):
|
|
if args.sha == cfg_sha512:
|
|
print( tpl_vcpkg_note_sha.
|
|
format( prj=args.project, sha='...' ) )
|
|
else:
|
|
print( tpl_vcpkg_note_install.
|
|
format( prj=args.project ) )
|
|
|
|
def createVcpkg( args ):
|
|
print( "Creating vcpkg for '{usr}/{prj}', version '{ver}' in folder '{vcpkg}':".
|
|
format( usr=args.user, prj=args.project, ver=args.version, vcpkg=args.vcpkg_root, ) )
|
|
createControl( args )
|
|
createPortfile( args )
|
|
printNotes( args )
|
|
|
|
def createVcpkgFromCommandLine():
|
|
"""Collect arguments from the commandline and create vcpkg."""
|
|
|
|
parser = argparse.ArgumentParser(
|
|
description='Create microsoft vcpkg.',
|
|
epilog="""""",
|
|
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
|
|
|
|
parser.add_argument(
|
|
'-v', '--verbose',
|
|
action='count',
|
|
default=0,
|
|
help='level of progress reporting')
|
|
|
|
parser.add_argument(
|
|
'--user',
|
|
metavar='u',
|
|
type=str,
|
|
default=cfg_github_user,
|
|
help='github user name')
|
|
|
|
parser.add_argument(
|
|
'--project',
|
|
metavar='p',
|
|
type=str,
|
|
default=cfg_github_project,
|
|
help='github project name')
|
|
|
|
parser.add_argument(
|
|
'--description',
|
|
metavar='d',
|
|
type=str,
|
|
# default=cfg_description,
|
|
default=descriptionFrom( cfg_cmakelists ),
|
|
help='vcpkg description [from ' + cfg_cmakelists + ']')
|
|
|
|
parser.add_argument(
|
|
'--version',
|
|
metavar='v',
|
|
type=str,
|
|
default=versionFrom( cfg_cmakelists ),
|
|
help='version number [from ' + cfg_cmakelists + ']')
|
|
|
|
parser.add_argument(
|
|
'--sha',
|
|
metavar='s',
|
|
type=str,
|
|
default=cfg_sha512,
|
|
help='sha of package')
|
|
|
|
parser.add_argument(
|
|
'--vcpkg-root',
|
|
metavar='r',
|
|
type=str,
|
|
default=vcpkgRootFrom( cfg_vcpkg_root ),
|
|
help='parent folder containing ports to write files to')
|
|
|
|
createVcpkg( parser.parse_args() )
|
|
|
|
if __name__ == '__main__':
|
|
createVcpkgFromCommandLine()
|
|
|
|
# end of file
|