diff --git a/bin/mkpackage.pike b/bin/mkpackage.pike index 1316ee3f2ebcfc2b1a52e6103c1ac585652041eb..9a4354097a26f8874edc735f8c73b3bbaccf4d82 100644 --- a/bin/mkpackage.pike +++ b/bin/mkpackage.pike @@ -43,6 +43,7 @@ class Package protected string extra_flags; protected string extra_license; protected string extra_version; + protected string extra_platform_test; protected private mapping(array(string):string) options; @@ -53,7 +54,8 @@ class Package string _extra_advanced_help, string _extra_flags, string _extra_license, - string _extra_version) + string _extra_version, + string _extra_platform_test) { my_name = _my_name; pike_filename = _pike_filename; @@ -63,6 +65,7 @@ class Package extra_flags = _extra_flags; extra_license = _extra_license; extra_version = _extra_version; + extra_platform_test = _extra_platform_test; options = ([ ({ "-h", "--help" }): @@ -130,6 +133,9 @@ class Package ({ "-l", "--list" }): "echo \"$CONTENTS\"\n" "EXIT=yes" ]); + if (extra_platform_test) { + options[({ "-t", "--test" })] = "EXIT=late"; + } } protected private array(string) packages = ({}); @@ -188,13 +194,14 @@ class Package "MY_NAME='"+my_name+"'\n" "EXTRA_LICENSE="+sh_quote(extra_license)+"\n" "export EXTRA_LICENSE\n" + "EXIT=no\n" + "EXITCODE=0\n" + // FIXME: Apply proper quotes. + "EXTRA_HELP='"+extra_help+"'\n" + "EXTRA_ADVANCED_HELP='"+extra_advanced_help+"'\n" // Check all arguments for possible options. "while [ $# != 0 ]\n" "do\n" - " EXIT=no\n" - // FIXME: Apply proper quotes. - " EXTRA_HELP='"+extra_help+"'\n" - " EXTRA_ADVANCED_HELP='"+extra_advanced_help+"'\n" " case \"$1\" in\n" +Array.map(sort(indices(options)), lambda(array(string) flags) @@ -228,12 +235,26 @@ class Package // Commence installation. "mkdir "+unpack_directory+"\n" "(cd "+unpack_directory+"\n" - " \"$TAR\" xf \"$TARFILE\" $CONTENTS\n" - " eval \"./"+basename(pike_filename)+" " - "--script \\\"\\`pwd\\`/"+ - basename(install_filename)+"\\\"" - " -- $ARGS\")\n" - "rm -rf "+setup_filename+" "+unpack_directory+"\n"); + " \"$TAR\" xf \"$TARFILE\" $CONTENTS\n"); + if (extra_platform_test) { + setup += ("if ./" + basename(extra_platform_test) + "\n" + "then :; else\n" + " EXIT=yes\n" + " EXITCODE=$?\n" + "fi\n"); + } + setup += ("if [ $EXIT = no ]\n" + "then\n" + " eval \"./"+basename(pike_filename)+" "+ + ("--script \\\"\\`pwd\\`/"+ + basename(install_filename)+"\\\"" + " -- $ARGS\"\n") + + " EXITCODE=$?\n" + "fi\n" + "exit $EXITCODE)\n" + "EXITCODE=$?\n" + "rm -rf "+setup_filename+" "+unpack_directory+"\n" + "exit $EXITCODE\n"); string bootstrap = sprintf("#!/bin/sh\n" "tar xf \"$0\" %s\n" @@ -256,6 +277,10 @@ class Package setup_filename }))->wait(); packages = ({ install_filename, pike_filename }) + packages; + + if (extra_platform_test) { + packages = ({ extra_platform_test }) + packages; + } string original_wd = getcwd(); foreach(packages, string package) @@ -312,7 +337,8 @@ int main(int argc, array(string) argv) " EXTRA_PACKAGE_ADVANCED_HELP\n" " EXTRA_PACKAGE_FLAGS\n" " EXTRA_PACKAGE_LICENSE\n" - " EXTRA_PACKAGE_VERSION\n"); + " EXTRA_PACKAGE_VERSION\n" + " EXTRA_PLATFORM_TEST\n"); return 1; } @@ -321,7 +347,8 @@ int main(int argc, array(string) argv) getenv("EXTRA_PACKAGE_ADVANCED_HELP") || "", getenv("EXTRA_PACKAGE_FLAGS") || "", getenv("EXTRA_PACKAGE_LICENSE") || "", - getenv("EXTRA_PACKAGE_VERSION") || "Package version unknown.")-> + getenv("EXTRA_PACKAGE_VERSION") || "Package version unknown.", + getenv("EXTRA_PLATFORM_TEST"))-> add_packages(@argv[4..])->make(argv[1]); return 0;