From d63f6ad9d55d7b3cc5acc42cc9c634b4a8d9b0c0 Mon Sep 17 00:00:00 2001 From: joost Date: Mon, 31 Dec 2018 00:15:33 +0000 Subject: [PATCH] * Do not try to write a fppkg compiler-configuration file when the fppkg.cfg file has not been written, but raise an error instead. git-svn-id: trunk@40711 - --- packages/fppkg/src/pkgfppkg.pp | 18 +++++++---- packages/fppkg/src/pkgmessages.pp | 1 + packages/fppkg/src/pkgoptions.pp | 54 +++++++++++++++++++------------ 3 files changed, 46 insertions(+), 27 deletions(-) diff --git a/packages/fppkg/src/pkgfppkg.pp b/packages/fppkg/src/pkgfppkg.pp index 6af2379da8..b021fb0b99 100644 --- a/packages/fppkg/src/pkgfppkg.pp +++ b/packages/fppkg/src/pkgfppkg.pp @@ -211,18 +211,22 @@ begin if FileExists(S) then begin pkgglobals.Log(llDebug,SLogLoadingCompilerConfig,[S]); - FCompilerOptions.LoadCompilerFromFile(S) + FCompilerOptions.LoadCompilerFromFile(S); + if FCompilerOptions.SaveInifileChanges then + // The file is in an old format, try to update the file but ignore + // any failures. + FCompilerOptions.SaveCompilerToFile(S); end else begin - // Generate a default configuration if it doesn't exists - if FOptions.GlobalSection.CompilerConfig='default' then + if FCompilerOptions.SaveInifileChanges then + // A new fppkg.cfg has been created, try to create a new compiler-configuration + // file too. begin pkgglobals.Log(llDebug,SLogGeneratingCompilerConfig,[S]); FCompilerOptions.InitCompilerDefaults; - FCompilerOptions.SaveCompilerToFile(S); - if FCompilerOptions.SaveInifileChanges then - FCompilerOptions.SaveCompilerToFile(S); + if not FCompilerOptions.SaveCompilerToFile(S) then + Error(SErrMissingCompilerConfig,[S]); end else Error(SErrMissingCompilerConfig,[S]); @@ -237,6 +241,8 @@ begin pkgglobals.Log(llDebug,SLogLoadingFPMakeCompilerConfig,[S]); FFPMakeCompilerOptions.LoadCompilerFromFile(S); if FFPMakeCompilerOptions.SaveInifileChanges then + // The file is in an old format, try to update the file but ignore + // any failures. FFPMakeCompilerOptions.SaveCompilerToFile(S); end else diff --git a/packages/fppkg/src/pkgmessages.pp b/packages/fppkg/src/pkgmessages.pp index 20fac30303..0d3af02fb9 100644 --- a/packages/fppkg/src/pkgmessages.pp +++ b/packages/fppkg/src/pkgmessages.pp @@ -163,6 +163,7 @@ Resourcestring SDbgPackageInstallRequired = 'Installation of package "%s" required for repository "%s"'; SWarnBrokenAfterReinstall = 'Package %s is still broken, even after re-installation. (%s)'; + SWarnFailedToWriteCompConf = 'Failed to write compiler-configuration file "%s": %s'; SProgrReinstallDependent = 'Re-install packages which are dependent on just installed packages'; SProgrInstallDependencies = 'Install dependencies'; diff --git a/packages/fppkg/src/pkgoptions.pp b/packages/fppkg/src/pkgoptions.pp index 041c6db8e0..9534778f51 100644 --- a/packages/fppkg/src/pkgoptions.pp +++ b/packages/fppkg/src/pkgoptions.pp @@ -246,7 +246,7 @@ Type Destructor Destroy; override; Procedure InitCompilerDefaults; Procedure LoadCompilerFromFile(const AFileName : String); - Procedure SaveCompilerToFile(const AFileName : String); + function SaveCompilerToFile(const AFileName : String): Boolean; procedure LogValues(ALogLevel: TLogLevel; const ACfgName:string); procedure UpdateLocalRepositoryOption(FppkgOptions: TFppkgOptions); procedure CheckCompilerValues; @@ -984,6 +984,7 @@ begin FOptionParser := TTemplateParser.Create; FOptionParser.Values['AppConfigDir'] := GetFppkgConfigDir(false); FOptionParser.Values['UserDir'] := GetUserDir; + FSaveInifileChanges := True; {$ifdef unix} FLocalInstallDir:='{LocalPrefix}'+'lib'+PathDelim+'fpc'+PathDelim+'{CompilerVersion}'+PathDelim; FGlobalInstallDir:='{GlobalPrefix}'+'lib'+PathDelim+'fpc'+PathDelim+'{CompilerVersion}'+PathDelim; @@ -1175,6 +1176,10 @@ begin FSaveInifileChanges:=true; if (FConfigVersion>CurrentConfigVersion) then Error(SErrUnsupportedConfigVersion,[AFileName]); + end + else + begin + FSaveInifileChanges:=False; end; GlobalPrefix:=ReadString(SDefaults,KeyGlobalPrefix,FGlobalPrefix); LocalPrefix:=ReadString(SDefaults,KeyLocalPrefix,FLocalPrefix); @@ -1191,30 +1196,37 @@ begin end; -procedure TCompilerOptions.SaveCompilerToFile(const AFileName: String); +function TCompilerOptions.SaveCompilerToFile(const AFileName: String): Boolean; Var Ini : TIniFile; begin - if FileExists(AFileName) then - BackupFile(AFileName); - Ini:=TIniFile.Create(AFileName); + Result := False; try - With Ini do - begin - WriteInteger(SDefaults,KeyConfigVersion,CurrentConfigVersion); - WriteString(SDefaults,KeyGlobalPrefix,FGlobalPrefix); - WriteString(SDefaults,KeyLocalPrefix,FLocalPrefix); - WriteString(SDefaults,KeyGlobalInstallDir,FGlobalInstallDir); - WriteString(SDefaults,KeyLocalInstallDir,FLocalInstallDir); - WriteString(SDefaults,KeyCompiler,FCompiler); - WriteString(SDefaults,KeyCompilerOS,OSToString(CompilerOS)); - WriteString(SDefaults,KeyCompilerCPU,CPUtoString(CompilerCPU)); - WriteString(SDefaults,KeyCompilerVersion,FCompilerVersion); - FSaveInifileChanges:=False; - end; - Ini.UpdateFile; - finally - Ini.Free; + if FileExists(AFileName) then + BackupFile(AFileName); + Ini:=TIniFile.Create(AFileName); + try + With Ini do + begin + WriteInteger(SDefaults,KeyConfigVersion,CurrentConfigVersion); + WriteString(SDefaults,KeyGlobalPrefix,FGlobalPrefix); + WriteString(SDefaults,KeyLocalPrefix,FLocalPrefix); + WriteString(SDefaults,KeyGlobalInstallDir,FGlobalInstallDir); + WriteString(SDefaults,KeyLocalInstallDir,FLocalInstallDir); + WriteString(SDefaults,KeyCompiler,FCompiler); + WriteString(SDefaults,KeyCompilerOS,OSToString(CompilerOS)); + WriteString(SDefaults,KeyCompilerCPU,CPUtoString(CompilerCPU)); + WriteString(SDefaults,KeyCompilerVersion,FCompilerVersion); + FSaveInifileChanges:=False; + end; + Ini.UpdateFile; + finally + Ini.Free; + end; + Result := True; + except + on E: Exception do + log(llWarning, SWarnFailedToWriteCompConf, [AFileName, E.Message]); end; end;