diff --git a/simgear/package/CatalogTest.cxx b/simgear/package/CatalogTest.cxx
index f61763c2..8e752e82 100644
--- a/simgear/package/CatalogTest.cxx
+++ b/simgear/package/CatalogTest.cxx
@@ -593,7 +593,7 @@ void testInstallArchiveType(HTTP::Client* cl)
SGPath p(rootPath);
p.append("org.flightgear.test.catalog1");
p.append("Aircraft");
- p.append("movies_6789"); // FIXME once archive-dir support is decided
+ p.append("movies");
SG_CHECK_EQUAL(p, ins->path());
diff --git a/simgear/package/Install.cxx b/simgear/package/Install.cxx
index 96cd11e6..78272005 100644
--- a/simgear/package/Install.cxx
+++ b/simgear/package/Install.cxx
@@ -169,7 +169,12 @@ protected:
// build a path like /path/to/packages/org.some.catalog/Aircraft/extract_xxxx/MyAircraftDir
SGPath extractedPath = m_extractPath;
- extractedPath.append(m_owner->package()->dirName());
+ if (m_owner->package()->properties()->hasChild("archive-path")) {
+ extractedPath.append(m_owner->package()->properties()->getStringValue("archive-path"));
+ } else {
+ extractedPath.append(m_owner->package()->dirName());
+ }
+
// rename it to path/to/packages/org.some.catalog/Aircraft/MyAircraftDir
bool ok = extractedPath.rename(m_owner->path());
@@ -179,6 +184,8 @@ protected:
}
// extract_xxxx directory is now empty, so remove it
+ // (note it might not be empty if the archive contained some other
+ // files, but we delete those in such a case
if (m_extractPath.exists()) {
simgear::Dir(m_extractPath).remove();
}
diff --git a/simgear/package/catalogTest1/catalog.xml b/simgear/package/catalogTest1/catalog.xml
index 1b8b7b59..2a46604f 100644
--- a/simgear/package/catalogTest1/catalog.xml
+++ b/simgear/package/catalogTest1/catalog.xml
@@ -183,10 +183,11 @@