Browse Source

Buildable autotools

Serj Kalichev 1 year ago
parent
commit
4b16e3ba87
8 changed files with 83 additions and 406 deletions
  1. 30 0
      .gitignore
  2. 1 5
      Makefile.am
  3. 1 0
      bin/.gitignore
  4. 1 1
      bin/ytree.c
  5. 41 396
      configure.ac
  6. 3 0
      src/Makefile.am
  7. 5 3
      src/pline.c
  8. 1 1
      src/sr_copypaste.h

+ 30 - 0
.gitignore

@@ -0,0 +1,30 @@
+.deps
+.dirstamp
+.libs
+.*.swp
+*.o
+*.lo
+*.la
+*.so
+*~
+
+/autom4te.cache
+/m4/libtool.m4
+/m4/lt*
+/aux_scripts
+/config.log
+/config.status
+/stamp-*
+/clish/stamp-*
+/Makefile
+/config.h
+/libtool
+/configure
+/config.h.in
+/aclocal.m4
+/Makefile.in
+/*.patch
+
+/cov-int
+/klish-plugin-sysrepo*.tar*
+/*.tgz

+ 1 - 5
Makefile.am

@@ -10,11 +10,7 @@ if DEBUG
 DEBUG_CFLAGS = -DDEBUG
 endif
 
-if TESTC
-TESTC_CFLAGS = -DTESTC
-endif
-
-AM_CFLAGS = -Wall $(DEBUG_CFLAGS) $(TESTC_CFLAGS)
+AM_CFLAGS = -Wall $(DEBUG_CFLAGS)
 AM_LDFLAGS = -z relro -z now -z defs
 
 bin_PROGRAMS =

+ 1 - 0
bin/.gitignore

@@ -0,0 +1 @@
+/ytree

+ 1 - 1
bin/ytree.c

@@ -42,5 +42,5 @@ int main(int argc, char **argv)
 out:
 	sr_disconnect(conn);
 
-	return 0;
+	return ret;
 }

+ 41 - 396
configure.ac

@@ -5,7 +5,7 @@ m4_define([MINOR_VERSION], 0)
 m4_define([MICRO_VERSION], 0)
 
 AC_PREREQ(2.59)
-AC_INIT([klish],
+AC_INIT([klish-plugin-sysrepo],
         [MAJOR_VERSION.MINOR_VERSION.MICRO_VERSION],
         [serj.kalichev at gmail dot com])
 
@@ -29,9 +29,6 @@ AC_CONFIG_HEADERS([config.h])
 AM_INIT_AUTOMAKE(subdir-objects)
 AM_PROG_CC_C_O
 
-# Dir for libc replacements
-AC_CONFIG_LIBOBJ_DIR([libc])
-
 # needed to handle 64-bit architecture
 AC_CHECK_SIZEOF(int)
 AC_CHECK_SIZEOF(long)
@@ -80,136 +77,9 @@ AC_ARG_ENABLE(debug,
 AM_CONDITIONAL(DEBUG,test x$enable_debug = xyes)
 
 
-################################
-# Compile in testc tests
-################################
-AC_ARG_ENABLE(testc,
-              [AS_HELP_STRING([--enable-testc],
-                              [Enable testc tests compiling [default=no]])],
-              [],
-              [enable_testc=no])
-AM_CONDITIONAL(TESTC,test x$enable_testc = xyes)
-
-
-################################
-# Search for network functions (like connect())
-################################
-AC_SEARCH_LIBS([socket], [socket])
-
-
-################################
-# Check for regex.h
-################################
-AC_CHECK_HEADERS(regex.h, [],
-    AC_MSG_ERROR([regex.h not found: regular expressions are not supported]))
-
-
-################################
-# Internal getopt()
-################################
-AC_ARG_WITH(internal-getopt,
-            [AS_HELP_STRING([--with-internal-getopt],
-            [Use internal implementation of getopt [default=no]])],
-            [],
-            [with_internal_getopt=no])
-
-if test x$with_internal_getopt != xno; then
-    AC_DEFINE([WITH_INTERNAL_GETOPT], [1], [Use internal getopt() implementation])
-    AC_LIBOBJ([getopt])
-    AC_MSG_WARN([Use internal implementation of getopt() and getopt_long()])
-else
-    AC_CHECK_HEADERS(getopt.h, [found_getopt_h=yes],
-        AC_MSG_WARN([getopt.h not found: only short parameters can be used on command line]))
-fi
-
-AC_MSG_CHECKING([for getopt_long()])
-if test x$with_internal_getopt = xyes -o x$found_getopt_h = xyes; then
-    AC_DEFINE([HAVE_GETOPT_LONG], [1], [getopt_long() function])
-    AC_MSG_RESULT([yes])
-else
-    AC_MSG_RESULT([no])
-fi
-
-
-################################
-# Check for locale.h
-################################
-AC_CHECK_HEADERS(locale.h, [],
-    AC_MSG_WARN([locale.h not found: the locales is not supported]))
-
-
-################################
-# Check for CODESET within nl_langinfo
-################################
-AC_DEFUN([AM_LANGINFO_CODESET],
-[
-  AC_CACHE_CHECK([for nl_langinfo and CODESET], [am_cv_langinfo_codeset],
-    [AC_TRY_LINK([#include <langinfo.h>],
-      [char* cs = nl_langinfo(CODESET); return !cs;],
-      [am_cv_langinfo_codeset=yes],
-      [am_cv_langinfo_codeset=no])
-    ])
-  if test $am_cv_langinfo_codeset = yes; then
-    AC_DEFINE([HAVE_LANGINFO_CODESET], [1],
-      [Define if you have <langinfo.h> and nl_langinfo(CODESET).])
-  fi
-])
-AM_LANGINFO_CODESET
-
-
-################################
-# Check for pwd.h and grp.h
-################################
-AC_CHECK_HEADERS(pwd.h, [],
-    AC_MSG_WARN([pwd.h not found: the pwd operations is not supported]))
-AC_CHECK_HEADERS(grp.h, [],
-    AC_MSG_WARN([grp.h not found: the grp operations is not supported]))
-
-
-################################
-# Check for chroot
-################################
-AC_CHECK_FUNCS(chroot, [],
-    AC_MSG_WARN([chroot() not found: the choot is not supported]))
-
-
-################################
-# Check for dlopen
-################################
-CLISH_PLUGIN_BUILTIN_LIST=
-CLISH_PLUGIN_BUILTIN_DEFS=
-CLISH_PLUGIN_BUILTIN_LIBS=
-
-AC_DEFUN([AC_PLUGIN_BUILTIN],
-[
-  CLISH_PLUGIN_BUILTIN_LIBS="$CLISH_PLUGIN_BUILTIN_LIBS clish_plugin_$1.la"
-  CLISH_PLUGIN_BUILTIN_DEFS="$CLISH_PLUGIN_BUILTIN_DEFS CLISH_PLUGIN_INIT($1);"
-  CLISH_PLUGIN_BUILTIN_LIST="$CLISH_PLUGIN_BUILTIN_LIST { \"$1\", clish_plugin_$1_init },"
-])
-
-AC_CHECK_HEADERS(dlfcn.h, [
-        AC_SEARCH_LIBS([dlopen], [dl dld], [], [
-          AC_MSG_ERROR([unable to find the dlopen() function])
-        ])
-    ],[
-          AC_MSG_WARN([dlfcn.h not found: the dl operations is not supported])
-          AC_PLUGIN_BUILTIN([clish])
-          if test x$use_lua != xno; then
-            AC_PLUGIN_BUILTIN([lua])
-          fi
-    ])
-
-AC_SUBST([CLISH_PLUGIN_BUILTIN_LIST])
-AC_SUBST([CLISH_PLUGIN_BUILTIN_DEFS])
-AC_SUBST([CLISH_PLUGIN_BUILTIN_LIBS])
-#AC_CONFIG_FILES([clish/plugin_builtin.c])
-
-
 ################################
 # Variables to install plugins
 ################################
-DBS_SUBDIR=dbs
-AC_SUBST(DBS_SUBDIR)
 PLUGINS_SUBDIR=plugins
 AC_SUBST(PLUGINS_SUBDIR)
 
@@ -241,280 +111,55 @@ AC_SEARCH_LIBS([faux_zmalloc], [faux],
 
 
 ################################
-# Check for the libxml2 library
+# Check for mandatory libyang library
 ################################
-AC_ARG_WITH(libxml2,
-	[AS_HELP_STRING([--with-libxml2=DIR],
-		[Use libxml2 as the XML parser implementation [default=no]])],
-	[use_libxml2=$withval],
-	[use_libxml2=no])
-
-AM_CONDITIONAL(WITH_LIBXML2,test x$use_libxml2 != xno)
-
-case x$use_libxml2 in
-xno)
-	/bin/true
-	;;
-xyes)
-	# I would love to avoid using pkg-config (which may not be available on
-	# some compilation environment) but doing so really add a lot of
-	# complexity to the system, as the headers don't lie in a standard
-	# directory (they lie in a subdirectory of a standard include directory;
-	# not the same thing for configure scripts).
-	LIBXML2_CFLAGS="`pkg-config libxml-2.0 --cflags`"
-	LIBXML2_LDFLAGS="`pkg-config libxml-2.0 --libs-only-L`"
-	LIBXML2_LIBS="`pkg-config libxml-2.0 --libs-only-l`"
-	AC_CHECK_LIB([xml2],
-		[xmlNewDoc],
-		[],
-		[AC_MSG_ERROR([cannot find libxml2 headers])],
-		[])
-	# the header file is installed in a subdirectory of one of the standard
-	# include directory. This might prove to be a problem if the cross-
-	# compile environment is not complete enough (i.e. if it misses
-	# pkg-config, or if pkg-config returns wrong values). In most cases, the
-	# environment is likely to be OK so we will never hit any issue.
-	saved_CFLAGS="$CFLAGS"
-	CFLAGS="$CFLAGS $LIBXML2_CFLAGS"
-	AC_CHECK_HEADER([libxml/tree.h],
-		[],
-		[AC_MSG_ERROR([cannot find libxml2 headers])],
-		[/* */])
-	CFLAGS="$saved_CFLAGS"
-	AC_DEFINE([HAVE_LIB_LIBXML2],
-		[],
-		[libxml2-based XML backend])
-	;;
-*)
-	# this is probably broken. We consider that the user supplied path is
-	# a non-standard path. But we're not going to check anything.
-	AC_MSG_WARN([--with-libxml2=DIR is probably broken, just trying])
-	LIBXML2_LDFLAGS="-L${use_libxml2}/lib"
-	LIBXML2_CFLAGS="-I${use_libxml2}/include/libxml2"
-	LIBXML2_LIBS="-lxml2"
-	AC_MSG_CHECKING([for libxml2 support])
-	AC_MSG_RESULT([yes])
-	AC_MSG_NOTICE([headers for libxml2 hopefully in ${use_libxml2}/include/libxml2])
-	AC_MSG_NOTICE([library libxml2 hopefully in ${use_libxml2}/lib])
-	AC_DEFINE([HAVE_LIB_LIBXML2],
-		[],
-		[libxml2-based XML backend])
-	;;
-esac
+AC_ARG_WITH(libyang,
+            [AS_HELP_STRING([--with-libyang=DIR],
+                            [Search DIR directory for libyang library files [default=yes]])],
+            [use_libyang=$withval],
+            [use_libyang=yes])
 
-AC_SUBST(LIBXML2_LIBS)
-AC_SUBST(LIBXML2_LDFLAGS)
-AC_SUBST(LIBXML2_CFLAGS)
-
-
-################################
-# Check for the roxml library
-################################
-AC_ARG_WITH(roxml,
-	[AS_HELP_STRING([--with-roxml=DIR],
-		[Use roxml as the XML parser implementation [default=no]])],
-	[use_roxml=$withval],
-	[use_roxml=no])
-
-AM_CONDITIONAL(WITH_ROXML,test x$use_roxml != xno)
-
-case x$use_roxml in
-xno)
-	/bin/true
-	;;
-xyes)
-	# we choose to NOT rely on pkg-config on this one. We may do it as
-	# roxml provides a .pc file but some environment (both cross-compile
-	# or native environment) may lack this support. The good thing is that
-	# it doesn't add much complexity to the configure.ac file (and we
-	# may move these tests to another m4 file later).
-	# The header is installed in the standard path
-	AC_CHECK_HEADER([roxml.h],
-		[],
-		[AC_MSG_ERROR([cannot find <roxml.h> header file])],
-		[/* */])
-	# The library is installed in the standard path
-	AC_CHECK_LIB([roxml],
-		[roxml_load_doc],
-		[],
-		[AC_MSG_ERROR([cannot find roxml library])],
-		[])
-	ROXML_CFLAGS=""
-	ROXML_LDFLAGS=""
-	ROXML_LIBS="-lroxml"
-	AC_DEFINE([HAVE_LIB_ROXML],
-		[],
-		[roxml-based XML backend])
-	;;
-*)
-	# first, we check if we're not looking for an alternate include
-	# directory -for example, if the user feeds the script with the
-	# option --with-roxml=/usr/local
-	# NOTE: we search for include/roxml.h and inc/roxml.h to defeat
-	# the caching algorithm of the configure script. If someone knows
-	# a better way, please do not hesitate
-	saved_CFLAGS="$CFLAGS"
-	CFLAGS="$CFLAGS -I${use_roxml}"
-	AC_CHECK_HEADER([include/roxml.h],
-		[roxml_h_found=yes],
-		[roxml_h_found=no],
-		[/* */])
-	if test "x$roxml_h_found" = "xno"; then
-		# the directory might be a source directory, so check
-		# if the include file is to be found here
-		AC_CHECK_HEADER([inc/roxml.h],
-			[roxml_h_found=yes],
-			[roxml_h_found=no],
-			[/* */])
-		if test "x$roxml_h_found" = "xno"; then
-			AC_MSG_ERROR([cannot find <roxml.h> header file])
-		fi
-		ROXML_CFLAGS="-I${use_roxml}/inc"
-		AC_MSG_NOTICE([header file <roxml.h> found in ${use_roxml}/inc])
-	else
-		ROXML_CFLAGS="-I${use_roxml}/include"
-		AC_MSG_NOTICE([header file <roxml.h> found in ${use_roxml}/include])
-	fi
-	CFLAGS="$saved_CFLAGS"
-	# we're doing both previous checks, but we are trying to find a library
-	# now, so the check themselves are a bit different
-	# NOTE: we search for roxml_load_doc and roxml_close to defeat
-	# the caching algorithm of the configure script. If someone knows
-	# a better way, please do not hesitate.
-	saved_LDFLAGS="$LDFLAGS"
-	LDFLAGS="$LDFLAGS -L${use_roxml}/lib"
-	AC_CHECK_LIB([roxml],
-		[roxml_load_doc],
-		[roxml_lib_found=yes],
-		[roxml_lib_found=no],
-		[])
-	LDFLAGS="$saved_LDFLAGS"
-	if test "x$roxml_lib_found" = "xno"; then
-		LDFLAGS="$LDFLAGS -L${use_roxml}"
-		AC_CHECK_LIB([roxml],
-			[roxml_close],
-			[],
-			[AC_MSG_ERROR([cannot find roxml library])],
-			[])
-		LDFLAGS=$saved_LDFLAGS
-		ROXML_LDFLAGS="-L${use_roxml}"
-		ROXML_LIBS="-lroxml"
-		AC_MSG_NOTICE([library roxml found in ${use_roxml}])
-	else
-		ROXML_LDFLAGS="-L${use_roxml}/lib"
-		ROXML_LIBS="-lroxml"
-		AC_MSG_NOTICE([library roxml found in ${use_roxml}/lib])
-	fi
-	AC_DEFINE([HAVE_LIB_ROXML],
-		[],
-		[roxml-based XML backend])
-	;;
-esac
+AS_IF([test x$use_libyang != xyes],
+  [
+    CPPFLAGS="-I${use_libyang} ${CPPFLAGS}"
+    LDFLAGS="-L${use_libyang}/.libs ${LDFLAGS}"
+  ]
+)
 
-AC_SUBST(ROXML_LIBS)
-AC_SUBST(ROXML_LDFLAGS)
-AC_SUBST(ROXML_CFLAGS)
+AC_CHECK_HEADERS([libyang/libyang.h],
+	[],
+	[AC_MSG_ERROR([cannot find <libyang/libyang.h> header file])]
+	)
+AC_SEARCH_LIBS([lysc_node_child], [yang],
+	[],
+	[AC_MSG_ERROR([cannot find working libyang library])]
+	)
 
 
 ################################
-# Check for the expat library
+# Check for mandatory sysrepo library
 ################################
-AC_ARG_WITH(expat,
-            [AS_HELP_STRING([--with-expat=DIR],
-                            [Use expat as the XML parser implementation [default=no]])],
-            [use_expat=$withval],
-            [use_expat=no])
-
-AM_CONDITIONAL(WITH_EXPAT,test x$use_expat != xno)
+AC_ARG_WITH(sysrepo,
+            [AS_HELP_STRING([--with-sysrepo=DIR],
+                            [Search DIR directory for sysrepo library files [default=yes]])],
+            [use_sysrepo=$withval],
+            [use_sysrepo=yes])
 
-case x$use_expat in
-xno)
-	/bin/true
-	;;
-xyes)
-	# we choose to NOT rely on pkg-config on this one. Instead, we
-	# check for the library and the header file - that should be
-	# enough.
-	AC_CHECK_HEADER([expat.h],
-		[expat_h_found=yes],
-		[expat_h_found=no],
-		[/* */])
-	if test "x$expat_h_found" != "xyes"; then
-		AC_CHECK_HEADER([bsdxml.h],
-			[expat_h_found=yes],
-			[expat_h_found=no],
-			[/* */])
-		if test "x$expat_h_found" != "xyes"; then
-			AC_MSG_ERROR([cannot find <expat.h> header file])
-		fi
-	fi
-	EXPAT_CFLAGS=""
-	AC_CHECK_LIB([expat],
-		[XML_ParserCreate],
-		[expat_lib_found=yes],
-		[expat_lib_found=no],
-		[])
-	if test "x$expat_lib_found" != "xyes"; then
-		AC_CHECK_LIB([bsdxml],
-			[XML_ParserCreate],
-			[],
-			[AC_MSG_ERROR([cannot find expat library])],
-			[])
-		EXPAT_LIBS="-lbsdxml"
-		AC_DEFINE([HAVE_LIB_BSDXML],
-			[],
-			[libbsdxml-based XML backend])
-	else
-		EXPAT_LIBS="-lexpat"
-	fi
-	EXPAT_LDFLAGS=""
-	AC_DEFINE([HAVE_LIB_EXPAT],
-		[],
-		[expat-based XML backend])
-	;;
-*)
-	# this is probably broken. We consider that the user supplied path is
-	# a non-standard path. But we're not going to check anything.
-	AC_MSG_WARN([--with-expat=DIR is probably broken, just trying])
-	EXPAT_LDFLAGS="-L${use_expat}/lib"
-	EXPAT_CFLAGS="-I${use_expat}/include"
-	EXPAT_LIBS="-lexpat"
-	AC_MSG_CHECKING([for expat support])
-	AC_MSG_RESULT([yes])
-	AC_MSG_NOTICE([headers for expat hopefully in ${use_expat}/include])
-	AC_MSG_NOTICE([library expat hopefully in ${use_expat}/lib])
-	AC_DEFINE([HAVE_LIB_EXPAT],
-		[],
-		[expat-based XML backend])
-	;;
-esac
-
-AC_SUBST(EXPAT_LIBS)
-AC_SUBST(EXPAT_LDFLAGS)
-AC_SUBST(EXPAT_CFLAGS)
-
-
-################################
-# Check for Lua support
-################################
-AC_ARG_WITH(lua,
-	[AS_HELP_STRING([--with-lua=DIR],
-		[Build Lua ACTION plugin [default=no]])],
-	[use_lua=$withval],
-	[use_lua=no])
-AM_CONDITIONAL(WITH_LUA,test x$use_lua != xno)
+AS_IF([test x$use_sysrepo != xyes],
+  [
+    CPPFLAGS="-I${use_sysrepo} ${CPPFLAGS}"
+    LDFLAGS="-L${use_sysrepo}/.libs ${LDFLAGS}"
+  ]
+)
 
-if test x$use_lua != xno; then
-	if test x$use_lua != xyes; then
-		CPPFLAGS="${CPPFLAGS} -I$use_lua/include"
-		LDFLAGS="${LDFLAGS} -L$use_lua/lib"
-	fi
-	if test x$LUA_VERSION = x; then
-		AX_PROG_LUA([5.1])
-	fi
-	AX_LUA_HEADERS()
-	AX_LUA_LIBS()
-fi
+AC_CHECK_HEADERS([sysrepo/xpath.h],
+	[],
+	[AC_MSG_ERROR([cannot find <sysrepo/xpath.h> header file])]
+	)
+AC_SEARCH_LIBS([sr_connect], [sysrepo],
+	[],
+	[AC_MSG_ERROR([cannot find working sysrepo library])]
+	)
 
 
 AC_CONFIG_FILES([Makefile])

+ 3 - 0
src/Makefile.am

@@ -1,3 +1,6 @@
+plugindir = ${pkglibdir}/@PLUGINS_SUBDIR@
+plugin_LTLIBRARIES =
+
 plugin_LTLIBRARIES += kplugin-sysrepo.la
 kplugin_sysrepo_la_SOURCES =
 kplugin_sysrepo_la_LDFLAGS = $(AM_LDFLAGS) -avoid-version -module

+ 5 - 3
src/pline.c

@@ -123,6 +123,8 @@ static pexpr_t *pline_add_expr(pline_t *pline, const char *xpath)
 	if (xpath)
 		pexpr->xpath = faux_str_dup(xpath);
 	faux_list_add(pline->exprs, pexpr);
+
+	return pexpr;
 }
 
 
@@ -186,7 +188,7 @@ void pline_debug(pline_t *pline)
 	printf("=== Expressions:\n\n");
 
 	iter = faux_list_head(pline->exprs);
-	while (pexpr = (pexpr_t *)faux_list_each(&iter)) {
+	while ((pexpr = (pexpr_t *)faux_list_each(&iter))) {
 		printf("pexpr.xpath = %s\n", pexpr->xpath ? pexpr->xpath : "NULL");
 		printf("pexpr.value = %s\n", pexpr->value ? pexpr->value : "NULL");
 		printf("pexpr.active = %s\n", pexpr->active ? "true" : "false");
@@ -196,7 +198,7 @@ void pline_debug(pline_t *pline)
 	printf("=== Completions:\n\n");
 
 	iter = faux_list_head(pline->compls);
-	while (pcompl = (pcompl_t *)faux_list_each(&iter)) {
+	while ((pcompl = (pcompl_t *)faux_list_each(&iter))) {
 		printf("pcompl.type = %s\n", (pcompl->type == PCOMPL_NODE) ?
 			"PCOMPL_NODE" : "PCOMPL_TYPE");
 		printf("pcompl.node = %s\n", pcompl->node ? pcompl->node->name : "NULL");
@@ -677,7 +679,7 @@ void pline_print_completions(const pline_t *pline, bool_t help)
 	pcompl_t *pcompl = NULL;
 
 	iter = faux_list_head(pline->compls);
-	while (pcompl = (pcompl_t *)faux_list_each(&iter)) {
+	while ((pcompl = (pcompl_t *)faux_list_each(&iter))) {
 		struct lysc_type *type = NULL;
 		const struct lysc_node *node = pcompl->node;
 

+ 1 - 1
src/sr_copypaste.h

@@ -6,7 +6,7 @@
 #include <sysrepo/xpath.h>
 
 
-static int
+int
 sr_ly_module_is_internal(const struct lys_module *ly_mod);
 
 int