add a skeleton framework for creating new modules.

This commit is contained in:
Joris Vink 2013-07-10 09:28:00 +02:00
parent fa78d24948
commit 9b1f0a3fab
4 changed files with 180 additions and 0 deletions

81
modules/skeleton/build.sh Executable file
View File

@ -0,0 +1,81 @@
#!/bin/bash
#
# Copyright (c) 2013 Joris Vink <joris@coders.se>
#
# Kore module build script, use this as a base for building
# your own modules for kore.
# The name of the module you will be building
MODULE=site.module
# The directory containing all your media files (HTML, CSS, ...).
# These files will be compiled into the module and symbols will
# be exported for you to use in your code.
MEDIA_DIR=media
# The directory containing your module source.
SOURCE_DIR=src
# The directory containing the Kore source code.
KORE_DIR="notset"
if [ ${KORE_DIR} == "notset" ]; then
echo "Please edit build.sh and set KORE_DIR properly";
exit;
fi
# Compiler settings.
CC=gcc
CFLAGS="-I. -I${KORE_DIR}/includes -Wall -Wstrict-prototypes \
-Wmissing-prototypes -Wmissing-declarations -Wshadow \
-Wpointer-arith -Wcast-qual -Wsign-compare -g"
LDFLAGS=-shared
MODULE_BUILD_DATE=`date +"%Y-%m-%d %H:%M:%S"`
# Functions used in the build process.
function create_and_empty_dir {
if [ ! -d $1 ]; then
mkdir $1;
fi
rm -f $1/*
}
### Begin building ####
echo "Building module ${MODULE}..."
rm -f ${MODULE}
${CC} ${CFLAGS} tools/inject.c -o tools/inject
create_and_empty_dir ${SOURCE_DIR}/${MEDIA_DIR}
create_and_empty_dir .objs
rm -f static.h
for file in `find ${MEDIA_DIR} -type f \( ! -name \*.swp \)`; do
echo "Injecting $file";
base=`basename $file`;
./tools/inject $file $base > ${SOURCE_DIR}/${MEDIA_DIR}/${base}.c;
if [ $? -ne 0 ]; then
echo "Injection error, check above messages for clues.";
exit 1;
fi
done
echo "#define MODULE_BUILD_DATE \"${MODULE_BUILD_DATE}\"" >> static.h
for src in `find ${SOURCE_DIR} -type f -name \*.c`; do
base=`basename $src`;
${CC} ${CFLAGS} -fPIC -c $src -o .objs/${base}.o
if [ $? -ne 0 ]; then
echo "Build error, check above messages for clues.";
exit 1;
fi
done
${CC} ${LDFLAGS} `find .objs -name \*.o -type f` -o ${MODULE}
echo "Building completed!"
rm -rf ${SOURCE_DIR}/${MEDIA_DIR}
rm -rf .objs
rm -f tools/inject
rm -f static.h

0
modules/skeleton/media/.gitignore vendored Normal file
View File

0
modules/skeleton/src/.gitignore vendored Normal file
View File

99
modules/skeleton/tools/inject.c Executable file
View File

@ -0,0 +1,99 @@
/*
* Copyright (c) 2013 Joris Vink <joris@coders.se>
*
* Permission to use, copy, modify, and 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.
*/
#include <sys/param.h>
#include <sys/stat.h>
#include <ctype.h>
#include <err.h>
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int
main(int argc, char *argv[])
{
struct stat st;
ssize_t len;
FILE *hdr;
char *ext;
unsigned char c[1];
int fd, newline, count;
if (argc != 3)
exit(1);
if ((fd = open(argv[1], O_RDONLY)) == -1)
err(1, "open() %d", errno);
if ((hdr = fopen("static.h", "a+")) == NULL)
err(1, "fopen() %d", errno);
if ((ext = strchr(argv[2], '.')) != NULL)
*(ext)++ = '\0';
else
ext = "";
if (stat(argv[1], &st) == -1) {
printf("stat(%s) failed: %d\n", argv[1], errno);
exit(1);
}
printf("/**** AUTO GENERATED BY MAKEFILE - DO NOT TOUCH ****/\n");
printf("#include <sys/param.h>\n\n");
printf("u_int8_t static_%s_%s[] = {", ext, argv[2]);
len = 0;
count = 0;
newline = 1;
for (;;) {
if (newline) {
printf("\n\t");
count = 0;
newline = 0;
}
len = read(fd, c, 1);
if (len == 0)
break;
if (len == -1) {
printf("read(): %d\n", errno);
exit(1);
}
if (len != 1)
exit(1);
printf("0x%02x, ", c[0]);
if (count++ == 10)
newline = 1;
}
close(fd);
printf("};\n\n");
printf("u_int32_t static_len_%s_%s = %ld;\n", ext, argv[2], st.st_size);
printf("time_t static_mtime_%s_%s = %ld;\n", ext, argv[2], st.st_mtime);
fprintf(hdr, "extern u_int8_t static_%s_%s[];\n", ext, argv[2]);
fprintf(hdr, "extern u_int32_t static_len_%s_%s;\n", ext, argv[2]);
fprintf(hdr, "extern time_t static_mtime_%s_%s;\n", ext, argv[2]);
fclose(hdr);
return (0);
}