Search code examples
apportable

How to use sub-projects with targets with same names in Apportable?


Currently, Apportable cannot build a project with targets with same names. This happens because of sub-projects. I have several sub-projects which all contains target named iOS Static Library and OS X Static Library. And their PRODUCT_NAME is overridden to prevent .a file name duplication.

Anyway, when I see build log, Apportable seem to use target name as a kind of a global identifier. And crashes while building.

How can I use targets with same names over multiple sub-projects?

Here's full build log.


Erionirr:Test9 Eonil$ apportable uninstall; rm -rf ~/.apportable/SDK/Build/android-armeabi-debug; rm -rf *.approj; apportable debug 
Building to /Users/Eonil/.apportable/SDK/Build/android-armeabi-debug
Loading configuration.
Finished parsing configuration.
Loading configuration.
Finished parsing configuration.
Loading configuration.
Finished parsing configuration.
scons: Building targets ...
scons: *** [Build/android-armeabi-debug/Test9/Test9-debug.apk_debug] Source `Build/android-armeabi-debug/Test9/Test9-debug.apk' not found, needed by target `Build/android-armeabi-debug/Test9/Test9-debug.apk_debug'.
scons: building terminated because of errors.
Building to /Users/Eonil/.apportable/SDK/Build/android-armeabi-debug
Updating configuration parameters... Building Xcode project /Users/Eonil/Desktop/Apportable Knowledge Base and Bug Reporting/Running Test/Test9/Test9
Scanning build configuration for target Test9
Merging configuration parameters.


It looks like you're compiling this app for the first time.
Test9.approj/configuration.json will be created for you.
A few quick questions and you'll be on your way:

If the app is using OpenGL ES, does it use ES1 or ES2? (Cocos2D 1.X uses ES1, 2.X uses ES2)
[1/2] 2
Should the app initially launch in landscape or portrait orientation? (default: landscape)
[L/p] p
Loading configuration.
Finished parsing configuration.
Merging configuration parameters.
Loading configuration.
Finished parsing configuration.
Merging configuration parameters.
Loading configuration.
Finished parsing configuration.
Traceback (most recent call last):
  File "/Users/Eonil/.apportable/SDK/bin/apportable", line 701, in <module>
    run(env)
  File "/Users/Eonil/.apportable/SDK/bin/apportable", line 677, in run
    results = actions[args.action](env)
  File "/Users/Eonil/.apportable/SDK/bin/apportable", line 95, in DebugAction
    return env.DebugApp(site_init.BuildApplication(env, env['BUILD_TARGET']))
  File "/Users/Eonil/.apportable/SDK/site_scons/site_init.py", line 351, in BuildApplication
    return build.App(env, app_sconscript)
  File "/Users/Eonil/.apportable/SDK/site_scons/build/__init__.py", line 619, in App
    results = env.BuildApp(sources=sources, header_paths=headers, defines=defines, flags=flags, config=configs, deps=deps, libs=libs, java_libs=java_libs, assets=assets, pch=pchs, modules=modules, java_sources=java_sources, java_sourcepaths=java_sourcepaths, java_res_dirs=java_res_dirs)
  File "/Users/Eonil/.apportable/SDK/lib/scons/engine/SCons/Environment.py", line 223, in __call__
    return self.method(*nargs, **kwargs)
  File "/Users/Eonil/.apportable/SDK/site_scons/site_init.py", line 915, in BuildApp
    build.Module(env, module["build_cwd"], module)
  File "/Users/Eonil/.apportable/SDK/site_scons/build/__init__.py", line 681, in Module
    env.BuildModule(target["target"], sources=sources, header_paths=headers, defines=defines, flags=flags, deps=deps, libs=libs, java_libs=java_libs, assets=assets, pch=pchs, modules=modules, java_sources=java_sources, java_sourcepaths=java_sourcepaths, java_res_dirs=java_res_dirs)
  File "/Users/Eonil/.apportable/SDK/lib/scons/engine/SCons/Environment.py", line 223, in __call__
    return self.method(*nargs, **kwargs)
  File "/Users/Eonil/.apportable/SDK/site_scons/site_init.py", line 1014, in BuildModule
    BuildLibrary(env, name, sources=sources, header_paths=header_paths, static=True, defines=defines, flags=flags, deps=deps, libs=libs, pch=pch, app=True)
  File "/Users/Eonil/.apportable/SDK/site_scons/site_init.py", line 755, in BuildLibrary
    lib = building_env.StaticLibrary(name, objects)
  File "/Users/Eonil/.apportable/SDK/lib/scons/engine/SCons/Environment.py", line 259, in __call__
    return MethodWrapper.__call__(self, target, source, *args, **kw)
  File "/Users/Eonil/.apportable/SDK/lib/scons/engine/SCons/Environment.py", line 223, in __call__
    return self.method(*nargs, **kwargs)
  File "/Users/Eonil/.apportable/SDK/lib/scons/engine/SCons/Builder.py", line 632, in __call__
    return self._execute(env, target, source, OverrideWarner(kw), ekw)
  File "/Users/Eonil/.apportable/SDK/lib/scons/engine/SCons/Builder.py", line 556, in _execute
    _node_errors(self, env, tlist, slist)
  File "/Users/Eonil/.apportable/SDK/lib/scons/engine/SCons/Builder.py", line 315, in _node_errors
    raise UserError(msg)
SCons.Errors.UserError: Multiple ways to build the same target were specified for: Build/android-armeabi-debug/Eonil.Test9/iOS Static Library/libiOS Static Library.a  (from ['Build/android-armeabi-debug/Eonil.Test9/Users/Eonil/Desktop/Apportable Knowledge Base and Bug Reporting/Running Test/Test9/Subproject1/Subproject1/Subproject1.m.o'] and from ['Build/android-armeabi-debug/Eonil.Test9/Users/Eonil/Desktop/Apportable Knowledge Base and Bug Reporting/Running Test/Test9/Subproject2/Subproject2/Subproject2.m.o'])
Erionirr:Test9 Eonil$ 

Solution

  • Currently this is not supported, we have been discussing internally on different methods to approach naming libraries that will avoid this issue but still keep linking somewhat streamlined. Keep tuned to our release notes page, when we get a solution for this we will definitely note it there with the user effective changes.