diff options
author | sanine <sanine.not@pm.me> | 2022-08-27 23:52:56 -0500 |
---|---|---|
committer | sanine <sanine.not@pm.me> | 2022-08-27 23:52:56 -0500 |
commit | a4dd0ad63c00f4dee3b86dfd3075d1d61b2b3180 (patch) | |
tree | 13bd5bfa15e6fea2a12f176bae79adf9c6fd0933 /3rdparty/plibsys/platforms/vms-general/build_vms.com | |
parent | bde3e4f1bb7b8f8abca0884a7d994ee1c17a66b1 (diff) |
add plibsys
Diffstat (limited to '3rdparty/plibsys/platforms/vms-general/build_vms.com')
-rw-r--r-- | 3rdparty/plibsys/platforms/vms-general/build_vms.com | 616 |
1 files changed, 616 insertions, 0 deletions
diff --git a/3rdparty/plibsys/platforms/vms-general/build_vms.com b/3rdparty/plibsys/platforms/vms-general/build_vms.com new file mode 100644 index 0000000..ce5e95c --- /dev/null +++ b/3rdparty/plibsys/platforms/vms-general/build_vms.com @@ -0,0 +1,616 @@ +$! +$! Copyright 2011, Richard Levitte <richard@levitte.org> +$! Copyright 2014, John Malmberg <wb8tyw@qsl.net> +$! Copyright 2016-2018, Alexander Saprykin <saprykin.spb@gmail.com> +$! +$! Permission to use, copy, modify, and/or distribute this software for any +$! purpose with or without fee is hereby granted, provided that the above +$! copyright notice and this permission notice appear in all copies. +$! +$! THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +$! WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +$! MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +$! ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +$! WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +$! ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +$! OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +$! +$!=========================================================================== +$! Command-line options: +$! +$! 32 Compile with 32-bit pointers. +$! BIGENDIAN Compile for a big endian host. +$! CCQUAL=x Add "x" to the C compiler qualifiers. +$! DEBUG Build in debug mode. +$! CLEAN Only perform clean after the previous build. +$! TESTS=(x) Build library tests. Comma separated test names or leave +$! empty to build all the tests. +$! Example 1 (curtain tests): TESTS=(pmem,puthread) +$! Example 2 (all tests): TESTS +$! RUN_TESTS Runs all tests. +$! NOLIB Skip library buidling. Useful when you want to rebuild +$! particular tests. +$!=========================================================================== +$! +$! +$! Save the original default dev:[dir], and arrange for its restoration +$! at exit. +$!--------------------------------------------------------------------- +$ orig_def = f$environment("DEFAULT") +$ on error then goto common_exit +$ on severe_error then goto common_exit +$ on control_y then goto common_exit +$! +$ ctrl_y = 1556 +$ proc = f$environment("PROCEDURE") +$ proc_fid = f$file_attributes(proc, "FID") +$ proc_dev = f$parse(proc, , , "DEVICE") +$ proc_dir = f$parse(proc, , , "DIRECTORY") +$ proc_name = f$parse(proc, , , "NAME") +$ proc_type = f$parse(proc, , , "TYPE") +$ proc_dev_dir = proc_dev + proc_dir +$! +$! Have to manually parse the device for a search list. +$! Can not use the f$parse() as it will return the first name +$! in the search list. +$! +$ orig_def_dev = f$element(0, ":", orig_def) + ":" +$ if orig_def_dev .eqs. "::" then orig_def_dev = "sys$disk:" +$ test_proc = orig_def_dev + proc_dir + proc_name + proc_type +$! +$! If we can find this file using the default directory +$! then we know that we should use the original device from the +$! default directory which could be a search list. +$! +$ test_proc_fid = f$file_attributes(test_proc, "FID") +$! +$ if (test_proc_fid .eq. proc_fid) +$ then +$ proc_dev_dir = orig_def_dev + proc_dir +$ endif +$! +$! Verbose output message stuff. Define symbol to "write sys$output". +$! vo_c - verbose output for compile +$! +$ vo_c := "write sys$output" +$! +$! Determine the main distribution directory ("[--]") in an +$! ODS5-tolerant (case-insensitive) way. (We do assume that the only +$! "]" or ">" is the one at the end.) +$! +$! Some non-US VMS installations report ">" for the directory delimiter +$! so do not assume that it is "]". +$! +$ orig_def_len = f$length(orig_def) +$ delim = f$extract(orig_def_len - 1, 1, orig_def) +$! +$ set default 'proc_dev_dir' +$ set default [--.src] +$ base_src_dir = f$environment("default") +$ set default 'proc_dev_dir' +$! +$! Define the architecture-specific destination directory name +$! ----------------------------------------------------------- +$! +$ if (f$getsyi("HW_MODEL") .lt. 1024) +$ then +$ 'vo_c' "%PLIBSYS-F-NOTSUP, VAX platform is not supported, sorry :(" +$ goto common_exit +$ else +$ arch_name = "" +$ arch_name = arch_name + f$edit(f$getsyi("ARCH_NAME"), "UPCASE") +$! +$ if (arch_name .eqs. "") then arch_name = "UNK" +$! +$ node_swvers = f$getsyi("node_swvers") +$ version_patch = f$extract(1, f$length(node_swvers), node_swvers) +$ maj_ver = f$element(0, ".", version_patch) +$ min_ver_patch = f$element(1, ".", version_patch) +$ min_ver = f$element(0, "-", min_ver_patch) +$ patch = f$element(1, "-", min_ver_patch) +$! +$ if maj_ver .lts. "8" .or. min_ver .lts. "4" +$ then +$ 'vo_c' "%PLIBSYS-F-NOTSUP, only OpenVMS 8.4 and above are supported, sorry :(" +$ goto common_exit +$ endif +$ endif +$! +$ objdir = proc_dev_dir - delim + ".''arch_name'" + delim +$! +$! Parse input arguments +$! --------------------- +$! Allow arguments to be grouped together with comma or separated by spaces +$! Do no know if we will need more than 8. +$ args = "," + p1 + "," + p2 + "," + p3 + "," + p4 + "," +$ args = args + p5 + "," + p6 + "," + p7 + "," + p8 + "," +$! +$! Provide lower case version to simplify parsing. +$ args_lower = f$edit(args, "LOWERCASE,COLLAPSE") +$! +$ args_len = f$length(args) +$ args_lower_len = f$length(args_lower) +$! +$ if f$locate(",clean,", args_lower) .lt. args_lower_len +$ then +$ 'vo_c' "Cleaning up previous build..." +$ set default 'proc_dev_dir' +$! +$ if f$search("''arch_name'.DIR") .nes. "" +$ then +$ set prot=w:d []'arch_name'.DIR;* +$ delete/tree [.'arch_name'...]*.*;* +$ delete []'arch_name'.DIR;* +$ endif +$! +$ goto common_exit +$ endif +$! +$ build_64 = 1 +$ if f$locate(",32,", args_lower) .lt. args_lower_len +$ then +$ build_64 = 0 +$ endif +$! +$ big_endian = 0 +$ if f$locate(",bigendian,", args_lower) .lt. args_lower_len +$ then +$ big_endian = 1 +$ endif +$! +$ cc_extra = "" +$ args_loc = f$locate(",ccqual=", args_lower) +$ if args_loc .lt. args_lower_len +$ then +$ arg = f$extract(args_loc + 1, args_lower_len, args_lower) +$ arg_val = f$element(0, ",", arg) +$ cc_extra = f$element(1, "=", arg_val) +$ endif +$! +$ is_debug = 0 +$ if f$locate(",debug,", args_lower) .lt. args_lower_len +$ then +$ is_debug = 1 +$ endif +$! +$ is_tests = 0 +$ test_list = "" +$ if f$locate(",tests,", args_lower) .lt. args_lower_len +$ then +$ is_tests = 1 +$ else +$ args_loc = f$locate(",tests=(", args_lower) +$ if args_loc .lt. args_lower_len +$ then +$ is_tests = 1 +$ arg = f$extract(args_loc + 1, args_lower_len, args_lower) +$ arg_val = f$element(0, ")", arg) +$ test_list_val = f$element(1, "=", arg_val) - "(" - ")" +$ test_list_val = f$edit(test_list_val, "COLLAPSE") +$ test_list_counter = 0 +$ +$ test_list_loop: +$ next_test_val = f$element (test_list_counter, ",", test_list_val) +$ if next_test_val .nes. "" .and. next_test_val .nes. "," +$ then +$ test_list = test_list + next_test_val + " " +$ test_list_counter = test_list_counter + 1 +$ goto test_list_loop +$ endif +$ endif +$ endif +$! +$ run_tests = 0 +$ if f$locate(",run_tests,", args_lower) .lt. args_lower_len +$ then +$ run_tests = 1 +$ endif +$! +$! Prepare build directory +$! ----------------------- +$! +$! When building on a search list, need to do a create to make sure that +$! the output directory exists, since the clean procedure tries to delete +$! it. +$! +$ if f$search("''proc_dev_dir'''arch_name'.DIR") .eqs. "" +$ then +$ create/dir 'objdir'/prot=o:rwed +$ endif +$! +$ set default 'objdir' +$ if f$search("CXX_REPOSITORY.DIR") .nes. "" +$ then +$ set prot=w:d []CXX_REPOSITORY.DIR;* +$ delete/tree [.CXX_REPOSITORY...]*.*;* +$ delete []CXX_REPOSITORY.DIR;* +$ endif +$! +$ if f$locate(",nolib,", args_lower) .lt. args_lower_len +$ then +$ goto build_tests +$ endif +$! +$! Generate platform-specific config file +$! -------------------------------------- +$! +$ if f$search("plibsysconfig.h") .nes. "" then delete plibsysconfig.h;* +$! +$! Get the version number +$! ---------------------- +$! +$ i = 0 +$ open/read/error=version_loop_end vhf [---]CMakeLists.txt +$ version_loop: +$ read/end=version_loop_end vhf line_in +$! +$ if line_in .eqs. "" then goto version_loop +$! +$ if f$locate("set (PLIBSYS_VERSION_MAJOR ", line_in) .eq. 0 +$ then +$ plibsys_vmajor = f$element(2, " ", line_in) - ")" +$ i = i + 1 +$ endif +$! +$ if f$locate("set (PLIBSYS_VERSION_MINOR ", line_in) .eq. 0 +$ then +$ plibsys_vminor = f$element(2, " ", line_in) - ")" +$ i = i + 1 +$ endif +$! +$ if f$locate("set (PLIBSYS_VERSION_PATCH ", line_in) .eq. 0 +$ then +$ plibsys_vpatch = f$element(2, " ", line_in) - ")" +$ i = i + 1 +$ endif +$! +$ if f$locate("set (PLIBSYS_VERSION_NUM ", line_in) .eq. 0 +$ then +$ plibsys_vnum = f$element(2, " ", line_in) - ")" +$ i = i + 1 +$ endif +$! +$ if i .lt 4 then goto version_loop +$ version_loop_end: +$ close vhf +$! +$! Write config file +$! ----------------- +$! +$ open/write/error=config_write_end chf plibsysconfig.h +$ write chf "#ifndef PLIBSYS_HEADER_PLIBSYSCONFIG_H" +$ write chf "#define PLIBSYS_HEADER_PLIBSYSCONFIG_H" +$ write chf "" +$ write chf "#define PLIBSYS_VERSION_MAJOR ''plibsys_vmajor'" +$ write chf "#define PLIBSYS_VERSION_MINOR ''plibsys_vminor'" +$ write chf "#define PLIBSYS_VERSION_PATCH ''plibsys_vpatch'" +$ write chf "#define PLIBSYS_VERSION_STR ""''plibsys_vmajor'.''plibsys_vminor'.''plibsys_vpatch'""" +$ write chf "#define PLIBSYS_VERSION ''plibsys_vnum'" +$ write chf "" +$ write chf "#define PLIBSYS_SIZEOF_SAFAMILY_T 1" +$ write chf "" +$ write chf "#include <pmacros.h>" +$ write chf "" +$ write chf "#include <float.h>" +$ write chf "#include <limits.h>" +$ write chf "" +$ write chf "P_BEGIN_DECLS" +$ write chf "" +$ write chf "#define P_MINFLOAT FLT_MIN" +$ write chf "#define P_MAXFLOAT FLT_MAX" +$ write chf "#define P_MINDOUBLE DBL_MIN" +$ write chf "#define P_MAXDOUBLE DBL_MAX" +$ write chf "#define P_MINSHORT SHRT_MIN" +$ write chf "#define P_MAXSHORT SHRT_MAX" +$ write chf "#define P_MAXUSHORT USHRT_MAX" +$ write chf "#define P_MININT INT_MIN" +$ write chf "#define P_MAXINT INT_MAX" +$ write chf "#define P_MAXUINT UINT_MAX" +$ write chf "#define P_MINLONG LONG_MIN" +$ write chf "#define P_MAXLONG LONG_MAX" +$ write chf "#define P_MAXULONG ULONG_MAX" +$ write chf "" +$ write chf "#define PLIBSYS_MMAP_HAS_MAP_ANONYMOUS" +$ write chf "#define PLIBSYS_HAS_NANOSLEEP" +$ write chf "#define PLIBSYS_HAS_GETADDRINFO" +$ write chf "#define PLIBSYS_HAS_POSIX_SCHEDULING" +$ write chf "#define PLIBSYS_HAS_POSIX_STACKSIZE" +$ write chf "#define PLIBSYS_HAS_SOCKADDR_STORAGE" +$ write chf "#define PLIBSYS_SOCKADDR_HAS_SA_LEN" +$ write chf "#define PLIBSYS_SOCKADDR_IN6_HAS_SCOPEID" +$ write chf "#define PLIBSYS_SOCKADDR_IN6_HAS_FLOWINFO" +$ write chf "" +$! +$ if build_64 .eqs. "1" +$ then +$ write chf "#define PLIBSYS_SIZEOF_VOID_P 8" +$ write chf "#define PLIBSYS_SIZEOF_SIZE_T 8" +$ else +$ write chf "#define PLIBSYS_SIZEOF_VOID_P 4" +$ write chf "#define PLIBSYS_SIZEOF_SIZE_T 4" +$ endif +$! +$ write chf "#define PLIBSYS_SIZEOF_LONG 4" +$ write chf "" +$! +$ if big_endian .eqs. "1" +$ then +$ write chf "#define P_BYTE_ORDER P_BIG_ENDIAN" +$ else +$ write chf "#define P_BYTE_ORDER P_LITTLE_ENDIAN" +$ endif +$! +$ write chf "" +$ write chf "P_END_DECLS" +$ write chf "" +$ write chf "#endif /* PLIBSYS_HEADER_PLIBSYSCONFIG_H */" +$ config_write_end: +$ close chf +$! +$! Prepare sources for compilation +$! ------------------------------- +$! +$ cc_link_params = "" +$ cc_params = "/NAMES=(AS_IS,SHORTENED)" +$ cc_params = cc_params + "/DEFINE=(PLIBSYS_COMPILATION,_REENTRANT,_POSIX_EXIT)" +$ cc_params = cc_params + "/INCLUDE_DIRECTORY=(''objdir',''base_src_dir')" +$ cc_params = cc_params + "/FLOAT=IEEE/IEEE_MODE=DENORM_RESULTS" +$! +$ if build_64 .eqs. "1" +$ then +$ cc_params = cc_params + "/POINTER_SIZE=64" +$ else +$ cc_params = cc_params + "/POINTER_SIZE=32" +$ endif +$! +$ if cc_extra .nes. "" +$ then +$ cc_params = cc_params + " " + cc_extra +$ endif +$! +$ if is_debug .eqs. "1" +$ then +$ cc_params = cc_params + "/DEBUG/NOOPTIMIZE/LIST/SHOW=ALL" +$ cc_link_params = "/DEBUG/TRACEBACK" +$ else +$ cc_link_params = "/NODEBUG/NOTRACEBACK" +$ endif +$! +$ plibsys_src = "patomic-decc.c pcondvariable-posix.c pcryptohash-gost3411.c pcryptohash-md5.c" +$ plibsys_src = plibsys_src + " pcryptohash-sha1.c pcryptohash-sha2-256.c pcryptohash-sha2-512.c" +$ plibsys_src = plibsys_src + " pcryptohash-sha3.c pcryptohash.c pdir-posix.c pdir.c" +$ plibsys_src = plibsys_src + " perror.c pfile.c phashtable.c pinifile.c pipc.c plibraryloader-posix.c" +$ plibsys_src = plibsys_src + " plist.c pmain.c pmem.c pmutex-posix.c pprocess.c prwlock-posix.c" +$ plibsys_src = plibsys_src + " psemaphore-posix.c pshm-posix.c pshmbuffer.c psocket.c" +$ plibsys_src = plibsys_src + " psocketaddress.c pspinlock-decc.c pstring.c psysclose-unix.c" +$ plibsys_src = plibsys_src + " ptimeprofiler-posix.c ptimeprofiler.c ptree-avl.c ptree-bst.c" +$ plibsys_src = plibsys_src + " ptree-rb.c ptree.c puthread-posix.c puthread.c" +$! +$! Inform about building +$! --------------------- +$! +$ if build_64 .eqs. "1" +$ then +$ 'vo_c' "Building for ''arch_name' (64-bit)" +$ else +$ 'vo_c' "Building for ''arch_name' (32-bit)" +$ endif +$! +$! Compile library modules +$! ----------------------- +$! +$ 'vo_c' "Compiling object modules..." +$ src_counter = 0 +$ plibsys_src = f$edit(plibsys_src, "COMPRESS") +$ plibsys_objs = "" +$! +$ src_loop: +$ next_src = f$element (src_counter, " ", plibsys_src) +$ if next_src .nes. "" .and. next_src .nes. " " +$ then +$ 'vo_c' "[CC] ''next_src'" +$ cc [---.src]'next_src' 'cc_params' +$! +$ src_counter = src_counter + 1 +$! +$ obj_file = f$extract (0, f$length (next_src) - 1, next_src) + "obj" +$ plibsys_objs = plibsys_objs + "''obj_file'," +$ purge 'obj_file' +$! +$ goto src_loop +$ endif +$! +$ plibsys_objs = f$extract (0, f$length (plibsys_objs) - 1, plibsys_objs) +$! +$! Create library +$! -------------- +$! +$ 'vo_c' "Creating object library..." +$ library/CREATE/INSERT/REPLACE /LIST=PLIBSYS.LIS PLIBSYS.OLB 'plibsys_objs' +$ library/COMPRESS PLIBSYS.OLB +$ purge PLIBSYS.OLB +$ purge PLIBSYS.LIS +$! +$ 'vo_c' "Creating shared library..." +$ link/SHAREABLE=PLIBSYS.EXE /MAP=PLIBSYS.MAP 'cc_link_params' 'plibsys_objs', [-]plibsys.opt/OPTION +$ purge PLIBSYS.EXE +$ purge PLIBSYS.MAP +$! +$! Testing area +$! ------------ +$! +$ build_tests: +$ test_list_full = "patomic pcondvariable pcryptohash pdir" +$ test_list_full = test_list_full + " perror pfile phashtable pinifile plibraryloader plist" +$ test_list_full = test_list_full + " pmacros pmain pmem pmutex pprocess prwlock psemaphore" +$ test_list_full = test_list_full + " pshm pshmbuffer psocket psocketaddress pspinlock pstdarg" +$ test_list_full = test_list_full + " pstring ptimeprofiler ptree ptypes puthread" +$! +$ if is_tests .eqs. "0" +$ then +$ goto build_done +$ endif +$! +$! Write link options file +$! ----------------------- +$! +$ if f$search("plibsys_link.opt") .nes. "" then delete plibsys_link.opt;* +$! +$ open/write/error=link_write_end lhf plibsys_link.opt +$ write lhf "''objdir'PLIBSYS.EXE/SHARE" +$ write lhf "" +$ link_write_end: +$ close lhf +$! +$! Compile tests +$! ------------------------- +$! +$ if test_list .nes. "" +$ then +$ plibsys_tests = f$edit(test_list, "TRIM") +$ else +$ plibsys_tests = test_list_full +$ endif +$! +$ 'vo_c' "Compiling test executables..." +$ test_counter = 0 +$ plibsys_tests = f$edit(plibsys_tests, "COMPRESS") +$! +$ cxx_params = "/INCLUDE=(''objdir',''base_src_dir')" +$ cxx_params = cxx_params + "/DEFINE=(__USE_STD_IOSTREAM)/NAMES=(AS_IS, SHORTENED)" +$ cxx_params = cxx_params + "/FLOAT=IEEE/IEEE_MODE=DENORM_RESULTS" +$! +$ if build_64 .eqs. "1" +$ then +$ set noon +$ define/user/nolog sys$output NL: +$ define/user/nolog sys$error NL: +$ cxx/POINTER_SIZE=64=ARGV NL: +$! +$ if ($STATUS .and. %X0FFF0000) .eq. %X00030000 +$ then +$! +$! If we got here, it means DCL complained like this: +$! %DCL-W-NOVALU, value not allowed - remove value specification +$! \64=\ +$! +$! If the compiler was run, logicals defined in /USER would +$! have been deassigned automatically. However, when DCL +$! complains, they aren't, so we do it here (it might be +$! unnecessary, but just in case there will be another error +$! message further on that we don't want to miss). +$! +$ deassign/user/nolog sys$error +$ deassign/user/nolog sys$output +$ cxx_params = cxx_params + "/POINTER_SIZE=64" +$ else +$ cxx_params = cxx_params + "/POINTER_SIZE=64=ARGV" +$ endif +$ else +$ cxx_params = cxx_params + "/POINTER_SIZE=32" +$ endif +$! +$ if is_debug .eqs. "1" +$ then +$ cxx_params = cxx_params + "/DEBUG/NOOPTIMIZE/LIST/SHOW=ALL" +$ endif +$! +$ test_loop: +$ next_test = f$element (test_counter, " ", plibsys_tests) +$ if next_test .nes. "" .and. next_test .nes. " " +$ then +$ next_test = next_test + "_test" +$ 'vo_c' "[CXX ] ''next_test'.cpp" +$ cxx [---.tests]'next_test'.cpp 'cxx_params' +$! +$ 'vo_c' "[CXXLINK] ''next_test'.obj" +$ cxxlink 'next_test'.obj,'objdir'plibsys_link.opt/OPTION /THREADS_ENABLE +$! +$ if f$search("CXX_REPOSITORY.DIR") .nes. "" +$ then +$ set prot=w:d []CXX_REPOSITORY.DIR;* +$ delete/tree [.CXX_REPOSITORY...]*.*;* +$ delete []CXX_REPOSITORY.DIR;* +$ endif +$! +$ purge 'next_test'.obj +$ purge 'next_test'.exe +$! +$ test_counter = test_counter + 1 +$ goto test_loop +$ endif +$! +$ build_done: +$ 'vo_c' "Build done." +$! +$! Run unit tests +$! -------------- +$! +$ if run_tests .eqs. "0" +$ then +$ if is_tests .eqs. "1" +$ then +$ 'vo_c' "To run tests invoke: @build_vms.com NOLIB RUN_TESTS" +$ endif +$ goto common_exit +$ endif +$! +$ 'vo_c' "Running tests..." +$ test_counter = 0 +$ tests_passed = 0 +$! +$ run_loop: +$ next_test = f$element (test_counter, " ", test_list_full) +$ if next_test .nes. "" .and. next_test .nes. " " +$ then +$ if f$search("''next_test'_test.exe") .eqs. "" +$ then +$ 'vo_c' "[SKIP] Test not found: ''next_test'" +$ goto run_loop_next +$ endif +$! +$ 'vo_c' "[RUN ] ''next_test'" +$! +$ define/user/nolog sys$error NL: +$ define/user/nolog sys$output NL: +$ define/user/nolog plibsys 'objdir'PLIBSYS.EXE +$ define/user/nolog test_imgdir 'objdir' +$! +$! Disable error cheking for the test binary +$! +$ set noon +$! +$ xrun := $test_imgdir:'next_test'_test.exe +$ if next_test .eqs. "plibraryloader" +$ then +$ xrun 'objdir'PLIBSYS.EXE +$ else +$ xrun +$ endif +$! +$ if $STATUS .eqs. "%X00000001" +$ then +$ 'vo_c' "[PASS] Test passed: ''next_test'" +$ tests_passed = tests_passed + 1 +$ else +$ 'vo_c' "[FAIL] *** Test failed: ''next_test'" +$ endif +$! +$ set on +$! +$ run_loop_next: +$ test_counter = test_counter + 1 +$ goto run_loop +$ endif +$! +$ 'vo_c' "Tests passed: ''tests_passed'/''test_counter'" +$! +$! In case of error during the last test +$ deassign/user/nolog sys$error +$ deassign/user/nolog sys$output +$ deassign/user/nolog plibsys +$ deassign/user/nolog test_imgdir +$! +$ common_exit: +$ set default 'orig_def' +$ exit |