> On 11/8/17 8:39 pm, Sichen Zhao wrote: >> From: Christian Mauderer <christian.maude...@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@rtems.org > http://lists.rtems.org/mailman/listinfo/devel
_______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel