1private variable Script_Version_String = "0.1.2"; 2 3require ("cmdopt"); 4require ("glob"); 5 6private define convert_path (path) 7{ 8 return strtrans (path, "/", "\\"); 9} 10 11private define mkdir_p (dir); 12private define mkdir_p (dir) 13{ 14 dir = convert_path (dir); 15 16 if ((-1 == mkdir (dir)) && (errno != EEXIST)) 17 { 18 variable parent = path_dirname (dir); 19 if ((-1 == mkdir_p (parent)) 20 || (-1 == mkdir (dir))) 21 { 22 () = fprintf (stderr, "Failed to create %s: %s\n", 23 dir, errno_string ()); 24 exit (1); 25 } 26 } 27 return 0; 28} 29 30private define run_cmd (cmd) 31{ 32 () = system (cmd); 33} 34 35private define install_file (file, dir) 36{ 37 () = fprintf (stdout, "Installing %s in %s\n", file, dir); 38 dir = convert_path (dir); 39 file = convert_path (file); 40 41 run_cmd ("copy /y $file $dir"$); 42} 43 44private define install_files (pat, dir) 45{ 46 foreach (glob (pat)) 47 { 48 variable file = (); 49 install_file (file, dir); 50 } 51} 52 53private define install_libslang (root, objdir) 54{ 55 variable libdir = "$root/lib"$; 56 variable bindir = "$root/bin"$; 57 variable incdir = "$root/include"$; 58 59 () = mkdir_p (libdir); 60 () = mkdir_p (incdir); 61 () = mkdir_p (bindir); 62 63 install_file ("src/slang.h", incdir); 64 install_file ("src/$objdir/libslang.a"$, libdir); 65 install_file ("src/$objdir/libslang.dll"$, bindir); 66} 67 68private define install_slang_doc (root) 69{ 70 variable dir = "$root/share/doc/slang/v2"$; 71 () = mkdir_p (dir); 72 install_file ("changes.txt", dir); 73 install_file ("COPYING", dir); 74 install_file ("doc/slangdoc.html", dir); 75 install_file ("doc/text/*.txt", dir); 76} 77 78private define install_slsh (prefix, confdir, objdir) 79{ 80 variable dir = "$prefix/bin"$; 81 () = mkdir_p (dir); 82 install_file ("slsh/$objdir/slsh.exe"$, dir); 83 84 dir = "$prefix/share/slsh"$; 85 () = mkdir_p (dir); 86 install_files ("slsh/lib/*.sl", dir); 87 88 dir = "$prefix/share/slsh/help"$; 89 () = mkdir_p (dir); 90 install_files ("slsh/lib/help/*.hlp", dir); 91 92 dir = "$prefix/share/slsh/rline"$; 93 () = mkdir_p (dir); 94 install_files ("slsh/lib/rline/*", dir); 95 96 dir = "$prefix/share/slsh/scripts"$; 97 () = mkdir_p (dir); 98 install_files ("slsh/scripts/*", dir); 99 100 dir = "$prefix/share/slsh/local-packages"$; 101 () = mkdir_p (dir); 102 dir = "$prefix/share/slsh/local-packages/help"$; 103 () = mkdir_p (dir); 104 105 dir = "$confdir"$; 106 () = mkdir_p (dir); 107 install_file ("slsh/etc/slsh.rc", dir); 108} 109 110private define install_modules (prefix) 111{ 112 variable dir = "$prefix/lib/slang/v2/modules"$; 113 () = mkdir_p (dir); 114 install_files ("modules/*.dll", dir); 115 116 dir = "$prefix/share/slsh"$; 117 () = mkdir_p (dir); 118 install_files ("modules/*.sl", dir); 119 120 dir = "$prefix/share/slsh/statslib"$; 121 () = mkdir_p (dir); 122 install_files ("modules/statslib/*.sl", dir); 123 124 dir = "$prefix/share/slsh/cmaps"$; 125 () = mkdir_p (dir); 126 install_files ("modules/cmaps/*", dir); 127} 128 129private define exit_version () 130{ 131 () = fprintf (stdout, "Version: %S\n", Script_Version_String); 132 exit (0); 133} 134 135private define exit_usage () 136{ 137 variable fp = stderr; 138 () = fprintf (fp, "Usage: %s [options] install\n", __argv[0]); 139 variable opts = 140 [ 141 "Options:\n", 142 " -v|--version Print version\n", 143 " -h|--help This message\n", 144 " --prefix=/install/prefix Default is /usr\n", 145 " --distdir=/path Default is blank\n", 146 ]; 147 foreach (opts) 148 { 149 variable opt = (); 150 () = fputs (opt, fp); 151 } 152 exit (1); 153} 154 155define slsh_main () 156{ 157 variable c = cmdopt_new (); 158 variable destdir = ""; 159 variable prefix = "/usr"; 160 161 c.add("h|help", &exit_usage); 162 c.add("v|version", &exit_version); 163 c.add("destdir", &destdir; type="str"); 164 c.add("prefix", &prefix; type="str"); 165 variable i = c.process (__argv, 1); 166 167 if ((i + 1 != __argc) || (__argv[i] != "install")) 168 exit_usage (); 169 170 % See the comment in makefile.m32 for the motivation behind the 171 % sillyness involving X-. 172 if (0==strncmp (destdir, "X-", 2)) 173 destdir = substr (destdir, 3, -1); 174 175 () = fprintf (stdout, "Using destdir=%s, prefix=%s\n", destdir, prefix); 176 177 variable root = strcat (destdir, prefix); 178 179 variable confdir = "/etc"; 180 if (prefix != "/usr") 181 confdir = path_concat (prefix, "etc"); 182 confdir = strcat (destdir, confdir); 183 184 variable objdir = "gw32objs"; 185 install_libslang (root, objdir); 186 install_slang_doc (root); 187 install_slsh (root, confdir, objdir); 188 install_modules (root); 189} 190