fpcygwin.pas 2.1 KB

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