Rev 1511 | Rev 3572 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
######################################################################### Copyright (C) 2007 ERG Limited, All rights reserved## Module name : jats.sh# Module type : Makefile system# Compiler(s) : n/a# Environment(s): jats## Description : This package extends the JATS toolset at build time# It provides additional directives to the JATS makefiles# to simplify the directives.## The directive matches up with a run-time tool to# do the bulk of the work.## Operation : This package adds the JATS directive MakeDebianPackage# When used the directive will use GenerateFiles to invoke# a script (DebianPackager.pl) to actually do the hard work.## Syntax : MakeDebianPackage (<platforms>, Options+);# Where Options may be one of:# --Script=DebianPackagerScript - Mandatory. Name of a the debian script##......................................................................#require 5.006_001;#use strict;use warnings;#-------------------------------------------------------------------------------# Function : MakeDebianPackage## Description : Create a Debian Package## Inputs : PkgName - Symbolic Package Name# --Script=Name - Script to use in the packaging process# --Name=Name - Debian Package name(optional)# --Variant=Text - Package Variant(optional)## Returns :#sub MakeDebianPackage{my( $platforms, @elements ) = @_;Debug2( "MakeDebianPackage($platforms, @elements)" );return if ( ! ActivePlatform($platforms) );my $build_name = $::ScmBuildPackage;my $build_version = $::ScmBuildVersionFull;my $build_variant = '';my $script_set=0;my $name_set=0;my $variant_set=0;## Take the project name and convert it into a full path#my $script;## Collect user arguments# They are all processed within the toolset#foreach ( @elements ){if ( m/^--Script=(.+)/ ) {$script = $1;$script_set++;} elsif ( m/^--Name=(.+)/ ) {$build_name = $1;$name_set++;} elsif ( m/^--Variant=(.+)/ ) {$build_variant = $1;$variant_set++;} elsif ( m/^--/ ) {Error("MakeDebianPackage. Unknown option: $_");} else {Error("MakeDebianPackage. Unknown argument: $_");}}## Sanity test#Error ("MakeDebianPackage: Script name not defined") unless ( $script );Error ("MakeDebianPackage: --Script option can only be used once") if ( $script_set > 1 );Error ("MakeDebianPackage: --Name option can only be used once") if ( $name_set > 1 );Error ("MakeDebianPackage: --Variant option can only be used once") if ( $variant_set > 1 );## Build up the build name# Add variant to base name.#if ( $build_variant ){$build_name .= '-' . $build_variant;}## Sanity check the package name and version# Debian has strict requirements than JATS# Name: Lower case letters (a-z), digits (0-9), plus (+) and minus (-) signs, and periods (.).# Release Manager does not allow '.'# Version: alphanumerics and the characters . + - : (full stop, plus, hyphen, colon) and should start with a digit## Allow ( and cleanup )# ERGxxxxx -> erg-xxx# VIXxxxxx -> vix-xxx# Whitespace -> -# _ -> -# Remove multiple '-' characters# Lowercase all text#my $cvt = 0;$cvt = 1 if ( $build_name =~ s/^ERG/erg-/ );$cvt = 1 if ( $build_name =~ s/^VIX/vix-/ );$cvt = 1 if ( $build_name =~ s~\s~-~g );$cvt = 1 if ( $build_name =~ s~_~-~g );$cvt = 1 if ( $build_name =~ tr/-//s );if ( $build_name =~ m/[A-Z]/ ){$cvt = 1;$build_name = lc $build_name;}Warning ("Package Name converted to debian friendly form: $build_name")if ( $cvt );unless ( $build_name =~ m/^[a-z][-+a-z0-9]+$/ ){Error ("Package Name does not conform to Debian Requirements","Must be at least two characters long","Must start with an alphabetic character","Must only contain: (a-z) (0-9) and -","Provided Name: $::ScmBuildPackage");}unless ( $::ScmBuildVersionFull =~ m/^[0-9][-+:.A-Za-z0-9]+$/ ){Error ("Package Version does not conform to Debian Requirements","Must only contain: (a-zA-Z) (0-9), - and .","Must sart with a number",);}## Create the name of the target package# The form of the name is of a fixed form.## Note: "_" used since this is the format of dpkg-name# Note: dpkg-name generates: Name _ Version _ Architecture##my $DebianPkgName = "${build_name}_${::ScmBuildVersionFull}_${::ScmPlatform}.deb";## Simply use Generate Files# With lots of options#Src ( '*', $script );GenerateFiles ('*', "--Tool=DebianPackager.pl", # Associated tool"-DebianPackage=--Prerequisite($script)", # Packager script"--AutoGenerate", # Build when needed"--UnknownPreq", # Always build"--Clean", # Script supports jats clean"--Text=Debian Package", # Display when building'--Var(BuildName)', # Target Package'--Var(BuildVersion)', # Target Version'--Var(Platform)', # Target platform'--Var(Product)', # Target product'--Var(Target)', # Underlying Target'--Var(Type)', # Build Type'--Var(Verbose)', # Verbose operation'--Var(InterfaceDir)', # Interface Directory'--Var(InterfaceIncDir)','--Var(InterfaceLibDir)','--Var(InterfaceBinDir)','--Var(LibDir)', # My Artifacts'--Var(BinDir)','--Var(PackageDir)', # My Package'--Var(PackageLibDir)', # My Package Library'--Var(PackageBinDir)', # My Package Bin'--Var(PackagePkgDir)', # My Package/pkg.target'--Var(LocalIncDir)', # Installed Artifacts'--Var(LocalLibDir)','--Var(LocalBinDir)',"-Name=$build_name", # Base Package Name"-Variant=$build_variant", # Variant Name"-Output=--GeneratedProg($DebianPkgName)",# Specify output file);## The Packager has created a binary in the 'PROG' directory# Lets package it as a program.#PackageProg ('*', $DebianPkgName );}1;