Browse Source

* Added preliminary C++ bindings

tags/v0.99.beta14
Jean-Yves Lamoureux jylam 18 years ago
parent
commit
3b166c5603
13 changed files with 1269 additions and 2 deletions
  1. +1
    -1
      Makefile.am
  2. +28
    -1
      configure.ac
  3. +32
    -0
      cpp/Makefile.am
  4. +541
    -0
      cpp/Makefile.in
  5. +69
    -0
      cpp/caca++.cpp
  6. +46
    -0
      cpp/caca++.h
  7. +12
    -0
      cpp/caca++.pc
  8. +12
    -0
      cpp/caca++.pc.in
  9. +59
    -0
      cpp/cpptest.cpp
  10. +333
    -0
      cpp/cucul++.cpp
  11. +112
    -0
      cpp/cucul++.h
  12. +12
    -0
      cpp/cucul++.pc
  13. +12
    -0
      cpp/cucul++.pc.in

+ 1
- 1
Makefile.am View File

@@ -1,6 +1,6 @@
# $Id$

SUBDIRS = kernel cucul caca src test tools doc
SUBDIRS = kernel cucul caca src test tools cpp doc
DIST_SUBDIRS = $(SUBDIRS) autotools debian msvc

EXTRA_DIST = NOTES COPYING.GPL COPYING.LGPL bootstrap build-dos build-kernel build-win32 caca-config.in libcaca.spec


+ 28
- 1
configure.ac View File

@@ -11,10 +11,13 @@ AM_CONFIG_HEADER(config.h)

AM_PROG_CC_C_O
AC_PROG_CPP
AC_PROG_CXX
AM_PROG_AS

AC_LIBTOOL_WIN32_DLL
AM_PROG_LIBTOOL
AC_LIBTOOL_CXX


AC_C_CONST
AC_C_INLINE
@@ -23,9 +26,17 @@ AC_TYPE_SIGNAL
dnl AC_PROG_EGREP only exists in autoconf 2.54+, so we use AC_EGREP_CPP right
dnl now otherwise it might be set in an obscure if statement. Same thing for
dnl PKG_PROG_PKG_CONFIG which needs to be called first.
AC_EGREP_CPP(foo, foo)
AC_EGREP_CPP(yes, foo)
PKG_PROG_PKG_CONFIG()

dnl Check the C++ compiler and preprocessor.
AC_PROG_CXX
AC_PROG_CXXCPP

dnl Set the test language as C++
AC_LANG([C++])


dnl output driver features
AC_ARG_ENABLE(slang,
[ --enable-slang slang graphics support (autodetected)])
@@ -44,6 +55,9 @@ AC_ARG_ENABLE(network,
AC_ARG_ENABLE(vga,
[ --enable-vga VGA support (default disabled)])

AC_ARG_ENABLE(cpp,
[ --enable-cpp C++ bindings (autodetected)])

dnl example programs features
AC_ARG_ENABLE(imlib2,
[ --enable-imlib2 Imlib2 graphics support (default enabled)])
@@ -76,6 +90,13 @@ AC_TRY_COMPILE([],[asm("fldln2; fldln2; fxch; fyl2x");],

AC_CHECK_LIB(m, sin, MATH_LIBS="${MATH_LIBS} -lm")


if test "${enable_cpp}" != "no"; then
ac_cv_my_have_cpp="yes"
AC_DEFINE(USE_CPP, 1,
Define to 1 to enable C++ bindigs)
fi

CACA_DRIVERS=""

if test "${enable_conio}" != "no"; then
@@ -221,9 +242,14 @@ else
AC_MSG_RESULT([${CACA_DRIVERS}])
fi





AC_SUBST(MATH_LIBS)
AC_SUBST(CACA_LIBS)
AC_SUBST(CUCUL_LIBS)
AC_SUBST(CUCUL++_LIBS)

# Optimizations
CFLAGS="${CFLAGS} -g -O2 -fno-strength-reduce -fomit-frame-pointer"
@@ -301,6 +327,7 @@ AC_CONFIG_FILES([
src/Makefile
test/Makefile
tools/Makefile
cpp/Makefile
doc/Makefile
autotools/Makefile
debian/Makefile


+ 32
- 0
cpp/Makefile.am View File

@@ -0,0 +1,32 @@
# $Id: Makefile.am 552 2006-04-13 16:10:16Z jylam $

SUFFIXES = .cpp

AM_CXXFLAGS =

include_HEADERS = cucul++.h caca++.h

noinst_LIBRARIES = libcucul++.a libcaca++.a

libcucul___a_SOURCES = \
cucul++.cpp \
cucul++.h \
$(NULL)
libcucul___la_LDFLAGS = -no-undefined
libcucul___la_LIBADD =


libcaca___a_SOURCES = \
caca++.cpp \
caca++.h \
$(NULL)
libcaca___la_LDFLAGS = -no-undefined
libcaca___la_LIBADD =



noinst_PROGRAMS = cpptest


cpptest_SOURCES = cpptest.cpp
cpptest_LDADD = ../caca/libcaca.la ../cucul/libcucul.la libcucul++.a libcaca++.a @CACA_LIBS@

+ 541
- 0
cpp/Makefile.in View File

@@ -0,0 +1,541 @@
# Makefile.in generated by automake 1.9.6 from Makefile.am.
# @configure_input@

# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005 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@

# $Id: Makefile.am 552 2006-04-13 16:10:16Z jylam $



srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ..
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
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 = :
build_triplet = @build@
host_triplet = @host@
target_triplet = @target@
noinst_PROGRAMS = cpptest$(EXEEXT)
subdir = cpp
DIST_COMMON = $(include_HEADERS) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in
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)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
LIBRARIES = $(noinst_LIBRARIES)
ARFLAGS = cru
libcaca___a_AR = $(AR) $(ARFLAGS)
libcaca___a_LIBADD =
am_libcaca___a_OBJECTS = caca++.$(OBJEXT)
libcaca___a_OBJECTS = $(am_libcaca___a_OBJECTS)
libcucul___a_AR = $(AR) $(ARFLAGS)
libcucul___a_LIBADD =
am_libcucul___a_OBJECTS = cucul++.$(OBJEXT)
libcucul___a_OBJECTS = $(am_libcucul___a_OBJECTS)
PROGRAMS = $(noinst_PROGRAMS)
am_cpptest_OBJECTS = cpptest.$(OBJEXT)
cpptest_OBJECTS = $(am_cpptest_OBJECTS)
cpptest_DEPENDENCIES = ../caca/libcaca.la ../cucul/libcucul.la \
libcucul++.a libcaca++.a
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/autotools/depcomp
am__depfiles_maybe = depfiles
CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CXXFLAGS) $(CXXFLAGS)
CXXLD = $(CXX)
CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \
$(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
SOURCES = $(libcaca___a_SOURCES) $(libcucul___a_SOURCES) \
$(cpptest_SOURCES)
DIST_SOURCES = $(libcaca___a_SOURCES) $(libcucul___a_SOURCES) \
$(cpptest_SOURCES)
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
*) f=$$p;; \
esac;
am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
am__installdirs = "$(DESTDIR)$(includedir)"
includeHEADERS_INSTALL = $(INSTALL_HEADER)
HEADERS = $(include_HEADERS)
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
AR = @AR@
AS = @AS@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BUILD_DOCUMENTATION_FALSE = @BUILD_DOCUMENTATION_FALSE@
BUILD_DOCUMENTATION_TRUE = @BUILD_DOCUMENTATION_TRUE@
CACA_LIBS = @CACA_LIBS@
CC = @CC@
CCAS = @CCAS@
CCASFLAGS = @CCASFLAGS@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CUCUL_LIBS = @CUCUL_LIBS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DOXYGEN = @DOXYGEN@
DVIPS = @DVIPS@
ECHO = @ECHO@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
F77 = @F77@
FFLAGS = @FFLAGS@
IMLIB2_CONFIG = @IMLIB2_CONFIG@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LATEX = @LATEX@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MATH_LIBS = @MATH_LIBS@
NEED_PIC_FALSE = @NEED_PIC_FALSE@
NEED_PIC_TRUE = @NEED_PIC_TRUE@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@
RANLIB = @RANLIB@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
USE_IMLIB2_FALSE = @USE_IMLIB2_FALSE@
USE_IMLIB2_TRUE = @USE_IMLIB2_TRUE@
USE_KERNEL_FALSE = @USE_KERNEL_FALSE@
USE_KERNEL_TRUE = @USE_KERNEL_TRUE@
USE_LATEX_FALSE = @USE_LATEX_FALSE@
USE_LATEX_TRUE = @USE_LATEX_TRUE@
USE_PANGO_FALSE = @USE_PANGO_FALSE@
USE_PANGO_TRUE = @USE_PANGO_TRUE@
VERSION = @VERSION@
ac_ct_AR = @ac_ct_AR@
ac_ct_AS = @ac_ct_AS@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DLLTOOL = @ac_ct_DLLTOOL@
ac_ct_F77 = @ac_ct_F77@
ac_ct_OBJDUMP = @ac_ct_OBJDUMP@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
ac_pt_PKG_CONFIG = @ac_pt_PKG_CONFIG@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
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 = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pangoft2_CFLAGS = @pangoft2_CFLAGS@
pangoft2_LIBS = @pangoft2_LIBS@
prefix = @prefix@
program_transform_name = @program_transform_name@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
target = @target@
target_alias = @target_alias@
target_cpu = @target_cpu@
target_os = @target_os@
target_vendor = @target_vendor@
SUFFIXES = .cpp
AM_CXXFLAGS =
include_HEADERS = cucul++.h caca++.h
noinst_LIBRARIES = libcucul++.a libcaca++.a
libcucul___a_SOURCES = \
cucul++.cpp \
cucul++.h \
$(NULL)

libcucul___la_LDFLAGS = -no-undefined
libcucul___la_LIBADD =
libcaca___a_SOURCES = \
caca++.cpp \
caca++.h \
$(NULL)

libcaca___la_LDFLAGS = -no-undefined
libcaca___la_LIBADD =
cpptest_SOURCES = cpptest.cpp
cpptest_LDADD = ../caca/libcaca.la ../cucul/libcucul.la libcucul++.a libcaca++.a @CACA_LIBS@
all: all-am

.SUFFIXES:
.SUFFIXES: .cpp .lo .o .obj
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
&& exit 0; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign cpp/Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --foreign cpp/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;

$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh

$(top_srcdir)/configure: $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh

clean-noinstLIBRARIES:
-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
libcaca++.a: $(libcaca___a_OBJECTS) $(libcaca___a_DEPENDENCIES)
-rm -f libcaca++.a
$(libcaca___a_AR) libcaca++.a $(libcaca___a_OBJECTS) $(libcaca___a_LIBADD)
$(RANLIB) libcaca++.a
libcucul++.a: $(libcucul___a_OBJECTS) $(libcucul___a_DEPENDENCIES)
-rm -f libcucul++.a
$(libcucul___a_AR) libcucul++.a $(libcucul___a_OBJECTS) $(libcucul___a_LIBADD)
$(RANLIB) libcucul++.a

clean-noinstPROGRAMS:
@list='$(noinst_PROGRAMS)'; for p in $$list; do \
f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
echo " rm -f $$p $$f"; \
rm -f $$p $$f ; \
done
cpptest$(EXEEXT): $(cpptest_OBJECTS) $(cpptest_DEPENDENCIES)
@rm -f cpptest$(EXEEXT)
$(CXXLINK) $(cpptest_LDFLAGS) $(cpptest_OBJECTS) $(cpptest_LDADD) $(LIBS)

mostlyclean-compile:
-rm -f *.$(OBJEXT)

distclean-compile:
-rm -f *.tab.c

@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/caca++.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpptest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cucul++.Po@am__quote@

.cpp.o:
@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<

.cpp.obj:
@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`

.cpp.lo:
@am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $<

mostlyclean-libtool:
-rm -f *.lo

clean-libtool:
-rm -rf .libs _libs

distclean-libtool:
-rm -f libtool
uninstall-info-am:
install-includeHEADERS: $(include_HEADERS)
@$(NORMAL_INSTALL)
test -z "$(includedir)" || $(mkdir_p) "$(DESTDIR)$(includedir)"
@list='$(include_HEADERS)'; for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
f=$(am__strip_dir) \
echo " $(includeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includedir)/$$f'"; \
$(includeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includedir)/$$f"; \
done

uninstall-includeHEADERS:
@$(NORMAL_UNINSTALL)
@list='$(include_HEADERS)'; for p in $$list; do \
f=$(am__strip_dir) \
echo " rm -f '$(DESTDIR)$(includedir)/$$f'"; \
rm -f "$(DESTDIR)$(includedir)/$$f"; \
done

ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
mkid -fID $$unique
tags: TAGS

TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique; \
fi
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$tags $$unique

GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& cd $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) $$here

distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags

distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
list='$(DISTFILES)'; for file in $$list; do \
case $$file in \
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
esac; \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
dir="/$$dir"; \
$(mkdir_p) "$(distdir)$$dir"; \
else \
dir=''; \
fi; \
if test -d $$d/$$file; then \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
else \
test -f $(distdir)/$$file \
|| cp -p $$d/$$file $(distdir)/$$file \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile $(LIBRARIES) $(PROGRAMS) $(HEADERS)
installdirs:
for dir in "$(DESTDIR)$(includedir)"; 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:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:

clean-generic:

distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)

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-generic clean-libtool clean-noinstLIBRARIES \
clean-noinstPROGRAMS mostlyclean-am

distclean: distclean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-libtool distclean-tags

dvi: dvi-am

dvi-am:

html: html-am

info: info-am

info-am:

install-data-am: install-includeHEADERS

install-exec-am:

install-info: install-info-am

install-man:

installcheck-am:

maintainer-clean: maintainer-clean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic

mostlyclean: mostlyclean-am

mostlyclean-am: mostlyclean-compile mostlyclean-generic \
mostlyclean-libtool

pdf: pdf-am

pdf-am:

ps: ps-am

ps-am:

uninstall-am: uninstall-includeHEADERS uninstall-info-am

.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
clean-libtool clean-noinstLIBRARIES clean-noinstPROGRAMS ctags \
distclean distclean-compile distclean-generic \
distclean-libtool distclean-tags distdir dvi dvi-am html \
html-am info info-am install install-am install-data \
install-data-am install-exec install-exec-am \
install-includeHEADERS install-info install-info-am \
install-man install-strip installcheck installcheck-am \
installdirs maintainer-clean maintainer-clean-generic \
mostlyclean mostlyclean-compile mostlyclean-generic \
mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \
uninstall-am uninstall-includeHEADERS uninstall-info-am

# 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:

+ 69
- 0
cpp/caca++.cpp View File

@@ -0,0 +1,69 @@
#include "caca++.h"


Caca::Caca(void)
{

}
Caca::Caca(Cucul *qq)
{
kk = caca_attach(qq->get_cucul_t());
if(!kk) throw -1;
}

Caca::~Caca()
{
caca_detach(kk);
}

void Caca::attach(Cucul *qq)
{
kk = caca_attach(qq->get_cucul_t());
if(!kk) throw -1;
}


void Caca::detach ()
{
caca_detach(kk);
}
void Caca::set_delay (unsigned int d)
{
caca_set_delay(kk, d);
}
void Caca::display ()
{
caca_display(kk);
}
unsigned int Caca::get_rendertime ()
{
return caca_get_rendertime(kk);
}
unsigned int Caca::get_window_width ()
{
return caca_get_window_width(kk);
}
unsigned int Caca::get_window_height ()
{
return caca_get_window_height(kk);
}
int Caca::set_window_title (char const *s)
{
return caca_set_window_title(kk, s);
}
int Caca::get_event (unsigned int g, Caca::Event *n, int aa)
{
return caca_get_event(kk, g, n->e, aa);
}
unsigned int Caca::get_mouse_x ()
{
return caca_get_mouse_x(kk);
}
unsigned int Caca::get_mouse_y ()
{
return caca_get_mouse_x(kk);
}
void Caca::set_mouse (int v)
{
caca_set_mouse(kk, v);
}

+ 46
- 0
cpp/caca++.h View File

@@ -0,0 +1,46 @@
#ifndef _CACA_PP_H
#define _CACA_PP_H


#include "cucul.h"
#include "caca.h"

#include "cucul++.h"


class Caca {
public:
Caca();
Caca(Cucul *qq);
~Caca();

class Event {
friend class Caca;
protected:
caca_event *e;
};


void attach (Cucul *qq);
void detach ();
void set_delay (unsigned int);
void display ();
unsigned int get_rendertime ();
unsigned int get_window_width ();
unsigned int get_window_height ();
int set_window_title (char const *);
int get_event (unsigned int, Caca::Event*, int);
unsigned int get_mouse_x ();
unsigned int get_mouse_y ();
void set_mouse (int);


private:
caca_t *kk;


};


#endif /* _CACA_PP_H */

+ 12
- 0
cpp/caca++.pc View File

@@ -0,0 +1,12 @@
prefix=/usr/local
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include

Name: caca++
Description: Colour ASCII-Art library C++ bindings
Version: 0.10
Requires: cucul++ = 0.10
Conflicts:
Libs: -L${libdir} -lcaca -lcucul -lcucul++
Cflags: -I${includedir}

+ 12
- 0
cpp/caca++.pc.in View File

@@ -0,0 +1,12 @@
prefix=@prefix@
exec_prefix=@exec_prefix@
libdir=@libdir@
includedir=@includedir@

Name: caca++
Description: Colour ASCII-Art library C++ bindings
Version: @VERSION@
Requires: cucul++ = @VERSION@
Conflicts:
Libs: -L${libdir} -lcaca -lcucul -lcucul++
Cflags: -I${includedir}

+ 59
- 0
cpp/cpptest.cpp View File

@@ -0,0 +1,59 @@
#include <iostream>

#include <cucul++.h>
#include <caca++.h>

using namespace std;


static char const *pig[]= {
" _ ",
" _._ _..._ .-', _.._(`)) ",
" '-. ` ' /-._.-' ',/ ",
" ) \ '. ",
" / _ _ | \\ ",
" | a a / | ",
" \ .-. ; " ,
" '-('' ).-' ,' ; ",
" '-; | .' ",
" \\ \\ / ",
" | 7 .__ _.-\\ \\ ",
" | | | ``/ /` / ",
" jgs /,_| | /,_/ / ",
" /,_/ '`-' ",
NULL
};

int main(int argc, char *argv[])
{
Cucul *qq;
Caca *kk;
Caca::Event ev;

try {
qq = new Cucul();
}
catch (int e) {
cerr << "Error while initializing cucul (" << e << ")" << endl;
return -1;
}

kk = new Caca(qq);


qq->set_color(CUCUL_COLOR_LIGHTMAGENTA, CUCUL_COLOR_BLACK);

for(int i = 0; pig[i]; i++)
qq->putstr(0, i, (char*)pig[i]);


kk->display();
kk->get_event(CACA_EVENT_KEY_PRESS, &ev, -1);


delete kk;
delete qq;

return 0;
}

+ 333
- 0
cpp/cucul++.cpp View File

@@ -0,0 +1,333 @@
#include "cucul++.h"

Cucul::Cucul()
{
qq = cucul_create(0,0);
if(!qq) throw -1;
}
Cucul::Cucul(int width, int height)
{
qq = cucul_create(width, height);
if(!qq) throw -1;
}
Cucul::~Cucul()
{
if(qq) {
cucul_free(qq);
}
}

cucul_t *Cucul::get_cucul_t()
{
return qq;
}



void Cucul::set_size(unsigned int width, unsigned int height)
{
cucul_set_size (qq, width, height);
}
unsigned int Cucul::get_width(void)
{
return cucul_get_width (qq);
}
unsigned int Cucul::get_height(void)
{
return cucul_get_height (qq);
}
void Cucul::set_color(unsigned int f, unsigned int b)
{
cucul_set_color (qq, f, b);
}
char const * Cucul::get_color_name (unsigned int color)
{
return cucul_get_color_name (color);
}
void Cucul::putchar (int x, int y, char c)
{
cucul_putchar (qq, x, y, c);
}
void Cucul::putstr (int x, int y, char *str)
{
cucul_putstr(qq, x, y, str);
}
//void Cucul::printf ( int, int, char const *,...)

void Cucul::clear ()
{
cucul_clear(qq);
}

void Cucul::blit ( int x, int y, Cucul* c1, Cucul* c2)
{
cucul_blit(qq, x, y, c1->get_cucul_t(), c2->get_cucul_t());
}

void Cucul::invert ()
{
cucul_invert(qq);
}

void Cucul::flip ()
{
cucul_flip(qq);
}

void Cucul::flop ()
{
cucul_flop(qq);
}

void Cucul::rotate ()
{
cucul_rotate(qq);
}

void Cucul::draw_line (int x1 , int y1, int x2, int y2, char const *c)
{
cucul_draw_line(qq, x1,y1,x2,y2, c);
}
void Cucul::draw_polyline (int const x[], int const y[], int f, char const *c)
{
cucul_draw_polyline(qq, x, y, f, c);
}
void Cucul::draw_thin_line (int x1 , int y1, int x2, int y2)
{
cucul_draw_thin_line(qq, x1, y1, x2, y2);
}

void Cucul::draw_thin_polyline ( int const x[], int const y[], int f)
{
cucul_draw_thin_polyline(qq, x, y, f);
}
void Cucul::draw_circle ( int x, int y, int d, char const *c)
{
cucul_draw_circle(qq, x, y, d, c);
}

void Cucul::draw_ellipse ( int x, int y, int d1, int d2, char const *c)
{
cucul_draw_ellipse(qq, x, y, d1, d2, c);
}

void Cucul::draw_thin_ellipse ( int x, int y, int d1, int d2)
{
cucul_draw_thin_ellipse(qq, x, y, d1, d2);
}

void Cucul::fill_ellipse ( int x, int y, int d1, int d2, char const *c)
{
cucul_fill_ellipse(qq, x, y, d1, d2, c);
}

void Cucul::draw_box ( int x, int y, int w, int h, char const *c)
{
cucul_draw_box(qq, x, y, w, h, c);
}
void Cucul::draw_thin_box ( int x, int y, int w, int h)
{
cucul_draw_thin_box(qq, x, y, w, h);
}

void Cucul::fill_box ( int x, int y, int w, int h, char const *c)
{
cucul_fill_box(qq, x, y, w, h, c);
}

void Cucul::draw_triangle ( int x1, int y1, int x2, int y2, int x3, int y3, char const *c)
{
cucul_draw_triangle(qq, x1, y1, x2, y2, x3, y3, c);
}

void Cucul::draw_thin_triangle ( int x1, int y1, int x2, int y2, int x3, int y3)
{
cucul_draw_thin_triangle(qq, x1, y1, x2, y2, x3, y3);
}

void Cucul::fill_triangle ( int x1, int y1, int x2, int y2, int x3, int y3, const char *c)
{
cucul_fill_triangle(qq, x1, y1, x2, y2, x3, y3, c);
}

int Cucul::rand (int min, int max)
{
return cucul_rand(min, max);
}

unsigned int Cucul::sqrt (unsigned int v)
{
return cucul_sqrt(v);
}

Cucul::Sprite * Cucul::load_sprite (char const *f)
{
Cucul::Sprite *s = new Cucul::Sprite();
s->sprite = cucul_load_sprite(f);
return s;
}

int Cucul::get_sprite_frames (Cucul::Sprite const *s)
{
return cucul_get_sprite_frames(s->sprite);
}

int Cucul::get_sprite_width (Cucul::Sprite const *s, int v)
{
return cucul_get_sprite_width(s->sprite, v);
}

int Cucul::get_sprite_height (Cucul::Sprite const *s, int v)
{
return cucul_get_sprite_height(s->sprite, v);
}

int Cucul::get_sprite_dx (Cucul::Sprite const *s, int v)
{
return cucul_get_sprite_dx(s->sprite, v);
}

int Cucul::get_sprite_dy (Cucul::Sprite const *s, int v)
{
return cucul_get_sprite_dy(s->sprite, v);
}

void Cucul::draw_sprite ( int x, int y, Cucul::Sprite const *s, int v)
{
cucul_draw_sprite(qq, x, y, s->sprite, v);
}

void Cucul::free_sprite (Cucul::Sprite *s)
{
cucul_free_sprite(s->sprite);
}

Cucul::Dither * Cucul::create_dither (unsigned int v1, unsigned int v2, unsigned int v3, unsigned int v4, unsigned int v5, unsigned int v6, unsigned int v7, unsigned int v8)
{
Cucul::Dither *d = new Dither();
d->dither = cucul_create_dither(v1,v2,v3,v4,v5,v6,v7,v8);
return d;
}

void Cucul::set_dither_palette (Cucul::Dither *d, unsigned int r[], unsigned int g[], unsigned int b[], unsigned int a[])
{
cucul_set_dither_palette(d->dither, r, g, b, a);
}

void Cucul::set_dither_brightness (Cucul::Dither *d, float f)
{
cucul_set_dither_brightness(d->dither, f);
}

void Cucul::set_dither_gamma (Cucul::Dither *d, float f)
{
cucul_set_dither_gamma(d->dither, f);
}

void Cucul::set_dither_contrast ( Cucul::Dither *d, float f)
{
cucul_set_dither_contrast(d->dither, f);
}

void Cucul::set_dither_invert ( Cucul::Dither *d, int i)
{
cucul_set_dither_invert(d->dither, i);
}

void Cucul::set_dither_antialias ( Cucul::Dither *d, char const *c)
{
cucul_set_dither_antialias(d->dither, c);
}
char const *const * Cucul::get_dither_antialias_list ( Cucul::Dither const *d)
{
return cucul_get_dither_antialias_list(d->dither);
}

void Cucul::set_dither_color ( Cucul::Dither *d, char const *c)
{
cucul_set_dither_color(d->dither, c);
}

char const *const * Cucul::get_dither_color_list ( Cucul::Dither const *d)
{
return cucul_get_dither_color_list(d->dither);
}
void Cucul::set_dither_charset ( Cucul::Dither *d, char const *c)
{
cucul_set_dither_charset(d->dither, c);
}

char const *const * Cucul::get_dither_charset_list ( Cucul::Dither const *d)
{
return cucul_get_dither_charset_list(d->dither);
}
void Cucul::set_dither_mode ( Cucul::Dither *d, char const *c)
{
cucul_set_dither_mode(d->dither, c);
}

char const *const * Cucul::get_dither_mode_list ( Cucul::Dither const *d)
{
return cucul_get_dither_mode_list(d->dither);
}

void Cucul::dither_bitmap ( int x, int y, int w, int h, Cucul::Dither const *d, void *v)
{
cucul_dither_bitmap(qq, x, y, w, h, d->dither, v);
}

void Cucul::free_dither ( Cucul::Dither *d)
{
cucul_free_dither(d->dither);
}

Cucul::Font * Cucul::load_font (void const *s, unsigned int v)
{
Cucul::Font *f = new Cucul::Font();
f->font = cucul_load_font(s, v);
return f;
}

char const *const * Cucul::get_font_list (void)
{
return cucul_get_font_list();
}

unsigned int Cucul::get_font_width ( Cucul::Font *f)
{
return cucul_get_font_width(f->font);
}

unsigned int Cucul::get_font_height ( Cucul::Font *f)
{
return cucul_get_font_height(f->font);
}

void Cucul::render_canvas (Cucul::Font *f, unsigned char *c, unsigned int x, unsigned int y, unsigned int w)
{
cucul_render_canvas(qq, f->font, c, x,y,w);
}

void Cucul::free_font ( Cucul::Font *f)
{
cucul_free_font(f->font);
}

Cucul::Buffer * Cucul::create_export (char const *c)
{
Cucul::Buffer *b = new Cucul::Buffer();
b->buffer = cucul_create_export(qq, c);
return b;
}

char const *const * Cucul::get_export_list (void)
{
return cucul_get_export_list();
}

+ 112
- 0
cpp/cucul++.h View File

@@ -0,0 +1,112 @@
#ifndef _CUCUL_PP_H
#define _CUCUL_PP_H


#include "cucul.h"


class Cucul {
friend class Caca;
public:
Cucul();
Cucul(int width, int height);
~Cucul();

/* Ugly, I know */
class Font {
friend class Cucul;
protected:
cucul_font *font;
};
class Sprite {
friend class Cucul;
protected:
cucul_sprite *sprite;
};
class Dither {
friend class Cucul;
protected:
cucul_dither *dither;
};
class Buffer {
friend class Cucul;
protected:
cucul_buffer *buffer;
};



void set_size(unsigned int w, unsigned int h);
unsigned int get_width(void);
unsigned int get_height(void);
void set_color(unsigned int f, unsigned int b);
char const * get_color_name (unsigned int color);
void putchar (int x, int y, char c);
void putstr (int x, int y, char *str);
void clear ();
void blit ( int, int, Cucul* c1, Cucul* c2);
void invert ();
void flip ();
void flop ();
void rotate ();
void draw_line ( int, int, int, int, char const *);
void draw_polyline ( int const x[], int const y[], int, char const *);
void draw_thin_line ( int, int, int, int);
void draw_thin_polyline ( int const x[], int const y[], int);
void draw_circle ( int, int, int, char const *);
void draw_ellipse ( int, int, int, int, char const *);
void draw_thin_ellipse ( int, int, int, int);
void fill_ellipse ( int, int, int, int, char const *);
void draw_box ( int, int, int, int, char const *);
void draw_thin_box ( int, int, int, int);
void fill_box ( int, int, int, int, char const *);
void draw_triangle ( int, int, int, int, int, int, char const *);
void draw_thin_triangle ( int, int, int, int, int, int);
void fill_triangle ( int, int, int, int, int, int, char const *);
int rand (int, int);
unsigned int sqrt (unsigned int);
Sprite * load_sprite (char const *);
int get_sprite_frames (Cucul::Sprite const *);
int get_sprite_width (Cucul::Sprite const *, int);
int get_sprite_height (Cucul::Sprite const *, int);
int get_sprite_dx (Cucul::Sprite const *, int);
int get_sprite_dy (Cucul::Sprite const *, int);
void draw_sprite ( int, int, Cucul::Sprite const *, int);
void free_sprite (Cucul::Sprite*);
Dither * create_dither (unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int);
void set_dither_palette (Cucul::Dither *, unsigned int r[], unsigned int g[], unsigned int b[], unsigned int a[]);
void set_dither_brightness (Cucul::Dither *, float);
void set_dither_gamma (Cucul::Dither *, float);
void set_dither_contrast (Cucul::Dither *, float);
void set_dither_invert (Cucul::Dither *, int);
void set_dither_antialias (Cucul::Dither *, char const *);
char const *const * get_dither_antialias_list (Cucul::Dither const *);
void set_dither_color (Cucul::Dither *, char const *);
char const *const * get_dither_color_list (Cucul::Dither const *);
void set_dither_charset (Cucul::Dither *, char const *);
char const *const * get_dither_charset_list (Cucul::Dither const *);
void set_dither_mode (Cucul::Dither *, char const *);
char const *const * get_dither_mode_list (Cucul::Dither const *);
void dither_bitmap ( int, int, int, int, Cucul::Dither const *, void *);
void free_dither (Cucul::Dither *);
Font * load_font (void const *, unsigned int);
char const *const * get_font_list (void);
unsigned int get_font_width (Font *);
unsigned int get_font_height (Font *);
void render_canvas ( Font *, unsigned char *, unsigned int, unsigned int, unsigned int);
void free_font (Font *);
Buffer * create_export ( char const *);
char const *const * get_export_list (void);


protected:
cucul_t *get_cucul_t();

private:
cucul_t *qq;


};


#endif /* _CUCUL_PP_H */

+ 12
- 0
cpp/cucul++.pc View File

@@ -0,0 +1,12 @@
prefix=/usr/local
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include

Name: cucul++
Description: Canvas for ultrafast compositing of Unicode letters C++ binding
Version: 0.10
Requires:
Conflicts:
Libs: -L${libdir} -lcucul -lcaca
Cflags: -I${includedir}

+ 12
- 0
cpp/cucul++.pc.in View File

@@ -0,0 +1,12 @@
prefix=@prefix@
exec_prefix=@exec_prefix@
libdir=@libdir@
includedir=@includedir@

Name: cucul++
Description: Canvas for ultrafast compositing of Unicode letters C++ binding
Version: @VERSION@
Requires:
Conflicts:
Libs: -L${libdir} -lcucul -lcaca
Cflags: -I${includedir}

Loading…
Cancel
Save