Split the cabal_macros.h generation into a helper and wrapper

Makes it easier to reuse this code in other contexts, for example if we
want to build without a .cabal file using all the packages in the environment.