* When the source of a package is used as dependency, check that the sources are compiled (+test)

git-svn-id: trunk@35924 -
This commit is contained in:
joost 2017-04-23 19:28:48 +00:00
parent e7c08000d2
commit 445258fa32
2 changed files with 32 additions and 4 deletions

View File

@ -1682,7 +1682,8 @@ ResourceString
SInfoDestDoesNotExist = 'Destination file "%s" does not exist.';
SInfoFallbackBuildmode = 'Buildmode not supported by package, falling back to one by one unit compilation';
SInfoFallbackBuildmodeBU= 'Buildmode not supported by package, falling back to compilation using a buildunit';
SInfoDirectoryNoPackage = 'Found directory "%s" which does not contain a package';
SInfoDirectoryNoPackage = 'Found directory "%s" while searching for package "%s" which does not contain a package';
SInfoSrcDirectoryNoPkg = 'Found source-directory "%s" while searching for package "%s" but the package is not compiled or has the wrong name';
SDbgComparingFileTimes = 'Comparing file "%s" time "%s" to "%s" time "%s".';
SDbgCompilingDependenciesOfTarget = 'Compiling dependencies of target %s';
@ -2811,7 +2812,7 @@ begin
AnUnitConfigFilename:=APackage.Dictionary.ReplaceStrings(AnUnitConfigFilename);
if ABuildEngine.SysFileExists(AnUnitConfigFilename) then
APackage.UnitConfigFileName:=AnUnitConfigFilename
else if not IsPackageSourceLocation then
else
begin
// To avoid that directories which do not contain installed packages
// check that there is an unit-configfile, or Packages.fpc file. (The
@ -2820,8 +2821,22 @@ begin
// Lazarus-source-repositories.
if not ABuildEngine.SysFileExists(ConcatPaths([PackageBaseDir, 'Package.fpc'])) then
begin
Installer.Log(vlInfo,Format(SInfoDirectoryNoPackage,[PackageBaseDir]));
Exit;
if IsPackageSourceLocation then
begin
// There is no way that I know of to confirm that a directory
// contains the compiled sources of the rtl. So we need a
// workaround. This test is skipped in case of the rtl.
if APackage.Name<>'rtl' then
begin
Installer.Log(vlInfo,Format(SInfoSrcDirectoryNoPkg,[PackageBaseDir, APackage.Name]));
Exit;
end;
end
else
begin
Installer.Log(vlInfo,Format(SInfoDirectoryNoPackage,[PackageBaseDir, APackage.Name]));
Exit;
end;
end;
end;

View File

@ -462,6 +462,8 @@ begin
end;
procedure TFullFPCInstallationTests.TestSourceDependency;
var
s: String;
begin
// This is to test if fpmkunit works correctly when a dependency is available
// not as an installed but as a (compiled) source-package. This happens for
@ -475,6 +477,17 @@ begin
RunFppkgIndir(TFullFPCInstallationSetup.GetCurrentTestBasePackagesPath + 'packageb', ['build'], 'create fpmake-executable', 1);
RunFPMakeIndir(ConcatPaths([TFullFPCInstallationSetup.GetCurrentTestBasePackagesPath,'packageb']), ['build'], 'build packageb');
// When there is no .fpm file, fpmake should complain that the package is not
// compiled. (Another possibility is that another packages is mistakenly being
// used, for example when the package-name does not match the directory-name)
// This has to be enforced because without the .fpm, the dependencies are
// not handled.
s := ConcatPaths([TFullFPCInstallationSetup.GetCurrentTestBasePackagesPath,'packagea','packagea-'+TFullFPCInstallationSetup.GetTargetString+'.fpm']);
DeleteFile(ConcatPaths([TFullFPCInstallationSetup.GetCurrentTestBasePackagesPath,'packagea','packagea-'+TFullFPCInstallationSetup.GetTargetString+'.fpm']));
s := RunFPMakeIndir(ConcatPaths([TFullFPCInstallationSetup.GetCurrentTestBasePackagesPath,'packageb']), ['build', '-d'], 'build packageb without fpm', 1);
Check(pos('the package is not compiled', s) > 0, 'Missing .fpm-file detection did not trigger');
Check(pos('Could not find unit directory for dependency package', s) > 0, 'Incorrect error message');
end;
procedure TFullFPCInstallationTests.TestTransmitOptions;