fpcygwin.pas 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. unit fpcygwin;
  2. interface
  3. function GetCygwinVersionString : string;
  4. function GetCygwinFullName : string;
  5. function GetCygwinVersionHigh : longint;
  6. function GetCygwinVersionLow : longint;
  7. procedure CheckCygwinVersion;
  8. implementation
  9. uses
  10. strings,
  11. windows;
  12. var
  13. ModuleH,DummyH : Handle;
  14. CygwinFullName : pchar;
  15. fileinfosize : cardinal;
  16. size : longint;
  17. InfoData : pointer;
  18. FileInfo : VS_FIXEDFILEINFO;
  19. PFileInfo : ^VS_FIXEDFILEINFO;
  20. function GetCygwinVersionHigh : longint;
  21. begin
  22. GetCygwinVersionHigh:=FileInfo.dwFileVersionMS;
  23. end;
  24. function GetCygwinVersionLow : longint;
  25. begin
  26. GetCygwinVersionLow:=FileInfo.dwFileVersionLS;
  27. end;
  28. function GetCygwinVersionString : string;
  29. var
  30. a,b,c,d : word;
  31. va,vb,vc,vd : string[6];
  32. begin
  33. a:= Cardinal(GetCygwinVersionHigh) shr 16;
  34. b:= Cardinal(GetCygwinVersionHigh) and $ffff;
  35. c:= Cardinal(GetCygwinVersionLow) shr 16;
  36. d:= Cardinal(GetCygwinVersionLow) and $ffff;
  37. system.str(a,va);
  38. system.str(b,vb);
  39. system.str(c,vc);
  40. system.str(d,vd);
  41. GetCygwinVersionString:=va+'.'+vb+'.'+vc+'.'+vd;
  42. end;
  43. procedure CheckCygwinVersion;
  44. begin
  45. if GetCygwinVersionHigh < 1005 shl 16 then
  46. begin
  47. Writeln('The cygwin1.dll that you have in "',CygwinFullName,'" is too old');
  48. Writeln('If the IDE does not work correctly, please consider');
  49. Writeln('putting a newer cygwin1.dll version in your path before that one.');
  50. end;
  51. end;
  52. function GetCygwinFullName : string;
  53. begin
  54. if assigned(CygwinFullName) then
  55. GetCygwinFullName:=strpas(CygwinFullName)
  56. else
  57. GetCygwinFullName:='cygwin1.dll';
  58. end;
  59. initialization
  60. ModuleH:=GetModuleHandle('cygwin1');
  61. GetMem(CygwinFullName,MAX_PATH+1);
  62. GetModuleFileName(ModuleH,CygwinFullName,MAX_PATH+1);
  63. size:=GetFileVersionInfoSize(CygwinFullName,@DummyH);
  64. GetMem(InfoData,size);
  65. if GetFileVersionInfo(CygwinFullName,DummyH,size,InfoData) then
  66. begin
  67. PFileInfo:=nil;
  68. VerQueryValue(InfoData,'\',PFileInfo,fileinfosize);
  69. If Assigned(PFileInfo) then
  70. FileInfo:=PFileInfo^;
  71. end;
  72. FreeMem(InfoData,size);
  73. finalization
  74. FreeMem(CygwinFullName,MAX_PATH+1);
  75. end.