mirror of
https://github.com/holub/mame
synced 2025-10-07 17:27:06 +03:00
verinfo to python (nw)
This commit is contained in:
parent
f89a72489a
commit
9c75643564
@ -20,17 +20,14 @@ OBJDIRS += \
|
||||
|
||||
MAKEDEP_TARGET = $(BUILDOUT)/makedep$(BUILD_EXE)
|
||||
MAKEMAK_TARGET = $(BUILDOUT)/makemak$(BUILD_EXE)
|
||||
VERINFO_TARGET = $(BUILDOUT)/verinfo$(BUILD_EXE)
|
||||
|
||||
MAKEDEP = $(MAKEDEP_TARGET)
|
||||
MAKEMAK = $(MAKEMAK_TARGET)
|
||||
VERINFO = $(VERINFO_TARGET)
|
||||
|
||||
ifneq ($(TERM),cygwin)
|
||||
ifeq ($(OS),Windows_NT)
|
||||
MAKEDEP = $(subst /,\,$(MAKEDEP_TARGET))
|
||||
MAKEMAK = $(subst /,\,$(MAKEMAK_TARGET))
|
||||
VERINFO = $(subst /,\,$(VERINFO_TARGET))
|
||||
endif
|
||||
endif
|
||||
|
||||
@ -38,7 +35,6 @@ ifneq ($(CROSS_BUILD),1)
|
||||
BUILD += \
|
||||
$(MAKEDEP_TARGET) \
|
||||
$(MAKEMAK_TARGET) \
|
||||
$(VERINFO_TARGET) \
|
||||
|
||||
|
||||
|
||||
@ -78,18 +74,6 @@ $(MAKEMAK_TARGET): $(MAKEMAKOBJS) $(LIBOCORE) $(ZLIB)
|
||||
$(LD) $(LDFLAGS) $^ $(BASELIBS) -o $@
|
||||
|
||||
|
||||
|
||||
#-------------------------------------------------
|
||||
# verinfo
|
||||
#-------------------------------------------------
|
||||
|
||||
VERINFOOBJS = \
|
||||
$(BUILDOBJ)/verinfo.o
|
||||
|
||||
$(VERINFO_TARGET): $(VERINFOOBJS) $(LIBOCORE)
|
||||
@echo Linking $@...
|
||||
$(LD) $(LDFLAGS) $^ $(BASELIBS) -o $@
|
||||
|
||||
else
|
||||
#-------------------------------------------------
|
||||
# It's a CROSS_BUILD. Ensure the targets exist.
|
||||
@ -97,7 +81,4 @@ else
|
||||
$(MAKEDEP_TARGET):
|
||||
@echo $@ should be built natively. Nothing to do.
|
||||
|
||||
$(VERINFO_TARGET):
|
||||
@echo $@ should be built natively. Nothing to do.
|
||||
|
||||
endif # CROSS_BUILD
|
||||
|
@ -1,308 +0,0 @@
|
||||
//============================================================
|
||||
//
|
||||
// verinfo.c - Version resource emitter code
|
||||
//
|
||||
// Copyright Nicola Salmoria and the MAME Team.
|
||||
// Visit http://mamedev.org for licensing and usage restrictions.
|
||||
//
|
||||
//============================================================
|
||||
|
||||
#include <stdio.h>
|
||||
#include <ctype.h>
|
||||
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
typedef unsigned char UINT8;
|
||||
|
||||
#define ARRAY_LENGTH(x) (sizeof(x) / sizeof(x[0]))
|
||||
#define BUILD_MAME (0)
|
||||
#define BUILD_MESS (1)
|
||||
#define BUILD_UME (2)
|
||||
|
||||
//============================================================
|
||||
// TYPE DEFINITIONS
|
||||
//============================================================
|
||||
|
||||
struct version_info
|
||||
{
|
||||
int version_major;
|
||||
int version_minor;
|
||||
int version_build;
|
||||
int version_subbuild;
|
||||
const char *version_string;
|
||||
const char *author;
|
||||
const char *comments;
|
||||
const char *company_name;
|
||||
const char *file_description;
|
||||
const char *internal_name;
|
||||
const char *legal_copyright;
|
||||
const char *original_filename;
|
||||
const char *product_name;
|
||||
};
|
||||
|
||||
|
||||
|
||||
//============================================================
|
||||
// STATIC
|
||||
//============================================================
|
||||
|
||||
static int build;
|
||||
|
||||
|
||||
//============================================================
|
||||
// emit_version_info
|
||||
//============================================================
|
||||
|
||||
static void emit_version_info(const version_info *v)
|
||||
{
|
||||
printf("VS_VERSION_INFO VERSIONINFO\n");
|
||||
printf("\tFILEVERSION %d,%d,%d,%d\n", v->version_major, v->version_minor, v->version_build, v->version_subbuild);
|
||||
printf("\tPRODUCTVERSION %d,%d,%d,%d\n", v->version_major, v->version_minor, v->version_build, v->version_subbuild);
|
||||
printf("\tFILEFLAGSMASK 0x3fL\n");
|
||||
#ifdef MAME_DEBUG
|
||||
if (v->version_build == 0)
|
||||
printf("\tFILEFLAGS VS_FF_DEBUG\n");
|
||||
else
|
||||
printf("\tFILEFLAGS VS_FF_PRERELEASE | VS_FF_DEBUG\n");
|
||||
#else
|
||||
if (v->version_build == 0)
|
||||
printf("\tFILEFLAGS 0x0L\n");
|
||||
else
|
||||
printf("\tFILEFLAGS VS_FF_PRERELEASE\n");
|
||||
#endif
|
||||
printf("\tFILEOS VOS_NT_WINDOWS32\n");
|
||||
printf("\tFILETYPE VFT_APP\n");
|
||||
printf("\tFILESUBTYPE VFT2_UNKNOWN\n");
|
||||
printf("BEGIN\n");
|
||||
printf("\tBLOCK \"StringFileInfo\"\n");
|
||||
printf("\tBEGIN\n");
|
||||
printf("#ifdef UNICODE\n");
|
||||
printf("\t\tBLOCK \"040904b0\"\n");
|
||||
printf("#else\n");
|
||||
printf("\t\tBLOCK \"040904E4\"\n");
|
||||
printf("#endif\n");
|
||||
printf("\t\tBEGIN\n");
|
||||
if (v->author != NULL)
|
||||
printf("\t\t\tVALUE \"Author\", \"%s\\0\"\n", v->author);
|
||||
if (v->comments != NULL)
|
||||
printf("\t\t\tVALUE \"Comments\", \"%s\\0\"\n", v->comments);
|
||||
if (v->company_name != NULL)
|
||||
printf("\t\t\tVALUE \"CompanyName\", \"%s\\0\"\n", v->company_name);
|
||||
if (v->file_description != NULL)
|
||||
printf("\t\t\tVALUE \"FileDescription\", \"%s\\0\"\n", v->file_description);
|
||||
printf("\t\t\tVALUE \"FileVersion\", \"%d, %d, %d, %d\\0\"\n", v->version_major, v->version_minor, v->version_build, v->version_subbuild);
|
||||
if (v->internal_name != NULL)
|
||||
printf("\t\t\tVALUE \"InternalName\", \"%s\\0\"\n", v->internal_name);
|
||||
if (v->legal_copyright != NULL)
|
||||
printf("\t\t\tVALUE \"LegalCopyright\", \"%s\\0\"\n", v->legal_copyright);
|
||||
if (v->original_filename != NULL)
|
||||
printf("\t\t\tVALUE \"OriginalFilename\", \"%s\\0\"\n", v->original_filename);
|
||||
if (v->product_name != NULL)
|
||||
printf("\t\t\tVALUE \"ProductName\", \"%s\\0\"\n", v->product_name);
|
||||
printf("\t\t\tVALUE \"ProductVersion\", \"%s\\0\"\n", v->version_string);
|
||||
printf("\t\tEND\n");
|
||||
printf("\tEND\n");
|
||||
printf("\tBLOCK \"VarFileInfo\"\n");
|
||||
printf("\tBEGIN\n");
|
||||
printf("#ifdef UNICODE\n");
|
||||
printf("\t\tVALUE \"Translation\", 0x409, 1200\n");
|
||||
printf("#else\n");
|
||||
printf("\t\tVALUE \"Translation\", 0x409, 1252\n");
|
||||
printf("#endif\n");
|
||||
printf("\tEND\n");
|
||||
printf("END\n");
|
||||
}
|
||||
|
||||
|
||||
|
||||
//============================================================
|
||||
// parse_version_digit
|
||||
//============================================================
|
||||
|
||||
static bool parse_version_digit(const char *str, int *position, int* value)
|
||||
{
|
||||
int res = 0;
|
||||
|
||||
while (str[*position] != 0 && !isspace((UINT8)str[*position]) && !isdigit((UINT8)str[*position]))
|
||||
(*position)++;
|
||||
|
||||
if (str[*position] != 0 && isdigit((UINT8)str[*position]))
|
||||
{
|
||||
res = sscanf(&str[*position], "%d", value);
|
||||
while (isdigit((UINT8)str[*position]))
|
||||
(*position)++;
|
||||
}
|
||||
return res == 1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//============================================================
|
||||
// parse_version
|
||||
//============================================================
|
||||
|
||||
static int parse_version(char *str, int *version_major, int *version_minor, const char **version_string)
|
||||
{
|
||||
char *version;
|
||||
int position = 0;
|
||||
|
||||
// find the version string
|
||||
version = strstr(str, "BARE_BUILD_VERSION");
|
||||
if (version != NULL)
|
||||
version = strchr(version, '"');
|
||||
if (version == NULL || *version == '\0' || strchr(version, '.') == NULL)
|
||||
{
|
||||
fprintf(stderr, "Unable to find version string\n");
|
||||
return 1;
|
||||
}
|
||||
version++;
|
||||
*strchr(version, '"') = 0;
|
||||
|
||||
*version_string = version;
|
||||
if (!parse_version_digit(version, &position, version_major))
|
||||
{
|
||||
fprintf(stderr, "Unable to parse major version\n");
|
||||
return 1;
|
||||
}
|
||||
if (!parse_version_digit(version, &position, version_minor))
|
||||
{
|
||||
fprintf(stderr, "Unable to parse minor version\n");
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//============================================================
|
||||
// main
|
||||
//============================================================
|
||||
static int usage(char *me)
|
||||
{
|
||||
fprintf(stderr, "Usage: %s [-b mame|mess|ume] <filename>\n", me);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
//============================================================
|
||||
// main
|
||||
//============================================================
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
version_info v;
|
||||
char legal_copyright[512];
|
||||
char *buffer;
|
||||
size_t size;
|
||||
int opt;
|
||||
FILE *f;
|
||||
|
||||
memset(&v, 0, sizeof(v));
|
||||
build = BUILD_MAME;
|
||||
|
||||
// validate parameters
|
||||
opt = 1;
|
||||
while (opt < argc && *argv[opt] == '-')
|
||||
{
|
||||
if (!strcmp(argv[opt], "-b"))
|
||||
{
|
||||
char *p = argv[++opt];
|
||||
if (!strcmp(p,"mame"))
|
||||
build = BUILD_MAME;
|
||||
else if (!strcmp(p,"mess"))
|
||||
build = BUILD_MESS;
|
||||
else if (!strcmp(p,"ume"))
|
||||
build = BUILD_UME;
|
||||
else
|
||||
return usage(argv[0]);
|
||||
}
|
||||
else
|
||||
return usage(argv[0]);
|
||||
opt++;
|
||||
}
|
||||
|
||||
if (opt != argc-1 )
|
||||
{
|
||||
return usage(argv[0]);
|
||||
}
|
||||
|
||||
// open the file
|
||||
f = fopen(argv[argc-1], "rb");
|
||||
if (f == NULL)
|
||||
{
|
||||
fprintf(stderr, "Error opening file %s\n", argv[argc-1]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
// get the file size
|
||||
fseek(f, 0, SEEK_END);
|
||||
size = ftell(f);
|
||||
fseek(f, 0, SEEK_SET);
|
||||
|
||||
// allocate a buffer
|
||||
buffer = (char *)malloc(size + 1);
|
||||
if (buffer == NULL)
|
||||
{
|
||||
fclose(f);
|
||||
fprintf(stderr, "Error allocating %ld bytes\n", (long) size + 1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
// read the file contents and NULL-terminate
|
||||
fread(buffer, 1, size, f);
|
||||
fclose(f);
|
||||
buffer[size] = 0;
|
||||
|
||||
// parse out version string
|
||||
if (parse_version(buffer, &v.version_major, &v.version_minor, &v.version_string))
|
||||
{
|
||||
fprintf(stderr, "Error parsing version\n");
|
||||
free(buffer);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (build == BUILD_MESS)
|
||||
{
|
||||
// MESS
|
||||
v.author = "MESS Team";
|
||||
v.comments = "Multi Emulation Super System";
|
||||
v.company_name = "MESS Team";
|
||||
v.file_description = "Multi Emulation Super System";
|
||||
v.internal_name = "MESS";
|
||||
v.original_filename = "MESS";
|
||||
v.product_name = "MESS";
|
||||
}
|
||||
else if (build == BUILD_UME)
|
||||
{
|
||||
// UME
|
||||
v.author = "MAME and MESS Team";
|
||||
v.comments = "Universal Machine Emulator";
|
||||
v.company_name = "MAME and MESS Team";
|
||||
v.file_description = "Universal Machine Emulator";
|
||||
v.internal_name = "UME";
|
||||
v.original_filename = "UME";
|
||||
v.product_name = "UME";
|
||||
}
|
||||
else
|
||||
{
|
||||
// MAME
|
||||
v.author = "Nicola Salmoria and the MAME Team";
|
||||
v.comments = "Multiple Arcade Machine Emulator";
|
||||
v.company_name = "MAME Team";
|
||||
v.file_description = "Multiple Arcade Machine Emulator";
|
||||
v.internal_name = "MAME";
|
||||
v.original_filename = "MAME";
|
||||
v.product_name = "MAME";
|
||||
}
|
||||
|
||||
// build legal_copyright string
|
||||
v.legal_copyright = legal_copyright;
|
||||
snprintf(legal_copyright, ARRAY_LENGTH(legal_copyright), "Copyright Nicola Salmoria and the MAME team");
|
||||
|
||||
// emit the info
|
||||
emit_version_info(&v);
|
||||
|
||||
free(buffer);
|
||||
return 0;
|
||||
}
|
116
src/build/verinfo.py
Normal file
116
src/build/verinfo.py
Normal file
@ -0,0 +1,116 @@
|
||||
#!/usr/bin/python
|
||||
|
||||
from __future__ import with_statement
|
||||
|
||||
import sys
|
||||
import os
|
||||
|
||||
def usage():
|
||||
sys.stderr.write('Usage: verinfo.py [-b mame|mess|ume] <filename>\n')
|
||||
return 0
|
||||
|
||||
build = "mame"
|
||||
|
||||
if (len(sys.argv)==1):
|
||||
usage()
|
||||
sys.exit(1)
|
||||
|
||||
if (sys.argv[1]=='-b'):
|
||||
if (sys.argv[2]=='mame'):
|
||||
build = "mame"
|
||||
elif (sys.argv[2]=='mess'):
|
||||
build = "mess"
|
||||
elif (sys.argv[2]=='ume'):
|
||||
build = "ume"
|
||||
else :
|
||||
usage()
|
||||
sys.exit(1)
|
||||
|
||||
srcfile = sys.argv[len(sys.argv)-1]
|
||||
try:
|
||||
fp = open(srcfile, 'rb')
|
||||
except IOError:
|
||||
sys.stderr.write("Unable to open source file '%s'" % srcfile)
|
||||
sys.exit(1)
|
||||
|
||||
for line in fp.readlines():
|
||||
if line.find("BARE_BUILD_VERSION")!=-1 and line.find('"')!=-1 and line.find('.')!=-1:
|
||||
version_string = line[line.find('"')+1:]
|
||||
version_string = version_string[0:version_string.find('"')]
|
||||
break
|
||||
|
||||
version_major = version_string[0:version_string.find('.')]
|
||||
version_minor = version_string[version_string.find('.')+1:]
|
||||
version_build = "0"
|
||||
version_subbuild = "0"
|
||||
if (build == "mame") :
|
||||
# MESS
|
||||
author = "MESS Team";
|
||||
comments = "Multi Emulation Super System";
|
||||
company_name = "MESS Team";
|
||||
file_description = "Multi Emulation Super System";
|
||||
internal_name = "MESS";
|
||||
original_filename = "MESS";
|
||||
product_name = "MESS";
|
||||
elif (build == "mess") :
|
||||
# UME
|
||||
author = "MAME and MESS Team"
|
||||
comments = "Universal Machine Emulator"
|
||||
company_name = "MAME and MESS Team"
|
||||
file_description = "Universal Machine Emulator"
|
||||
internal_name = "UME"
|
||||
original_filename = "UME"
|
||||
product_name = "UME"
|
||||
else :
|
||||
# MAME
|
||||
author = "Nicola Salmoria and the MAME Team"
|
||||
comments = "Multiple Arcade Machine Emulator"
|
||||
company_name = "MAME Team"
|
||||
file_description = "Multiple Arcade Machine Emulator"
|
||||
internal_name = "MAME"
|
||||
original_filename = "MAME"
|
||||
product_name = "MAME"
|
||||
|
||||
legal_copyright = "Copyright Nicola Salmoria and the MAME team"
|
||||
|
||||
print("VS_VERSION_INFO VERSIONINFO")
|
||||
print("\tFILEVERSION %s,%s,%s,%s" % (version_major, version_minor, version_build, version_subbuild))
|
||||
print("\tPRODUCTVERSION %s,%s,%s,%s" % (version_major, version_minor, version_build, version_subbuild))
|
||||
print("\tFILEFLAGSMASK 0x3fL")
|
||||
if (version_build == 0) :
|
||||
print("\tFILEFLAGS 0x0L")
|
||||
else :
|
||||
print("\tFILEFLAGS VS_FF_PRERELEASE")
|
||||
print("\tFILEOS VOS_NT_WINDOWS32")
|
||||
print("\tFILETYPE VFT_APP")
|
||||
print("\tFILESUBTYPE VFT2_UNKNOWN")
|
||||
print("BEGIN")
|
||||
print("\tBLOCK \"StringFileInfo\"")
|
||||
print("\tBEGIN")
|
||||
print("#ifdef UNICODE")
|
||||
print("\t\tBLOCK \"040904b0\"")
|
||||
print("#else")
|
||||
print("\t\tBLOCK \"040904E4\"")
|
||||
print("#endif")
|
||||
print("\t\tBEGIN")
|
||||
print("\t\t\tVALUE \"Author\", \"%s\\0\"" % author)
|
||||
print("\t\t\tVALUE \"Comments\", \"%s\\0\"" % comments)
|
||||
print("\t\t\tVALUE \"CompanyName\", \"%s\\0\"" % company_name)
|
||||
print("\t\t\tVALUE \"FileDescription\", \"%s\\0\"" % file_description)
|
||||
print("\t\t\tVALUE \"FileVersion\", \"%s, %s, %s, %s\\0\"" % (version_major, version_minor, version_build, version_subbuild))
|
||||
print("\t\t\tVALUE \"InternalName\", \"%s\\0\"" % internal_name)
|
||||
print("\t\t\tVALUE \"LegalCopyright\", \"%s\\0\"" % legal_copyright)
|
||||
print("\t\t\tVALUE \"OriginalFilename\", \"%s\\0\"" % original_filename)
|
||||
print("\t\t\tVALUE \"ProductName\", \"%s\\0\"" % product_name)
|
||||
print("\t\t\tVALUE \"ProductVersion\", \"%s\\0\"" % version_string)
|
||||
print("\t\tEND")
|
||||
print("\tEND")
|
||||
print("\tBLOCK \"VarFileInfo\"")
|
||||
print("\tBEGIN")
|
||||
print("#ifdef UNICODE")
|
||||
print("\t\tVALUE \"Translation\", 0x409, 1200")
|
||||
print("#else")
|
||||
print("\t\tVALUE \"Translation\", 0x409, 1252")
|
||||
print("#endif")
|
||||
print("\tEND")
|
||||
print("END")
|
@ -36,6 +36,6 @@ $(MESS_WINOBJ)/%.res: $(MESS_WINSRC)/%.rc
|
||||
|
||||
$(RESFILE): $(MESS_WINSRC)/mess.rc $(MESS_WINOBJ)/messvers.rc
|
||||
|
||||
$(MESS_WINOBJ)/messvers.rc: $(BUILDOUT)/verinfo$(BUILD_EXE) $(SRC)/version.c
|
||||
$(MESS_WINOBJ)/messvers.rc: $(SRC)/build/verinfo.py $(SRC)/version.c
|
||||
@echo Emitting $@...
|
||||
@"$(BUILDOUT)/verinfo$(BUILD_EXE)" -b mess $(SRC)/version.c > $@
|
||||
$(PYTHON) $(SRC)/build/verinfo.py -b mess $(SRC)/version.c > $@
|
@ -502,6 +502,6 @@ $(WINOBJ)/%.res: $(WINSRC)/%.rc | $(OSPREBUILD)
|
||||
|
||||
$(RESFILE): $(WINSRC)/mame.rc $(WINOBJ)/mamevers.rc
|
||||
|
||||
$(WINOBJ)/mamevers.rc: $(BUILDOUT)/verinfo$(BUILD_EXE) $(SRC)/version.c
|
||||
$(WINOBJ)/mamevers.rc: $(SRC)/build/verinfo.py $(SRC)/version.c
|
||||
@echo Emitting $@...
|
||||
@"$(BUILDOUT)/verinfo$(BUILD_EXE)" -b mame $(SRC)/version.c > $@
|
||||
$(PYTHON) $(SRC)/build/verinfo.py -b mame $(SRC)/version.c > $@
|
||||
|
@ -36,6 +36,6 @@ $(UME_WINOBJ)/%.res: $(UME_WINSRC)/%.rc
|
||||
|
||||
$(RESFILE): $(UME_WINSRC)/ume.rc $(UME_WINOBJ)/umevers.rc
|
||||
|
||||
$(UME_WINOBJ)/umevers.rc: $(BUILDOUT)/verinfo$(BUILD_EXE) $(SRC)/version.c
|
||||
$(UME_WINOBJ)/umevers.rc: $(SRC)/build/verinfo.py $(SRC)/version.c
|
||||
@echo Emitting $@...
|
||||
@"$(BUILDOUT)/verinfo$(BUILD_EXE)" -b ume $(SRC)/version.c > $@
|
||||
$(PYTHON) $(SRC)/build/verinfo.py -b ume $(SRC)/version.c > $@
|
Loading…
Reference in New Issue
Block a user