X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=make%2Fconfigure.py;h=0c41792551af3757695899231f1c33852ee8502d;hb=69bcedab6772552b36bc8f1591db6ea0c8de08c3;hp=17451254ef7e12d71ac7389c9564fee8239dae96;hpb=368f30692dba8e93b56ae69e0f4b902e2940f56f;p=handbrake-jp%2Fhandbrake-jp-git.git diff --git a/make/configure.py b/make/configure.py index 17451254..0c417925 100644 --- a/make/configure.py +++ b/make/configure.py @@ -315,7 +315,7 @@ class ShellProbe( Action ): ## x86_64-unknown-linux-gnu (Linux, Fedora 10 x86_64) ## class HostTupleProbe( ShellProbe, list ): - GNU_TUPLE_RX = '([^-]+)-([^-]+)-([^0-9-]+)([^-]*)-?([^-]*)' + GNU_TUPLE_RE = '([^-]+)-?([^-]*)-([^0-9-]+)([^-]*)-?([^-]*)' def __init__( self ): super( HostTupleProbe, self ).__init__( 'host tuple', '%s/config.guess' % (cfg.dir), abort=True, head=True ) @@ -327,7 +327,7 @@ class HostTupleProbe( ShellProbe, list ): self.spec = '' ## grok GNU host tuples - m = re.match( HostTupleProbe.GNU_TUPLE_RX, self.spec ) + m = re.match( HostTupleProbe.GNU_TUPLE_RE, self.spec ) if not m: self.fail = True self.msg_end = 'invalid host tuple: %s' % (self.spec) @@ -365,10 +365,14 @@ class BuildAction( Action, list ): super( BuildAction, self ).__init__( 'compute', 'build tuple', abort=True ) def _action( self ): - self.spec = arch.mode[arch.mode.mode] + ## check if --cross spec was used; must maintain 5-tuple compatibility with regex + if options.cross: + self.spec = os.path.basename( options.cross ).rstrip( '-' ) + else: + self.spec = arch.mode[arch.mode.mode] ## grok GNU host tuples - m = re.match( HostTupleProbe.GNU_TUPLE_RX, self.spec ) + m = re.match( HostTupleProbe.GNU_TUPLE_RE, self.spec ) if not m: self.msg_end = 'invalid host tuple: %s' % (self.spec) return @@ -386,6 +390,15 @@ class BuildAction( Action, list ): self.extra = self[4] self.systemf = host.systemf + ## when cross we need switch for platforms + if options.cross: + if self.match( '*mingw*' ): + self.systemf = 'MinGW' + elif self.systemf: + self.systemf[0] = self.systemf[0].upper() + self.title = '%s %s' % (build.systemf,self.machine) + else: + self.title = '%s %s' % (build.systemf,arch.mode.mode) self.fail = False ## glob-match against spec @@ -528,7 +541,7 @@ class SelectMode( dict ): self.mode = self.default def cli_add_option( self, parser, option ): - parser.add_option( '', option, default=self.mode, metavar='MODE', + parser.add_option( option, default=self.mode, metavar='MODE', help='select %s mode: %s' % (self.descr,self.toString()), action='callback', callback=self.cli_callback, type='str' ) @@ -696,7 +709,7 @@ class ToolProbe( Action ): self.msg_end = 'not found' def cli_add_option( self, parser ): - parser.add_option( '', '--'+self.name, metavar='PROG', + parser.add_option( '--'+self.name, metavar='PROG', help='[%s]' % (self.pathname), action='callback', callback=self.cli_callback, type='str' ) @@ -736,7 +749,7 @@ class SelectTool( Action ): self.msg_end = 'not found' def cli_add_option( self, parser ): - parser.add_option( '', '--'+self.name, metavar='MODE', + parser.add_option( '--'+self.name, metavar='MODE', help='select %s mode: %s' % (self.name,self.toString()), action='callback', callback=self.cli_callback, type='str' ) @@ -783,9 +796,15 @@ class ConfigDocument: def _outputMake( self, file, namelen, name, value, append ): if append: - file.write( '%-*s += %s\n' % (namelen, name, value )) + if value == None or len(str(value)) == 0: + file.write( '%-*s +=\n' % (namelen, name) ) + else: + file.write( '%-*s += %s\n' % (namelen, name, value) ) else: - file.write( '%-*s = %s\n' % (namelen, name, value )) + if value == None or len(str(value)) == 0: + file.write( '%-*s =\n' % (namelen, name) ) + else: + file.write( '%-*s = %s\n' % (namelen, name, value) ) def _outputM4( self, file, namelen, name, value ): namelen += 7 @@ -875,24 +894,50 @@ class ConfigDocument: ## ## create cli parser ## + +## class to hook options and create CONF.args list +class Option( optparse.Option ): + conf_args = [] + + def _conf_record( self, opt, value ): + ## skip conf,force,launch + if re.match( '^--(conf|force|launch).*$', opt ): + return + + ## remove duplicates (last duplicate wins) + for i,arg in enumerate( Option.conf_args ): + if opt == arg[0]: + del Option.conf_args[i] + break + + if value: + Option.conf_args.append( [opt,'%s=%s' % (opt,value)] ) + else: + Option.conf_args.append( [opt,'%s' % (opt)] ) + + def take_action( self, action, dest, opt, value, values, parser ): + self._conf_record( opt, value ) + return optparse.Option.take_action( self, action, dest, opt, value, values, parser ) + def createCLI(): cli = OptionParser( 'usage: %prog [OPTIONS...] [TARGETS...]' ) + cli.option_class = Option cli.description = '' cli.description += 'Configure %s build system.' % (project.name) ## add hidden options - cli.add_option( '', '--conf-method', default='terminal', action='store', help=optparse.SUPPRESS_HELP ) - cli.add_option( '', '--force', default=False, action='store_true', help='overwrite existing build config' ) - cli.add_option( '', '--verbose', default=False, action='store_true', help='increase verbosity' ) + cli.add_option( '--conf-method', default='terminal', action='store', help=optparse.SUPPRESS_HELP ) + cli.add_option( '--force', default=False, action='store_true', help='overwrite existing build config' ) + cli.add_option( '--verbose', default=False, action='store_true', help='increase verbosity' ) ## add install options grp = OptionGroup( cli, 'Directory Locations' ) - grp.add_option( '', '--src', default=cfg.src_dir, action='store', metavar='DIR', + grp.add_option( '--src', default=cfg.src_dir, action='store', metavar='DIR', help='specify top-level source dir [%s]' % (cfg.src_dir) ) - grp.add_option( '', '--build', default=cfg.build_dir, action='store', metavar='DIR', + grp.add_option( '--build', default=cfg.build_dir, action='store', metavar='DIR', help='specify build scratch/output dir [%s]' % (cfg.build_dir) ) - grp.add_option( '', '--prefix', default=cfg.prefix_dir, action='store', metavar='DIR', + grp.add_option( '--prefix', default=cfg.prefix_dir, action='store', metavar='DIR', help='specify install dir for products [%s]' % (cfg.prefix_dir) ) cli.add_option_group( grp ) @@ -900,25 +945,27 @@ def createCLI(): grp = OptionGroup( cli, 'Feature Options' ) h = IfHost( 'enable assembly code in non-contrib modules', 'NOMATCH*-*-darwin*', 'NOMATCH*-*-linux*', none=optparse.SUPPRESS_HELP ).value - grp.add_option( '', '--enable-asm', default=False, action='store_true', help=h ) + grp.add_option( '--enable-asm', default=False, action='store_true', help=h ) h = IfHost( 'disable GTK GUI', '*-*-linux*', none=optparse.SUPPRESS_HELP ).value - grp.add_option( '', '--disable-gtk', default=False, action='store_true', help=h ) + grp.add_option( '--disable-gtk', default=False, action='store_true', help=h ) + h = IfHost( 'enable GTK GUI (mingw)', '*-*-mingw*', none=optparse.SUPPRESS_HELP ).value + grp.add_option( '--enable-gtk-mingw', default=False, action='store_true', help=h ) h = IfHost( 'disable Xcode', '*-*-darwin*', none=optparse.SUPPRESS_HELP ).value - grp.add_option( '', '--disable-xcode', default=False, action='store_true', help=h ) + grp.add_option( '--disable-xcode', default=False, action='store_true', help=h ) cli.add_option_group( grp ) ## add launch options grp = OptionGroup( cli, 'Launch Options' ) - grp.add_option( '', '--launch', default=False, action='store_true', + grp.add_option( '--launch', default=False, action='store_true', help='launch build, capture log and wait for completion' ) - grp.add_option( '', '--launch-jobs', default=1, action='store', metavar='N', type='int', + grp.add_option( '--launch-jobs', default=1, action='store', metavar='N', type='int', help='allow N jobs at once; 0 to match CPU count [1]' ) - grp.add_option( '', '--launch-args', default=None, action='store', metavar='ARGS', + grp.add_option( '--launch-args', default=None, action='store', metavar='ARGS', help='specify additional ARGS for launch command' ) - grp.add_option( '', '--launch-quiet', default=False, action='store_true', + grp.add_option( '--launch-quiet', default=False, action='store_true', help='do not echo build output while waiting' ) cli.add_option_group( grp ) @@ -927,6 +974,8 @@ def createCLI(): debugMode.cli_add_option( grp, '--debug' ) optimizeMode.cli_add_option( grp, '--optimize' ) arch.mode.cli_add_option( grp, '--arch' ) + grp.add_option( '--cross', default=None, action='store', metavar='SPEC', + help='specify GCC cross-compilation spec' ) cli.add_option_group( grp ) ## add tool locations @@ -1074,13 +1123,15 @@ try: else: gmake = ToolProbe( 'GMAKE.exe', 'gmake', 'make' ) - m4 = ToolProbe( 'M4.exe', 'm4' ) - mkdir = ToolProbe( 'MKDIR.exe', 'mkdir' ) - patch = ToolProbe( 'PATCH.exe', 'gpatch', 'patch' ) - rm = ToolProbe( 'RM.exe', 'rm' ) - tar = ToolProbe( 'TAR.exe', 'gtar', 'tar' ) - wget = ToolProbe( 'WGET.exe', 'wget', abort=False ) - yasm = ToolProbe( 'YASM.exe', 'yasm', abort=False ) + m4 = ToolProbe( 'M4.exe', 'm4' ) + mkdir = ToolProbe( 'MKDIR.exe', 'mkdir' ) + patch = ToolProbe( 'PATCH.exe', 'gpatch', 'patch' ) + rm = ToolProbe( 'RM.exe', 'rm' ) + ranlib = ToolProbe( 'RANLIB.exe', 'ranlib' ) + strip = ToolProbe( 'STRIP.exe', 'strip' ) + tar = ToolProbe( 'TAR.exe', 'gtar', 'tar' ) + wget = ToolProbe( 'WGET.exe', 'wget', abort=False ) + yasm = ToolProbe( 'YASM.exe', 'yasm', abort=False ) xcodebuild = ToolProbe( 'XCODEBUILD.exe', 'xcodebuild', abort=False ) lipo = ToolProbe( 'LIPO.exe', 'lipo', abort=False ) @@ -1114,6 +1165,12 @@ try: else: targets.append( arg ) + ## re-run tools with cross-compilation needs + if options.cross: + for tool in ( Tools.ar, Tools.gcc, Tools.ranlib, Tools.strip ): + tool.__init__( tool.var, '%s-%s' % (options.cross,tool.name), **tool.kwargs ) + tool.run() + ## run delayed actions for action in Action.actions: action.run() @@ -1128,10 +1185,8 @@ try: ## add configure line for reconfigure purposes doc.addBlank() args = [] - for arg in sys.argv[1:]: - if arg == '--launch': - continue - args.append( arg ) + for arg in Option.conf_args: + args.append( arg[1] ) doc.add( 'CONF.args', ' '.join( args )) doc.addBlank() @@ -1183,14 +1238,19 @@ try: doc.add( 'BUILD.systemf', build.systemf ) doc.add( 'BUILD.release', build.release ) doc.add( 'BUILD.extra', build.extra ) - doc.add( 'BUILD.title', '%s %s' % (build.systemf,arch.mode.mode) ) + doc.add( 'BUILD.title', build.title ) doc.add( 'BUILD.ncpu', core.count ) doc.add( 'BUILD.jobs', core.jobs ) - doc.add( 'BUILD.cross', int(arch.mode.mode != arch.mode.default) ) - doc.add( 'BUILD.method', 'terminal' ) - doc.add( 'BUILD.date', time.strftime('%c') ) - doc.add( 'BUILD.arch', arch.mode.mode ) + doc.add( 'BUILD.cross', int(options.cross != None or arch.mode.mode != arch.mode.default) ) + if options.cross: + doc.add( 'BUILD.cross.prefix', '%s-' % (options.cross) ) + else: + doc.add( 'BUILD.cross.prefix', '' ) + + doc.add( 'BUILD.method', 'terminal' ) + doc.add( 'BUILD.date', time.strftime('%c') ) + doc.add( 'BUILD.arch', arch.mode.mode ) doc.addBlank() doc.add( 'CONF.method', options.conf_method ) @@ -1206,7 +1266,8 @@ try: doc.addBlank() doc.add( 'FEATURE.asm', 'disabled' ) doc.add( 'FEATURE.gtk', int( not options.disable_gtk )) - doc.add( 'FEATURE.xcode', int( not (Tools.xcodebuild.fail or options.disable_xcode) )) + doc.add( 'FEATURE.gtk.mingw', int( options.enable_gtk_mingw )) + doc.add( 'FEATURE.xcode', int( not (Tools.xcodebuild.fail or options.disable_xcode or options.cross) )) if not Tools.xcodebuild.fail and not options.disable_xcode: doc.addBlank()