diff options
author | Jérémy Zurcher <jeremy@asynk.ch> | 2022-03-07 14:43:44 +0100 |
---|---|---|
committer | Jérémy Zurcher <jeremy@asynk.ch> | 2022-03-07 14:43:44 +0100 |
commit | cbcab8684e06379c9f5c51cfc9cac68d8684fe0c (patch) | |
tree | d03b04e9a7f8e3aae70e590953408f90deed077c /skeletons | |
parent | 721a7ea65d23e7b149ba73968a1d75727a55b390 (diff) | |
download | vim-cbcab8684e06379c9f5c51cfc9cac68d8684fe0c.zip vim-cbcab8684e06379c9f5c51cfc9cac68d8684fe0c.tar.gz |
move to old
Diffstat (limited to 'skeletons')
-rw-r--r-- | skeletons/Makefile.erb | 18 | ||||
-rw-r--r-- | skeletons/Makefile.lou.erb | 39 | ||||
-rw-r--r-- | skeletons/README.erb | 62 | ||||
-rw-r--r-- | skeletons/__init__.py.erb | 5 | ||||
-rw-r--r-- | skeletons/awk.erb | 9 | ||||
-rw-r--r-- | skeletons/awk.hdr | 12 | ||||
-rw-r--r-- | skeletons/c.erb | 9 | ||||
-rw-r--r-- | skeletons/c.hdr | 9 | ||||
-rw-r--r-- | skeletons/c_header.erb | 20 | ||||
-rw-r--r-- | skeletons/cst.erb | 14 | ||||
-rw-r--r-- | skeletons/eo.erb | 51 | ||||
-rw-r--r-- | skeletons/html.erb | 19 | ||||
-rw-r--r-- | skeletons/java.erb | 66 | ||||
-rw-r--r-- | skeletons/lout.erb | 43 | ||||
-rw-r--r-- | skeletons/main.c.erb | 134 | ||||
-rw-r--r-- | skeletons/main.h.erb | 26 | ||||
-rw-r--r-- | skeletons/opt_parse.py.erb | 60 | ||||
-rw-r--r-- | skeletons/pir.erb | 5 | ||||
-rw-r--r-- | skeletons/python.erb | 42 | ||||
-rw-r--r-- | skeletons/python.hdr | 13 | ||||
-rw-r--r-- | skeletons/ruby.erb | 12 | ||||
-rw-r--r-- | skeletons/ruby.hdr | 14 | ||||
-rw-r--r-- | skeletons/setup.py.erb | 28 | ||||
-rw-r--r-- | skeletons/setup.rb.erb | 1596 | ||||
-rw-r--r-- | skeletons/sh.erb | 32 | ||||
-rw-r--r-- | skeletons/sh.hdr | 12 | ||||
-rw-r--r-- | skeletons/tex.erb | 74 | ||||
-rw-r--r-- | skeletons/wxApp.py.erb | 126 |
28 files changed, 0 insertions, 2550 deletions
diff --git a/skeletons/Makefile.erb b/skeletons/Makefile.erb deleted file mode 100644 index ac7e0a6..0000000 --- a/skeletons/Makefile.erb +++ /dev/null @@ -1,18 +0,0 @@ - - -CC = gcc -STD = _GNU_SOURCE -OBJS = A.o test.o B.o -CFLAGS = -D__TZURTCH__ -BIN = binary - -.PHONY: clean - -.c.o: - $(CC) -c -Wall -I. $(CFLAGS) -D$(STD) -o $@ $< - -all: $(OBJS) - $(CC) $(OBJS) -o $@ - -clean: - rm -f *~ *.o core $(BIN) diff --git a/skeletons/Makefile.lou.erb b/skeletons/Makefile.lou.erb deleted file mode 100644 index bb2cec6..0000000 --- a/skeletons/Makefile.lou.erb +++ /dev/null @@ -1,39 +0,0 @@ - -# USER VAR -MAIN=file_name -LOUT_FILES=${MAIN}.lou -# - -LOUT_MAIN=${MAIN}.lou -PSNAME=${MAIN}.ps -PDFNAME=${MAIN}.pdf - -AWK=gawk -LOUT=lout -PS2PDF=ps2pdf - -.SUFFIXES: .lout .lou - -all: $(PSNAME) $(PDFNAME) - -utf8_lat1: - @( \ - echo '#! /bin/sh'; \ - echo 'file $$1 | grep UTF-8 >/dev/null'; \ - echo 'if [ $$? -eq 0 ]; then'; \ - echo ' iconv --from utf8 --to iso88591 $$1 > $$(basename $$1 .lou).lat1'; \ - echo 'else'; \ - echo ' cp $$1 $$(basename $$1 .lou).lat1'; \ - echo 'fi'; \ - ) > utf8_lat1 - @chmod 755 utf8_lat1 - -$(PSNAME): utf8_lat1 $(LOUT_FILES) - $(LOUT) -r3 -o $(PSNAME) $(LOUT_MAIN) - -$(PDFNAME): $(PSNAME) - $(PS2PDF) $(PSNAME) - -clean: - @rm *.ps *.ld *.li *.lix *.lat1 *~ utf8_lout utf8_lat1 2>/dev/null - diff --git a/skeletons/README.erb b/skeletons/README.erb deleted file mode 100644 index e4e3bed..0000000 --- a/skeletons/README.erb +++ /dev/null @@ -1,62 +0,0 @@ - -<%= `figlet -c README` %> -<%# figlet: http://www.figlet.org %> - -This is <%= @project %>, version %VERSION% ------------------------------ - -<%=@project %> is Copyright (C) <%=@year %>-<%=@year.to_i+5%>, <%= @username %>. <<%= @email %>> - -LICENSE INFORMATION -------------------- - -<%= license %> - -PREREQUISITES -------------- - -You'll need a C compiler, a linker and a make program of course. - -INSTRUCTIONS ------------- - -For now, unpack your <%= @project %> tarball, (if you're reading this, you've -probably already done that) and type - - ./configure - -If you are self confident you may try the following to have more power on compilation process - - ./configure --help - - -Next, run make: - -You can test <%= @project %> by running - - make test - -On some systems you can install <%= @project %>: - - make install - -NOTES ------ - -CHANGES -------- - -For documentation on the user-visible changes between this version and -previous versions, please see CHANGES. - -MAILING LISTS -------------- - -Subscribe to the mailing list for <%= @project %> by sending mail to -%MAILING_LIST%. - -WEB SITES ---------- - -The home page for <%= @project %> is %HOME_PAGE% - diff --git a/skeletons/__init__.py.erb b/skeletons/__init__.py.erb deleted file mode 100644 index a020661..0000000 --- a/skeletons/__init__.py.erb +++ /dev/null @@ -1,5 +0,0 @@ -<%= header 'python.hdr' %> - -__all__ = [ - ] - diff --git a/skeletons/awk.erb b/skeletons/awk.erb deleted file mode 100644 index 86d52a1..0000000 --- a/skeletons/awk.erb +++ /dev/null @@ -1,9 +0,0 @@ -<%= header 'awk.hdr' %> - -BEGIN { } - -{ -print "line "NR" has "NF" fields."; -} - -END { print "line number : "NR } diff --git a/skeletons/awk.hdr b/skeletons/awk.hdr deleted file mode 100644 index d11305a..0000000 --- a/skeletons/awk.hdr +++ /dev/null @@ -1,12 +0,0 @@ -#! /bin/gawk - -#---------------------------------------------------------------------------- -# -# File : <%= @filename %> -# Author : <%= @username %> <<%= @email %>> -# Date : <%= @now %> -# License : -# -<%= license '# '%> -# -#---------------------------------------------------------------------------- diff --git a/skeletons/c.erb b/skeletons/c.erb deleted file mode 100644 index e3df5f4..0000000 --- a/skeletons/c.erb +++ /dev/null @@ -1,9 +0,0 @@ -<%= header 'c.hdr' %> - -#include <stdio.h> - -int hello() { - printf ("hello world"); - return 0; -} - diff --git a/skeletons/c.hdr b/skeletons/c.hdr deleted file mode 100644 index a88f90e..0000000 --- a/skeletons/c.hdr +++ /dev/null @@ -1,9 +0,0 @@ -/* - * File : <%= @filename %> - * Author : <%= @username %> <<%= @email %>> - * Date : <%= @now %> - * License : - * -<%= license ' * '%> - * - */ diff --git a/skeletons/c_header.erb b/skeletons/c_header.erb deleted file mode 100644 index 2ef9092..0000000 --- a/skeletons/c_header.erb +++ /dev/null @@ -1,20 +0,0 @@ -<%= header 'c.hdr' %> - -<% define=File.basename( @filename ).upcase!.sub!('.', '_' ) %> - -#ifndef _<%= define %>_ -#define _<%= define %>_ - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/* - * Feed me - */ - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* _<%= define %>_ */ diff --git a/skeletons/cst.erb b/skeletons/cst.erb deleted file mode 100644 index db59692..0000000 --- a/skeletons/cst.erb +++ /dev/null @@ -1,14 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> -<html> - <head> - <title>My Page</title> - <meta name="Identifier-URL" content="http://XXXX/<%= @filename %>"> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <meta name="Author" lang="en" content="<%= @username %>"> - <meta name="Description" content=""> - <meta name="Keywords" lang="en" content=""> - <link rel="stylesheet" type="text/css" href=""> - </head> - <body> - </body> -</html> diff --git a/skeletons/eo.erb b/skeletons/eo.erb deleted file mode 100644 index 28b66f7..0000000 --- a/skeletons/eo.erb +++ /dev/null @@ -1,51 +0,0 @@ -classs <%= @class_name %>(Eo_Base) -{ - legacy_prefix: null; - eo_prefix: <%= @class_name.downcase %>; - data: <%= @class_name+"_Protected_Data" %>; - properties { - attribute - set { - /*@ - @brief Blah blah blîh, blah blah . */ - } - get { - /*@ - @brief blob. - - Values @c blob. - - Example: - @dontinclude <%= @class_name.downcase %>-example.c - @skip <%= @class_name.downcase %>_attribute_set - @until return - - @see something */ - } - values { - Eina_Bool value; /*@ The attribute itself. */ - } - } - } - methods { - part_table_clear { - /*@ - @brief Does something. - - @return @c EINA_TRUE on suceess, @c EINA_FALSE on failure - - this realy does something, believe me. */ - - return Eina_Bool; - params { - @in const char *part; /*@ The part name */ - @in Eina_Bool maybe; /*@ If set, it will maybe do something else */ - } - } - } - implements { - Eo_Base::constructor; - Eo_Base::destructor; - Eo_Base::dbg_info_get; - } -} diff --git a/skeletons/html.erb b/skeletons/html.erb deleted file mode 100644 index 14073f5..0000000 --- a/skeletons/html.erb +++ /dev/null @@ -1,19 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> - -<html> - <head> - <title>My Page</title> - <meta name="Identifier-URL" content="http://XXXX/<%= @filename %>"> - <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> - <meta name="Author" lang="en" content="<%= @username %>"> - <meta name="Description" content=""> - <meta name="Keywords" lang="en" content=""> - <!-- <link rel="shortcut icon" href="/img/favicon.ico" type="image/x-icon"> --> - <!-- <link rel="stylesheet" type="text/css" href=""> --> - <!-- <script type="text/javascript" src=""></script> --> - <!-- <%= @filename %> <%= @now %> --> - </head> - <body> - <h1>Hello World</h1> - </body> -</html> diff --git a/skeletons/java.erb b/skeletons/java.erb deleted file mode 100644 index f0ec54a..0000000 --- a/skeletons/java.erb +++ /dev/null @@ -1,66 +0,0 @@ -/* vim: set expandtab tabstop=4 shiftwidth=4 : */ - -// package pkgname; - -import java.io.File; -import java.util.Date; -import jargs.gnu.CmdLineParser; - -/** - * Class <%= @class_name %> - * - * @author <% @username %> <<%= @email %>> - * @date <%= @now %> - */ -public class <%= @class_name %> { - - /* - * print usage and exit with status 1 - */ - private static void printUsage() - { - System.err.println("Usage : <%= @class_name %> [{-d, --debug} a_float] [ --input file_name]"); - System.err.println(" debug : debug verbosity"); - System.err.println(" input : path to input file"); - } - - /** - * application entry point - */ - public static void main(String [] args ) - { - - CmdLineParser parser = new CmdLineParser(); - CmdLineParser.Option debug = parser.addIntegerOption('d',"debug"); - CmdLineParser.Option input = parser.addStringOption("input"); - - try { - parser.parse(args); - } catch (CmdLineParser.OptionException e) { - System.err.println("\n"+e.getMessage()); - printUsage(); - System.exit(2); - } - - int debugLevel = ((Integer)parser.getOptionValue(debug,new Integer(0))).intValue(); - String inputFile = (String)parser.getOptionValue(input); - - if (debugLevel>0) { - System.out.println("Debug Trace :"); - System.out.println("\t"+new Date( ) ); - System.out.println("\tdebug level : "+debugLevel); - System.out.println("\texcel file : "+inputFile); - } - - if (inputFile!=null && !inputFile.equals("")) { - File f = new File(inputFile); - if(!f.canRead()){ - System.err.println("Fatal Error : Unable to read "+inputFile); - System.exit(1); - } - } - - System.exit(0); - } -} - diff --git a/skeletons/lout.erb b/skeletons/lout.erb deleted file mode 100644 index 9c88cd7..0000000 --- a/skeletons/lout.erb +++ /dev/null @@ -1,43 +0,0 @@ -#@SysInclude { eq } -#@SysInclude { tab } -#@SysInclude { fig } -@SysInclude { report } - -@Report - @Title { } - @Author { Jérémy Zurcher } - @Institution { } - @DateLine { <%= "#{Time.now.strftime '%d, %m, %Y'}" %> } - @InitialLanguage { French } - @OptimizePages { Yes } - @AbstractTitle { } - @Abstract { } -// -@Section - @Title { Section } - @RunningTitle { Section } -@Begin -@PP -Hello World 1 -@PP -Hello World 2 Hello World 2 -@BeginSubSections -@SubSection - @Title { SubSection } - @RunningTitle { Subsection } -@Begin -@PP -Hello World 3 Hello World 3 Hello World 3 Hello World 3 -@BeginSubSubSections -@SubSubSection - @Title { SubSubSection } - @RunningTitle { SubSubSection } -@Begin -@PP -Hello World 4 Hello World 4 Hello World 4 Hello World 4 Hello World 4 Hello World 4 Hello World 4 Hello World 4 -@End @SubSubSection -@EndSubSubSections -@End @SubSection -@EndSubSections -@End @Section - diff --git a/skeletons/main.c.erb b/skeletons/main.c.erb deleted file mode 100644 index 1767fbf..0000000 --- a/skeletons/main.c.erb +++ /dev/null @@ -1,134 +0,0 @@ -<%= header 'c.hdr' %> - -#include "main.h" - -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> -#include <stdarg.h> -#include <string.h> -#include <getopt.h> - - -static int verbose = 0; - -/** - * my_error - print an error message on stderr then : if(code) exit(code) - */ -static void my_error( int code, const char *fmt, ... ) -{ - va_list ap; - - if ( *fmt ) { - va_start( ap, fmt ); - (void)vfprintf( stderr, fmt, ap ); - va_end( ap ); - fmt += strlen( fmt ); - if ( fmt[-1] != '\n' ) - (void) fputc( '\n', stderr ); - } - if( code ) exit( code ); - /* NOTREACHED */ -} - - -/** - * usage - print usage on stderr - */ -static void usage( const char *program_name, const char* optstring ) -{ - fprintf( stderr, "usage : %s [-%s]\n", program_name, optstring ); - fprintf( stderr, "\t --verbose (-v) : verbose mode.\n" - "\t --version (-V) : print version number.\n" - "\t --help (-h) : print this screen.\n" - "\t --arg (-a) <arg> : a numeric argument.\n" - "\n" ); -} - - -/** - * MAIN - */ -int main( int argc, char **argv ) -{ - int optch; /* returned by getopts_long */ - int index; /* index of longopts[] */ - - int a; - - /** - * name - has_arg (bool) - flag (int *) - val (int) - * - * if(!longopts[x].flag) - * return longopts[x].val; - * else - * *(longopts[x].flag) = longopts[x].val; - * return 0; - * - */ - static struct option longopts[] = { - { "help", 0, 0, 'h' }, - { "version", 0, 0, 'V' }, - { "verbose", 0, &verbose, 1 }, - { "arg", 1, 0, 'a' }, - { 0, 0, 0, 0, } - }; - - static char *optstring = "hvVa:"; - - static const char *program_name = PACKAGE_NAME; - /* - const char *program_name = file_name( argv[0] ); - */ - - opterr=0; /* no default advise for bad options */ - optind=0; - - a=0; - -#ifdef DEBUG - printf( "DEBUG mode is set.\n" ); -#endif - - /* process options */ - while( ( optch = getopt_long( argc, argv, optstring, longopts, &index ) ) !=-1 ) { - switch( optch ){ - case 'h': - usage( program_name, optstring ); - return EXIT_FAILURE; - case 'V': - fprintf( stdout, " %s version : %s\n", program_name, VERSION ); - return EXIT_FAILURE; - case 'v': - verbose = 1; - break; - case 'a': - a = atoi( optarg ); - break; - case 0: - /* longopt used flag */ - break; - default: - my_error(EXIT_FAILURE,"invalid option %s\n\ttype : %s --help\n",argv[optind-1],program_name); - } - } - - printf("a : %d\n",a); - - /* process other arguments */ - while(optind<argc){ - printf("argv[%d]='%s'\n",optind,argv[optind]); - optind++; - } - - if(verbose)printf("verbose mode is set.\n"); - - /** - * insert some fucking code here. - */ - - /* end reached */ - return EXIT_SUCCESS; -} - - diff --git a/skeletons/main.h.erb b/skeletons/main.h.erb deleted file mode 100644 index 3f0baf7..0000000 --- a/skeletons/main.h.erb +++ /dev/null @@ -1,26 +0,0 @@ -<%= header 'c.hdr' %> - - -#ifndef _MAIN_ -#define _MAIN_ 1 - -# ifdef __cplusplus -extern "C" { -# endif /* __cplusplus */ - -#define VERSION "version" -#define PACKAGE_NAME "package_name" - -#ifdef HAVE_CONFIG_H - #include "config.h" -/* -#else - #error "no config.h" -*/ -#endif - -# ifdef __cplusplus -} -# endif /* __cplusplus */ - -# endif /* _MAIN_ */ diff --git a/skeletons/opt_parse.py.erb b/skeletons/opt_parse.py.erb deleted file mode 100644 index 658f9c0..0000000 --- a/skeletons/opt_parse.py.erb +++ /dev/null @@ -1,60 +0,0 @@ -<%= header 'python.hdr' %> - -""" Module Description """ - -#---------------------------------------------------------------------------- - -__version__ = '0.1.0' - -#---------------------------------------------------------------------------- - -#import - -#---------------------------------------------------------------------------- - -__all__ = [ - '<%= @filename_base %>' - ] - -#---------------------------------------------------------------------------- -class <%= @filename_base %>: - - def __init__( self, parser, options ): - self.parser = parser - self.options = options - -#---------------------------------------------------------------------------- -def my_callback( option, opt, value, parser ): - print "option : %s" % option - print "opt : %s" % opt - print "value : %s" % value - print "parser : %s" % parser - -#---------------------------------------------------------------------------- -def main( ): - from optparse import OptionParser - parser = OptionParser( usage="usage : %prog [-h] [-v]", version= "%prog version " + __version__ ) -# action store store_true store_false store_const append count callback help -# type string int long choice float complex -# dest action="store*" -# default -# nargs int -# const action="store_const" -# choices -# callback -# callback_args -# callback_kwargs -# help help tring -# metavar - parser.add_option("-v", "--verbose", action="store_true", dest="verbose", default=False, help="produces noisy outputs." ) - parser.add_option("-c", "--callback", action="callback", callback=my_callback, help="print callback args" ) - parser.add_option("-s", "--string", action="store", type="string", dest="string", help="memorize a string" ) - ( options, args) = parser.parse_args( ) - print 'verbose : %s' % options.verbose - return 0 - -#---------------------------------------------------------------------------- - -if __name__ == '__main__': - import sys - sys.exit( main( ) ) diff --git a/skeletons/pir.erb b/skeletons/pir.erb deleted file mode 100644 index 9415dd0..0000000 --- a/skeletons/pir.erb +++ /dev/null @@ -1,5 +0,0 @@ - -# TODO perl like header - -.sub main :main -.end diff --git a/skeletons/python.erb b/skeletons/python.erb deleted file mode 100644 index 1e51c7b..0000000 --- a/skeletons/python.erb +++ /dev/null @@ -1,42 +0,0 @@ -<%= header 'python.hdr' %> - -""" Module Description """ - -#---------------------------------------------------------------------------- - -__version__ = '0.1.0' - -#---------------------------------------------------------------------------- - -#import - -#---------------------------------------------------------------------------- - -__all__ = [ - '<%= @class_name %>' - ] - -#---------------------------------------------------------------------------- -class <%= @class_name %>: - - def __init__( self ): - pass - -#---------------------------------------------------------------------------- -def usage(): - import os.path - name = os.path.basename( sys.argv[0] ) - print '\tusage : %s ' % ( name ) - return 1 - -#---------------------------------------------------------------------------- -def main( ): - return 0 - -#---------------------------------------------------------------------------- - -if __name__ == '__main__': - import sys - if len(sys.argv)<1: - sys.exit( usage() ) - sys.exit( main( ) ) diff --git a/skeletons/python.hdr b/skeletons/python.hdr deleted file mode 100644 index d08d9fe..0000000 --- a/skeletons/python.hdr +++ /dev/null @@ -1,13 +0,0 @@ -#! /usr/bin/env python -# -*- coding: utf-8 -*- - -#---------------------------------------------------------------------------- -# -# File : <%= @filename %> -# Author : <%= @username %> <<%= @email %>> -# Date : <%= @now %> -# License : -# -<%= license '# '%> -# -#---------------------------------------------------------------------------- diff --git a/skeletons/ruby.erb b/skeletons/ruby.erb deleted file mode 100644 index b31ddda..0000000 --- a/skeletons/ruby.erb +++ /dev/null @@ -1,12 +0,0 @@ -<%= header 'ruby.hdr' %> -# -module <%= @class_name %> - class <%= @class_name %> - end -end -# -if __FILE__ == $0 - t = <%= @class_name %>::<%= @class_name %>.new -end -# -# EOF diff --git a/skeletons/ruby.hdr b/skeletons/ruby.hdr deleted file mode 100644 index 1314e75..0000000 --- a/skeletons/ruby.hdr +++ /dev/null @@ -1,14 +0,0 @@ -#! /usr/bin/env ruby -# -*- coding: UTF-8 -*- - -#---------------------------------------------------------------------------- -# -# File : <%= @filename %> -# Author : <%= @username %> <<%= @email %>> -# Date : <%= @now %> -# License : -# -<%= license '# ' %> -# -#---------------------------------------------------------------------------- - diff --git a/skeletons/setup.py.erb b/skeletons/setup.py.erb deleted file mode 100644 index 90ef208..0000000 --- a/skeletons/setup.py.erb +++ /dev/null @@ -1,28 +0,0 @@ -<%= header 'python.hdr' %> - -""" Distutils script """ - -#---------------------------------------------------------------------------- - -from distutils.core import setup - -#---------------------------------------------------------------------------- - - -setup ( - name='DistName', - version='1.0', - description='package description', - long_description='package long description', - author='<%= @username %>', - author_email='<%= @email %>', - maintainer='<%= @username %>', - maintainer_email='<%= @email %>', - url='<%= @webiste %>', - download_url='<%= @website %>', - package_dir = { '':'lib' }, - packages = [ 'pack1', 'pack2', 'pack2.sub' ], - classifiers= [ - 'Programming Language :: Python' - ] - ) diff --git a/skeletons/setup.rb.erb b/skeletons/setup.rb.erb deleted file mode 100644 index c0b6da7..0000000 --- a/skeletons/setup.rb.erb +++ /dev/null @@ -1,1596 +0,0 @@ -# -# setup.rb -# -# Copyright (c) 2000-2006 Minero Aoki -# -# This program is free software. -# You can distribute/modify this program under the terms of -# the GNU LGPL, Lesser General Public License version 2.1. -# - -unless Enumerable.method_defined?(:map) # Ruby 1.4.6 - module Enumerable - alias map collect - end -end - -unless File.respond_to?(:read) # Ruby 1.6 - def File.read(fname) - open(fname) {|f| - return f.read - } - end -end - -unless Errno.const_defined?(:ENOTEMPTY) # Windows? - module Errno - class ENOTEMPTY - # We do not raise this exception, implementation is not needed. - end - end -end - -def File.binread(fname) - open(fname, 'rb') {|f| - return f.read - } -end - -# for corrupted Windows' stat(2) -def File.dir?(path) - File.directory?((path[-1,1] == '/') ? path : path + '/') -end - - -class ConfigTable - - include Enumerable - - def initialize(rbconfig) - @rbconfig = rbconfig - @items = [] - @table = {} - # options - @install_prefix = nil - @config_opt = nil - @verbose = true - @no_harm = false - end - - attr_accessor :install_prefix - attr_accessor :config_opt - - attr_writer :verbose - - def verbose? - @verbose - end - - attr_writer :no_harm - - def no_harm? - @no_harm - end - - def [](key) - lookup(key).resolve(self) - end - - def []=(key, val) - lookup(key).set val - end - - def names - @items.map {|i| i.name } - end - - def each(&block) - @items.each(&block) - end - - def key?(name) - @table.key?(name) - end - - def lookup(name) - @table[name] or setup_rb_error "no such config item: #{name}" - end - - def add(item) - @items.push item - @table[item.name] = item - end - - def remove(name) - item = lookup(name) - @items.delete_if {|i| i.name == name } - @table.delete_if {|name, i| i.name == name } - item - end - - def load_script(path, inst = nil) - if File.file?(path) - MetaConfigEnvironment.new(self, inst).instance_eval File.read(path), path - end - end - - def savefile - '.config' - end - - def load_savefile - begin - File.foreach(savefile()) do |line| - k, v = *line.split(/=/, 2) - self[k] = v.strip - end - rescue Errno::ENOENT - setup_rb_error $!.message + "\n#{File.basename($0)} config first" - end - end - - def save - @items.each {|i| i.value } - File.open(savefile(), 'w') {|f| - @items.each do |i| - f.printf "%s=%s\n", i.name, i.value if i.value? and i.value - end - } - end - - def load_standard_entries - standard_entries(@rbconfig).each do |ent| - add ent - end - end - - def standard_entries(rbconfig) - c = rbconfig - - rubypath = File.join(c['bindir'], c['ruby_install_name'] + c['EXEEXT']) - - major = c['MAJOR'].to_i - minor = c['MINOR'].to_i - teeny = c['TEENY'].to_i - version = "#{major}.#{minor}" - - # ruby ver. >= 1.4.4? - newpath_p = ((major >= 2) or - ((major == 1) and - ((minor >= 5) or - ((minor == 4) and (teeny >= 4))))) - - if c['rubylibdir'] - # V > 1.6.3 - libruby = "#{c['prefix']}/lib/ruby" - librubyver = c['rubylibdir'] - librubyverarch = c['archdir'] - siteruby = c['sitedir'] - siterubyver = c['sitelibdir'] - siterubyverarch = c['sitearchdir'] - elsif newpath_p - # 1.4.4 <= V <= 1.6.3 - libruby = "#{c['prefix']}/lib/ruby" - librubyver = "#{c['prefix']}/lib/ruby/#{version}" - librubyverarch = "#{c['prefix']}/lib/ruby/#{version}/#{c['arch']}" - siteruby = c['sitedir'] - siterubyver = "$siteruby/#{version}" - siterubyverarch = "$siterubyver/#{c['arch']}" - else - # V < 1.4.4 - libruby = "#{c['prefix']}/lib/ruby" - librubyver = "#{c['prefix']}/lib/ruby/#{version}" - librubyverarch = "#{c['prefix']}/lib/ruby/#{version}/#{c['arch']}" - siteruby = "#{c['prefix']}/lib/ruby/#{version}/site_ruby" - siterubyver = siteruby - siterubyverarch = "$siterubyver/#{c['arch']}" - end - parameterize = lambda {|path| - path.sub(/\A#{Regexp.quote(c['prefix'])}/, '$prefix') - } - - if arg = c['configure_args'].split.detect {|arg| /--with-make-prog=/ =~ arg } - makeprog = arg.sub(/'/, '').split(/=/, 2)[1] - else - makeprog = 'make' - end - - [ - ExecItem.new('installdirs', 'std/site/home', - 'std: install under libruby; site: install under site_ruby; home: install under $HOME')\ - {|val, table| - case val - when 'std' - table['rbdir'] = '$librubyver' - table['sodir'] = '$librubyverarch' - when 'site' - table['rbdir'] = '$siterubyver' - table['sodir'] = '$siterubyverarch' - when 'home' - setup_rb_error '$HOME was not set' unless ENV['HOME'] - table['prefix'] = ENV['HOME'] - table['rbdir'] = '$libdir/ruby' - table['sodir'] = '$libdir/ruby' - end - }, - PathItem.new('prefix', 'path', c['prefix'], - 'path prefix of target environment'), - PathItem.new('bindir', 'path', parameterize.call(c['bindir']), - 'the directory for commands'), - PathItem.new('libdir', 'path', parameterize.call(c['libdir']), - 'the directory for libraries'), - PathItem.new('datadir', 'path', parameterize.call(c['datadir']), - 'the directory for shared data'), - PathItem.new('mandir', 'path', parameterize.call(c['mandir']), - 'the directory for man pages'), - PathItem.new('sysconfdir', 'path', parameterize.call(c['sysconfdir']), - 'the directory for system configuration files'), - PathItem.new('localstatedir', 'path', parameterize.call(c['localstatedir']), - 'the directory for local state data'), - PathItem.new('libruby', 'path', libruby, - 'the directory for ruby libraries'), - PathItem.new('librubyver', 'path', librubyver, - 'the directory for standard ruby libraries'), - PathItem.new('librubyverarch', 'path', librubyverarch, - 'the directory for standard ruby extensions'), - PathItem.new('siteruby', 'path', siteruby, - 'the directory for version-independent aux ruby libraries'), - PathItem.new('siterubyver', 'path', siterubyver, - 'the directory for aux ruby libraries'), - PathItem.new('siterubyverarch', 'path', siterubyverarch, - 'the directory for aux ruby binaries'), - PathItem.new('rbdir', 'path', '$siterubyver', - 'the directory for ruby scripts'), - PathItem.new('sodir', 'path', '$siterubyverarch', - 'the directory for ruby extentions'), - PathItem.new('rubypath', 'path', rubypath, - 'the path to set to #! line'), - ProgramItem.new('rubyprog', 'name', rubypath, - 'the ruby program using for installation'), - ProgramItem.new('makeprog', 'name', makeprog, - 'the make program to compile ruby extentions'), - SelectItem.new('shebang', 'all/ruby/never', 'ruby', - 'shebang line (#!) editing mode'), - BoolItem.new('without-ext', 'yes/no', 'no', - 'does not compile/install ruby extentions') - ] - end - private :standard_entries - - def load_multipackage_entries - multipackage_entries().each do |ent| - add ent - end - end - - def multipackage_entries - [ - PackageSelectionItem.new('with', 'name,name...', '', 'ALL', - 'package names that you want to install'), - PackageSelectionItem.new('without', 'name,name...', '', 'NONE', - 'package names that you do not want to install') - ] - end - private :multipackage_entries - - ALIASES = { - 'std-ruby' => 'librubyver', - 'stdruby' => 'librubyver', - 'rubylibdir' => 'librubyver', - 'archdir' => 'librubyverarch', - 'site-ruby-common' => 'siteruby', # For backward compatibility - 'site-ruby' => 'siterubyver', # For backward compatibility - 'bin-dir' => 'bindir', - 'bin-dir' => 'bindir', - 'rb-dir' => 'rbdir', - 'so-dir' => 'sodir', - 'data-dir' => 'datadir', - 'ruby-path' => 'rubypath', - 'ruby-prog' => 'rubyprog', - 'ruby' => 'rubyprog', - 'make-prog' => 'makeprog', - 'make' => 'makeprog' - } - - def fixup - ALIASES.each do |ali, name| - @table[ali] = @table[name] - end - end - - def options_re - /\A--(#{@table.keys.join('|')})(?:=(.*))?\z/ - end - - def parse_opt(opt) - m = options_re().match(opt) or setup_rb_error "config: unknown option #{opt}" - m.to_a[1,2] - end - - def dllext - @rbconfig['DLEXT'] - end - - def value_config?(name) - lookup(name).value? - end - - class Item - def initialize(name, template, default, desc) - @name = name.freeze - @template = template - @value = default - @default = default - @description = desc - end - - attr_reader :name - attr_reader :description - - attr_accessor :default - alias help_default default - - def help_opt - "--#{@name}=#{@template}" - end - - def value? - true - end - - def value - @value - end - - def resolve(table) - @value.gsub(%r<\$([^/]+)>) { table[$1] } - end - - def set(val) - @value = check(val) - end - - private - - def check(val) - setup_rb_error "config: --#{name} requires argument" unless val - val - end - end - - class BoolItem < Item - def config_type - 'bool' - end - - def help_opt - "--#{@name}" - end - - private - - def check(val) - return 'yes' unless val - case val - when /\Ay(es)?\z/i, /\At(rue)?\z/i then 'yes' - when /\An(o)?\z/i, /\Af(alse)\z/i then 'no' - else - setup_rb_error "config: --#{@name} accepts only yes/no for argument" - end - end - end - - class PathItem < Item - def config_type - 'path' - end - - private - - def check(path) - setup_rb_error "config: --#{@name} requires argument" unless path - path[0,1] == '$' ? path : File.expand_path(path) - end - end - - class ProgramItem < Item - def config_type - 'program' - end - end - - class SelectItem < Item - def initialize(name, selection, default, desc) - super - @ok = selection.split('/') - end - - def config_type - 'select' - end - - private - - def check(val) - unless @ok.include?(val.strip) - setup_rb_error "config: use --#{@name}=#{@template} (#{val})" - end - val.strip - end - end - - class ExecItem < Item - def initialize(name, selection, desc, &block) - super name, selection, nil, desc - @ok = selection.split('/') - @action = block - end - - def config_type - 'exec' - end - - def value? - false - end - - def resolve(table) - setup_rb_error "$#{name()} wrongly used as option value" - end - - undef set - - def evaluate(val, table) - v = val.strip.downcase - unless @ok.include?(v) - setup_rb_error "invalid option --#{@name}=#{val} (use #{@template})" - end - @action.call v, table - end - end - - class PackageSelectionItem < Item - def initialize(name, template, default, help_default, desc) - super name, template, default, desc - @help_default = help_default - end - - attr_reader :help_default - - def config_type - 'package' - end - - private - - def check(val) - unless File.dir?("packages/#{val}") - setup_rb_error "config: no such package: #{val}" - end - val - end - end - - class MetaConfigEnvironment - def initialize(config, installer) - @config = config - @installer = installer - end - - def config_names - @config.names - end - - def config?(name) - @config.key?(name) - end - - def bool_config?(name) - @config.lookup(name).config_type == 'bool' - end - - def path_config?(name) - @config.lookup(name).config_type == 'path' - end - - def value_config?(name) - @config.lookup(name).config_type != 'exec' - end - - def add_config(item) - @config.add item - end - - def add_bool_config(name, default, desc) - @config.add BoolItem.new(name, 'yes/no', default ? 'yes' : 'no', desc) - end - - def add_path_config(name, default, desc) - @config.add PathItem.new(name, 'path', default, desc) - end - - def set_config_default(name, default) - @config.lookup(name).default = default - end - - def remove_config(name) - @config.remove(name) - end - - # For only multipackage - def packages - raise '[setup.rb fatal] multi-package metaconfig API packages() called for single-package; contact application package vendor' unless @installer - @installer.packages - end - - # For only multipackage - def declare_packages(list) - raise '[setup.rb fatal] multi-package metaconfig API declare_packages() called for single-package; contact application package vendor' unless @installer - @installer.packages = list - end - end - -end # class ConfigTable - - -# This module requires: #verbose?, #no_harm? -module FileOperations - - def mkdir_p(dirname, prefix = nil) - dirname = prefix + File.expand_path(dirname) if prefix - $stderr.puts "mkdir -p #{dirname}" if verbose? - return if no_harm? - - # Does not check '/', it's too abnormal. - dirs = File.expand_path(dirname).split(%r<(?=/)>) - if /\A[a-z]:\z/i =~ dirs[0] - disk = dirs.shift - dirs[0] = disk + dirs[0] - end - dirs.each_index do |idx| - path = dirs[0..idx].join('') - Dir.mkdir path unless File.dir?(path) - end - end - - def rm_f(path) - $stderr.puts "rm -f #{path}" if verbose? - return if no_harm? - force_remove_file path - end - - def rm_rf(path) - $stderr.puts "rm -rf #{path}" if verbose? - return if no_harm? - remove_tree path - end - - def remove_tree(path) - if File.symlink?(path) - remove_file path - elsif File.dir?(path) - remove_tree0 path - else - force_remove_file path - end - end - - def remove_tree0(path) - Dir.foreach(path) do |ent| - next if ent == '.' - next if ent == '..' - entpath = "#{path}/#{ent}" - if File.symlink?(entpath) - remove_file entpath - elsif File.dir?(entpath) - remove_tree0 entpath - else - force_remove_file entpath - end - end - begin - Dir.rmdir path - rescue Errno::ENOTEMPTY - # directory may not be empty - end - end - - def move_file(src, dest) - force_remove_file dest - begin - File.rename src, dest - rescue - File.open(dest, 'wb') {|f| - f.write File.binread(src) - } - File.chmod File.stat(src).mode, dest - File.unlink src - end - end - - def force_remove_file(path) - begin - remove_file path - rescue - end - end - - def remove_file(path) - File.chmod 0777, path - File.unlink path - end - - def install(from, dest, mode, prefix = nil) - $stderr.puts "install #{from} #{dest}" if verbose? - return if no_harm? - - realdest = prefix ? prefix + File.expand_path(dest) : dest - realdest = File.join(realdest, File.basename(from)) if File.dir?(realdest) - str = File.binread(from) - if diff?(str, realdest) - verbose_off { - rm_f realdest if File.exist?(realdest) - } - File.open(realdest, 'wb') {|f| - f.write str - } - File.chmod mode, realdest - - File.open("#{objdir_root()}/InstalledFiles", 'a') {|f| - if prefix - f.puts realdest.sub(prefix, '') - else - f.puts realdest - end - } - end - end - - def diff?(new_content, path) - return true unless File.exist?(path) - new_content != File.binread(path) - end - - def command(*args) - $stderr.puts args.join(' ') if verbose? - system(*args) or raise RuntimeError, - "system(#{args.map{|a| a.inspect }.join(' ')}) failed" - end - - def ruby(*args) - command config('rubyprog'), *args - end - - def make(task = nil) - command(*[config('makeprog'), task].compact) - end - - def extdir?(dir) - File.exist?("#{dir}/MANIFEST") or File.exist?("#{dir}/extconf.rb") - end - - def files_of(dir) - Dir.open(dir) {|d| - return d.select {|ent| File.file?("#{dir}/#{ent}") } - } - end - - DIR_REJECT = %w( . .. CVS SCCS RCS CVS.adm .svn ) - - def directories_of(dir) - Dir.open(dir) {|d| - return d.select {|ent| File.dir?("#{dir}/#{ent}") } - DIR_REJECT - } - end - -end - - -# This module requires: #srcdir_root, #objdir_root, #relpath -module HookScriptAPI - - def get_config(key) - @config[key] - end - - alias config get_config - - # obsolete: use metaconfig to change configuration - def set_config(key, val) - @config[key] = val - end - - # - # srcdir/objdir (works only in the package directory) - # - - def curr_srcdir - "#{srcdir_root()}/#{relpath()}" - end - - def curr_objdir - "#{objdir_root()}/#{relpath()}" - end - - def srcfile(path) - "#{curr_srcdir()}/#{path}" - end - - def srcexist?(path) - File.exist?(srcfile(path)) - end - - def srcdirectory?(path) - File.dir?(srcfile(path)) - end - - def srcfile?(path) - File.file?(srcfile(path)) - end - - def srcentries(path = '.') - Dir.open("#{curr_srcdir()}/#{path}") {|d| - return d.to_a - %w(. ..) - } - end - - def srcfiles(path = '.') - srcentries(path).select {|fname| - File.file?(File.join(curr_srcdir(), path, fname)) - } - end - - def srcdirectories(path = '.') - srcentries(path).select {|fname| - File.dir?(File.join(curr_srcdir(), path, fname)) - } - end - -end - - -class ToplevelInstaller - - Version = '3.4.1' - Copyright = 'Copyright (c) 2000-2006 Minero Aoki' - - TASKS = [ - [ 'all', 'do config, setup, then install' ], - [ 'config', 'saves your configurations' ], - [ 'show', 'shows current configuration' ], - [ 'setup', 'compiles ruby extentions and others' ], - [ 'install', 'installs files' ], - [ 'test', 'run all tests in test/' ], - [ 'clean', "does `make clean' for each extention" ], - [ 'distclean',"does `make distclean' for each extention" ] - ] - - def ToplevelInstaller.invoke - config = ConfigTable.new(load_rbconfig()) - config.load_standard_entries - config.load_multipackage_entries if multipackage? - config.fixup - klass = (multipackage?() ? ToplevelInstallerMulti : ToplevelInstaller) - klass.new(File.dirname($0), config).invoke - end - - def ToplevelInstaller.multipackage? - File.dir?(File.dirname($0) + '/packages') - end - - def ToplevelInstaller.load_rbconfig - if arg = ARGV.detect {|arg| /\A--rbconfig=/ =~ arg } - ARGV.delete(arg) - load File.expand_path(arg.split(/=/, 2)[1]) - $".push 'rbconfig.rb' - else - require 'rbconfig' - end - ::Config::CONFIG - end - - def initialize(ardir_root, config) - @ardir = File.expand_path(ardir_root) - @config = config - # cache - @valid_task_re = nil - end - - def config(key) - @config[key] - end - - def inspect - "#<#{self.class} #{__id__()}>" - end - - def invoke - run_metaconfigs - case task = parsearg_global() - when nil, 'all' - parsearg_config - init_installers - exec_config - exec_setup - exec_install - else - case task - when 'config', 'test' - ; - when 'clean', 'distclean' - @config.load_savefile if File.exist?(@config.savefile) - else - @config.load_savefile - end - __send__ "parsearg_#{task}" - init_installers - __send__ "exec_#{task}" - end - end - - def run_metaconfigs - @config.load_script "#{@ardir}/metaconfig" - end - - def init_installers - @installer = Installer.new(@config, @ardir, File.expand_path('.')) - end - - # - # Hook Script API bases - # - - def srcdir_root - @ardir - end - - def objdir_root - '.' - end - - def relpath - '.' - end - - # - # Option Parsing - # - - def parsearg_global - while arg = ARGV.shift - case arg - when /\A\w+\z/ - setup_rb_error "invalid task: #{arg}" unless valid_task?(arg) - return arg - when '-q', '--quiet' - @config.verbose = false - when '--verbose' - @config.verbose = true - when '--help' - print_usage $stdout - exit 0 - when '--version' - puts "#{File.basename($0)} version #{Version}" - exit 0 - when '--copyright' - puts Copyright - exit 0 - else - setup_rb_error "unknown global option '#{arg}'" - end - end - nil - end - - def valid_task?(t) - valid_task_re() =~ t - end - - def valid_task_re - @valid_task_re ||= /\A(?:#{TASKS.map {|task,desc| task }.join('|')})\z/ - end - - def parsearg_no_options - unless ARGV.empty? - task = caller(0).first.slice(%r<`parsearg_(\w+)'>, 1) - setup_rb_error "#{task}: unknown options: #{ARGV.join(' ')}" - end - end - - alias parsearg_show parsearg_no_options - alias parsearg_setup parsearg_no_options - alias parsearg_test parsearg_no_options - alias parsearg_clean parsearg_no_options - alias parsearg_distclean parsearg_no_options - - def parsearg_config - evalopt = [] - set = [] - @config.config_opt = [] - while i = ARGV.shift - if /\A--?\z/ =~ i - @config.config_opt = ARGV.dup - break - end - name, value = *@config.parse_opt(i) - if @config.value_config?(name) - @config[name] = value - else - evalopt.push [name, value] - end - set.push name - end - evalopt.each do |name, value| - @config.lookup(name).evaluate value, @config - end - # Check if configuration is valid - set.each do |n| - @config[n] if @config.value_config?(n) - end - end - - def parsearg_install - @config.no_harm = false - @config.install_prefix = '' - while a = ARGV.shift - case a - when '--no-harm' - @config.no_harm = true - when /\A--prefix=/ - path = a.split(/=/, 2)[1] - path = File.expand_path(path) unless path[0,1] == '/' - @config.install_prefix = path - else - setup_rb_error "install: unknown option #{a}" - end - end - end - - def print_usage(out) - out.puts 'Typical Installation Procedure:' - out.puts " $ ruby #{File.basename $0} config" - out.puts " $ ruby #{File.basename $0} setup" - out.puts " # ruby #{File.basename $0} install (may require root privilege)" - out.puts - out.puts 'Detailed Usage:' - out.puts " ruby #{File.basename $0} <global option>" - out.puts " ruby #{File.basename $0} [<global options>] <task> [<task options>]" - - fmt = " %-24s %s\n" - out.puts - out.puts 'Global options:' - out.printf fmt, '-q,--quiet', 'suppress message outputs' - out.printf fmt, ' --verbose', 'output messages verbosely' - out.printf fmt, ' --help', 'print this message' - out.printf fmt, ' --version', 'print version and quit' - out.printf fmt, ' --copyright', 'print copyright and quit' - out.puts - out.puts 'Tasks:' - TASKS.each do |name, desc| - out.printf fmt, name, desc - end - - fmt = " %-24s %s [%s]\n" - out.puts - out.puts 'Options for CONFIG or ALL:' - @config.each do |item| - out.printf fmt, item.help_opt, item.description, item.help_default - end - out.printf fmt, '--rbconfig=path', 'rbconfig.rb to load',"running ruby's" - out.puts - out.puts 'Options for INSTALL:' - out.printf fmt, '--no-harm', 'only display what to do if given', 'off' - out.printf fmt, '--prefix=path', 'install path prefix', '' - out.puts - end - - # - # Task Handlers - # - - def exec_config - @installer.exec_config - @config.save # must be final - end - - def exec_setup - @installer.exec_setup - end - - def exec_install - @installer.exec_install - end - - def exec_test - @installer.exec_test - end - - def exec_show - @config.each do |i| - printf "%-20s %s\n", i.name, i.value if i.value? - end - end - - def exec_clean - @installer.exec_clean - end - - def exec_distclean - @installer.exec_distclean - end - -end # class ToplevelInstaller - - -class ToplevelInstallerMulti < ToplevelInstaller - - include FileOperations - - def initialize(ardir_root, config) - super - @packages = directories_of("#{@ardir}/packages") - raise 'no package exists' if @packages.empty? - @root_installer = Installer.new(@config, @ardir, File.expand_path('.')) - end - - def run_metaconfigs - @config.load_script "#{@ardir}/metaconfig", self - @packages.each do |name| - @config.load_script "#{@ardir}/packages/#{name}/metaconfig" - end - end - - attr_reader :packages - - def packages=(list) - raise 'package list is empty' if list.empty? - list.each do |name| - raise "directory packages/#{name} does not exist"\ - unless File.dir?("#{@ardir}/packages/#{name}") - end - @packages = list - end - - def init_installers - @installers = {} - @packages.each do |pack| - @installers[pack] = Installer.new(@config, - "#{@ardir}/packages/#{pack}", - "packages/#{pack}") - end - with = extract_selection(config('with')) - without = extract_selection(config('without')) - @selected = @installers.keys.select {|name| - (with.empty? or with.include?(name)) \ - and not without.include?(name) - } - end - - def extract_selection(list) - a = list.split(/,/) - a.each do |name| - setup_rb_error "no such package: #{name}" unless @installers.key?(name) - end - a - end - - def print_usage(f) - super - f.puts 'Inluded packages:' - f.puts ' ' + @packages.sort.join(' ') - f.puts - end - - # - # Task Handlers - # - - def exec_config - run_hook 'pre-config' - each_selected_installers {|inst| inst.exec_config } - run_hook 'post-config' - @config.save # must be final - end - - def exec_setup - run_hook 'pre-setup' - each_selected_installers {|inst| inst.exec_setup } - run_hook 'post-setup' - end - - def exec_install - run_hook 'pre-install' - each_selected_installers {|inst| inst.exec_install } - run_hook 'post-install' - end - - def exec_test - run_hook 'pre-test' - each_selected_installers {|inst| inst.exec_test } - run_hook 'post-test' - end - - def exec_clean - rm_f @config.savefile - run_hook 'pre-clean' - each_selected_installers {|inst| inst.exec_clean } - run_hook 'post-clean' - end - - def exec_distclean - rm_f @config.savefile - run_hook 'pre-distclean' - each_selected_installers {|inst| inst.exec_distclean } - run_hook 'post-distclean' - end - - # - # lib - # - - def each_selected_installers - Dir.mkdir 'packages' unless File.dir?('packages') - @selected.each do |pack| - $stderr.puts "Processing the package `#{pack}' ..." if verbose? - Dir.mkdir "packages/#{pack}" unless File.dir?("packages/#{pack}") - Dir.chdir "packages/#{pack}" - yield @installers[pack] - Dir.chdir '../..' - end - end - - def run_hook(id) - @root_installer.run_hook id - end - - # module FileOperations requires this - def verbose? - @config.verbose? - end - - # module FileOperations requires this - def no_harm? - @config.no_harm? - end - -end # class ToplevelInstallerMulti - - -class Installer - - FILETYPES = %w( bin lib ext data conf man ) - - include FileOperations - include HookScriptAPI - - def initialize(config, srcroot, objroot) - @config = config - @srcdir = File.expand_path(srcroot) - @objdir = File.expand_path(objroot) - @currdir = '.' - end - - def inspect - "#<#{self.class} #{File.basename(@srcdir)}>" - end - - def noop(rel) - end - - # - # Hook Script API base methods - # - - def srcdir_root - @srcdir - end - - def objdir_root - @objdir - end - - def relpath - @currdir - end - - # - # Config Access - # - - # module FileOperations requires this - def verbose? - @config.verbose? - end - - # module FileOperations requires this - def no_harm? - @config.no_harm? - end - - def verbose_off - begin - save, @config.verbose = @config.verbose?, false - yield - ensure - @config.verbose = save - end - end - - # - # TASK config - # - - def exec_config - exec_task_traverse 'config' - end - - alias config_dir_bin noop - alias config_dir_lib noop - - def config_dir_ext(rel) - extconf if extdir?(curr_srcdir()) - end - - alias config_dir_data noop - alias config_dir_conf noop - alias config_dir_man noop - - def extconf - ruby "#{curr_srcdir()}/extconf.rb", *@config.config_opt - end - - # - # TASK setup - # - - def exec_setup - exec_task_traverse 'setup' - end - - def setup_dir_bin(rel) - files_of(curr_srcdir()).each do |fname| - update_shebang_line "#{curr_srcdir()}/#{fname}" - end - end - - alias setup_dir_lib noop - - def setup_dir_ext(rel) - make if extdir?(curr_srcdir()) - end - - alias setup_dir_data noop - alias setup_dir_conf noop - alias setup_dir_man noop - - def update_shebang_line(path) - return if no_harm? - return if config('shebang') == 'never' - old = Shebang.load(path) - if old - $stderr.puts "warning: #{path}: Shebang line includes too many args. It is not portable and your program may not work." if old.args.size > 1 - new = new_shebang(old) - return if new.to_s == old.to_s - else - return unless config('shebang') == 'all' - new = Shebang.new(config('rubypath')) - end - $stderr.puts "updating shebang: #{File.basename(path)}" if verbose? - open_atomic_writer(path) {|output| - File.open(path, 'rb') {|f| - f.gets if old # discard - output.puts new.to_s - output.print f.read - } - } - end - - def new_shebang(old) - if /\Aruby/ =~ File.basename(old.cmd) - Shebang.new(config('rubypath'), old.args) - elsif File.basename(old.cmd) == 'env' and old.args.first == 'ruby' - Shebang.new(config('rubypath'), old.args[1..-1]) - else - return old unless config('shebang') == 'all' - Shebang.new(config('rubypath')) - end - end - - def open_atomic_writer(path, &block) - tmpfile = File.basename(path) + '.tmp' - begin - File.open(tmpfile, 'wb', &block) - File.rename tmpfile, File.basename(path) - ensure - File.unlink tmpfile if File.exist?(tmpfile) - end - end - - class Shebang - def Shebang.load(path) - line = nil - File.open(path) {|f| - line = f.gets - } - return nil unless /\A#!/ =~ line - parse(line) - end - - def Shebang.parse(line) - cmd, *args = *line.strip.sub(/\A\#!/, '').split(' ') - new(cmd, args) - end - - def initialize(cmd, args = []) - @cmd = cmd - @args = args - end - - attr_reader :cmd - attr_reader :args - - def to_s - "#! #{@cmd}" + (@args.empty? ? '' : " #{@args.join(' ')}") - end - end - - # - # TASK install - # - - def exec_install - rm_f 'InstalledFiles' - exec_task_traverse 'install' - end - - def install_dir_bin(rel) - install_files targetfiles(), "#{config('bindir')}/#{rel}", 0755, strip_ext? - end - - def strip_ext? - /mswin|mingw/ !~ RUBY_PLATFORM - end - - def install_dir_lib(rel) - install_files libfiles(), "#{config('rbdir')}/#{rel}", 0644 - end - - def install_dir_ext(rel) - return unless extdir?(curr_srcdir()) - install_files rubyextentions('.'), - "#{config('sodir')}/#{File.dirname(rel)}", - 0555 - end - - def install_dir_data(rel) - install_files targetfiles(), "#{config('datadir')}/#{rel}", 0644 - end - - def install_dir_conf(rel) - # FIXME: should not remove current config files - # (rename previous file to .old/.org) - install_files targetfiles(), "#{config('sysconfdir')}/#{rel}", 0644 - end - - def install_dir_man(rel) - install_files targetfiles(), "#{config('mandir')}/#{rel}", 0644 - end - - def install_files(list, dest, mode, stripext = false) - mkdir_p dest, @config.install_prefix - list.each do |fname| - if stripext - install fname, "#{dest}/#{File.basename(fname, '.*')}", - mode, @config.install_prefix - else - install fname, dest, mode, @config.install_prefix - end - end - end - - def libfiles - glob_reject(%w(*.y *.output), targetfiles()) - end - - def rubyextentions(dir) - ents = glob_select("*.#{@config.dllext}", targetfiles()) - if ents.empty? - setup_rb_error "no ruby extention exists: 'ruby #{$0} setup' first" - end - ents - end - - def targetfiles - mapdir(existfiles() - hookfiles()) - end - - def mapdir(ents) - ents.map {|ent| - if File.exist?(ent) - then ent # objdir - else "#{curr_srcdir()}/#{ent}" # srcdir - end - } - end - - # picked up many entries from cvs-1.11.1/src/ignore.c - JUNK_FILES = %w( - core RCSLOG tags TAGS .make.state - .nse_depinfo #* .#* cvslog.* ,* .del-* *.olb - *~ *.old *.bak *.BAK *.orig *.rej _$* *$ - - *.org *.in .* - ) - - def existfiles - glob_reject(JUNK_FILES, (files_of(curr_srcdir()) | files_of('.'))) - end - - def hookfiles - %w( pre-%s post-%s pre-%s.rb post-%s.rb ).map {|fmt| - %w( config setup install clean distclean ).map {|t| sprintf(fmt, t) } - }.flatten - end - - def glob_select(pat, ents) - re = globs2re([pat]) - ents.select {|ent| re =~ ent } - end - - def glob_reject(pats, ents) - re = globs2re(pats) - ents.reject {|ent| re =~ ent } - end - - GLOB2REGEX = { - '.' => '\.', - '$' => '\$', - '#' => '\#', - '*' => '.*' - } - - def globs2re(pats) - /\A(?:#{ - pats.map {|pat| pat.gsub(/[\.\$\#\*]/) {|ch| GLOB2REGEX[ch] } }.join('|') - })\z/ - end - - # - # TASK test - # - - TESTDIR = 'test' - - def exec_test - unless File.directory?('test') - $stderr.puts 'no test in this package' if verbose? - return - end - $stderr.puts 'Running tests...' if verbose? - begin - require 'test/unit' - rescue LoadError - setup_rb_error 'test/unit cannot loaded. You need Ruby 1.8 or later to invoke this task.' - end - runner = Test::Unit::AutoRunner.new(true) - runner.to_run << TESTDIR - runner.run - end - - # - # TASK clean - # - - def exec_clean - exec_task_traverse 'clean' - rm_f @config.savefile - rm_f 'InstalledFiles' - end - - alias clean_dir_bin noop - alias clean_dir_lib noop - alias clean_dir_data noop - alias clean_dir_conf noop - alias clean_dir_man noop - - def clean_dir_ext(rel) - return unless extdir?(curr_srcdir()) - make 'clean' if File.file?('Makefile') - end - - # - # TASK distclean - # - - def exec_distclean - exec_task_traverse 'distclean' - rm_f @config.savefile - rm_f 'InstalledFiles' - end - - alias distclean_dir_bin noop - alias distclean_dir_lib noop - - def distclean_dir_ext(rel) - return unless extdir?(curr_srcdir()) - make 'distclean' if File.file?('Makefile') - end - - alias distclean_dir_data noop - alias distclean_dir_conf noop - alias distclean_dir_man noop - - # - # Traversing - # - - def exec_task_traverse(task) - run_hook "pre-#{task}" - FILETYPES.each do |type| - if type == 'ext' and config('without-ext') == 'yes' - $stderr.puts 'skipping ext/* by user option' if verbose? - next - end - traverse task, type, "#{task}_dir_#{type}" - end - run_hook "post-#{task}" - end - - def traverse(task, rel, mid) - dive_into(rel) { - run_hook "pre-#{task}" - __send__ mid, rel.sub(%r[\A.*?(?:/|\z)], '') - directories_of(curr_srcdir()).each do |d| - traverse task, "#{rel}/#{d}", mid - end - run_hook "post-#{task}" - } - end - - def dive_into(rel) - return unless File.dir?("#{@srcdir}/#{rel}") - - dir = File.basename(rel) - Dir.mkdir dir unless File.dir?(dir) - prevdir = Dir.pwd - Dir.chdir dir - $stderr.puts '---> ' + rel if verbose? - @currdir = rel - yield - Dir.chdir prevdir - $stderr.puts '<--- ' + rel if verbose? - @currdir = File.dirname(rel) - end - - def run_hook(id) - path = [ "#{curr_srcdir()}/#{id}", - "#{curr_srcdir()}/#{id}.rb" ].detect {|cand| File.file?(cand) } - return unless path - $stderr.puts "invoking hook script #{path}" if verbose? - begin - instance_eval File.read(path), path, 1 - rescue - raise if $DEBUG - setup_rb_error "hook #{path} failed:\n" + $!.message - end - end - -end # class Installer - - -class SetupError < StandardError; end - -def setup_rb_error(msg) - raise SetupError, msg -end - -if $0 == __FILE__ - begin - ToplevelInstaller.invoke - rescue SetupError - raise if $DEBUG - $stderr.puts $!.message - $stderr.puts "Try 'ruby #{$0} --help' for detailed usage." - exit 1 - end -end diff --git a/skeletons/sh.erb b/skeletons/sh.erb deleted file mode 100644 index e2c953e..0000000 --- a/skeletons/sh.erb +++ /dev/null @@ -1,32 +0,0 @@ -<%= header 'sh.hdr' %> - -SELF=`basename $0` -VERSION='0.0.1' - -function usage ( ) { - echo "usage : $SELF [-]" -} - -function version ( ) { - echo " $SELF version $VERSION" - echo " Copyright (C) <%= @username %> <%= "#{Time.now.year}-#{Time.now.year+3}" %>" - echo " This is free software; There is NO warranty; " - echo " not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." -} - -OPTERR=1 -while [ 1 ]; do - getopts "vha:" OPT - if test $? -gt 0; then break; fi - case $OPT in - v) - version && exit 0 - ;; - h) - usage && exit 0 - ;; - a) - echo "arg $OPTARG [$OPTIND]" - ;; - esac -done diff --git a/skeletons/sh.hdr b/skeletons/sh.hdr deleted file mode 100644 index ca0ad8a..0000000 --- a/skeletons/sh.hdr +++ /dev/null @@ -1,12 +0,0 @@ -#! /bin/bash - -#---------------------------------------------------------------------------- -# -# File : <%= @filename %> -# Author : <%= @username %> <<%= @email %>> -# Date : <%= @now %> -# License : -# -<%= license '# '%> -# -#---------------------------------------------------------------------------- diff --git a/skeletons/tex.erb b/skeletons/tex.erb deleted file mode 100644 index 489f73c..0000000 --- a/skeletons/tex.erb +++ /dev/null @@ -1,74 +0,0 @@ -% -% <%= @username %> <<%= @email %>> -% <%= @filename %> -% <%= @now %> -% -\documentclass[a4paper,twoside,12pt]{article} -% -\usepackage[french]{babel} % prise en charge du francais -\usepackage[latin1]{inputenc} % codage des caracteres -\usepackage[T1]{fontenc} % manipulation des polices -\usepackage{moreverb} % listinginput[incr]{first}{file} -\usepackage{fancybox} % VerbatimInput{file} -\usepackage{fancyhdr} % en-tete pied de page -\usepackage{hyperref} % lien hypertext pdf / html doit etre place en dernier -\usepackage{layout} % afficher le layout -% layout vertical -\setlength{\topmargin}{0cm} -\setlength{\headheight}{2cm} -\setlength{\headsep}{0.5cm} -\setlength{\topskip}{1.5cm} -\setlength{\textheight}{21cm} -\setlength{\footskip}{2cm} -%layout horizontal -\setlength{\evensidemargin}{49pt} -\setlength{\oddsidemargin}{6pt} -\setlength{\marginparwidth}{3cm} -\setlength{\textwidth}{14cm} -% -\pagestyle{fancy} -% -% -\begin{document} - %\layout - \tableofcontents - \newpage - % - % - \section{Section} - % - Text ... - % - \paragraph{Paragraph} P - % - \paragraph{} LABEL\label{L} - % - \subsection{Subsection} - % - % - \subsubsection{SubSubSection} - % - % - % - % - % - \newpage - \section{Section 2} - % - Label : \ref{L} page : \pageref{L}.\\ - \url{http://cr.yp.to}\\ - biblio : \cite{keyword}\\ - \footnote{une note de bas de page} - % - \appendix - \section{Code Source} - \subsection{Code\_A} - % - %\insertFile{../Code_A}{scriptsize} - % - %\includegraphics*[height=8cm]{filename} - %\section{Bibliographie} - % - \bibliographystyle{plain} - \bibliography{biblio} -\end{document} diff --git a/skeletons/wxApp.py.erb b/skeletons/wxApp.py.erb deleted file mode 100644 index 18f9392..0000000 --- a/skeletons/wxApp.py.erb +++ /dev/null @@ -1,126 +0,0 @@ -<%= header 'python.hdr' %> - -""" Module Descritpion """ - -import wx -from zurcher.wx.MenuFactory import * -from wx.html import HtmlWindow -import wx.lib.wxpTag # wxButton in AboutDialog -from wx.lib.newevent import NewEvent as wxNewEvent - - -#---------------------------------------------------------------------------- - -__app_version__ = '0.1.0' -__app_name__ = 'MyApp' -__app__ = '%s %s' % ( __app_name__, __app_version__ ) - -#---------------------------------------------------------------------------- - -UpdateGuiEvent, EVT_UPDATE_GUI = wxNewEvent( ) - -#---------------------------------------------------------------------------- - -class AboutDialog( wx.Dialog ): - """ Used to show info about ZIP file """ - text = '''<html> - <body bgcolor="#dddddd"> - <center><table bgcolor="#eeeeee" width="100%%" cellspacing="0" cellpadding="0" border="1"> - <tr><td align="center">Running on Python %s<br>using wxPython %s</td></tr></table> - <p><b>%s</b> is a small test application.</p> - <p><b>%s</b> is brought to you by <b>Jérémy Zurcher</b></p> - <p><font size="-1">Please see <i>license.txt</i> for licensing information about <b>wxPython.</b></font></p> - <p><wxp module="wx" class="Button"> - <param name="label" value="Okay"> - <param name="id" value="%d"> - </wxp></p> - </center> - </body> - </html>''' - - def __init__( self, parent, title, ID=-1 ): - wx.Dialog.__init__( self, parent, ID, title) - html = HtmlWindow( self, -1, size=(410, -1) ) - import sys - py_version = sys.version.split( )[0] - html.SetPage( self.text % ( py_version, wx.__version__, __app_name__, __app_name__, wx.ID_OK ) ) - btn = html.FindWindowById( wx.ID_OK ) - btn.SetDefault( ) - ir = html.GetInternalRepresentation( ) - html.SetSize( ( ir.GetWidth()+25, ir.GetHeight()+25 ) ) - self.SetClientSize( html.GetSize() ) - self.CenterOnScreen( ) - -#---------------------------------------------------------------------------- -class MyPanel( wx.Panel ): - def __init__( self, parent ): - wx.Panel.__init__( self, parent, -1 ) - self.SetBackgroundColour( 'GREY' ) - gbs = wx.GridBagSizer( 5, 5 ) - gbs.Add( (0,0), (10,10) ) - gbs.Add( wx.StaticText( self, -1, 'wx.StaticText' ), (1,1) ) - self.SetSizer( gbs ) - -#---------------------------------------------------------------------------- -class MyFrame( wx.Frame ): - def __init__( self, title ): - wx.Frame.__init__( self, None, -1, title, size=(200, 200) ) - - menuIDs = { - 'open' : [ wx.NewId(), True ], - } - self.menuIDs = menuIDs - - mb = zMenuBar( self, None, wx.MB_DOCKABLE ) - fileMenu=[ - zItem( '&Open\tCtrl-O', 'Open something', fct=self.OnOpen, id=menuIDs['open'][0] ), - zItem( kind=wx.ITEM_SEPARATOR ), - zItem( 'E&xit\tCtrl-X', 'Quit this application', fct=self.OnExit ) - ] - helpMenu=[ - zItem( '&About\tF1', 'About dialog', fct=self.OnHelp ) - ] - menus=[ - zMenu( '&File', '', fileMenu, wx.MENU_TEAROFF), - zMenu( '&Help','', helpMenu) - ] - mb.realize( menus ) - - self.SetStatusBar( self.CreateStatusBar( ) ) - - self.Bind( wx.EVT_CLOSE, self.OnExit ) - panel = MyPanel( self ) - #self.Fit( ) - - def OnExit( self, event ): - self.Destroy( ) - - def OnHelp( self, event ): - dialog = AboutDialog( self, 'About %s ' % ( __app__ ) ) - dialog.ShowModal( ) - dialog.Destroy( ) - - def OnOpen( self, event ): - print 'OnOpen will be disabled' - self.menuIDs['open'][1] = False - self.OnUpdateGui( event ) - - def OnUpdateGui( self, evt ): -# for key in self.menuIDs.keys( ): -# self.menuIDs[key][1] = False - mb = self.GetMenuBar( ) - map( lambda x:mb.Enable( x[0], x[1] ), self.menuIDs.values() ) - -#---------------------------------------------------------------------------- -class MyApp( wx.App ): - def OnInit( self ): - frame = MyFrame( __app__ ) - frame.Center( ) - frame.Show( True ) - return True - -#---------------------------------------------------------------------------- -if __name__ == '__main__': - app = MyApp(0) - app.MainLoop() - |