diff --git a/cli/manifest_parser/libs_by_loc_map.go b/cli/manifest_parser/libs_by_name_map.go similarity index 62% rename from cli/manifest_parser/libs_by_loc_map.go rename to cli/manifest_parser/libs_by_name_map.go index 678cbc7c..d7cab413 100644 --- a/cli/manifest_parser/libs_by_loc_map.go +++ b/cli/manifest_parser/libs_by_name_map.go @@ -22,31 +22,31 @@ import ( "github.com/mongoose-os/mos/cli/build" ) -type libByLoc struct { +type libByName struct { Lib *build.SWModule mtx sync.Mutex } -type libByLocMap struct { - m map[string]*libByLoc +type libByNameMap struct { + m map[string]*libByName mtx sync.Mutex } -func newLibByLocMap() *libByLocMap { - return &libByLocMap{m: map[string]*libByLoc{}} +func newLibByNameMap() *libByNameMap { + return &libByNameMap{m: map[string]*libByName{}} } -// AddOrFetchAndLock() tries to add a new location key to the set. If -// successful, the new entry (Lib: nil) is locked and returned; otherwise (the -// location key already exists) the pre-existing entry is locked and returned. -func (lm *libByLocMap) AddOrFetchAndLock(loc string) *libByLoc { +// AddOrFetchAndLock() tries to add a new name key to the set. If successful, +// the new entry (Lib: nil) is locked and returned; otherwise (the name key +// already exists) the pre-existing entry is locked and returned. +func (lm *libByNameMap) AddOrFetchAndLock(name string) *libByName { lm.mtx.Lock() defer lm.mtx.Unlock() - ls, ok := lm.m[loc] + ls, ok := lm.m[name] if !ok { - ls = &libByLoc{} - lm.m[loc] = ls + ls = &libByName{} + lm.m[name] = ls } ls.mtx.Lock() diff --git a/cli/manifest_parser/manifest_parser.go b/cli/manifest_parser/manifest_parser.go index f9c816b7..03061d6c 100644 --- a/cli/manifest_parser/manifest_parser.go +++ b/cli/manifest_parser/manifest_parser.go @@ -528,8 +528,8 @@ type manifestParseContext struct { prepareLibs []*prepareLibsEntry - mtx *sync.Mutex - libsByLoc *libByLocMap + mtx *sync.Mutex + libsByName *libByNameMap } // readManifestWithLibs reads manifest from the provided dir, "expands" all @@ -568,8 +568,8 @@ func readManifestWithLibs( cbs: cbs, - mtx: &sync.Mutex{}, - libsByLoc: newLibByLocMap(), + mtx: &sync.Mutex{}, + libsByName: newLibByNameMap(), } manifest, mtime, err := readManifestWithLibs2(dir, pc) @@ -909,14 +909,14 @@ func prepareLib( return } - ls := pc.libsByLoc.AddOrFetchAndLock(m.Location) + ls := pc.libsByName.AddOrFetchAndLock(m.Name) defer ls.mtx.Unlock() if ls.Lib != nil { prepareLibReencounter(parentNodeName, manifest, pc, ls.Lib, m) return } - ourutil.Freportf(pc.logWriter, "Reading lib at %q...", m.Location) + ourutil.Freportf(pc.logWriter, "Reading lib %q at %q...", m.Name, m.Location) libLocalDir, err := pc.cbs.ComponentProvider.GetLibLocalPath( m, pc.rootAppDir, pc.appManifest.LibsVersion, manifest.Platform, @@ -947,14 +947,55 @@ func prepareLib( return } - // The library can explicitly set its name in its manifest. Also its - // name can be explicitly set in the referring manifest. Either - // separately is fine. None is fine too (the name defaults to the - // location basename). However if both are used, treat a mismatch as an - // error (building without one of the two names in place is guaranteed - // to fail, and is likely with both too). + // The name of a library can be explicitly set in its manifest and/or in the + // referring manifest. Barring that, the name defaults to the location + // basename. + // + // The library code is hardwired to the right name via at least its + // mgos_*_init() symbol. The code using the library may also be via, e.g., + // HAVE_* variables. + // + // The building process uses the library name for library deduplication and + // overriding. + // + // The location being `.../foo', the library name in use is: + // + // (#) lib mos.yml ref mos.yml name in use + // -------------------------------------- + // (1) (none) (none) foo + // (2) (none) foo foo + // (3) (none) bar bar + // (4) foo (none) foo + // (5) foo foo foo + // (6) foo bar (ERROR) + // (7) bar (none) (ERROR) + // (8) bar foo (ERROR) + // (9) bar bar bar + // + // Rationales per (#) case: + // - (1) The most typical use case. + // - (2, 4, 5) Effectively no new information atop the location basename. + // - (3) The handy use case of, e.g., .../foo-test1, .../foo-test2 copies + // adjacent to one another and/or the original .../foo. + // - (6) If `foo' were correct here, the same problem as in (7) would apply. + // If `bar' were correct, then `foo' in lib mos.yml would produce erroneous + // results via any automation/content generation applied to individual + // libraries outside their usages. + // - (7) The name set via the library manifest must be replicated in the + // referring manifest. Otherwise, if this library is overridden while this + // particular location isn't accessible from the building environment, + // library deduplication/overriding by name can't obviate the need to read + // the inaccessible manifest. + // - (8) This is (6) with the names swapped around. + // - (9) A location-independently named library. E.g., Github repositories + // .../mgos-foo, .../mgos-bar with libraries next to repositories unrelated + // to Mongoose OS. + // + // At this point, libRefName == `ref mos.yml' name above; libManifest.name == + // `lib mos.yml' name; m.Name == libRefName || library location basename. + // After validation, m.Name will be the library `name to use' above. if libManifest.Name != "" { - if libRefName != "" && libRefName != libManifest.Name { + if libRefName != "" && libRefName != libManifest.Name { // (6, 8) above lpres <- libPrepareResult{ err: fmt.Errorf("Library %q at %q is referred to as %q from %q", libManifest.Name, m.Location, @@ -962,7 +1003,17 @@ func prepareLib( } return } - m.Name = libManifest.Name + if libRefName == "" && m.Name != libManifest.Name { // (7) above + lpres <- libPrepareResult{ + err: fmt.Errorf("Library %q at %q must be referred to as %q from %q", + libManifest.Name, m.Location, + libManifest.Name, manifest.Origin), + } + return + } + } + if libRefName != "" && m.Name != libRefName { // (3, 9) above + m.Name = libRefName } name, err := m.GetName() if err != nil { diff --git a/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/common/lib1-mft-name/mos.yml b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/common/lib1-lib-name/mos.yml similarity index 100% rename from cli/manifest_parser/test_manifests/testset_10_lib_name_settings/common/lib1-mft-name/mos.yml rename to cli/manifest_parser/test_manifests/testset_10_lib_name_settings/common/lib1-lib-name/mos.yml diff --git a/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/common/lib1-mft-name/src b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/common/lib1-lib-name/src similarity index 100% rename from cli/manifest_parser/test_manifests/testset_10_lib_name_settings/common/lib1-mft-name/src rename to cli/manifest_parser/test_manifests/testset_10_lib_name_settings/common/lib1-lib-name/src diff --git a/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/common/mylib1-lib-name/mos.yml b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/common/mylib1-lib-name/mos.yml new file mode 100644 index 00000000..dc3e99d9 --- /dev/null +++ b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/common/mylib1-lib-name/mos.yml @@ -0,0 +1,4 @@ +type: lib +name: mylib1 +sources: [src] +manifest_version: 2020-08-02 diff --git a/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/common/mylib1-lib-name/src b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/common/mylib1-lib-name/src new file mode 120000 index 00000000..2240c924 --- /dev/null +++ b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/common/mylib1-lib-name/src @@ -0,0 +1 @@ +../lib-blank/src \ No newline at end of file diff --git a/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_01_mft_name/app/mos.yml b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_01_mft_name/app/mos.yml deleted file mode 100644 index fadeae0d..00000000 --- a/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_01_mft_name/app/mos.yml +++ /dev/null @@ -1,8 +0,0 @@ -manifest_version: 2020-08-02 - -libs: - - location: libs/mylib1 - -# A library in use has `name' set in its manifest that doesn't correspond to the -# basename of its location. Check that the generated MGOS_HAVE_* and -# mgos_*_init() identifiers are proper. diff --git a/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_01_mft_name/libs/mylib1 b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_01_mft_name/libs/mylib1 deleted file mode 120000 index 8143b7bc..00000000 --- a/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_01_mft_name/libs/mylib1 +++ /dev/null @@ -1 +0,0 @@ -../../common/lib1-mft-name \ No newline at end of file diff --git a/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_01_no_name/app/mos.yml b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_01_no_name/app/mos.yml new file mode 100644 index 00000000..3144c810 --- /dev/null +++ b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_01_no_name/app/mos.yml @@ -0,0 +1,8 @@ +manifest_version: 2020-08-02 + +libs: + - location: libs/mylib1 + +# prepareLib() commentary case (1): a library in use has no explicit `name' +# settings. Check that the generated MGOS_HAVE_* and mgos_*_init() identifiers +# are proper. diff --git a/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_01_no_name/expected/esp32/mgos_deps_init.c b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_01_no_name/expected/esp32/mgos_deps_init.c new file mode 100644 index 00000000..51ef65f3 --- /dev/null +++ b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_01_no_name/expected/esp32/mgos_deps_init.c @@ -0,0 +1,80 @@ +/* This file is auto-generated by mos build, do not edit! */ + +#include +#include + +#include "common/cs_dbg.h" + +#include "mgos_app.h" + +extern bool mgos_core_init(void); +extern bool mgos_mylib1_init(void); + + +#ifndef MGOS_LIB_INFO_VERSION +struct mgos_lib_info { + const char *name; + const char *version; + const char *repo_version; + const char *binary_libs; + bool (*init)(void); +}; +#define MGOS_LIB_INFO_VERSION 2 +#endif + +#ifndef MGOS_MODULE_INFO_VERSION +struct mgos_module_info { + const char *name; + const char *repo_version; +}; +#define MGOS_MODULE_INFO_VERSION 1 +#endif + +const struct mgos_lib_info mgos_libs_info[] = { + + // "core". deps: [ ] +#if MGOS_LIB_INFO_VERSION == 1 + {.name = "core", .version = NULL, .init = mgos_core_init}, +#else + {.name = "core", .version = NULL, .repo_version = NULL, .binary_libs = NULL, .init = mgos_core_init}, +#endif + + // "mylib1". deps: [ "core" ] +#if MGOS_LIB_INFO_VERSION == 1 + {.name = "mylib1", .version = NULL, .init = mgos_mylib1_init}, +#else + {.name = "mylib1", .version = NULL, .repo_version = NULL, .binary_libs = NULL, .init = mgos_mylib1_init}, +#endif + + // Last entry. + {.name = NULL}, +}; + +const struct mgos_module_info mgos_modules_info[] = { + + {.name = "mongoose-os", .repo_version = NULL}, + + // Last entry. + {.name = NULL}, +}; + +bool mgos_deps_init(void) { + for (const struct mgos_lib_info *l = mgos_libs_info; l->name != NULL; l++) { +#if MGOS_LIB_INFO_VERSION == 1 + LOG(LL_DEBUG, ("Init %s %s...", l->name, (l->version ? l->version : ""))); +#else + LOG(LL_DEBUG, ("Init %s %s (%s)...", + l->name, + (l->version ? l->version : ""), + (l->repo_version ? l->repo_version : ""))); +#endif + if (l->init != NULL && !l->init()) { + LOG(LL_ERROR, ("%s init failed", l->name)); + return false; + } + } + for (const struct mgos_module_info *m = mgos_modules_info; m->name != NULL; m++) { + LOG(LL_DEBUG, ("Module %s %s", m->name, (m->repo_version ? m->repo_version : ""))); + } + return true; +} diff --git a/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_01_no_name/expected/esp32/mgos_deps_manifest.yml b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_01_no_name/expected/esp32/mgos_deps_manifest.yml new file mode 100644 index 00000000..37887bc2 --- /dev/null +++ b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_01_no_name/expected/esp32/mgos_deps_manifest.yml @@ -0,0 +1,13 @@ +app_name: app +libs: +- name: core + location: https://github.com/mongoose-os-libs/core + version: "0.01" +- name: mylib1 + location: libs/mylib1 + version: "0.01" +modules: +- name: mongoose-os + location: https://github.com/cesanta/mongoose-os + version: "0.01" +manifest_version: "2021-03-26" diff --git a/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_01_no_name/expected/esp32/mos_final.yml b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_01_no_name/expected/esp32/mos_final.yml new file mode 100644 index 00000000..0d1e6324 --- /dev/null +++ b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_01_no_name/expected/esp32/mos_final.yml @@ -0,0 +1,48 @@ +name: app +type: app +platform: esp32 +platforms: +__ALL_PLATFORMS__ +sources: +- __APP_ROOT__/libs/core/src/lib.c +- __APP_ROOT__/libs/mylib1/src/lib.c +- __APP_ROOT__/app/build/gen/mgos_deps_init.c +modules: +- name: mongoose-os + location: https://github.com/cesanta/mongoose-os + version: "0.01" +build_vars: + BOARD: "" + ESP_IDF_EXTRA_COMPONENTS: "" + ESP_IDF_SDKCONFIG_OPTS: "" + MGOS: "1" + MGOS_HAVE_CORE: "1" + MGOS_HAVE_MYLIB1: "1" +cdefs: + MGOS: "1" + MGOS_HAVE_CORE: "1" + MGOS_HAVE_MYLIB1: "1" +libs_version: "0.01" +modules_version: "0.01" +mongoose_os_version: "0.01" +manifest_version: "2020-08-02" +libs_handled: +- lib: + name: core + location: https://github.com/mongoose-os-libs/core + path: __APP_ROOT__/libs/core + sources: + - __APP_ROOT__/libs/core/src/lib.c + version: "0.01" +- lib: + name: mylib1 + location: libs/mylib1 + path: __APP_ROOT__/libs/mylib1 + init_deps: + - core + sources: + - __APP_ROOT__/libs/mylib1/src/lib.c + version: "0.01" +init_deps: +- core +- mylib1 diff --git a/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_01_mft_name/libs/core b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_01_no_name/libs/core similarity index 100% rename from cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_01_mft_name/libs/core rename to cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_01_no_name/libs/core diff --git a/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_02_ref_name/libs/mylib1 b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_01_no_name/libs/mylib1 similarity index 100% rename from cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_02_ref_name/libs/mylib1 rename to cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_01_no_name/libs/mylib1 diff --git a/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_02_ref_name/app/mos.yml b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_02_ref_name/app/mos.yml deleted file mode 100644 index e5666a55..00000000 --- a/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_02_ref_name/app/mos.yml +++ /dev/null @@ -1,9 +0,0 @@ -manifest_version: 2020-08-02 - -libs: - - location: libs/mylib1 - name: lib1 - -# A library in use has `name' set in the manifest referring to it that doesn't -# correspond to the basename of its location. Check that the generated -# MGOS_HAVE_* and mgos_*_init() identifiers are proper. diff --git a/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_02_ref_name/expected b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_02_ref_name/expected deleted file mode 120000 index 05d96028..00000000 --- a/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_02_ref_name/expected +++ /dev/null @@ -1 +0,0 @@ -../test_01_mft_name/expected \ No newline at end of file diff --git a/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_02_ref_name_same/app/mos.yml b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_02_ref_name_same/app/mos.yml new file mode 100644 index 00000000..f7c41aeb --- /dev/null +++ b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_02_ref_name_same/app/mos.yml @@ -0,0 +1,9 @@ +manifest_version: 2020-08-02 + +libs: + - location: libs/mylib1 + name: mylib1 + +# prepareLib() commentary case (2): a library in use has `name' set in referring +# manifest that corresponds to the basename of its location. Check that the +# generated MGOS_HAVE_* and mgos_*_init() identifiers are unaffected. diff --git a/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_02_ref_name_same/expected b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_02_ref_name_same/expected new file mode 120000 index 00000000..cd73db54 --- /dev/null +++ b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_02_ref_name_same/expected @@ -0,0 +1 @@ +../test_01_no_name/expected \ No newline at end of file diff --git a/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_02_ref_name_same/libs b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_02_ref_name_same/libs new file mode 120000 index 00000000..956f68ca --- /dev/null +++ b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_02_ref_name_same/libs @@ -0,0 +1 @@ +../test_01_no_name/libs \ No newline at end of file diff --git a/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_03_mft_ref_name_mismatch/app/mos.yml b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_03_mft_ref_name_mismatch/app/mos.yml deleted file mode 100644 index a5d62116..00000000 --- a/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_03_mft_ref_name_mismatch/app/mos.yml +++ /dev/null @@ -1,10 +0,0 @@ -manifest_version: 2020-08-02 - -libs: - - location: libs/mylib1 - name: lib1a - -# A library in use has `name' set in the manifest referring to it that doesn't -# correspond to the basename of its location. The same is done in the -# manifest referencing the library. Check that the mismatch of these two names -# set is properly detected and reported. diff --git a/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_03_mft_ref_name_mismatch/expected/esp32/error.txt b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_03_mft_ref_name_mismatch/expected/esp32/error.txt deleted file mode 100644 index d20d4106..00000000 --- a/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_03_mft_ref_name_mismatch/expected/esp32/error.txt +++ /dev/null @@ -1 +0,0 @@ -Library "lib1" at "libs/mylib1" is referred to as "lib1a" from "test_manifests/testset_10_lib_name_settings/test_03_mft_ref_name_mismatch/app/mos.yml" diff --git a/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_03_mft_ref_name_mismatch/libs b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_03_mft_ref_name_mismatch/libs deleted file mode 120000 index d8f67c2e..00000000 --- a/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_03_mft_ref_name_mismatch/libs +++ /dev/null @@ -1 +0,0 @@ -../test_01_mft_name/libs \ No newline at end of file diff --git a/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_03_ref_name/app/mos.yml b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_03_ref_name/app/mos.yml new file mode 100644 index 00000000..fd7d5ce5 --- /dev/null +++ b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_03_ref_name/app/mos.yml @@ -0,0 +1,9 @@ +manifest_version: 2020-08-02 + +libs: + - location: libs/mylib1 + name: lib1 + +# prepareLib() commentary case (3): a library in use has `name' set in referring +# manifest that is distinct from its location basename. Check that the +# generated MGOS_HAVE_* and mgos_*_init() identifiers are properly altered. diff --git a/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_01_mft_name/expected/esp32/mgos_deps_init.c b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_03_ref_name/expected/esp32/mgos_deps_init.c similarity index 100% rename from cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_01_mft_name/expected/esp32/mgos_deps_init.c rename to cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_03_ref_name/expected/esp32/mgos_deps_init.c diff --git a/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_01_mft_name/expected/esp32/mgos_deps_manifest.yml b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_03_ref_name/expected/esp32/mgos_deps_manifest.yml similarity index 100% rename from cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_01_mft_name/expected/esp32/mgos_deps_manifest.yml rename to cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_03_ref_name/expected/esp32/mgos_deps_manifest.yml diff --git a/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_01_mft_name/expected/esp32/mos_final.yml b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_03_ref_name/expected/esp32/mos_final.yml similarity index 100% rename from cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_01_mft_name/expected/esp32/mos_final.yml rename to cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_03_ref_name/expected/esp32/mos_final.yml diff --git a/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_03_ref_name/libs b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_03_ref_name/libs new file mode 120000 index 00000000..956f68ca --- /dev/null +++ b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_03_ref_name/libs @@ -0,0 +1 @@ +../test_01_no_name/libs \ No newline at end of file diff --git a/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_04_lib_name_same/app/mos.yml b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_04_lib_name_same/app/mos.yml new file mode 100644 index 00000000..90c26d79 --- /dev/null +++ b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_04_lib_name_same/app/mos.yml @@ -0,0 +1,8 @@ +manifest_version: 2020-08-02 + +libs: + - location: libs/mylib1 + +# prepareLib() commentary case (4): a library in use has `name' set in its +# manifest that corresponds to its location basename. Check that the generated +# MGOS_HAVE_* and mgos_*_init() identifiers are unaffected. diff --git a/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_04_lib_name_same/expected b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_04_lib_name_same/expected new file mode 120000 index 00000000..cd73db54 --- /dev/null +++ b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_04_lib_name_same/expected @@ -0,0 +1 @@ +../test_01_no_name/expected \ No newline at end of file diff --git a/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_02_ref_name/libs/core b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_04_lib_name_same/libs/core similarity index 100% rename from cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_02_ref_name/libs/core rename to cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_04_lib_name_same/libs/core diff --git a/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_04_lib_name_same/libs/mylib1 b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_04_lib_name_same/libs/mylib1 new file mode 120000 index 00000000..04c1ca63 --- /dev/null +++ b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_04_lib_name_same/libs/mylib1 @@ -0,0 +1 @@ +../../common/mylib1-lib-name \ No newline at end of file diff --git a/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_05_lib_ref_name_same/app/mos.yml b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_05_lib_ref_name_same/app/mos.yml new file mode 100644 index 00000000..45436dd4 --- /dev/null +++ b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_05_lib_ref_name_same/app/mos.yml @@ -0,0 +1,10 @@ +manifest_version: 2020-08-02 + +libs: + - location: libs/mylib1 + name: mylib1 + +# prepareLib() commentary case (5): a library in use has `name' set in both its +# manifest and the referring manifest that corresponds to its location basename. +# Check that the generated MGOS_HAVE_* and mgos_*_init() identifiers are +# unaffected. diff --git a/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_05_lib_ref_name_same/expected b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_05_lib_ref_name_same/expected new file mode 120000 index 00000000..cd73db54 --- /dev/null +++ b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_05_lib_ref_name_same/expected @@ -0,0 +1 @@ +../test_01_no_name/expected \ No newline at end of file diff --git a/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_05_lib_ref_name_same/libs b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_05_lib_ref_name_same/libs new file mode 120000 index 00000000..fcddbbbe --- /dev/null +++ b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_05_lib_ref_name_same/libs @@ -0,0 +1 @@ +../test_04_lib_name_same/libs \ No newline at end of file diff --git a/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_06_lib_ref_name_mismatch/app/mos.yml b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_06_lib_ref_name_mismatch/app/mos.yml new file mode 100644 index 00000000..9fcf6d0f --- /dev/null +++ b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_06_lib_ref_name_mismatch/app/mos.yml @@ -0,0 +1,9 @@ +manifest_version: 2020-08-02 + +libs: + - location: libs/mylib1 + name: lib1 + +# prepareLib() commentary case (6): a library in use has `name' set in its +# manifest distinct from `name' set in the referring manifest. Check that this +# mismatch is properly detected and reported. diff --git a/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_06_lib_ref_name_mismatch/expected/esp32/error.txt b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_06_lib_ref_name_mismatch/expected/esp32/error.txt new file mode 100644 index 00000000..351dae2e --- /dev/null +++ b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_06_lib_ref_name_mismatch/expected/esp32/error.txt @@ -0,0 +1 @@ +Library "mylib1" at "libs/mylib1" is referred to as "lib1" from "test_manifests/testset_10_lib_name_settings/test_06_lib_ref_name_mismatch/app/mos.yml" diff --git a/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_06_lib_ref_name_mismatch/libs b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_06_lib_ref_name_mismatch/libs new file mode 120000 index 00000000..fcddbbbe --- /dev/null +++ b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_06_lib_ref_name_mismatch/libs @@ -0,0 +1 @@ +../test_04_lib_name_same/libs \ No newline at end of file diff --git a/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_07_lib_name_no_ref_name/app/mos.yml b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_07_lib_name_no_ref_name/app/mos.yml new file mode 100644 index 00000000..75df6ace --- /dev/null +++ b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_07_lib_name_no_ref_name/app/mos.yml @@ -0,0 +1,8 @@ +manifest_version: 2020-08-02 + +libs: + - location: libs/mylib1 + +# prepareLib() commentary case (7): a library in use has `name' set in its +# manifest distinct from its location basename. Check that the lack of the same +# name also set in the referring manifest is properly detected and reported. diff --git a/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_07_lib_name_no_ref_name/expected/esp32/error.txt b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_07_lib_name_no_ref_name/expected/esp32/error.txt new file mode 100644 index 00000000..b4443412 --- /dev/null +++ b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_07_lib_name_no_ref_name/expected/esp32/error.txt @@ -0,0 +1 @@ +Library "lib1" at "libs/mylib1" must be referred to as "lib1" from "test_manifests/testset_10_lib_name_settings/test_07_lib_name_no_ref_name/app/mos.yml" diff --git a/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_07_lib_name_no_ref_name/libs/core b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_07_lib_name_no_ref_name/libs/core new file mode 120000 index 00000000..042cae7f --- /dev/null +++ b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_07_lib_name_no_ref_name/libs/core @@ -0,0 +1 @@ +../../common/lib-blank \ No newline at end of file diff --git a/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_07_lib_name_no_ref_name/libs/mylib1 b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_07_lib_name_no_ref_name/libs/mylib1 new file mode 120000 index 00000000..488385ad --- /dev/null +++ b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_07_lib_name_no_ref_name/libs/mylib1 @@ -0,0 +1 @@ +../../common/lib1-lib-name \ No newline at end of file diff --git a/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_08_lib_ref_name_mismatch/app/mos.yml b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_08_lib_ref_name_mismatch/app/mos.yml new file mode 100644 index 00000000..4725f4ef --- /dev/null +++ b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_08_lib_ref_name_mismatch/app/mos.yml @@ -0,0 +1,9 @@ +manifest_version: 2020-08-02 + +libs: + - location: libs/mylib1 + name: mylib1 + +# prepareLib() commentary case (8): a library in use has `name' set in its +# manifest distinct from `name' set in the referring manifest. Check that this +# mismatch is properly detected and reported. diff --git a/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_08_lib_ref_name_mismatch/expected/esp32/error.txt b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_08_lib_ref_name_mismatch/expected/esp32/error.txt new file mode 100644 index 00000000..49aafa44 --- /dev/null +++ b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_08_lib_ref_name_mismatch/expected/esp32/error.txt @@ -0,0 +1 @@ +Library "lib1" at "libs/mylib1" is referred to as "mylib1" from "test_manifests/testset_10_lib_name_settings/test_08_lib_ref_name_mismatch/app/mos.yml" diff --git a/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_08_lib_ref_name_mismatch/libs b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_08_lib_ref_name_mismatch/libs new file mode 120000 index 00000000..9f1dc6ed --- /dev/null +++ b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_08_lib_ref_name_mismatch/libs @@ -0,0 +1 @@ +../test_07_lib_name_no_ref_name/libs \ No newline at end of file diff --git a/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_09_lib_ref_name_match/app/mos.yml b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_09_lib_ref_name_match/app/mos.yml new file mode 100644 index 00000000..d1af2377 --- /dev/null +++ b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_09_lib_ref_name_match/app/mos.yml @@ -0,0 +1,10 @@ +manifest_version: 2020-08-02 + +libs: + - location: libs/mylib1 + name: lib1 + +# prepareLib() commentary case (9): a library in use has same `name' set in its +# and referring manifests that is distinct from its location basename. Check +# that the generated MGOS_HAVE_* and mgos_*_init() identifiers are properly +# altered. diff --git a/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_09_lib_ref_name_match/expected b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_09_lib_ref_name_match/expected new file mode 120000 index 00000000..5cac8894 --- /dev/null +++ b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_09_lib_ref_name_match/expected @@ -0,0 +1 @@ +../test_03_ref_name/expected \ No newline at end of file diff --git a/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_09_lib_ref_name_match/libs b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_09_lib_ref_name_match/libs new file mode 120000 index 00000000..9f1dc6ed --- /dev/null +++ b/cli/manifest_parser/test_manifests/testset_10_lib_name_settings/test_09_lib_ref_name_match/libs @@ -0,0 +1 @@ +../test_07_lib_name_no_ref_name/libs \ No newline at end of file diff --git a/cli/manifest_parser/test_manifests/testset_11_lib_overrides/common/lib1-mft-name b/cli/manifest_parser/test_manifests/testset_11_lib_overrides/common/lib1-mft-name index db0f237a..7c3bbb10 120000 --- a/cli/manifest_parser/test_manifests/testset_11_lib_overrides/common/lib1-mft-name +++ b/cli/manifest_parser/test_manifests/testset_11_lib_overrides/common/lib1-mft-name @@ -1 +1 @@ -../../testset_10_lib_name_settings/common/lib1-mft-name \ No newline at end of file +../../testset_10_lib_name_settings/common/lib1-lib-name \ No newline at end of file diff --git a/cli/manifest_parser/test_manifests/testset_11_lib_overrides/test_03_diff_loc_higher_mft_name/app/mos.yml b/cli/manifest_parser/test_manifests/testset_11_lib_overrides/test_03_diff_loc_higher_mft_name/app/mos.yml index 2207a1b1..e55fc158 100644 --- a/cli/manifest_parser/test_manifests/testset_11_lib_overrides/test_03_diff_loc_higher_mft_name/app/mos.yml +++ b/cli/manifest_parser/test_manifests/testset_11_lib_overrides/test_03_diff_loc_higher_mft_name/app/mos.yml @@ -2,10 +2,11 @@ manifest_version: 2020-08-02 libs: - location: libs/mylib1 + name: lib1 version: 2.0-from-app - location: libs/mylib2 -# Two lib1 libraries are referenced, one (named via its manifest) directly, the -# other (named by default) indirectly via mylib2. Check that the generated -# manifest file has no duplicates and that the actually handled reference is -# that from the higher level of the manifest tree. +# Two lib1 libraries are referenced, one (named via both its and referring +# manifests) directly, the other (named by default) indirectly via mylib2. +# Check that the generated manifest file has no duplicates and that the actually +# handled reference is that from the higher level of the manifest tree. diff --git a/cli/manifest_parser/test_manifests/testset_11_lib_overrides/test_04_diff_loc_lower_mft_name/libs/mylib2/mos.yml b/cli/manifest_parser/test_manifests/testset_11_lib_overrides/test_04_diff_loc_lower_mft_name/libs/mylib2/mos.yml index 7a558799..7f234954 120000 --- a/cli/manifest_parser/test_manifests/testset_11_lib_overrides/test_04_diff_loc_lower_mft_name/libs/mylib2/mos.yml +++ b/cli/manifest_parser/test_manifests/testset_11_lib_overrides/test_04_diff_loc_lower_mft_name/libs/mylib2/mos.yml @@ -1 +1 @@ -../../../test_01_same_loc_dflt_names/libs/mylib2/mos.yml \ No newline at end of file +../../../test_06_diff_loc_lower_ref_name/libs/mylib2/mos.yml \ No newline at end of file diff --git a/cli/manifest_parser/test_manifests/testset_11_lib_overrides/test_07_unreadable_overridden/app/mos.yml b/cli/manifest_parser/test_manifests/testset_11_lib_overrides/test_07_unreadable_overridden/app/mos.yml new file mode 100644 index 00000000..35304828 --- /dev/null +++ b/cli/manifest_parser/test_manifests/testset_11_lib_overrides/test_07_unreadable_overridden/app/mos.yml @@ -0,0 +1,10 @@ +manifest_version: 2020-08-02 + +libs: + - location: libs/mylib1 + name: lib1 + - location: libs/mylib2 + +# Two lib1 libraries are referenced, one (named via the referencing manifest) +# directly, the other (named by default) indirectly via mylib2; its source is +# also unreadable (non-existent). Check that manifest generation is successful. diff --git a/cli/manifest_parser/test_manifests/testset_11_lib_overrides/test_07_unreadable_overridden/expected/esp32/mgos_deps_manifest.yml b/cli/manifest_parser/test_manifests/testset_11_lib_overrides/test_07_unreadable_overridden/expected/esp32/mgos_deps_manifest.yml new file mode 100644 index 00000000..60fa3ad2 --- /dev/null +++ b/cli/manifest_parser/test_manifests/testset_11_lib_overrides/test_07_unreadable_overridden/expected/esp32/mgos_deps_manifest.yml @@ -0,0 +1,16 @@ +app_name: app +libs: +- name: core + location: https://github.com/mongoose-os-libs/core + version: "0.01" +- name: lib1 + location: libs/mylib1 + version: "0.01" +- name: mylib2 + location: libs/mylib2 + version: "0.01" +modules: +- name: mongoose-os + location: https://github.com/cesanta/mongoose-os + version: "0.01" +manifest_version: "2021-03-26" diff --git a/cli/manifest_parser/test_manifests/testset_11_lib_overrides/test_07_unreadable_overridden/expected/esp32/mos_final.yml b/cli/manifest_parser/test_manifests/testset_11_lib_overrides/test_07_unreadable_overridden/expected/esp32/mos_final.yml new file mode 100644 index 00000000..45d7c1a2 --- /dev/null +++ b/cli/manifest_parser/test_manifests/testset_11_lib_overrides/test_07_unreadable_overridden/expected/esp32/mos_final.yml @@ -0,0 +1,59 @@ +name: app +type: app +platform: esp32 +platforms: +__ALL_PLATFORMS__ +sources: +- __APP_ROOT__/libs/core/src/lib.c +- __APP_ROOT__/libs/mylib1/src/lib.c +- __APP_ROOT__/app/build/gen/mgos_deps_init.c +modules: +- name: mongoose-os + location: https://github.com/cesanta/mongoose-os + version: "0.01" +build_vars: + BOARD: "" + ESP_IDF_EXTRA_COMPONENTS: "" + ESP_IDF_SDKCONFIG_OPTS: "" + MGOS: "1" + MGOS_HAVE_CORE: "1" + MGOS_HAVE_LIB1: "1" + MGOS_HAVE_MYLIB2: "1" +cdefs: + MGOS: "1" + MGOS_HAVE_CORE: "1" + MGOS_HAVE_LIB1: "1" + MGOS_HAVE_MYLIB2: "1" +libs_version: "0.01" +modules_version: "0.01" +mongoose_os_version: "0.01" +manifest_version: "2020-08-02" +libs_handled: +- lib: + name: core + location: https://github.com/mongoose-os-libs/core + path: __APP_ROOT__/libs/core + sources: + - __APP_ROOT__/libs/core/src/lib.c + version: "0.01" +- lib: + name: lib1 + location: libs/mylib1 + path: __APP_ROOT__/libs/mylib1 + init_deps: + - core + sources: + - __APP_ROOT__/libs/mylib1/src/lib.c + version: "0.01" +- lib: + name: mylib2 + location: libs/mylib2 + path: __APP_ROOT__/libs/mylib2 + init_deps: + - core + - lib1 + version: "0.01" +init_deps: +- core +- lib1 +- mylib2 diff --git a/cli/manifest_parser/test_manifests/testset_11_lib_overrides/test_07_unreadable_overridden/libs/core b/cli/manifest_parser/test_manifests/testset_11_lib_overrides/test_07_unreadable_overridden/libs/core new file mode 120000 index 00000000..042cae7f --- /dev/null +++ b/cli/manifest_parser/test_manifests/testset_11_lib_overrides/test_07_unreadable_overridden/libs/core @@ -0,0 +1 @@ +../../common/lib-blank \ No newline at end of file diff --git a/cli/manifest_parser/test_manifests/testset_11_lib_overrides/test_07_unreadable_overridden/libs/lib1 b/cli/manifest_parser/test_manifests/testset_11_lib_overrides/test_07_unreadable_overridden/libs/lib1 new file mode 120000 index 00000000..042cae7f --- /dev/null +++ b/cli/manifest_parser/test_manifests/testset_11_lib_overrides/test_07_unreadable_overridden/libs/lib1 @@ -0,0 +1 @@ +../../common/lib-blank \ No newline at end of file diff --git a/cli/manifest_parser/test_manifests/testset_11_lib_overrides/test_07_unreadable_overridden/libs/mylib1 b/cli/manifest_parser/test_manifests/testset_11_lib_overrides/test_07_unreadable_overridden/libs/mylib1 new file mode 120000 index 00000000..042cae7f --- /dev/null +++ b/cli/manifest_parser/test_manifests/testset_11_lib_overrides/test_07_unreadable_overridden/libs/mylib1 @@ -0,0 +1 @@ +../../common/lib-blank \ No newline at end of file diff --git a/cli/manifest_parser/test_manifests/testset_11_lib_overrides/test_07_unreadable_overridden/libs/mylib2/mos.yml b/cli/manifest_parser/test_manifests/testset_11_lib_overrides/test_07_unreadable_overridden/libs/mylib2/mos.yml new file mode 100644 index 00000000..17545f98 --- /dev/null +++ b/cli/manifest_parser/test_manifests/testset_11_lib_overrides/test_07_unreadable_overridden/libs/mylib2/mos.yml @@ -0,0 +1,5 @@ +type: lib +manifest_version: 2020-08-02 + +libs: + - origin: libs/non-existent/lib1