I have a small fix to offer for the TCX format.
I noticed my TCX output files were always written with sport="Biking" despite me selecting Running.

I think this block in gtrnctr.cc is to blame:

  if (opt_sport) {
    for (i = 0; i < MAX_SPORTS; i++) {
      if (0 == case_ignore_strncmp(opt_sport, gtc_sportlist[i], 2)) {
        gtc_sport = i;

The case_ignore_strncmp seems to compare only the first two characters of the user's selection (opt_sport) to the full string from list of defined sports, therefore the sport is never matched and always defaults to Biking.
I changed that line to compare the whole string:

 if (0 == case_ignore_strcmp(opt_sport, gtc_sportlist[i])) {

Which fixes it for me. Surprised no-one else seems to mention it when I tried googling. Hopefully it can be easily incorporated into the source code.