Sfoglia il codice sorgente

--- Merging r29422 through r29424 into '.':
U rtl/android/dlandroid.inc
U rtl/win64/signals.pp
U rtl/win64/system.pp
A rtl/win64/buildrtl.lpi
U rtl/x86_64/cpu.pp
--- Recording mergeinfo for merge of r29422 through r29424 into '.':
U .
--- Merging r29438 into '.':
U packages/fpmkunit/src/fpmkunit.pp
--- Recording mergeinfo for merge of r29438 into '.':
G .
--- Merging r29439 into '.':
U packages/fppkg/src/pkgfpmake.pp
U packages/fppkg/src/pkgcommands.pp
U utils/fppkg/fppkg.pp
--- Recording mergeinfo for merge of r29439 into '.':
G .
--- Merging r29603 into '.':
U rtl/atari/Makefile.fpc
U rtl/atari/Makefile
--- Recording mergeinfo for merge of r29603 into '.':
G .
--- Merging r29604 into '.':
U rtl/Makefile.fpc
U rtl/Makefile
--- Recording mergeinfo for merge of r29604 into '.':
G .
--- Merging r29808 into '.':
U rtl/win/sysos.inc
--- Recording mergeinfo for merge of r29808 into '.':
G .

# revisions: 29422-29424,29438,29439,29603,29604,29808

git-svn-id: branches/fixes_3_0@31103 -

marco 10 anni fa
parent
commit
826f66757a

+ 1 - 0
.gitattributes

@@ -9369,6 +9369,7 @@ rtl/win32/winsysut.pp svneol=native#text/plain
 rtl/win32/wprt0.as svneol=native#text/plain
 rtl/win64/Makefile svneol=native#text/plain
 rtl/win64/Makefile.fpc svneol=native#text/plain
+rtl/win64/buildrtl.lpi svneol=native#text/plain
 rtl/win64/buildrtl.pp svneol=native#text/plain
 rtl/win64/classes.pp svneol=native#text/plain
 rtl/win64/rtldefs.inc svneol=native#text/plain

+ 135 - 13
packages/fpmkunit/src/fpmkunit.pp

@@ -123,6 +123,8 @@ Type
   TCompilerMode = (cmFPC,cmTP,cmObjFPC,cmDelphi,cmMacPas);
   TCompilerModes = Set of TCompilerMode;
 
+  TInstallMOde = (imInstall, imUnInstall);
+
   TTargetType = (ttProgram,ttUnit,ttImplicitUnit,ttCleanOnlyUnit,ttExampleUnit,ttExampleProgram,ttFPDoc);
   TTargetTypes = set of TTargetType;
 
@@ -150,7 +152,7 @@ Type
   TLogEvent = Procedure (Level : TVerboseLevel; Const Msg : String) of Object;
   TNotifyProcEvent = procedure(Sender: TObject);
 
-  TRunMode = (rmCompile,rmBuild,rmInstall,rmArchive,rmClean,rmDistClean,rmManifest,rmZipInstall,rmPkgList);
+  TRunMode = (rmCompile,rmBuild,rmInstall,rmArchive,rmClean,rmDistClean,rmManifest,rmZipInstall,rmPkgList,rmUnInstall);
 
   TBuildMode = (bmOneByOne, bmBuildUnit{, bmSkipImplicitUnits});
   TBuildModes = set of TBuildMode;
@@ -427,6 +429,7 @@ Type
   TNotifyEventAction = (neaBeforeCompile, neaAfterCompile, neaBeforeInstall, neaAfterInstall,
                         neaBeforeClean, neaAfterClean, neaBeforeArchive, neaAfterArchive,
                         neaBeforeManifest, neaAfterManifest, neaBeforePkgList, neaAfterPkgList,
+                        neaBeforeUnInstall, neaAfterUnInstall,
                         neaBeforeCreateBuildEngine, neaAfterCreateBuildengine);
 
   TNotifyEventActionSet = set of TNotifyEventAction;
@@ -1119,11 +1122,11 @@ Type
     procedure LogUnIndent;
     Procedure EnterDir(ADir : String);
     Function GetCompiler : String;
-    Function InstallPackageFiles(APAckage : TPackage; tt : TTargetTypes; Const Dest : String):Boolean;
+    Function InstallPackageFiles(APAckage : TPackage; tt : TTargetTypes; Const Dest : String; Const InstallMode: TInstallMode):Boolean;
     Procedure InstallUnitConfigFile(APAckage : TPackage; Const Dest : String);
     function GetUnitConfigFilesInstallDir(ABaseDir: string): String;
 
-    Function InstallPackageSourceFiles(APAckage : TPackage; stt : TSourceTypes; ttt : TTargetTypes; Const Dest : String):Boolean;
+    Function InstallPackageSourceFiles(APAckage : TPackage; stt : TSourceTypes; ttt : TTargetTypes; Const Dest : String; Const InstallMode: TInstallMode):Boolean;
     Function FileNewer(const Src,Dest : String) : Boolean;
     Procedure LogSearchPath(APackage: TPackage;const ASearchPathName:string;Path:TConditionalStrings; ACPU:TCPU;AOS:TOS);
     Function FindFileInPath(APackage: TPackage; Path:TConditionalStrings; AFileName:String; var FoundPath:String;ACPU:TCPU;AOS:TOS):Boolean;
@@ -1149,6 +1152,7 @@ Type
     Procedure CmdCreateDir(const DestDir : String);
     Procedure CmdMoveFiles(List : TStrings; Const DestDir : String);
     Procedure CmdDeleteFiles(List : TStrings);
+    procedure CmdDeleteDestFiles(List: TStrings; const DestDir: String);
     Procedure CmdArchiveFiles(List : TStrings; Const ArchiveFile : String);
     Procedure CmdRenameFile(SourceName, DestName : String);
     Procedure CmdRemoveDirs(List: TStrings);
@@ -1182,6 +1186,7 @@ Type
     Procedure MaybeCompile(APackage:TPackage);
     Function ReadyToCompile(APackage:TPackage) : Boolean;
     Procedure Install(APackage : TPackage; AnArchiveFiles: boolean);
+    Procedure UnInstall(APackage : TPackage);
     Procedure Archive(APackage : TPackage);
     Procedure PkgList(PkgList: TStrings; APackage : TPackage);
     Procedure Clean(APackage : TPackage; AllTargets: boolean);
@@ -1193,6 +1198,7 @@ Type
     // Packages commands
     Procedure Compile(Packages : TPackages);
     Procedure Install(Packages : TPackages);
+    Procedure UnInstall(Packages : TPackages);
     Procedure ZipInstall(Packages : TPackages);
     Procedure Archive(Packages : TPackages);
     procedure Manifest(Packages: TPackages);
@@ -1238,6 +1244,7 @@ Type
     Procedure Compile(Force : Boolean); virtual;
     Procedure Clean(AllTargets: boolean); virtual;
     Procedure Install; virtual;
+    Procedure UnInstall; virtual;
     Procedure ZipInstall; virtual;
     Procedure Archive; virtual;
     Procedure Manifest; virtual;
@@ -1548,6 +1555,7 @@ ResourceString
   SErrUnsupportedBuildmode = 'Package does not support this buildmode';
   SErrPackVarNotExist   = 'There is no package variant with the name "%s"';
   SErrEventNotSupported = 'Unsupported event type';
+  SErrorPkgNotInstalled = 'Package "%s" is not installed, can not uninstall.';
 
   SWarnCircularTargetDependency = 'Warning: Circular dependency detected when compiling target %s with target %s';
   SWarnCircularPackageDependency = 'Warning: Circular dependency detected when compiling package %s with package %s';
@@ -1581,6 +1589,7 @@ ResourceString
   SInfoExecutingCommand   = 'Executing command "%s %s"';
   SInfoCreatingOutputDir  = 'Creating output dir "%s"';
   SInfoInstallingPackage  = 'Installing package %s';
+  SInfoUnInstallingPackage= 'Uninstalling package %s';
   SInfoArchivingPackage   = 'Archiving package %s in "%s"';
   SInfoCleaningPackage    = 'Cleaning package %s';
   SInfoManifestPackage    = 'Creating manifest for package %s';
@@ -1645,6 +1654,7 @@ ResourceString
   SHelpCompile        = 'Compile all units in the package(s).';
   SHelpBuild          = 'Build all units in the package(s).';
   SHelpInstall        = 'Install all units in the package(s).';
+  SHelpUnInstall      = 'Uninstall the package(s).';
   SHelpClean          = 'Clean (remove) all units in the package(s).';
   SHelpArchive        = 'Create archive (zip) with all units in the package(s).';
   SHelpHelp           = 'This message.';
@@ -4424,6 +4434,7 @@ begin
   FNotifyEventCollection := TNotifyEventCollection.create([neaBeforeCompile, neaAfterCompile, neaBeforeClean, neaAfterClean,
                                                            neaBeforeInstall, neaAfterInstall, neaBeforeArchive, neaAfterArchive,
                                                            neaBeforeManifest, neaAfterManifest, neaBeforePkgList, neaAfterPkgList,
+                                                           neaBeforeUnInstall, neaAfterUnInstall,
                                                            neaBeforeCreateBuildEngine, neaAfterCreateBuildengine]);
   CreatePackages;
 end;
@@ -4651,6 +4662,8 @@ begin
       FRunMode:=rmManifest
     else if CheckCommand(I,'l','pkglist') then
       FRunMode:=rmPkgList
+    else if CheckCommand(I,'u','uninstall') then
+      FRunMode:=rmUnInstall
     else if CheckOption(I,'h','help') then
       Usage('',[])
     else if Checkoption(I,'C','cpu') then
@@ -4757,6 +4770,7 @@ begin
   LogCmd('compile',SHelpCompile);
   LogCmd('build',SHelpBuild);
   LogCmd('install',SHelpInstall);
+  LogCmd('uninstall',SHelpUnInstall);
   LogCmd('clean',SHelpClean);
   LogCmd('archive',SHelpArchive);
   LogCmd('manifest',SHelpManifest);
@@ -4833,6 +4847,14 @@ begin
 end;
 
 
+procedure TCustomInstaller.UnInstall;
+begin
+  NotifyEventCollection.CallEvents(neaBeforeUnInstall, self);
+  BuildEngine.UnInstall(Packages);
+  NotifyEventCollection.CallEvents(neaAfterUnInstall, self);
+end;
+
+
 procedure TCustomInstaller.Archive;
 begin
   // Force generation of manifest.xml, this is required for the repository
@@ -4883,6 +4905,7 @@ begin
       rmDistClean: Clean(True);
       rmManifest : Manifest;
       rmPkgList : PkgList;
+      rmUnInstall : UnInstall;
     end;
   except
     On E : Exception do
@@ -4939,7 +4962,8 @@ begin
   FExternalPackages:=TPackages.Create(TPackage);
   FNotifyEventCollection := TNotifyEventCollection.create([neaAfterCompile, neaBeforeCompile, neaAfterInstall, neaBeforeInstall,
                                                            neaAfterClean, neaBeforeClean, neaAfterArchive, neaBeforeArchive,
-                                                           neaAfterManifest, neaBeforeManifest, neaAfterPkgList, neaBeforePkgList]);
+                                                           neaAfterManifest, neaBeforeManifest, neaAfterPkgList, neaBeforePkgList,
+                                                           neaBeforeUnInstall, neaAfterUnInstall]);
 {$ifndef NO_THREADING}
   InitCriticalSection(FGeneralCriticalSection);
 {$endif NO_THREADING}
@@ -5435,6 +5459,28 @@ begin
       SysDeleteFile(List[i]);
 end;
 
+procedure TBuildEngine.CmdDeleteDestFiles(List: TStrings; Const DestDir: String);
+
+Var
+  I : Integer;
+  DeleteFileName : String;
+begin
+  // Delete files from their location on disk
+  For I:=0 to List.Count-1 do
+    begin
+      if List.Names[i]<>'' then
+        begin
+          if IsRelativePath(list.ValueFromIndex[i]) then
+            DeleteFileName:=DestDir+list.ValueFromIndex[i]
+          else
+            DeleteFileName:=list.ValueFromIndex[i];
+        end
+      else
+        DeleteFileName:=DestDir+ExtractFileName(list[i]);
+      SysDeleteFile(DeleteFileName);
+    end;
+end;
+
 
 procedure TBuildEngine.CmdArchiveFiles(List: TStrings; Const ArchiveFile: String);
 Var
@@ -6844,7 +6890,7 @@ begin
 end;
 
 
-Function TBuildEngine.InstallPackageFiles(APAckage : TPackage; tt : TTargetTypes; Const Dest : String):Boolean;
+Function TBuildEngine.InstallPackageFiles(APAckage : TPackage; tt : TTargetTypes; Const Dest : String; Const InstallMode: TInstallMode):Boolean;
 Var
   List : TStringList;
 begin
@@ -6855,7 +6901,10 @@ begin
     if (List.Count>0) then
       begin
         Result:=True;
-        CmdCopyFiles(List,Dest,APackage);
+        case InstallMode of
+          imInstall:   CmdCopyFiles(List,Dest,APackage);
+          imUnInstall: CmdDeleteDestFiles(List,Dest);
+        end;
       end;
   Finally
     List.Free;
@@ -6902,7 +6951,7 @@ begin
   end;
 end;
 
-function TBuildEngine.InstallPackageSourceFiles(APAckage : TPackage; stt : TSourceTypes; ttt : TTargetTypes; Const Dest : String): Boolean;
+function TBuildEngine.InstallPackageSourceFiles(APAckage : TPackage; stt : TSourceTypes; ttt : TTargetTypes; Const Dest : String; Const InstallMode: TInstallMode): Boolean;
 Var
   List : TStringList;
 begin
@@ -6913,7 +6962,10 @@ begin
     if (List.Count>0) then
       begin
         Result:=True;
-        CmdCopyFiles(List,Dest,APackage);
+        case InstallMode of
+          imInstall:   CmdCopyFiles(List,Dest,APackage);
+          imUnInstall: CmdDeleteDestFiles(List,Dest);
+        end;
       end;
   Finally
     List.Free;
@@ -6969,10 +7021,10 @@ begin
     D:=FixPath(Defaults.Prefix,true);
     // This is to install the TPackage.Installfiles, which are not related to any
     // target
-    if InstallPackageFiles(APackage,[],D) then
+    if InstallPackageFiles(APackage,[],D, imInstall) then
       B:=true;
     D:=FixPath(APackage.Dictionary.ReplaceStrings(Defaults.UnitInstallDir), True)+APackage.GetPackageUnitInstallDir(Defaults.CPU,Defaults.OS);
-    if InstallPackageFiles(APackage,[ttUnit, ttImplicitUnit],D) then
+    if InstallPackageFiles(APackage,[ttUnit, ttImplicitUnit],D, imInstall) then
       B:=true;
     // By default do not install the examples. Maybe add an option for this later
     //if InstallPackageFiles(APAckage,ttExampleUnit,D) then
@@ -6983,16 +7035,16 @@ begin
       InstallUnitConfigFile(APackage,D);
     // Programs
     D:=IncludeTrailingPathDelimiter(Defaults.BinInstallDir);
-    InstallPackageFiles(APAckage,[ttProgram],D);
+    InstallPackageFiles(APAckage,[ttProgram],D, imInstall);
     //InstallPackageFiles(APAckage,ttExampleProgram,D);
     // Documentation
     D:=FixPath(APackage.Dictionary.ReplaceStrings(Defaults.DocInstallDir), True);
-    InstallPackageSourceFiles(APackage,[stDoc],[],D);
+    InstallPackageSourceFiles(APackage,[stDoc],[],D, imInstall);
     // Examples
     if Defaults.InstallExamples then
       begin
         D:=FixPath(APackage.Dictionary.ReplaceStrings(Defaults.ExamplesInstallDir), True);
-        InstallPackageSourceFiles(APackage,[stExample],[ttExampleProgram,ttExampleUnit],D);
+        InstallPackageSourceFiles(APackage,[stExample],[ttExampleProgram,ttExampleUnit],D, imInstall);
       end;
     // Done.
     APackage.FTargetState:=tsInstalled;
@@ -7009,6 +7061,61 @@ begin
 end;
 
 
+procedure TBuildEngine.UnInstall(APackage: TPackage);
+Var
+  D : String;
+begin
+  CheckDependencies(APackage, False);
+  ResolvePackagePaths(APackage);
+  APackage.SetDefaultPackageVariant;
+  If (Apackage.State<>tsInstalled) then
+    begin
+    Error(SErrorPkgNotInstalled,[APackage.Name]);
+    exit;
+    end;
+  Log(vlCommand,SInfoUnInstallingPackage,[APackage.Name]);
+
+  //DoBeforeUnInstall(APackage);
+
+  // units
+  AddPackageMacrosToDictionary(APackage, APackage.Dictionary);
+  GlobalDictionary.AddVariable('unitinstalldir', FixPath(APackage.Dictionary.ReplaceStrings(Defaults.UnitInstallDir), False));
+  GlobalDictionary.AddVariable('packageunitinstalldir',APackage.GetPackageUnitInstallDir(Defaults.CPU,Defaults.OS));
+
+  D:=FixPath(Defaults.Prefix,true);
+  // This is to uninstall the TPackage.Installfiles, which are not related to any
+  // target
+  InstallPackageFiles(APackage,[],D,imUnInstall);
+  D:=FixPath(APackage.Dictionary.ReplaceStrings(Defaults.UnitInstallDir), True)+APackage.GetPackageUnitInstallDir(Defaults.CPU,Defaults.OS);
+  InstallPackageFiles(APackage,[ttUnit, ttImplicitUnit],D, imUnInstall);
+  SysDeleteDirectory(D);
+
+  // Unit (dependency) configuration
+  D:=FixPath(APackage.Dictionary.ReplaceStrings(GetUnitConfigFilesInstallDir(Defaults.BaseInstallDir)), True);
+  SysDeleteFile(D+APackage.Name+FpmkExt);
+
+  // Programs
+  D:=IncludeTrailingPathDelimiter(Defaults.BinInstallDir);
+  InstallPackageFiles(APAckage,[ttProgram],D, imUnInstall);
+  SysDeleteDirectory(D);
+  // Documentation
+  D:=FixPath(APackage.Dictionary.ReplaceStrings(Defaults.DocInstallDir), True);
+  InstallPackageSourceFiles(APackage,[stDoc],[],D, imUnInstall);
+  SysDeleteDirectory(D);
+  // Examples
+  if Defaults.InstallExamples then
+    begin
+      D:=FixPath(APackage.Dictionary.ReplaceStrings(Defaults.ExamplesInstallDir), True);
+      InstallPackageSourceFiles(APackage,[stExample],[ttExampleProgram,ttExampleUnit],D, imUnInstall);
+      SysDeleteDirectory(D);
+    end;
+  // Done.
+  APackage.FTargetState:=tsNeutral;
+
+  //DoAfterUnInstall(APackage);
+end;
+
+
 procedure TBuildEngine.DoBeforeArchive(APackage: TPackage);
 begin
   ExecuteCommands(APackage.Commands,caBeforeArchive);
@@ -7417,6 +7524,21 @@ begin
 end;
 
 
+procedure TBuildEngine.UnInstall(Packages: TPackages);
+Var
+  I : Integer;
+  P : TPackage;
+begin
+  NotifyEventCollection.CallEvents(neaBeforeUnInstall, Self);
+  For I:=0 to Packages.Count-1 do
+    begin
+      P:=Packages.PackageItems[i];
+      UnInstall(P);
+    end;
+  NotifyEventCollection.CallEvents(neaAfterUnInstall, Self);
+end;
+
+
 procedure TBuildEngine.Archive(Packages: TPackages);
 Var
   I : Integer;

+ 45 - 0
packages/fppkg/src/pkgcommands.pp

@@ -83,6 +83,13 @@ type
     Procedure Execute;override;
   end;
 
+  { TCommandUnInstall }
+
+  TCommandUnInstall = Class(TPackagehandler)
+  Public
+    Procedure Execute;override;
+  end;
+
   { TCommandClean }
 
   TCommandClean = Class(TPackagehandler)
@@ -121,6 +128,43 @@ type
 var
   DependenciesDepth: integer;
 
+{ TCommandUnInstall }
+
+procedure TCommandUnInstall.Execute;
+var
+  AvailP: TFPPackage;
+  APackage: TFPPackage;
+begin
+  if PackageName<>'' then
+    begin
+      if (PackageName=CmdLinePackageName) then
+        begin
+          ExecuteAction(PackageName,'unzip');
+        end
+      else if (PackageName<>CurrentDirPackageName) then
+        begin
+          AvailP:=AvailableRepository.FindPackage(PackageName);
+          if not assigned(AvailP) then
+            begin
+              APackage := InstalledRepository.FindPackage(PackageName);
+              if assigned(APackage) and (APackage.SourcePath<>'') then
+                begin
+                  AvailP := AvailableRepository.AddPackage(PackageName);
+                  AvailP.Assign(APackage);
+                  // The package won't be recompiled, but should be handled as such.
+                  AvailP.RecompileBroken:=true;
+                end
+              else
+                begin
+                  // The package is not available locally, download and unzip it.
+                  ExecuteAction(PackageName,'unzip');
+                end;
+            end;
+        end;
+    end;
+  ExecuteAction(PackageName,'fpmakeuninstall');
+end;
+
 { TCommandListSettings }
 
 procedure TCommandListSettings.Execute;
@@ -535,6 +579,7 @@ initialization
   RegisterPkgHandler('compile',TCommandCompile);
   RegisterPkgHandler('build',TCommandBuild);
   RegisterPkgHandler('install',TCommandInstall);
+  RegisterPkgHandler('uninstall',TCommandUnInstall);
   RegisterPkgHandler('clean',TCommandClean);
   RegisterPkgHandler('archive',TCommandArchive);
   RegisterPkgHandler('installdependencies',TCommandInstallDependencies);

+ 13 - 0
packages/fppkg/src/pkgfpmake.pp

@@ -58,6 +58,12 @@ type
     Procedure Execute;override;
   end;
 
+  { TFPMakeRunnerUnInstall }
+
+  TFPMakeRunnerUnInstall = Class(TFPMakeRunner)
+  Public
+    Procedure Execute;override;
+  end;
 
   { TFPMakeRunnerClean }
 
@@ -381,6 +387,12 @@ begin
 end;
 
 
+procedure TFPMakeRunnerUnInstall.Execute;
+begin
+  RunFPMake('uninstall');
+end;
+
+
 procedure TFPMakeRunnerClean.Execute;
 begin
   RunFPMake('clean');
@@ -404,6 +416,7 @@ initialization
   RegisterPkgHandler('fpmakecompile',TFPMakeRunnerCompile);
   RegisterPkgHandler('fpmakebuild',TFPMakeRunnerBuild);
   RegisterPkgHandler('fpmakeinstall',TFPMakeRunnerInstall);
+  RegisterPkgHandler('fpmakeuninstall',TFPMakeRunnerUnInstall);
   RegisterPkgHandler('fpmakeclean',TFPMakeRunnerClean);
   RegisterPkgHandler('fpmakemanifest',TFPMakeRunnerManifest);
   RegisterPkgHandler('fpmakearchive',TFPMakeRunnerArchive);

+ 51 - 0
rtl/Makefile

@@ -402,6 +402,9 @@ endif
 ifeq ($(FULL_TARGET),m68k-amiga)
 override TARGET_DIRS+=amiga
 endif
+ifeq ($(FULL_TARGET),m68k-atari)
+override TARGET_DIRS+=atari
+endif
 ifeq ($(FULL_TARGET),m68k-openbsd)
 override TARGET_DIRS+=openbsd
 endif
@@ -1773,6 +1776,9 @@ endif
 ifeq ($(FULL_TARGET),m68k-amiga)
 TARGET_DIRS_AMIGA=1
 endif
+ifeq ($(FULL_TARGET),m68k-atari)
+TARGET_DIRS_ATARI=1
+endif
 ifeq ($(FULL_TARGET),m68k-openbsd)
 TARGET_DIRS_OPENBSD=1
 endif
@@ -2862,6 +2868,51 @@ amiga:
 	$(MAKE) -C amiga all
 .PHONY: amiga_all amiga_debug amiga_smart amiga_release amiga_units amiga_examples amiga_shared amiga_install amiga_sourceinstall amiga_exampleinstall amiga_distinstall amiga_zipinstall amiga_zipsourceinstall amiga_zipexampleinstall amiga_zipdistinstall amiga_clean amiga_distclean amiga_cleanall amiga_info amiga_makefiles amiga
 endif
+ifdef TARGET_DIRS_ATARI
+atari_all:
+	$(MAKE) -C atari all
+atari_debug:
+	$(MAKE) -C atari debug
+atari_smart:
+	$(MAKE) -C atari smart
+atari_release:
+	$(MAKE) -C atari release
+atari_units:
+	$(MAKE) -C atari units
+atari_examples:
+	$(MAKE) -C atari examples
+atari_shared:
+	$(MAKE) -C atari shared
+atari_install:
+	$(MAKE) -C atari install
+atari_sourceinstall:
+	$(MAKE) -C atari sourceinstall
+atari_exampleinstall:
+	$(MAKE) -C atari exampleinstall
+atari_distinstall:
+	$(MAKE) -C atari distinstall
+atari_zipinstall:
+	$(MAKE) -C atari zipinstall
+atari_zipsourceinstall:
+	$(MAKE) -C atari zipsourceinstall
+atari_zipexampleinstall:
+	$(MAKE) -C atari zipexampleinstall
+atari_zipdistinstall:
+	$(MAKE) -C atari zipdistinstall
+atari_clean:
+	$(MAKE) -C atari clean
+atari_distclean:
+	$(MAKE) -C atari distclean
+atari_cleanall:
+	$(MAKE) -C atari cleanall
+atari_info:
+	$(MAKE) -C atari info
+atari_makefiles:
+	$(MAKE) -C atari makefiles
+atari:
+	$(MAKE) -C atari all
+.PHONY: atari_all atari_debug atari_smart atari_release atari_units atari_examples atari_shared atari_install atari_sourceinstall atari_exampleinstall atari_distinstall atari_zipinstall atari_zipsourceinstall atari_zipexampleinstall atari_zipdistinstall atari_clean atari_distclean atari_cleanall atari_info atari_makefiles atari
+endif
 ifdef TARGET_DIRS_PALMOS
 palmos_all:
 	$(MAKE) -C palmos all

+ 1 - 0
rtl/Makefile.fpc

@@ -44,6 +44,7 @@ dirs_mipsel_android=android
 dirs_jvm_android=android/jvm
 dirs_msdos=msdos
 dirs_aros=aros
+dirs_atari=atari
 
 [install]
 fpcpackage=y

+ 1 - 1
rtl/android/dlandroid.inc

@@ -2,7 +2,7 @@
 // On Android the dladdr() function does not return full path to modules.
 // Emulate dladdr() by reading the /proc/self/maps to get full path to modules.
 
-var
+threadvar
   _ModuleName: ansistring;
 
 function dladdr(Lib: pointer; info: Pdl_info): Longint; cdecl;

+ 8 - 0
rtl/atari/Makefile

@@ -2936,13 +2936,18 @@ prt0$(OEXT) : prt0.as
 $(SYSTEMUNIT)$(PPUEXT) : $(SYSTEMUNIT).pp $(SYSDEPS)
 	$(COMPILER) -Us -Sg $(SYSTEMUNIT).pp $(REDIR)
 uuchar$(PPUEXT): $(SYSTEMUNIT)$(PPUEXT) $(INC)/uuchar.pp
+	$(COMPILER) $(INC)/uuchar.pp
 objpas$(PPUEXT): $(OBJPASDIR)/objpas.pp $(INC)/except.inc $(SYSTEMUNIT)$(PPUEXT)
 	$(COMPILER) -I$(OBJPASDIR) $(OBJPASDIR)/objpas.pp $(REDIR)
 strings$(PPUEXT) : $(INC)/strings.pp $(INC)/stringsi.inc \
 		   $(PROCINC)/strings.inc $(PROCINC)/stringss.inc \
 		   $(SYSTEMUNIT)$(PPUEXT)
+	$(COMPILER) $(INC)/strings.pp
+iso7185$(PPUEXT) : $(INC)/iso7185.pp $(SYSTEMUNIT)$(PPUEXT)
+	$(COMPILER) $(INC)/iso7185.pp
 dos$(PPUEXT) : dos.pp $(INC)/filerec.inc $(INC)/textrec.inc strings$(PPUEXT) \
 	       $(SYSTEMUNIT)$(PPUEXT)
+	$(COMPILER) dos.pp
 objects$(PPUEXT) : $(INC)/objects.pp dos$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
 sysutils$(PPUEXT) : sysutils.pp $(wildcard $(OBJPASDIR)/sysutils/*.inc) \
 		    objpas$(PPUEXT) dos$(PPUEXT) sysconst$(PPUEXT)
@@ -2975,9 +2980,12 @@ dateutil$(PPUEXT) : $(OBJPASDIR)/dateutil.pp
 macpas$(PPUEXT) : $(INC)/macpas.pp objpas$(PPUEXT) math$(PPUEXT)
 	$(COMPILER) $(INC)/macpas.pp $(REDIR)
 ucomplex$(PPUEXT): $(INC)/ucomplex.pp math$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
+	$(COMPILER) $(INC)/ucomplex.pp
 getopts$(PPUEXT) : $(INC)/getopts.pp $(SYSTEMUNIT)$(PPUEXT)
+	$(COMPILER) $(INC)/getopts.pp
 heaptrc$(PPUEXT) : $(INC)/heaptrc.pp $(SYSTEMUNIT)$(PPUEXT)
 	$(COMPILER) -Sg $(INC)/heaptrc.pp $(REDIR)
 charset$(PPUEXT) : $(INC)/charset.pp $(SYSTEMUNIT)$(PPUEXT)
+	$(COMPILER) $(INC)/charset.pp
 cpall$(PPUEXT): $(RTL)/charmaps/cpall.pas system$(PPUEXT) charset$(PPUEXT)
 	$(COMPILER) -Fu$(INC) -Fi$(RTL)/charmaps $(RTL)/charmaps/cpall.pas

+ 11 - 1
rtl/atari/Makefile.fpc

@@ -11,7 +11,7 @@ units=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings \
       dos heaptrc lineinfo ctypes \
       sysutils fgl classes math typinfo \
       charset cpall getopts  \
-      types rtlconsts sysconst 
+      types rtlconsts sysconst
 implicitunits=cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 \
       cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852
 # \
@@ -90,6 +90,7 @@ $(SYSTEMUNIT)$(PPUEXT) : $(SYSTEMUNIT).pp $(SYSDEPS)
         $(COMPILER) -Us -Sg $(SYSTEMUNIT).pp $(REDIR)
 
 uuchar$(PPUEXT): $(SYSTEMUNIT)$(PPUEXT) $(INC)/uuchar.pp
+	$(COMPILER) $(INC)/uuchar.pp
 
 objpas$(PPUEXT): $(OBJPASDIR)/objpas.pp $(INC)/except.inc $(SYSTEMUNIT)$(PPUEXT)
         $(COMPILER) -I$(OBJPASDIR) $(OBJPASDIR)/objpas.pp $(REDIR)
@@ -97,6 +98,10 @@ objpas$(PPUEXT): $(OBJPASDIR)/objpas.pp $(INC)/except.inc $(SYSTEMUNIT)$(PPUEXT)
 strings$(PPUEXT) : $(INC)/strings.pp $(INC)/stringsi.inc \
                    $(PROCINC)/strings.inc $(PROCINC)/stringss.inc \
                    $(SYSTEMUNIT)$(PPUEXT)
+	$(COMPILER) $(INC)/strings.pp
+
+iso7185$(PPUEXT) : $(INC)/iso7185.pp $(SYSTEMUNIT)$(PPUEXT)
+        $(COMPILER) $(INC)/iso7185.pp
 
 #
 # System Dependent Units
@@ -112,6 +117,7 @@ strings$(PPUEXT) : $(INC)/strings.pp $(INC)/stringsi.inc \
 
 dos$(PPUEXT) : dos.pp $(INC)/filerec.inc $(INC)/textrec.inc strings$(PPUEXT) \
                $(SYSTEMUNIT)$(PPUEXT)
+	$(COMPILER) dos.pp
 
 #crt$(PPUEXT) : crt.pas $(INC)/textrec.inc $(SYSTEMUNIT)$(PPUEXT)
 
@@ -177,15 +183,19 @@ macpas$(PPUEXT) : $(INC)/macpas.pp objpas$(PPUEXT) math$(PPUEXT)
 #
 
 ucomplex$(PPUEXT): $(INC)/ucomplex.pp math$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
+	$(COMPILER) $(INC)/ucomplex.pp
 
 getopts$(PPUEXT) : $(INC)/getopts.pp $(SYSTEMUNIT)$(PPUEXT)
+	$(COMPILER) $(INC)/getopts.pp
 
 heaptrc$(PPUEXT) : $(INC)/heaptrc.pp $(SYSTEMUNIT)$(PPUEXT)
         $(COMPILER) -Sg $(INC)/heaptrc.pp $(REDIR)
 
 #lineinfo$(PPUEXT) : $(INC)/lineinfo.pp $(SYSTEMUNIT)$(PPUEXT)
+#        $(COMPILER) $(INC)/lineinfo.pp
 
 charset$(PPUEXT) : $(INC)/charset.pp $(SYSTEMUNIT)$(PPUEXT)
+	$(COMPILER) $(INC)/charset.pp
 
 cpall$(PPUEXT): $(RTL)/charmaps/cpall.pas system$(PPUEXT) charset$(PPUEXT)
         $(COMPILER) -Fu$(INC) -Fi$(RTL)/charmaps $(RTL)/charmaps/cpall.pas

+ 1 - 0
rtl/win/sysos.inc

@@ -111,6 +111,7 @@ const
     ERROR_DISK_FULL = 112;
     ERROR_DIR_NOT_EMPTY = 145;
     ERROR_ALREADY_EXISTS = 183;
+    ERROR_FILENAME_EXCED_RANGE = 206;
 
     EXCEPTION_MAXIMUM_PARAMETERS = 15;
 

+ 73 - 0
rtl/win64/buildrtl.lpi

@@ -0,0 +1,73 @@
+<?xml version="1.0"?>
+<CONFIG>
+  <ProjectOptions>
+    <Version Value="9"/>
+    <PathDelim Value="\"/>
+    <General>
+      <Flags>
+        <MainUnitHasUsesSectionForAllUnits Value="False"/>
+        <MainUnitHasCreateFormStatements Value="False"/>
+        <MainUnitHasTitleStatement Value="False"/>
+        <Runnable Value="False"/>
+        <LRSInOutputDirectory Value="False"/>
+      </Flags>
+      <SessionStorage Value="InProjectDir"/>
+      <MainUnit Value="0"/>
+      <Title Value="buildrtl"/>
+    </General>
+    <VersionInfo>
+      <StringTable ProductVersion=""/>
+    </VersionInfo>
+    <BuildModes Count="1">
+      <Item1 Name="default" Default="True"/>
+    </BuildModes>
+    <PublishOptions>
+      <Version Value="2"/>
+      <IgnoreBinaries Value="False"/>
+      <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
+      <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/>
+    </PublishOptions>
+    <RunParams>
+      <local>
+        <FormatVersion Value="1"/>
+        <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
+      </local>
+    </RunParams>
+    <Units Count="1">
+      <Unit0>
+        <Filename Value="buildrtl.pp"/>
+        <IsPartOfProject Value="True"/>
+        <UnitName Value="buildrtl"/>
+      </Unit0>
+    </Units>
+  </ProjectOptions>
+  <CompilerOptions>
+    <Version Value="11"/>
+    <PathDelim Value="\"/>
+    <SearchPaths>
+      <IncludeFiles Value="..\inc;..\x86_64;..\win;..\win\wininc;..\objpas\classes;..\objpas\sysutils;..\objpas"/>
+      <OtherUnitFiles Value="..\objpas;..\objpas\classes;..\objpas\sysutils;..\inc;..\win;..\x86_64"/>
+      <UnitOutputDirectory Value="..\units\x86_64-win64"/>
+    </SearchPaths>
+    <Parsing>
+      <Style Value="2"/>
+      <SyntaxOptions>
+        <UseAnsiStrings Value="False"/>
+      </SyntaxOptions>
+    </Parsing>
+    <Other>
+      <Verbosity>
+        <ShowNotes Value="False"/>
+        <ShowHints Value="False"/>
+      </Verbosity>
+      <ConfigFile>
+        <DontUseConfigFile Value="True"/>
+      </ConfigFile>
+      <CompilerPath Value="$(CompPath)"/>
+      <ExecuteBefore>
+        <Command Value="cmd.exe /c &quot;if not exist ..\units\x86_64-win64 mkdir ..\units\x86_64-win64&quot;"/>
+        <ShowAllMessages Value="True"/>
+      </ExecuteBefore>
+    </Other>
+  </CompilerOptions>
+</CONFIG>

+ 1 - 0
rtl/win64/signals.pp

@@ -345,6 +345,7 @@ interface
 
 implementation
 
+{$asmmode att}
 
 const
      EXCEPTION_ACCESS_VIOLATION = $c0000005;

+ 2 - 0
rtl/win64/system.pp

@@ -100,6 +100,8 @@ Const
 
 implementation
 
+{$asmmode att}
+
 var
   SysInstance : qword;public;
 

+ 2 - 0
rtl/x86_64/cpu.pp

@@ -41,6 +41,8 @@ unit cpu;
 
   implementation
 
+{$asmmode att}
+
     var
       _AESSupport,
       _AVXSupport,

+ 1 - 0
utils/fppkg/fppkg.pp

@@ -104,6 +104,7 @@ begin
   Writeln('  build             Build package');
   Writeln('  compile           Compile package');
   Writeln('  install           Install package');
+  Writeln('  uninstall         Uninstall package');
   Writeln('  clean             Clean package');
   Writeln('  archive           Create archive of package');
   Writeln('  download          Download package');