113481Sgiacomo.travaglini@arm.com#!/usr/bin/env python 213481Sgiacomo.travaglini@arm.com# 313481Sgiacomo.travaglini@arm.com# Copyright 2008, Google Inc. 413481Sgiacomo.travaglini@arm.com# All rights reserved. 513481Sgiacomo.travaglini@arm.com# 613481Sgiacomo.travaglini@arm.com# Redistribution and use in source and binary forms, with or without 713481Sgiacomo.travaglini@arm.com# modification, are permitted provided that the following conditions are 813481Sgiacomo.travaglini@arm.com# met: 913481Sgiacomo.travaglini@arm.com# 1013481Sgiacomo.travaglini@arm.com# * Redistributions of source code must retain the above copyright 1113481Sgiacomo.travaglini@arm.com# notice, this list of conditions and the following disclaimer. 1213481Sgiacomo.travaglini@arm.com# * Redistributions in binary form must reproduce the above 1313481Sgiacomo.travaglini@arm.com# copyright notice, this list of conditions and the following disclaimer 1413481Sgiacomo.travaglini@arm.com# in the documentation and/or other materials provided with the 1513481Sgiacomo.travaglini@arm.com# distribution. 1613481Sgiacomo.travaglini@arm.com# * Neither the name of Google Inc. nor the names of its 1713481Sgiacomo.travaglini@arm.com# contributors may be used to endorse or promote products derived from 1813481Sgiacomo.travaglini@arm.com# this software without specific prior written permission. 1913481Sgiacomo.travaglini@arm.com# 2013481Sgiacomo.travaglini@arm.com# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 2113481Sgiacomo.travaglini@arm.com# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 2213481Sgiacomo.travaglini@arm.com# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2313481Sgiacomo.travaglini@arm.com# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2413481Sgiacomo.travaglini@arm.com# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2513481Sgiacomo.travaglini@arm.com# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2613481Sgiacomo.travaglini@arm.com# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2713481Sgiacomo.travaglini@arm.com# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2813481Sgiacomo.travaglini@arm.com# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2913481Sgiacomo.travaglini@arm.com# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 3013481Sgiacomo.travaglini@arm.com# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 3113481Sgiacomo.travaglini@arm.com 3213481Sgiacomo.travaglini@arm.com"""A script to prepare version informtion for use the gtest Info.plist file. 3313481Sgiacomo.travaglini@arm.com 3413481Sgiacomo.travaglini@arm.com This script extracts the version information from the configure.ac file and 3513481Sgiacomo.travaglini@arm.com uses it to generate a header file containing the same information. The 3613481Sgiacomo.travaglini@arm.com #defines in this header file will be included in during the generation of 3713481Sgiacomo.travaglini@arm.com the Info.plist of the framework, giving the correct value to the version 3813481Sgiacomo.travaglini@arm.com shown in the Finder. 3913481Sgiacomo.travaglini@arm.com 4013481Sgiacomo.travaglini@arm.com This script makes the following assumptions (these are faults of the script, 4113481Sgiacomo.travaglini@arm.com not problems with the Autoconf): 4213481Sgiacomo.travaglini@arm.com 1. The AC_INIT macro will be contained within the first 1024 characters 4313481Sgiacomo.travaglini@arm.com of configure.ac 4413481Sgiacomo.travaglini@arm.com 2. The version string will be 3 integers separated by periods and will be 4513481Sgiacomo.travaglini@arm.com surrounded by squre brackets, "[" and "]" (e.g. [1.0.1]). The first 4613481Sgiacomo.travaglini@arm.com segment represents the major version, the second represents the minor 4713481Sgiacomo.travaglini@arm.com version and the third represents the fix version. 4813481Sgiacomo.travaglini@arm.com 3. No ")" character exists between the opening "(" and closing ")" of 4913481Sgiacomo.travaglini@arm.com AC_INIT, including in comments and character strings. 5013481Sgiacomo.travaglini@arm.com""" 5113481Sgiacomo.travaglini@arm.com 5213481Sgiacomo.travaglini@arm.comimport sys 5313481Sgiacomo.travaglini@arm.comimport re 5413481Sgiacomo.travaglini@arm.com 5513481Sgiacomo.travaglini@arm.com# Read the command line argument (the output directory for Version.h) 5613481Sgiacomo.travaglini@arm.comif (len(sys.argv) < 3): 5713481Sgiacomo.travaglini@arm.com print "Usage: versiongenerate.py input_dir output_dir" 5813481Sgiacomo.travaglini@arm.com sys.exit(1) 5913481Sgiacomo.travaglini@arm.comelse: 6013481Sgiacomo.travaglini@arm.com input_dir = sys.argv[1] 6113481Sgiacomo.travaglini@arm.com output_dir = sys.argv[2] 6213481Sgiacomo.travaglini@arm.com 6313481Sgiacomo.travaglini@arm.com# Read the first 1024 characters of the configure.ac file 6413481Sgiacomo.travaglini@arm.comconfig_file = open("%s/configure.ac" % input_dir, 'r') 6513481Sgiacomo.travaglini@arm.combuffer_size = 1024 6613481Sgiacomo.travaglini@arm.comopening_string = config_file.read(buffer_size) 6713481Sgiacomo.travaglini@arm.comconfig_file.close() 6813481Sgiacomo.travaglini@arm.com 6913481Sgiacomo.travaglini@arm.com# Extract the version string from the AC_INIT macro 7013481Sgiacomo.travaglini@arm.com# The following init_expression means: 7113481Sgiacomo.travaglini@arm.com# Extract three integers separated by periods and surrounded by squre 7213481Sgiacomo.travaglini@arm.com# brackets(e.g. "[1.0.1]") between "AC_INIT(" and ")". Do not be greedy 7313481Sgiacomo.travaglini@arm.com# (*? is the non-greedy flag) since that would pull in everything between 7413481Sgiacomo.travaglini@arm.com# the first "(" and the last ")" in the file. 7513481Sgiacomo.travaglini@arm.comversion_expression = re.compile(r"AC_INIT\(.*?\[(\d+)\.(\d+)\.(\d+)\].*?\)", 7613481Sgiacomo.travaglini@arm.com re.DOTALL) 7713481Sgiacomo.travaglini@arm.comversion_values = version_expression.search(opening_string) 7813481Sgiacomo.travaglini@arm.commajor_version = version_values.group(1) 7913481Sgiacomo.travaglini@arm.comminor_version = version_values.group(2) 8013481Sgiacomo.travaglini@arm.comfix_version = version_values.group(3) 8113481Sgiacomo.travaglini@arm.com 8213481Sgiacomo.travaglini@arm.com# Write the version information to a header file to be included in the 8313481Sgiacomo.travaglini@arm.com# Info.plist file. 8413481Sgiacomo.travaglini@arm.comfile_data = """// 8513481Sgiacomo.travaglini@arm.com// DO NOT MODIFY THIS FILE (but you can delete it) 8613481Sgiacomo.travaglini@arm.com// 8713481Sgiacomo.travaglini@arm.com// This file is autogenerated by the versiongenerate.py script. This script 8813481Sgiacomo.travaglini@arm.com// is executed in a "Run Script" build phase when creating gtest.framework. This 8913481Sgiacomo.travaglini@arm.com// header file is not used during compilation of C-source. Rather, it simply 9013481Sgiacomo.travaglini@arm.com// defines some version strings for substitution in the Info.plist. Because of 9113481Sgiacomo.travaglini@arm.com// this, we are not not restricted to C-syntax nor are we using include guards. 9213481Sgiacomo.travaglini@arm.com// 9313481Sgiacomo.travaglini@arm.com 9413481Sgiacomo.travaglini@arm.com#define GTEST_VERSIONINFO_SHORT %s.%s 9513481Sgiacomo.travaglini@arm.com#define GTEST_VERSIONINFO_LONG %s.%s.%s 9613481Sgiacomo.travaglini@arm.com 9713481Sgiacomo.travaglini@arm.com""" % (major_version, minor_version, major_version, minor_version, fix_version) 9813481Sgiacomo.travaglini@arm.comversion_file = open("%s/Version.h" % output_dir, 'w') 9913481Sgiacomo.travaglini@arm.comversion_file.write(file_data) 10013481Sgiacomo.travaglini@arm.comversion_file.close() 101