File pre_checkin.pl of Package dtb-source

#!/usr/bin/perl -w

use strict;
use Data::Dumper;

my $spec_in = "dtb.spec.in";

# DTB packages names
my @armv7l_package_list = (
    ['dtb-omap3',      '*omap3*.dts',     "TI OMAP3 based systems"],
    ['dtb-omap4',      '*omap4*.dts',     "TI OMAP4 based systems"],
    ['dtb-omap5',      '*omap5*.dts',     "TI OMAP5 based systems"],
    ['dtb-am335x',     '*am335x*.dts',    "TI AM335x based systems"],
    ['dtb-keystone',   'k2hk-evm.dts',    "TI Keystone based systems"],
    ['dtb-exynos4',    '*exynos4*.dts',   "Samsung Exynos4 based systems"],
    ['dtb-exynos5',    '*exynos5*.dts',   "Samsung Exynos5 based systems"],
    ['dtb-imx5',       '*imx5*.dts',      "Freescale i.MX51 and i.MX53 based systems"],
    ['dtb-imx6',       '*imx6*.dts',      "Freescale i.MX6 based systems"],
    ['dtb-vf6',        '*vf6*.dts',       "Freescale Vybrid VF6xx based systems"],
    ['dtb-tegra2',     '*tegra2*.dts',    "NVidia Tegra2 based systems"],
    ['dtb-tegra3',     '*tegra3*.dts',    "NVidia Tegra3 based systems"],
    ['dtb-tegra114',   'tegra114-*.dts',  "NVidia Tegra4 based systems"],
    ['dtb-tegra124',   'tegra124-*.dts',  "NVidia Tegra K1 based systems"],
    ['dtb-sun4i',      '*sun4i*.dts',     "Allwinner sun4i based systems"],
    ['dtb-sun5i',      '*sun5i*.dts',     "Allwinner sun5i based systems"],
    ['dtb-sun6i',      '*sun6i*.dts',     "Allwinner sun6i based systems"],
    ['dtb-sun7i',      '*sun7i*.dts',     "Allwinner sun7i based systems"],
    ['dtb-sun8i',      '*sun8i*.dts',     "Allwinner sun8i based systems"],
    ['dtb-sun9i',      '*sun9i*.dts',     "Allwinner sun9i based systems"],
    ['dtb-xenvm',      '*xenvm*.dts',     "Xen virtual machines"],
    ['dtb-vexpress',   'vexpress*.dts',   "ARM versatile express machines"],
    ['dtb-ste',        'ste*.dts',        "ST Ericsson based systems"],
    ['dtb-dove',       'dove*.dts',       "Marvell dove based systems"],
    ['dtb-armada-370', 'armada-370*.dts', "Armada 370 based systems"],
    ['dtb-armada-xp',  'armada-xp*.dts',  "Armada XP based systems"],
    ['dtb-rk3',        'rk3*.dts',        "Rockchip RK3xxx based systems"],
    ['dtb-qcom',       'qcom-*.dts',      "Qualcomm Snapdragon based systems"],
    ['dtb-zynq',       'zynq-*.dts',      "Xilinx Zynq based systems"],
);

# DTB packages names
my @armv6l_package_list = (
     ['dtb-bcm2835',   'bcm2835*.dts',   "Raspberry PI B"],
);

# DTB packages names
my @aarch64_package_list = (
     ['dtb-apm-mustang',     'apm/apm-mustang.dts',    "APM X-Gene Mustang board"],
     ['dtb-thunder-88xx',    'cavium/thunder-88xx.dts',   "Cavium ThunderX CN88XX"],
     ['dtb-foundation-v8',   'arm/foundation-v8.dts',  "Foundation-V8A (compatible with Vexpress64)"],
     ['dtb-rtsm_ve-aemv8a',  'arm/rtsm_ve-aemv8a.dts', "RTSM VE AEMv8A board (compatible with Vexpress64)"],
);

sub generate_spec($$$)
{
    my ($main_package, $exclusive_arch, $package_list) = @_;

    open (SPEC, ">$main_package.spec") or die "Unable to open $main_package.spec.\n";
    open (TEMPLATE, "$spec_in") or die "Unable to open $spec_in.\n";

    my $ARCH_RESTRICTIONS = "";
    $ARCH_RESTRICTIONS = "ExclusiveArch:  $exclusive_arch"
        unless ($exclusive_arch eq 'none');

    my $subpkg_desc = "";
    my $subpkg_files = "";
    my $all_supported_dtb = "";
    my $DTS_folder = "linux/arch/arm/boot/dts";
    if ($exclusive_arch =~ /aarch64/) {
	   $DTS_folder = "linux/arch/arm64/boot/dts";
    }

    foreach my $NAME (@$package_list) {
        # open .spec and .spec.in files
        my $PKG_NAME = @{$NAME}[0];
        my $SUPPORTED_DTB = @{$NAME}[1];
        my $MACHINES = @{$NAME}[2];

        $subpkg_desc .=
            "%package -n $PKG_NAME\n" .
            "Summary:        $MACHINES\n" .
            "Group:          System/Boot\n" .
            "\n" .
            "%description -n $PKG_NAME\n" .
            "Device Tree Files for $MACHINES.\n\n";

        my $bin_supported_dtb = $SUPPORTED_DTB;
        $bin_supported_dtb =~ s/\.dts/\.dtb/g;

        my $dtb_subdir = "";
        if ($bin_supported_dtb =~ /(.*)\/[^\/]+$/) {
            $dtb_subdir = "%dir /boot/dtb/$1\n";
        }

        $subpkg_files .=
            "%files -n $PKG_NAME\n" .
            "%defattr(-,root,root)\n" .
            "%doc COPYING\n" .
            "%dir /boot/dtb/\n" .
            $dtb_subdir .
            "/boot/dtb/$bin_supported_dtb\n" .
            "\n";

        $all_supported_dtb .= "$SUPPORTED_DTB ";
    }
    chomp($all_supported_dtb);

    # spec file generation
    while(<TEMPLATE>){
        $_ =~ s/\$NAME/$main_package/g;
        $_ =~ s/\$ARCH_RESTRICTIONS/$ARCH_RESTRICTIONS/g;
        $_ =~ s/\$DTS_folder/$DTS_folder/g;
        $_ =~ s/\$SUBPKG_DESC/$subpkg_desc/g;
        $_ =~ s/\$ALL_SUPPORTED_DTB/$all_supported_dtb/g;
        $_ =~ s/\$SUBPKG_FILES/$subpkg_files/g;
        print SPEC $_;
    }

    close(TEMPLATE);
    close(SPEC);

    # Make symlink for .changes file
    if ("dtb-source" ne $main_package) {
        system("cp -lf dtb-source.changes $main_package.changes");
    }
}

generate_spec('dtb-source', 'none',  []);
generate_spec('dtb-armv7l', "armv7l armv7hl", \@armv7l_package_list);
generate_spec('dtb-armv6l', "armv6l armv6hl", \@armv6l_package_list);
generate_spec('dtb-aarch64', "aarch64", \@aarch64_package_list);
openSUSE Build Service is sponsored by