anchor.diff:      AbsDir = filename:absname(Dir, Cwd),
       compile1(T, Opts#options{includes=[AbsDir|Opts#options.includes]});
   parse_generic_option("M"++Opt, T0, #options{specific=Spec}=Opts) ->
  -    case parse_dep_option(Opt, T0) of
  -	error ->
  -	    error;
  -	{SpecOpts,T} ->
  -	    compile1(T, Opts#options{specific=SpecOpts++Spec})
  -    end;
  +    {SpecOpts,T} = parse_dep_option(Opt, T0),
  +    compile1(T, Opts#options{specific=SpecOpts++Spec});
   parse_generic_option("o"++Opt, T0, #options{cwd=Cwd}=Opts) ->
       {Dir,T} = get_option("o", Opt, T0),
       AbsName = filename:absname(Dir, Cwd),
  
positive.code: compiler(".py") ->     {asn1ct,          compile_py};
  compiler(_) ->         no.
  
  %% Entry from command line.
  
  -type cmd_line_arg() :: atom() | string().
  
  -spec compile_cmdline() -> no_return().
  
  compile_cmdline() ->
      List = init:get_plain_arguments(),
      case compile(List) of
  	ok -> my_halt(0);
  	error -> my_halt(1);
  	_ -> my_halt(2)
      end.
  
  -spec my_halt(_) -> no_return().
  my_halt(Reason) ->
      erlang:halt(Reason).
  
  %% Run the the compiler in a separate process, trapping EXITs.
  
  compile(List) ->
      process_flag(trap_exit, true),
      Pid = spawn_link(compiler_runner(List)),
      receive
  	{'EXIT', Pid, {compiler_result, Result}} ->
  	    Result;
  	{'EXIT', Pid, {compiler_error, Error}} ->
  	    io:put_chars(?STDERR, Error),
  	    io:nl(?STDERR),
  	    error;
  	{'EXIT', Pid, Reason} ->
  	    io:format(?STDERR, "Runtime error: ~tp~n", [Reason]),
  	    error
      end.
  
  -spec compiler_runner([cmd_line_arg()]) -> fun(() -> no_return()).
  
  compiler_runner(List) ->
      fun() ->
              %% We don't want the current directory in the code path.
              %% Remove it.
              Path = [D || D <- code:get_path(), D =/= "."],
              true = code:set_path(Path),
              exit({compiler_result, compile1(List)})
      end.
  
  %% Parses the first part of the option list.
  
  compile1(Args) ->
      {ok, Cwd} = file:get_cwd(),
      compile1(Args, #options{outdir=Cwd,cwd=Cwd}).
  
  %% Parses all options.
  
  compile1(["--"|Files], Opts) ->
      compile2(Files, Opts);
  compile1(["-"++Option|T], Opts) ->
  
negative.code: parse_generic_option("S", T, #options{specific=Spec}=Opts) ->
      compile1(T, Opts#options{specific=['S'|Spec]});
  parse_generic_option(Option, _T, _Opts) ->
      usage(io_lib:format("Unknown option: -~ts\n", [Option])).
  
  parse_dep_option("", T) ->
      {[makedep,{makedep_output,standard_io}],T};
  