Path processing --------------- Need rules that will work for both the existing scenario (B) and the new scenario (A): _ / \ / _ \ / ___ \ /_/ \_\ --------- root = ../ package = suppliers/colony <--- /suppliers/colony import = ../map/return/colony <--- /map/return/colony mapimport = ../../suppliers/colony/gl <-- /suppliers/colony/gl this is the root / \ v v 1) <..>/map/return/ | <..>/../suppliers/colony/gl = ../suppliers/colony/gl ^^^^^^^^^^^^^^^^ \ / package name 2) strip root||(package base) from package import = ../map/return | <../suppliers/>colony/gl = colony/gl ^^^^^^^^^ ` The relative path from package ____ | __ ) | _ \ | |_) | |____/ ------- what about normal includes? root = ../ package = suppliers/colony <--- /suppliers/colony import = ../common/foo <--- /common/foo subimport = bar/baz <--- /common/foo/bar/baz one has root, other does not / v 1) <..>/common/ | bar/baz = ../common/bar/baz 2) strip root||(package base) from package import = ../common/bar/baz ^^^^^^^^^^^^^^^^^ ` no such prefix, so this is the relative path