gdbver.pp 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. {
  2. Program to detect the version of libgdb that will be
  3. used for linking
  4. }
  5. program find_gdb_version;
  6. {$R-}
  7. {$ifdef unix}
  8. {$Linklib c}
  9. {$endif}
  10. {$LINKLIB libgdb.a}
  11. uses
  12. strings;
  13. const
  14. { This variable should be change with change in GDB CVS PM }
  15. Current_cvs_version : longint = 503;
  16. Max_version_length = 255;
  17. const
  18. output_file:string='';
  19. var
  20. version : array[0..0] of char;cvar;external;
  21. gdbversion : pchar;
  22. subver_str : string;
  23. i, version_number,
  24. subversion_number : longint;
  25. subsubversion_number : longint;
  26. error : word;
  27. only_ver : boolean;
  28. o : text;
  29. begin
  30. only_ver:=(Paramcount>0) and (ParamStr(1)='-n');
  31. if (paramcount>=2) and (paramstr(1)='-o') then
  32. begin
  33. only_ver:=true;
  34. output_file:=paramstr(2);
  35. end;
  36. getmem(gdbversion,Max_version_length+1);
  37. strlcopy(gdbversion,@version,Max_version_length);
  38. gdbversion[Max_version_length]:=#0;
  39. if (gdbversion[0] in ['4','5','6','7','8','9']) and (gdbversion[1]='.') then
  40. begin
  41. if not only_ver then
  42. Writeln('GDB version is ',pchar(@version));
  43. version_number:=ord(gdbversion[0])-ord('0');
  44. i:=2;
  45. subver_str:='';
  46. while gdbversion[i] in ['0'..'9'] do
  47. begin
  48. subver_str:=subver_str+gdbversion[i];
  49. inc(i);
  50. end;
  51. val(subver_str,subversion_number,error);
  52. inc(i);
  53. subver_str:='';
  54. while gdbversion[i] in ['0'..'9'] do
  55. begin
  56. subver_str:=subver_str+gdbversion[i];
  57. inc(i);
  58. end;
  59. if subver_str<>'' then
  60. val(subver_str,subsubversion_number,error);
  61. { 5.02.90 is a pretest of 5.03.. PM }
  62. if subsubversion_number>=90 then
  63. inc(subversion_number);
  64. if (error=0) and (subversion_number>=0) and
  65. (subversion_number<=99) then
  66. version_number:=version_number*100+subversion_number;
  67. end
  68. else if (gdbversion[0]='2') and (gdbversion[1]='0') and
  69. (gdbversion[2] in ['0'..'9']) and (gdbversion[3] in ['0'..'9']) then
  70. begin
  71. { CVS version from 2000 to 2099,
  72. assume current_cvs_version PM }
  73. version_number:=Current_cvs_version;
  74. end
  75. else
  76. begin
  77. if not only_ver then
  78. Writeln('Unsupported GDB version');
  79. version_number:=0;
  80. end;
  81. freemem(gdbversion);
  82. if output_file<>'' then
  83. begin
  84. assign(o,output_file);
  85. rewrite(o);
  86. writeln(o,'{$define GDB_V',version_number,'}');
  87. close(o);
  88. end
  89. else
  90. begin
  91. if only_ver then
  92. Write(version_number);
  93. Halt(version_number);
  94. end;
  95. end.