forked from mirrors/kore
add a skeleton framework for creating new modules.
This commit is contained in:
parent
fa78d24948
commit
9b1f0a3fab
81
modules/skeleton/build.sh
Executable file
81
modules/skeleton/build.sh
Executable 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
0
modules/skeleton/media/.gitignore
vendored
Normal file
0
modules/skeleton/src/.gitignore
vendored
Normal file
0
modules/skeleton/src/.gitignore
vendored
Normal file
99
modules/skeleton/tools/inject.c
Executable file
99
modules/skeleton/tools/inject.c
Executable 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);
|
||||
}
|
Loading…
Reference in New Issue
Block a user