anchor.diff:              ?ABORT("Failed to read ~s for preprocessing: ~p\n", [AppSrcFile, Reason])
       end.
   
  +load_app_vars(Config) ->
  +    case rebar_config:get_local(Config, app_vars_file, undefined) of
  +        undefined ->
  +            ?INFO("No app_vars_file defined.\n", []),
  +            [];
  +        Filename ->
  +            ?INFO("Loading app vars from ~p\n", [Filename]),
  +            {ok, Vars} = file:consult(Filename),
  +            Vars
  +    end.
  +
  +apply_app_vars([], AppData) ->
  +    AppData;
  +apply_app_vars([{Key, Value} | Rest], AppData) ->
  +    AppData2 = lists:keystore(Key, 1, AppData, {Key, Value}),
  +    apply_app_vars(Rest, AppData2).
   
   validate_name(AppName, File) ->
       %% Convert the .app file name to an atom -- check it against the identifier within the file
  
positive.code: %% Internal functions
  %% ===================================================================
  
  preprocess(AppSrcFile) ->
      case rebar_app_utils:load_app_file(AppSrcFile) of
          {ok, AppName, AppData} ->
              %% Get a list of all the modules available in ebin/ and update
              %% the app data accordingly
              A1 = lists:keystore(modules, 1, AppData, {modules, ebin_modules()}),
  
              %% Build the final spec as a string
              Spec = io_lib:format("~p.\n", [{application, AppName, A1}]),
  
negative.code:     %% be validated as usual.
      AppFile = case rebar_app_utils:is_app_src(File) of
          true ->
              preprocess(Config, File);
          false ->
              File
      end,
  