From 7971cb0aa3e517a53f0ce6d3ee9bc3179041ccb8 Mon Sep 17 00:00:00 2001 From: John Klug Date: Wed, 25 May 2022 17:12:18 -0500 Subject: mLinux 6 --- scripts/lib/argparse_oe.py | 129 ++ scripts/lib/bsp/__init__.py | 22 + scripts/lib/bsp/engine.py | 1947 ++++++++++++++++++++ scripts/lib/bsp/help.py | 1046 +++++++++++ scripts/lib/bsp/kernel.py | 1072 +++++++++++ .../lib/bsp/substrate/target/arch/arm/.gitignore | 0 .../target/arch/arm/conf/machine/machine.conf | 102 + .../xserver-xf86-config/machine.noinstall | 1 + .../xserver-xf86-config/machine/xorg.conf | 34 + .../xorg-xserver/xserver-xf86-config_0.1.bbappend | 2 + .../arch/arm/recipes-kernel/linux/files.noinstall | 1 + .../linux/files/machine-non_hardware.cfg | 31 + .../linux/files/machine-preempt-rt.scc | 15 + .../linux/files/machine-standard.scc | 15 + .../recipes-kernel/linux/files/machine-tiny.scc | 11 + .../linux/files/machine-user-config.cfg | 1 + .../linux/files/machine-user-features.scc | 1 + .../linux/files/machine-user-patches.scc | 1 + .../arm/recipes-kernel/linux/files/machine.cfg | 321 ++++ .../arm/recipes-kernel/linux/files/machine.scc | 8 + .../arm/recipes-kernel/linux/kernel-list.noinstall | 5 + .../recipes-kernel/linux/linux-yocto-dev.bbappend | 25 + .../linux/linux-yocto-tiny_4.1.bbappend | 33 + .../linux/linux-yocto-tiny_4.4.bbappend | 33 + .../recipes-kernel/linux/linux-yocto_4.1.bbappend | 32 + .../recipes-kernel/linux/linux-yocto_4.4.bbappend | 32 + .../bsp/substrate/target/arch/common/COPYING.MIT | 17 + .../lib/bsp/substrate/target/arch/common/README | 118 ++ .../substrate/target/arch/common/README.sources | 17 + .../substrate/target/arch/common/binary/.gitignore | 0 .../substrate/target/arch/common/conf/layer.conf | 10 + .../formfactor/formfactor/machine.noinstall | 1 + .../formfactor/formfactor/machine/machconfig | 5 + .../recipes-bsp/formfactor/formfactor_0.0.bbappend | 2 + .../recipes-kernel/linux/kernel-list.noinstall | 26 + .../recipes-kernel/linux/linux-yocto-custom.bb | 57 + .../linux/linux-yocto-custom.noinstall | 1 + .../linux/linux-yocto-custom/defconfig | 5 + .../linux-yocto-custom/machine-user-config.cfg | 9 + .../linux-yocto-custom/machine-user-patches.scc | 9 + .../linux/linux-yocto-custom/machine.cfg | 4 + .../linux/linux-yocto-custom/machine.scc | 18 + .../target/arch/i386/conf/machine/machine.conf | 77 + .../xserver-xf86-config/machine.noinstall | 1 + .../xserver-xf86-config/machine/xorg.conf | 1 + .../xorg-xserver/xserver-xf86-config_0.1.bbappend | 2 + .../arch/i386/recipes-kernel/linux/files.noinstall | 1 + .../linux/files/machine-preempt-rt.scc | 17 + .../linux/files/machine-standard.scc | 17 + .../recipes-kernel/linux/files/machine-tiny.scc | 11 + .../linux/files/machine-user-config.cfg | 1 + .../linux/files/machine-user-features.scc | 1 + .../linux/files/machine-user-patches.scc | 1 + .../i386/recipes-kernel/linux/files/machine.cfg | 55 + .../i386/recipes-kernel/linux/files/machine.scc | 21 + .../recipes-kernel/linux/kernel-list.noinstall | 5 + .../recipes-kernel/linux/linux-yocto-dev.bbappend | 25 + .../linux/linux-yocto-tiny_4.1.bbappend | 33 + .../linux/linux-yocto-tiny_4.4.bbappend | 33 + .../recipes-kernel/linux/linux-yocto_4.1.bbappend | 32 + .../recipes-kernel/linux/linux-yocto_4.4.bbappend | 32 + .../bsp/substrate/target/arch/layer/COPYING.MIT | 17 + scripts/lib/bsp/substrate/target/arch/layer/README | 64 + .../substrate/target/arch/layer/conf/layer.conf | 10 + .../target/arch/layer/layer-questions.noinstall | 14 + .../arch/layer/recipes-example-bbappend.noinstall | 1 + .../example-bbappend-version.bbappend | 9 + .../example-bbappend-version.noinstall | 1 + .../example-bbappend-version/example.patch | 12 + .../target/arch/layer/recipes-example.noinstall | 1 + .../recipes-example/example/example-recipe-0.1.bb | 23 + .../example/example-recipe-0.1.noinstall | 1 + .../example/example-recipe-0.1/example.patch | 12 + .../example/example-recipe-0.1/helloworld.c | 8 + .../lib/bsp/substrate/target/arch/mips/.gitignore | 0 .../target/arch/mips/conf/machine/machine.conf | 39 + .../arch/mips/recipes-kernel/linux/files.noinstall | 1 + .../linux/files/machine-preempt-rt.scc | 11 + .../linux/files/machine-standard.scc | 11 + .../recipes-kernel/linux/files/machine-tiny.scc | 11 + .../linux/files/machine-user-config.cfg | 1 + .../linux/files/machine-user-features.scc | 1 + .../linux/files/machine-user-patches.scc | 1 + .../mips/recipes-kernel/linux/files/machine.cfg | 2 + .../mips/recipes-kernel/linux/files/machine.scc | 8 + .../recipes-kernel/linux/kernel-list.noinstall | 5 + .../recipes-kernel/linux/linux-yocto-dev.bbappend | 25 + .../linux/linux-yocto-tiny_4.1.bbappend | 33 + .../linux/linux-yocto-tiny_4.4.bbappend | 33 + .../recipes-kernel/linux/linux-yocto_4.1.bbappend | 32 + .../recipes-kernel/linux/linux-yocto_4.4.bbappend | 32 + .../bsp/substrate/target/arch/mips64/.gitignore | 0 .../target/arch/mips64/conf/machine/machine.conf | 39 + .../mips64/recipes-kernel/linux/files.noinstall | 1 + .../linux/files/machine-preempt-rt.scc | 11 + .../linux/files/machine-standard.scc | 11 + .../recipes-kernel/linux/files/machine-tiny.scc | 11 + .../linux/files/machine-user-config.cfg | 1 + .../linux/files/machine-user-features.scc | 1 + .../linux/files/machine-user-patches.scc | 1 + .../mips64/recipes-kernel/linux/files/machine.cfg | 66 + .../mips64/recipes-kernel/linux/files/machine.scc | 8 + .../recipes-kernel/linux/kernel-list.noinstall | 5 + .../recipes-kernel/linux/linux-yocto-dev.bbappend | 25 + .../linux/linux-yocto-tiny_4.1.bbappend | 33 + .../linux/linux-yocto-tiny_4.4.bbappend | 33 + .../recipes-kernel/linux/linux-yocto_4.1.bbappend | 32 + .../recipes-kernel/linux/linux-yocto_4.4.bbappend | 32 + .../bsp/substrate/target/arch/powerpc/.gitignore | 0 .../target/arch/powerpc/conf/machine/machine.conf | 87 + .../powerpc/recipes-kernel/linux/files.noinstall | 1 + .../linux/files/machine-preempt-rt.scc | 11 + .../linux/files/machine-standard.scc | 11 + .../recipes-kernel/linux/files/machine-tiny.scc | 11 + .../linux/files/machine-user-config.cfg | 1 + .../linux/files/machine-user-features.scc | 1 + .../linux/files/machine-user-patches.scc | 1 + .../powerpc/recipes-kernel/linux/files/machine.cfg | 164 ++ .../powerpc/recipes-kernel/linux/files/machine.scc | 10 + .../recipes-kernel/linux/kernel-list.noinstall | 5 + .../recipes-kernel/linux/linux-yocto-dev.bbappend | 25 + .../linux/linux-yocto-tiny_4.1.bbappend | 33 + .../linux/linux-yocto-tiny_4.4.bbappend | 33 + .../recipes-kernel/linux/linux-yocto_4.1.bbappend | 32 + .../recipes-kernel/linux/linux-yocto_4.4.bbappend | 32 + .../target/arch/qemu/conf/machine/machine.conf | 74 + .../init-ifupdown/init-ifupdown/machine.noinstall | 1 + .../init-ifupdown/init-ifupdown/machine/interfaces | 5 + .../init-ifupdown/init-ifupdown_1.0.bbappend | 1 + .../xserver-xf86-config/machine.noinstall | 1 + .../xserver-xf86-config/machine/xorg.conf | 77 + .../xorg-xserver/xserver-xf86-config_0.1.bbappend | 1 + .../arch/qemu/recipes-kernel/linux/files.noinstall | 1 + .../linux/files/machine-preempt-rt.scc | 11 + .../linux/files/machine-standard.scc | 20 + .../recipes-kernel/linux/files/machine-tiny.scc | 11 + .../linux/files/machine-user-config.cfg | 1 + .../linux/files/machine-user-features.scc | 1 + .../linux/files/machine-user-patches.scc | 1 + .../qemu/recipes-kernel/linux/files/machine.cfg | 1 + .../qemu/recipes-kernel/linux/files/machine.scc | 5 + .../recipes-kernel/linux/kernel-list.noinstall | 5 + .../recipes-kernel/linux/linux-yocto-dev.bbappend | 55 + .../linux/linux-yocto-tiny_4.1.bbappend | 62 + .../linux/linux-yocto-tiny_4.4.bbappend | 62 + .../recipes-kernel/linux/linux-yocto_4.1.bbappend | 61 + .../recipes-kernel/linux/linux-yocto_4.4.bbappend | 61 + .../bsp/substrate/target/arch/x86_64/.gitignore | 0 .../target/arch/x86_64/conf/machine/machine.conf | 65 + .../xserver-xf86-config/machine.noinstall | 1 + .../xserver-xf86-config/machine/xorg.conf | 1 + .../xorg-xserver/xserver-xf86-config_0.1.bbappend | 2 + .../x86_64/recipes-kernel/linux/files.noinstall | 1 + .../linux/files/machine-preempt-rt.scc | 17 + .../linux/files/machine-standard.scc | 17 + .../recipes-kernel/linux/files/machine-tiny.scc | 11 + .../linux/files/machine-user-config.cfg | 1 + .../linux/files/machine-user-features.scc | 1 + .../linux/files/machine-user-patches.scc | 1 + .../x86_64/recipes-kernel/linux/files/machine.cfg | 48 + .../x86_64/recipes-kernel/linux/files/machine.scc | 14 + .../recipes-kernel/linux/kernel-list.noinstall | 5 + .../recipes-kernel/linux/linux-yocto-dev.bbappend | 25 + .../linux/linux-yocto-tiny_4.1.bbappend | 33 + .../linux/linux-yocto-tiny_4.4.bbappend | 33 + .../recipes-kernel/linux/linux-yocto_4.1.bbappend | 32 + .../recipes-kernel/linux/linux-yocto_4.4.bbappend | 32 + scripts/lib/bsp/tags.py | 49 + scripts/lib/devtool/__init__.py | 257 +++ scripts/lib/devtool/build.py | 86 + scripts/lib/devtool/build_image.py | 168 ++ scripts/lib/devtool/build_sdk.py | 65 + scripts/lib/devtool/deploy.py | 304 +++ scripts/lib/devtool/package.py | 62 + scripts/lib/devtool/runqemu.py | 65 + scripts/lib/devtool/sdk.py | 366 ++++ scripts/lib/devtool/search.py | 88 + scripts/lib/devtool/standard.py | 1452 +++++++++++++++ scripts/lib/devtool/upgrade.py | 382 ++++ scripts/lib/devtool/utilcmds.py | 233 +++ scripts/lib/recipetool/__init__.py | 0 scripts/lib/recipetool/append.py | 471 +++++ scripts/lib/recipetool/create.py | 963 ++++++++++ scripts/lib/recipetool/create_buildsys.py | 859 +++++++++ scripts/lib/recipetool/create_buildsys_python.py | 719 ++++++++ scripts/lib/recipetool/create_kernel.py | 99 + scripts/lib/recipetool/create_kmod.py | 152 ++ scripts/lib/recipetool/create_npm.py | 156 ++ scripts/lib/recipetool/newappend.py | 112 ++ scripts/lib/recipetool/setvar.py | 75 + scripts/lib/scriptpath.py | 42 + scripts/lib/scriptutils.py | 118 ++ scripts/lib/wic/__init__.py | 4 + scripts/lib/wic/__version__.py | 1 + scripts/lib/wic/canned-wks/common.wks.inc | 3 + .../canned-wks/directdisk-bootloader-config.cfg | 11 + .../canned-wks/directdisk-bootloader-config.wks | 8 + scripts/lib/wic/canned-wks/directdisk-gpt.wks | 10 + .../lib/wic/canned-wks/directdisk-multi-rootfs.wks | 23 + scripts/lib/wic/canned-wks/directdisk.wks | 8 + scripts/lib/wic/canned-wks/mkefidisk.wks | 11 + scripts/lib/wic/canned-wks/mkgummidisk.wks | 11 + scripts/lib/wic/canned-wks/mkhybridiso.wks | 7 + scripts/lib/wic/canned-wks/qemux86-directdisk.wks | 8 + scripts/lib/wic/canned-wks/sdimage-bootpart.wks | 6 + scripts/lib/wic/conf.py | 103 ++ scripts/lib/wic/config/wic.conf | 6 + scripts/lib/wic/creator.py | 124 ++ scripts/lib/wic/engine.py | 220 +++ scripts/lib/wic/help.py | 777 ++++++++ scripts/lib/wic/imager/__init__.py | 0 scripts/lib/wic/imager/baseimager.py | 192 ++ scripts/lib/wic/imager/direct.py | 380 ++++ scripts/lib/wic/ksparser.py | 169 ++ scripts/lib/wic/msger.py | 309 ++++ scripts/lib/wic/partition.py | 414 +++++ scripts/lib/wic/plugin.py | 150 ++ scripts/lib/wic/pluginbase.py | 108 ++ scripts/lib/wic/plugins/imager/direct_plugin.py | 102 + scripts/lib/wic/plugins/source/bootimg-efi.py | 237 +++ .../lib/wic/plugins/source/bootimg-partition.py | 140 ++ scripts/lib/wic/plugins/source/bootimg-pcbios.py | 210 +++ scripts/lib/wic/plugins/source/fsimage.py | 73 + .../lib/wic/plugins/source/isoimage-isohybrid.py | 550 ++++++ scripts/lib/wic/plugins/source/rawcopy.py | 88 + scripts/lib/wic/plugins/source/rootfs.py | 83 + .../lib/wic/plugins/source/rootfs_pcbios_ext.py | 177 ++ scripts/lib/wic/test | 1 + scripts/lib/wic/utils/__init__.py | 0 scripts/lib/wic/utils/errors.py | 29 + scripts/lib/wic/utils/fs_related.py | 84 + scripts/lib/wic/utils/misc.py | 95 + scripts/lib/wic/utils/oe/__init__.py | 22 + scripts/lib/wic/utils/oe/misc.py | 250 +++ scripts/lib/wic/utils/partitionedfs.py | 360 ++++ scripts/lib/wic/utils/runner.py | 110 ++ scripts/lib/wic/utils/syslinux.py | 58 + 237 files changed, 20705 insertions(+) create mode 100644 scripts/lib/argparse_oe.py create mode 100644 scripts/lib/bsp/__init__.py create mode 100644 scripts/lib/bsp/engine.py create mode 100644 scripts/lib/bsp/help.py create mode 100644 scripts/lib/bsp/kernel.py create mode 100644 scripts/lib/bsp/substrate/target/arch/arm/.gitignore create mode 100644 scripts/lib/bsp/substrate/target/arch/arm/conf/machine/machine.conf create mode 100644 scripts/lib/bsp/substrate/target/arch/arm/recipes-graphics/xorg-xserver/xserver-xf86-config/machine.noinstall create mode 100644 scripts/lib/bsp/substrate/target/arch/arm/recipes-graphics/xorg-xserver/xserver-xf86-config/machine/xorg.conf create mode 100644 scripts/lib/bsp/substrate/target/arch/arm/recipes-graphics/xorg-xserver/xserver-xf86-config_0.1.bbappend create mode 100644 scripts/lib/bsp/substrate/target/arch/arm/recipes-kernel/linux/files.noinstall create mode 100644 scripts/lib/bsp/substrate/target/arch/arm/recipes-kernel/linux/files/machine-non_hardware.cfg create mode 100644 scripts/lib/bsp/substrate/target/arch/arm/recipes-kernel/linux/files/machine-preempt-rt.scc create mode 100644 scripts/lib/bsp/substrate/target/arch/arm/recipes-kernel/linux/files/machine-standard.scc create mode 100644 scripts/lib/bsp/substrate/target/arch/arm/recipes-kernel/linux/files/machine-tiny.scc create mode 100644 scripts/lib/bsp/substrate/target/arch/arm/recipes-kernel/linux/files/machine-user-config.cfg create mode 100644 scripts/lib/bsp/substrate/target/arch/arm/recipes-kernel/linux/files/machine-user-features.scc create mode 100644 scripts/lib/bsp/substrate/target/arch/arm/recipes-kernel/linux/files/machine-user-patches.scc create mode 100644 scripts/lib/bsp/substrate/target/arch/arm/recipes-kernel/linux/files/machine.cfg create mode 100644 scripts/lib/bsp/substrate/target/arch/arm/recipes-kernel/linux/files/machine.scc create mode 100644 scripts/lib/bsp/substrate/target/arch/arm/recipes-kernel/linux/kernel-list.noinstall create mode 100644 scripts/lib/bsp/substrate/target/arch/arm/recipes-kernel/linux/linux-yocto-dev.bbappend create mode 100644 scripts/lib/bsp/substrate/target/arch/arm/recipes-kernel/linux/linux-yocto-tiny_4.1.bbappend create mode 100644 scripts/lib/bsp/substrate/target/arch/arm/recipes-kernel/linux/linux-yocto-tiny_4.4.bbappend create mode 100644 scripts/lib/bsp/substrate/target/arch/arm/recipes-kernel/linux/linux-yocto_4.1.bbappend create mode 100644 scripts/lib/bsp/substrate/target/arch/arm/recipes-kernel/linux/linux-yocto_4.4.bbappend create mode 100644 scripts/lib/bsp/substrate/target/arch/common/COPYING.MIT create mode 100644 scripts/lib/bsp/substrate/target/arch/common/README create mode 100644 scripts/lib/bsp/substrate/target/arch/common/README.sources create mode 100644 scripts/lib/bsp/substrate/target/arch/common/binary/.gitignore create mode 100644 scripts/lib/bsp/substrate/target/arch/common/conf/layer.conf create mode 100644 scripts/lib/bsp/substrate/target/arch/common/recipes-bsp/formfactor/formfactor/machine.noinstall create mode 100644 scripts/lib/bsp/substrate/target/arch/common/recipes-bsp/formfactor/formfactor/machine/machconfig create mode 100644 scripts/lib/bsp/substrate/target/arch/common/recipes-bsp/formfactor/formfactor_0.0.bbappend create mode 100644 scripts/lib/bsp/substrate/target/arch/common/recipes-kernel/linux/kernel-list.noinstall create mode 100644 scripts/lib/bsp/substrate/target/arch/common/recipes-kernel/linux/linux-yocto-custom.bb create mode 100644 scripts/lib/bsp/substrate/target/arch/common/recipes-kernel/linux/linux-yocto-custom.noinstall create mode 100644 scripts/lib/bsp/substrate/target/arch/common/recipes-kernel/linux/linux-yocto-custom/defconfig create mode 100644 scripts/lib/bsp/substrate/target/arch/common/recipes-kernel/linux/linux-yocto-custom/machine-user-config.cfg create mode 100644 scripts/lib/bsp/substrate/target/arch/common/recipes-kernel/linux/linux-yocto-custom/machine-user-patches.scc create mode 100644 scripts/lib/bsp/substrate/target/arch/common/recipes-kernel/linux/linux-yocto-custom/machine.cfg create mode 100644 scripts/lib/bsp/substrate/target/arch/common/recipes-kernel/linux/linux-yocto-custom/machine.scc create mode 100644 scripts/lib/bsp/substrate/target/arch/i386/conf/machine/machine.conf create mode 100644 scripts/lib/bsp/substrate/target/arch/i386/recipes-graphics/xorg-xserver/xserver-xf86-config/machine.noinstall create mode 100644 scripts/lib/bsp/substrate/target/arch/i386/recipes-graphics/xorg-xserver/xserver-xf86-config/machine/xorg.conf create mode 100644 scripts/lib/bsp/substrate/target/arch/i386/recipes-graphics/xorg-xserver/xserver-xf86-config_0.1.bbappend create mode 100644 scripts/lib/bsp/substrate/target/arch/i386/recipes-kernel/linux/files.noinstall create mode 100644 scripts/lib/bsp/substrate/target/arch/i386/recipes-kernel/linux/files/machine-preempt-rt.scc create mode 100644 scripts/lib/bsp/substrate/target/arch/i386/recipes-kernel/linux/files/machine-standard.scc create mode 100644 scripts/lib/bsp/substrate/target/arch/i386/recipes-kernel/linux/files/machine-tiny.scc create mode 100644 scripts/lib/bsp/substrate/target/arch/i386/recipes-kernel/linux/files/machine-user-config.cfg create mode 100644 scripts/lib/bsp/substrate/target/arch/i386/recipes-kernel/linux/files/machine-user-features.scc create mode 100644 scripts/lib/bsp/substrate/target/arch/i386/recipes-kernel/linux/files/machine-user-patches.scc create mode 100644 scripts/lib/bsp/substrate/target/arch/i386/recipes-kernel/linux/files/machine.cfg create mode 100644 scripts/lib/bsp/substrate/target/arch/i386/recipes-kernel/linux/files/machine.scc create mode 100644 scripts/lib/bsp/substrate/target/arch/i386/recipes-kernel/linux/kernel-list.noinstall create mode 100644 scripts/lib/bsp/substrate/target/arch/i386/recipes-kernel/linux/linux-yocto-dev.bbappend create mode 100644 scripts/lib/bsp/substrate/target/arch/i386/recipes-kernel/linux/linux-yocto-tiny_4.1.bbappend create mode 100644 scripts/lib/bsp/substrate/target/arch/i386/recipes-kernel/linux/linux-yocto-tiny_4.4.bbappend create mode 100644 scripts/lib/bsp/substrate/target/arch/i386/recipes-kernel/linux/linux-yocto_4.1.bbappend create mode 100644 scripts/lib/bsp/substrate/target/arch/i386/recipes-kernel/linux/linux-yocto_4.4.bbappend create mode 100644 scripts/lib/bsp/substrate/target/arch/layer/COPYING.MIT create mode 100644 scripts/lib/bsp/substrate/target/arch/layer/README create mode 100644 scripts/lib/bsp/substrate/target/arch/layer/conf/layer.conf create mode 100644 scripts/lib/bsp/substrate/target/arch/layer/layer-questions.noinstall create mode 100644 scripts/lib/bsp/substrate/target/arch/layer/recipes-example-bbappend.noinstall create mode 100644 scripts/lib/bsp/substrate/target/arch/layer/recipes-example-bbappend/example-bbappend/example-bbappend-version.bbappend create mode 100644 scripts/lib/bsp/substrate/target/arch/layer/recipes-example-bbappend/example-bbappend/example-bbappend-version.noinstall create mode 100644 scripts/lib/bsp/substrate/target/arch/layer/recipes-example-bbappend/example-bbappend/example-bbappend-version/example.patch create mode 100644 scripts/lib/bsp/substrate/target/arch/layer/recipes-example.noinstall create mode 100644 scripts/lib/bsp/substrate/target/arch/layer/recipes-example/example/example-recipe-0.1.bb create mode 100644 scripts/lib/bsp/substrate/target/arch/layer/recipes-example/example/example-recipe-0.1.noinstall create mode 100644 scripts/lib/bsp/substrate/target/arch/layer/recipes-example/example/example-recipe-0.1/example.patch create mode 100644 scripts/lib/bsp/substrate/target/arch/layer/recipes-example/example/example-recipe-0.1/helloworld.c create mode 100644 scripts/lib/bsp/substrate/target/arch/mips/.gitignore create mode 100644 scripts/lib/bsp/substrate/target/arch/mips/conf/machine/machine.conf create mode 100644 scripts/lib/bsp/substrate/target/arch/mips/recipes-kernel/linux/files.noinstall create mode 100644 scripts/lib/bsp/substrate/target/arch/mips/recipes-kernel/linux/files/machine-preempt-rt.scc create mode 100644 scripts/lib/bsp/substrate/target/arch/mips/recipes-kernel/linux/files/machine-standard.scc create mode 100644 scripts/lib/bsp/substrate/target/arch/mips/recipes-kernel/linux/files/machine-tiny.scc create mode 100644 scripts/lib/bsp/substrate/target/arch/mips/recipes-kernel/linux/files/machine-user-config.cfg create mode 100644 scripts/lib/bsp/substrate/target/arch/mips/recipes-kernel/linux/files/machine-user-features.scc create mode 100644 scripts/lib/bsp/substrate/target/arch/mips/recipes-kernel/linux/files/machine-user-patches.scc create mode 100644 scripts/lib/bsp/substrate/target/arch/mips/recipes-kernel/linux/files/machine.cfg create mode 100644 scripts/lib/bsp/substrate/target/arch/mips/recipes-kernel/linux/files/machine.scc create mode 100644 scripts/lib/bsp/substrate/target/arch/mips/recipes-kernel/linux/kernel-list.noinstall create mode 100644 scripts/lib/bsp/substrate/target/arch/mips/recipes-kernel/linux/linux-yocto-dev.bbappend create mode 100644 scripts/lib/bsp/substrate/target/arch/mips/recipes-kernel/linux/linux-yocto-tiny_4.1.bbappend create mode 100644 scripts/lib/bsp/substrate/target/arch/mips/recipes-kernel/linux/linux-yocto-tiny_4.4.bbappend create mode 100644 scripts/lib/bsp/substrate/target/arch/mips/recipes-kernel/linux/linux-yocto_4.1.bbappend create mode 100644 scripts/lib/bsp/substrate/target/arch/mips/recipes-kernel/linux/linux-yocto_4.4.bbappend create mode 100644 scripts/lib/bsp/substrate/target/arch/mips64/.gitignore create mode 100644 scripts/lib/bsp/substrate/target/arch/mips64/conf/machine/machine.conf create mode 100644 scripts/lib/bsp/substrate/target/arch/mips64/recipes-kernel/linux/files.noinstall create mode 100644 scripts/lib/bsp/substrate/target/arch/mips64/recipes-kernel/linux/files/machine-preempt-rt.scc create mode 100644 scripts/lib/bsp/substrate/target/arch/mips64/recipes-kernel/linux/files/machine-standard.scc create mode 100644 scripts/lib/bsp/substrate/target/arch/mips64/recipes-kernel/linux/files/machine-tiny.scc create mode 100644 scripts/lib/bsp/substrate/target/arch/mips64/recipes-kernel/linux/files/machine-user-config.cfg create mode 100644 scripts/lib/bsp/substrate/target/arch/mips64/recipes-kernel/linux/files/machine-user-features.scc create mode 100644 scripts/lib/bsp/substrate/target/arch/mips64/recipes-kernel/linux/files/machine-user-patches.scc create mode 100644 scripts/lib/bsp/substrate/target/arch/mips64/recipes-kernel/linux/files/machine.cfg create mode 100644 scripts/lib/bsp/substrate/target/arch/mips64/recipes-kernel/linux/files/machine.scc create mode 100644 scripts/lib/bsp/substrate/target/arch/mips64/recipes-kernel/linux/kernel-list.noinstall create mode 100644 scripts/lib/bsp/substrate/target/arch/mips64/recipes-kernel/linux/linux-yocto-dev.bbappend create mode 100644 scripts/lib/bsp/substrate/target/arch/mips64/recipes-kernel/linux/linux-yocto-tiny_4.1.bbappend create mode 100644 scripts/lib/bsp/substrate/target/arch/mips64/recipes-kernel/linux/linux-yocto-tiny_4.4.bbappend create mode 100644 scripts/lib/bsp/substrate/target/arch/mips64/recipes-kernel/linux/linux-yocto_4.1.bbappend create mode 100644 scripts/lib/bsp/substrate/target/arch/mips64/recipes-kernel/linux/linux-yocto_4.4.bbappend create mode 100644 scripts/lib/bsp/substrate/target/arch/powerpc/.gitignore create mode 100644 scripts/lib/bsp/substrate/target/arch/powerpc/conf/machine/machine.conf create mode 100644 scripts/lib/bsp/substrate/target/arch/powerpc/recipes-kernel/linux/files.noinstall create mode 100644 scripts/lib/bsp/substrate/target/arch/powerpc/recipes-kernel/linux/files/machine-preempt-rt.scc create mode 100644 scripts/lib/bsp/substrate/target/arch/powerpc/recipes-kernel/linux/files/machine-standard.scc create mode 100644 scripts/lib/bsp/substrate/target/arch/powerpc/recipes-kernel/linux/files/machine-tiny.scc create mode 100644 scripts/lib/bsp/substrate/target/arch/powerpc/recipes-kernel/linux/files/machine-user-config.cfg create mode 100644 scripts/lib/bsp/substrate/target/arch/powerpc/recipes-kernel/linux/files/machine-user-features.scc create mode 100644 scripts/lib/bsp/substrate/target/arch/powerpc/recipes-kernel/linux/files/machine-user-patches.scc create mode 100644 scripts/lib/bsp/substrate/target/arch/powerpc/recipes-kernel/linux/files/machine.cfg create mode 100644 scripts/lib/bsp/substrate/target/arch/powerpc/recipes-kernel/linux/files/machine.scc create mode 100644 scripts/lib/bsp/substrate/target/arch/powerpc/recipes-kernel/linux/kernel-list.noinstall create mode 100644 scripts/lib/bsp/substrate/target/arch/powerpc/recipes-kernel/linux/linux-yocto-dev.bbappend create mode 100644 scripts/lib/bsp/substrate/target/arch/powerpc/recipes-kernel/linux/linux-yocto-tiny_4.1.bbappend create mode 100644 scripts/lib/bsp/substrate/target/arch/powerpc/recipes-kernel/linux/linux-yocto-tiny_4.4.bbappend create mode 100644 scripts/lib/bsp/substrate/target/arch/powerpc/recipes-kernel/linux/linux-yocto_4.1.bbappend create mode 100644 scripts/lib/bsp/substrate/target/arch/powerpc/recipes-kernel/linux/linux-yocto_4.4.bbappend create mode 100644 scripts/lib/bsp/substrate/target/arch/qemu/conf/machine/machine.conf create mode 100644 scripts/lib/bsp/substrate/target/arch/qemu/recipes-core/init-ifupdown/init-ifupdown/machine.noinstall create mode 100644 scripts/lib/bsp/substrate/target/arch/qemu/recipes-core/init-ifupdown/init-ifupdown/machine/interfaces create mode 100644 scripts/lib/bsp/substrate/target/arch/qemu/recipes-core/init-ifupdown/init-ifupdown_1.0.bbappend create mode 100644 scripts/lib/bsp/substrate/target/arch/qemu/recipes-graphics/xorg-xserver/xserver-xf86-config/machine.noinstall create mode 100644 scripts/lib/bsp/substrate/target/arch/qemu/recipes-graphics/xorg-xserver/xserver-xf86-config/machine/xorg.conf create mode 100644 scripts/lib/bsp/substrate/target/arch/qemu/recipes-graphics/xorg-xserver/xserver-xf86-config_0.1.bbappend create mode 100644 scripts/lib/bsp/substrate/target/arch/qemu/recipes-kernel/linux/files.noinstall create mode 100644 scripts/lib/bsp/substrate/target/arch/qemu/recipes-kernel/linux/files/machine-preempt-rt.scc create mode 100644 scripts/lib/bsp/substrate/target/arch/qemu/recipes-kernel/linux/files/machine-standard.scc create mode 100644 scripts/lib/bsp/substrate/target/arch/qemu/recipes-kernel/linux/files/machine-tiny.scc create mode 100644 scripts/lib/bsp/substrate/target/arch/qemu/recipes-kernel/linux/files/machine-user-config.cfg create mode 100644 scripts/lib/bsp/substrate/target/arch/qemu/recipes-kernel/linux/files/machine-user-features.scc create mode 100644 scripts/lib/bsp/substrate/target/arch/qemu/recipes-kernel/linux/files/machine-user-patches.scc create mode 100644 scripts/lib/bsp/substrate/target/arch/qemu/recipes-kernel/linux/files/machine.cfg create mode 100644 scripts/lib/bsp/substrate/target/arch/qemu/recipes-kernel/linux/files/machine.scc create mode 100644 scripts/lib/bsp/substrate/target/arch/qemu/recipes-kernel/linux/kernel-list.noinstall create mode 100644 scripts/lib/bsp/substrate/target/arch/qemu/recipes-kernel/linux/linux-yocto-dev.bbappend create mode 100644 scripts/lib/bsp/substrate/target/arch/qemu/recipes-kernel/linux/linux-yocto-tiny_4.1.bbappend create mode 100644 scripts/lib/bsp/substrate/target/arch/qemu/recipes-kernel/linux/linux-yocto-tiny_4.4.bbappend create mode 100644 scripts/lib/bsp/substrate/target/arch/qemu/recipes-kernel/linux/linux-yocto_4.1.bbappend create mode 100644 scripts/lib/bsp/substrate/target/arch/qemu/recipes-kernel/linux/linux-yocto_4.4.bbappend create mode 100644 scripts/lib/bsp/substrate/target/arch/x86_64/.gitignore create mode 100644 scripts/lib/bsp/substrate/target/arch/x86_64/conf/machine/machine.conf create mode 100644 scripts/lib/bsp/substrate/target/arch/x86_64/recipes-graphics/xorg-xserver/xserver-xf86-config/machine.noinstall create mode 100644 scripts/lib/bsp/substrate/target/arch/x86_64/recipes-graphics/xorg-xserver/xserver-xf86-config/machine/xorg.conf create mode 100644 scripts/lib/bsp/substrate/target/arch/x86_64/recipes-graphics/xorg-xserver/xserver-xf86-config_0.1.bbappend create mode 100644 scripts/lib/bsp/substrate/target/arch/x86_64/recipes-kernel/linux/files.noinstall create mode 100644 scripts/lib/bsp/substrate/target/arch/x86_64/recipes-kernel/linux/files/machine-preempt-rt.scc create mode 100644 scripts/lib/bsp/substrate/target/arch/x86_64/recipes-kernel/linux/files/machine-standard.scc create mode 100644 scripts/lib/bsp/substrate/target/arch/x86_64/recipes-kernel/linux/files/machine-tiny.scc create mode 100644 scripts/lib/bsp/substrate/target/arch/x86_64/recipes-kernel/linux/files/machine-user-config.cfg create mode 100644 scripts/lib/bsp/substrate/target/arch/x86_64/recipes-kernel/linux/files/machine-user-features.scc create mode 100644 scripts/lib/bsp/substrate/target/arch/x86_64/recipes-kernel/linux/files/machine-user-patches.scc create mode 100644 scripts/lib/bsp/substrate/target/arch/x86_64/recipes-kernel/linux/files/machine.cfg create mode 100644 scripts/lib/bsp/substrate/target/arch/x86_64/recipes-kernel/linux/files/machine.scc create mode 100644 scripts/lib/bsp/substrate/target/arch/x86_64/recipes-kernel/linux/kernel-list.noinstall create mode 100644 scripts/lib/bsp/substrate/target/arch/x86_64/recipes-kernel/linux/linux-yocto-dev.bbappend create mode 100644 scripts/lib/bsp/substrate/target/arch/x86_64/recipes-kernel/linux/linux-yocto-tiny_4.1.bbappend create mode 100644 scripts/lib/bsp/substrate/target/arch/x86_64/recipes-kernel/linux/linux-yocto-tiny_4.4.bbappend create mode 100644 scripts/lib/bsp/substrate/target/arch/x86_64/recipes-kernel/linux/linux-yocto_4.1.bbappend create mode 100644 scripts/lib/bsp/substrate/target/arch/x86_64/recipes-kernel/linux/linux-yocto_4.4.bbappend create mode 100644 scripts/lib/bsp/tags.py create mode 100644 scripts/lib/devtool/__init__.py create mode 100644 scripts/lib/devtool/build.py create mode 100644 scripts/lib/devtool/build_image.py create mode 100644 scripts/lib/devtool/build_sdk.py create mode 100644 scripts/lib/devtool/deploy.py create mode 100644 scripts/lib/devtool/package.py create mode 100644 scripts/lib/devtool/runqemu.py create mode 100644 scripts/lib/devtool/sdk.py create mode 100644 scripts/lib/devtool/search.py create mode 100644 scripts/lib/devtool/standard.py create mode 100644 scripts/lib/devtool/upgrade.py create mode 100644 scripts/lib/devtool/utilcmds.py create mode 100644 scripts/lib/recipetool/__init__.py create mode 100644 scripts/lib/recipetool/append.py create mode 100644 scripts/lib/recipetool/create.py create mode 100644 scripts/lib/recipetool/create_buildsys.py create mode 100644 scripts/lib/recipetool/create_buildsys_python.py create mode 100644 scripts/lib/recipetool/create_kernel.py create mode 100644 scripts/lib/recipetool/create_kmod.py create mode 100644 scripts/lib/recipetool/create_npm.py create mode 100644 scripts/lib/recipetool/newappend.py create mode 100644 scripts/lib/recipetool/setvar.py create mode 100644 scripts/lib/scriptpath.py create mode 100644 scripts/lib/scriptutils.py create mode 100644 scripts/lib/wic/__init__.py create mode 100644 scripts/lib/wic/__version__.py create mode 100644 scripts/lib/wic/canned-wks/common.wks.inc create mode 100644 scripts/lib/wic/canned-wks/directdisk-bootloader-config.cfg create mode 100644 scripts/lib/wic/canned-wks/directdisk-bootloader-config.wks create mode 100644 scripts/lib/wic/canned-wks/directdisk-gpt.wks create mode 100644 scripts/lib/wic/canned-wks/directdisk-multi-rootfs.wks create mode 100644 scripts/lib/wic/canned-wks/directdisk.wks create mode 100644 scripts/lib/wic/canned-wks/mkefidisk.wks create mode 100644 scripts/lib/wic/canned-wks/mkgummidisk.wks create mode 100644 scripts/lib/wic/canned-wks/mkhybridiso.wks create mode 100644 scripts/lib/wic/canned-wks/qemux86-directdisk.wks create mode 100644 scripts/lib/wic/canned-wks/sdimage-bootpart.wks create mode 100644 scripts/lib/wic/conf.py create mode 100644 scripts/lib/wic/config/wic.conf create mode 100644 scripts/lib/wic/creator.py create mode 100644 scripts/lib/wic/engine.py create mode 100644 scripts/lib/wic/help.py create mode 100644 scripts/lib/wic/imager/__init__.py create mode 100644 scripts/lib/wic/imager/baseimager.py create mode 100644 scripts/lib/wic/imager/direct.py create mode 100644 scripts/lib/wic/ksparser.py create mode 100644 scripts/lib/wic/msger.py create mode 100644 scripts/lib/wic/partition.py create mode 100644 scripts/lib/wic/plugin.py create mode 100644 scripts/lib/wic/pluginbase.py create mode 100644 scripts/lib/wic/plugins/imager/direct_plugin.py create mode 100644 scripts/lib/wic/plugins/source/bootimg-efi.py create mode 100644 scripts/lib/wic/plugins/source/bootimg-partition.py create mode 100644 scripts/lib/wic/plugins/source/bootimg-pcbios.py create mode 100644 scripts/lib/wic/plugins/source/fsimage.py create mode 100644 scripts/lib/wic/plugins/source/isoimage-isohybrid.py create mode 100644 scripts/lib/wic/plugins/source/rawcopy.py create mode 100644 scripts/lib/wic/plugins/source/rootfs.py create mode 100644 scripts/lib/wic/plugins/source/rootfs_pcbios_ext.py create mode 100644 scripts/lib/wic/test create mode 100644 scripts/lib/wic/utils/__init__.py create mode 100644 scripts/lib/wic/utils/errors.py create mode 100644 scripts/lib/wic/utils/fs_related.py create mode 100644 scripts/lib/wic/utils/misc.py create mode 100644 scripts/lib/wic/utils/oe/__init__.py create mode 100644 scripts/lib/wic/utils/oe/misc.py create mode 100644 scripts/lib/wic/utils/partitionedfs.py create mode 100644 scripts/lib/wic/utils/runner.py create mode 100644 scripts/lib/wic/utils/syslinux.py (limited to 'scripts/lib') diff --git a/scripts/lib/argparse_oe.py b/scripts/lib/argparse_oe.py new file mode 100644 index 0000000..bf3ebad --- /dev/null +++ b/scripts/lib/argparse_oe.py @@ -0,0 +1,129 @@ +import sys +import argparse +from collections import defaultdict, OrderedDict + +class ArgumentUsageError(Exception): + """Exception class you can raise (and catch) in order to show the help""" + def __init__(self, message, subcommand=None): + self.message = message + self.subcommand = subcommand + +class ArgumentParser(argparse.ArgumentParser): + """Our own version of argparse's ArgumentParser""" + def __init__(self, *args, **kwargs): + kwargs.setdefault('formatter_class', OeHelpFormatter) + self._subparser_groups = OrderedDict() + super(ArgumentParser, self).__init__(*args, **kwargs) + + def error(self, message): + sys.stderr.write('ERROR: %s\n' % message) + self.print_help() + sys.exit(2) + + def error_subcommand(self, message, subcommand): + if subcommand: + for action in self._actions: + if isinstance(action, argparse._SubParsersAction): + for choice, subparser in action.choices.items(): + if choice == subcommand: + subparser.error(message) + return + self.error(message) + + def add_subparsers(self, *args, **kwargs): + ret = super(ArgumentParser, self).add_subparsers(*args, **kwargs) + # Need a way of accessing the parent parser + ret._parent_parser = self + # Ensure our class gets instantiated + ret._parser_class = ArgumentSubParser + # Hacky way of adding a method to the subparsers object + ret.add_subparser_group = self.add_subparser_group + return ret + + def add_subparser_group(self, groupname, groupdesc, order=0): + self._subparser_groups[groupname] = (groupdesc, order) + + +class ArgumentSubParser(ArgumentParser): + def __init__(self, *args, **kwargs): + if 'group' in kwargs: + self._group = kwargs.pop('group') + if 'order' in kwargs: + self._order = kwargs.pop('order') + super(ArgumentSubParser, self).__init__(*args, **kwargs) + for agroup in self._action_groups: + if agroup.title == 'optional arguments': + agroup.title = 'options' + break + + def parse_known_args(self, args=None, namespace=None): + # This works around argparse not handling optional positional arguments being + # intermixed with other options. A pretty horrible hack, but we're not left + # with much choice given that the bug in argparse exists and it's difficult + # to subclass. + # Borrowed from http://stackoverflow.com/questions/20165843/argparse-how-to-handle-variable-number-of-arguments-nargs + # with an extra workaround (in format_help() below) for the positional + # arguments disappearing from the --help output, as well as structural tweaks. + # Originally simplified from http://bugs.python.org/file30204/test_intermixed.py + positionals = self._get_positional_actions() + for action in positionals: + # deactivate positionals + action.save_nargs = action.nargs + action.nargs = 0 + + namespace, remaining_args = super(ArgumentSubParser, self).parse_known_args(args, namespace) + for action in positionals: + # remove the empty positional values from namespace + if hasattr(namespace, action.dest): + delattr(namespace, action.dest) + for action in positionals: + action.nargs = action.save_nargs + # parse positionals + namespace, extras = super(ArgumentSubParser, self).parse_known_args(remaining_args, namespace) + return namespace, extras + + def format_help(self): + # Quick, restore the positionals! + positionals = self._get_positional_actions() + for action in positionals: + if hasattr(action, 'save_nargs'): + action.nargs = action.save_nargs + return super(ArgumentParser, self).format_help() + + +class OeHelpFormatter(argparse.HelpFormatter): + def _format_action(self, action): + if hasattr(action, '_get_subactions'): + # subcommands list + groupmap = defaultdict(list) + ordermap = {} + subparser_groups = action._parent_parser._subparser_groups + groups = sorted(subparser_groups.keys(), key=lambda item: subparser_groups[item][1], reverse=True) + for subaction in self._iter_indented_subactions(action): + parser = action._name_parser_map[subaction.dest] + group = getattr(parser, '_group', None) + groupmap[group].append(subaction) + if group not in groups: + groups.append(group) + order = getattr(parser, '_order', 0) + ordermap[subaction.dest] = order + + lines = [] + if len(groupmap) > 1: + groupindent = ' ' + else: + groupindent = '' + for group in groups: + subactions = groupmap[group] + if not subactions: + continue + if groupindent: + if not group: + group = 'other' + groupdesc = subparser_groups.get(group, (group, 0))[0] + lines.append(' %s:' % groupdesc) + for subaction in sorted(subactions, key=lambda item: ordermap[item.dest], reverse=True): + lines.append('%s%s' % (groupindent, self._format_action(subaction).rstrip())) + return '\n'.join(lines) + else: + return super(OeHelpFormatter, self)._format_action(action) diff --git a/scripts/lib/bsp/__init__.py b/scripts/lib/bsp/__init__.py new file mode 100644 index 0000000..8bbb6e1 --- /dev/null +++ b/scripts/lib/bsp/__init__.py @@ -0,0 +1,22 @@ +# +# Yocto BSP tools library +# +# Copyright (c) 2012, Intel Corporation. +# All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2 as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# +# AUTHORS +# Tom Zanussi +# diff --git a/scripts/lib/bsp/engine.py b/scripts/lib/bsp/engine.py new file mode 100644 index 0000000..66e2162 --- /dev/null +++ b/scripts/lib/bsp/engine.py @@ -0,0 +1,1947 @@ +# ex:ts=4:sw=4:sts=4:et +# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- +# +# Copyright (c) 2012, Intel Corporation. +# All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2 as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# +# DESCRIPTION +# This module implements the templating engine used by 'yocto-bsp' to +# create BSPs. The BSP templates are simply the set of files expected +# to appear in a generated BSP, marked up with a small set of tags +# used to customize the output. The engine parses through the +# templates and generates a Python program containing all the logic +# and input elements needed to display and retrieve BSP-specific +# information from the user. The resulting program uses those results +# to generate the final BSP files. +# +# AUTHORS +# Tom Zanussi +# + +import os +import sys +from abc import ABCMeta, abstractmethod +from tags import * +import shlex +import json +import subprocess +import shutil + +class Line(): + """ + Generic (abstract) container representing a line that will appear + in the BSP-generating program. + """ + __metaclass__ = ABCMeta + + def __init__(self, line): + self.line = line + self.generated_line = "" + self.prio = sys.maxint + self.discard = False + + @abstractmethod + def gen(self, context = None): + """ + Generate the final executable line that will appear in the + BSP-generation program. + """ + pass + + def escape(self, line): + """ + Escape single and double quotes and backslashes until I find + something better (re.escape() escapes way too much). + """ + return line.replace("\\", "\\\\").replace("\"", "\\\"").replace("'", "\\'") + + def parse_error(self, msg, lineno, line): + raise SyntaxError("%s: %s" % (msg, line)) + + +class NormalLine(Line): + """ + Container for normal (non-tag) lines. + """ + def __init__(self, line): + Line.__init__(self, line) + self.is_filename = False + self.is_dirname = False + self.out_filebase = None + + def gen(self, context = None): + if self.is_filename: + line = "current_file = \"" + os.path.join(self.out_filebase, self.escape(self.line)) + "\"; of = open(current_file, \"w\")" + elif self.is_dirname: + dirname = os.path.join(self.out_filebase, self.escape(self.line)) + line = "if not os.path.exists(\"" + dirname + "\"): os.mkdir(\"" + dirname + "\")" + else: + line = "of.write(\"" + self.escape(self.line) + "\\n\")" + return line + + +class CodeLine(Line): + """ + Container for Python code tag lines. + """ + def __init__(self, line): + Line.__init__(self, line) + + def gen(self, context = None): + return self.line + + +class Assignment: + """ + Representation of everything we know about {{=name }} tags. + Instances of these are used by Assignment lines. + """ + def __init__(self, start, end, name): + self.start = start + self.end = end + self.name = name + + +class AssignmentLine(NormalLine): + """ + Container for normal lines containing assignment tags. Assignment + tags must be in ascending order of 'start' value. + """ + def __init__(self, line): + NormalLine.__init__(self, line) + self.assignments = [] + + def add_assignment(self, start, end, name): + self.assignments.append(Assignment(start, end, name)) + + def gen(self, context = None): + line = self.escape(self.line) + + for assignment in self.assignments: + replacement = "\" + " + assignment.name + " + \"" + idx = line.find(ASSIGN_TAG) + line = line[:idx] + replacement + line[idx + assignment.end - assignment.start:] + if self.is_filename: + return "current_file = \"" + os.path.join(self.out_filebase, line) + "\"; of = open(current_file, \"w\")" + elif self.is_dirname: + dirname = os.path.join(self.out_filebase, line) + return "if not os.path.exists(\"" + dirname + "\"): os.mkdir(\"" + dirname + "\")" + else: + return "of.write(\"" + line + "\\n\")" + + +class InputLine(Line): + """ + Base class for Input lines. + """ + def __init__(self, props, tag, lineno): + Line.__init__(self, tag) + self.props = props + self.lineno = lineno + + try: + self.prio = int(props["prio"]) + except KeyError: + self.prio = sys.maxint + + def gen(self, context = None): + try: + depends_on = self.props["depends-on"] + try: + depends_on_val = self.props["depends-on-val"] + except KeyError: + self.parse_error("No 'depends-on-val' for 'depends-on' property", + self.lineno, self.line) + except KeyError: + pass + + +class EditBoxInputLine(InputLine): + """ + Base class for 'editbox' Input lines. + + props: + name: example - "Load address" + msg: example - "Please enter the load address" + result: + Sets the value of the variable specified by 'name' to + whatever the user typed. + """ + def __init__(self, props, tag, lineno): + InputLine.__init__(self, props, tag, lineno) + + def gen(self, context = None): + InputLine.gen(self, context) + name = self.props["name"] + if not name: + self.parse_error("No input 'name' property found", + self.lineno, self.line) + msg = self.props["msg"] + if not msg: + self.parse_error("No input 'msg' property found", + self.lineno, self.line) + + try: + default_choice = self.props["default"] + except KeyError: + default_choice = "" + + msg += " [default: " + default_choice + "]" + + line = name + " = default(raw_input(\"" + msg + " \"), " + name + ")" + + return line + + +class GitRepoEditBoxInputLine(EditBoxInputLine): + """ + Base class for 'editbox' Input lines for user input of remote git + repos. This class verifies the existence and connectivity of the + specified git repo. + + props: + name: example - "Load address" + msg: example - "Please enter the load address" + result: + Sets the value of the variable specified by 'name' to + whatever the user typed. + """ + def __init__(self, props, tag, lineno): + EditBoxInputLine.__init__(self, props, tag, lineno) + + def gen(self, context = None): + EditBoxInputLine.gen(self, context) + name = self.props["name"] + if not name: + self.parse_error("No input 'name' property found", + self.lineno, self.line) + msg = self.props["msg"] + if not msg: + self.parse_error("No input 'msg' property found", + self.lineno, self.line) + + try: + default_choice = self.props["default"] + except KeyError: + default_choice = "" + + msg += " [default: " + default_choice + "]" + + line = name + " = get_verified_git_repo(\"" + msg + "\"," + name + ")" + + return line + + +class FileEditBoxInputLine(EditBoxInputLine): + """ + Base class for 'editbox' Input lines for user input of existing + files. This class verifies the existence of the specified file. + + props: + name: example - "Load address" + msg: example - "Please enter the load address" + result: + Sets the value of the variable specified by 'name' to + whatever the user typed. + """ + def __init__(self, props, tag, lineno): + EditBoxInputLine.__init__(self, props, tag, lineno) + + def gen(self, context = None): + EditBoxInputLine.gen(self, context) + name = self.props["name"] + if not name: + self.parse_error("No input 'name' property found", + self.lineno, self.line) + msg = self.props["msg"] + if not msg: + self.parse_error("No input 'msg' property found", + self.lineno, self.line) + + try: + default_choice = self.props["default"] + except KeyError: + default_choice = "" + + msg += " [default: " + default_choice + "]" + + line = name + " = get_verified_file(\"" + msg + "\"," + name + ", True)" + + return line + + +class BooleanInputLine(InputLine): + """ + Base class for boolean Input lines. + props: + name: example - "keyboard" + msg: example - "Got keyboard?" + result: + Sets the value of the variable specified by 'name' to "yes" or "no" + example - keyboard = "yes" + """ + def __init__(self, props, tag, lineno): + InputLine.__init__(self, props, tag, lineno) + + def gen(self, context = None): + InputLine.gen(self, context) + name = self.props["name"] + if not name: + self.parse_error("No input 'name' property found", + self.lineno, self.line) + msg = self.props["msg"] + if not msg: + self.parse_error("No input 'msg' property found", + self.lineno, self.line) + + try: + default_choice = self.props["default"] + except KeyError: + default_choice = "" + + msg += " [default: " + default_choice + "]" + + line = name + " = boolean(raw_input(\"" + msg + " \"), " + name + ")" + + return line + + +class ListInputLine(InputLine): + """ + Base class for List-based Input lines. e.g. Choicelist, Checklist. + """ + __metaclass__ = ABCMeta + + def __init__(self, props, tag, lineno): + InputLine.__init__(self, props, tag, lineno) + self.choices = [] + + def gen_choicepair_list(self): + """Generate a list of 2-item val:desc lists from self.choices.""" + if not self.choices: + return None + + choicepair_list = list() + + for choice in self.choices: + choicepair = [] + choicepair.append(choice.val) + choicepair.append(choice.desc) + choicepair_list.append(choicepair) + + return choicepair_list + + def gen_degenerate_choicepair_list(self, choices): + """Generate a list of 2-item val:desc with val=desc from passed-in choices.""" + choicepair_list = list() + + for choice in choices: + choicepair = [] + choicepair.append(choice) + choicepair.append(choice) + choicepair_list.append(choicepair) + + return choicepair_list + + def exec_listgen_fn(self, context = None): + """ + Execute the list-generating function contained as a string in + the "gen" property. + """ + retval = None + try: + fname = self.props["gen"] + modsplit = fname.split('.') + mod_fn = modsplit.pop() + mod = '.'.join(modsplit) + + __import__(mod) + # python 2.7 has a better way to do this using importlib.import_module + m = sys.modules[mod] + + fn = getattr(m, mod_fn) + if not fn: + self.parse_error("couldn't load function specified for 'gen' property ", + self.lineno, self.line) + retval = fn(context) + if not retval: + self.parse_error("function specified for 'gen' property returned nothing ", + self.lineno, self.line) + except KeyError: + pass + + return retval + + def gen_choices_str(self, choicepairs): + """ + Generate a numbered list of choices from a list of choicepairs + for display to the user. + """ + choices_str = "" + + for i, choicepair in enumerate(choicepairs): + choices_str += "\t" + str(i + 1) + ") " + choicepair[1] + "\n" + + return choices_str + + def gen_choices_val_str(self, choicepairs): + """ + Generate an array of choice values corresponding to the + numbered list generated by gen_choices_str(). + """ + choices_val_list = "[" + + for i, choicepair in enumerate(choicepairs): + choices_val_list += "\"" + choicepair[0] + "\"," + choices_val_list += "]" + + return choices_val_list + + def gen_choices_val_list(self, choicepairs): + """ + Generate an array of choice values corresponding to the + numbered list generated by gen_choices_str(). + """ + choices_val_list = [] + + for i, choicepair in enumerate(choicepairs): + choices_val_list.append(choicepair[0]) + + return choices_val_list + + def gen_choices_list(self, context = None, checklist = False): + """ + Generate an array of choice values corresponding to the + numbered list generated by gen_choices_str(). + """ + choices = self.exec_listgen_fn(context) + if choices: + if len(choices) == 0: + self.parse_error("No entries available for input list", + self.lineno, self.line) + choicepairs = self.gen_degenerate_choicepair_list(choices) + else: + if len(self.choices) == 0: + self.parse_error("No entries available for input list", + self.lineno, self.line) + choicepairs = self.gen_choicepair_list() + + return choicepairs + + def gen_choices(self, context = None, checklist = False): + """ + Generate an array of choice values corresponding to the + numbered list generated by gen_choices_str(), display it to + the user, and process the result. + """ + msg = self.props["msg"] + if not msg: + self.parse_error("No input 'msg' property found", + self.lineno, self.line) + + try: + default_choice = self.props["default"] + except KeyError: + default_choice = "" + + msg += " [default: " + default_choice + "]" + + choicepairs = self.gen_choices_list(context, checklist) + + choices_str = self.gen_choices_str(choicepairs) + choices_val_list = self.gen_choices_val_list(choicepairs) + if checklist: + choiceval = default(find_choicevals(raw_input(msg + "\n" + choices_str), choices_val_list), default_choice) + else: + choiceval = default(find_choiceval(raw_input(msg + "\n" + choices_str), choices_val_list), default_choice) + + return choiceval + + +def find_choiceval(choice_str, choice_list): + """ + Take number as string and return val string from choice_list, + empty string if oob. choice_list is a simple python list. + """ + choice_val = "" + + try: + choice_idx = int(choice_str) + if choice_idx <= len(choice_list): + choice_idx -= 1 + choice_val = choice_list[choice_idx] + except ValueError: + pass + + return choice_val + + +def find_choicevals(choice_str, choice_list): + """ + Take numbers as space-separated string and return vals list from + choice_list, empty list if oob. choice_list is a simple python + list. + """ + choice_vals = [] + + choices = choice_str.split() + for choice in choices: + choice_vals.append(find_choiceval(choice, choice_list)) + + return choice_vals + + +def default(input_str, name): + """ + Return default if no input_str, otherwise stripped input_str. + """ + if not input_str: + return name + + return input_str.strip() + + +def verify_git_repo(giturl): + """ + Verify that the giturl passed in can be connected to. This can be + used as a check for the existence of the given repo and/or basic + git remote connectivity. + + Returns True if the connection was successful, fals otherwise + """ + if not giturl: + return False + + gitcmd = "git ls-remote %s > /dev/null 2>&1" % (giturl) + rc = subprocess.call(gitcmd, shell=True) + if rc == 0: + return True + + return False + + +def get_verified_git_repo(input_str, name): + """ + Return git repo if verified, otherwise loop forever asking user + for filename. + """ + msg = input_str.strip() + " " + + giturl = default(raw_input(msg), name) + + while True: + if verify_git_repo(giturl): + return giturl + giturl = default(raw_input(msg), name) + + +def get_verified_file(input_str, name, filename_can_be_null): + """ + Return filename if the file exists, otherwise loop forever asking + user for filename. + """ + msg = input_str.strip() + " " + + filename = default(raw_input(msg), name) + + while True: + if not filename and filename_can_be_null: + return filename + if os.path.isfile(filename): + return filename + filename = default(raw_input(msg), name) + + +def replace_file(replace_this, with_this): + """ + Replace the given file with the contents of filename, retaining + the original filename. + """ + try: + replace_this.close() + shutil.copy(with_this, replace_this.name) + except IOError: + pass + + +def boolean(input_str, name): + """ + Return lowercase version of first char in string, or value in name. + """ + if not input_str: + return name + + str = input_str.lower().strip() + if str and str[0] == "y" or str[0] == "n": + return str[0] + else: + return name + + +def strip_base(input_str): + """ + strip '/base' off the end of input_str, so we can use 'base' in + the branch names we present to the user. + """ + if input_str and input_str.endswith("/base"): + return input_str[:-len("/base")] + return input_str.strip() + + +deferred_choices = {} + +def gen_choices_defer(input_line, context, checklist = False): + """ + Save the context hashed the name of the input item, which will be + passed to the gen function later. + """ + name = input_line.props["name"] + + try: + nameappend = input_line.props["nameappend"] + except KeyError: + nameappend = "" + + try: + branches_base = input_line.props["branches_base"] + except KeyError: + branches_base = "" + + filename = input_line.props["filename"] + + closetag_start = filename.find(CLOSE_TAG) + + if closetag_start != -1: + filename = filename[closetag_start + len(CLOSE_TAG):] + + filename = filename.strip() + filename = os.path.splitext(filename)[0] + + captured_context = capture_context(context) + context["filename"] = filename + captured_context["filename"] = filename + context["nameappend"] = nameappend + captured_context["nameappend"] = nameappend + context["branches_base"] = branches_base + captured_context["branches_base"] = branches_base + + deferred_choice = (input_line, captured_context, checklist) + key = name + "_" + filename + "_" + nameappend + deferred_choices[key] = deferred_choice + + +def invoke_deferred_choices(name): + """ + Invoke the choice generation function using the context hashed by + 'name'. + """ + deferred_choice = deferred_choices[name] + input_line = deferred_choice[0] + context = deferred_choice[1] + checklist = deferred_choice[2] + + context["name"] = name + + choices = input_line.gen_choices(context, checklist) + + return choices + + +class ChoicelistInputLine(ListInputLine): + """ + Base class for choicelist Input lines. + props: + name: example - "xserver_choice" + msg: example - "Please select an xserver for this machine" + result: + Sets the value of the variable specified by 'name' to whichever Choice was chosen + example - xserver_choice = "xserver_vesa" + """ + def __init__(self, props, tag, lineno): + ListInputLine.__init__(self, props, tag, lineno) + + def gen(self, context = None): + InputLine.gen(self, context) + + gen_choices_defer(self, context) + name = self.props["name"] + nameappend = context["nameappend"] + filename = context["filename"] + + try: + default_choice = self.props["default"] + except KeyError: + default_choice = "" + + line = name + " = default(invoke_