Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

TypeError: 'float' object is not iterable in fbt_extapps.py #52

Open
nazarhktwitch opened this issue Feb 24, 2025 · 0 comments
Open

TypeError: 'float' object is not iterable in fbt_extapps.py #52

nazarhktwitch opened this issue Feb 24, 2025 · 0 comments

Comments

@nazarhktwitch
Copy link

nazarhktwitch commented Feb 24, 2025

When attempting to build the firmware using ufbt build, the following error occurs:

TypeError: 'float' object is not iterable:
  File "C:\Users\nazar\.ufbt\current\scripts\ufbt\SConstruct", line 248:
    app_artifacts = appenv.BuildAppElf(app)
  File "C:\Users\nazar\.ufbt\toolchain\x86_64-windows\python\Lib\site-packages\SCons\Util\envs.py", line 251:
    return self.method(*nargs, **kwargs)
  File "C:\Users\nazar\.ufbt\current\scripts\fbt_tools\fbt_extapps.py", line 261:
    env["EXT_APPS"][app.appid] = app_artifacts = app_builder.build()
  File "C:\Users\nazar\.ufbt\current\scripts\fbt_tools\fbt_extapps.py", line 48:
    self._setup_app_env()
  File "C:\Users\nazar\.ufbt\current\scripts\fbt_tools\fbt_extapps.py", line 61:
    ("FAP_VERSION", f'\\"{".".join(map(str, self.app.fap_version))}\\"'),

Problem:

The issue originates from a TypeError in the file fbt_extapps.py, where the function is attempting to iterate over a float value. Specifically, the error is caused by the line that tries to join elements of self.app.fap_version:

("FAP_VERSION", f'\\"{".".join(map(str, self.app.fap_version))}\\"')

If self.app.fap_version contains float values, it will cause an issue since join expects an iterable of strings, and map(str, self.app.fap_version) will fail if fap_version is not an iterable of strings.

Proposed Solution:

To fix the issue, the code should be updated to ensure that self.app.fap_version is properly converted to strings before attempting to join them. The updated function should look like this:

def _setup_app_env(self):
    # Clone the environment
    self.app_env = self.fw_env.Clone(
        FAP_SRC_DIR=self.app._appdir,
        FAP_WORK_DIR=self.app_work_dir,
    )

    # Ensure fap_version is a list of strings
    fap_version_str = '.'.join(map(str, self.app.fap_version))  # Convert elements to strings before joining

    # Add the version and other defines
    self.app_env.Append(
        CPPDEFINES=[
            ("FAP_VERSION", f'\\"{fap_version_str}\\"'),
            *self.app.cdefines,
        ],
    )

    # Set the variant directory for the build
    self.app_env.VariantDir(self.app_work_dir, self.app._appdir, duplicate=False)

This change ensures that the fap_version is always treated as a sequence of strings, preventing the TypeError from occurring.

Additional Information:

  • The issue occurs during the build process when using the ufbt build command.
  • It is critical to properly convert fap_version to a string format to ensure the correct handling of the version number.
  • After ufbt -c fix automatically deletes and changes to old version, I set for now 'Only reading' flag
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant