import
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
*.o
|
||||
*.~
|
||||
*.a
|
||||
*.S
|
||||
*.log
|
||||
@@ -0,0 +1,875 @@
|
||||
# Makefile.in generated by automake 1.16.5 from Makefile.am.
|
||||
# Makefile. Generated from Makefile.in by configure.
|
||||
|
||||
# Copyright (C) 1994-2021 Free Software Foundation, Inc.
|
||||
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
am__is_gnu_make = { \
|
||||
if test -z '$(MAKELEVEL)'; then \
|
||||
false; \
|
||||
elif test -n '$(MAKE_HOST)'; then \
|
||||
true; \
|
||||
elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
|
||||
true; \
|
||||
else \
|
||||
false; \
|
||||
fi; \
|
||||
}
|
||||
am__make_running_with_option = \
|
||||
case $${target_option-} in \
|
||||
?) ;; \
|
||||
*) echo "am__make_running_with_option: internal error: invalid" \
|
||||
"target option '$${target_option-}' specified" >&2; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
has_opt=no; \
|
||||
sane_makeflags=$$MAKEFLAGS; \
|
||||
if $(am__is_gnu_make); then \
|
||||
sane_makeflags=$$MFLAGS; \
|
||||
else \
|
||||
case $$MAKEFLAGS in \
|
||||
*\\[\ \ ]*) \
|
||||
bs=\\; \
|
||||
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
|
||||
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
|
||||
esac; \
|
||||
fi; \
|
||||
skip_next=no; \
|
||||
strip_trailopt () \
|
||||
{ \
|
||||
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
|
||||
}; \
|
||||
for flg in $$sane_makeflags; do \
|
||||
test $$skip_next = yes && { skip_next=no; continue; }; \
|
||||
case $$flg in \
|
||||
*=*|--*) continue;; \
|
||||
-*I) strip_trailopt 'I'; skip_next=yes;; \
|
||||
-*I?*) strip_trailopt 'I';; \
|
||||
-*O) strip_trailopt 'O'; skip_next=yes;; \
|
||||
-*O?*) strip_trailopt 'O';; \
|
||||
-*l) strip_trailopt 'l'; skip_next=yes;; \
|
||||
-*l?*) strip_trailopt 'l';; \
|
||||
-[dEDm]) skip_next=yes;; \
|
||||
-[JT]) skip_next=yes;; \
|
||||
esac; \
|
||||
case $$flg in \
|
||||
*$$target_option*) has_opt=yes; break;; \
|
||||
esac; \
|
||||
done; \
|
||||
test $$has_opt = yes
|
||||
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
|
||||
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
|
||||
pkgdatadir = $(datadir)/helmet
|
||||
pkgincludedir = $(includedir)/helmet
|
||||
pkglibdir = $(libdir)/helmet
|
||||
pkglibexecdir = $(libexecdir)/helmet
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
sbin_PROGRAMS = helmetd$(EXEEXT)
|
||||
bin_PROGRAMS = helmetctl$(EXEEXT)
|
||||
subdir = .
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \
|
||||
$(am__configure_deps) $(am__DIST_COMMON)
|
||||
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
|
||||
configure.lineno config.status.lineno
|
||||
mkinstalldirs = $(install_sh) -d
|
||||
CONFIG_CLEAN_FILES =
|
||||
CONFIG_CLEAN_VPATH_FILES =
|
||||
am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sbindir)"
|
||||
PROGRAMS = $(bin_PROGRAMS) $(sbin_PROGRAMS)
|
||||
LIBRARIES = $(noinst_LIBRARIES)
|
||||
AR = ar
|
||||
ARFLAGS = cru
|
||||
AM_V_AR = $(am__v_AR_$(V))
|
||||
am__v_AR_ = $(am__v_AR_$(AM_DEFAULT_VERBOSITY))
|
||||
am__v_AR_0 = @echo " AR " $@;
|
||||
am__v_AR_1 =
|
||||
libxasync_a_AR = $(AR) $(ARFLAGS)
|
||||
libxasync_a_LIBADD =
|
||||
am__dirstamp = $(am__leading_dot)dirstamp
|
||||
am_libxasync_a_OBJECTS = libxasync/waitgroup.$(OBJEXT)
|
||||
libxasync_a_OBJECTS = $(am_libxasync_a_OBJECTS)
|
||||
libxtools_a_AR = $(AR) $(ARFLAGS)
|
||||
libxtools_a_LIBADD =
|
||||
am_libxtools_a_OBJECTS = libxtools/bstream.$(OBJEXT) \
|
||||
libxtools/galexer.$(OBJEXT) libxtools/gclexer.$(OBJEXT) \
|
||||
libxtools/massert.$(OBJEXT) libxtools/tccomp.$(OBJEXT) \
|
||||
libxtools/tclexer.$(OBJEXT) libxtools/tconfig.$(OBJEXT) \
|
||||
libxtools/vmapper.$(OBJEXT)
|
||||
libxtools_a_OBJECTS = $(am_libxtools_a_OBJECTS)
|
||||
am_helmetctl_OBJECTS = helmetctl.$(OBJEXT) logger.$(OBJEXT)
|
||||
helmetctl_OBJECTS = $(am_helmetctl_OBJECTS)
|
||||
helmetctl_DEPENDENCIES = $(libxtools_NAME) $(libxasync_NAME)
|
||||
am_helmetd_OBJECTS = helmetd.$(OBJEXT) logger.$(OBJEXT) \
|
||||
server.$(OBJEXT)
|
||||
helmetd_OBJECTS = $(am_helmetd_OBJECTS)
|
||||
helmetd_DEPENDENCIES = $(libxtools_NAME) $(libxasync_NAME)
|
||||
AM_V_P = $(am__v_P_$(V))
|
||||
am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY))
|
||||
am__v_P_0 = false
|
||||
am__v_P_1 = :
|
||||
AM_V_GEN = $(am__v_GEN_$(V))
|
||||
am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
|
||||
am__v_GEN_0 = @echo " GEN " $@;
|
||||
am__v_GEN_1 =
|
||||
AM_V_at = $(am__v_at_$(V))
|
||||
am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
|
||||
am__v_at_0 = @
|
||||
am__v_at_1 =
|
||||
DEFAULT_INCLUDES = -I.
|
||||
depcomp =
|
||||
am__maybe_remake_depfiles =
|
||||
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
||||
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||
AM_V_CC = $(am__v_CC_$(V))
|
||||
am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
|
||||
am__v_CC_0 = @echo " CC " $@;
|
||||
am__v_CC_1 =
|
||||
CCLD = $(CC)
|
||||
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
|
||||
AM_V_CCLD = $(am__v_CCLD_$(V))
|
||||
am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
|
||||
am__v_CCLD_0 = @echo " CCLD " $@;
|
||||
am__v_CCLD_1 =
|
||||
SOURCES = $(libxasync_a_SOURCES) $(libxtools_a_SOURCES) \
|
||||
$(helmetctl_SOURCES) $(helmetd_SOURCES)
|
||||
DIST_SOURCES = $(libxasync_a_SOURCES) $(libxtools_a_SOURCES) \
|
||||
$(helmetctl_SOURCES) $(helmetd_SOURCES)
|
||||
am__can_run_installinfo = \
|
||||
case $$AM_UPDATE_INFO_DIR in \
|
||||
n|no|NO) false;; \
|
||||
*) (install-info --version) >/dev/null 2>&1;; \
|
||||
esac
|
||||
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
|
||||
# Read a list of newline-separated strings from the standard input,
|
||||
# and print each of them once, without duplicates. Input order is
|
||||
# *not* preserved.
|
||||
am__uniquify_input = $(AWK) '\
|
||||
BEGIN { nonempty = 0; } \
|
||||
{ items[$$0] = 1; nonempty = 1; } \
|
||||
END { if (nonempty) { for (i in items) print i; }; } \
|
||||
'
|
||||
# Make sure the list of sources is unique. This is necessary because,
|
||||
# e.g., the same source file might be shared among _SOURCES variables
|
||||
# for different programs/libraries.
|
||||
am__define_uniq_tagged_files = \
|
||||
list='$(am__tagged_files)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | $(am__uniquify_input)`
|
||||
AM_RECURSIVE_TARGETS = cscope
|
||||
am__DIST_COMMON = $(srcdir)/Makefile.in compile install-sh missing
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
distdir = $(PACKAGE)-$(VERSION)
|
||||
top_distdir = $(distdir)
|
||||
am__remove_distdir = \
|
||||
if test -d "$(distdir)"; then \
|
||||
find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
|
||||
&& rm -rf "$(distdir)" \
|
||||
|| { sleep 5 && rm -rf "$(distdir)"; }; \
|
||||
else :; fi
|
||||
am__post_remove_distdir = $(am__remove_distdir)
|
||||
DIST_ARCHIVES = $(distdir).tar.gz
|
||||
GZIP_ENV = --best
|
||||
DIST_TARGETS = dist-gzip
|
||||
# Exists only to be overridden by the user if desired.
|
||||
AM_DISTCHECK_DVI_TARGET = dvi
|
||||
distuninstallcheck_listfiles = find . -type f -print
|
||||
am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
|
||||
| sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
|
||||
distcleancheck_listfiles = find . -type f -print
|
||||
ACLOCAL = ${SHELL} '/home/ziggi/Projects/helmet/missing' aclocal-1.16
|
||||
AMTAR = $${TAR-tar}
|
||||
AM_DEFAULT_VERBOSITY = 1
|
||||
AUTOCONF = ${SHELL} '/home/ziggi/Projects/helmet/missing' autoconf
|
||||
AUTOHEADER = ${SHELL} '/home/ziggi/Projects/helmet/missing' autoheader
|
||||
AUTOMAKE = ${SHELL} '/home/ziggi/Projects/helmet/missing' automake-1.16
|
||||
AWK = mawk
|
||||
CC = gcc
|
||||
CCDEPMODE = depmode=none
|
||||
CFLAGS = -g -O2 -std=c99 -Wall -I. -I ./libxasync -I ./libxtools
|
||||
CPPFLAGS =
|
||||
CSCOPE = cscope
|
||||
CTAGS = ctags
|
||||
CYGPATH_W = echo
|
||||
DEFS = -DPACKAGE_NAME=\"helmet\" -DPACKAGE_TARNAME=\"helmet\" -DPACKAGE_VERSION=\"0.0.1\" -DPACKAGE_STRING=\"helmet\ 0.0.1\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DPACKAGE=\"helmet\" -DVERSION=\"0.0.1\"
|
||||
DEPDIR = .deps
|
||||
ECHO_C =
|
||||
ECHO_N = -n
|
||||
ECHO_T =
|
||||
ETAGS = etags
|
||||
EXEEXT =
|
||||
INSTALL = /bin/install -c
|
||||
INSTALL_DATA = ${INSTALL} -m 644
|
||||
INSTALL_PROGRAM = ${INSTALL}
|
||||
INSTALL_SCRIPT = ${INSTALL}
|
||||
INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
|
||||
LDFLAGS =
|
||||
LIBOBJS =
|
||||
LIBS =
|
||||
LTLIBOBJS =
|
||||
MAKEINFO = ${SHELL} '/home/ziggi/Projects/helmet/missing' makeinfo
|
||||
MKDIR_P = /bin/mkdir -p
|
||||
OBJEXT = o
|
||||
PACKAGE = helmet
|
||||
PACKAGE_BUGREPORT =
|
||||
PACKAGE_NAME = helmet
|
||||
PACKAGE_STRING = helmet 0.0.1
|
||||
PACKAGE_TARNAME = helmet
|
||||
PACKAGE_URL =
|
||||
PACKAGE_VERSION = 0.0.1
|
||||
PATH_SEPARATOR = :
|
||||
RANLIB = ranlib
|
||||
SET_MAKE =
|
||||
SHELL = /bin/bash
|
||||
STRIP =
|
||||
VERSION = 0.0.1
|
||||
abs_builddir = /home/ziggi/Projects/helmet
|
||||
abs_srcdir = /home/ziggi/Projects/helmet
|
||||
abs_top_builddir = /home/ziggi/Projects/helmet
|
||||
abs_top_srcdir = /home/ziggi/Projects/helmet
|
||||
ac_ct_CC = gcc
|
||||
am__include = include
|
||||
am__leading_dot = .
|
||||
am__quote =
|
||||
am__tar = $${TAR-tar} chof - "$$tardir"
|
||||
am__untar = $${TAR-tar} xf -
|
||||
bindir = ${exec_prefix}/bin
|
||||
build_alias =
|
||||
builddir = .
|
||||
datadir = ${datarootdir}
|
||||
datarootdir = ${prefix}/share
|
||||
docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
|
||||
dvidir = ${docdir}
|
||||
exec_prefix = ${prefix}
|
||||
host_alias =
|
||||
htmldir = ${docdir}
|
||||
includedir = ${prefix}/include
|
||||
infodir = ${datarootdir}/info
|
||||
install_sh = ${SHELL} /home/ziggi/Projects/helmet/install-sh
|
||||
libdir = ${exec_prefix}/lib
|
||||
libexecdir = ${exec_prefix}/libexec
|
||||
localedir = ${datarootdir}/locale
|
||||
localstatedir = ${prefix}/var
|
||||
mandir = ${datarootdir}/man
|
||||
mkdir_p = $(MKDIR_P)
|
||||
oldincludedir = /usr/include
|
||||
pdfdir = ${docdir}
|
||||
prefix = /usr/local
|
||||
program_transform_name = s,x,x,
|
||||
psdir = ${docdir}
|
||||
runstatedir = ${localstatedir}/run
|
||||
sbindir = ${exec_prefix}/sbin
|
||||
sharedstatedir = ${prefix}/com
|
||||
srcdir = .
|
||||
sysconfdir = ${prefix}/etc
|
||||
target_alias =
|
||||
top_build_prefix =
|
||||
top_builddir = .
|
||||
top_srcdir = .
|
||||
AUTOMAKE_OPTIONS = foreign no-dependencies no-installinfo subdir-objects
|
||||
libxtools_NAME = libxtools.a
|
||||
libxasync_NAME = libxasync.a
|
||||
helmetd_SOURCES = helmetd.c \
|
||||
logger.c logger.h \
|
||||
server.c server.h
|
||||
|
||||
helmetd_LDADD = $(libxtools_NAME) $(libxasync_NAME)
|
||||
helmetctl_SOURCES = helmetctl.c \
|
||||
logger.c logger.h
|
||||
|
||||
helmetctl_LDADD = $(libxtools_NAME) $(libxasync_NAME)
|
||||
noinst_LIBRARIES = $(libxtools_NAME) $(libxasync_NAME)
|
||||
libxtools_a_SOURCES = \
|
||||
libxtools/bstream.c \
|
||||
libxtools/bstream.h \
|
||||
libxtools/galexer.c \
|
||||
libxtools/galexer.h \
|
||||
libxtools/gclexer.c \
|
||||
libxtools/gclexer.h \
|
||||
libxtools/massert.c \
|
||||
libxtools/massert.h \
|
||||
libxtools/tccomp.c \
|
||||
libxtools/tccomp.h \
|
||||
libxtools/tclexer.c \
|
||||
libxtools/tclexer.h \
|
||||
libxtools/tconfig.c \
|
||||
libxtools/tconfig.h \
|
||||
libxtools/vmapper.c \
|
||||
libxtools/vmapper.h
|
||||
|
||||
libxasync_a_SOURCES = \
|
||||
libxasync/waitgroup.c \
|
||||
libxasync/waitgroup.h
|
||||
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .c .o .obj
|
||||
am--refresh: Makefile
|
||||
@:
|
||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \
|
||||
$(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
|
||||
$(am__cd) $(top_srcdir) && \
|
||||
$(AUTOMAKE) --foreign Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
echo ' $(SHELL) ./config.status'; \
|
||||
$(SHELL) ./config.status;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
$(SHELL) ./config.status --recheck
|
||||
|
||||
$(top_srcdir)/configure: $(am__configure_deps)
|
||||
$(am__cd) $(srcdir) && $(AUTOCONF)
|
||||
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||
$(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
|
||||
$(am__aclocal_m4_deps):
|
||||
install-binPROGRAMS: $(bin_PROGRAMS)
|
||||
@$(NORMAL_INSTALL)
|
||||
@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
|
||||
if test -n "$$list"; then \
|
||||
echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
|
||||
$(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
|
||||
fi; \
|
||||
for p in $$list; do echo "$$p $$p"; done | \
|
||||
sed 's/$(EXEEXT)$$//' | \
|
||||
while read p p1; do if test -f $$p \
|
||||
; then echo "$$p"; echo "$$p"; else :; fi; \
|
||||
done | \
|
||||
sed -e 'p;s,.*/,,;n;h' \
|
||||
-e 's|.*|.|' \
|
||||
-e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
|
||||
sed 'N;N;N;s,\n, ,g' | \
|
||||
$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
|
||||
{ d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
|
||||
if ($$2 == $$4) files[d] = files[d] " " $$1; \
|
||||
else { print "f", $$3 "/" $$4, $$1; } } \
|
||||
END { for (d in files) print "f", d, files[d] }' | \
|
||||
while read type dir files; do \
|
||||
if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
|
||||
test -z "$$files" || { \
|
||||
echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
|
||||
$(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
|
||||
} \
|
||||
; done
|
||||
|
||||
uninstall-binPROGRAMS:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
|
||||
files=`for p in $$list; do echo "$$p"; done | \
|
||||
sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
|
||||
-e 's/$$/$(EXEEXT)/' \
|
||||
`; \
|
||||
test -n "$$list" || exit 0; \
|
||||
echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
|
||||
cd "$(DESTDIR)$(bindir)" && rm -f $$files
|
||||
|
||||
clean-binPROGRAMS:
|
||||
-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
|
||||
install-sbinPROGRAMS: $(sbin_PROGRAMS)
|
||||
@$(NORMAL_INSTALL)
|
||||
@list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \
|
||||
if test -n "$$list"; then \
|
||||
echo " $(MKDIR_P) '$(DESTDIR)$(sbindir)'"; \
|
||||
$(MKDIR_P) "$(DESTDIR)$(sbindir)" || exit 1; \
|
||||
fi; \
|
||||
for p in $$list; do echo "$$p $$p"; done | \
|
||||
sed 's/$(EXEEXT)$$//' | \
|
||||
while read p p1; do if test -f $$p \
|
||||
; then echo "$$p"; echo "$$p"; else :; fi; \
|
||||
done | \
|
||||
sed -e 'p;s,.*/,,;n;h' \
|
||||
-e 's|.*|.|' \
|
||||
-e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
|
||||
sed 'N;N;N;s,\n, ,g' | \
|
||||
$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
|
||||
{ d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
|
||||
if ($$2 == $$4) files[d] = files[d] " " $$1; \
|
||||
else { print "f", $$3 "/" $$4, $$1; } } \
|
||||
END { for (d in files) print "f", d, files[d] }' | \
|
||||
while read type dir files; do \
|
||||
if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
|
||||
test -z "$$files" || { \
|
||||
echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(sbindir)$$dir'"; \
|
||||
$(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(sbindir)$$dir" || exit $$?; \
|
||||
} \
|
||||
; done
|
||||
|
||||
uninstall-sbinPROGRAMS:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \
|
||||
files=`for p in $$list; do echo "$$p"; done | \
|
||||
sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
|
||||
-e 's/$$/$(EXEEXT)/' \
|
||||
`; \
|
||||
test -n "$$list" || exit 0; \
|
||||
echo " ( cd '$(DESTDIR)$(sbindir)' && rm -f" $$files ")"; \
|
||||
cd "$(DESTDIR)$(sbindir)" && rm -f $$files
|
||||
|
||||
clean-sbinPROGRAMS:
|
||||
-test -z "$(sbin_PROGRAMS)" || rm -f $(sbin_PROGRAMS)
|
||||
|
||||
clean-noinstLIBRARIES:
|
||||
-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
|
||||
libxasync/$(am__dirstamp):
|
||||
@$(MKDIR_P) libxasync
|
||||
@: > libxasync/$(am__dirstamp)
|
||||
libxasync/waitgroup.$(OBJEXT): libxasync/$(am__dirstamp)
|
||||
|
||||
libxasync.a: $(libxasync_a_OBJECTS) $(libxasync_a_DEPENDENCIES) $(EXTRA_libxasync_a_DEPENDENCIES)
|
||||
$(AM_V_at)-rm -f libxasync.a
|
||||
$(AM_V_AR)$(libxasync_a_AR) libxasync.a $(libxasync_a_OBJECTS) $(libxasync_a_LIBADD)
|
||||
$(AM_V_at)$(RANLIB) libxasync.a
|
||||
libxtools/$(am__dirstamp):
|
||||
@$(MKDIR_P) libxtools
|
||||
@: > libxtools/$(am__dirstamp)
|
||||
libxtools/bstream.$(OBJEXT): libxtools/$(am__dirstamp)
|
||||
libxtools/galexer.$(OBJEXT): libxtools/$(am__dirstamp)
|
||||
libxtools/gclexer.$(OBJEXT): libxtools/$(am__dirstamp)
|
||||
libxtools/massert.$(OBJEXT): libxtools/$(am__dirstamp)
|
||||
libxtools/tccomp.$(OBJEXT): libxtools/$(am__dirstamp)
|
||||
libxtools/tclexer.$(OBJEXT): libxtools/$(am__dirstamp)
|
||||
libxtools/tconfig.$(OBJEXT): libxtools/$(am__dirstamp)
|
||||
libxtools/vmapper.$(OBJEXT): libxtools/$(am__dirstamp)
|
||||
|
||||
libxtools.a: $(libxtools_a_OBJECTS) $(libxtools_a_DEPENDENCIES) $(EXTRA_libxtools_a_DEPENDENCIES)
|
||||
$(AM_V_at)-rm -f libxtools.a
|
||||
$(AM_V_AR)$(libxtools_a_AR) libxtools.a $(libxtools_a_OBJECTS) $(libxtools_a_LIBADD)
|
||||
$(AM_V_at)$(RANLIB) libxtools.a
|
||||
|
||||
helmetctl$(EXEEXT): $(helmetctl_OBJECTS) $(helmetctl_DEPENDENCIES) $(EXTRA_helmetctl_DEPENDENCIES)
|
||||
@rm -f helmetctl$(EXEEXT)
|
||||
$(AM_V_CCLD)$(LINK) $(helmetctl_OBJECTS) $(helmetctl_LDADD) $(LIBS)
|
||||
|
||||
helmetd$(EXEEXT): $(helmetd_OBJECTS) $(helmetd_DEPENDENCIES) $(EXTRA_helmetd_DEPENDENCIES)
|
||||
@rm -f helmetd$(EXEEXT)
|
||||
$(AM_V_CCLD)$(LINK) $(helmetd_OBJECTS) $(helmetd_LDADD) $(LIBS)
|
||||
|
||||
mostlyclean-compile:
|
||||
-rm -f *.$(OBJEXT)
|
||||
-rm -f libxasync/*.$(OBJEXT)
|
||||
-rm -f libxtools/*.$(OBJEXT)
|
||||
|
||||
distclean-compile:
|
||||
-rm -f *.tab.c
|
||||
|
||||
.c.o:
|
||||
$(AM_V_CC)$(COMPILE) -c -o $@ $<
|
||||
|
||||
.c.obj:
|
||||
$(AM_V_CC)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
|
||||
|
||||
ID: $(am__tagged_files)
|
||||
$(am__define_uniq_tagged_files); mkid -fID $$unique
|
||||
tags: tags-am
|
||||
TAGS: tags
|
||||
|
||||
tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
|
||||
set x; \
|
||||
here=`pwd`; \
|
||||
$(am__define_uniq_tagged_files); \
|
||||
shift; \
|
||||
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
if test $$# -gt 0; then \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
"$$@" $$unique; \
|
||||
else \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$unique; \
|
||||
fi; \
|
||||
fi
|
||||
ctags: ctags-am
|
||||
|
||||
CTAGS: ctags
|
||||
ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
|
||||
$(am__define_uniq_tagged_files); \
|
||||
test -z "$(CTAGS_ARGS)$$unique" \
|
||||
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
||||
$$unique
|
||||
|
||||
GTAGS:
|
||||
here=`$(am__cd) $(top_builddir) && pwd` \
|
||||
&& $(am__cd) $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) "$$here"
|
||||
cscope: cscope.files
|
||||
test ! -s cscope.files \
|
||||
|| $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS)
|
||||
clean-cscope:
|
||||
-rm -f cscope.files
|
||||
cscope.files: clean-cscope cscopelist
|
||||
cscopelist: cscopelist-am
|
||||
|
||||
cscopelist-am: $(am__tagged_files)
|
||||
list='$(am__tagged_files)'; \
|
||||
case "$(srcdir)" in \
|
||||
[\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
|
||||
*) sdir=$(subdir)/$(srcdir) ;; \
|
||||
esac; \
|
||||
for i in $$list; do \
|
||||
if test -f "$$i"; then \
|
||||
echo "$(subdir)/$$i"; \
|
||||
else \
|
||||
echo "$$sdir/$$i"; \
|
||||
fi; \
|
||||
done >> $(top_builddir)/cscope.files
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
-rm -f cscope.out cscope.in.out cscope.po.out cscope.files
|
||||
distdir: $(BUILT_SOURCES)
|
||||
$(MAKE) $(AM_MAKEFLAGS) distdir-am
|
||||
|
||||
distdir-am: $(DISTFILES)
|
||||
$(am__remove_distdir)
|
||||
test -d "$(distdir)" || mkdir "$(distdir)"
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
list='$(DISTFILES)'; \
|
||||
dist_files=`for file in $$list; do echo $$file; done | \
|
||||
sed -e "s|^$$srcdirstrip/||;t" \
|
||||
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
|
||||
case $$dist_files in \
|
||||
*/*) $(MKDIR_P) `echo "$$dist_files" | \
|
||||
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
|
||||
sort -u` ;; \
|
||||
esac; \
|
||||
for file in $$dist_files; do \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test -d "$(distdir)/$$file"; then \
|
||||
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
|
||||
fi; \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
|
||||
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
|
||||
fi; \
|
||||
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
|
||||
else \
|
||||
test -f "$(distdir)/$$file" \
|
||||
|| cp -p $$d/$$file "$(distdir)/$$file" \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
-test -n "$(am__skip_mode_fix)" \
|
||||
|| find "$(distdir)" -type d ! -perm -755 \
|
||||
-exec chmod u+rwx,go+rx {} \; -o \
|
||||
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
|
||||
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
|
||||
! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
|
||||
|| chmod -R a+r "$(distdir)"
|
||||
dist-gzip: distdir
|
||||
tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz
|
||||
$(am__post_remove_distdir)
|
||||
|
||||
dist-bzip2: distdir
|
||||
tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
|
||||
$(am__post_remove_distdir)
|
||||
|
||||
dist-lzip: distdir
|
||||
tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
|
||||
$(am__post_remove_distdir)
|
||||
|
||||
dist-xz: distdir
|
||||
tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
|
||||
$(am__post_remove_distdir)
|
||||
|
||||
dist-zstd: distdir
|
||||
tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst
|
||||
$(am__post_remove_distdir)
|
||||
|
||||
dist-tarZ: distdir
|
||||
@echo WARNING: "Support for distribution archives compressed with" \
|
||||
"legacy program 'compress' is deprecated." >&2
|
||||
@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
|
||||
tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
|
||||
$(am__post_remove_distdir)
|
||||
|
||||
dist-shar: distdir
|
||||
@echo WARNING: "Support for shar distribution archives is" \
|
||||
"deprecated." >&2
|
||||
@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
|
||||
shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz
|
||||
$(am__post_remove_distdir)
|
||||
|
||||
dist-zip: distdir
|
||||
-rm -f $(distdir).zip
|
||||
zip -rq $(distdir).zip $(distdir)
|
||||
$(am__post_remove_distdir)
|
||||
|
||||
dist dist-all:
|
||||
$(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:'
|
||||
$(am__post_remove_distdir)
|
||||
|
||||
# This target untars the dist file and tries a VPATH configuration. Then
|
||||
# it guarantees that the distribution is self-contained by making another
|
||||
# tarfile.
|
||||
distcheck: dist
|
||||
case '$(DIST_ARCHIVES)' in \
|
||||
*.tar.gz*) \
|
||||
eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\
|
||||
*.tar.bz2*) \
|
||||
bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
|
||||
*.tar.lz*) \
|
||||
lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
|
||||
*.tar.xz*) \
|
||||
xz -dc $(distdir).tar.xz | $(am__untar) ;;\
|
||||
*.tar.Z*) \
|
||||
uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
|
||||
*.shar.gz*) \
|
||||
eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\
|
||||
*.zip*) \
|
||||
unzip $(distdir).zip ;;\
|
||||
*.tar.zst*) \
|
||||
zstd -dc $(distdir).tar.zst | $(am__untar) ;;\
|
||||
esac
|
||||
chmod -R a-w $(distdir)
|
||||
chmod u+w $(distdir)
|
||||
mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst
|
||||
chmod a-w $(distdir)
|
||||
test -d $(distdir)/_build || exit 0; \
|
||||
dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
|
||||
&& dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
|
||||
&& am__cwd=`pwd` \
|
||||
&& $(am__cd) $(distdir)/_build/sub \
|
||||
&& ../../configure \
|
||||
$(AM_DISTCHECK_CONFIGURE_FLAGS) \
|
||||
$(DISTCHECK_CONFIGURE_FLAGS) \
|
||||
--srcdir=../.. --prefix="$$dc_install_base" \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) $(AM_DISTCHECK_DVI_TARGET) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) check \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) install \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) uninstall \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
|
||||
distuninstallcheck \
|
||||
&& chmod -R a-w "$$dc_install_base" \
|
||||
&& ({ \
|
||||
(cd ../.. && umask 077 && mkdir "$$dc_destdir") \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
|
||||
distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
|
||||
} || { rm -rf "$$dc_destdir"; exit 1; }) \
|
||||
&& rm -rf "$$dc_destdir" \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) dist \
|
||||
&& rm -rf $(DIST_ARCHIVES) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
|
||||
&& cd "$$am__cwd" \
|
||||
|| exit 1
|
||||
$(am__post_remove_distdir)
|
||||
@(echo "$(distdir) archives ready for distribution: "; \
|
||||
list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
|
||||
sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
|
||||
distuninstallcheck:
|
||||
@test -n '$(distuninstallcheck_dir)' || { \
|
||||
echo 'ERROR: trying to run $@ with an empty' \
|
||||
'$$(distuninstallcheck_dir)' >&2; \
|
||||
exit 1; \
|
||||
}; \
|
||||
$(am__cd) '$(distuninstallcheck_dir)' || { \
|
||||
echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \
|
||||
exit 1; \
|
||||
}; \
|
||||
test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \
|
||||
|| { echo "ERROR: files left after uninstall:" ; \
|
||||
if test -n "$(DESTDIR)"; then \
|
||||
echo " (check DESTDIR support)"; \
|
||||
fi ; \
|
||||
$(distuninstallcheck_listfiles) ; \
|
||||
exit 1; } >&2
|
||||
distcleancheck: distclean
|
||||
@if test '$(srcdir)' = . ; then \
|
||||
echo "ERROR: distcleancheck can only run from a VPATH build" ; \
|
||||
exit 1 ; \
|
||||
fi
|
||||
@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
|
||||
|| { echo "ERROR: files left in build directory after distclean:" ; \
|
||||
$(distcleancheck_listfiles) ; \
|
||||
exit 1; } >&2
|
||||
check-am: all-am
|
||||
check: check-am
|
||||
all-am: Makefile $(PROGRAMS) $(LIBRARIES)
|
||||
installdirs:
|
||||
for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sbindir)"; do \
|
||||
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
|
||||
done
|
||||
install: install-am
|
||||
install-exec: install-exec-am
|
||||
install-data: install-data-am
|
||||
uninstall: uninstall-am
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-am
|
||||
install-strip:
|
||||
if test -z '$(STRIP)'; then \
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
install; \
|
||||
else \
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
|
||||
fi
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
|
||||
-rm -f libxasync/$(am__dirstamp)
|
||||
-rm -f libxtools/$(am__dirstamp)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-am
|
||||
|
||||
clean-am: clean-binPROGRAMS clean-generic clean-local \
|
||||
clean-noinstLIBRARIES clean-sbinPROGRAMS mostlyclean-am
|
||||
|
||||
distclean: distclean-am
|
||||
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-compile distclean-generic \
|
||||
distclean-tags
|
||||
|
||||
dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-am
|
||||
|
||||
html-am:
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am:
|
||||
|
||||
install-dvi: install-dvi-am
|
||||
|
||||
install-dvi-am:
|
||||
|
||||
install-exec-am: install-binPROGRAMS install-sbinPROGRAMS
|
||||
|
||||
install-html: install-html-am
|
||||
|
||||
install-html-am:
|
||||
|
||||
install-info: install-info-am
|
||||
|
||||
install-info-am:
|
||||
|
||||
install-man:
|
||||
|
||||
install-pdf: install-pdf-am
|
||||
|
||||
install-pdf-am:
|
||||
|
||||
install-ps: install-ps-am
|
||||
|
||||
install-ps-am:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-am
|
||||
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
|
||||
-rm -rf $(top_srcdir)/autom4te.cache
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
mostlyclean-am: mostlyclean-compile mostlyclean-generic
|
||||
|
||||
pdf: pdf-am
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-am
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am: uninstall-binPROGRAMS uninstall-sbinPROGRAMS
|
||||
|
||||
.MAKE: install-am install-strip
|
||||
|
||||
.PHONY: CTAGS GTAGS TAGS all all-am am--refresh check check-am clean \
|
||||
clean-binPROGRAMS clean-cscope clean-generic clean-local \
|
||||
clean-noinstLIBRARIES clean-sbinPROGRAMS cscope cscopelist-am \
|
||||
ctags ctags-am dist dist-all dist-bzip2 dist-gzip dist-lzip \
|
||||
dist-shar dist-tarZ dist-xz dist-zip dist-zstd distcheck \
|
||||
distclean distclean-compile distclean-generic distclean-tags \
|
||||
distcleancheck distdir distuninstallcheck dvi dvi-am html \
|
||||
html-am info info-am install install-am install-binPROGRAMS \
|
||||
install-data install-data-am install-dvi install-dvi-am \
|
||||
install-exec install-exec-am install-html install-html-am \
|
||||
install-info install-info-am install-man install-pdf \
|
||||
install-pdf-am install-ps install-ps-am install-sbinPROGRAMS \
|
||||
install-strip installcheck installcheck-am installdirs \
|
||||
maintainer-clean maintainer-clean-generic mostlyclean \
|
||||
mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \
|
||||
tags tags-am uninstall uninstall-am uninstall-binPROGRAMS \
|
||||
uninstall-sbinPROGRAMS
|
||||
|
||||
.PRECIOUS: Makefile
|
||||
|
||||
|
||||
test: helmetctl
|
||||
./helmetctl
|
||||
|
||||
clean-local:
|
||||
rm -f *~
|
||||
rm -rf autom4te.cache
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
||||
+52
@@ -0,0 +1,52 @@
|
||||
|
||||
AUTOMAKE_OPTIONS = foreign no-dependencies no-installinfo subdir-objects
|
||||
|
||||
libxtools_NAME = libxtools.a
|
||||
libxasync_NAME = libxasync.a
|
||||
|
||||
CFLAGS += -std=c99 -Wall -I. -I ./libxasync -I ./libxtools
|
||||
|
||||
sbin_PROGRAMS = helmetd
|
||||
bin_PROGRAMS = helmetctl
|
||||
|
||||
|
||||
helmetd_SOURCES = helmetd.c \
|
||||
logger.c logger.h \
|
||||
server.c server.h
|
||||
helmetd_LDADD = $(libxtools_NAME) $(libxasync_NAME)
|
||||
|
||||
helmetctl_SOURCES = helmetctl.c \
|
||||
logger.c logger.h
|
||||
|
||||
helmetctl_LDADD = $(libxtools_NAME) $(libxasync_NAME)
|
||||
|
||||
noinst_LIBRARIES = $(libxtools_NAME) $(libxasync_NAME)
|
||||
|
||||
libxtools_a_SOURCES = \
|
||||
libxtools/bstream.c \
|
||||
libxtools/bstream.h \
|
||||
libxtools/galexer.c \
|
||||
libxtools/galexer.h \
|
||||
libxtools/gclexer.c \
|
||||
libxtools/gclexer.h \
|
||||
libxtools/massert.c \
|
||||
libxtools/massert.h \
|
||||
libxtools/tccomp.c \
|
||||
libxtools/tccomp.h \
|
||||
libxtools/tclexer.c \
|
||||
libxtools/tclexer.h \
|
||||
libxtools/tconfig.c \
|
||||
libxtools/tconfig.h \
|
||||
libxtools/vmapper.c \
|
||||
libxtools/vmapper.h
|
||||
|
||||
libxasync_a_SOURCES = \
|
||||
libxasync/waitgroup.c \
|
||||
libxasync/waitgroup.h
|
||||
|
||||
test: helmetctl
|
||||
./helmetctl
|
||||
|
||||
clean-local:
|
||||
rm -f *~
|
||||
rm -rf autom4te.cache
|
||||
+875
@@ -0,0 +1,875 @@
|
||||
# Makefile.in generated by automake 1.16.5 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994-2021 Free Software Foundation, Inc.
|
||||
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
@SET_MAKE@
|
||||
|
||||
|
||||
VPATH = @srcdir@
|
||||
am__is_gnu_make = { \
|
||||
if test -z '$(MAKELEVEL)'; then \
|
||||
false; \
|
||||
elif test -n '$(MAKE_HOST)'; then \
|
||||
true; \
|
||||
elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
|
||||
true; \
|
||||
else \
|
||||
false; \
|
||||
fi; \
|
||||
}
|
||||
am__make_running_with_option = \
|
||||
case $${target_option-} in \
|
||||
?) ;; \
|
||||
*) echo "am__make_running_with_option: internal error: invalid" \
|
||||
"target option '$${target_option-}' specified" >&2; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
has_opt=no; \
|
||||
sane_makeflags=$$MAKEFLAGS; \
|
||||
if $(am__is_gnu_make); then \
|
||||
sane_makeflags=$$MFLAGS; \
|
||||
else \
|
||||
case $$MAKEFLAGS in \
|
||||
*\\[\ \ ]*) \
|
||||
bs=\\; \
|
||||
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
|
||||
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
|
||||
esac; \
|
||||
fi; \
|
||||
skip_next=no; \
|
||||
strip_trailopt () \
|
||||
{ \
|
||||
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
|
||||
}; \
|
||||
for flg in $$sane_makeflags; do \
|
||||
test $$skip_next = yes && { skip_next=no; continue; }; \
|
||||
case $$flg in \
|
||||
*=*|--*) continue;; \
|
||||
-*I) strip_trailopt 'I'; skip_next=yes;; \
|
||||
-*I?*) strip_trailopt 'I';; \
|
||||
-*O) strip_trailopt 'O'; skip_next=yes;; \
|
||||
-*O?*) strip_trailopt 'O';; \
|
||||
-*l) strip_trailopt 'l'; skip_next=yes;; \
|
||||
-*l?*) strip_trailopt 'l';; \
|
||||
-[dEDm]) skip_next=yes;; \
|
||||
-[JT]) skip_next=yes;; \
|
||||
esac; \
|
||||
case $$flg in \
|
||||
*$$target_option*) has_opt=yes; break;; \
|
||||
esac; \
|
||||
done; \
|
||||
test $$has_opt = yes
|
||||
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
|
||||
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkglibexecdir = $(libexecdir)/@PACKAGE@
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
sbin_PROGRAMS = helmetd$(EXEEXT)
|
||||
bin_PROGRAMS = helmetctl$(EXEEXT)
|
||||
subdir = .
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \
|
||||
$(am__configure_deps) $(am__DIST_COMMON)
|
||||
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
|
||||
configure.lineno config.status.lineno
|
||||
mkinstalldirs = $(install_sh) -d
|
||||
CONFIG_CLEAN_FILES =
|
||||
CONFIG_CLEAN_VPATH_FILES =
|
||||
am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sbindir)"
|
||||
PROGRAMS = $(bin_PROGRAMS) $(sbin_PROGRAMS)
|
||||
LIBRARIES = $(noinst_LIBRARIES)
|
||||
AR = ar
|
||||
ARFLAGS = cru
|
||||
AM_V_AR = $(am__v_AR_@AM_V@)
|
||||
am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@)
|
||||
am__v_AR_0 = @echo " AR " $@;
|
||||
am__v_AR_1 =
|
||||
libxasync_a_AR = $(AR) $(ARFLAGS)
|
||||
libxasync_a_LIBADD =
|
||||
am__dirstamp = $(am__leading_dot)dirstamp
|
||||
am_libxasync_a_OBJECTS = libxasync/waitgroup.$(OBJEXT)
|
||||
libxasync_a_OBJECTS = $(am_libxasync_a_OBJECTS)
|
||||
libxtools_a_AR = $(AR) $(ARFLAGS)
|
||||
libxtools_a_LIBADD =
|
||||
am_libxtools_a_OBJECTS = libxtools/bstream.$(OBJEXT) \
|
||||
libxtools/galexer.$(OBJEXT) libxtools/gclexer.$(OBJEXT) \
|
||||
libxtools/massert.$(OBJEXT) libxtools/tccomp.$(OBJEXT) \
|
||||
libxtools/tclexer.$(OBJEXT) libxtools/tconfig.$(OBJEXT) \
|
||||
libxtools/vmapper.$(OBJEXT)
|
||||
libxtools_a_OBJECTS = $(am_libxtools_a_OBJECTS)
|
||||
am_helmetctl_OBJECTS = helmetctl.$(OBJEXT) logger.$(OBJEXT)
|
||||
helmetctl_OBJECTS = $(am_helmetctl_OBJECTS)
|
||||
helmetctl_DEPENDENCIES = $(libxtools_NAME) $(libxasync_NAME)
|
||||
am_helmetd_OBJECTS = helmetd.$(OBJEXT) logger.$(OBJEXT) \
|
||||
server.$(OBJEXT)
|
||||
helmetd_OBJECTS = $(am_helmetd_OBJECTS)
|
||||
helmetd_DEPENDENCIES = $(libxtools_NAME) $(libxasync_NAME)
|
||||
AM_V_P = $(am__v_P_@AM_V@)
|
||||
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
|
||||
am__v_P_0 = false
|
||||
am__v_P_1 = :
|
||||
AM_V_GEN = $(am__v_GEN_@AM_V@)
|
||||
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
|
||||
am__v_GEN_0 = @echo " GEN " $@;
|
||||
am__v_GEN_1 =
|
||||
AM_V_at = $(am__v_at_@AM_V@)
|
||||
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
|
||||
am__v_at_0 = @
|
||||
am__v_at_1 =
|
||||
DEFAULT_INCLUDES = -I.@am__isrc@
|
||||
depcomp =
|
||||
am__maybe_remake_depfiles =
|
||||
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
||||
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||
AM_V_CC = $(am__v_CC_@AM_V@)
|
||||
am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
|
||||
am__v_CC_0 = @echo " CC " $@;
|
||||
am__v_CC_1 =
|
||||
CCLD = $(CC)
|
||||
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
|
||||
AM_V_CCLD = $(am__v_CCLD_@AM_V@)
|
||||
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
|
||||
am__v_CCLD_0 = @echo " CCLD " $@;
|
||||
am__v_CCLD_1 =
|
||||
SOURCES = $(libxasync_a_SOURCES) $(libxtools_a_SOURCES) \
|
||||
$(helmetctl_SOURCES) $(helmetd_SOURCES)
|
||||
DIST_SOURCES = $(libxasync_a_SOURCES) $(libxtools_a_SOURCES) \
|
||||
$(helmetctl_SOURCES) $(helmetd_SOURCES)
|
||||
am__can_run_installinfo = \
|
||||
case $$AM_UPDATE_INFO_DIR in \
|
||||
n|no|NO) false;; \
|
||||
*) (install-info --version) >/dev/null 2>&1;; \
|
||||
esac
|
||||
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
|
||||
# Read a list of newline-separated strings from the standard input,
|
||||
# and print each of them once, without duplicates. Input order is
|
||||
# *not* preserved.
|
||||
am__uniquify_input = $(AWK) '\
|
||||
BEGIN { nonempty = 0; } \
|
||||
{ items[$$0] = 1; nonempty = 1; } \
|
||||
END { if (nonempty) { for (i in items) print i; }; } \
|
||||
'
|
||||
# Make sure the list of sources is unique. This is necessary because,
|
||||
# e.g., the same source file might be shared among _SOURCES variables
|
||||
# for different programs/libraries.
|
||||
am__define_uniq_tagged_files = \
|
||||
list='$(am__tagged_files)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | $(am__uniquify_input)`
|
||||
AM_RECURSIVE_TARGETS = cscope
|
||||
am__DIST_COMMON = $(srcdir)/Makefile.in compile install-sh missing
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
distdir = $(PACKAGE)-$(VERSION)
|
||||
top_distdir = $(distdir)
|
||||
am__remove_distdir = \
|
||||
if test -d "$(distdir)"; then \
|
||||
find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
|
||||
&& rm -rf "$(distdir)" \
|
||||
|| { sleep 5 && rm -rf "$(distdir)"; }; \
|
||||
else :; fi
|
||||
am__post_remove_distdir = $(am__remove_distdir)
|
||||
DIST_ARCHIVES = $(distdir).tar.gz
|
||||
GZIP_ENV = --best
|
||||
DIST_TARGETS = dist-gzip
|
||||
# Exists only to be overridden by the user if desired.
|
||||
AM_DISTCHECK_DVI_TARGET = dvi
|
||||
distuninstallcheck_listfiles = find . -type f -print
|
||||
am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
|
||||
| sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
|
||||
distcleancheck_listfiles = find . -type f -print
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AMTAR = @AMTAR@
|
||||
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
CFLAGS = @CFLAGS@ -std=c99 -Wall -I. -I ./libxasync -I ./libxtools
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CSCOPE = @CSCOPE@
|
||||
CTAGS = @CTAGS@
|
||||
CYGPATH_W = @CYGPATH_W@
|
||||
DEFS = @DEFS@
|
||||
DEPDIR = @DEPDIR@
|
||||
ECHO_C = @ECHO_C@
|
||||
ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
ETAGS = @ETAGS@
|
||||
EXEEXT = @EXEEXT@
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
MKDIR_P = @MKDIR_P@
|
||||
OBJEXT = @OBJEXT@
|
||||
PACKAGE = @PACKAGE@
|
||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||
PACKAGE_NAME = @PACKAGE_NAME@
|
||||
PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_URL = @PACKAGE_URL@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
RANLIB = @RANLIB@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
STRIP = @STRIP@
|
||||
VERSION = @VERSION@
|
||||
abs_builddir = @abs_builddir@
|
||||
abs_srcdir = @abs_srcdir@
|
||||
abs_top_builddir = @abs_top_builddir@
|
||||
abs_top_srcdir = @abs_top_srcdir@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build_alias = @build_alias@
|
||||
builddir = @builddir@
|
||||
datadir = @datadir@
|
||||
datarootdir = @datarootdir@
|
||||
docdir = @docdir@
|
||||
dvidir = @dvidir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host_alias = @host_alias@
|
||||
htmldir = @htmldir@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localedir = @localedir@
|
||||
localstatedir = @localstatedir@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
oldincludedir = @oldincludedir@
|
||||
pdfdir = @pdfdir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
psdir = @psdir@
|
||||
runstatedir = @runstatedir@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
srcdir = @srcdir@
|
||||
sysconfdir = @sysconfdir@
|
||||
target_alias = @target_alias@
|
||||
top_build_prefix = @top_build_prefix@
|
||||
top_builddir = @top_builddir@
|
||||
top_srcdir = @top_srcdir@
|
||||
AUTOMAKE_OPTIONS = foreign no-dependencies no-installinfo subdir-objects
|
||||
libxtools_NAME = libxtools.a
|
||||
libxasync_NAME = libxasync.a
|
||||
helmetd_SOURCES = helmetd.c \
|
||||
logger.c logger.h \
|
||||
server.c server.h
|
||||
|
||||
helmetd_LDADD = $(libxtools_NAME) $(libxasync_NAME)
|
||||
helmetctl_SOURCES = helmetctl.c \
|
||||
logger.c logger.h
|
||||
|
||||
helmetctl_LDADD = $(libxtools_NAME) $(libxasync_NAME)
|
||||
noinst_LIBRARIES = $(libxtools_NAME) $(libxasync_NAME)
|
||||
libxtools_a_SOURCES = \
|
||||
libxtools/bstream.c \
|
||||
libxtools/bstream.h \
|
||||
libxtools/galexer.c \
|
||||
libxtools/galexer.h \
|
||||
libxtools/gclexer.c \
|
||||
libxtools/gclexer.h \
|
||||
libxtools/massert.c \
|
||||
libxtools/massert.h \
|
||||
libxtools/tccomp.c \
|
||||
libxtools/tccomp.h \
|
||||
libxtools/tclexer.c \
|
||||
libxtools/tclexer.h \
|
||||
libxtools/tconfig.c \
|
||||
libxtools/tconfig.h \
|
||||
libxtools/vmapper.c \
|
||||
libxtools/vmapper.h
|
||||
|
||||
libxasync_a_SOURCES = \
|
||||
libxasync/waitgroup.c \
|
||||
libxasync/waitgroup.h
|
||||
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .c .o .obj
|
||||
am--refresh: Makefile
|
||||
@:
|
||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \
|
||||
$(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
|
||||
$(am__cd) $(top_srcdir) && \
|
||||
$(AUTOMAKE) --foreign Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
echo ' $(SHELL) ./config.status'; \
|
||||
$(SHELL) ./config.status;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
$(SHELL) ./config.status --recheck
|
||||
|
||||
$(top_srcdir)/configure: $(am__configure_deps)
|
||||
$(am__cd) $(srcdir) && $(AUTOCONF)
|
||||
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||
$(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
|
||||
$(am__aclocal_m4_deps):
|
||||
install-binPROGRAMS: $(bin_PROGRAMS)
|
||||
@$(NORMAL_INSTALL)
|
||||
@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
|
||||
if test -n "$$list"; then \
|
||||
echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
|
||||
$(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
|
||||
fi; \
|
||||
for p in $$list; do echo "$$p $$p"; done | \
|
||||
sed 's/$(EXEEXT)$$//' | \
|
||||
while read p p1; do if test -f $$p \
|
||||
; then echo "$$p"; echo "$$p"; else :; fi; \
|
||||
done | \
|
||||
sed -e 'p;s,.*/,,;n;h' \
|
||||
-e 's|.*|.|' \
|
||||
-e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
|
||||
sed 'N;N;N;s,\n, ,g' | \
|
||||
$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
|
||||
{ d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
|
||||
if ($$2 == $$4) files[d] = files[d] " " $$1; \
|
||||
else { print "f", $$3 "/" $$4, $$1; } } \
|
||||
END { for (d in files) print "f", d, files[d] }' | \
|
||||
while read type dir files; do \
|
||||
if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
|
||||
test -z "$$files" || { \
|
||||
echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
|
||||
$(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
|
||||
} \
|
||||
; done
|
||||
|
||||
uninstall-binPROGRAMS:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
|
||||
files=`for p in $$list; do echo "$$p"; done | \
|
||||
sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
|
||||
-e 's/$$/$(EXEEXT)/' \
|
||||
`; \
|
||||
test -n "$$list" || exit 0; \
|
||||
echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
|
||||
cd "$(DESTDIR)$(bindir)" && rm -f $$files
|
||||
|
||||
clean-binPROGRAMS:
|
||||
-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
|
||||
install-sbinPROGRAMS: $(sbin_PROGRAMS)
|
||||
@$(NORMAL_INSTALL)
|
||||
@list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \
|
||||
if test -n "$$list"; then \
|
||||
echo " $(MKDIR_P) '$(DESTDIR)$(sbindir)'"; \
|
||||
$(MKDIR_P) "$(DESTDIR)$(sbindir)" || exit 1; \
|
||||
fi; \
|
||||
for p in $$list; do echo "$$p $$p"; done | \
|
||||
sed 's/$(EXEEXT)$$//' | \
|
||||
while read p p1; do if test -f $$p \
|
||||
; then echo "$$p"; echo "$$p"; else :; fi; \
|
||||
done | \
|
||||
sed -e 'p;s,.*/,,;n;h' \
|
||||
-e 's|.*|.|' \
|
||||
-e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
|
||||
sed 'N;N;N;s,\n, ,g' | \
|
||||
$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
|
||||
{ d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
|
||||
if ($$2 == $$4) files[d] = files[d] " " $$1; \
|
||||
else { print "f", $$3 "/" $$4, $$1; } } \
|
||||
END { for (d in files) print "f", d, files[d] }' | \
|
||||
while read type dir files; do \
|
||||
if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
|
||||
test -z "$$files" || { \
|
||||
echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(sbindir)$$dir'"; \
|
||||
$(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(sbindir)$$dir" || exit $$?; \
|
||||
} \
|
||||
; done
|
||||
|
||||
uninstall-sbinPROGRAMS:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \
|
||||
files=`for p in $$list; do echo "$$p"; done | \
|
||||
sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
|
||||
-e 's/$$/$(EXEEXT)/' \
|
||||
`; \
|
||||
test -n "$$list" || exit 0; \
|
||||
echo " ( cd '$(DESTDIR)$(sbindir)' && rm -f" $$files ")"; \
|
||||
cd "$(DESTDIR)$(sbindir)" && rm -f $$files
|
||||
|
||||
clean-sbinPROGRAMS:
|
||||
-test -z "$(sbin_PROGRAMS)" || rm -f $(sbin_PROGRAMS)
|
||||
|
||||
clean-noinstLIBRARIES:
|
||||
-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
|
||||
libxasync/$(am__dirstamp):
|
||||
@$(MKDIR_P) libxasync
|
||||
@: > libxasync/$(am__dirstamp)
|
||||
libxasync/waitgroup.$(OBJEXT): libxasync/$(am__dirstamp)
|
||||
|
||||
libxasync.a: $(libxasync_a_OBJECTS) $(libxasync_a_DEPENDENCIES) $(EXTRA_libxasync_a_DEPENDENCIES)
|
||||
$(AM_V_at)-rm -f libxasync.a
|
||||
$(AM_V_AR)$(libxasync_a_AR) libxasync.a $(libxasync_a_OBJECTS) $(libxasync_a_LIBADD)
|
||||
$(AM_V_at)$(RANLIB) libxasync.a
|
||||
libxtools/$(am__dirstamp):
|
||||
@$(MKDIR_P) libxtools
|
||||
@: > libxtools/$(am__dirstamp)
|
||||
libxtools/bstream.$(OBJEXT): libxtools/$(am__dirstamp)
|
||||
libxtools/galexer.$(OBJEXT): libxtools/$(am__dirstamp)
|
||||
libxtools/gclexer.$(OBJEXT): libxtools/$(am__dirstamp)
|
||||
libxtools/massert.$(OBJEXT): libxtools/$(am__dirstamp)
|
||||
libxtools/tccomp.$(OBJEXT): libxtools/$(am__dirstamp)
|
||||
libxtools/tclexer.$(OBJEXT): libxtools/$(am__dirstamp)
|
||||
libxtools/tconfig.$(OBJEXT): libxtools/$(am__dirstamp)
|
||||
libxtools/vmapper.$(OBJEXT): libxtools/$(am__dirstamp)
|
||||
|
||||
libxtools.a: $(libxtools_a_OBJECTS) $(libxtools_a_DEPENDENCIES) $(EXTRA_libxtools_a_DEPENDENCIES)
|
||||
$(AM_V_at)-rm -f libxtools.a
|
||||
$(AM_V_AR)$(libxtools_a_AR) libxtools.a $(libxtools_a_OBJECTS) $(libxtools_a_LIBADD)
|
||||
$(AM_V_at)$(RANLIB) libxtools.a
|
||||
|
||||
helmetctl$(EXEEXT): $(helmetctl_OBJECTS) $(helmetctl_DEPENDENCIES) $(EXTRA_helmetctl_DEPENDENCIES)
|
||||
@rm -f helmetctl$(EXEEXT)
|
||||
$(AM_V_CCLD)$(LINK) $(helmetctl_OBJECTS) $(helmetctl_LDADD) $(LIBS)
|
||||
|
||||
helmetd$(EXEEXT): $(helmetd_OBJECTS) $(helmetd_DEPENDENCIES) $(EXTRA_helmetd_DEPENDENCIES)
|
||||
@rm -f helmetd$(EXEEXT)
|
||||
$(AM_V_CCLD)$(LINK) $(helmetd_OBJECTS) $(helmetd_LDADD) $(LIBS)
|
||||
|
||||
mostlyclean-compile:
|
||||
-rm -f *.$(OBJEXT)
|
||||
-rm -f libxasync/*.$(OBJEXT)
|
||||
-rm -f libxtools/*.$(OBJEXT)
|
||||
|
||||
distclean-compile:
|
||||
-rm -f *.tab.c
|
||||
|
||||
.c.o:
|
||||
$(AM_V_CC)$(COMPILE) -c -o $@ $<
|
||||
|
||||
.c.obj:
|
||||
$(AM_V_CC)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
|
||||
|
||||
ID: $(am__tagged_files)
|
||||
$(am__define_uniq_tagged_files); mkid -fID $$unique
|
||||
tags: tags-am
|
||||
TAGS: tags
|
||||
|
||||
tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
|
||||
set x; \
|
||||
here=`pwd`; \
|
||||
$(am__define_uniq_tagged_files); \
|
||||
shift; \
|
||||
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
if test $$# -gt 0; then \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
"$$@" $$unique; \
|
||||
else \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$unique; \
|
||||
fi; \
|
||||
fi
|
||||
ctags: ctags-am
|
||||
|
||||
CTAGS: ctags
|
||||
ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
|
||||
$(am__define_uniq_tagged_files); \
|
||||
test -z "$(CTAGS_ARGS)$$unique" \
|
||||
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
||||
$$unique
|
||||
|
||||
GTAGS:
|
||||
here=`$(am__cd) $(top_builddir) && pwd` \
|
||||
&& $(am__cd) $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) "$$here"
|
||||
cscope: cscope.files
|
||||
test ! -s cscope.files \
|
||||
|| $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS)
|
||||
clean-cscope:
|
||||
-rm -f cscope.files
|
||||
cscope.files: clean-cscope cscopelist
|
||||
cscopelist: cscopelist-am
|
||||
|
||||
cscopelist-am: $(am__tagged_files)
|
||||
list='$(am__tagged_files)'; \
|
||||
case "$(srcdir)" in \
|
||||
[\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
|
||||
*) sdir=$(subdir)/$(srcdir) ;; \
|
||||
esac; \
|
||||
for i in $$list; do \
|
||||
if test -f "$$i"; then \
|
||||
echo "$(subdir)/$$i"; \
|
||||
else \
|
||||
echo "$$sdir/$$i"; \
|
||||
fi; \
|
||||
done >> $(top_builddir)/cscope.files
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
-rm -f cscope.out cscope.in.out cscope.po.out cscope.files
|
||||
distdir: $(BUILT_SOURCES)
|
||||
$(MAKE) $(AM_MAKEFLAGS) distdir-am
|
||||
|
||||
distdir-am: $(DISTFILES)
|
||||
$(am__remove_distdir)
|
||||
test -d "$(distdir)" || mkdir "$(distdir)"
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
list='$(DISTFILES)'; \
|
||||
dist_files=`for file in $$list; do echo $$file; done | \
|
||||
sed -e "s|^$$srcdirstrip/||;t" \
|
||||
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
|
||||
case $$dist_files in \
|
||||
*/*) $(MKDIR_P) `echo "$$dist_files" | \
|
||||
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
|
||||
sort -u` ;; \
|
||||
esac; \
|
||||
for file in $$dist_files; do \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test -d "$(distdir)/$$file"; then \
|
||||
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
|
||||
fi; \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
|
||||
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
|
||||
fi; \
|
||||
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
|
||||
else \
|
||||
test -f "$(distdir)/$$file" \
|
||||
|| cp -p $$d/$$file "$(distdir)/$$file" \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
-test -n "$(am__skip_mode_fix)" \
|
||||
|| find "$(distdir)" -type d ! -perm -755 \
|
||||
-exec chmod u+rwx,go+rx {} \; -o \
|
||||
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
|
||||
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
|
||||
! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
|
||||
|| chmod -R a+r "$(distdir)"
|
||||
dist-gzip: distdir
|
||||
tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz
|
||||
$(am__post_remove_distdir)
|
||||
|
||||
dist-bzip2: distdir
|
||||
tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
|
||||
$(am__post_remove_distdir)
|
||||
|
||||
dist-lzip: distdir
|
||||
tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
|
||||
$(am__post_remove_distdir)
|
||||
|
||||
dist-xz: distdir
|
||||
tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
|
||||
$(am__post_remove_distdir)
|
||||
|
||||
dist-zstd: distdir
|
||||
tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst
|
||||
$(am__post_remove_distdir)
|
||||
|
||||
dist-tarZ: distdir
|
||||
@echo WARNING: "Support for distribution archives compressed with" \
|
||||
"legacy program 'compress' is deprecated." >&2
|
||||
@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
|
||||
tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
|
||||
$(am__post_remove_distdir)
|
||||
|
||||
dist-shar: distdir
|
||||
@echo WARNING: "Support for shar distribution archives is" \
|
||||
"deprecated." >&2
|
||||
@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
|
||||
shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz
|
||||
$(am__post_remove_distdir)
|
||||
|
||||
dist-zip: distdir
|
||||
-rm -f $(distdir).zip
|
||||
zip -rq $(distdir).zip $(distdir)
|
||||
$(am__post_remove_distdir)
|
||||
|
||||
dist dist-all:
|
||||
$(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:'
|
||||
$(am__post_remove_distdir)
|
||||
|
||||
# This target untars the dist file and tries a VPATH configuration. Then
|
||||
# it guarantees that the distribution is self-contained by making another
|
||||
# tarfile.
|
||||
distcheck: dist
|
||||
case '$(DIST_ARCHIVES)' in \
|
||||
*.tar.gz*) \
|
||||
eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\
|
||||
*.tar.bz2*) \
|
||||
bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
|
||||
*.tar.lz*) \
|
||||
lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
|
||||
*.tar.xz*) \
|
||||
xz -dc $(distdir).tar.xz | $(am__untar) ;;\
|
||||
*.tar.Z*) \
|
||||
uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
|
||||
*.shar.gz*) \
|
||||
eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\
|
||||
*.zip*) \
|
||||
unzip $(distdir).zip ;;\
|
||||
*.tar.zst*) \
|
||||
zstd -dc $(distdir).tar.zst | $(am__untar) ;;\
|
||||
esac
|
||||
chmod -R a-w $(distdir)
|
||||
chmod u+w $(distdir)
|
||||
mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst
|
||||
chmod a-w $(distdir)
|
||||
test -d $(distdir)/_build || exit 0; \
|
||||
dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
|
||||
&& dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
|
||||
&& am__cwd=`pwd` \
|
||||
&& $(am__cd) $(distdir)/_build/sub \
|
||||
&& ../../configure \
|
||||
$(AM_DISTCHECK_CONFIGURE_FLAGS) \
|
||||
$(DISTCHECK_CONFIGURE_FLAGS) \
|
||||
--srcdir=../.. --prefix="$$dc_install_base" \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) $(AM_DISTCHECK_DVI_TARGET) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) check \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) install \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) uninstall \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
|
||||
distuninstallcheck \
|
||||
&& chmod -R a-w "$$dc_install_base" \
|
||||
&& ({ \
|
||||
(cd ../.. && umask 077 && mkdir "$$dc_destdir") \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
|
||||
distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
|
||||
} || { rm -rf "$$dc_destdir"; exit 1; }) \
|
||||
&& rm -rf "$$dc_destdir" \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) dist \
|
||||
&& rm -rf $(DIST_ARCHIVES) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
|
||||
&& cd "$$am__cwd" \
|
||||
|| exit 1
|
||||
$(am__post_remove_distdir)
|
||||
@(echo "$(distdir) archives ready for distribution: "; \
|
||||
list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
|
||||
sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
|
||||
distuninstallcheck:
|
||||
@test -n '$(distuninstallcheck_dir)' || { \
|
||||
echo 'ERROR: trying to run $@ with an empty' \
|
||||
'$$(distuninstallcheck_dir)' >&2; \
|
||||
exit 1; \
|
||||
}; \
|
||||
$(am__cd) '$(distuninstallcheck_dir)' || { \
|
||||
echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \
|
||||
exit 1; \
|
||||
}; \
|
||||
test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \
|
||||
|| { echo "ERROR: files left after uninstall:" ; \
|
||||
if test -n "$(DESTDIR)"; then \
|
||||
echo " (check DESTDIR support)"; \
|
||||
fi ; \
|
||||
$(distuninstallcheck_listfiles) ; \
|
||||
exit 1; } >&2
|
||||
distcleancheck: distclean
|
||||
@if test '$(srcdir)' = . ; then \
|
||||
echo "ERROR: distcleancheck can only run from a VPATH build" ; \
|
||||
exit 1 ; \
|
||||
fi
|
||||
@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
|
||||
|| { echo "ERROR: files left in build directory after distclean:" ; \
|
||||
$(distcleancheck_listfiles) ; \
|
||||
exit 1; } >&2
|
||||
check-am: all-am
|
||||
check: check-am
|
||||
all-am: Makefile $(PROGRAMS) $(LIBRARIES)
|
||||
installdirs:
|
||||
for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sbindir)"; do \
|
||||
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
|
||||
done
|
||||
install: install-am
|
||||
install-exec: install-exec-am
|
||||
install-data: install-data-am
|
||||
uninstall: uninstall-am
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-am
|
||||
install-strip:
|
||||
if test -z '$(STRIP)'; then \
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
install; \
|
||||
else \
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
|
||||
fi
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
|
||||
-rm -f libxasync/$(am__dirstamp)
|
||||
-rm -f libxtools/$(am__dirstamp)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-am
|
||||
|
||||
clean-am: clean-binPROGRAMS clean-generic clean-local \
|
||||
clean-noinstLIBRARIES clean-sbinPROGRAMS mostlyclean-am
|
||||
|
||||
distclean: distclean-am
|
||||
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-compile distclean-generic \
|
||||
distclean-tags
|
||||
|
||||
dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-am
|
||||
|
||||
html-am:
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am:
|
||||
|
||||
install-dvi: install-dvi-am
|
||||
|
||||
install-dvi-am:
|
||||
|
||||
install-exec-am: install-binPROGRAMS install-sbinPROGRAMS
|
||||
|
||||
install-html: install-html-am
|
||||
|
||||
install-html-am:
|
||||
|
||||
install-info: install-info-am
|
||||
|
||||
install-info-am:
|
||||
|
||||
install-man:
|
||||
|
||||
install-pdf: install-pdf-am
|
||||
|
||||
install-pdf-am:
|
||||
|
||||
install-ps: install-ps-am
|
||||
|
||||
install-ps-am:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-am
|
||||
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
|
||||
-rm -rf $(top_srcdir)/autom4te.cache
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
mostlyclean-am: mostlyclean-compile mostlyclean-generic
|
||||
|
||||
pdf: pdf-am
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-am
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am: uninstall-binPROGRAMS uninstall-sbinPROGRAMS
|
||||
|
||||
.MAKE: install-am install-strip
|
||||
|
||||
.PHONY: CTAGS GTAGS TAGS all all-am am--refresh check check-am clean \
|
||||
clean-binPROGRAMS clean-cscope clean-generic clean-local \
|
||||
clean-noinstLIBRARIES clean-sbinPROGRAMS cscope cscopelist-am \
|
||||
ctags ctags-am dist dist-all dist-bzip2 dist-gzip dist-lzip \
|
||||
dist-shar dist-tarZ dist-xz dist-zip dist-zstd distcheck \
|
||||
distclean distclean-compile distclean-generic distclean-tags \
|
||||
distcleancheck distdir distuninstallcheck dvi dvi-am html \
|
||||
html-am info info-am install install-am install-binPROGRAMS \
|
||||
install-data install-data-am install-dvi install-dvi-am \
|
||||
install-exec install-exec-am install-html install-html-am \
|
||||
install-info install-info-am install-man install-pdf \
|
||||
install-pdf-am install-ps install-ps-am install-sbinPROGRAMS \
|
||||
install-strip installcheck installcheck-am installdirs \
|
||||
maintainer-clean maintainer-clean-generic mostlyclean \
|
||||
mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \
|
||||
tags tags-am uninstall uninstall-am uninstall-binPROGRAMS \
|
||||
uninstall-sbinPROGRAMS
|
||||
|
||||
.PRECIOUS: Makefile
|
||||
|
||||
|
||||
test: helmetctl
|
||||
./helmetctl
|
||||
|
||||
clean-local:
|
||||
rm -f *~
|
||||
rm -rf autom4te.cache
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
||||
Vendored
+1150
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,348 @@
|
||||
#! /bin/sh
|
||||
# Wrapper for compilers which do not understand '-c -o'.
|
||||
|
||||
scriptversion=2018-03-07.03; # UTC
|
||||
|
||||
# Copyright (C) 1999-2021 Free Software Foundation, Inc.
|
||||
# Written by Tom Tromey <tromey@cygnus.com>.
|
||||
#
|
||||
# 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, 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 program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
# configuration script generated by Autoconf, you may include it under
|
||||
# the same distribution terms that you use for the rest of that program.
|
||||
|
||||
# This file is maintained in Automake, please report
|
||||
# bugs to <bug-automake@gnu.org> or send patches to
|
||||
# <automake-patches@gnu.org>.
|
||||
|
||||
nl='
|
||||
'
|
||||
|
||||
# We need space, tab and new line, in precisely that order. Quoting is
|
||||
# there to prevent tools from complaining about whitespace usage.
|
||||
IFS=" "" $nl"
|
||||
|
||||
file_conv=
|
||||
|
||||
# func_file_conv build_file lazy
|
||||
# Convert a $build file to $host form and store it in $file
|
||||
# Currently only supports Windows hosts. If the determined conversion
|
||||
# type is listed in (the comma separated) LAZY, no conversion will
|
||||
# take place.
|
||||
func_file_conv ()
|
||||
{
|
||||
file=$1
|
||||
case $file in
|
||||
/ | /[!/]*) # absolute file, and not a UNC file
|
||||
if test -z "$file_conv"; then
|
||||
# lazily determine how to convert abs files
|
||||
case `uname -s` in
|
||||
MINGW*)
|
||||
file_conv=mingw
|
||||
;;
|
||||
CYGWIN* | MSYS*)
|
||||
file_conv=cygwin
|
||||
;;
|
||||
*)
|
||||
file_conv=wine
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
case $file_conv/,$2, in
|
||||
*,$file_conv,*)
|
||||
;;
|
||||
mingw/*)
|
||||
file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
|
||||
;;
|
||||
cygwin/* | msys/*)
|
||||
file=`cygpath -m "$file" || echo "$file"`
|
||||
;;
|
||||
wine/*)
|
||||
file=`winepath -w "$file" || echo "$file"`
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
# func_cl_dashL linkdir
|
||||
# Make cl look for libraries in LINKDIR
|
||||
func_cl_dashL ()
|
||||
{
|
||||
func_file_conv "$1"
|
||||
if test -z "$lib_path"; then
|
||||
lib_path=$file
|
||||
else
|
||||
lib_path="$lib_path;$file"
|
||||
fi
|
||||
linker_opts="$linker_opts -LIBPATH:$file"
|
||||
}
|
||||
|
||||
# func_cl_dashl library
|
||||
# Do a library search-path lookup for cl
|
||||
func_cl_dashl ()
|
||||
{
|
||||
lib=$1
|
||||
found=no
|
||||
save_IFS=$IFS
|
||||
IFS=';'
|
||||
for dir in $lib_path $LIB
|
||||
do
|
||||
IFS=$save_IFS
|
||||
if $shared && test -f "$dir/$lib.dll.lib"; then
|
||||
found=yes
|
||||
lib=$dir/$lib.dll.lib
|
||||
break
|
||||
fi
|
||||
if test -f "$dir/$lib.lib"; then
|
||||
found=yes
|
||||
lib=$dir/$lib.lib
|
||||
break
|
||||
fi
|
||||
if test -f "$dir/lib$lib.a"; then
|
||||
found=yes
|
||||
lib=$dir/lib$lib.a
|
||||
break
|
||||
fi
|
||||
done
|
||||
IFS=$save_IFS
|
||||
|
||||
if test "$found" != yes; then
|
||||
lib=$lib.lib
|
||||
fi
|
||||
}
|
||||
|
||||
# func_cl_wrapper cl arg...
|
||||
# Adjust compile command to suit cl
|
||||
func_cl_wrapper ()
|
||||
{
|
||||
# Assume a capable shell
|
||||
lib_path=
|
||||
shared=:
|
||||
linker_opts=
|
||||
for arg
|
||||
do
|
||||
if test -n "$eat"; then
|
||||
eat=
|
||||
else
|
||||
case $1 in
|
||||
-o)
|
||||
# configure might choose to run compile as 'compile cc -o foo foo.c'.
|
||||
eat=1
|
||||
case $2 in
|
||||
*.o | *.[oO][bB][jJ])
|
||||
func_file_conv "$2"
|
||||
set x "$@" -Fo"$file"
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
func_file_conv "$2"
|
||||
set x "$@" -Fe"$file"
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
-I)
|
||||
eat=1
|
||||
func_file_conv "$2" mingw
|
||||
set x "$@" -I"$file"
|
||||
shift
|
||||
;;
|
||||
-I*)
|
||||
func_file_conv "${1#-I}" mingw
|
||||
set x "$@" -I"$file"
|
||||
shift
|
||||
;;
|
||||
-l)
|
||||
eat=1
|
||||
func_cl_dashl "$2"
|
||||
set x "$@" "$lib"
|
||||
shift
|
||||
;;
|
||||
-l*)
|
||||
func_cl_dashl "${1#-l}"
|
||||
set x "$@" "$lib"
|
||||
shift
|
||||
;;
|
||||
-L)
|
||||
eat=1
|
||||
func_cl_dashL "$2"
|
||||
;;
|
||||
-L*)
|
||||
func_cl_dashL "${1#-L}"
|
||||
;;
|
||||
-static)
|
||||
shared=false
|
||||
;;
|
||||
-Wl,*)
|
||||
arg=${1#-Wl,}
|
||||
save_ifs="$IFS"; IFS=','
|
||||
for flag in $arg; do
|
||||
IFS="$save_ifs"
|
||||
linker_opts="$linker_opts $flag"
|
||||
done
|
||||
IFS="$save_ifs"
|
||||
;;
|
||||
-Xlinker)
|
||||
eat=1
|
||||
linker_opts="$linker_opts $2"
|
||||
;;
|
||||
-*)
|
||||
set x "$@" "$1"
|
||||
shift
|
||||
;;
|
||||
*.cc | *.CC | *.cxx | *.CXX | *.[cC]++)
|
||||
func_file_conv "$1"
|
||||
set x "$@" -Tp"$file"
|
||||
shift
|
||||
;;
|
||||
*.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])
|
||||
func_file_conv "$1" mingw
|
||||
set x "$@" "$file"
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
set x "$@" "$1"
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
shift
|
||||
done
|
||||
if test -n "$linker_opts"; then
|
||||
linker_opts="-link$linker_opts"
|
||||
fi
|
||||
exec "$@" $linker_opts
|
||||
exit 1
|
||||
}
|
||||
|
||||
eat=
|
||||
|
||||
case $1 in
|
||||
'')
|
||||
echo "$0: No command. Try '$0 --help' for more information." 1>&2
|
||||
exit 1;
|
||||
;;
|
||||
-h | --h*)
|
||||
cat <<\EOF
|
||||
Usage: compile [--help] [--version] PROGRAM [ARGS]
|
||||
|
||||
Wrapper for compilers which do not understand '-c -o'.
|
||||
Remove '-o dest.o' from ARGS, run PROGRAM with the remaining
|
||||
arguments, and rename the output as expected.
|
||||
|
||||
If you are trying to build a whole package this is not the
|
||||
right script to run: please start by reading the file 'INSTALL'.
|
||||
|
||||
Report bugs to <bug-automake@gnu.org>.
|
||||
EOF
|
||||
exit $?
|
||||
;;
|
||||
-v | --v*)
|
||||
echo "compile $scriptversion"
|
||||
exit $?
|
||||
;;
|
||||
cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \
|
||||
icl | *[/\\]icl | icl.exe | *[/\\]icl.exe )
|
||||
func_cl_wrapper "$@" # Doesn't return...
|
||||
;;
|
||||
esac
|
||||
|
||||
ofile=
|
||||
cfile=
|
||||
|
||||
for arg
|
||||
do
|
||||
if test -n "$eat"; then
|
||||
eat=
|
||||
else
|
||||
case $1 in
|
||||
-o)
|
||||
# configure might choose to run compile as 'compile cc -o foo foo.c'.
|
||||
# So we strip '-o arg' only if arg is an object.
|
||||
eat=1
|
||||
case $2 in
|
||||
*.o | *.obj)
|
||||
ofile=$2
|
||||
;;
|
||||
*)
|
||||
set x "$@" -o "$2"
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
*.c)
|
||||
cfile=$1
|
||||
set x "$@" "$1"
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
set x "$@" "$1"
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
shift
|
||||
done
|
||||
|
||||
if test -z "$ofile" || test -z "$cfile"; then
|
||||
# If no '-o' option was seen then we might have been invoked from a
|
||||
# pattern rule where we don't need one. That is ok -- this is a
|
||||
# normal compilation that the losing compiler can handle. If no
|
||||
# '.c' file was seen then we are probably linking. That is also
|
||||
# ok.
|
||||
exec "$@"
|
||||
fi
|
||||
|
||||
# Name of file we expect compiler to create.
|
||||
cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
|
||||
|
||||
# Create the lock directory.
|
||||
# Note: use '[/\\:.-]' here to ensure that we don't use the same name
|
||||
# that we are using for the .o file. Also, base the name on the expected
|
||||
# object file name, since that is what matters with a parallel build.
|
||||
lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
|
||||
while true; do
|
||||
if mkdir "$lockdir" >/dev/null 2>&1; then
|
||||
break
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
# FIXME: race condition here if user kills between mkdir and trap.
|
||||
trap "rmdir '$lockdir'; exit 1" 1 2 15
|
||||
|
||||
# Run the compile.
|
||||
"$@"
|
||||
ret=$?
|
||||
|
||||
if test -f "$cofile"; then
|
||||
test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
|
||||
elif test -f "${cofile}bj"; then
|
||||
test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
|
||||
fi
|
||||
|
||||
rmdir "$lockdir"
|
||||
exit $ret
|
||||
|
||||
# Local Variables:
|
||||
# mode: shell-script
|
||||
# sh-indentation: 2
|
||||
# eval: (add-hook 'before-save-hook 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-time-zone: "UTC0"
|
||||
# time-stamp-end: "; # UTC"
|
||||
# End:
|
||||
Executable
+1050
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,12 @@
|
||||
AC_INIT([helmet],[0.0.1])
|
||||
AM_INIT_AUTOMAKE
|
||||
AC_PREFIX_DEFAULT(/usr/local)
|
||||
|
||||
AC_PROG_CC
|
||||
AC_PROG_RANLIB
|
||||
|
||||
AC_CONFIG_FILES([
|
||||
Makefile
|
||||
])
|
||||
AC_OUTPUT
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
# example
|
||||
logpath = /var/log/helmet.log
|
||||
sockpath = /var/run/helmet.run
|
||||
#EOF
|
||||
|
||||
|
||||
|
||||
+59
@@ -0,0 +1,59 @@
|
||||
|
||||
#include <logger.h>
|
||||
#include <server.h>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <fcntl.h>
|
||||
#include <tconfig.h>
|
||||
#include <massert.h>
|
||||
|
||||
#include <logger.h>
|
||||
#include <tconfig.h>
|
||||
#include <massert.h>
|
||||
|
||||
|
||||
int main(void) {
|
||||
int res = 0;
|
||||
|
||||
logger_init();
|
||||
logger_dprintf("main start");
|
||||
|
||||
util_init();
|
||||
util_config();
|
||||
util_run();
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
int util_init(void) {
|
||||
logger_dprintf("server init");
|
||||
return 0;
|
||||
}
|
||||
|
||||
int util_config(void) {
|
||||
logger_dprintf("server config");
|
||||
|
||||
tconfig_t tconfig;
|
||||
tconfig_init(&tconfig);
|
||||
|
||||
char* logpath = NULL;
|
||||
tconfig_bind(&tconfig, TCONF_STR, "logpath", &logpath);
|
||||
ssize_t rsize = tconfig_read(&tconfig, "helmet.conf");
|
||||
|
||||
int res = tconfig_parse(&tconfig);
|
||||
MASSERT(res == -1);
|
||||
|
||||
tconfig_destroy(&tconfig);
|
||||
logger_dprintf("logpath = %s", logpath);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int util_run(void) {
|
||||
logger_dprintf("server start");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
|
||||
#include <logger.h>
|
||||
#include <server.h>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <fcntl.h>
|
||||
#include <tconfig.h>
|
||||
#include <massert.h>
|
||||
|
||||
|
||||
int main(void) {
|
||||
int res = 0;
|
||||
|
||||
logger_init();
|
||||
logger_dprintf("main start");
|
||||
|
||||
server_init();
|
||||
server_config();
|
||||
server_run();
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int _main(int argc, char **argv) {
|
||||
(void)argc;
|
||||
(void)argv;
|
||||
|
||||
tconfig_t tconfig;
|
||||
tconfig_init(&tconfig);
|
||||
|
||||
int intkey = 0;
|
||||
char* strkey = NULL;
|
||||
|
||||
tconfig_bind(&tconfig, TCONF_INT, "intkey", &intkey);
|
||||
tconfig_bind(&tconfig, TCONF_STR, "strkey", &strkey);
|
||||
|
||||
ssize_t rsize = tconfig_read(&tconfig, "helmet.conf");
|
||||
printf("%ld\n", rsize);
|
||||
MASSERT(rsize > 0);
|
||||
|
||||
int res = tconfig_parse(&tconfig);
|
||||
MASSERT(res == -1);
|
||||
|
||||
tconfig_destroy(&tconfig);
|
||||
|
||||
printf("int key = %d\n", intkey);
|
||||
printf("str key = %s\n", strkey);
|
||||
return 0;
|
||||
}
|
||||
Executable
+541
@@ -0,0 +1,541 @@
|
||||
#!/bin/sh
|
||||
# install - install a program, script, or datafile
|
||||
|
||||
scriptversion=2020-11-14.01; # UTC
|
||||
|
||||
# This originates from X11R5 (mit/util/scripts/install.sh), which was
|
||||
# later released in X11R6 (xc/config/util/install.sh) with the
|
||||
# following copyright and license.
|
||||
#
|
||||
# Copyright (C) 1994 X Consortium
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to
|
||||
# deal in the Software without restriction, including without limitation the
|
||||
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
# sell copies of the Software, and to permit persons to whom the Software is
|
||||
# furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
|
||||
# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
# Except as contained in this notice, the name of the X Consortium shall not
|
||||
# be used in advertising or otherwise to promote the sale, use or other deal-
|
||||
# ings in this Software without prior written authorization from the X Consor-
|
||||
# tium.
|
||||
#
|
||||
#
|
||||
# FSF changes to this file are in the public domain.
|
||||
#
|
||||
# Calling this script install-sh is preferred over install.sh, to prevent
|
||||
# 'make' implicit rules from creating a file called install from it
|
||||
# when there is no Makefile.
|
||||
#
|
||||
# This script is compatible with the BSD install script, but was written
|
||||
# from scratch.
|
||||
|
||||
tab=' '
|
||||
nl='
|
||||
'
|
||||
IFS=" $tab$nl"
|
||||
|
||||
# Set DOITPROG to "echo" to test this script.
|
||||
|
||||
doit=${DOITPROG-}
|
||||
doit_exec=${doit:-exec}
|
||||
|
||||
# Put in absolute file names if you don't have them in your path;
|
||||
# or use environment vars.
|
||||
|
||||
chgrpprog=${CHGRPPROG-chgrp}
|
||||
chmodprog=${CHMODPROG-chmod}
|
||||
chownprog=${CHOWNPROG-chown}
|
||||
cmpprog=${CMPPROG-cmp}
|
||||
cpprog=${CPPROG-cp}
|
||||
mkdirprog=${MKDIRPROG-mkdir}
|
||||
mvprog=${MVPROG-mv}
|
||||
rmprog=${RMPROG-rm}
|
||||
stripprog=${STRIPPROG-strip}
|
||||
|
||||
posix_mkdir=
|
||||
|
||||
# Desired mode of installed file.
|
||||
mode=0755
|
||||
|
||||
# Create dirs (including intermediate dirs) using mode 755.
|
||||
# This is like GNU 'install' as of coreutils 8.32 (2020).
|
||||
mkdir_umask=22
|
||||
|
||||
backupsuffix=
|
||||
chgrpcmd=
|
||||
chmodcmd=$chmodprog
|
||||
chowncmd=
|
||||
mvcmd=$mvprog
|
||||
rmcmd="$rmprog -f"
|
||||
stripcmd=
|
||||
|
||||
src=
|
||||
dst=
|
||||
dir_arg=
|
||||
dst_arg=
|
||||
|
||||
copy_on_change=false
|
||||
is_target_a_directory=possibly
|
||||
|
||||
usage="\
|
||||
Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
|
||||
or: $0 [OPTION]... SRCFILES... DIRECTORY
|
||||
or: $0 [OPTION]... -t DIRECTORY SRCFILES...
|
||||
or: $0 [OPTION]... -d DIRECTORIES...
|
||||
|
||||
In the 1st form, copy SRCFILE to DSTFILE.
|
||||
In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
|
||||
In the 4th, create DIRECTORIES.
|
||||
|
||||
Options:
|
||||
--help display this help and exit.
|
||||
--version display version info and exit.
|
||||
|
||||
-c (ignored)
|
||||
-C install only if different (preserve data modification time)
|
||||
-d create directories instead of installing files.
|
||||
-g GROUP $chgrpprog installed files to GROUP.
|
||||
-m MODE $chmodprog installed files to MODE.
|
||||
-o USER $chownprog installed files to USER.
|
||||
-p pass -p to $cpprog.
|
||||
-s $stripprog installed files.
|
||||
-S SUFFIX attempt to back up existing files, with suffix SUFFIX.
|
||||
-t DIRECTORY install into DIRECTORY.
|
||||
-T report an error if DSTFILE is a directory.
|
||||
|
||||
Environment variables override the default commands:
|
||||
CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
|
||||
RMPROG STRIPPROG
|
||||
|
||||
By default, rm is invoked with -f; when overridden with RMPROG,
|
||||
it's up to you to specify -f if you want it.
|
||||
|
||||
If -S is not specified, no backups are attempted.
|
||||
|
||||
Email bug reports to bug-automake@gnu.org.
|
||||
Automake home page: https://www.gnu.org/software/automake/
|
||||
"
|
||||
|
||||
while test $# -ne 0; do
|
||||
case $1 in
|
||||
-c) ;;
|
||||
|
||||
-C) copy_on_change=true;;
|
||||
|
||||
-d) dir_arg=true;;
|
||||
|
||||
-g) chgrpcmd="$chgrpprog $2"
|
||||
shift;;
|
||||
|
||||
--help) echo "$usage"; exit $?;;
|
||||
|
||||
-m) mode=$2
|
||||
case $mode in
|
||||
*' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*)
|
||||
echo "$0: invalid mode: $mode" >&2
|
||||
exit 1;;
|
||||
esac
|
||||
shift;;
|
||||
|
||||
-o) chowncmd="$chownprog $2"
|
||||
shift;;
|
||||
|
||||
-p) cpprog="$cpprog -p";;
|
||||
|
||||
-s) stripcmd=$stripprog;;
|
||||
|
||||
-S) backupsuffix="$2"
|
||||
shift;;
|
||||
|
||||
-t)
|
||||
is_target_a_directory=always
|
||||
dst_arg=$2
|
||||
# Protect names problematic for 'test' and other utilities.
|
||||
case $dst_arg in
|
||||
-* | [=\(\)!]) dst_arg=./$dst_arg;;
|
||||
esac
|
||||
shift;;
|
||||
|
||||
-T) is_target_a_directory=never;;
|
||||
|
||||
--version) echo "$0 $scriptversion"; exit $?;;
|
||||
|
||||
--) shift
|
||||
break;;
|
||||
|
||||
-*) echo "$0: invalid option: $1" >&2
|
||||
exit 1;;
|
||||
|
||||
*) break;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
# We allow the use of options -d and -T together, by making -d
|
||||
# take the precedence; this is for compatibility with GNU install.
|
||||
|
||||
if test -n "$dir_arg"; then
|
||||
if test -n "$dst_arg"; then
|
||||
echo "$0: target directory not allowed when installing a directory." >&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
|
||||
# When -d is used, all remaining arguments are directories to create.
|
||||
# When -t is used, the destination is already specified.
|
||||
# Otherwise, the last argument is the destination. Remove it from $@.
|
||||
for arg
|
||||
do
|
||||
if test -n "$dst_arg"; then
|
||||
# $@ is not empty: it contains at least $arg.
|
||||
set fnord "$@" "$dst_arg"
|
||||
shift # fnord
|
||||
fi
|
||||
shift # arg
|
||||
dst_arg=$arg
|
||||
# Protect names problematic for 'test' and other utilities.
|
||||
case $dst_arg in
|
||||
-* | [=\(\)!]) dst_arg=./$dst_arg;;
|
||||
esac
|
||||
done
|
||||
fi
|
||||
|
||||
if test $# -eq 0; then
|
||||
if test -z "$dir_arg"; then
|
||||
echo "$0: no input file specified." >&2
|
||||
exit 1
|
||||
fi
|
||||
# It's OK to call 'install-sh -d' without argument.
|
||||
# This can happen when creating conditional directories.
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if test -z "$dir_arg"; then
|
||||
if test $# -gt 1 || test "$is_target_a_directory" = always; then
|
||||
if test ! -d "$dst_arg"; then
|
||||
echo "$0: $dst_arg: Is not a directory." >&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if test -z "$dir_arg"; then
|
||||
do_exit='(exit $ret); exit $ret'
|
||||
trap "ret=129; $do_exit" 1
|
||||
trap "ret=130; $do_exit" 2
|
||||
trap "ret=141; $do_exit" 13
|
||||
trap "ret=143; $do_exit" 15
|
||||
|
||||
# Set umask so as not to create temps with too-generous modes.
|
||||
# However, 'strip' requires both read and write access to temps.
|
||||
case $mode in
|
||||
# Optimize common cases.
|
||||
*644) cp_umask=133;;
|
||||
*755) cp_umask=22;;
|
||||
|
||||
*[0-7])
|
||||
if test -z "$stripcmd"; then
|
||||
u_plus_rw=
|
||||
else
|
||||
u_plus_rw='% 200'
|
||||
fi
|
||||
cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
|
||||
*)
|
||||
if test -z "$stripcmd"; then
|
||||
u_plus_rw=
|
||||
else
|
||||
u_plus_rw=,u+rw
|
||||
fi
|
||||
cp_umask=$mode$u_plus_rw;;
|
||||
esac
|
||||
fi
|
||||
|
||||
for src
|
||||
do
|
||||
# Protect names problematic for 'test' and other utilities.
|
||||
case $src in
|
||||
-* | [=\(\)!]) src=./$src;;
|
||||
esac
|
||||
|
||||
if test -n "$dir_arg"; then
|
||||
dst=$src
|
||||
dstdir=$dst
|
||||
test -d "$dstdir"
|
||||
dstdir_status=$?
|
||||
# Don't chown directories that already exist.
|
||||
if test $dstdir_status = 0; then
|
||||
chowncmd=""
|
||||
fi
|
||||
else
|
||||
|
||||
# Waiting for this to be detected by the "$cpprog $src $dsttmp" command
|
||||
# might cause directories to be created, which would be especially bad
|
||||
# if $src (and thus $dsttmp) contains '*'.
|
||||
if test ! -f "$src" && test ! -d "$src"; then
|
||||
echo "$0: $src does not exist." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if test -z "$dst_arg"; then
|
||||
echo "$0: no destination specified." >&2
|
||||
exit 1
|
||||
fi
|
||||
dst=$dst_arg
|
||||
|
||||
# If destination is a directory, append the input filename.
|
||||
if test -d "$dst"; then
|
||||
if test "$is_target_a_directory" = never; then
|
||||
echo "$0: $dst_arg: Is a directory" >&2
|
||||
exit 1
|
||||
fi
|
||||
dstdir=$dst
|
||||
dstbase=`basename "$src"`
|
||||
case $dst in
|
||||
*/) dst=$dst$dstbase;;
|
||||
*) dst=$dst/$dstbase;;
|
||||
esac
|
||||
dstdir_status=0
|
||||
else
|
||||
dstdir=`dirname "$dst"`
|
||||
test -d "$dstdir"
|
||||
dstdir_status=$?
|
||||
fi
|
||||
fi
|
||||
|
||||
case $dstdir in
|
||||
*/) dstdirslash=$dstdir;;
|
||||
*) dstdirslash=$dstdir/;;
|
||||
esac
|
||||
|
||||
obsolete_mkdir_used=false
|
||||
|
||||
if test $dstdir_status != 0; then
|
||||
case $posix_mkdir in
|
||||
'')
|
||||
# With -d, create the new directory with the user-specified mode.
|
||||
# Otherwise, rely on $mkdir_umask.
|
||||
if test -n "$dir_arg"; then
|
||||
mkdir_mode=-m$mode
|
||||
else
|
||||
mkdir_mode=
|
||||
fi
|
||||
|
||||
posix_mkdir=false
|
||||
# The $RANDOM variable is not portable (e.g., dash). Use it
|
||||
# here however when possible just to lower collision chance.
|
||||
tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
|
||||
|
||||
trap '
|
||||
ret=$?
|
||||
rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null
|
||||
exit $ret
|
||||
' 0
|
||||
|
||||
# Because "mkdir -p" follows existing symlinks and we likely work
|
||||
# directly in world-writeable /tmp, make sure that the '$tmpdir'
|
||||
# directory is successfully created first before we actually test
|
||||
# 'mkdir -p'.
|
||||
if (umask $mkdir_umask &&
|
||||
$mkdirprog $mkdir_mode "$tmpdir" &&
|
||||
exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
|
||||
then
|
||||
if test -z "$dir_arg" || {
|
||||
# Check for POSIX incompatibilities with -m.
|
||||
# HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
|
||||
# other-writable bit of parent directory when it shouldn't.
|
||||
# FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
|
||||
test_tmpdir="$tmpdir/a"
|
||||
ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
|
||||
case $ls_ld_tmpdir in
|
||||
d????-?r-*) different_mode=700;;
|
||||
d????-?--*) different_mode=755;;
|
||||
*) false;;
|
||||
esac &&
|
||||
$mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
|
||||
ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
|
||||
test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
|
||||
}
|
||||
}
|
||||
then posix_mkdir=:
|
||||
fi
|
||||
rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
|
||||
else
|
||||
# Remove any dirs left behind by ancient mkdir implementations.
|
||||
rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
|
||||
fi
|
||||
trap '' 0;;
|
||||
esac
|
||||
|
||||
if
|
||||
$posix_mkdir && (
|
||||
umask $mkdir_umask &&
|
||||
$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
|
||||
)
|
||||
then :
|
||||
else
|
||||
|
||||
# mkdir does not conform to POSIX,
|
||||
# or it failed possibly due to a race condition. Create the
|
||||
# directory the slow way, step by step, checking for races as we go.
|
||||
|
||||
case $dstdir in
|
||||
/*) prefix='/';;
|
||||
[-=\(\)!]*) prefix='./';;
|
||||
*) prefix='';;
|
||||
esac
|
||||
|
||||
oIFS=$IFS
|
||||
IFS=/
|
||||
set -f
|
||||
set fnord $dstdir
|
||||
shift
|
||||
set +f
|
||||
IFS=$oIFS
|
||||
|
||||
prefixes=
|
||||
|
||||
for d
|
||||
do
|
||||
test X"$d" = X && continue
|
||||
|
||||
prefix=$prefix$d
|
||||
if test -d "$prefix"; then
|
||||
prefixes=
|
||||
else
|
||||
if $posix_mkdir; then
|
||||
(umask $mkdir_umask &&
|
||||
$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
|
||||
# Don't fail if two instances are running concurrently.
|
||||
test -d "$prefix" || exit 1
|
||||
else
|
||||
case $prefix in
|
||||
*\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
|
||||
*) qprefix=$prefix;;
|
||||
esac
|
||||
prefixes="$prefixes '$qprefix'"
|
||||
fi
|
||||
fi
|
||||
prefix=$prefix/
|
||||
done
|
||||
|
||||
if test -n "$prefixes"; then
|
||||
# Don't fail if two instances are running concurrently.
|
||||
(umask $mkdir_umask &&
|
||||
eval "\$doit_exec \$mkdirprog $prefixes") ||
|
||||
test -d "$dstdir" || exit 1
|
||||
obsolete_mkdir_used=true
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if test -n "$dir_arg"; then
|
||||
{ test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
|
||||
{ test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
|
||||
{ test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
|
||||
test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
|
||||
else
|
||||
|
||||
# Make a couple of temp file names in the proper directory.
|
||||
dsttmp=${dstdirslash}_inst.$$_
|
||||
rmtmp=${dstdirslash}_rm.$$_
|
||||
|
||||
# Trap to clean up those temp files at exit.
|
||||
trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
|
||||
|
||||
# Copy the file name to the temp name.
|
||||
(umask $cp_umask &&
|
||||
{ test -z "$stripcmd" || {
|
||||
# Create $dsttmp read-write so that cp doesn't create it read-only,
|
||||
# which would cause strip to fail.
|
||||
if test -z "$doit"; then
|
||||
: >"$dsttmp" # No need to fork-exec 'touch'.
|
||||
else
|
||||
$doit touch "$dsttmp"
|
||||
fi
|
||||
}
|
||||
} &&
|
||||
$doit_exec $cpprog "$src" "$dsttmp") &&
|
||||
|
||||
# and set any options; do chmod last to preserve setuid bits.
|
||||
#
|
||||
# If any of these fail, we abort the whole thing. If we want to
|
||||
# ignore errors from any of these, just make sure not to ignore
|
||||
# errors from the above "$doit $cpprog $src $dsttmp" command.
|
||||
#
|
||||
{ test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
|
||||
{ test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
|
||||
{ test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
|
||||
{ test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
|
||||
|
||||
# If -C, don't bother to copy if it wouldn't change the file.
|
||||
if $copy_on_change &&
|
||||
old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
|
||||
new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
|
||||
set -f &&
|
||||
set X $old && old=:$2:$4:$5:$6 &&
|
||||
set X $new && new=:$2:$4:$5:$6 &&
|
||||
set +f &&
|
||||
test "$old" = "$new" &&
|
||||
$cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
|
||||
then
|
||||
rm -f "$dsttmp"
|
||||
else
|
||||
# If $backupsuffix is set, and the file being installed
|
||||
# already exists, attempt a backup. Don't worry if it fails,
|
||||
# e.g., if mv doesn't support -f.
|
||||
if test -n "$backupsuffix" && test -f "$dst"; then
|
||||
$doit $mvcmd -f "$dst" "$dst$backupsuffix" 2>/dev/null
|
||||
fi
|
||||
|
||||
# Rename the file to the real destination.
|
||||
$doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
|
||||
|
||||
# The rename failed, perhaps because mv can't rename something else
|
||||
# to itself, or perhaps because mv is so ancient that it does not
|
||||
# support -f.
|
||||
{
|
||||
# Now remove or move aside any old file at destination location.
|
||||
# We try this two ways since rm can't unlink itself on some
|
||||
# systems and the destination file might be busy for other
|
||||
# reasons. In this case, the final cleanup might fail but the new
|
||||
# file should still install successfully.
|
||||
{
|
||||
test ! -f "$dst" ||
|
||||
$doit $rmcmd "$dst" 2>/dev/null ||
|
||||
{ $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
|
||||
{ $doit $rmcmd "$rmtmp" 2>/dev/null; :; }
|
||||
} ||
|
||||
{ echo "$0: cannot unlink or rename $dst" >&2
|
||||
(exit 1); exit 1
|
||||
}
|
||||
} &&
|
||||
|
||||
# Now rename the file to the real destination.
|
||||
$doit $mvcmd "$dsttmp" "$dst"
|
||||
}
|
||||
fi || exit 1
|
||||
|
||||
trap '' 0
|
||||
fi
|
||||
done
|
||||
|
||||
# Local variables:
|
||||
# eval: (add-hook 'before-save-hook 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-time-zone: "UTC0"
|
||||
# time-stamp-end: "; # UTC"
|
||||
# End:
|
||||
@@ -0,0 +1,43 @@
|
||||
|
||||
#include <stdlib.h>
|
||||
//#include <unistd.h>
|
||||
//#include <semaphore.h>
|
||||
//#include <pthread.h>
|
||||
//#include <stdatomic.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include <waitgroup.h>
|
||||
|
||||
wg_t* new_gw(void) {
|
||||
wg_t* wg = malloc(sizeof(wg_t));
|
||||
wg->num = 0;
|
||||
sem_init(&(wg->sem), 1, 0);
|
||||
return wg;
|
||||
}
|
||||
|
||||
void wg_init(wg_t* wg) {
|
||||
wg->num = 0;
|
||||
sem_init(&(wg->sem), 1, 0);
|
||||
}
|
||||
|
||||
void wg_add(wg_t* wg) {
|
||||
wg->num++;
|
||||
}
|
||||
|
||||
void wg_done(wg_t* wg) {
|
||||
if ((--wg->num) == 0) sem_post(&(wg->sem));
|
||||
}
|
||||
|
||||
void wg_wait(wg_t* wg) {
|
||||
if ((wg->num) < 1) sem_post(&(wg->sem));
|
||||
sem_wait(&(wg->sem));
|
||||
}
|
||||
|
||||
void wg_destroy(wg_t* wg) {
|
||||
sem_destroy(&(wg->sem));
|
||||
}
|
||||
|
||||
void wg_free(wg_t* wg) {
|
||||
sem_destroy(&(wg->sem));
|
||||
free(wg);
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
|
||||
#ifndef WAITGROUP_H_QWERTY
|
||||
#define WAITGROUP_H_QWERTY
|
||||
|
||||
#include <semaphore.h>
|
||||
#include <pthread.h>
|
||||
#include <stdatomic.h>
|
||||
#include <stdio.h>
|
||||
|
||||
typedef struct {
|
||||
sem_t sem;
|
||||
atomic_int num;
|
||||
} wg_t;
|
||||
|
||||
wg_t* new_gw(void);
|
||||
void wg_init(wg_t* wg);
|
||||
void wg_add(wg_t* wg);
|
||||
void wg_done(wg_t* wg);
|
||||
void wg_wait(wg_t* wg);
|
||||
void wg_destroy(wg_t* wg);
|
||||
void wg_free(wg_t* wg);
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,121 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2023 Oleg Borodin <borodin@unix7.org>
|
||||
*
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#include <fcntl.h>
|
||||
|
||||
#include <bstream.h>
|
||||
|
||||
|
||||
#define STREAM_INITCAPA 128
|
||||
|
||||
bstream_t* bstream_init(bstream_t* stream) {
|
||||
stream->data = malloc(STREAM_INITCAPA);
|
||||
stream->wpos = 0;
|
||||
stream->rpos = 0;
|
||||
stream->capa = STREAM_INITCAPA;
|
||||
return stream;
|
||||
}
|
||||
|
||||
bstream_t* new_bstream() {
|
||||
bstream_t* stream = malloc(sizeof(bstream_t));
|
||||
if (stream == NULL) return NULL;
|
||||
stream->data = malloc(STREAM_INITCAPA);
|
||||
stream->wpos = 0;
|
||||
stream->rpos = 0;
|
||||
stream->capa = STREAM_INITCAPA;
|
||||
return stream;
|
||||
}
|
||||
|
||||
size_t bstream_dump(bstream_t * stream) {
|
||||
for (size_t i = 0; i < stream->wpos; i++) {
|
||||
printf("%c", stream->data[i]);
|
||||
}
|
||||
return stream->wpos;
|
||||
}
|
||||
|
||||
|
||||
ssize_t bstream_write(bstream_t * stream, void* buf, size_t size) {
|
||||
if ((stream->wpos + size) > stream->capa) {
|
||||
size_t newcapa = stream->capa * 2;
|
||||
stream->data = realloc(stream->data, (size_t)newcapa);
|
||||
stream->capa = newcapa;
|
||||
}
|
||||
if (buf != NULL) {
|
||||
memcpy(&(stream->data[stream->wpos]), buf, (size_t)size);
|
||||
}
|
||||
stream->wpos += size;
|
||||
return (ssize_t)size;
|
||||
}
|
||||
|
||||
ssize_t bstream_read(bstream_t * stream, void* buf, size_t size) {
|
||||
size_t unread = stream->wpos - stream->rpos;
|
||||
if (size > unread) {
|
||||
size = unread;
|
||||
}
|
||||
if (buf != NULL) {
|
||||
memcpy(buf, &(stream->data[stream->rpos]), size);
|
||||
}
|
||||
stream->rpos += size;
|
||||
return (ssize_t)size;
|
||||
}
|
||||
|
||||
#define RBUF_SIZE 64
|
||||
|
||||
ssize_t bstream_fread(bstream_t * stream, char* filename) {
|
||||
|
||||
int fd = open(filename, O_RDONLY);
|
||||
if (fd < 0) return (ssize_t)-1;
|
||||
|
||||
char buf[RBUF_SIZE];
|
||||
size_t size = 0;
|
||||
size_t rsize = 0;
|
||||
while ((size = (size_t)read(fd, buf, RBUF_SIZE)) > 0) {
|
||||
if ((stream->wpos + size) > stream->capa) {
|
||||
size_t newcapa = stream->capa * 2;
|
||||
stream->data = realloc(stream->data, (size_t)newcapa);
|
||||
stream->capa = newcapa;
|
||||
}
|
||||
if (buf != NULL) {
|
||||
memcpy(&(stream->data[stream->wpos]), buf, (size_t)size);
|
||||
}
|
||||
stream->wpos += size;
|
||||
rsize += size;
|
||||
}
|
||||
close(fd);
|
||||
return (ssize_t)rsize;
|
||||
}
|
||||
|
||||
char bstream_getc(bstream_t * stream) {
|
||||
size_t unread = stream->wpos - stream->rpos;
|
||||
|
||||
if (unread == 0)
|
||||
return EOF;
|
||||
return (char)stream->data[stream->rpos++];
|
||||
}
|
||||
|
||||
|
||||
size_t bstream_wpos(bstream_t * stream) {
|
||||
return stream->wpos;
|
||||
}
|
||||
|
||||
size_t bstream_rpos(bstream_t * stream) {
|
||||
return stream->rpos;
|
||||
}
|
||||
|
||||
|
||||
void bstream_destroy(bstream_t * stream) {
|
||||
if (stream != NULL)
|
||||
free(stream->data);
|
||||
}
|
||||
|
||||
void bstream_free(bstream_t * stream) {
|
||||
if (stream != NULL)
|
||||
free(stream->data);
|
||||
free(stream);
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2023 Oleg Borodin <borodin@unix7.org>
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef BSTREAM_H_QWERTY
|
||||
#define BSTREAM_H_QWERTY
|
||||
|
||||
#include <stdint.h>
|
||||
#include <unistd.h>
|
||||
|
||||
typedef struct {
|
||||
size_t rpos;
|
||||
size_t wpos;
|
||||
size_t capa;
|
||||
uint8_t* data;
|
||||
} bstream_t;
|
||||
|
||||
|
||||
bstream_t* new_bstream();
|
||||
bstream_t* bstream_init(bstream_t * stream);
|
||||
size_t bstream_dump(bstream_t * stream);
|
||||
ssize_t bstream_write(bstream_t * stream, void* buf, size_t size);
|
||||
ssize_t bstream_read(bstream_t * stream, void* buf, size_t size);
|
||||
|
||||
ssize_t bstream_fread(bstream_t * stream, char* filename);
|
||||
char bstream_getc(bstream_t * stream);
|
||||
|
||||
size_t bstream_wpos(bstream_t * stream);
|
||||
size_t bstream_rpos(bstream_t * stream);
|
||||
|
||||
void bstream_destroy(bstream_t * stream);
|
||||
void bstream_free(bstream_t * stream);
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,47 @@
|
||||
/*
|
||||
* Copyright 2022 Oleg Borodin <borodin@unix7.org>
|
||||
*/
|
||||
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <bstream.h>
|
||||
#include <massert.h>
|
||||
|
||||
void test_rwrite(void) {
|
||||
bstream_t stream;
|
||||
bstream_init(&stream);
|
||||
char* data = "_123456789";
|
||||
size_t dsize = strlen(data);
|
||||
ssize_t wsize = 0;
|
||||
|
||||
size_t count = 3;
|
||||
for (size_t i = 0; i < count; i++) {
|
||||
wsize += bstream_write(&stream, data, dsize);
|
||||
}
|
||||
printf("wsize = %ld, data = [%s]\n", wsize, stream.data);
|
||||
|
||||
MASSERT(stream.wpos == dsize * count);
|
||||
MASSERT(wsize == (ssize_t)(dsize * count));
|
||||
|
||||
size_t bsize = bstream_wpos(&stream);
|
||||
char* buf = malloc((size_t)bsize + (size_t)1);
|
||||
memset(buf, 0, (size_t)bsize + (size_t)1);
|
||||
|
||||
ssize_t rsize = bstream_read(&stream, buf, bsize);
|
||||
printf("rsize = %lu, buf = [%s]\n", rsize, buf);
|
||||
|
||||
MASSERT(wsize == (ssize_t)(dsize * count));
|
||||
MASSERT(rsize == wsize);
|
||||
|
||||
bstream_destroy(&stream);
|
||||
}
|
||||
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
(void)argc;
|
||||
(void)argv;
|
||||
test_rwrite();
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,166 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2023 Oleg Borodin <borodin@unix7.org>
|
||||
*
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include <galexer.h>
|
||||
|
||||
#define LTYPE_LETTER 1
|
||||
#define LTYPE_PREFIX 2
|
||||
#define LTYPE_DELIM 3
|
||||
#define LTYPE_EOF 4
|
||||
|
||||
#define LCONTEXT_START 1
|
||||
#define LCONTEXT_WORD 2
|
||||
#define LCONTEXT_DELIM 3
|
||||
#define LCONTEXT_PREFIX 4
|
||||
#define LCONTEXT_ENDFL 5
|
||||
#define LCONTEXT_UNDEF 7
|
||||
|
||||
static int get_ltype(char newletter) {
|
||||
switch (newletter) {
|
||||
case '-':
|
||||
case '+':
|
||||
return LTYPE_PREFIX;
|
||||
case '=':
|
||||
return LTYPE_DELIM;
|
||||
case EOF:
|
||||
return LTYPE_EOF;
|
||||
}
|
||||
return LTYPE_LETTER;
|
||||
}
|
||||
|
||||
void galexer_init(galexer_t* lexer, char* arg) {
|
||||
lexer->arg = arg;
|
||||
lexer->rpos = 0;
|
||||
lexer->tpos = 0;
|
||||
lexer->currcontext = LCONTEXT_START;
|
||||
lexer->newletter = '\0';
|
||||
}
|
||||
|
||||
static void galexer_getletter(galexer_t* lexer, char* arg, int size) {
|
||||
lexer->newletter = EOF;
|
||||
if (lexer->rpos < size) {
|
||||
lexer->newletter = arg[lexer->rpos++];
|
||||
}
|
||||
}
|
||||
|
||||
int galexer_gettok(galexer_t* lexer, char* token) {
|
||||
|
||||
char* arg = lexer->arg;
|
||||
size_t size = strlen(arg);
|
||||
|
||||
if (lexer->currcontext == LCONTEXT_START) {
|
||||
lexer->newletter = arg[lexer->rpos++];
|
||||
int ltype = get_ltype(lexer->newletter);
|
||||
int newcontext = LCONTEXT_ENDFL;
|
||||
switch (ltype) {
|
||||
case LTYPE_PREFIX: {
|
||||
newcontext = LCONTEXT_PREFIX;
|
||||
break;
|
||||
}
|
||||
case LTYPE_DELIM: {
|
||||
newcontext = LCONTEXT_DELIM;
|
||||
break;
|
||||
}
|
||||
case LTYPE_LETTER: {
|
||||
newcontext = LCONTEXT_WORD;
|
||||
break;
|
||||
}
|
||||
case LTYPE_EOF: {
|
||||
newcontext = LCONTEXT_ENDFL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
lexer->currcontext = newcontext;
|
||||
}
|
||||
|
||||
while (lexer->currcontext != LCONTEXT_ENDFL) {
|
||||
|
||||
int ltype = get_ltype(lexer->newletter);
|
||||
|
||||
switch (lexer->currcontext) {
|
||||
case LCONTEXT_ENDFL: {
|
||||
lexer->currcontext = LCONTEXT_ENDFL;
|
||||
break;
|
||||
}
|
||||
case LCONTEXT_DELIM: {
|
||||
int newcontext = lexer->currcontext;
|
||||
switch (ltype) {
|
||||
case LTYPE_PREFIX:
|
||||
case LTYPE_LETTER: {
|
||||
newcontext = LCONTEXT_WORD;
|
||||
break;
|
||||
}
|
||||
case LTYPE_EOF: {
|
||||
newcontext = LCONTEXT_ENDFL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (newcontext != lexer->currcontext) {
|
||||
lexer->currcontext = newcontext;
|
||||
token[lexer->tpos] = '\0';
|
||||
lexer->tpos = 0;
|
||||
return TOKEN_DELIM;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case LCONTEXT_PREFIX: {
|
||||
int newcontext = lexer->currcontext;
|
||||
switch (ltype) {
|
||||
case LTYPE_DELIM: {
|
||||
newcontext = LCONTEXT_DELIM;
|
||||
break;
|
||||
}
|
||||
case LTYPE_LETTER: {
|
||||
newcontext = LCONTEXT_WORD;
|
||||
break;
|
||||
}
|
||||
case LTYPE_EOF: {
|
||||
newcontext = LCONTEXT_ENDFL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (newcontext != lexer->currcontext) {
|
||||
lexer->currcontext = newcontext;
|
||||
token[lexer->tpos++] = '\0';
|
||||
lexer->tpos = 0;
|
||||
return TOKEN_PREF;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case LCONTEXT_WORD: {
|
||||
int newcontext = lexer->currcontext;
|
||||
switch (ltype) {
|
||||
case LTYPE_DELIM: {
|
||||
newcontext = LCONTEXT_DELIM;
|
||||
break;
|
||||
}
|
||||
case LTYPE_EOF: {
|
||||
newcontext = LCONTEXT_ENDFL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (newcontext != lexer->currcontext) {
|
||||
lexer->currcontext = newcontext;
|
||||
token[lexer->tpos] = '\0';
|
||||
lexer->tpos = 0;
|
||||
return TOKEN_WORD;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
token[lexer->tpos++] = lexer->newletter;
|
||||
galexer_getletter(lexer, arg, size);
|
||||
}
|
||||
|
||||
lexer->currcontext = LCONTEXT_ENDFL;
|
||||
lexer->tpos = 0;
|
||||
token[lexer->tpos] = '\0';
|
||||
strcpy(token, "EOF");
|
||||
return TOKEN_ENDF;
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2023 Oleg Borodin <borodin@unix7.org>
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GALEXER_H_QWERTY
|
||||
#define GALEXER_H_QWERTY
|
||||
|
||||
#define TOKEN_NULL 1
|
||||
#define TOKEN_WORD 2
|
||||
#define TOKEN_DELIM 3
|
||||
#define TOKEN_PREF 4
|
||||
#define TOKEN_ENDF 5
|
||||
#define TOKEN_SPACE 6
|
||||
|
||||
|
||||
typedef struct {
|
||||
char* arg;
|
||||
int currcontext;
|
||||
int argn;
|
||||
int rpos;
|
||||
int tpos;
|
||||
char newletter;
|
||||
} galexer_t;
|
||||
|
||||
void galexer_init(galexer_t* lexer, char* arg);
|
||||
int galexer_gettok(galexer_t* lexer, char* token);
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2023 Oleg Borodin <borodin@unix7.org>
|
||||
*
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include <galexer.h>
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
(void)argc;
|
||||
(void)argv;
|
||||
|
||||
char* arg = "--qwerty=-num-12345";
|
||||
|
||||
galexer_t lex;
|
||||
galexer_init(&lex, arg);
|
||||
|
||||
char token[1024];
|
||||
int toktype = TOKEN_NULL;
|
||||
int i = 0;
|
||||
while (toktype != TOKEN_ENDF) {
|
||||
toktype = galexer_gettok(&lex, token);
|
||||
printf("%d: %d [%s]\n", i, toktype, token);
|
||||
i++;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2023 Oleg Borodin <borodin@unix7.org>
|
||||
*
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include <galexer.h>
|
||||
#include <gclexer.h>
|
||||
|
||||
void gclexer_init(gclexer_t* lexer, char** argv, int argc) {
|
||||
lexer->argv = argv;
|
||||
lexer->argc = argc;
|
||||
lexer->argn = 1;
|
||||
if (lexer->argc > lexer->argn) {
|
||||
galexer_init(&(lexer->alex), lexer->argv[lexer->argn]);
|
||||
}
|
||||
}
|
||||
|
||||
int gclexer_gettok(gclexer_t* lexer, char* token) {
|
||||
|
||||
if (lexer->argn >= lexer->argc) {
|
||||
strcpy(token, "EOF");
|
||||
return TOKEN_ENDF;
|
||||
}
|
||||
|
||||
int toktype = galexer_gettok(&(lexer->alex), token);
|
||||
if (toktype == TOKEN_ENDF && lexer->argn != lexer->argc) {
|
||||
lexer->argn++;
|
||||
galexer_init(&(lexer->alex), lexer->argv[lexer->argn]);
|
||||
strcpy(token, "space");
|
||||
return TOKEN_SPACE;
|
||||
}
|
||||
return toktype;
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2023 Oleg Borodin <borodin@unix7.org>
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GCLEXER_H_QWERTY
|
||||
#define GCLEXER_H_QWERTY
|
||||
|
||||
//#include <string.h>
|
||||
//#include <stdbool.h>
|
||||
//#include <stdio.h>
|
||||
|
||||
#include <galexer.h>
|
||||
|
||||
typedef struct {
|
||||
char** argv;
|
||||
int argc;
|
||||
int argn;
|
||||
galexer_t alex;
|
||||
} gclexer_t;
|
||||
|
||||
void gclexer_init(gclexer_t* lexer, char** argv, int argc);
|
||||
int gclexer_gettok(gclexer_t* lexer, char* token);
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,34 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2023 Oleg Borodin <borodin@unix7.org>
|
||||
*
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include <galexer.h>
|
||||
#include <gclexer.h>
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
(void)argc;
|
||||
(void)argv;
|
||||
|
||||
char*_argv[] = { argv[0], "--qwerty=-num12345", "--foo=-bar" };
|
||||
int _argc = 2;
|
||||
|
||||
gclexer_t lex;
|
||||
gclexer_init(&lex, _argv, _argc);
|
||||
|
||||
char token[1024];
|
||||
int toktype = TOKEN_NULL;
|
||||
int i = 0;
|
||||
while (toktype != TOKEN_ENDF) {
|
||||
toktype = gclexer_gettok(&lex, token);
|
||||
printf("%d: %d [%s]\n", i, toktype, token);
|
||||
i++;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
/*
|
||||
* Copyright 2022 Oleg Borodin <borodin@unix7.org>
|
||||
*/
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <massert.h>
|
||||
|
||||
void x__assert (char* path, int line, const char* func) {
|
||||
printf("%s:%d: assert error in %s\n", path, line, func);
|
||||
exit(1);
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
/*
|
||||
* Copyright 2022 Oleg Borodin <borodin@unix7.org>
|
||||
*/
|
||||
|
||||
|
||||
#ifndef MASSERT_H_QWERTY
|
||||
#define MASSERT_H_QWERTY
|
||||
|
||||
#define massert(expr) if (!(expr)) \
|
||||
{ x__assert(__FILE__, __LINE__, (const char*)__func__); }
|
||||
|
||||
#define MASSERT(expr) if (!(expr)) \
|
||||
{ x__assert(__FILE__, __LINE__, (const char*)__func__); }
|
||||
|
||||
void x__assert (char* path, int line, const char* func);
|
||||
#endif
|
||||
@@ -0,0 +1,125 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2023 Oleg Borodin <borodin@unix7.org>
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdbool.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include <tclexer.h>
|
||||
#include <tccomp.h>
|
||||
#include <vmapper.h>
|
||||
|
||||
#define RES_OK 0
|
||||
#define RES_ERR -1
|
||||
|
||||
#define POS1TYPE TOKEN_WORD
|
||||
#define POS2TYPE TOKEN_OPER
|
||||
#define POS3TYPE TOKEN_WORD
|
||||
#define POS4TYPE TOKEN_COMM
|
||||
|
||||
static char* strcopy(char* src) {
|
||||
size_t srcsize = strlen(src) + 1;
|
||||
char* dst = malloc(srcsize);
|
||||
memset(dst, '\0', srcsize);
|
||||
strcpy(dst, src);
|
||||
return dst;
|
||||
}
|
||||
|
||||
tccomp_t * new_tccomp(tclexer_t * lexer, vmapper_t* vmapper) {
|
||||
tccomp_t *comp = malloc(sizeof(tccomp_t));
|
||||
if (comp == NULL) return NULL;
|
||||
comp->lexer = lexer;
|
||||
comp->vmapper = vmapper;
|
||||
comp->pos = 0;
|
||||
comp->lnum = 0;
|
||||
return comp;
|
||||
}
|
||||
|
||||
|
||||
void tccomp_init(tccomp_t * comp, tclexer_t * lexer, vmapper_t* vmapper) {
|
||||
comp->lexer = lexer;
|
||||
comp->vmapper = vmapper;
|
||||
comp->pos = 0;
|
||||
comp->lnum = 0;
|
||||
}
|
||||
|
||||
int tccomp_parse(tccomp_t * comp) {
|
||||
char token[MAX_TOK_SIZE];
|
||||
int toktype = -1;
|
||||
tclexer_t* lexer = comp->lexer;
|
||||
char* key = NULL;
|
||||
char* val = NULL;
|
||||
|
||||
while (true) {
|
||||
toktype = tclexer_get_token(lexer, token, MAX_TOK_SIZE);
|
||||
if (toktype == TOKEN_SPACE) {
|
||||
continue;
|
||||
}
|
||||
if (toktype == TOKEN_COMM) {
|
||||
continue;
|
||||
}
|
||||
//printf("tok=%d pos=%d line=%d [%s]\n", toktype, comp->pos, comp->lnum, token);
|
||||
|
||||
if (toktype == TOKEN_NEWLN) {
|
||||
comp->lnum++;
|
||||
}
|
||||
|
||||
switch (comp->pos) {
|
||||
case 0: {
|
||||
if (toktype == TOKEN_NEWLN) {
|
||||
comp->pos = 0;
|
||||
break;
|
||||
}
|
||||
if (toktype != TOKEN_WORD) {
|
||||
return -1;
|
||||
}
|
||||
comp->pos++;
|
||||
key = strcopy(token);
|
||||
break;
|
||||
}
|
||||
case 1: {
|
||||
if (toktype != TOKEN_OPER) {
|
||||
return -1;
|
||||
}
|
||||
comp->pos++;
|
||||
break;
|
||||
}
|
||||
case 2: {
|
||||
if (toktype != TOKEN_WORD) {
|
||||
return -1;
|
||||
}
|
||||
comp->pos++;
|
||||
val = strcopy(token);
|
||||
break;
|
||||
}
|
||||
case 3: {
|
||||
if (toktype != TOKEN_NEWLN && toktype != TOKEN_ENDFL) {
|
||||
return -1;
|
||||
}
|
||||
comp->pos = 0;
|
||||
//printf("keyval = [%s], [%s]\n", key, val);
|
||||
vmapper_set(comp->vmapper, key, val);
|
||||
free(key);
|
||||
free(val);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (toktype == TOKEN_ENDFL) break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void tccomp_destroy(tccomp_t* comp) {
|
||||
(void)comp;
|
||||
}
|
||||
|
||||
void tccomp_free(tccomp_t* comp) {
|
||||
free(comp);
|
||||
}
|
||||
@@ -0,0 +1,125 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2023 Oleg Borodin <borodin@unix7.org>
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdbool.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include <tclexer.h>
|
||||
#include <tccomp.h>
|
||||
#include <vmapper.h>
|
||||
|
||||
#define RES_OK 0
|
||||
#define RES_ERR -1
|
||||
|
||||
#define POS1TYPE TOKEN_WORD
|
||||
#define POS2TYPE TOKEN_OPER
|
||||
#define POS3TYPE TOKEN_WORD
|
||||
#define POS4TYPE TOKEN_COMM
|
||||
|
||||
static char* strcopy(char* src) {
|
||||
size_t srcsize = strlen(src) + 1;
|
||||
char* dst = malloc(srcsize);
|
||||
memset(dst, '\0', srcsize);
|
||||
strcpy(dst, src);
|
||||
return dst;
|
||||
}
|
||||
|
||||
tccomp_t * new_tccomp(tclexer_t * lexer, vmapper_t* vmapper) {
|
||||
tccomp_t *comp = malloc(sizeof(tccomp_t));
|
||||
if (comp == NULL) return NULL;
|
||||
comp->lexer = lexer;
|
||||
comp->vmapper = vmapper;
|
||||
comp->pos = 0;
|
||||
comp->lnum = 0;
|
||||
return comp;
|
||||
}
|
||||
|
||||
|
||||
void tccomp_init(tccomp_t * comp, tclexer_t * lexer, vmapper_t* vmapper) {
|
||||
comp->lexer = lexer;
|
||||
comp->vmapper = vmapper;
|
||||
comp->pos = 0;
|
||||
comp->lnum = 0;
|
||||
}
|
||||
|
||||
int tccomp_parse(tccomp_t * comp) {
|
||||
char token[MAX_TOK_SIZE];
|
||||
int toktype = -1;
|
||||
tclexer_t* lexer = comp->lexer;
|
||||
char* key = NULL;
|
||||
char* val = NULL;
|
||||
|
||||
while (true) {
|
||||
toktype = tclexer_get_token(lexer, token, MAX_TOK_SIZE);
|
||||
if (toktype == TOKEN_SPACE) {
|
||||
continue;
|
||||
}
|
||||
if (toktype == TOKEN_COMM) {
|
||||
continue;
|
||||
}
|
||||
//printf("tok=%d pos=%d line=%d [%s]\n", toktype, comp->pos, comp->lnum, token);
|
||||
|
||||
if (toktype == TOKEN_NEWLN) {
|
||||
comp->lnum++;
|
||||
}
|
||||
|
||||
switch (comp->pos) {
|
||||
case 0: {
|
||||
if (toktype == TOKEN_NEWLN) {
|
||||
comp->pos = 0;
|
||||
break;
|
||||
}
|
||||
if (toktype != TOKEN_WORD) {
|
||||
return -1;
|
||||
}
|
||||
comp->pos++;
|
||||
key = strcopy(token);
|
||||
break;
|
||||
}
|
||||
case 1: {
|
||||
if (toktype != TOKEN_OPER) {
|
||||
return -1;
|
||||
}
|
||||
comp->pos++;
|
||||
break;
|
||||
}
|
||||
case 2: {
|
||||
if (toktype != TOKEN_WORD) {
|
||||
return -1;
|
||||
}
|
||||
comp->pos++;
|
||||
val = strcopy(token);
|
||||
break;
|
||||
}
|
||||
case 3: {
|
||||
if (toktype != TOKEN_NEWLN && toktype != TOKEN_ENDFL) {
|
||||
return -1;
|
||||
}
|
||||
comp->pos = 0;
|
||||
printf("keyval = [%s], [%s]\n", key, val);
|
||||
vmapper_set(comp->vmapper, key, val);
|
||||
free(key);
|
||||
free(val);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (toktype == TOKEN_ENDFL) break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void tccomp_destroy(tccomp_t* comp) {
|
||||
(void)comp;
|
||||
}
|
||||
|
||||
void tccomp_free(tccomp_t* comp) {
|
||||
free(comp);
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
/*
|
||||
* Copyright 2023 Oleg Borodin <borodin@unix7.org>
|
||||
*/
|
||||
|
||||
#ifndef TCCOMP_H_QWERTY
|
||||
#define TCCOMP_H_QWERTY
|
||||
|
||||
#include <tclexer.h>
|
||||
#include <vmapper.h>
|
||||
|
||||
typedef struct {
|
||||
tclexer_t* lexer;
|
||||
vmapper_t* vmapper;
|
||||
int pos;
|
||||
int lnum;
|
||||
} tccomp_t;
|
||||
|
||||
tccomp_t * new_tccomp(tclexer_t * lexer, vmapper_t* vmapper);
|
||||
void tccomp_init(tccomp_t* comp, tclexer_t* lexer, vmapper_t* vmapper);
|
||||
int tccomp_parse(tccomp_t* comp);
|
||||
void tccomp_destroy(tccomp_t* comp);
|
||||
void tccomp_free(tccomp_t* comp);
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,72 @@
|
||||
/*
|
||||
* Copyright 2023 Oleg Borodin <borodin@unix7.org>
|
||||
*/
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdbool.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include <bstream.h>
|
||||
#include <tclexer.h>
|
||||
#include <tccomp.h>
|
||||
#include <vmapper.h>
|
||||
#include <massert.h>
|
||||
|
||||
|
||||
int main(void) {
|
||||
|
||||
char* src = "key1 = var1 # comment 1\nkey2 = var2 # comment 2 and 3\n# comment 4\nkey3 = var3";
|
||||
|
||||
bstream_t stream;
|
||||
|
||||
bstream_init(&stream);
|
||||
|
||||
tclexer_t lexer;
|
||||
tclexer_init(&lexer, &stream);
|
||||
|
||||
vmapper_t vmapper;
|
||||
vmapper_init(&vmapper);
|
||||
|
||||
tccomp_t comp;
|
||||
tccomp_init(&comp, &lexer, &vmapper);
|
||||
|
||||
bstream_write(&stream, src, strlen(src));
|
||||
|
||||
int port = 0;
|
||||
bool flag = false;
|
||||
char* ident = NULL;
|
||||
|
||||
vmapper_bind_int(&vmapper, "port", &port);
|
||||
vmapper_bind_string(&vmapper, "ident", &ident);
|
||||
vmapper_bind_bool(&vmapper, "flag", &flag);
|
||||
|
||||
vmapper_set(&vmapper, "port", "12345");
|
||||
vmapper_set(&vmapper, "ident", "qwerty");
|
||||
vmapper_set(&vmapper, "flag", "true");
|
||||
|
||||
int res = tccomp_parse(&comp);
|
||||
|
||||
if (res < 0) {
|
||||
printf("parsing error pos %d line %d\n", comp.pos, comp.lnum);
|
||||
}
|
||||
|
||||
printf("port = %d\n", port);
|
||||
MASSERT(port == 12345);
|
||||
|
||||
printf("ident = %s\n", ident);
|
||||
MASSERT(strcmp(ident, "qwerty") == 0);
|
||||
free(ident);
|
||||
|
||||
printf("flag = %d\n", flag);
|
||||
MASSERT(flag == true);
|
||||
|
||||
tccomp_destroy(&comp);
|
||||
tclexer_destroy(&lexer);
|
||||
vmapper_destroy(&vmapper);
|
||||
bstream_destroy(&stream);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,276 @@
|
||||
/*
|
||||
* Copyright 2023 Oleg Borodin <borodin@unix7.org>
|
||||
*/
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <tclexer.h>
|
||||
|
||||
#define RES_OK 0
|
||||
#define RES_ERR -1
|
||||
|
||||
#define LEXCONT_UNDEF 0
|
||||
#define LEXCONT_WORD 1
|
||||
#define LEXCONT_SPACE 2
|
||||
#define LEXCONT_COMM 3
|
||||
#define LEXCONT_OPER 4
|
||||
#define LEXCONT_ENDFL 5
|
||||
#define LEXCONT_NEWLN 7
|
||||
|
||||
#define LTYPE_SPACE 1
|
||||
#define LTYPE_LETTER 2
|
||||
#define LTYPE_OPER 3
|
||||
#define LTYPE_COMMB 4
|
||||
#define LTYPE_NEWLN 5
|
||||
#define LTYPE_ENDFL 7
|
||||
|
||||
|
||||
static int get_ltype(char letter) {
|
||||
switch (letter) {
|
||||
case '\n':
|
||||
return LTYPE_NEWLN;
|
||||
case ' ':
|
||||
return LTYPE_SPACE;
|
||||
case '#':
|
||||
case ';':
|
||||
return LTYPE_COMMB;
|
||||
case '=':
|
||||
return LTYPE_OPER;
|
||||
case EOF:
|
||||
return LTYPE_ENDFL;
|
||||
}
|
||||
return LTYPE_LETTER;
|
||||
}
|
||||
|
||||
tclexer_t* new_tclexer(bstream_t * stream) {
|
||||
tclexer_t* lexer = malloc(sizeof(tclexer_t));
|
||||
if (lexer == NULL) return NULL;
|
||||
lexer->stream = stream;
|
||||
lexer->context = LEXCONT_UNDEF;
|
||||
return lexer;
|
||||
}
|
||||
|
||||
|
||||
void tclexer_init(tclexer_t * lexer, bstream_t * stream) {
|
||||
lexer->stream = stream;
|
||||
lexer->context = LEXCONT_UNDEF;
|
||||
lexer->pos = 0;
|
||||
}
|
||||
|
||||
int tclexer_get_token(tclexer_t * lexer, char* token, int maxsize) {
|
||||
lexer->pos = 0;
|
||||
|
||||
if (lexer->pos > (maxsize - 1)) {
|
||||
return -2;
|
||||
}
|
||||
|
||||
if (lexer->context == LEXCONT_UNDEF) {
|
||||
lexer->letter = bstream_getc(lexer->stream);
|
||||
}
|
||||
|
||||
while (true) {
|
||||
int ltype = get_ltype(lexer->letter);
|
||||
|
||||
switch (lexer->context) {
|
||||
case LEXCONT_ENDFL:{
|
||||
return TOKEN_ENDFL;
|
||||
}
|
||||
case LEXCONT_WORD:{
|
||||
int newcontext = LEXCONT_WORD;
|
||||
|
||||
switch (ltype) {
|
||||
case LTYPE_SPACE:{
|
||||
newcontext = LEXCONT_SPACE;
|
||||
break;
|
||||
}
|
||||
case LTYPE_NEWLN:{
|
||||
newcontext = LEXCONT_NEWLN;
|
||||
break;
|
||||
}
|
||||
case LTYPE_COMMB:{
|
||||
newcontext = LEXCONT_COMM;
|
||||
break;
|
||||
}
|
||||
case LTYPE_OPER:{
|
||||
newcontext = LEXCONT_OPER;
|
||||
break;
|
||||
}
|
||||
case LTYPE_ENDFL:{
|
||||
newcontext = LEXCONT_ENDFL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (newcontext != lexer->context) {
|
||||
lexer->context = newcontext;
|
||||
token[lexer->pos++] = '\0';
|
||||
return TOKEN_WORD;
|
||||
}
|
||||
token[lexer->pos++] = lexer->letter;
|
||||
break;
|
||||
}
|
||||
case LEXCONT_COMM:{
|
||||
int newcontext = LEXCONT_COMM;
|
||||
|
||||
switch (ltype) {
|
||||
case LTYPE_NEWLN:{
|
||||
newcontext = LEXCONT_NEWLN;
|
||||
break;
|
||||
}
|
||||
case LTYPE_ENDFL:{
|
||||
newcontext = LEXCONT_ENDFL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (newcontext != lexer->context) {
|
||||
token[lexer->pos++] = '\0';
|
||||
lexer->context = newcontext;
|
||||
return TOKEN_COMM;
|
||||
}
|
||||
token[lexer->pos++] = lexer->letter;
|
||||
break;
|
||||
}
|
||||
case LEXCONT_SPACE:{
|
||||
int newcontext = LEXCONT_SPACE;
|
||||
|
||||
switch (ltype) {
|
||||
case LTYPE_OPER:{
|
||||
newcontext = LEXCONT_OPER;
|
||||
break;
|
||||
}
|
||||
case LTYPE_COMMB:{
|
||||
newcontext = LEXCONT_COMM;
|
||||
break;
|
||||
}
|
||||
case LTYPE_LETTER:{
|
||||
newcontext = LEXCONT_WORD;
|
||||
break;
|
||||
}
|
||||
case LTYPE_NEWLN:{
|
||||
newcontext = LEXCONT_NEWLN;
|
||||
break;
|
||||
}
|
||||
case LTYPE_ENDFL:{
|
||||
newcontext = LEXCONT_ENDFL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (newcontext != lexer->context) {
|
||||
lexer->context = newcontext;
|
||||
strcpy(token, "SPACE");
|
||||
return TOKEN_SPACE;
|
||||
}
|
||||
token[lexer->pos++] = lexer->letter;
|
||||
break;
|
||||
}
|
||||
case LEXCONT_OPER:{
|
||||
int newcontext = LEXCONT_OPER;
|
||||
|
||||
switch (ltype) {
|
||||
case LTYPE_SPACE:{
|
||||
newcontext = LEXCONT_SPACE;
|
||||
break;
|
||||
}
|
||||
case LTYPE_NEWLN:{
|
||||
newcontext = LEXCONT_NEWLN;
|
||||
break;
|
||||
}
|
||||
case LTYPE_COMMB:{
|
||||
newcontext = LEXCONT_COMM;
|
||||
break;
|
||||
}
|
||||
case LTYPE_LETTER:{
|
||||
newcontext = LEXCONT_WORD;
|
||||
break;
|
||||
}
|
||||
case LTYPE_ENDFL:{
|
||||
newcontext = LEXCONT_ENDFL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (newcontext != lexer->context) {
|
||||
lexer->context = newcontext;
|
||||
strcpy(token, "=");
|
||||
return TOKEN_OPER;
|
||||
}
|
||||
token[lexer->pos++] = lexer->letter;
|
||||
break;
|
||||
}
|
||||
case LEXCONT_NEWLN:{
|
||||
int newcontext = LEXCONT_NEWLN;
|
||||
|
||||
switch (ltype) {
|
||||
case LTYPE_SPACE:{
|
||||
newcontext = LEXCONT_SPACE;
|
||||
break;
|
||||
}
|
||||
case LTYPE_COMMB:{
|
||||
newcontext = LEXCONT_COMM;
|
||||
break;
|
||||
}
|
||||
case LTYPE_LETTER:{
|
||||
newcontext = LEXCONT_WORD;
|
||||
break;
|
||||
}
|
||||
case LTYPE_ENDFL:{
|
||||
newcontext = LEXCONT_ENDFL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (newcontext != lexer->context) {
|
||||
lexer->context = newcontext;
|
||||
strcpy(token, "NL");
|
||||
return TOKEN_NEWLN;
|
||||
}
|
||||
token[lexer->pos++] = lexer->letter;
|
||||
break;
|
||||
}
|
||||
|
||||
case LEXCONT_UNDEF:
|
||||
default:{
|
||||
int newcontext = LEXCONT_UNDEF;
|
||||
switch (ltype) {
|
||||
case LTYPE_SPACE:{
|
||||
newcontext = LEXCONT_SPACE;
|
||||
break;
|
||||
}
|
||||
case LTYPE_NEWLN:{
|
||||
newcontext = LEXCONT_NEWLN;
|
||||
break;
|
||||
}
|
||||
case LTYPE_COMMB:{
|
||||
newcontext = LEXCONT_COMM;
|
||||
break;
|
||||
}
|
||||
case LTYPE_LETTER:{
|
||||
newcontext = LEXCONT_WORD;
|
||||
break;
|
||||
}
|
||||
case LTYPE_OPER:{
|
||||
newcontext = LEXCONT_OPER;
|
||||
break;
|
||||
}
|
||||
case LTYPE_ENDFL:{
|
||||
newcontext = LEXCONT_ENDFL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
lexer->context = newcontext;
|
||||
token[lexer->pos++] = lexer->letter;
|
||||
break;
|
||||
}
|
||||
}
|
||||
lexer->letter = bstream_getc(lexer->stream);
|
||||
}
|
||||
return TOKEN_ENDFL;
|
||||
}
|
||||
|
||||
void tclexer_destroy(tclexer_t* lexer) {
|
||||
(void)lexer;
|
||||
}
|
||||
|
||||
void tclexer_free(tclexer_t* lexer) {
|
||||
free(lexer);
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
* Copyright 2023 Oleg Borodin <borodin@unix7.org>
|
||||
*/
|
||||
|
||||
#ifndef TCLEXER_H_QWERTY
|
||||
#define TCLEXER_H_QWERTY
|
||||
|
||||
#include <bstream.h>
|
||||
|
||||
typedef struct {
|
||||
bstream_t* stream;
|
||||
int context;
|
||||
char letter;
|
||||
int pos;
|
||||
} tclexer_t;
|
||||
|
||||
#define MAX_TOK_SIZE 1024
|
||||
|
||||
#define TOKEN_NULL 0
|
||||
#define TOKEN_WORD 1
|
||||
#define TOKEN_SPACE 2
|
||||
#define TOKEN_COMM 3
|
||||
#define TOKEN_OPER 4
|
||||
#define TOKEN_ENDFL 5
|
||||
#define TOKEN_NEWLN 7
|
||||
|
||||
tclexer_t* new_tclexer(bstream_t * stream);
|
||||
void tclexer_init(tclexer_t * tclexer, bstream_t * stream);
|
||||
int tclexer_get_token(tclexer_t * tclexer, char* token, int maxsize);
|
||||
void tclexer_destroy(tclexer_t* lexer);
|
||||
void tclexer_free(tclexer_t* lexer);
|
||||
#endif
|
||||
@@ -0,0 +1,37 @@
|
||||
/*
|
||||
* Copyright 2023 Oleg Borodin <borodin@unix7.org>
|
||||
*/
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdbool.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include <bstream.h>
|
||||
#include <tclexer.h>
|
||||
|
||||
int main(void) {
|
||||
|
||||
char* src = " key1 = var1 # comment 1\nkey2 = var2 # comment 2 and 3\n# comment 4\nkey3 = var3";
|
||||
|
||||
bstream_t stream;
|
||||
bstream_init(&stream);
|
||||
bstream_write(&stream, src, strlen(src));
|
||||
|
||||
|
||||
tclexer_t lexer;
|
||||
tclexer_init(&lexer, &stream);
|
||||
|
||||
int token_typ = TOKEN_NULL;
|
||||
char token[MAX_TOK_SIZE];
|
||||
while ((token_typ = tclexer_get_token(&lexer, token, MAX_TOK_SIZE)) != TOKEN_ENDFL) {
|
||||
printf("%d:[%s]\n", token_typ, token);
|
||||
}
|
||||
|
||||
tclexer_destroy(&lexer);
|
||||
bstream_destroy(&stream);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
/*
|
||||
* Copyright 2023 Oleg Borodin <borodin@unix7.org>
|
||||
*/
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include <tclexer.h>
|
||||
#include <tccomp.h>
|
||||
#include <bstream.h>
|
||||
#include <vmapper.h>
|
||||
#include <tconfig.h>
|
||||
|
||||
void tconfig_init(tconfig_t* tconfig) {
|
||||
bstream_init(&(tconfig->stream));
|
||||
vmapper_init(&(tconfig->mapper));
|
||||
tclexer_init(&(tconfig->lexer), &(tconfig->stream));
|
||||
tccomp_init(&(tconfig->comp), &(tconfig->lexer), &(tconfig->mapper));
|
||||
}
|
||||
|
||||
int tconfig_bind(tconfig_t* tconfig, int type, char* name, void* ptr) {
|
||||
vmapper_t* vmapper = &(tconfig->mapper);
|
||||
return vmapper_bind(vmapper, type, name, ptr);
|
||||
}
|
||||
|
||||
ssize_t tconfig_read(tconfig_t* tconfig, char* filename) {
|
||||
bstream_t* stream = &(tconfig->stream);
|
||||
return bstream_fread(stream, filename);
|
||||
}
|
||||
|
||||
int tconfig_parse(tconfig_t* tconfig) {
|
||||
|
||||
return tccomp_parse(&(tconfig->comp));
|
||||
}
|
||||
|
||||
void tconfig_destroy(tconfig_t* tconfig) {
|
||||
tccomp_destroy(&(tconfig->comp));
|
||||
tclexer_destroy(&(tconfig->lexer));
|
||||
bstream_destroy(&(tconfig->stream));
|
||||
vmapper_destroy(&(tconfig->mapper));
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
/*
|
||||
* Copyright 2023 Oleg Borodin <borodin@unix7.org>
|
||||
*/
|
||||
|
||||
#ifndef TCONFIG_H_QWERTY
|
||||
#define TCONFIG_H_QWERTY
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include <tclexer.h>
|
||||
#include <tccomp.h>
|
||||
#include <bstream.h>
|
||||
|
||||
typedef struct {
|
||||
bstream_t stream;
|
||||
tclexer_t lexer;
|
||||
tccomp_t comp;
|
||||
vmapper_t mapper;
|
||||
} tconfig_t;
|
||||
|
||||
#define TCONF_STR MAPPER_STR
|
||||
#define TCONF_INT MAPPER_INT
|
||||
#define TCONF_BOOL MAPPER_BOOL
|
||||
|
||||
void tconfig_init(tconfig_t* tconfig);
|
||||
int tconfig_bind(tconfig_t* tconfig, int type, char* name, void* ptr);
|
||||
ssize_t tconfig_read(tconfig_t* tconfig, char* filename);
|
||||
int tconfig_parse(tconfig_t* tconfig);
|
||||
void tconfig_destroy(tconfig_t* tconfig);
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,27 @@
|
||||
/*
|
||||
* Copyright 2023 Oleg Borodin <borodin@unix7.org>
|
||||
*/
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include <tclexer.h>
|
||||
#include <tccomp.h>
|
||||
#include <bstream.h>
|
||||
|
||||
typedef struct {
|
||||
bstream_t stream;
|
||||
tclexer_t lexer;
|
||||
tccomp_t comp;
|
||||
vmapper_t mapper;
|
||||
} tconfig_t;
|
||||
|
||||
#define TCONF_STR MAPPER_STR
|
||||
#define TCONF_INT MAPPER_INT
|
||||
#define TCONF_BOOL MAPPER_BOOL
|
||||
|
||||
void tconfig_init(tconfig_t* tconfig);
|
||||
int tconfig_bind(tconfig_t* tconfig, int type, char* name, void* ptr);
|
||||
ssize_t tconfig_read(tconfig_t* tconfig, char* filename);
|
||||
int tconfig_parse(tconfig_t* tconfig);
|
||||
void tconfig_destroy(tconfig_t* tconfig);
|
||||
@@ -0,0 +1,39 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2023 Oleg Borodin <borodin@unix7.org>
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
#include <fcntl.h>
|
||||
#include <tconfig.h>
|
||||
#include <massert.h>
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
(void)argc;
|
||||
(void)argv;
|
||||
|
||||
|
||||
tconfig_t tconfig;
|
||||
tconfig_init(&tconfig);
|
||||
|
||||
int intkey = 0;
|
||||
char* strkey = NULL;
|
||||
|
||||
tconfig_bind(&tconfig, TCONF_INT, "intkey", &intkey);
|
||||
tconfig_bind(&tconfig, TCONF_STR, "strkey", &strkey);
|
||||
|
||||
ssize_t rsize = tconfig_read(&tconfig, "test.conf");
|
||||
printf("%ld\n", rsize);
|
||||
MASSERT(rsize > 0);
|
||||
|
||||
int res = tconfig_parse(&tconfig);
|
||||
MASSERT(res == -1);
|
||||
|
||||
tconfig_destroy(&tconfig);
|
||||
|
||||
printf("int key = %d\n", intkey);
|
||||
printf("str key = %s\n", strkey);
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
# comment
|
||||
intkey = 123456
|
||||
strkey =qwerty
|
||||
#EOF
|
||||
|
||||
|
||||
@@ -0,0 +1,197 @@
|
||||
/*
|
||||
* Copyright 2023 Oleg Borodin <borodin@unix7.org>
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <vmapper.h>
|
||||
|
||||
static char* copystr(char* src) {
|
||||
size_t srcsize = strlen(src) + 1;
|
||||
char* dest = malloc(srcsize);
|
||||
memset(dest, '\0', srcsize);
|
||||
strcpy(dest, src);
|
||||
return dest;
|
||||
}
|
||||
|
||||
|
||||
|
||||
static mlink_t* new_mlink_string(char* name, char** val) {
|
||||
mlink_t* mlink = malloc(sizeof(mlink_t));
|
||||
mlink->name = name;
|
||||
mlink->vptr = (void*)val;
|
||||
mlink->type = MAPPER_STR;
|
||||
return mlink;
|
||||
}
|
||||
|
||||
static mlink_t* new_mlink_integer(char* name, int* val) {
|
||||
mlink_t* mlink = malloc(sizeof(mlink_t));
|
||||
mlink->name = name;
|
||||
mlink->vptr = (void*)val;
|
||||
mlink->type = MAPPER_INT;
|
||||
return mlink;
|
||||
}
|
||||
|
||||
static mlink_t* new_mlink_bool(char* name, bool* val) {
|
||||
mlink_t* mlink = malloc(sizeof(mlink_t));
|
||||
mlink->name = name;
|
||||
mlink->vptr = (void*)val;
|
||||
mlink->type = MAPPER_BOOL;
|
||||
return mlink;
|
||||
}
|
||||
|
||||
|
||||
#define MAPPER_INITCAPA 64
|
||||
|
||||
|
||||
vmapper_t* new_vmapper(void) {
|
||||
vmapper_t* vmapper = malloc(sizeof(vmapper_t));
|
||||
if (vmapper == NULL) return NULL;
|
||||
vmapper->mlinks = malloc(sizeof(mlink_t) * MAPPER_INITCAPA);
|
||||
vmapper->capa = MAPPER_INITCAPA;
|
||||
vmapper->size = 0;
|
||||
vmapper->err = false;
|
||||
vmapper->errstr = NULL;
|
||||
return vmapper;
|
||||
}
|
||||
|
||||
|
||||
void vmapper_init(vmapper_t* vmapper) {
|
||||
vmapper->mlinks = malloc(sizeof(mlink_t) * MAPPER_INITCAPA);
|
||||
vmapper->capa = MAPPER_INITCAPA;
|
||||
vmapper->size = 0;
|
||||
vmapper->err = false;
|
||||
vmapper->errstr = NULL;
|
||||
return;
|
||||
}
|
||||
|
||||
#define RES_BIND_OK ((int)0)
|
||||
#define RES_BIND_ERR ((int)-1)
|
||||
|
||||
int vmapper_check_capa(vmapper_t* vmapper) {
|
||||
if (vmapper->size == vmapper->capa) {
|
||||
size_t newcapa = vmapper->capa * 2;
|
||||
mlink_t** newmlinks = realloc(vmapper->mlinks, newcapa);
|
||||
if (newmlinks == NULL) return RES_BIND_ERR;
|
||||
vmapper->mlinks = newmlinks;
|
||||
vmapper->capa = newcapa;
|
||||
}
|
||||
return RES_BIND_OK;
|
||||
}
|
||||
|
||||
int vmapper_bind_string(vmapper_t* vmapper, char* name, char** val) {
|
||||
int res = 0;
|
||||
if ((res = vmapper_check_capa(vmapper)) != RES_BIND_OK) {
|
||||
return res;
|
||||
}
|
||||
mlink_t* mlink = new_mlink_string(name, val);
|
||||
vmapper->mlinks[vmapper->size] = mlink;
|
||||
vmapper->size++;
|
||||
return RES_BIND_OK;
|
||||
}
|
||||
|
||||
int vmapper_bind_int(vmapper_t* vmapper, char* name, int* val) {
|
||||
int res = 0;
|
||||
if ((res = vmapper_check_capa(vmapper)) != RES_BIND_OK) {
|
||||
return res;
|
||||
}
|
||||
mlink_t* mlink = new_mlink_integer(name, val);
|
||||
vmapper->mlinks[vmapper->size] = mlink;
|
||||
vmapper->size++;
|
||||
return RES_BIND_OK;
|
||||
}
|
||||
|
||||
|
||||
int vmapper_bind_bool(vmapper_t* vmapper, char* name, bool* val) {
|
||||
int res = 0;
|
||||
if ((res = vmapper_check_capa(vmapper)) != RES_BIND_OK) {
|
||||
return res;
|
||||
}
|
||||
mlink_t* mlink = new_mlink_bool(name, val);
|
||||
vmapper->mlinks[vmapper->size] = mlink;
|
||||
vmapper->size++;
|
||||
return RES_BIND_OK;
|
||||
}
|
||||
|
||||
int vmapper_set_int(vmapper_t* vmapper, char* key, char* val) {
|
||||
for (size_t i = 0; i < vmapper->size; i++) {
|
||||
mlink_t* mlink = vmapper->mlinks[i];
|
||||
if (mlink->type == MAPPER_INT && strcmp(mlink->name, key) == 0) {
|
||||
char* eptr = NULL;
|
||||
*(int*)(mlink->vptr) = (int)strtol(val, &eptr, 10);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int vmapper_set_string(vmapper_t* vmapper, char* key, char* val) {
|
||||
for (size_t i = 0; i < vmapper->size; i++) {
|
||||
mlink_t* mlink = vmapper->mlinks[i];
|
||||
if (mlink->type == MAPPER_STR && strcmp(mlink->name, key) == 0) {
|
||||
*(char**)(mlink->vptr) = copystr(val);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int vmapper_set_bool(vmapper_t* vmapper, char* key, char* val) {
|
||||
for (size_t i = 0; i < vmapper->size; i++) {
|
||||
mlink_t* mlink = vmapper->mlinks[i];
|
||||
if (mlink->type == MAPPER_BOOL && strcmp(mlink->name, key) == 0) {
|
||||
if (strcmp(val, "true") == 0) {
|
||||
*(bool*)(mlink->vptr) = true;
|
||||
}
|
||||
if (strcmp(val, "false") == 0) {
|
||||
*(bool*)(mlink->vptr) = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int vmapper_bind(vmapper_t* vmapper, int type, char* name, void* val) {
|
||||
switch (type) {
|
||||
case MAPPER_STR: {
|
||||
return vmapper_bind_string(vmapper, name, (char**)val);
|
||||
}
|
||||
case MAPPER_INT: {
|
||||
return vmapper_bind_int(vmapper, name, (int*)val);
|
||||
}
|
||||
case MAPPER_BOOL: {
|
||||
return vmapper_bind_bool(vmapper, name, (bool*)val);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int vmapper_set(vmapper_t* vmapper, char* key, char* val) {
|
||||
vmapper_set_int(vmapper, key, val);
|
||||
vmapper_set_string(vmapper, key, val);
|
||||
vmapper_set_bool(vmapper, key, val);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void vmapper_destroy(vmapper_t* vmapper) {
|
||||
if (vmapper != NULL) {
|
||||
for (size_t i = 0; i < vmapper->size; i++) {
|
||||
free(vmapper->mlinks[i]);
|
||||
}
|
||||
free(vmapper->mlinks);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
void vmapper_free(vmapper_t* vmapper) {
|
||||
if (vmapper != NULL) {
|
||||
for (size_t i = 0; i < vmapper->size; i++) {
|
||||
free(vmapper->mlinks[i]);
|
||||
}
|
||||
free(vmapper->mlinks);
|
||||
}
|
||||
free(vmapper);
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
/*
|
||||
* Copyright 2023 Oleg Borodin <borodin@unix7.org>
|
||||
*/
|
||||
|
||||
#ifndef MAPPER_H_QWERTY
|
||||
#define MAPPER_H_QWERTY
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
|
||||
typedef struct {
|
||||
char* name;
|
||||
int type;
|
||||
void* vptr;
|
||||
} mlink_t;
|
||||
|
||||
#define MAPPER_STR 1
|
||||
#define MAPPER_INT 2
|
||||
#define MAPPER_BOOL 3
|
||||
|
||||
typedef struct {
|
||||
mlink_t** mlinks;
|
||||
size_t size;
|
||||
size_t capa;
|
||||
bool err;
|
||||
char* errstr;
|
||||
} vmapper_t;
|
||||
|
||||
vmapper_t* new_vmapper(void);
|
||||
void vmapper_init(vmapper_t* vmapper);
|
||||
int vmapper_check_capa(vmapper_t* vmapper);
|
||||
int vmapper_bind_string(vmapper_t* vmapper, char* name, char** val);
|
||||
int vmapper_bind_int(vmapper_t* vmapper, char* name, int* val);
|
||||
int vmapper_bind_bool(vmapper_t* vmapper, char* name, bool* val);
|
||||
|
||||
int vmapper_set_int(vmapper_t* vmapper, char* key, char* val);
|
||||
int vmapper_set_string(vmapper_t* vmapper, char* key, char* val);
|
||||
int vmapper_set_bool(vmapper_t* vmapper, char* key, char* val);
|
||||
|
||||
int vmapper_set(vmapper_t* vmapper, char* key, char* val);
|
||||
int vmapper_bind(vmapper_t* vmapper, int type, char* name, void* val);
|
||||
|
||||
void vmapper_destroy(vmapper_t* vmapper);
|
||||
void vmapper_free(vmapper_t* vmapper);
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,45 @@
|
||||
/*
|
||||
* Copyright 2023 Oleg Borodin <borodin@unix7.org>
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <vmapper.h>
|
||||
#include <massert.h>
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
(void)argc;
|
||||
(void)argv;
|
||||
|
||||
vmapper_t vmapper;
|
||||
vmapper_init(&vmapper);
|
||||
|
||||
int port = 0;
|
||||
bool flag = false;
|
||||
char* ident = NULL;
|
||||
|
||||
vmapper_bind_int(&vmapper, "port", &port);
|
||||
vmapper_bind_string(&vmapper, "ident", &ident);
|
||||
vmapper_bind_bool(&vmapper, "flag", &flag);
|
||||
|
||||
vmapper_set(&vmapper, "port", "12345");
|
||||
vmapper_set(&vmapper, "ident", "qwerty");
|
||||
vmapper_set(&vmapper, "flag", "true");
|
||||
|
||||
printf("port = %d\n", port);
|
||||
MASSERT(port = 12345);
|
||||
|
||||
printf("ident = %s\n", ident);
|
||||
MASSERT(strcmp(ident, "qwerty") == 0);
|
||||
free(ident);
|
||||
|
||||
printf("flag = %d\n", flag);
|
||||
MASSERT(flag = true);
|
||||
|
||||
vmapper_destroy(&vmapper);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
/*
|
||||
* Copyright 2025 Oleg Borodin <onborodin@gmail.com>
|
||||
*
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
int logger_init(void) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
void logger_dprintf(char* message, ...) {
|
||||
printf("debug: ");
|
||||
va_list argptr;
|
||||
va_start(argptr, message);
|
||||
vprintf(message, argptr);
|
||||
va_end(argptr);
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
void logger_iprintf(char* message, ...) {
|
||||
printf("info: ");
|
||||
va_list argptr;
|
||||
va_start(argptr, message);
|
||||
vprintf(message, argptr);
|
||||
va_end(argptr);
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
void logger_wprintf(char* message, ...) {
|
||||
printf("warning: ");
|
||||
va_list argptr;
|
||||
va_start(argptr, message);
|
||||
vprintf(message, argptr);
|
||||
va_end(argptr);
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
|
||||
#ifndef LOGGER_H_QWERTY
|
||||
#define LOGGER_H_QWERTY
|
||||
|
||||
int logger_init(void);
|
||||
void logger_dprintf(char* message, ...);
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,215 @@
|
||||
#! /bin/sh
|
||||
# Common wrapper for a few potentially missing GNU programs.
|
||||
|
||||
scriptversion=2018-03-07.03; # UTC
|
||||
|
||||
# Copyright (C) 1996-2021 Free Software Foundation, Inc.
|
||||
# Originally written by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
|
||||
|
||||
# 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, 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 program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
# configuration script generated by Autoconf, you may include it under
|
||||
# the same distribution terms that you use for the rest of that program.
|
||||
|
||||
if test $# -eq 0; then
|
||||
echo 1>&2 "Try '$0 --help' for more information"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
case $1 in
|
||||
|
||||
--is-lightweight)
|
||||
# Used by our autoconf macros to check whether the available missing
|
||||
# script is modern enough.
|
||||
exit 0
|
||||
;;
|
||||
|
||||
--run)
|
||||
# Back-compat with the calling convention used by older automake.
|
||||
shift
|
||||
;;
|
||||
|
||||
-h|--h|--he|--hel|--help)
|
||||
echo "\
|
||||
$0 [OPTION]... PROGRAM [ARGUMENT]...
|
||||
|
||||
Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due
|
||||
to PROGRAM being missing or too old.
|
||||
|
||||
Options:
|
||||
-h, --help display this help and exit
|
||||
-v, --version output version information and exit
|
||||
|
||||
Supported PROGRAM values:
|
||||
aclocal autoconf autoheader autom4te automake makeinfo
|
||||
bison yacc flex lex help2man
|
||||
|
||||
Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and
|
||||
'g' are ignored when checking the name.
|
||||
|
||||
Send bug reports to <bug-automake@gnu.org>."
|
||||
exit $?
|
||||
;;
|
||||
|
||||
-v|--v|--ve|--ver|--vers|--versi|--versio|--version)
|
||||
echo "missing $scriptversion (GNU Automake)"
|
||||
exit $?
|
||||
;;
|
||||
|
||||
-*)
|
||||
echo 1>&2 "$0: unknown '$1' option"
|
||||
echo 1>&2 "Try '$0 --help' for more information"
|
||||
exit 1
|
||||
;;
|
||||
|
||||
esac
|
||||
|
||||
# Run the given program, remember its exit status.
|
||||
"$@"; st=$?
|
||||
|
||||
# If it succeeded, we are done.
|
||||
test $st -eq 0 && exit 0
|
||||
|
||||
# Also exit now if we it failed (or wasn't found), and '--version' was
|
||||
# passed; such an option is passed most likely to detect whether the
|
||||
# program is present and works.
|
||||
case $2 in --version|--help) exit $st;; esac
|
||||
|
||||
# Exit code 63 means version mismatch. This often happens when the user
|
||||
# tries to use an ancient version of a tool on a file that requires a
|
||||
# minimum version.
|
||||
if test $st -eq 63; then
|
||||
msg="probably too old"
|
||||
elif test $st -eq 127; then
|
||||
# Program was missing.
|
||||
msg="missing on your system"
|
||||
else
|
||||
# Program was found and executed, but failed. Give up.
|
||||
exit $st
|
||||
fi
|
||||
|
||||
perl_URL=https://www.perl.org/
|
||||
flex_URL=https://github.com/westes/flex
|
||||
gnu_software_URL=https://www.gnu.org/software
|
||||
|
||||
program_details ()
|
||||
{
|
||||
case $1 in
|
||||
aclocal|automake)
|
||||
echo "The '$1' program is part of the GNU Automake package:"
|
||||
echo "<$gnu_software_URL/automake>"
|
||||
echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:"
|
||||
echo "<$gnu_software_URL/autoconf>"
|
||||
echo "<$gnu_software_URL/m4/>"
|
||||
echo "<$perl_URL>"
|
||||
;;
|
||||
autoconf|autom4te|autoheader)
|
||||
echo "The '$1' program is part of the GNU Autoconf package:"
|
||||
echo "<$gnu_software_URL/autoconf/>"
|
||||
echo "It also requires GNU m4 and Perl in order to run:"
|
||||
echo "<$gnu_software_URL/m4/>"
|
||||
echo "<$perl_URL>"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
give_advice ()
|
||||
{
|
||||
# Normalize program name to check for.
|
||||
normalized_program=`echo "$1" | sed '
|
||||
s/^gnu-//; t
|
||||
s/^gnu//; t
|
||||
s/^g//; t'`
|
||||
|
||||
printf '%s\n' "'$1' is $msg."
|
||||
|
||||
configure_deps="'configure.ac' or m4 files included by 'configure.ac'"
|
||||
case $normalized_program in
|
||||
autoconf*)
|
||||
echo "You should only need it if you modified 'configure.ac',"
|
||||
echo "or m4 files included by it."
|
||||
program_details 'autoconf'
|
||||
;;
|
||||
autoheader*)
|
||||
echo "You should only need it if you modified 'acconfig.h' or"
|
||||
echo "$configure_deps."
|
||||
program_details 'autoheader'
|
||||
;;
|
||||
automake*)
|
||||
echo "You should only need it if you modified 'Makefile.am' or"
|
||||
echo "$configure_deps."
|
||||
program_details 'automake'
|
||||
;;
|
||||
aclocal*)
|
||||
echo "You should only need it if you modified 'acinclude.m4' or"
|
||||
echo "$configure_deps."
|
||||
program_details 'aclocal'
|
||||
;;
|
||||
autom4te*)
|
||||
echo "You might have modified some maintainer files that require"
|
||||
echo "the 'autom4te' program to be rebuilt."
|
||||
program_details 'autom4te'
|
||||
;;
|
||||
bison*|yacc*)
|
||||
echo "You should only need it if you modified a '.y' file."
|
||||
echo "You may want to install the GNU Bison package:"
|
||||
echo "<$gnu_software_URL/bison/>"
|
||||
;;
|
||||
lex*|flex*)
|
||||
echo "You should only need it if you modified a '.l' file."
|
||||
echo "You may want to install the Fast Lexical Analyzer package:"
|
||||
echo "<$flex_URL>"
|
||||
;;
|
||||
help2man*)
|
||||
echo "You should only need it if you modified a dependency" \
|
||||
"of a man page."
|
||||
echo "You may want to install the GNU Help2man package:"
|
||||
echo "<$gnu_software_URL/help2man/>"
|
||||
;;
|
||||
makeinfo*)
|
||||
echo "You should only need it if you modified a '.texi' file, or"
|
||||
echo "any other file indirectly affecting the aspect of the manual."
|
||||
echo "You might want to install the Texinfo package:"
|
||||
echo "<$gnu_software_URL/texinfo/>"
|
||||
echo "The spurious makeinfo call might also be the consequence of"
|
||||
echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might"
|
||||
echo "want to install GNU make:"
|
||||
echo "<$gnu_software_URL/make/>"
|
||||
;;
|
||||
*)
|
||||
echo "You might have modified some files without having the proper"
|
||||
echo "tools for further handling them. Check the 'README' file, it"
|
||||
echo "often tells you about the needed prerequisites for installing"
|
||||
echo "this package. You may also peek at any GNU archive site, in"
|
||||
echo "case some other package contains this missing '$1' program."
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
give_advice "$1" | sed -e '1s/^/WARNING: /' \
|
||||
-e '2,$s/^/ /' >&2
|
||||
|
||||
# Propagate the correct exit status (expected to be 127 for a program
|
||||
# not found, 63 for a program that failed due to version mismatch).
|
||||
exit $st
|
||||
|
||||
# Local variables:
|
||||
# eval: (add-hook 'before-save-hook 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-time-zone: "UTC0"
|
||||
# time-stamp-end: "; # UTC"
|
||||
# End:
|
||||
@@ -0,0 +1,41 @@
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <logger.h>
|
||||
#include <tconfig.h>
|
||||
#include <massert.h>
|
||||
|
||||
|
||||
int server_init(void) {
|
||||
logger_dprintf("server init");
|
||||
return 0;
|
||||
}
|
||||
|
||||
int server_config(void) {
|
||||
logger_dprintf("server config");
|
||||
|
||||
tconfig_t tconfig;
|
||||
tconfig_init(&tconfig);
|
||||
|
||||
char* logpath = NULL;
|
||||
tconfig_bind(&tconfig, TCONF_STR, "logpath", &logpath);
|
||||
ssize_t rsize = tconfig_read(&tconfig, "helmet.conf");
|
||||
|
||||
int res = tconfig_parse(&tconfig);
|
||||
MASSERT(res == -1);
|
||||
|
||||
tconfig_destroy(&tconfig);
|
||||
logger_dprintf("logpath = %s", logpath);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int server_run(void) {
|
||||
logger_dprintf("server start");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
|
||||
#ifndef SERVER_H_QWERTY
|
||||
#define SERVER_H_QWERTY
|
||||
|
||||
int server_init(void);
|
||||
int server_config(void);
|
||||
int server_run(void);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
|
||||
#include <pthread.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <semaphore.h>
|
||||
#include <stdatomic.h>
|
||||
|
||||
#include <waitgroup.h>
|
||||
|
||||
pthread_t thread;
|
||||
atomic_bool thread_cancel;
|
||||
wg_t wg;
|
||||
|
||||
|
||||
void* thread_run(void*);
|
||||
|
||||
int server_init(void) {
|
||||
int res = 0;
|
||||
thread_cancel = false;
|
||||
|
||||
wg_init(&wg);
|
||||
|
||||
pthread_attr_t attr;
|
||||
pthread_attr_init(&attr);
|
||||
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
|
||||
wg_add(&wg);
|
||||
pthread_create(&thread, &attr, thread_run, NULL);
|
||||
pthread_attr_destroy(&attr);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
int server_run(void) {
|
||||
int res = 0;
|
||||
void *retval;
|
||||
printf("server run\n");
|
||||
sleep(4);
|
||||
thread_cancel = true;
|
||||
printf("thread cancel\n");
|
||||
wg_wait(&wg);
|
||||
printf("exit\n");
|
||||
return res;
|
||||
}
|
||||
|
||||
void* thread_run(void*) {
|
||||
for(;;) {
|
||||
if (thread_cancel == true) {
|
||||
printf("thread canceled\n");
|
||||
sleep(1);
|
||||
wg_done(&wg);
|
||||
return NULL;
|
||||
|
||||
}
|
||||
printf("thread run\n");
|
||||
sleep(1);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
|
||||
#ifndef SERVER_H_QWERTY
|
||||
#define SERVER_H_QWERTY
|
||||
|
||||
int server_init(void);
|
||||
int server_run(void);
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user