CreateCollatedSymbolicLink( Bam.Core.Module sourceModule, Bam.Core.TokenizedString sourcePath, CollatedFile reference, Bam.Core.TokenizedString subDirectory) { if (null == reference) { throw new Bam.Core.Exception("Collating a symbolic link requires a collated file as reference"); } var copySymlinkModule = Bam.Core.Module.Create <CollatedSymbolicLink>(preInitCallback: module => { module.Macros["CopyDir"] = GenerateSymbolicLinkCopyDestination( module, reference.GeneratedPaths[CollatedObject.Key], subDirectory); }); this.Requires(copySymlinkModule); if (null != reference.SourceModule && null != sourceModule && reference.SourceModule != sourceModule) // in case a different key from the same module is published { // ensuring that non-Native builders set up order-only dependencies for additional published only modules reference.SourceModule.Requires(sourceModule); } copySymlinkModule.SourceModule = sourceModule; copySymlinkModule.SourcePath = sourcePath; copySymlinkModule.Reference = reference; copySymlinkModule.SubDirectory = subDirectory; return(copySymlinkModule); }
IncludeFiles <DependentModule>( string parameterizedFilePath, string subdir, CollatedFile reference, bool isExecutable = false) where DependentModule : Bam.Core.Module, new() { var dependent = Bam.Core.Graph.Instance.FindReferencedModule <DependentModule>(); if (null == dependent) { return(null); } var copyFileModule = this.CreateCollatedFile( dependent, dependent.CreateTokenizedString(parameterizedFilePath), reference, Bam.Core.TokenizedString.CreateVerbatim(subdir)); if (isExecutable) { if (this.IsReferenceAWindowedApp(reference)) { this.AddOSXChangeIDNameForBinary(copyFileModule); } } return(copyFileModule); }
Include <DependentModule>( Bam.Core.PathKey key, string subdir, CollatedFile reference) where DependentModule : Bam.Core.Module, new() { var dependent = Bam.Core.Graph.Instance.FindReferencedModule <DependentModule>(); if (null == dependent) { return(null); } var copyFileModule = this.CreateCollatedFile( dependent, dependent.GeneratedPaths[key], reference, Bam.Core.TokenizedString.CreateVerbatim(subdir)); if (this.IsReferenceAWindowedApp(reference)) { if (C.ConsoleApplication.Key == key) { this.AddOSXChangeIDNameForBinary(copyFileModule); } } else if (this.BuildEnvironment.Platform.Includes(Bam.Core.EPlatform.Linux)) { if ((dependent is C.IDynamicLibrary) && dependent.Macros.Contains("SOName")) { this.CopySONameSymlink(copyFileModule); } } return(copyFileModule); }
CreateCollatedSymbolicLink( Bam.Core.Module sourceModule, Bam.Core.TokenizedString sourcePath, CollatedFile reference, Bam.Core.TokenizedString subDirectory) { if (null == reference) { throw new Bam.Core.Exception("Collating a symbolic link requires a collated file as reference"); } var copySymlinkModule = Bam.Core.Module.Create <CollatedSymbolicLink>(preInitCallback: module => { module.Macros["CopyDir"] = GenerateSymbolicLinkCopyDestination( module, reference.GeneratedPaths[CollatedObject.Key], subDirectory); }); this.Requires(copySymlinkModule); copySymlinkModule.SourceModule = sourceModule; copySymlinkModule.SourcePath = sourcePath; copySymlinkModule.Reference = reference; copySymlinkModule.SubDirectory = subDirectory; return(copySymlinkModule); }
CreateCollatedFile( Bam.Core.Module sourceModule, Bam.Core.TokenizedString sourcePath, CollatedFile reference, Bam.Core.TokenizedString subDirectory) { var copyFileModule = Bam.Core.Module.Create <CollatedFile>(preInitCallback: module => { Bam.Core.TokenizedString referenceFilePath = null; if (null != reference) { referenceFilePath = reference.GeneratedPaths[CollatedObject.Key]; } else { if (!this.GeneratedPaths.ContainsKey(Key)) { this.RegisterGeneratedFile(Key, module.CreateTokenizedString("@dir($(0))", sourcePath)); } } module.Macros["CopyDir"] = GenerateFileCopyDestination( module, referenceFilePath, subDirectory, this.GeneratedPaths[Key]); }); this.Requires(copyFileModule); copyFileModule.SourceModule = sourceModule; copyFileModule.SourcePath = sourcePath; copyFileModule.Reference = reference; copyFileModule.SubDirectory = subDirectory; return(copyFileModule); }
IsReferenceAWindowedApp( CollatedFile reference) { if (null == reference.SubDirectory) { return(false); } return(reference.SubDirectory.Parse().Contains(".app")); }
IncludeFile( string parameterizedFilePath, string subdir, CollatedFile reference, bool isExecutable = false) { var tokenString = this.CreateTokenizedString(parameterizedFilePath); return(this.IncludeFile(tokenString, subdir, reference, isExecutable)); }
CopySONameSymlink( CollatedFile copyFileModule) { if (!this.BuildEnvironment.Platform.Includes(Bam.Core.EPlatform.Linux)) { return; } var copySymlink = this.CreateCollatedSymbolicLink( copyFileModule.SourceModule, copyFileModule.SourceModule.Macros["SOName"], copyFileModule.Reference, copyFileModule.SubDirectory); copySymlink.AssignLinkTarget(copySymlink.CreateTokenizedString("@filename($(0))", copyFileModule.SourcePath)); }
Include <DependentModule>( Bam.Core.PathKey key, string subdir, CollatedFile reference) where DependentModule : Bam.Core.Module, new() { try { var dependent = Bam.Core.Graph.Instance.FindReferencedModule <DependentModule>(); if (null == dependent) { return(null); } var copyFileModule = this.CreateCollatedFile( dependent, dependent.GeneratedPaths[key], reference, Bam.Core.TokenizedString.CreateVerbatim(subdir)); if (this.IsReferenceAWindowedApp(reference)) { if (C.ConsoleApplication.Key == key) { this.AddOSXChangeIDNameForBinary(copyFileModule); } } else if (this.BuildEnvironment.Platform.Includes(Bam.Core.EPlatform.Linux)) { if ((dependent is C.IDynamicLibrary) && dependent.Macros.Contains("SOName")) { this.CopySONameSymlink(copyFileModule); } } return(copyFileModule); } catch (Bam.Core.UnableToBuildModuleException exception) { Bam.Core.Log.Info("Not publishing {0} requested by {1} because {2}, but publishing will continue", typeof(DependentModule).ToString(), this.GetType().ToString(), exception.Message); return(null); } }
AddOSXChangeIDNameForBinary( CollatedFile copyFileModule) { if (!this.BuildEnvironment.Platform.Includes(Bam.Core.EPlatform.OSX)) { return; } var changeIDName = Bam.Core.Module.Create <ChangeNameOSX>(); changeIDName.Source = copyFileModule; changeIDName.Frameworks = this.CopiedFrameworks; this.ChangedNamedBinaries.Add(changeIDName); this.Requires(changeIDName); foreach (var framework in this.CopiedFrameworks) { changeIDName.Requires(framework); } }
CreateCollatedFile( Bam.Core.Module sourceModule, Bam.Core.TokenizedString sourcePath, CollatedFile reference, Bam.Core.TokenizedString subDirectory) { var copyFileModule = Bam.Core.Module.Create <CollatedFile>(preInitCallback: module => { Bam.Core.TokenizedString referenceFilePath = null; if (null != reference) { referenceFilePath = reference.GeneratedPaths[CollatedObject.Key]; } else { if (!this.GeneratedPaths.ContainsKey(Key)) { this.RegisterGeneratedFile(Key, module.CreateTokenizedString("@dir($(0))", sourcePath)); } } module.Macros["CopyDir"] = GenerateFileCopyDestination( module, referenceFilePath, subDirectory, this.GeneratedPaths[Key]); }); this.Requires(copyFileModule); if (null != reference && null != reference.SourceModule && null != sourceModule && reference.SourceModule != sourceModule) // in case a different key (e.g. import library) is published from the same module { // ensuring that non-Native builders set up order-only dependencies for additional published only modules reference.SourceModule.Requires(sourceModule); } copyFileModule.SourceModule = sourceModule; copyFileModule.SourcePath = sourcePath; copyFileModule.Reference = reference; copyFileModule.SubDirectory = subDirectory; return(copyFileModule); }
IncludeFile( Bam.Core.TokenizedString parameterizedFilePath, string subdir, CollatedFile reference, bool isExecutable = false) { var copyFileModule = this.CreateCollatedFile( null, parameterizedFilePath, reference, Bam.Core.TokenizedString.CreateVerbatim(subdir)); if (isExecutable) { if (this.IsReferenceAWindowedApp(reference)) { this.AddOSXChangeIDNameForBinary(copyFileModule); } } return(copyFileModule); }
CreateCollatedDirectory( Bam.Core.Module sourceModule, Bam.Core.TokenizedString sourcePath, CollatedFile reference, Bam.Core.TokenizedString subDirectory) { if (null == reference) { throw new Bam.Core.Exception("Collating a directory requires a collated file as reference"); } // copying a directory must not have a trailing slash on the source directory path // otherwise the leafname ends up being duplicated var fixedSourcePath = this.CreateTokenizedString("@removetrailingseparator($(0))", sourcePath); var copyDirectoryModule = Bam.Core.Module.Create <CollatedDirectory>(preInitCallback: module => { module.Macros["CopyDir"] = GenerateDirectoryCopyDestination( module, reference.GeneratedPaths[CollatedObject.Key], subDirectory, fixedSourcePath); }); this.Requires(copyDirectoryModule); if (null != reference.SourceModule && null != sourceModule && reference.SourceModule != sourceModule) // in case a different key from the same module is published { // ensuring that non-Native builders set up order-only dependencies for additional published only modules reference.SourceModule.Requires(sourceModule); } copyDirectoryModule.SourceModule = sourceModule; copyDirectoryModule.SourcePath = fixedSourcePath; copyDirectoryModule.Reference = reference; copyDirectoryModule.SubDirectory = subDirectory; return(copyDirectoryModule); }