Changeset 0ffee19 in rtems-source-builder


Ignore:
Timestamp:
06/15/14 05:40:34 (8 years ago)
Author:
Chris Johns <chrisj@…>
Branches:
4.10, 4.11, 4.9, 5, master
Children:
912596d
Parents:
339f92f
Message:

sb: Add support for building RTEMS 3rd party packages.

Remove the 'opt' from various macros and shell variables.

Add pkgconfig to the checks to make it clear the check is a
pkgconfig check.

Add NTP support as the first package to be built using the RSB.

Split the RTEMS URL's out from the base bset file into a separate
file that be included by other files.

Add an RTEMS BSP configuration file to help abstract the process
of building 3rd party packages.

Clean the cross and canadian cross support up so we can cleanly support
cross and canadian cross building.

Refactor the pkgconfig support and clean up the PC file handling of
loading modules.

Add support for %{?..} to return false if a macro is %{nil}.

Add %{pkgconfig ..} support to allow better control of access RTEMS
pkgconfig files.

Files:
5 added
19 edited

Legend:

Unmodified
Added
Removed
  • bare/config/devel/gettext-0.18.3.1-1.cfg

    r339f92f r0ffee19  
    1414# The GetText build instructions. We use 0.x.x Release 1.
    1515#
    16 %ifn %{check gettext}
     16%ifn %{pkgconfig check gettext}
    1717 %include %{_configdir}/gettext-0-1.cfg
    1818%endif
  • bare/config/devel/glib-2.39.3-1.cfg

    r339f92f r0ffee19  
    1616# The GLib build instructions. We use 2.x.x Release 1.
    1717#
    18 %ifn %{check glib-2.0}
     18%ifn %{pkgconfig check glib-2.0}
    1919 %include %{_configdir}/glib-2-1.cfg
    2020%endif
  • bare/config/devel/libffi-3.0.13-1.cfg

    r339f92f r0ffee19  
    2525# The LibFFI build instructions. We use 3.x.x Release 1.
    2626#
    27 %ifn %{check libffi >= 3}
     27%ifn %{pkgconfig check libffi >= 3}
    2828 %include %{_configdir}/libffi-3-1.cfg
    2929%endif
  • bare/config/devel/libiconv-1.14-1.cfg

    r339f92f r0ffee19  
    1515#
    1616%if %{_host_os} == win32
    17  %ifn %{check iconv >= %{libiconv_version}}
     17 %ifn %{pkgconfig check iconv >= %{libiconv_version}}
    1818  %include %{_configdir}/libiconv-1-1.cfg
    1919 %endif
  • bare/config/devel/pixman-0.32.4-1.cfg

    r339f92f r0ffee19  
    1414# The Pixman build instructions. We use 0.x.x Release 1.
    1515#
    16 %ifn %{check pixman-1}
     16%ifn %{pkgconfig check pixman-1}
    1717 %include %{_configdir}/pixman-0-1.cfg
    1818%endif
  • bare/config/devel/texane-stlink-1.cfg

    r339f92f r0ffee19  
    4646%endif
    4747  CPPFLAGS="-I $SB_TMPPREFIX/include/libusb-1.0" \
    48   CFLAGS="$SB_OPT_FLAGS" \
     48  CFLAGS="$SB_CFLAGS" \
    4949  LDFLAGS="-L $SB_TMPPREFIX/lib" \
    5050  ./configure \
  • rtems/config/rtems-base.bset

    r339f92f r0ffee19  
    1919
    2020#
    21 # The RTEMS http git URL.
     21# Pick up the RTEMS URLs.
    2222#
    23 %define rtems_http_git         http://git.rtems.org
    24 %define rtems_git_tools        %{rtems_http_git}/rtems-tools/plain/tools/%{rtems_version}
    25 %define rtems_binutils_patches %{rtems_git_tools}/binutils
    26 %define rtems_gcc_patches      %{rtems_git_tools}/gcc
    27 %define rtems_newlib_patches   %{rtems_git_tools}/newlib
    28 %define rtems_gdb_patches      %{rtems_git_tools}/gdb
     23%include rtems-urls.bset
  • source-builder/config/autoconf-2-1.cfg

    r339f92f r0ffee19  
    5555  export CFLAGS CFLAGS_FOR_BUILD CC
    5656
    57   CFLAGS="$SB_OPT_FLAGS" \
     57  CFLAGS="$SB_CFLAGS" \
    5858  ./configure \
    5959    --build=%{_build} --host=%{_host} \
  • source-builder/config/automake-1-1.cfg

    r339f92f r0ffee19  
    5555  export CFLAGS CFLAGS_FOR_BUILD CC
    5656
    57   CFLAGS="$SB_OPT_FLAGS" \
     57  CFLAGS="$SB_CFLAGS" \
    5858  ./configure \
    5959    --build=%{_build} --host=%{_host} \
  • source-builder/config/gdb-6-1.cfg

    r339f92f r0ffee19  
    3535  CFLAGS_FOR_BUILD="-g -O2 -Wall" \
    3636%endif
    37   CFLAGS="$SB_OPT_FLAGS" \
     37  CFLAGS="$SB_CFLAGS" \
    3838  ../gdb-%{gdb_version}/configure \
    3939    --build=%{_build} --host=%{_host} \
  • source-builder/config/gettext-0-1.cfg

    r339f92f r0ffee19  
    2525# Fix the mess iconv is on FreeBSD 10.0.
    2626#
    27 %if %{defined iconv_optincludes}
    28  %define optincludes %{iconv_optincludes}
     27%if %{defined iconv_includes}
     28 %define includes %{iconv_includes}
    2929%endif
    3030
  • source-builder/config/libtool-2-1.cfg

    r339f92f r0ffee19  
    5555  export CFLAGS CFLAGS_FOR_BUILD CC
    5656
    57   CFLAGS="$SB_OPT_FLAGS" \
     57  CFLAGS="$SB_CFLAGS" \
    5858  ./configure \
    5959    --build=%{_build} --host=%{_host} \
  • source-builder/config/libusb-1-1.cfg

    r339f92f r0ffee19  
    3737  CFLAGS_FOR_BUILD="-g -O2 -Wall" \
    3838%endif
    39   CFLAGS="$SB_OPT_FLAGS" \
     39  CFLAGS="$SB_CFLAGS" \
    4040  ./configure \
    4141    --build=%{_build} --host=%{_host} \
  • source-builder/config/m4-1-1.cfg

    r339f92f r0ffee19  
    3636  CFLAGS_FOR_BUILD="-g -O2 -Wall" \
    3737%endif
    38   CFLAGS="$SB_OPT_FLAGS" \
     38  CFLAGS="$SB_CxsFLAGS" \
    3939  ./configure \
    4040    --build=%{_build} --host=%{_host} \
  • source-builder/defaults.mc

    r339f92f r0ffee19  
    5757# flags and include paths to the tools. The host is the final platform
    5858# the tools will run on and build is the host building the tools.
    59 optflags_host:       none,    convert,  '-O2 -pipe'
    60 optincludes_host:    none,    convert,  ''
    61 optflags_build:      none,    convert,  '-O2 -pipe'
    62 optincludes_build:   none,    convert,  ''
     59host_cflags:         none,    convert,  '-O2 -pipe'
     60host_includes:       none,    convert,  ''
     61build_cflags:        none,    convert,  '-O2 -pipe'
     62build_includes:      none,    convert,  ''
    6363
    6464# Extra path a platform can override.
     
    6868# Paths
    6969_host_platform:      none,    none,     '%{_host_cpu}-%{_host_vendor}-%{_host_os}%{?_gnu}'
     70_host_cc:            none,    none,     'gcc'
     71_host_cxx:           none,    none,     'g++'
    7072_arch:               none,    none,     '%{_host_arch}'
    7173_topdir:             dir,     required, '%{_cwd}'
     
    103105_localedir:          dir,     none,     '%{_datadir}/locale'
    104106_localstatedir:      dir,     none,     '%{_prefix}/var'
     107_pathprepend:        none,    none,     ''
     108_pathpostpend:       none,    none,     ''
    105109_prefix:             dir,     none,     '%{_usr}'
    106110_usr:                dir,     none,     '/usr/local'
     
    185189SB_BUILD_DIR="%{_builddir}"
    186190# host == build, use build; host != build , host uses host and build uses build
    187 SB_OPT_HOST_CFLAGS="%{optflags_host} %{optincludes_host}"
    188 SB_OPT_HOST_LDFLAGS="%{?_tmproot:-L%{_tmproot}/${SB_PREFIX_CLEAN}/lib}"
    189 SB_OPT_BUILD_CFLAGS="%{optflags_build} %{?_tmproot:-I%{_tmproot}/${SB_PREFIX_CLEAN}/include}"
    190 SB_OPT_BUILD_LDFLAGS="%{?_tmproot:-L%{_tmproot}/${SB_PREFIX_CLEAN}/lib}"
    191 SB_OPT_CFLAGS="${SB_OPT_BUILD_CFLAGS} %{optincludes_build}"
     191SB_HOST_CFLAGS="%{host_cflags} %{host_includes}"
     192SB_HOST_LDFLAGS="%{?host_ldflags:%{host_ldflags}}%{?_tmproot:-L%{_tmproot}/${SB_PREFIX_CLEAN}/lib}"
     193SB_BUILD_CFLAGS="%{build_cflags} %{?_tmproot:-I%{_tmproot}/${SB_PREFIX_CLEAN}/include}"
     194SB_BUILD_LDFLAGS="%{?build_ldflags:%{build_ldflags}}%{?_tmproot:-L%{_tmproot}/${SB_PREFIX_CLEAN}/lib}"
     195SB_CFLAGS="${SB_BUILD_CFLAGS} %{build_includes}"
    192196SB_ARCH="%{_arch}"
    193197SB_OS="%{_os}"
    194198export SB_SOURCE_DIR SB_BUILD_DIR SB_ARCH SB_OS
    195 export SB_OPT_HOST_CFLAGS SB_OPT_HOST_LDFLAGS SB_OPT_BUILD_CFLAGS SB_OPT_BUILD_LDFLAGS SB_OPT_CFLAGS
     199export SB_HOST_CFLAGS SB_HOST_LDFLAGS SB_BUILD_CFLAGS SB_BUILD_LDFLAGS SB_CFLAGS
    196200# Documentation
    197201SB_DOC_DIR="%{_docdir}"
     
    238242 PATH="${SB_EXTRAPATH}:$PATH"
    239243fi
     244%{?_pathprepend:PATH="%{_pathprepend}:$PATH"}
     245%{?_pathpostpend:PATH="$PATH:%{_pathpostpend}"}
    240246export PATH
    241247# Default environment set up.
     
    254260# Configure command
    255261configure:           none,    none,     '''
    256 CFLAGS="${CFLAGS:-${SB_OPT_CFLAGS}" ; export CFLAGS ;
    257 CXXFLAGS="${CXXFLAGS:-${SB_OPT_CFLAGS}}" ; export CXXFLAGS ;
    258 FFLAGS="${FFLAGS:-${SB_OPT_CFLAGS}}" ; export FFLAGS ;
     262CFLAGS="${CFLAGS:-${SB_CFLAGS}" ; export CFLAGS ;
     263CXXFLAGS="${CXXFLAGS:-${SB_CFLAGS}}" ; export CXXFLAGS ;
     264FFLAGS="${FFLAGS:-${SB_CFLAGS}}" ; export FFLAGS ;
    259265./configure --build=%{_build} --host=%{_host} \
    260266      --target=%{_target_platform} \
     
    277283build_directory:     none,    none,     '''
    278284if test "%{_build}" != "%{_host}" ; then
    279   build_dir="build-cxc"
     285  if test -z "%{_target}" ; then
     286    build_dir="build-xc"
     287  else
     288    build_dir="build-cxc"
     289  fi
    280290else
    281291  build_dir="build"
     
    284294# Host/build flags.
    285295host_build_flags:    none,    none,     '''
    286 # Host and build flags, Cxc build if host and build are different.
     296# Host and build flags, Cross build if host and build are different and
     297# Cxc build idf target is deifned and also different.
    287298# Note, gcc is not ready to be compiled with -std=gnu99 (this needs to be checked).
    288299if test "%{_build}" != "%{_host}" ; then
    289   # Canadian cross build
    290   CC=$(echo "%{_host}-gcc ${SB_OPT_HOST_CFLAGS} ${SB_OPT_HOST_LDFLAGS}" | sed -e 's,-std=gnu99 ,,')
    291   CXX=$(echo "%{_host}-g++ ${SB_OPT_HOST_CFLAGS} ${SB_OPT_HOST_LDFLAGS}" | sed -e 's,-std=gnu99 ,,')
    292   CFLAGS="${SB_OPT_HOST_CFLAGS}"
    293   LDFLAGS="${SB_OPT_HOST_LDFLAGS}"
    294   CFLAGS_FOR_BUILD="${SB_OPT_BUILD_CFLAGS}"
    295   LDFLAGS_FOR_BUILD="${SB_OPT_BUILD_LDFLAGS}"
    296   CXXFLAGS_FOR_BUILD="${SB_OPT_BUILD_CFLAGS}"
    297   CC_FOR_BUILD=$(echo "%{__cc} ${SB_OPT_BUILD_CFLAGS}" | sed -e 's,-std=gnu99 ,,')
    298   CXX_FOR_BUILD=$(echo "%{__cxx} ${SB_OPT_BUILD_CFLAGS}" | sed -e 's,-std=gnu99 ,,')
     300  # Cross build
     301  CC=$(echo "%{_host}-%{_host_cc}" | sed -e 's,-std=gnu99 ,,')
     302  CXX=$(echo "%{_host}-%{_host_cxx}" | sed -e 's,-std=gnu99 ,,')
     303  CFLAGS="${SB_HOST_CFLAGS}"
     304  LDFLAGS="${SB_HOST_LDFLAGS}"
     305  CFLAGS_FOR_BUILD="${SB_BUILD_CFLAGS}"
     306  LDFLAGS_FOR_BUILD="${SB_BUILD_LDFLAGS}"
     307  CXXFLAGS_FOR_BUILD="${SB_BUILD_CFLAGS}"
     308  CC_FOR_BUILD=$(echo "%{__cc} ${SB_BUILD_CFLAGS}" | sed -e 's,-std=gnu99 ,,')
     309  CXX_FOR_BUILD=$(echo "%{__cxx} ${SB_BUILD_CFLAGS}" | sed -e 's,-std=gnu99 ,,')
    299310else
    300    LDFLAGS="${SB_OPT_BUILD_LDFLAGS}"
    301   CC=$(echo "%{__cc} ${SB_OPT_BUILD_CFLAGS}" | sed -e 's,-std=gnu99 ,,')
    302   CXX=$(echo "%{__cxx} ${SB_OPT_BUILD_CFLAGS}" | sed -e 's,-std=gnu99 ,,')
     311  LDFLAGS="${SB_BUILD_LDFLAGS}"
     312  CC=$(echo "%{__cc} ${SB_BUILD_CFLAGS}" | sed -e 's,-std=gnu99 ,,')
     313  CXX=$(echo "%{__cxx} ${SB_BUILD_CFLAGS}" | sed -e 's,-std=gnu99 ,,')
    303314  CC_FOR_BUILD=${CC}
    304315  CXX_FOR_BUILD=${CXX}
     
    310321# Build and build flags means force build == host
    311322# gcc is not ready to be compiled with -std=gnu99
    312 LDFLAGS="${SB_OPT_HOST_LDFLAGS}"
    313 CC=$(echo "%{__cc} ${SB_OPT_CFLAGS}" | sed -e 's,-std=gnu99 ,,')
    314 CXX=$(echo "%{__cxx} ${SB_OPT_CFLAGS}" | sed -e 's,-std=gnu99 ,,')
     323LDFLAGS="${SB_HOST_LDFLAGS}"
     324CC=$(echo "%{__cc} ${SB_CFLAGS}" | sed -e 's,-std=gnu99 ,,')
     325CXX=$(echo "%{__cxx} ${SB_CFLAGS}" | sed -e 's,-std=gnu99 ,,')
    315326CC_FOR_BUILD=${CC}
    316327CXX_FOR_BUILD=${CXX}
  • source-builder/pkg-config

    r339f92f r0ffee19  
    5959logfile = 'pkg-config.log'
    6060out = None
     61srcfd = None
    6162
    6263#
     
    6566trace_src = True
    6667if trace_src:
    67     src = open('pkg-src.txt', 'w')
     68    srcfd = open('pkg-src.txt', 'w')
     69
     70def src(text):
     71    if srcfd:
     72        srcfs.writelines(text)
    6873
    6974def log(s, lf = True):
     
    8489            print >> out, s,
    8590
    86 def _check_package(libraries, args):
    87     ec = 1
    88     pkg = None
    89     flags = { 'cflags': '',
    90               'libs': '' }
    91     log('libraries: %s' % (libraries))
    92     libs = pkgconfig.package.splitter(libraries)
    93     for lib in libs:
    94         log('pkg: %s' % (lib))
    95         pkg = pkgconfig.package(lib[0], prefix = args.prefix, output = log, src = src)
    96         if args.dump:
    97             log(pkg)
    98         if pkg.exists():
    99             if len(lib) == 1:
    100                 if args.exact_version:
    101                     if pkg.check('=', args.exact_version):
    102                         ec = 0
    103                 elif args.atleast_version:
    104                     if pkg.check('>=', args.atleast_version):
    105                         ec = 0
    106                 elif args.max_version:
    107                     if pkg.check('<=', args.max_version):
    108                         ec = 0
    109                 else:
    110                     ec = 0
    111             else:
    112                 if len(lib) != 3:
    113                     raise error('invalid package check: %s' % (' '.join(lib)))
    114                 if pkg.check(lib[1], lib[2]):
    115                     ec = 0
    116             if ec == 0:
    117                 cflags = pkg.get('cflags')
    118                 if cflags:
    119                     flags['cflags'] += cflags
    120                 libs = pkg.get('libs', private = False)
    121                 if libs:
    122                     flags['libs'] += libs
    123                 break
    124         if ec > 0:
    125             break
    126     return ec, pkg, flags
    127 
    12891def run(argv):
    12992
     
    225188        ec = 0
    226189    else:
    227         ec, pkg, flags = _check_package(args.libraries, args)
     190        ec, pkg, flags = pkgconfig.check_package(args.libraries, args, log, src)
    228191        if ec == 0:
    229192            if args.cflags:
  • source-builder/sb/config.py

    r339f92f r0ffee19  
    5656    return istrue
    5757
     58def _check_nil(value):
     59    if len(value):
     60        istrue = True
     61    else:
     62        istrue = False
     63    return istrue
     64
    5865class package:
    5966
     
    243250        for arg in self.opts.args:
    244251            if arg.startswith('--with-') or arg.startswith('--without-'):
    245                 label = arg[2:].lower().replace('-', '_')
    246                 self.macros.define(label)
     252                if '=' in arg:
     253                    label, value = arg.split('=', 1)
     254                else:
     255                    label = arg
     256                    value = None
     257                label = label[2:].lower().replace('-', '_')
     258                if value:
     259                    self.macros.define(label, value)
     260                else:
     261                    self.macros.define(label)
    247262        self._includes = []
    248263        self.load_depth = 0
     264        self.pkgconfig_prefix = None
     265        self.pkgconfig_crosscompile = False
     266        self.pkgconfig_filter_flags = False
    249267        self.load(name)
    250268
     
    384402    def _pkgconfig_check(self, test):
    385403        ok = False
    386         if not self._cross_compile():
    387             ts = test.split()
    388             pkg = pkgconfig.package(ts[0], output = log.output)
    389             if len(ts) != 1 and len(ts) != 3:
    390                 self._error('malformed check')
    391             else:
    392                 op = '>='
    393                 ver = '0'
    394                 if len(ts) == 3:
    395                     op = ts[1]
    396                     ver = self.macros.expand(ts[2])
    397                 try:
     404        if type(test) == str:
     405            test = test.split()
     406        if not self._cross_compile() or self.pkgconfig_crosscompile:
     407            try:
     408                pkg = pkgconfig.package(test[0],
     409                                        prefix = self.pkgconfig_prefix,
     410                                        output = self._output,
     411                                        src = log.trace)
     412                if len(test) != 1 and len(test) != 3:
     413                    self._error('malformed check: %s' % (' '.join(test)))
     414                else:
     415                    op = '>='
     416                    ver = '0'
     417                    if len(test) == 3:
     418                        op = test[1]
     419                        ver = self.macros.expand(test[2])
    398420                    ok = pkg.check(op, ver)
    399                 except pkgconfig.error, pe:
    400                     self._error('check: %s' % (pe))
    401                 except:
    402                     raise error.interal('pkgconfig failure')
    403         return ok
     421            except pkgconfig.error, pe:
     422                self._error('pkgconfig: check: %s' % (pe))
     423            except:
     424                raise error.internal('pkgconfig failure')
     425        if ok:
     426            return '1'
     427        return '0'
    404428
    405429    def _pkgconfig_flags(self, package, flags):
    406430        pkg_flags = None
    407         if not self._cross_compile():
    408             pkg = pkgconfig.package(package, output = log.output)
     431        if not self._cross_compile() or self.pkgconfig_crosscompile:
    409432            try:
     433                pkg = pkgconfig.package(package,
     434                                        prefix = self.pkgconfig_prefix,
     435                                        output = self._output,
     436                                        src = log.trace)
    410437                pkg_flags = pkg.get(flags)
     438                if pkg_flags and self.pkgconfig_filter_flags:
     439                    fflags = []
     440                    for f in pkg_flags.split():
     441                        if not f.startswith('-f') and not f.startswith('-W'):
     442                            fflags += [f]
     443                    pkg_flags = ' '.join(fflags)
     444                log.trace('pkgconfig: %s: %s' % (flags, pkg_flags))
    411445            except pkgconfig.error, pe:
    412                 self._error('flags:%s: %s' % (flags, pe))
     446                self._error('pkgconfig: %s: %s' % (flags, pe))
    413447            except:
    414                 raise error.interal('pkgconfig failure')
     448                raise error.internal('pkgconfig failure')
     449        if pkg_flags is None:
     450            pkg_flags = ''
    415451        return pkg_flags
     452
     453    def _pkgconfig(self, pcl):
     454        ok = False
     455        ps = ''
     456        if pcl[0] == 'check':
     457            ps = self._pkgconfig_check(pcl[1:])
     458        elif pcl[0] == 'prefix':
     459            if len(pcl) == 2:
     460                self.pkgconfig_prefix = pcl[1]
     461            else:
     462                self._error('prefix error: %s' % (' '.join(pcl)))
     463        elif pcl[0] == 'crosscompile':
     464            ok = True
     465            if len(pcl) == 2:
     466                if pcl[1].lower() == 'yes':
     467                    self.pkgconfig_crosscompile = True
     468                elif pcl[1].lower() == 'no':
     469                    self.pkgconfig_crosscompile = False
     470                else:
     471                    ok = False
     472            else:
     473                ok = False
     474            if not ok:
     475                self._error('crosscompile error: %s' % (' '.join(pcl)))
     476        elif pcl[0] == 'filter-flags':
     477            ok = True
     478            if len(pcl) == 2:
     479                if pcl[1].lower() == 'yes':
     480                    self.pkgconfig_filter_flags = True
     481                elif pcl[1].lower() == 'no':
     482                    self.pkgconfig_filter_flags = False
     483                else:
     484                    ok = False
     485            else:
     486                ok = False
     487            if not ok:
     488                self._error('crosscompile error: %s' % (' '.join(pcl)))
     489        elif pcl[0] in ['ccflags', 'cflags', 'ldflags', 'libs']:
     490            ps = self._pkgconfig_flags(pcl[1], pcl[0])
     491        else:
     492            self._error('pkgconfig error: %s' % (' '.join(pcl)))
     493        return ps
    416494
    417495    def _expand(self, s):
     
    465543                    else:
    466544                        e = self._expand(m[6:-1].strip())
    467                         log.output('%s' % (self._name_line_msg(e)))
     545                        log.notice('%s' % (self._name_line_msg(e)))
    468546                        s = ''
    469547                        expanded = True
     
    477555                    expanded = True
    478556                    mn = None
    479                 elif m.startswith('%{check'):
    480                     if self._pkgconfig_check(m[7:-1].strip()):
    481                         s = s.replace(m, '1')
    482                     else:
    483                         s = s.replace(m, '0')
    484                     expanded = True
     557                elif m.startswith('%{path '):
     558                    pl = m[7:-1].strip().split()
     559                    ok = False
     560                    if len(pl) == 2:
     561                        ok = True
     562                        epl = []
     563                        for p in pl[1:]:
     564                            epl += [self._expand(p)]
     565                        p = ' '.join(epl)
     566                        if pl[0].lower() == 'prepend':
     567                            if len(self.macros['_pathprepend']):
     568                                self.macros['_pathprepend'] = \
     569                                    '%s:%s' % (p, self.macros['_pathprepend'])
     570                            else:
     571                                self.macros['_pathprepend'] = p
     572                        elif pl[0].lower() == 'postpend':
     573                            if len(self.macros['_pathprepend']):
     574                                self.macros['_pathprepend'] = \
     575                                    '%s:%s' % (self.macros['_pathprepend'], p)
     576                            else:
     577                                self.macros['_pathprepend'] = p
     578                        else:
     579                            ok = False
     580                    if ok:
     581                        s = s.replace(m, '')
     582                    else:
     583                        self._error('path error: %s' % (' '.join(pl)))
    485584                    mn = None
    486                 elif m.startswith('%{ccflags'):
    487                     flags = self._pkgconfig_flags(m[9:-1].strip(), 'ccflags')
    488                     if flags:
    489                         s = s.replace(m, flags)
    490                     else:
    491                         self._error('ccflags error: %s' % (m[9:-1].strip()))
    492                     expanded = True
    493                     mn = None
    494                 elif m.startswith('%{cflags'):
    495                     flags = self._pkgconfig_flags(m[8:-1].strip(), 'cflags')
    496                     if flags:
    497                         s = s.replace(m, flags)
    498                     else:
    499                         self._error('cflags error: %s' % (m[8:-1].strip()))
    500                     expanded = True
    501                     mn = None
    502                 elif m.startswith('%{ldflags'):
    503                     flags = self._pkgconfig_flags(m[9:-1].strip(), 'ldflags')
    504                     if flags:
    505                         s = s.replace(m, flags)
    506                     else:
    507                         self._error('ldflags error: %s' % (m[9:-1].strip()))
    508                     expanded = True
    509                     mn = None
    510                 elif m.startswith('%{libs'):
    511                     flags = self._pkgconfig_flags(m[6:-1].strip(), 'libs')
    512                     if flags:
    513                         s = s.replace(m, flags)
    514                     else:
    515                         self._error('libs error: %s' % (m[6:-1].strip()))
    516                     expanded = True
     585                elif m.startswith('%{pkgconfig '):
     586                    pcl = m[11:-1].strip().split()
     587                    if len(pcl):
     588                        epcl = []
     589                        for pc in pcl:
     590                            epcl += [self._expand(pc)]
     591                        ps = self._pkgconfig(epcl)
     592                        s = s.replace(m, ps)
     593                        expanded = True
     594                    else:
     595                        self._error('pkgconfig error: %s' % (m[11:-1].strip()))
    517596                    mn = None
    518597                elif m.startswith('%{?') or m.startswith('%{!?'):
     
    534613                            istrue = False
    535614                            if mn in self.macros:
    536                                 # If defined and 0 then it is false.
     615                                # If defined and 0 or '' then it is false.
    537616                                istrue = _check_bool(self.macros[mn])
    538617                                if istrue is None:
    539                                     istrue = True
     618                                    istrue = _check_nil(self.macros[mn])
    540619                            if colon >= 0 and istrue:
    541620                                s = s.replace(m, m[start + colon + 1:-1])
  • source-builder/sb/freebsd.py

    r339f92f r0ffee19  
    9797            if check.check_exe(cxx, cxx):
    9898                raise error.general('no valid c++ not found')
    99             defines['optflags_build'] = '-O2 -pipe -fbracket-depth=1024'
     99            defines['build_cflags'] = '-O2 -pipe -fbracket-depth=1024'
    100100        cvs = 'cvs'
    101101        if check.check_exe(cvs, cvs):
     
    104104        # Fix the mess iconv is on FreeBSD 10.0.
    105105        #
    106         defines['iconv_optincludes'] = ('none', 'none', '-I/usr/local/include -L/usr/local/lib')
     106        defines['iconv_includes'] = ('none', 'none', '-I/usr/local/include -L/usr/local/lib')
    107107
    108108    for gv in ['47', '48', '49']:
  • source-builder/sb/pkgconfig.py

    r339f92f r0ffee19  
    3535#
    3636
     37import copy
    3738import os
    3839import os.path
     
    7273    lib_list_splitter = re.compile('[\s,]+')
    7374    loaded = {}
     75
     76    @staticmethod
     77    def _copy(src, dst):
     78        dst.name_ = src.name_
     79        dst.file_ = src.file_
     80        dst.defines = copy.copy(src.defines)
     81        dst.fields = copy.copy(src.fields)
     82        dst.nodes = copy.copy(src.nodes)
    7483
    7584    @staticmethod
     
    385394    def load(self, name):
    386395        if name in package.loaded:
    387             raise error('package already loaded: %s' % (name))
     396            package._copy(package.loaded[name], self)
     397            return
     398        self._log('loading: %s' % (name))
    388399        if self.name_:
    389400            self._clean()
     
    393404            self._log('load: %s (%s)' % (name, file))
    394405            if self.src:
    395                 self.src.writelines('==%s%s' % ('=' * 80, os.linesep))
    396                 self.src.writelines(' %s %s%s' % (file, '=' * (80 - len(file)), os.linesep))
    397                 self.src.writelines('==%s%s' % ('=' * 80, os.linesep))
     406                self.src('==%s%s' % ('=' * 80, os.linesep))
     407                self.src(' %s %s%s' % (file, '=' * (80 - len(file)), os.linesep))
     408                self.src('==%s%s' % ('=' * 80, os.linesep))
    398409            f = open(file)
    399410            tm = False
    400411            for l in f.readlines():
    401412                if self.src:
    402                     self.src.writelines(l)
     413                    self.src(l)
    403414                l = l[:-1]
    404415                hash = l.find('#')
     
    456467
    457468    def get(self, label, private = True):
     469        self._log('get: %s (%s)' % (label, ','.join(self.fields)))
    458470        if label.lower() not in self.fields:
    459471            return None
     
    505517                self._log('check: %s not found' % (self.name_))
    506518        return ok
     519
     520def check_package(libraries, args, output, src):
     521    ec = 1
     522    pkg = None
     523    flags = { 'cflags': '',
     524              'libs': '' }
     525    output('libraries: %s' % (libraries))
     526    libs = package.splitter(libraries)
     527    for lib in libs:
     528        output('pkg: %s' % (lib))
     529        pkg = package(lib[0], prefix = args.prefix, output = output, src = src)
     530        if args.dump:
     531            output(pkg)
     532        if pkg.exists():
     533            if len(lib) == 1:
     534                if args.exact_version:
     535                    if pkg.check('=', args.exact_version):
     536                        ec = 0
     537                elif args.atleast_version:
     538                    if pkg.check('>=', args.atleast_version):
     539                        ec = 0
     540                elif args.max_version:
     541                    if pkg.check('<=', args.max_version):
     542                        ec = 0
     543                else:
     544                    ec = 0
     545            else:
     546                if len(lib) != 3:
     547                    raise error('invalid package check: %s' % (' '.join(lib)))
     548                if pkg.check(lib[1], lib[2]):
     549                    ec = 0
     550            if ec == 0:
     551                cflags = pkg.get('cflags')
     552                if cflags:
     553                    flags['cflags'] += cflags
     554                libs = pkg.get('libs', private = False)
     555                if libs:
     556                    flags['libs'] += libs
     557                break
     558        if ec > 0:
     559            break
     560    return ec, pkg, flags
     561
Note: See TracChangeset for help on using the changeset viewer.