106 lines
3.4 KiB
Python
Executable File
106 lines
3.4 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
# Helper for building resource files when building for windows. Always
|
|
# generates a .rc from the input .rc file. When building with msvc we
|
|
# additionally generate a .res file with 'rc', when building with gcc, we use
|
|
# windres to directly generate a .o. Additionally we generate basic
|
|
# dependencies if depfile is specified.
|
|
|
|
import argparse
|
|
import os
|
|
import subprocess
|
|
import sys
|
|
|
|
parser = argparse.ArgumentParser(description='generate PostgreSQL rc file')
|
|
|
|
parser.add_argument('--srcdir', type=os.path.abspath,
|
|
required=True)
|
|
parser.add_argument('--builddir', type=os.path.abspath,
|
|
required=True)
|
|
|
|
binaries = parser.add_argument_group('binaries')
|
|
binaries.add_argument('--windres', type=os.path.abspath)
|
|
binaries.add_argument('--rc', type=os.path.abspath)
|
|
|
|
inout = parser.add_argument_group('inout')
|
|
inout.add_argument('--depfile', type=argparse.FileType('w'))
|
|
inout.add_argument('--input', type=argparse.FileType('r'),
|
|
required=True)
|
|
inout.add_argument('--rcout', type=argparse.FileType('w'),
|
|
required=True)
|
|
inout.add_argument('--out', type=str,
|
|
required=True)
|
|
|
|
replacements = parser.add_argument_group('replacements')
|
|
replacements.add_argument('--FILEDESC', type=str)
|
|
replacements.add_argument('--NAME', type=str, required=True)
|
|
replacements.add_argument('--VFT_TYPE', type=str, required=True)
|
|
replacements.add_argument('--FILEENDING', type=str, required=True)
|
|
replacements.add_argument('--ICO', type=str)
|
|
|
|
args = parser.parse_args()
|
|
|
|
# determine replacement strings
|
|
|
|
internal_name = '"{0}"'.format(args.NAME)
|
|
original_name = '"{0}.{1}"'.format(args.NAME, args.FILEENDING)
|
|
|
|
# if no description is passed in, generate one based on the name
|
|
if args.FILEDESC:
|
|
filedesc = args.FILEDESC
|
|
elif args.NAME:
|
|
if args.VFT_TYPE == 'VFT_DLL':
|
|
filedesc = 'PostgreSQL {0} library'.format(args.NAME)
|
|
else:
|
|
filedesc = 'PostgreSQL {0} binary'.format(args.NAME)
|
|
filedesc = '"{0}"'.format(filedesc)
|
|
|
|
|
|
if args.ICO:
|
|
ico = 'IDI_ICON ICON "{0}"'.format(args.ICO)
|
|
if args.depfile:
|
|
args.depfile.write("{0} : {1}\n".format(args.rcout.name, args.ICO))
|
|
else:
|
|
ico = ''
|
|
|
|
|
|
data = args.input.read()
|
|
|
|
data = data.replace('VFT_APP', args.VFT_TYPE)
|
|
data = data.replace('_INTERNAL_NAME_', internal_name)
|
|
data = data.replace('_ORIGINAL_NAME_', original_name)
|
|
data = data.replace('FILEDESC', filedesc)
|
|
data = data.replace("_ICO_", ico)
|
|
|
|
args.rcout.write(data)
|
|
args.rcout.close()
|
|
|
|
if args.windres:
|
|
cmd = [
|
|
args.windres,
|
|
'-I{0}/src/include/'.format(args.builddir),
|
|
'-I{0}/src/include/'.format(args.srcdir),
|
|
'-o', args.out, '-i', args.rcout.name,
|
|
]
|
|
elif args.rc:
|
|
cmd = [
|
|
args.rc, '/nologo',
|
|
'-I{0}/src/include/'.format(args.builddir),
|
|
'-I{0}/src/include/'.format(args.srcdir),
|
|
'/fo', args.out, args.rcout.name,
|
|
]
|
|
else:
|
|
sys.exit('either --windres or --rc needs to be specified')
|
|
|
|
sp = subprocess.run(cmd)
|
|
if sp.returncode != 0:
|
|
sys.exit(sp.returncode)
|
|
|
|
# It'd be nicer if we could generate correct dependencies here, but 'rc'
|
|
# doesn't support doing so. It's unlikely we'll ever need more, so...
|
|
if args.depfile:
|
|
args.depfile.write("{0} : {1}\n".format(
|
|
args.rcout.name, args.input.name))
|
|
args.depfile.write("{0} : {1}/{2}\n".format(
|
|
args.out, args.builddir, 'src/include/pg_config.h'))
|