- Se agrega el script setup.py para instalar los modulos de python.
- Se actualizan los número de versión a 0.3 (incrementa la versión de Debian).
- Se mejora bastante la documentación de los README.
--- /dev/null
+# sercom Makefile (probablemente _demasiado_ Debian friendly)
+
+INSTALL = install -o root -g root
+
+PREFIX = /usr/local
+
+CONFS = $(wildcard doc/examples/*.ini)
+MAKEFILES = $(wildcard doc/examples/Makefile*)
+DAEMONS = src/sc_fetch src/sc_test src/sc_deliver
+COMMANDS = src/sc_codegen src/sc_dbq
+PHPLIBS = $(wildcard src/T/*.php)
+PHPDBO = $(wildcard src/T/DBO/*.php)
+PHPSCHEMA = $(wildcard src/T/DBO/schema/*.ini)
+DOCS = doc/README $(wildcard doc/schema.*)
+EXAMPLES = $(wildcard doc/examples/*)
+
+.PHONY: all install clean
+
+all:
+
+install:
+ # Directorios
+ $(INSTALL) -d -m 0755 $(DESTDIR)$(PREFIX)/sbin
+ $(INSTALL) -d -m 0755 $(DESTDIR)$(PREFIX)/bin
+ $(INSTALL) -d -m 0755 $(DESTDIR)/etc/sercom
+ $(INSTALL) -d -m 0755 $(DESTDIR)$(PREFIX)/share/doc/sercom/examples
+ $(INSTALL) -d -m 0755 $(DESTDIR)$(PREFIX)/share/php/T/DBO/schema
+ $(INSTALL) -d -m 2775 $(DESTDIR)$/var/lib/sercom/ejercicios
+ $(INSTALL) -d -m 2775 $(DESTDIR)$/var/lib/sercom/intentos
+ # Archivos
+ $(INSTALL) -m 0644 $(CONFS) $(DESTDIR)/etc/sercom
+ $(INSTALL) -m 0664 $(MAKEFILES) $(DESTDIR)/var/lib/sercom
+ $(INSTALL) -m 0755 $(DAEMONS) $(DESTDIR)$(PREFIX)/sbin
+ $(INSTALL) -m 0755 $(COMMANDS) $(DESTDIR)$(PREFIX)/bin
+ $(INSTALL) -m 0644 $(PHPLIBS) $(DESTDIR)$(PREFIX)/share/php/T
+ $(INSTALL) -m 0644 $(PHPDBO) $(DESTDIR)$(PREFIX)/share/php/T/DBO
+ $(INSTALL) -m 0644 $(PHPSCHEMA) $(DESTDIR)$(PREFIX)/share/php/T/DBO/schema
+ $(INSTALL) -m 0644 $(DOCS) $(DESTDIR)$(PREFIX)/share/doc/sercom
+ $(INSTALL) -m 0644 $(EXAMPLES) $(DESTDIR)$(PREFIX)/share/doc/sercom/examples
+ # Bibliotecas en Python
+ ./setup.py install --optimize 2 --root=$(DESTDIR) --prefix=$(PREFIX)
+
+clean:
+
--- /dev/null
+sercom for Debian
+-----------------
+
+Primero que nada debería leer el archivo /usr/share/doc/sercom/README!!!
+
+Para que el programa empiece a funcionar, hay que cambiar /etc/default/sercom,
+poniendo la variable ENABLED=1 (ver el resto de las variables por si hay que
+ajustar algo más, aunque los valores que trae son bastante razonables).
+
+2 servicios arrancarán al prender la PC: sc_fetch (encargado de recibir las
+entregas) y sc_test (encargado de probar las entregas).
+Puede activarlos o desactivarlos con 'invoque-rc.d sercom start' o 'stop'
+respectivamente.
+
+El programa sc_deliver, encargado de cerrar una entrega y tomar el último
+intento exitoso como entrega final a corregir, corre todos los días a las
+23:30hs, puede modificarlo en el archivo /etc/cron.d/sercom.
+Puede ser necesario modificarlo si el corrector es muy lento compilando y no
+llega terminar de compilar las cosas que, normalmente, se terminan de entregar a
+las 20:00hs.
+
+Tambien puede cambiar la frecuencia de rotación de logs en
+/etc/logrotate.d/sercom.
+
+ -- Leandro Lucarella <llucare@fi.uba.ar>, sáb mar 5 22:16:29 ART 2005
+sercom (0.3) unstable; urgency=low
+
+ * Se migra sc_test a python.
+ * sc_test ahora corre los casos de prueba y compara resultados, enviando
+ mails, etc. No corre un chequeador de memoria.
+ * Se agrega sc_deliver, encargado de cerrar las entregas.
+ * Se agrega sc_dbq, para hacer consultas a la base de datos usando sqlobject
+ de python, principalmente con motivos de debug.
+ * Bugfixes.
+
+ -- Leandro Lucarella <luca@llucax.hn.org> Sun, 6 Mar 2005 01:36:29 -0300
+
sercom (0.2) unstable; urgency=low
* Se mejora el log.
--- /dev/null
+Source: sercom
+Section: utils
+Priority: optional
+Maintainer: Leandro Lucarella <llucare@fi.uba.ar>
+Build-Depends: debhelper (>= 4.0.0), cdbs
+Standards-Version: 3.6.1
+
+Package: sercom
+Architecture: all
+Depends: ${shlibs:Depends}, ${misc:Depends}, ${python:Depends},
+ php4-cli, php4-pear, php4-imap, make, python2.4, python2.4-sqlobject (>> 0.6.1)
+Recommends: php4-sqlite, python2.4-sqlite, python2.4-egenix-mxdatetime, gcc,
+ g++, sqlite
+Description: Servidor de correccion de taller
+ sercom es un SERvidor de COMpilacion y ejecucion de pruebas para la catedra de
+ Taller de Programacion I de la Facultad de Ingenieria de la Universidad de
+ Buenos Aires, aunque puede ser facilmente adaptado para usar por otras
+ catedras e incluso usos mas generales.
+ .
+ Este paquete incluye sc_fetch, sc_test, sc_deliver, sc_dbq y sc_codegen.
--- /dev/null
+This is sercom, written and maintained by Leandro Lucarella <llucare@fi.uba.ar>
+on Sun, 29 Aug 2004 15:20:25 -0300.
+
+Copyright (C) 2003 Leandro Lucarella
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ 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 package; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ 02111-1307, USA.
+
+On Debian systems, the complete text of the GNU General
+Public License can be found in `/usr/share/common-licenses/GPL'.
--- /dev/null
+# /etc/cron.d/sercom: fragmento de crontab para sercom
+
+# Ejecuta sc_deliver todos los días después a las 23:30hs
+# m h dom mon dow user command
+30 23 * * * sercom /usr/sbin/sc_deliver
--- /dev/null
+# Defaults for sercom initscript
+# sourced by /etc/init.d/sercom
+# installed at /etc/default/sercom by the maintainer scripts
+
+#
+# This is a POSIX shell fragment
+#
+
+# Opciones para el fetch
+FETCH_OPTS=""
+# Prioridad del fetch
+FETCH_NICE=5
+# Usuario con el cual correr el fetch
+FETCH_UID=sercom
+# Grupo con el cual correr el fetch
+FETCH_GID=sercom
+
+# Opciones para el test
+TEST_OPTS=""
+# Prioridad del test
+TEST_NICE=10
+
+# Hasta que esto no esté en 1, el servidor no va a correr.
+ENABLED=0
Corrector Automático para Taller de Programación I (75.42)
Universidad de Buenos Aires - Facultad de Ingeniería
+Este programa requiere el siguiente los siguientes programas y bibliotecas:
+* php4-cli
+* php4-imap
+* php4-pear
+* php4 PEAR DB_DataObject (1.7.2 o superior) (# pear install -a DB_DataObject)
+* make
+* python2.4
+* python2.4-sqlobject (0.6.2 o superior)
+En el directorio /etc/sercom se encuentran los archivos de configuración,
+debería darle una mirada antes de correr el servidor.
+
+/etc/sercom/log.ini es un poco más complejo y sirve para configurar el nivel
+de log. El formato está descripto en:
+http://docs.python.org/lib/logging-config-fileformat.html
+Se lo provee de una forma bastante razonable, probablemente haya que cambiar
+la sección [handler_mail] para poner un servidor SMTP y direcciones de mail
+válidas solamente.
+
+Los archivos de configuración originales se encuentran en
+/usr/share/doc/sercom/examples, por si fuera necesario recuperarlos.
+
+En /var/lib/sercom están los archivos de datos del programa. Contiene:
+- Makefile de ejemplo ('Makefile' para C y 'Makefile-cpp' para C++).
+- Directorio 'intentos' donde los intentos de entrega que llegan por mail
+ de los alumnos. Su estructura es:
+ intentos/año.cuatrimestre/curso.ejercicio.entrega/padron.intento
+ dentro de cada directorio están los archivos fuente enviados por el alumno.
+- Directorio 'ejercicios' donde los datos sobre los ejercicios deben ser
+ guardados, incluyendo los archivos para casos de prueba. Su estructura es:
+ ejercicios/[id]/Makefile
+ casos_de_prueba/[nombre]/{stdin}
+ {stdout}
+ {stderr}
+ {entradas/[archivo]}
+ {salidas/[archivo]}
+ [algo] significa que algo es una variable. {algo} indica que puede no existir.
+ id: es el identificador de ejercicio en la base de datos.
+ nombre: es el nombre del caso de prueba
+ stdin/stdout/stderr: es la entrada estándar, salida estándar y salida de error
+ esperada (la entrada es la que espera el programa a probar y las salidas son
+ las que espera el corrector para saber si la corrida fue correcta).
+ entradas: los 'archivo's de entradas son los archivos que espera tener
+ presente el programa para correr el caso de prueba.
+ salidas: los 'archivo's de salidas son los archivos que espera que genere (o
+ modifique si estaba presente también en entradas) el corrector y con el que
+ serán comparados dichos archivos generados para evaluar si la corrida fue
+ correcta.
+- Archivo de base de datos: la configuración por omisión espera la base de datos
+ en /var/lib/sercom/corrector.sqlite, con la estructura descripta en
+ /usr/share/doc/sercom/schema.sql. Para crear la base de datos vacía:
+ sqlite /var/lib/sercom/corrector.sqlite < /usr/share/doc/sercom/schema.sql
+ Pero recuerde que también habrá que cargar la base de datos con los datos
+ mínimos para que el corrector funcione (entregas, ejercicios, cursos,
+ docentes, inscriptos, casos de prueba).
+
+Por omisión el programa guarda el archivo de log en /var/log/sercom.log.
+
+ -- Leandro Lucarella <llucare@fi.uba.ar>, sáb mar 5 22:16:29 ART 2005
+++ /dev/null
-PEAR:
-=====
-DB_DataObject 1.7.2
--- /dev/null
+# Makefile de ejemplo para C++
+#
+# Creado: jue abr 15 15:34:19 ART 2004
+#
+# Copyleft 2004 - Leandro Lucarella, Bajo licencia GPL [http://www.gnu.org/]
+#
+
+# CONFIGURACION
+################
+
+# Nombre del ejecutable.
+target = tp
+
+# Extensión de los archivos a compilar (c para C, cpp o cc o cxx para C++).
+extension = cpp
+
+# Archivos con el código fuente que componen el ejecutable. Si no se especifica,
+# toma todos los archivos con la extensión mencionada. Para especificar hay que
+# descomentar la línea (quitarle el '#' del principio).
+# NOTA: No poner cabeceras (.h).
+#fuentes = entrada.cpp
+
+# Si es un programa GTK+, descomentá (quitale el '#' a) la siguiente línea.
+#gtk = si
+
+
+# CONFIGURACION "AVANZADA"
+###########################
+
+# Opciones para el compilador C.
+CFLAGS = -Werror -Wall -ggdb -ansi -pedantic -DDEBUG
+
+# Opciones para el compilador C++.
+CXXFLAGS = $(CFLAGS) -fno-inline
+
+# Opciones del enlazador.
+LDFLAGS=-static
+
+
+# VARIABLES CALCULADAS A PARTIR DE LA CONFIGURACION
+####################################################
+
+# Agrego flags y libs de GTK+ de ser necesario.
+ifdef gtk
+CFLAGS += $(shell pkg-config --cflags gtk+-2.0)
+CXXFLAGS += $(shell pkg-config --cflags gtk+-2.0)
+LDFLAGS += $(shell pkg-config --libs gtk+-2.0)
+endif
+
+# Uso enlazador de c++ si es código no C.
+ifeq ($(extension), c)
+enlazador = $(CC)
+else
+enlazador = $(CXX)
+endif
+
+# Si no especifica archivos, tomo todos.
+fuentes ?= $(wildcard *.$(extension))
+
+
+# REGLAS
+#########
+
+.PHONY: all clean
+
+all: $(target)
+
+o_files = $(patsubst %.$(extension),%.o,$(fuentes))
+
+$(target): $(o_files)
+ $(enlazador) $(LDFLAGS) $(o_files) $(LOADLIBES) $(LDLIBS) -o $(target)
+
+clean:
+ @$(RM) -fv *.o $(target)
+
[DBO]
-database = sqlite:////var/lib/sercom/corrector.sqlite
+database = sqlite:///var/lib/sercom/corrector.sqlite
schema_location = T/DBO/schema/
class_location = T/DBO/
require_prefix = T/DBO/
--- /dev/null
+#!/usr/bin/env python2.4
+# -*- encoding: iso-8859-1 -*-
+# vim: set et sw=4 sts=4 :
+
+from distutils.core import setup
+
+setup(name='sercom',
+ version='0.3',
+ description='Sercom base library',
+ author='Leandro Lucarella',
+ author_email='luca@llucax.hn.org',
+ url='http://www.fi.uba.ar/materias/7542/',
+ packages=['sercom'],
+ package_dir={'': 'src'},
+)
<?php // vim: set binary noeol et sw=4 sts=4:
-$VERSION = 0.2;
+$VERSION = 0.3;
$NAME = 'sercom';
define('DB_DATAOBJECT_NO_OVERLOAD', 0);
mail['To'] = inscripto.mail
mail['Reply-To'] = conf.get('mail', 'admin')
mail['Return-Path'] = conf.get('mail', 'admin')
- mail['X-Mailer'] = 'sercom 0.3'
+ mail['X-Mailer'] = 'sercom ' + sercom.VERSION
mail['X-Priority'] = '5'
smtp = smtplib.SMTP(conf.get('mail', 'smtp'))
smtp.sendmail(mail['From'], mail['To'], mail.as_string())
self['To'] = intento.mailRespuesta
self['Reply-To'] = conf.get('mail', 'admin')
self['Return-Path'] = conf.get('mail', 'admin')
- self['X-Mailer'] = 'sercom 0.3'
+ self['X-Mailer'] = 'sercom ' + sercom.VERSION
self['X-Priority'] = '5'
self.epilogue = 'Para ver correctamente este e-mail su cliente debe ' \
'soportar MIME.\n\n'
from util import init
+
+VERSION = '0.3'