Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        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);
        }
Exemple #6
0
 IsReferenceAWindowedApp(
     CollatedFile reference)
 {
     if (null == reference.SubDirectory)
     {
         return(false);
     }
     return(reference.SubDirectory.Parse().Contains(".app"));
 }
Exemple #7
0
        IncludeFile(
            string parameterizedFilePath,
            string subdir,
            CollatedFile reference,
            bool isExecutable = false)
        {
            var tokenString = this.CreateTokenizedString(parameterizedFilePath);

            return(this.IncludeFile(tokenString, subdir, reference, isExecutable));
        }
Exemple #8
0
        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));
        }
Exemple #9
0
        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);
            }
        }
Exemple #10
0
        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);
            }
        }
Exemple #11
0
        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);
        }
Exemple #12
0
        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);
        }
Exemple #13
0
        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);
        }