Wok 2.3 and Kimchi 2.3 are released!
by Aline Manera
On behalf of everyone who has worked hard on this release, I am pleased to announce the availability of *Wok 2.3* and *Kimchi 2.3*!
Kimchi 2.3 depends on *Wok 2.3*! So make sure to have both of them properly installed in your system.
Among many features,
Wok 2.3 release includes:
✔ Improve user log activity to display failed operations
✔ Improve error messages only disappears on user interaction
✔ New Javascript libraries added:
✔ DataTables.net
✔ Moment.JS
✔ User session timeout alert
✔ Use system's nginx proxy service to launch the web server
✔ Remove AsyncTask data from database
✔ Support to make AsyncTask stoppable
✔ Bug fixes
Kimchi 2.3 release includes:
✔ Disable ISOs without libvirt permission when creating Templates
✔ Netboot Template support
✔ Do not kill wokd on Kimchi starting up issues
✔ Move peers feature to Ginger Base Dashboard tab
✔ Distinguish Template source media from local or remote, ISO or image
✔ Bug fixes
We have worked hard to ensure that Wok and Kimchi run well on the most popular Linux distributions including: Fedora 24,
Ubuntu 16.04, openSUSE LEAP 42.1, and CentOS 7. They use standard Linux interfaces so it should run well on many
other distributions too.
You can easily grab this release in tarball format or via git:
✔ https://github.com/kimchi-project/wok/archive/2.3.0.tar.gz
✔ https://github.com/kimchi-project/kimchi/archive/2.3.0.tar.gz
✔ git clone --recursive https://github.com/kimchi-project/wok.git
There are also some packages available for download at:
✔ http://kimchi-project.github.io/wok/downloads/
✔ http://kimchi-project.github.io/kimchi/downloads/
Go ahead! Give it a try and let us know what you think!
Regards,
Aline Manera
8 years, 2 months
Plans for next release
by Aline Manera
Hi all,
Once Wok 2.3 and Kimchi 2.3 were announced, I'd like to share with you
the new development flow to be adopted up to now.
1. The next branch will not exist anymore from now on.
2. The master branch will always handle new feature development.
3. Now, stable branches are added to the plan. One for each major release.
How will it work?
The stable-2.3.x branch was already created and points to 2.3.0 release.
In this branch, only bug fixes will be merged! By the end of December,
the 2.3.1 release will be announced.
The master branch will handle the new features development - to be the
base for the next major release.
Once the major release enters on code freeze, the stable branch for this
release will be created and then, only bug fixes will be accepted there.
The master branch continues to handle new features development.
Specially in this first cycle, we will not have a major release by end
of December.
Instead of that, we will have a 2.4-Beta. Just because we don't have
much time (due the holidays in the end of year) and effort to release
two versions together.
You can get more details for the next 2 releases in the graphic below.
Another change for next year will be the number of releases per year.
Today, we have 4 releases per year (March, June, Sept, Dec) and it will
be changed to 3 - one release for every 4 months (April, Aug, Dec).
That way, we will have 2 months for development and 2 months on code
freeze. Maybe that way we can deliver more stable releases.
Please, let me know your thoughts on all that.
Regards,
Aline Manera
8 years, 2 months
[Kimchi] next branch was merged into master branch
by Aline Manera
Hi all,
Once Kimchi 2.3 was announced, the next branch was merged into master
branch.
Please, use the master branch for new development as next does not exist
anymore.
Regards,
Aline Manera
8 years, 2 months
[PATCH] [Kimchi] Improve storage volume creation of XML
by pvital@linux.vnet.ibm.com
From: Paulo Vital <pvital(a)linux.vnet.ibm.com>
Set the allocation in new storage volume XML to be zero if not creating
volume in logical pool, otherwise, use the capacity value of volume.
This is an improvement of issue #1017 solution.
Signed-off-by: Paulo Vital <pvital(a)linux.vnet.ibm.com>
---
model/storagevolumes.py | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/model/storagevolumes.py b/model/storagevolumes.py
index dfd2a19..c006b44 100644
--- a/model/storagevolumes.py
+++ b/model/storagevolumes.py
@@ -122,6 +122,7 @@ class StorageVolumesModel(object):
raise InvalidParameter('KCHVOL0001E', {'name': name})
params['pool'] = pool_name
+ params['pool_type'] = pool_info['type']
targeturi = '/plugins/kimchi/storagepools/%s/storagevolumes/%s' \
% (pool_name, name)
taskid = AsyncTask(targeturi, create_func, params).id
@@ -141,7 +142,10 @@ class StorageVolumesModel(object):
</target>
</volume>
"""
- params.setdefault('allocation', params['capacity'])
+ allocation = 0
+ if params['pool_type'] == "logical":
+ allocation = params['capacity']
+ params.setdefault('allocation', allocation)
params.setdefault('format', 'qcow2')
name = params['name']
--
2.7.4
8 years, 2 months
[PATCH] [Kimchi] Fixed noTemplate message display
by rajgupta@linux.vnet.ibm.com
From: Rajat Gupta <rajgupta(a)linux.vnet.ibm.com>
Fixed NoTemplate message display issue also
removed duplicate alert-container div
Signed-off-by: Rajat Gupta <rajgupta(a)linux.vnet.ibm.com>
---
ui/pages/tabs/templates.html.tmpl | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/ui/pages/tabs/templates.html.tmpl b/ui/pages/tabs/templates.html.tmpl
index 7616796..1d3bdf3 100644
--- a/ui/pages/tabs/templates.html.tmpl
+++ b/ui/pages/tabs/templates.html.tmpl
@@ -74,10 +74,6 @@
</div>
</div>
<div id="alert-container"></div>
- <div id="noTemplates" class="list-no-result" style="display: none;">
- $_("No templates found.")
- </div>
- <div id="alert-container"></div>
<ul id="templates-grid" class="wok-vm-list hidden empty-when-logged-off">
<li class="wok-vm-header">
<span class="column-name">$_("Template Name (ID)")</span><!--
@@ -93,6 +89,9 @@
</li>
</ul>
</div>
+ <div id="noTemplates" class="list-no-result" style="display: none;">
+ $_("No templates found.")
+ </div>
</div>
<div class="wok-mask">
<div class="wok-mask-loader-container">
--
2.1.0
8 years, 2 months
[PATCH v2] [Kimchi] Modified unit test cases to include new s390x specific features
by pkulkark@linux.vnet.ibm.com
From: Pooja Kulkarni <pkulkark(a)linux.vnet.ibm.com>
v2:
Corrected make check-local errors
v1:
This patch modifies the unit test cases
to include the new features introduced
for s390x in vm interfaces (macvtap and ovs)
and ovsbridges api.
Signed-off-by: Pooja Kulkarni <pkulkark(a)linux.vnet.ibm.com>
---
tests/test_model.py | 24 +++++++++++++++++
tests/test_rest.py | 78 +++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 102 insertions(+)
diff --git a/tests/test_model.py b/tests/test_model.py
index ff2a6cb..082cb9d 100644
--- a/tests/test_model.py
+++ b/tests/test_model.py
@@ -651,6 +651,30 @@ class ModelTests(unittest.TestCase):
iface = inst.vmiface_lookup(vm_name, mac)
self.assertEquals(mac, iface['mac'])
+ if os.uname()[4] == "s390x":
+
+ # attach macvtap interface to vm
+ iface_args = {"type": "macvtap",
+ "source": "test-network",
+ "mode": "vepa"}
+ mac = inst.vmifaces_create(vm_name, iface_args)
+ rollback.prependDefer(inst.vmiface_delete, vm_name, mac)
+
+ iface = inst.vmiface_lookup(vm_name, mac)
+ self.assertEquals("macvtap", iface["type"])
+ self.assertEquals("test-network", iface['source'])
+ self.assertEquals("vepa", iface['mode'])
+
+ # attach ovs interface to vm
+ iface_args = {"type": "ovs",
+ "source": "test-network"}
+ mac = inst.vmifaces_create(vm_name, iface_args)
+ rollback.prependDefer(inst.vmiface_delete, vm_name, mac)
+
+ iface = inst.vmiface_lookup(vm_name, mac)
+ self.assertEquals("ovs", iface["type"])
+ self.assertEquals("test-network", iface['source'])
+
@unittest.skipUnless(utils.running_as_root(), 'Must be run as root')
def test_vm_netboot(self):
inst = model.Model(objstore_loc=self.tmp_store)
diff --git a/tests/test_rest.py b/tests/test_rest.py
index 3a61d13..bfb25c6 100644
--- a/tests/test_rest.py
+++ b/tests/test_rest.py
@@ -967,6 +967,19 @@ class RestTests(unittest.TestCase):
'POST')
self.assertEquals(400, resp.status)
+ # try to attach an interface of type "macvtap" without source
+ if os.uname()[4] == "s390x":
+ req = json.dumps({'type': 'macvtap'})
+ resp = self.request('/plugins/kimchi/vms/test-vm/ifaces', req,
+ 'POST')
+ self.assertEqual(400, resp.status)
+
+ # try to attach an interface of type "ovs" without source
+ req = json.dumps({'type': 'ovs'})
+ resp = self.request('/plugins/kimchi/vms/test-vm/ifaces', req,
+ 'POST')
+ self.assertEqual(400, resp.status)
+
# attach network interface to vm
req = json.dumps({"type": "network",
"network": "test-network",
@@ -1018,6 +1031,67 @@ class RestTests(unittest.TestCase):
iface['mac'], '{}', 'DELETE')
self.assertEquals(204, resp.status)
+ if os.uname()[4] == "s390x":
+ # attach macvtap interface to vm
+ req = json.dumps({"type": "macvtap",
+ "source": "test-network"})
+ resp = self.request('/plugins/kimchi/vms/test-vm/ifaces', req,
+ 'POST')
+ self.assertEquals(201, resp.status)
+ iface = json.loads(resp.read())
+
+ self.assertEquals('test-network', iface['source'])
+ self.assertEquals('macvtap', iface['type'])
+
+ # Start the VM
+ resp = self.request('/plugins/kimchi/vms/test-vm/start', '{}',
+ 'POST')
+ vm = json.loads(
+ self.request('/plugins/kimchi/vms/test-vm').read())
+ self.assertEquals('running', vm['state'])
+
+ # Force poweroff the VM
+ resp = self.request('/plugins/kimchi/vms/test-vm/poweroff',
+ '{}', 'POST')
+ vm = json.loads(
+ self.request('/plugins/kimchi/vms/test-vm').read())
+ self.assertEquals('shutoff', vm['state'])
+
+ # detach network interface from vm
+ resp = self.request('/plugins/kimchi/vms/test-vm/ifaces/%s' %
+ iface['mac'], '{}', 'DELETE')
+ self.assertEquals(204, resp.status)
+
+ # attach ovs interface to vm
+ req = json.dumps({"type": "ovs",
+ "source": "test-network"})
+ resp = self.request('/plugins/kimchi/vms/test-vm/ifaces', req,
+ 'POST')
+ self.assertEquals(201, resp.status)
+ iface = json.loads(resp.read())
+
+ self.assertEquals('test-network', iface['source'])
+ self.assertEquals('ovs', iface['type'])
+
+ # Start the VM
+ resp = self.request('/plugins/kimchi/vms/test-vm/start', '{}',
+ 'POST')
+ vm = json.loads(
+ self.request('/plugins/kimchi/vms/test-vm').read())
+ self.assertEquals('running', vm['state'])
+
+ # Force poweroff the VM
+ resp = self.request('/plugins/kimchi/vms/test-vm/poweroff',
+ '{}', 'POST')
+ vm = json.loads(
+ self.request('/plugins/kimchi/vms/test-vm').read())
+ self.assertEquals('shutoff', vm['state'])
+
+ # detach ovs interface from vm
+ resp = self.request('/plugins/kimchi/vms/test-vm/ifaces/%s' %
+ iface['mac'], '{}', 'DELETE')
+ self.assertEquals(204, resp.status)
+
def test_vm_customise_storage(self):
# Create a Template
req = json.dumps({'name': 'test', 'disks': DISKS,
@@ -1434,6 +1508,10 @@ class RestTests(unittest.TestCase):
if distro.get('reason'):
self.assertIn('KCHDISTRO0001E', distro.get('reason'))
+ def test_ovsbridges(self):
+ resp = self.request('/plugins/kimchi/ovsbridges')
+ self.assertEquals(200, resp.status)
+
class HttpsRestTests(RestTests):
"""
--
2.1.0
8 years, 2 months
[PATCH] [Kimchi] For s390x hide VNC, PCI, Snapshot, Graphics and clone options
by rajgupta@linux.vnet.ibm.com
From: Rajat Gupta <rajgupta(a)linux.vnet.ibm.com>
For s390x hide VNC, PCI, Snapshot, Graphics and clone options
Signed-off-by: Rajat Gupta <rajgupta(a)linux.vnet.ibm.com>
---
ui/js/src/kimchi.guest_edit_main.js | 4 ++++
ui/js/src/kimchi.guest_main.js | 8 ++++++++
ui/js/src/kimchi.template_edit_main.js | 1 +
ui/pages/template-edit.html.tmpl | 4 ++--
4 files changed, 15 insertions(+), 2 deletions(-)
diff --git a/ui/js/src/kimchi.guest_edit_main.js b/ui/js/src/kimchi.guest_edit_main.js
index c3609c2..9669d08 100644
--- a/ui/js/src/kimchi.guest_edit_main.js
+++ b/ui/js/src/kimchi.guest_edit_main.js
@@ -1207,4 +1207,8 @@ kimchi.guest_edit_main = function() {
}
}
};
+
+ if(kimchi.hostarch === s390xArch){
+ $('#guest-edit-window ul li a[data-id="form-guest-edit-pci"],a[data-id="form-guest-edit-snapshot"]').parent().hide();
+ }
};
diff --git a/ui/js/src/kimchi.guest_main.js b/ui/js/src/kimchi.guest_main.js
index 34217e4..f1be019 100644
--- a/ui/js/src/kimchi.guest_main.js
+++ b/ui/js/src/kimchi.guest_main.js
@@ -20,6 +20,9 @@
var guestFilterList;
var listFiltered;
+//init s390x Architecture
+var s390xArch = 's390x';
+
kimchi.sampleGuestObject = {
"name": "",
"uuid": "",
@@ -897,6 +900,11 @@ kimchi.listVmsAuto = function() {
}
$('#guests-root-container > .wok-mask').fadeOut(300, function() {
});
+ //check if Architecture is s390x and hide VNC column
+ if(kimchi.hostarch === s390xArch){
+ $('#guests-root-container span.column-vnc').addClass('hidden');
+ $('#guestList a[name="vm-clone"]').hide();
+ }
} else {
$('.grid-control').addClass('hidden');
$('#guestListField').hide();
diff --git a/ui/js/src/kimchi.template_edit_main.js b/ui/js/src/kimchi.template_edit_main.js
index 7d7cce3..b1f5123 100644
--- a/ui/js/src/kimchi.template_edit_main.js
+++ b/ui/js/src/kimchi.template_edit_main.js
@@ -69,6 +69,7 @@ kimchi.template_edit_main = function() {
$('input[name="' + prop + '"]', templateEditMain).val(value);
}
if(kimchi.hostarch == s390xArch){
+ $('.graphics', templateEditMain).hide();
$('.console', templateEditMain).show();
var consoleData = template.console ? template.console : '';
$('#template-edit-console', templateEditMain).val(consoleData);
diff --git a/ui/pages/template-edit.html.tmpl b/ui/pages/template-edit.html.tmpl
index 9ccc664..10532be 100644
--- a/ui/pages/template-edit.html.tmpl
+++ b/ui/pages/template-edit.html.tmpl
@@ -70,7 +70,7 @@
<div class="template-edit-wrapper-label templ-edit-vm-image hide">
<label for="template-edit-vmimage-textbox">$_("Image File")</label>
</div>
- <div class="template-edit-wrapper-label">
+ <div class="template-edit-wrapper-label graphics">
<label>$_("Graphics")</label>
</div>
<div class="template-edit-wrapper-label console" style="display:none">
@@ -104,7 +104,7 @@
<input id="template-edit-vmimage-textbox" class="form-control" name="vm-image" type="text" disabled="disabled" />
<span class="fa fa-times form-control-feedback"></span>
</div>
- <div class="template-edit-wrapper-controls">
+ <div class="template-edit-wrapper-controls graphics">
<select id="template-edit-graphics" name="graphics" class="form-control" />
</div>
<div class="template-edit-wrapper-controls console" style="display:none">
--
2.1.0
8 years, 2 months
[PATCH] [Kimchi] Fix make-rpm target
by Aline Manera
make-rpm was failing as below because the dist target (which is
responsible to generate the package tarball) was removed from rpm generation
Add it back and update po/Makefile.in.in to do not modify files while
generating the package.
/usr/bin/mkdir -p rpm/BUILD rpm/RPMS rpm/SOURCES rpm/SPECS rpm/SRPMS
cp ./kimchi.spec rpm/SPECS/kimchi.spec
cp kimchi-2.2.0.tar.gz rpm/SOURCES
cp: cannot stat ‘kimchi-2.2.0.tar.gz’: No such file or directory
Signed-off-by: Aline Manera <alinefm(a)linux.vnet.ibm.com>
---
Makefile.am | 8 ++++----
po/Makefile.in.in | 9 ---------
2 files changed, 4 insertions(+), 13 deletions(-)
diff --git a/Makefile.am b/Makefile.am
index 95eff36..01d4edf 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -135,17 +135,17 @@ kimchi.spec: contrib/kimchi.spec.fedora contrib/kimchi.spec.suse
/bin/false ; \
fi
-rpm: kimchi.spec
+rpm: dist kimchi.spec
$(MKDIR_P) rpm/BUILD rpm/RPMS rpm/SOURCES rpm/SPECS rpm/SRPMS
cp $(top_srcdir)/kimchi.spec rpm/SPECS/kimchi.spec
cp $(DIST_ARCHIVES) rpm/SOURCES
rpmbuild -ba --define "_topdir `pwd`/rpm" rpm/SPECS/kimchi.spec
-fedora-rpm: contrib/kimchi.spec.fedora
+fedora-rpm: dist contrib/kimchi.spec.fedora
ln -sf contrib/kimchi.spec.fedora kimchi.spec
$(MAKE) rpm
-suse-rpm: contrib/kimchi.spec.suse
+suse-rpm: dist contrib/kimchi.spec.suse
ln -sf contrib/kimchi.spec.suse kimchi.spec
$(MAKE) rpm
@@ -183,7 +183,7 @@ VERSION:
git describe --abbrev=0 --always > $@; \
fi
-.PHONY: deb install-deb rpm fedora-rpm suse-rpm ChangeLog VERSION
+.PHONY: deb install-deb rpm fedora-rpm suse-rpm VERSION
clean-local:
diff --git a/po/Makefile.in.in b/po/Makefile.in.in
index d01fb31..b7168c7 100644
--- a/po/Makefile.in.in
+++ b/po/Makefile.in.in
@@ -306,7 +306,6 @@ maintainer-clean: distclean
distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
dist distdir:
- $(MAKE) update-po
@$(MAKE) dist2
# This is a separate target because 'update-po' must be executed before.
dist2: stamp-po $(DISTFILES)
@@ -317,14 +316,6 @@ dist2: stamp-po $(DISTFILES)
if test -f $(srcdir)/$(DOMAIN).pot; then \
dists="$$dists $(DOMAIN).pot stamp-po"; \
fi; \
- if test -f $(srcdir)/ChangeLog; then \
- dists="$$dists ChangeLog"; \
- fi; \
- for i in 0 1 2 3 4 5 6 7 8 9; do \
- if test -f $(srcdir)/ChangeLog.$$i; then \
- dists="$$dists ChangeLog.$$i"; \
- fi; \
- done; \
if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \
for file in $$dists; do \
if test -f $$file; then \
--
2.5.5
8 years, 2 months
[PATCH] [Wok] Fix make-rpm target
by Aline Manera
make-rpm was failing as below because the dist target (which is
responsible to generate the package tarball) was removed from rpm generation
Add it back and update po/Makefile.in.in to do not modify files while
generating the package.
/usr/bin/mkdir -p rpm/BUILD rpm/RPMS rpm/SOURCES rpm/SPECS rpm/SRPMS
<danielhb> cp ./wok.spec rpm/SPECS/wok.spec
<danielhb> cp wok-2.2.0.tar.gz rpm/SOURCES
<danielhb> cp: cannot stat ‘wok-2.2.0.tar.gz’: No such file or directory
---
Makefile.am | 8 ++++----
po/Makefile.in.in | 9 ---------
src/wok/plugins/sample/po/Makefile.in.in | 9 ---------
3 files changed, 4 insertions(+), 22 deletions(-)
diff --git a/Makefile.am b/Makefile.am
index 2b27a6a..8b3f508 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -115,17 +115,17 @@ wok.spec: contrib/wok.spec.fedora contrib/wok.spec.suse
/bin/false ; \
fi
-rpm: wok.spec
+rpm: dist wok.spec
$(MKDIR_P) rpm/BUILD rpm/RPMS rpm/SOURCES rpm/SPECS rpm/SRPMS
cp $(top_srcdir)/wok.spec rpm/SPECS/wok.spec
cp $(DIST_ARCHIVES) rpm/SOURCES
rpmbuild -ba --define "_topdir `pwd`/rpm" rpm/SPECS/wok.spec
-fedora-rpm: contrib/wok.spec.fedora
+fedora-rpm: dist contrib/wok.spec.fedora
ln -sf contrib/wok.spec.fedora wok.spec
$(MAKE) rpm
-suse-rpm: contrib/wok.spec.suse
+suse-rpm: dist contrib/wok.spec.suse
ln -sf contrib/wok.spec.suse wok.spec
$(MAKE) rpm
@@ -178,7 +178,7 @@ VERSION:
git describe --abbrev=0 --always > $@; \
fi
-.PHONY: deb install-deb rpm fedora-rpm suse-rpm ChangeLog VERSION
+.PHONY: deb install-deb rpm fedora-rpm suse-rpm VERSION
clean-local:
diff --git a/po/Makefile.in.in b/po/Makefile.in.in
index d01fb31..b7168c7 100644
--- a/po/Makefile.in.in
+++ b/po/Makefile.in.in
@@ -306,7 +306,6 @@ maintainer-clean: distclean
distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
dist distdir:
- $(MAKE) update-po
@$(MAKE) dist2
# This is a separate target because 'update-po' must be executed before.
dist2: stamp-po $(DISTFILES)
@@ -317,14 +316,6 @@ dist2: stamp-po $(DISTFILES)
if test -f $(srcdir)/$(DOMAIN).pot; then \
dists="$$dists $(DOMAIN).pot stamp-po"; \
fi; \
- if test -f $(srcdir)/ChangeLog; then \
- dists="$$dists ChangeLog"; \
- fi; \
- for i in 0 1 2 3 4 5 6 7 8 9; do \
- if test -f $(srcdir)/ChangeLog.$$i; then \
- dists="$$dists ChangeLog.$$i"; \
- fi; \
- done; \
if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \
for file in $$dists; do \
if test -f $$file; then \
diff --git a/src/wok/plugins/sample/po/Makefile.in.in b/src/wok/plugins/sample/po/Makefile.in.in
index 52ab81c..62e9dae 100644
--- a/src/wok/plugins/sample/po/Makefile.in.in
+++ b/src/wok/plugins/sample/po/Makefile.in.in
@@ -308,7 +308,6 @@ maintainer-clean: distclean
distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
dist distdir:
- $(MAKE) update-po
@$(MAKE) dist2
# This is a separate target because 'update-po' must be executed before.
dist2: stamp-po $(DISTFILES)
@@ -319,14 +318,6 @@ dist2: stamp-po $(DISTFILES)
if test -f $(srcdir)/$(DOMAIN).pot; then \
dists="$$dists $(DOMAIN).pot stamp-po"; \
fi; \
- if test -f $(srcdir)/ChangeLog; then \
- dists="$$dists ChangeLog"; \
- fi; \
- for i in 0 1 2 3 4 5 6 7 8 9; do \
- if test -f $(srcdir)/ChangeLog.$$i; then \
- dists="$$dists ChangeLog.$$i"; \
- fi; \
- done; \
if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \
for file in $$dists; do \
if test -f $$file; then \
--
2.5.5
8 years, 2 months