[PATCH v2 1/4] waf_generator: Copy headers if necessary.

Sichen Zhao zsc19940506 at outlook.com
Sat Aug 12 03:30:18 UTC 2017


> On 11/8/17 8:39 pm, Sichen Zhao wrote:
>> From: Christian Mauderer <christian.mauderer at embedded-brains.de>
>>
>> There are some cases, where a header is installed into a directory with
>> a different name then it's source directory. In that case, the build
>> might fail because the header is not found. One example would be the
>> <openssl/opensslv.h>. The source for this file is in
>> freebsd/crypto/openssl/crypto/opensslv.h.
>>
>> To allow the build to work in such cases too, copy such files into a
>> temporary location in the build tree.
>> ---
>>   builder.py       | 14 ++++++++++++++
>>   libbsd_waf.py    | 15 +++++++++++++++
>>   waf_generator.py | 24 +++++++++++++++++++++++-
>>   3 files changed, 52 insertions(+), 1 deletion(-)
>>
>> diff --git a/builder.py b/builder.py
>> index bb633cb..1be1ced 100755
>> --- a/builder.py
>> +++ b/builder.py
>> @@ -194,6 +194,10 @@ def includes():
>>               '-ImDNSResponder/mDNSPosix',
>>               '-Itestsuite/include']
>>   
>> +def buildInclude():
>> +    """ Returns the path where headers will be copied during build. """
>> +    return 'build-include'
>> +
>>   def cpuIncludes():
>>       return ['-Irtemsbsd/@CPU@/include',
>>               '-Ifreebsd/sys/@CPU@/include']
>> @@ -205,6 +209,16 @@ def cxxflags():
>>       return []
>>   
>>   def headerPaths():
>> +    """ Returns a list of information about what header files should be
>> +    installed.
>> +
>> +    The list is also used to find headers with a local path that doesn't match
>> +    it's dest path. Due to the difference in the path name such files are
>> +    problematic during the build if they are included using their later
>> +    installation path (dest path) name. Therefore they are copied into a
>> +    sub-directory of the build path so that they can be included with their
>> +    normal installation path. """
>> +
>>       #         local path                      wildcard             dest path
>>       return [('rtemsbsd/include',              '*.h',               ''),
>>               ('rtemsbsd/mghttpd',              'mongoose.h',        'mghttpd'),
>> diff --git a/libbsd_waf.py b/libbsd_waf.py
>> index aee2e7a..8bc2b34 100644
>> --- a/libbsd_waf.py
>> +++ b/libbsd_waf.py
>> @@ -83,6 +83,7 @@ def build(bld):
>>       includes += ["mDNSResponder/mDNSShared"]
>>       includes += ["mDNSResponder/mDNSPosix"]
>>       includes += ["testsuite/include"]
>> +    includes += ["build-include"]
>>   
>>       # Collect the libbsd uses
>>       libbsd_use = []
>> @@ -123,6 +124,20 @@ def build(bld):
>>           rule = "sed -e 's/@NET_CFG_SELF_IP@/%s/' -e 's/@NET_CFG_NETMASK@/%s/' -e 's/@NET_CFG_PEER_IP@/%s/' -e 's/@NET_CFG_GATEWAY_IP@/%s/' < ${SRC} > ${TGT}" % (net_cfg_self_ip, net_cfg_netmask, net_cfg_peer_ip, net_cfg_gateway_ip),
>>           update_outputs = True)
>>   
>> +    # copy headers if necessary
>> +    header_build_copy_paths = [
>> +                              ]
>> +    for headers in header_build_copy_paths:
>> +        target = os.path.join("build-include", headers[2])
>> +        start_dir = bld.path.find_dir(headers[0])
>> +        for header in start_dir.ant_glob(os.path.join("**/", headers[1])):
> Remove the '/':
>
>         for header in start_dir.ant_glob(os.path.join("**", headers[1])):
>
> OK to push once fixed.
>
> Chris
This already done in the PATCH v2 2/4.
-        self.add('        for header in 
start_dir.ant_glob(os.path.join("**/", headers[1])):')
+        self.add('        for header in start_dir.ant_glob(headers[1]):')
>
>> +            relsourcepath = header.path_from(start_dir)
>> +            targetheader = os.path.join(target, relsourcepath)
>> +            bld(features = 'subst',
>> +                target = targetheader,
>> +                source = header,
>> +                is_copy = True)
>> +
>>       # KVM Symbols
>>       bld(target = "rtemsbsd/rtems/rtems-kernel-kvm-symbols.c",
>>           source = "rtemsbsd/rtems/generate_kvm_symbols",
>> diff --git a/waf_generator.py b/waf_generator.py
>> index 35fe35f..fdc2210 100755
>> --- a/waf_generator.py
>> +++ b/waf_generator.py
>> @@ -392,7 +392,7 @@ class ModuleManager(builder.ModuleManager):
>>           self.add('    if bld.get_env()["RTEMS_ARCH"] == "i386":')
>>           self.add('        for i in %r:' % (builder.cpuIncludes()))
>>           self.add('            includes += ["%s" % (i[2:].replace("@CPU@", "x86"))]')
>> -        for i in builder.includes():
>> +        for i in builder.includes() + ['-I' + builder.buildInclude()]:
>>               self.add('    includes += ["%s"]' % (i[2:]))
>>           self.add('')
>>           self.add('    # Collect the libbsd uses')
>> @@ -445,6 +445,28 @@ class ModuleManager(builder.ModuleManager):
>>           self.add('')
>>   
>>           #
>> +        # Add a copy rule for all headers where the install path and the source
>> +        # path are not the same.
>> +        #
>> +        self.add('    # copy headers if necessary')
>> +        self.add('    header_build_copy_paths = [')
>> +        for hp in builder.headerPaths():
>> +            if hp[2] != '' and not hp[0].endswith(hp[2]):
>> +                self.add('                               %s,' % (str(hp)))
>> +        self.add('                              ]')
>> +        self.add('    for headers in header_build_copy_paths:')
>> +        self.add('        target = os.path.join("%s", headers[2])' % (builder.buildInclude()))
>> +        self.add('        start_dir = bld.path.find_dir(headers[0])')
>> +        self.add('        for header in start_dir.ant_glob(os.path.join("**/", headers[1])):')
>> +        self.add('            relsourcepath = header.path_from(start_dir)')
>> +        self.add('            targetheader = os.path.join(target, relsourcepath)')
>> +        self.add('            bld(features = \'subst\',')
>> +        self.add('                target = targetheader,')
>> +        self.add('                source = header,')
>> +        self.add('                is_copy = True)')
>> +        self.add('')
>> +
>> +        #
>>           # Add the specific rule based builders for generating files.
>>           #
>>           if 'KVMSymbols' in data:
>>
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel



More information about the devel mailing list