anchor.diff:      rebar_file_utils:delete_each([source_to_bin(S) || S <- Sources]),
   
       %% Delete the .so file
  -    rebar_file_utils:delete_each([so_name(Config, AppFile)]),
  +    rebar_file_utils:delete_each(lists:map(fun({SoName,_}) -> SoName end, so_specs(Config, AppFile, expand_objects(Sources)))),
   
       %% Run the cleanup script, if it exists
       run_cleanup_hook(Config).
  
positive.code:             {NewBins, ExistingBins} = compile_each(Sources, Config, Env, [], []),
  
              %% Construct the driver name and make sure priv/ exists
              SoName = so_name(Config, AppFile),
              ok = filelib:ensure_dir(SoName),
  
              %% Only relink if necessary, given the SoName and list of new binaries
              case needs_link(SoName, NewBins) of
                  true ->
                      AllBins = string:join(NewBins ++ ExistingBins, " "),
                      rebar_utils:sh_failfast(?FMT("$CC ~s $LDFLAGS $DRV_LDFLAGS -o ~s",
                                                   [AllBins, SoName]), Env);
                  false ->
                      ?INFO("Skipping relink of ~s\n", [SoName]),
                      ok
              end
      end.
  
  clean(Config, AppFile) ->
  
negative.code: %% Supported configuration variables:
  %%
  %% * port_sources - Erlang list of files and/or wildcard strings to be compiled
  %%
  %% * so_specs  - Erlang list of tuples of the form {"priv/so_name.so", ["c_src/object_file_name.o"]} useful for
  %%               building multiple *.so files.
  %%
  %% * port_envs - Erlang list of key/value pairs which will control the environment when
  %%               running the compiler and linker. By default, the following variables
  