[gnome-builder] libide: add IdeVcsUri



commit b1eb1473824d3092e28701ca7ab8bd039365df26
Author: Christian Hergert <christian hergert me>
Date:   Fri Apr 3 18:52:48 2015 -0700

    libide: add IdeVcsUri
    
    This structure helps to parse and extract data from git-like URIs.
    I'd prefer to abstract this later on if we get more VCS support rather
    than try to build a one-size-fits-all now.
    
    This should be somewhat reusable by libgit2-glib longer term if desired
    as well.

 .gitignore               |    1 +
 libide/Makefile.am       |    2 +
 libide/ide-vcs-uri.c     |  395 ++++++++++++++++++++++++++++++++++++++++++++++
 libide/ide-vcs-uri.h     |   56 +++++++
 libide/ide.h             |    1 +
 tests/test-ide-vcs-uri.c |   92 +++++++++++
 tests/tests.mk           |    9 +
 7 files changed, 556 insertions(+), 0 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index bc7a1d6..2c996b3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -46,5 +46,6 @@ test-ide-buffer
 test-ide-buffer-manager
 test-ide-context
 test-ide-source-view
+test-ide-vcs-uri
 test-navigation-list
 test.c
diff --git a/libide/Makefile.am b/libide/Makefile.am
index 83a0959..d0cba48 100644
--- a/libide/Makefile.am
+++ b/libide/Makefile.am
@@ -266,6 +266,8 @@ libide_1_0_la_SOURCES = \
        libide/ide-source-view-capture.h \
        libide/ide-source-view-movements.c \
        libide/ide-source-view-movements.h \
+       libide/ide-vcs-uri.c \
+       libide/ide-vcs-uri.h \
        libide/ide-vim-iter.c \
        libide/ide-vim-iter.h \
        libide/modelines/modeline-parser.c \
diff --git a/libide/ide-vcs-uri.c b/libide/ide-vcs-uri.c
new file mode 100644
index 0000000..49c1359
--- /dev/null
+++ b/libide/ide-vcs-uri.c
@@ -0,0 +1,395 @@
+/* ide-vcs-uri.c
+ *
+ * Copyright (C) 2015 Christian Hergert <christian hergert me>
+ *
+ * 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 3 of the License, 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 <http://www.gnu.org/licenses/>.
+ */
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "ide-macros.h"
+#include "ide-vcs-uri.h"
+
+G_DEFINE_BOXED_TYPE (IdeVcsUri, ide_vcs_uri, ide_vcs_uri_ref, ide_vcs_uri_unref)
+
+struct _IdeVcsUri
+{
+  volatile gint ref_count;
+
+  gchar *scheme;
+  gchar *user;
+  gchar *host;
+  gchar *path;
+  guint  port;
+};
+
+static gboolean
+ide_vcs_uri_parse (IdeVcsUri   *self,
+                   const gchar *str)
+{
+  static GRegex *regex1;
+  static GRegex *regex2;
+  static GRegex *regex3;
+  static gsize initialized;
+  GMatchInfo *match_info = NULL;
+  gboolean ret = FALSE;
+
+  if (g_once_init_enter (&initialized))
+    {
+      GError *error = NULL;
+
+      /* http://stackoverflow.com/questions/2514859/regular-expression-for-git-repository */
+
+      regex1 = g_regex_new ("(\\w+://)(.+@)*([\\w\\d\\.]+)(:[\\d]+){0,1}/*(.*)", 0, 0, NULL);
+      g_assert_no_error (error);
+      g_assert (regex1);
+
+      regex2 = g_regex_new ("file://(.*)", 0, 0, NULL);
+      g_assert_no_error (error);
+      g_assert (regex2);
+
+      regex3 = g_regex_new ("(.+@)*([\\w\\d\\.]+):(.*)", 0, 0, NULL);
+      g_assert_no_error (error);
+      g_assert (regex3);
+
+      g_once_init_leave (&initialized, TRUE);
+    }
+
+  if (str == NULL)
+    return FALSE;
+
+  /* check for ssh:// style network uris */
+  g_regex_match (regex1, str, 0, &match_info);
+  if (g_match_info_matches (match_info))
+    {
+      g_autofree gchar *scheme = NULL;
+      g_autofree gchar *user = NULL;
+      g_autofree gchar *host = NULL;
+      g_autofree gchar *path = NULL;
+      g_autofree gchar *portstr = NULL;
+      gint start_pos;
+      gint end_pos;
+      guint port = 0;
+
+      scheme = g_match_info_fetch (match_info, 1);
+      user = g_match_info_fetch (match_info, 2);
+      host = g_match_info_fetch (match_info, 3);
+      portstr = g_match_info_fetch (match_info, 4);
+      path = g_match_info_fetch (match_info, 5);
+
+      g_match_info_fetch_pos (match_info, 5, &start_pos, &end_pos);
+
+      if (*path != '~' && (start_pos > 0) && str [start_pos-1] == '/')
+        {
+          gchar *tmp;
+
+          tmp = path;
+          path = g_strdup_printf ("/%s", path);
+          g_free (tmp);
+        }
+
+      if (!ide_str_empty0 (portstr) && g_ascii_isdigit (portstr [1]))
+        port = CLAMP (atoi (&portstr [1]), 1, G_MAXINT16);
+
+      ide_vcs_uri_set_scheme (self, scheme);
+      ide_vcs_uri_set_user (self, user);
+      ide_vcs_uri_set_host (self, host);
+      ide_vcs_uri_set_port (self, port);
+      ide_vcs_uri_set_path (self, path);
+
+      ret = TRUE;
+    }
+  g_clear_pointer (&match_info, g_match_info_free);
+
+  if (ret)
+    return ret;
+
+  /* check for local file:// style uris */
+  g_regex_match (regex2, str, 0, &match_info);
+  if (g_match_info_matches (match_info))
+    {
+      g_autofree gchar *path = NULL;
+
+      path = g_match_info_fetch (match_info, 1);
+
+      ide_vcs_uri_set_scheme (self, "file://");
+      ide_vcs_uri_set_user (self, NULL);
+      ide_vcs_uri_set_host (self, NULL);
+      ide_vcs_uri_set_port (self, 0);
+      ide_vcs_uri_set_path (self, path);
+
+      ret = TRUE;
+    }
+  g_clear_pointer (&match_info, g_match_info_free);
+
+  if (ret)
+    return ret;
+
+  /* check for user host style uris */
+  g_regex_match (regex3, str, 0, &match_info);
+  if (g_match_info_matches (match_info))
+    {
+      g_autofree gchar *user = NULL;
+      g_autofree gchar *host = NULL;
+      g_autofree gchar *path = NULL;
+
+      user = g_match_info_fetch (match_info, 1);
+      host = g_match_info_fetch (match_info, 2);
+      path = g_match_info_fetch (match_info, 3);
+
+      ide_vcs_uri_set_user (self, user);
+      ide_vcs_uri_set_host (self, host);
+      ide_vcs_uri_set_path (self, path);
+      ide_vcs_uri_set_scheme (self, "ssh://");
+
+      ret = TRUE;
+    }
+  g_clear_pointer (&match_info, g_match_info_free);
+
+  if (ret)
+    return ret;
+
+  ide_vcs_uri_set_scheme (self, "file://");
+  ide_vcs_uri_set_user (self, NULL);
+  ide_vcs_uri_set_host (self, NULL);
+  ide_vcs_uri_set_port (self, 0);
+  ide_vcs_uri_set_path (self, str);
+
+  return TRUE;
+}
+
+IdeVcsUri *
+ide_vcs_uri_new (const gchar *uri)
+{
+  IdeVcsUri *self;
+
+  self = g_new0 (IdeVcsUri, 1);
+  self->ref_count = 1;
+
+  if (ide_vcs_uri_parse (self, uri))
+    return self;
+
+  g_free (self);
+
+  return NULL;
+}
+
+static void
+ide_vcs_uri_finalize (IdeVcsUri *self)
+{
+  g_free (self->scheme);
+  g_free (self->user);
+  g_free (self->host);
+  g_free (self->path);
+  g_free (self);
+}
+
+IdeVcsUri *
+ide_vcs_uri_ref (IdeVcsUri *self)
+{
+  g_return_val_if_fail (self, NULL);
+  g_return_val_if_fail (self->ref_count > 0, NULL);
+
+  g_atomic_int_inc (&self->ref_count);
+
+  return self;
+}
+
+void
+ide_vcs_uri_unref (IdeVcsUri *self)
+{
+  g_return_if_fail (self);
+  g_return_if_fail (self->ref_count > 0);
+
+  if (g_atomic_int_dec_and_test (&self->ref_count))
+    ide_vcs_uri_finalize (self);
+}
+
+const gchar *
+ide_vcs_uri_get_scheme (const IdeVcsUri *self)
+{
+  g_return_val_if_fail (self, NULL);
+
+  return self->scheme;
+}
+
+const gchar *
+ide_vcs_uri_get_user (const IdeVcsUri *self)
+{
+  g_return_val_if_fail (self, NULL);
+
+  return self->user;
+}
+
+const gchar *
+ide_vcs_uri_get_host (const IdeVcsUri *self)
+{
+  g_return_val_if_fail (self, NULL);
+
+  return self->host;
+}
+
+guint
+ide_vcs_uri_get_port (const IdeVcsUri *self)
+{
+  g_return_val_if_fail (self, NULL);
+
+  return self->port;
+}
+
+const gchar *
+ide_vcs_uri_get_path (const IdeVcsUri *self)
+{
+  g_return_val_if_fail (self, NULL);
+
+  return self->path;
+}
+
+void
+ide_vcs_uri_set_scheme (IdeVcsUri   *self,
+                        const gchar *scheme)
+{
+  g_return_if_fail (self);
+
+  if (scheme != self->scheme)
+    {
+      const gchar *tmp;
+
+      g_clear_pointer (&self->scheme, g_free);
+
+      if (scheme != NULL && (tmp = strchr (scheme, ':')))
+        self->scheme = g_strndup (scheme, tmp - scheme);
+      else
+        self->scheme = g_strdup (scheme);
+    }
+}
+
+void
+ide_vcs_uri_set_user (IdeVcsUri   *self,
+                      const gchar *user)
+{
+  g_return_if_fail (self);
+
+  if (ide_str_empty0 (user))
+    user = NULL;
+
+  if (user != self->user)
+    {
+      const gchar *tmp;
+
+      g_clear_pointer (&self->user, g_free);
+
+      if (user != NULL && (tmp = strchr (user, '@')))
+        self->user = g_strndup (user, tmp - user);
+      else
+        self->user = g_strdup (user);
+    }
+}
+
+void
+ide_vcs_uri_set_host (IdeVcsUri   *self,
+                      const gchar *host)
+{
+  g_return_if_fail (self);
+
+  if (host != self->host)
+    {
+      g_free (self->host);
+      self->host = g_strdup (host);
+    }
+}
+
+void
+ide_vcs_uri_set_port (IdeVcsUri *self,
+                      guint      port)
+{
+  g_return_if_fail (self);
+  g_return_if_fail (port >= 0);
+  g_return_if_fail (port <= G_MAXINT16);
+
+  self->port = port;
+}
+
+void
+ide_vcs_uri_set_path (IdeVcsUri   *self,
+                      const gchar *path)
+{
+  g_return_if_fail (self);
+
+  if (ide_str_empty0 (path))
+    path = NULL;
+
+  if (path != self->path)
+    {
+      if (path != NULL && (*path == ':'))
+        path++;
+      g_free (self->path);
+      self->path = g_strdup (path);
+    }
+}
+
+gchar *
+ide_vcs_uri_to_string (const IdeVcsUri *self)
+{
+  GString *str;
+
+  g_return_if_fail (self);
+
+  str = g_string_new (NULL);
+
+  g_string_append_printf (str, "%s://", self->scheme);
+
+  if (0 == g_strcmp0 (self->scheme, "file"))
+    {
+      g_string_append (str, self->path);
+      return g_string_free (str, FALSE);
+    }
+
+  if (self->user != NULL)
+    g_string_append_printf (str, "%s@", self->user);
+
+  g_string_append (str, self->host);
+
+  if (self->port != 0)
+    g_string_append_printf (str, ":%u", self->port);
+
+  if (self->path == NULL)
+    g_string_append (str, "/");
+  else if (self->path [0] == '~')
+    g_string_append_printf (str, "/%s", self->path);
+  else if (self->path [0] != '/')
+    g_string_append_printf (str, "/%s", self->path);
+  else
+    g_string_append (str, self->path);
+
+  return g_string_free (str, FALSE);
+}
+
+gboolean
+ide_vcs_uri_is_valid (const gchar *uri_string)
+{
+  gboolean ret = FALSE;
+
+  if (uri_string != NULL)
+    {
+      IdeVcsUri *uri;
+
+      uri = ide_vcs_uri_new (uri_string);
+      ret = !!uri;
+      g_clear_pointer (&uri, ide_vcs_uri_unref);
+    }
+
+  return ret;
+}
diff --git a/libide/ide-vcs-uri.h b/libide/ide-vcs-uri.h
new file mode 100644
index 0000000..6902ffa
--- /dev/null
+++ b/libide/ide-vcs-uri.h
@@ -0,0 +1,56 @@
+/* ide-vcs-uri.h
+ *
+ * Copyright (C) 2015 Christian Hergert <christian hergert me>
+ *
+ * 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 3 of the License, 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 <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef IDE_VCS_URI_H
+#define IDE_VCS_URI_H
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define IDE_TYPE_VCS_URI (ide_vcs_uri_get_type())
+
+typedef struct _IdeVcsUri IdeVcsUri;
+
+GType        ide_vcs_uri_get_type   (void);
+IdeVcsUri   *ide_vcs_uri_new        (const gchar     *uri);
+IdeVcsUri   *ide_vcs_uri_ref        (IdeVcsUri       *self);
+void         ide_vcs_uri_unref      (IdeVcsUri       *self);
+const gchar *ide_vcs_uri_get_scheme (const IdeVcsUri *self);
+const gchar *ide_vcs_uri_get_user   (const IdeVcsUri *self);
+const gchar *ide_vcs_uri_get_host   (const IdeVcsUri *self);
+guint        ide_vcs_uri_get_port   (const IdeVcsUri *self);
+const gchar *ide_vcs_uri_get_path   (const IdeVcsUri *self);
+void         ide_vcs_uri_set_scheme (IdeVcsUri       *self,
+                                     const gchar     *scheme);
+void         ide_vcs_uri_set_user   (IdeVcsUri       *self,
+                                     const gchar     *user);
+void         ide_vcs_uri_set_host   (IdeVcsUri       *self,
+                                     const gchar     *host);
+void         ide_vcs_uri_set_port   (IdeVcsUri       *self,
+                                     guint            port);
+void         ide_vcs_uri_set_path   (IdeVcsUri       *self,
+                                     const gchar     *path);
+gchar       *ide_vcs_uri_to_string  (const IdeVcsUri *self);
+gboolean     ide_vcs_uri_is_valid   (const gchar     *uri_string);
+
+G_DEFINE_AUTOPTR_CLEANUP_FUNC (IdeVcsUri, ide_vcs_uri_unref)
+
+G_END_DECLS
+
+#endif /* IDE_VCS_URI_H */
diff --git a/libide/ide.h b/libide/ide.h
index 0b3559d..7a6b7ee 100644
--- a/libide/ide.h
+++ b/libide/ide.h
@@ -87,6 +87,7 @@ G_BEGIN_DECLS
 #include "ide-unsaved-file.h"
 #include "ide-unsaved-files.h"
 #include "ide-vcs.h"
+#include "ide-vcs-uri.h"
 
 #include "autotools/ide-autotools-build-system.h"
 #include "autotools/ide-autotools-project-miner.h"
diff --git a/tests/test-ide-vcs-uri.c b/tests/test-ide-vcs-uri.c
new file mode 100644
index 0000000..46527ea
--- /dev/null
+++ b/tests/test-ide-vcs-uri.c
@@ -0,0 +1,92 @@
+#include <ide.h>
+
+typedef struct
+{
+  const gchar *uri;
+  const gchar *expected_scheme;
+  const gchar *expected_user;
+  const gchar *expected_host;
+  const gchar *expected_path;
+  guint        expected_port;
+  const gchar *canonical;
+} UriTest;
+
+static void
+test_sample_uris (void)
+{
+  static const UriTest sample_uris[] = {
+    { "ssh://user host xz:22/path/to/repo.git/", "ssh", "user", "host.xz", "/path/to/repo.git/", 22, 
"ssh://user host xz:22/path/to/repo.git/" },
+    { "ssh://user host xz/path/to/repo.git/", "ssh", "user", "host.xz", "/path/to/repo.git/", 0, "ssh://user 
host xz/path/to/repo.git/" },
+    { "ssh://host.xz:1234/path/to/repo.git/", "ssh", NULL,"host.xz", "/path/to/repo.git/", 1234, 
"ssh://host.xz:1234/path/to/repo.git/" },
+    { "ssh://host.xz/path/to/repo.git/", "ssh", NULL,"host.xz", "/path/to/repo.git/", 0, 
"ssh://host.xz/path/to/repo.git/" },
+    { "ssh://user host xz/path/to/repo.git/", "ssh", "user","host.xz", "/path/to/repo.git/", 0, "ssh://user 
host xz/path/to/repo.git/" },
+    { "ssh://host.xz/path/to/repo.git/", "ssh", NULL,"host.xz", "/path/to/repo.git/", 0, 
"ssh://host.xz/path/to/repo.git/" },
+    { "ssh://user host xz/~user/path/to/repo.git/", "ssh", "user", "host.xz", "~user/path/to/repo.git/", 0, 
"ssh://user host xz/~user/path/to/repo.git/" },
+    { "ssh://host.xz/~user/path/to/repo.git/", "ssh", NULL,"host.xz", "~user/path/to/repo.git/", 0, 
"ssh://host.xz/~user/path/to/repo.git/" },
+    { "ssh://user host xz/~/path/to/repo.git", "ssh", "user", "host.xz", "~/path/to/repo.git",0, "ssh://user 
host xz/~/path/to/repo.git" },
+    { "ssh://host.xz/~/path/to/repo.git", "ssh", NULL, "host.xz", "~/path/to/repo.git", 0, 
"ssh://host.xz/~/path/to/repo.git" },
+    { "user host xz:/path/to/repo.git/", "ssh", "user", "host.xz", "/path/to/repo.git/", 0, "ssh://user host 
xz/path/to/repo.git/" },
+    { "host.xz:/path/to/repo.git/", "ssh", NULL, "host.xz", "/path/to/repo.git/", 0, 
"ssh://host.xz/path/to/repo.git/" },
+    { "user host xz:~user/path/to/repo.git/", "ssh", "user", "host.xz", "~user/path/to/repo.git/", 0, 
"ssh://user host xz/~user/path/to/repo.git/" },
+    { "host.xz:~user/path/to/repo.git/", "ssh", NULL, "host.xz", "~user/path/to/repo.git/", 0, 
"ssh://host.xz/~user/path/to/repo.git/" },
+    { "user host xz:path/to/repo.git", "ssh", "user", "host.xz", "path/to/repo.git", 0, "ssh://user host 
xz/path/to/repo.git" },
+    { "host.xz:path/to/repo.git", "ssh", NULL, "host.xz", "path/to/repo.git", 0, 
"ssh://host.xz/path/to/repo.git" },
+    { "rsync://host.xz/path/to/repo.git/", "rsync", NULL, "host.xz", "/path/to/repo.git/", 0, 
"rsync://host.xz/path/to/repo.git/" },
+    { "git://host.xz/path/to/repo.git/", "git", NULL, "host.xz", "/path/to/repo.git/", 0, 
"git://host.xz/path/to/repo.git/" },
+    { "git://host.xz/~user/path/to/repo.git/", "git", NULL, "host.xz", "~user/path/to/repo.git/", 0, 
"git://host.xz/~user/path/to/repo.git/" },
+    { "http://host.xz/path/to/repo.git/";, "http", NULL, "host.xz", "/path/to/repo.git/", 0, 
"http://host.xz/path/to/repo.git/"; },
+    { "https://host.xz/path/to/repo.git/";, "https", NULL, "host.xz", "/path/to/repo.git/", 0, 
"https://host.xz/path/to/repo.git/"; },
+    { "/path/to/repo.git/", "file", NULL, NULL, "/path/to/repo.git/", 0, "file:///path/to/repo.git/" },
+    { "path/to/repo.git/", "file", NULL, NULL, "path/to/repo.git/", 0, "file://path/to/repo.git/" },
+    { "~/path/to/repo.git", "file", NULL, NULL, "~/path/to/repo.git", 0, "file://~/path/to/repo.git" },
+    { "file:///path/to/repo.git/", "file", NULL, NULL, "/path/to/repo.git/", 0, "file:///path/to/repo.git/" 
},
+    { "file://~/path/to/repo.git/", "file", NULL, NULL, "~/path/to/repo.git/", 0, 
"file://~/path/to/repo.git/" },
+    { NULL }
+  };
+  guint i;
+
+  for (i = 0; sample_uris [i].uri; i++)
+    {
+      g_autoptr(IdeVcsUri) uri = NULL;
+      g_autofree gchar *to_string = NULL;
+
+      uri = ide_vcs_uri_new (sample_uris [i].uri);
+
+      if (uri == NULL)
+        g_error ("Failed to parse %s\n", sample_uris [i].uri);
+
+#if 0
+      g_print ("\n%s (%u)\n"
+               "  scheme: %s\n"
+               "    user: %s\n"
+               "    host: %s\n"
+               "    port: %u\n"
+               "    path: %s\n",
+               sample_uris [i].uri, i,
+               ide_vcs_uri_get_scheme (uri),
+               ide_vcs_uri_get_user (uri),
+               ide_vcs_uri_get_host (uri),
+               ide_vcs_uri_get_port (uri),
+               ide_vcs_uri_get_path (uri));
+#endif
+
+      g_assert (uri != NULL);
+      g_assert_cmpstr (sample_uris [i].expected_scheme, ==, ide_vcs_uri_get_scheme (uri));
+      g_assert_cmpstr (sample_uris [i].expected_user, ==, ide_vcs_uri_get_user (uri));
+      g_assert_cmpstr (sample_uris [i].expected_host, ==, ide_vcs_uri_get_host (uri));
+      g_assert_cmpstr (sample_uris [i].expected_path, ==, ide_vcs_uri_get_path (uri));
+      g_assert_cmpint (sample_uris [i].expected_port, ==, ide_vcs_uri_get_port (uri));
+
+      to_string = ide_vcs_uri_to_string (uri);
+      g_assert_cmpstr (sample_uris [i].canonical, ==, to_string);
+    }
+}
+
+gint
+main (gint argc,
+      gchar *argv[])
+{
+  g_test_init (&argc, &argv, NULL);
+  g_test_add_func ("/Ide/VcsUri/sample_uris", test_sample_uris);
+  return g_test_run ();
+}
diff --git a/tests/tests.mk b/tests/tests.mk
index 68819a8..2b9845e 100644
--- a/tests/tests.mk
+++ b/tests/tests.mk
@@ -53,6 +53,15 @@ test_ide_source_view_CFLAGS = \
 test_ide_source_view_LDADD = libide-1.0.la $(LIBIDE_LIBS)
 
 
+noinst_PROGRAMS += test-ide-vcs-uri
+test_ide_vcs_uri_SOURCES = tests/test-ide-vcs-uri.c
+test_ide_vcs_uri_CFLAGS = \
+       $(libide_1_0_la_CFLAGS) \
+       -DTEST_DATA_DIR="\"$(top_srcdir)/tests/data\"" \
+       -DBUILDDIR="\"$(abs_top_builddir)\""
+test_ide_vcs_uri_LDADD = libide-1.0.la $(LIBIDE_LIBS)
+
+
 EXTRA_DIST += \
        tests/data/project1/configure.ac \
        tests/tests.h \


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]