stargazing/notwa-util/cosmo-kuroko9

118 lines
3.7 KiB
Plaintext
Executable File

#!/usr/bin/false
if [ ! -e /cosmo-kuroko.done ]; then
: \
&& cd /root \
&& acquire from=github repo=kuroko-lang/kuroko dest=/root/kuroko env=KUROKO \
&& cd /root/kuroko \
&& cp -r . ../kuroko.orig \
&& shed src/os.c \
's@.*char \*\* environ.*@#ifndef COSMOPOLITAN_LIBC_RUNTIME_RUNTIME_H_\n&\n#endif@' \
\
&& shed src/vm.c \
'/static.*cache/c\\static KrkClassCacheEntry * cache = 0;' \
$'/define CACHE_SIZE/,/nextCount/{N;w /temp\nd}' \
$'/void krk_initVM/{r /temp\nN}' \
$'/Reset current thread/i\\\tcache = calloc(CACHE_SIZE, sizeof(KrkClassCacheEntry));' \
$'/krk_freeMemoryDebugger();/a\\\tcache = (free(cache), NULL);' \
\
&& shed src/threads.c '/define gettid/d' \
&& shed src/vm.c '/"initial-exec"/d' \
\
&& shed src/vm.c \
$'/Ensure we don\'t have a macro/i\\
\\#ifdef KRK_DISABLE_DYNAMIC\\
KrkValue krk_module_onload_math(void);\\
KrkValue krk_module_onload_random(void);\\
KrkValue krk_module_onload_socket(void);\\
KrkValue krk_module_onload_timeit(void);\\
KrkValue krk_module_onload_wcwidth(void);\\
\\#endif\\
\\
\\#define BUILTIN_MODULE(name, init) { \\\\\\
\tKrkInstance * module = (KrkInstance*)AS_OBJECT(init()); \\\\\\
\tkrk_attachNamedObject(&vm.modules, name, (KrkObj*)module); \\\\\\
\tkrk_attachNamedObject(&module->fields, "__name__", (KrkObj*)S(name)); \\\\\\
\tkrk_attachNamedValue(&module->fields, "__file__", NONE_VAL()); \\\\\\
}\\
' \
$'/krk_module_init_dis/a\\
\\#endif\\
\\#ifdef KRK_DISABLE_DYNAMIC\\
\t\tBUILTIN_MODULE("math", krk_module_onload_math)\\
\t\tBUILTIN_MODULE("random", krk_module_onload_random)\\
\t\tBUILTIN_MODULE("socket", krk_module_onload_socket)\\
\t\tBUILTIN_MODULE("timeit", krk_module_onload_timeit)\\
\t\tBUILTIN_MODULE("wcwidth", krk_module_onload_wcwidth)\\
' \
\
&& shed src/modules/module_socket.c \
'/netdb\.h/a\#include <netinet/in.h>' \
$'/switch (afval)/{i\\
\tif (afval == AF_INET) return "AF_INET";\\
\tif (afval == AF_INET6) return "AF_INET6";\\
\tif (afval == AF_UNIX) return "AF_UNIX";\\
\tsnprintf(tmp,30,"%d",afval);\\
\treturn tmp;
}
/switch (afval)/,/}/d' \
\
&& shed src/kuroko.c \
$'/strlen(buf)-1/{
s/if .*/if (buf[buflen-1] == \'\\\\n\') {/
i\\
\t\t\t\tsize_t buflen = strlen(buf);
a\\
\t\t\t\t\t\\if (buflen >= 2 && buf[buflen-2] == \'\\\\r\') buf[buflen-2] = \'\\\\n\', buf[buflen-1] = \'\\0\';\\
\t\t\t\t} else {
}' \
\
&& shed Makefile \
$'/ifdef KRK_DISABLE_THREADS/i\\
ifdef KRK_DISABLE_DYNAMIC\\
BIN_OBJS += src/modules/module_math.o src/modules/module_random.o src/modules/module_socket.o src/modules/module_timeit.o src/modules/module_wcwidth.o\\
CFLAGS += -DKRK_DISABLE_DYNAMIC -DSTATIC_ONLY\\
endif\\
' \
$'/CFLAGS += -DKRK_DISABLE_THREADS/a\\
else\\
CFLAGS += -DKRK_MEDIOCRE_TLS\\
' \
'/shell tools\/can-floor-without-libm\.sh/,/endif/d' \
\
&& cd /root \
&& { diff -NrU3 kuroko.orig/ kuroko/ > kuroko.patch; [ $? -le 1 ]; } \
|| exit $?
# diff exit status is normally 0 or 1, anything greater is an error.
# this isn't included in the patch because it's super specific to cosmopolitan. \
: \
&& cd /root/kuroko \
&& shed src/kuroko.c 's/int main/dontinline int _main/' \
&& printf %s >>src/kuroko.c $'
STATIC_YOINK("__die");
void ShowCrashReports(void);
int LoadZipArgs(int *, char ***);
int main(int argc, char * argv[]) {
\tShowCrashReports();
\tLoadZipArgs(&argc, &argv);
\treturn _main(argc, argv);
}
' \
|| exit $?
: \
&& cd /root/kuroko \
&& CC=cosmocc CFLAGS="-Os -g" AR=ar.com ARFLAGS=rcsD \
make.com kuroko modules/codecs/sbencs.krk modules/codecs/dbdata.krk \
-j2 KRK_DISABLE_RLINE=1 KRK_DISABLE_DYNAMIC=1 \
&& cp kuroko kuroko.com.dbg \
&& objcopy -S -O binary kuroko.com.dbg kuroko.com \
\
&& rm test/day23.krk \
&& rm test/testAnnotations.krk \
&& rm test/testSubclassPropertySuperCall.krk \
&& make.com test \
&& touch /cosmo-kuroko.done \
|| exit $?
fi