gcc.py :  » Build » Waf » waf-1.5.17 » wafadmin » Tools » Python Open Source

Home
Python Open Source
1.3.1.2 Python
2.Ajax
3.Aspect Oriented
4.Blog
5.Build
6.Business Application
7.Chart Report
8.Content Management Systems
9.Cryptographic
10.Database
11.Development
12.Editor
13.Email
14.ERP
15.Game 2D 3D
16.GIS
17.GUI
18.IDE
19.Installer
20.IRC
21.Issue Tracker
22.Language Interface
23.Log
24.Math
25.Media Sound Audio
26.Mobile
27.Network
28.Parser
29.PDF
30.Project Management
31.RSS
32.Search
33.Security
34.Template Engines
35.Test
36.UML
37.USB Serial
38.Web Frameworks
39.Web Server
40.Web Services
41.Web Unit
42.Wiki
43.Windows
44.XML
Python Open Source » Build » Waf 
Waf » waf 1.5.17 » wafadmin » Tools » gcc.py
#!/usr/bin/env python
# encoding: utf-8
# Thomas Nagy, 2006-2008 (ita)
# Ralf Habacker, 2006 (rh)
# Yinon Ehrlich, 2009

import os, sys
import Configure, Options, Utils
import ccroot, ar
from Configure import conftest

@conftest
def find_gcc(conf):
  cc = conf.find_program(['gcc', 'cc'], var='CC', mandatory=True)
  cc = conf.cmd_to_list(cc)
  ccroot.get_cc_version(conf, cc, gcc=True)
  conf.env.CC_NAME = 'gcc'
  conf.env.CC      = cc

@conftest
def gcc_common_flags(conf):
  v = conf.env

  # CPPFLAGS CCDEFINES _CCINCFLAGS _CCDEFFLAGS

  v['CCFLAGS_DEBUG'] = ['-g']

  v['CCFLAGS_RELEASE'] = ['-O2']

  v['CC_SRC_F']            = ''
  v['CC_TGT_F']            = ['-c', '-o', ''] # shell hack for -MD
  v['CPPPATH_ST']          = '-I%s' # template for adding include paths

  # linker
  if not v['LINK_CC']: v['LINK_CC'] = v['CC']
  v['CCLNK_SRC_F']         = ''
  v['CCLNK_TGT_F']         = ['-o', ''] # shell hack for -MD

  v['LIB_ST']              = '-l%s' # template for adding libs
  v['LIBPATH_ST']          = '-L%s' # template for adding libpaths
  v['STATICLIB_ST']        = '-l%s'
  v['STATICLIBPATH_ST']    = '-L%s'
  v['RPATH_ST']            = '-Wl,-rpath,%s'
  v['CCDEFINES_ST']        = '-D%s'

  v['SONAME_ST']           = '-Wl,-h,%s'
  v['SHLIB_MARKER']        = '-Wl,-Bdynamic'
  v['STATICLIB_MARKER']    = '-Wl,-Bstatic'
  v['FULLSTATIC_MARKER']   = '-static'

  # program
  v['program_PATTERN']     = '%s'

  # shared library
  v['shlib_CCFLAGS']       = ['-fPIC', '-DPIC'] # avoid using -DPIC, -fPIC aleady defines the __PIC__ macro
  v['shlib_LINKFLAGS']     = ['-shared']
  v['shlib_PATTERN']       = 'lib%s.so'

  # static lib
  v['staticlib_LINKFLAGS'] = ['-Wl,-Bstatic']
  v['staticlib_PATTERN']   = 'lib%s.a'

  # osx stuff
  v['LINKFLAGS_MACBUNDLE'] = ['-bundle', '-undefined', 'dynamic_lookup']
  v['CCFLAGS_MACBUNDLE']   = ['-fPIC']
  v['macbundle_PATTERN']   = '%s.bundle'

@conftest
def gcc_modifier_win32(conf):
  v = conf.env
  v['program_PATTERN']     = '%s.exe'

  v['shlib_PATTERN']       = '%s.dll'
  v['implib_PATTERN']      = 'lib%s.dll.a'
  v['IMPLIB_ST']           = '-Wl,--out-implib,%s'

  dest_arch = v['DEST_CPU']
  v['shlib_CCFLAGS'] = ['-DPIC']

  v.append_value('shlib_CCFLAGS', '-DDLL_EXPORT') # TODO adding nonstandard defines like this DLL_EXPORT is not a good idea

  # Auto-import is enabled by default even without this option,
  # but enabling it explicitly has the nice effect of suppressing the rather boring, debug-level messages
  # that the linker emits otherwise.
  v.append_value('LINKFLAGS', '-Wl,--enable-auto-import')

@conftest
def gcc_modifier_cygwin(conf):
  gcc_modifier_win32(conf)
  v = conf.env
  v['shlib_PATTERN']       = 'cyg%s.dll'
  v.append_value('shlib_LINKFLAGS', '-Wl,--enable-auto-image-base')

@conftest
def gcc_modifier_darwin(conf):
  v = conf.env
  v['shlib_CCFLAGS']       = ['-fPIC', '-compatibility_version', '1', '-current_version', '1']
  v['shlib_LINKFLAGS']     = ['-dynamiclib']
  v['shlib_PATTERN']       = 'lib%s.dylib'

  v['staticlib_LINKFLAGS'] = []

  v['SHLIB_MARKER']        = ''
  v['STATICLIB_MARKER']    = ''
  v['SONAME_ST']           = ''

@conftest
def gcc_modifier_aix(conf):
  v = conf.env
  v['program_LINKFLAGS']   = ['-Wl,-brtl']

  v['shlib_LINKFLAGS']     = ['-shared','-Wl,-brtl,-bexpfull']

  v['SHLIB_MARKER']        = ''

@conftest
def gcc_modifier_platform(conf):
  # * set configurations specific for a platform.
  # * the destination platform is detected automatically by looking at the macros the compiler predefines,
  #   and if it's not recognised, it fallbacks to sys.platform.
  dest_os = conf.env['DEST_OS'] or Utils.unversioned_sys_platform()
  gcc_modifier_func = globals().get('gcc_modifier_' + dest_os)
  if gcc_modifier_func:
      gcc_modifier_func(conf)

def detect(conf):
  conf.find_gcc()
  conf.find_cpp()
  conf.find_ar()
  conf.gcc_common_flags()
  conf.gcc_modifier_platform()
  conf.cc_load_tools()
  conf.cc_add_flags()
  conf.link_add_flags()

www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.