You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by an...@apache.org on 2022/09/14 13:47:12 UTC

[mynewt-newt] branch master updated: syscfg: Write defs for packages included in build

This is an automated email from the ASF dual-hosted git repository.

andk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-newt.git


The following commit(s) were added to refs/heads/master by this push:
     new cf3f099  syscfg: Write defs for packages included in build
cf3f099 is described below

commit cf3f09920ad0a36ca9ad1ea614a847e23d139392
Author: Andrzej Kaczmarek <an...@codecoup.pl>
AuthorDate: Fri Sep 2 13:36:56 2022 +0200

    syscfg: Write defs for packages included in build
    
    This adds symbols in syscfg.h for each package included in build. The
    symbol name has "MYNEWT_PKG_" prefix followed with sanitized package's
    full name, i.e. repo designator has "@" stripped and is separated with
    "__" from package name, then all illegal characters in resulting name
    are replaced with "_".
---
 newt/builder/targetbuild.go |  9 +++++----
 newt/syscfg/syscfg.go       | 32 +++++++++++++++++++++++++++++---
 2 files changed, 34 insertions(+), 7 deletions(-)

diff --git a/newt/builder/targetbuild.go b/newt/builder/targetbuild.go
index 532db09..41057d0 100644
--- a/newt/builder/targetbuild.go
+++ b/newt/builder/targetbuild.go
@@ -282,7 +282,8 @@ func (t *TargetBuilder) validateAndWriteCfg() error {
 	incDir := GeneratedIncludeDir(t.target.FullName())
 	srcDir := GeneratedSrcDir(t.target.FullName())
 
-	if err := syscfg.EnsureWritten(t.res.Cfg, incDir); err != nil {
+	lpkgs := resolve.RpkgSliceToLpkgSlice(t.res.MasterSet.Rpkgs)
+	if err := syscfg.EnsureWritten(t.res.Cfg, incDir, lpkgs); err != nil {
 		return err
 	}
 
@@ -292,7 +293,7 @@ func (t *TargetBuilder) validateAndWriteCfg() error {
 
 	// Generate loader sysinit.
 	if t.res.LoaderSet != nil {
-		lpkgs := resolve.RpkgSliceToLpkgSlice(t.res.LoaderSet.Rpkgs)
+		lpkgs = resolve.RpkgSliceToLpkgSlice(t.res.LoaderSet.Rpkgs)
 		if err := t.res.SysinitCfg.EnsureWritten(lpkgs, srcDir,
 			pkg.ShortName(t.target.Package()), true); err != nil {
 
@@ -301,7 +302,7 @@ func (t *TargetBuilder) validateAndWriteCfg() error {
 	}
 
 	// Generate app sysinit.
-	lpkgs := resolve.RpkgSliceToLpkgSlice(t.res.AppSet.Rpkgs)
+	lpkgs = resolve.RpkgSliceToLpkgSlice(t.res.AppSet.Rpkgs)
 	if err := t.res.SysinitCfg.EnsureWritten(lpkgs, srcDir,
 		pkg.ShortName(t.target.Package()), false); err != nil {
 
@@ -310,7 +311,7 @@ func (t *TargetBuilder) validateAndWriteCfg() error {
 
 	// Generate loader sysinit.
 	if t.res.LoaderSet != nil {
-		lpkgs := resolve.RpkgSliceToLpkgSlice(t.res.LoaderSet.Rpkgs)
+		lpkgs = resolve.RpkgSliceToLpkgSlice(t.res.LoaderSet.Rpkgs)
 		if err := t.res.SysdownCfg.EnsureWritten(lpkgs, srcDir,
 			pkg.ShortName(t.target.Package()), true); err != nil {
 
diff --git a/newt/syscfg/syscfg.go b/newt/syscfg/syscfg.go
index 2c73f6c..b504a1d 100644
--- a/newt/syscfg/syscfg.go
+++ b/newt/syscfg/syscfg.go
@@ -80,6 +80,8 @@ const SYSCFG_TASK_PRIO_MAX = 0xef
 
 var cfgRefRe = regexp.MustCompile("MYNEWT_VAL\\((\\w+)\\)")
 var cfgChoiceValRe = regexp.MustCompile("^[A-Za-z0-9_]+$")
+var cfgPkgRepoName = regexp.MustCompile("^@([A-Za-z0-9-_]+)/")
+var cfgPkgIllegalChar = regexp.MustCompile("[^A-Za-z0-9_]")
 
 type CfgPoint struct {
 	Value  string
@@ -1580,7 +1582,28 @@ func writeReposInfo(w io.Writer) {
 	}
 }
 
-func write(cfg Cfg, w io.Writer) {
+func sanitizePkgName(name string) string {
+	name = cfgPkgRepoName.ReplaceAllString(name, "${1}__")
+	name = cfgPkgIllegalChar.ReplaceAllLiteralString(name, "_")
+
+	return name
+}
+
+func writePackages(lpkgs []*pkg.LocalPackage, w io.Writer) {
+	pkgs := []string{}
+	for _, lpkg := range lpkgs {
+		pkgs = append(pkgs, sanitizePkgName(lpkg.FullName()))
+	}
+
+	sort.Strings(pkgs)
+
+	fmt.Fprintf(w, "/*** Included packages */\n")
+	for _, name := range pkgs {
+		fmt.Fprintf(w, "#define MYNEWT_PKG_%s 1\n", name)
+	}
+}
+
+func write(cfg Cfg, lpkgs []*pkg.LocalPackage, w io.Writer) {
 	fmt.Fprintf(w, newtutil.GeneratedPreamble())
 
 	fmt.Fprintf(w, "#ifndef H_MYNEWT_SYSCFG_\n")
@@ -1597,10 +1620,13 @@ func write(cfg Cfg, w io.Writer) {
 	writeSettings(cfg, w)
 	fmt.Fprintf(w, "\n")
 
+	writePackages(lpkgs, w)
+	fmt.Fprintf(w, "\n")
+
 	fmt.Fprintf(w, "#endif\n")
 }
 
-func EnsureWritten(cfg Cfg, includeDir string) error {
+func EnsureWritten(cfg Cfg, includeDir string, lpkgs []*pkg.LocalPackage) error {
 	// XXX: Detect these problems at error text generation time.
 	if err := calcPriorities(cfg, CFG_SETTING_TYPE_TASK_PRIO,
 		SYSCFG_TASK_PRIO_MAX, false); err != nil {
@@ -1609,7 +1635,7 @@ func EnsureWritten(cfg Cfg, includeDir string) error {
 	}
 
 	buf := bytes.Buffer{}
-	write(cfg, &buf)
+	write(cfg, lpkgs, &buf)
 
 	path := includeDir + "/" + HEADER_PATH