summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/private/App/AppStore/Bundles/HubBundle.php12
-rw-r--r--lib/private/App/DependencyAnalyzer.php24
-rw-r--r--lib/private/App/Platform.php4
-rw-r--r--lib/private/Setup.php2
-rw-r--r--resources/app-info.xsd15
5 files changed, 53 insertions, 4 deletions
diff --git a/lib/private/App/AppStore/Bundles/HubBundle.php b/lib/private/App/AppStore/Bundles/HubBundle.php
index 501a4825772..301be810c5d 100644
--- a/lib/private/App/AppStore/Bundles/HubBundle.php
+++ b/lib/private/App/AppStore/Bundles/HubBundle.php
@@ -33,13 +33,19 @@ class HubBundle extends Bundle {
}
public function getAppIdentifiers() {
- return [
+ $hubApps = [
'spreed',
'contacts',
'calendar',
'mail',
- 'richdocumentscode',
- 'richdocuments',
];
+
+ $architecture = php_uname('m');
+ if (PHP_OS_FAMILY === 'Linux' && in_array($architecture, ['x86_64', 'aarch64'])) {
+ $hubApps[] = 'richdocuments';
+ $hubApps[] = 'richdocumentscode' . ($architecture === 'aarch64' ? '_arm64' : '');
+ }
+
+ return $hubApps;
}
}
diff --git a/lib/private/App/DependencyAnalyzer.php b/lib/private/App/DependencyAnalyzer.php
index 8e7cdde68e4..f63cb384b15 100644
--- a/lib/private/App/DependencyAnalyzer.php
+++ b/lib/private/App/DependencyAnalyzer.php
@@ -64,6 +64,7 @@ class DependencyAnalyzer {
}
return array_merge(
+ $this->analyzeArchitecture($dependencies),
$this->analyzePhpVersion($dependencies),
$this->analyzeDatabases($dependencies),
$this->analyzeCommands($dependencies),
@@ -174,6 +175,29 @@ class DependencyAnalyzer {
return $missing;
}
+ private function analyzeArchitecture(array $dependencies) {
+ $missing = [];
+ if (!isset($dependencies['architecture'])) {
+ return $missing;
+ }
+
+ $supportedArchitectures = $dependencies['architecture'];
+ if (empty($supportedArchitectures)) {
+ return $missing;
+ }
+ if (!is_array($supportedArchitectures)) {
+ $supportedArchitectures = [$supportedArchitectures];
+ }
+ $supportedArchitectures = array_map(function ($architecture) {
+ return $this->getValue($architecture);
+ }, $supportedArchitectures);
+ $currentArchitecture = $this->platform->getArchitecture();
+ if (!in_array($currentArchitecture, $supportedArchitectures, true)) {
+ $missing[] = (string)$this->l->t('The following architectures are supported: %s', [implode(', ', $supportedArchitectures)]);
+ }
+ return $missing;
+ }
+
/**
* @param array $dependencies
* @return array
diff --git a/lib/private/App/Platform.php b/lib/private/App/Platform.php
index 4a64177232f..03e9c7d2767 100644
--- a/lib/private/App/Platform.php
+++ b/lib/private/App/Platform.php
@@ -97,4 +97,8 @@ class Platform {
$repo = new PlatformRepository();
return $repo->findLibrary($name);
}
+
+ public function getArchitecture(): string {
+ return php_uname('m');
+ }
}
diff --git a/lib/private/Setup.php b/lib/private/Setup.php
index cbfdcb2ee07..369447def2e 100644
--- a/lib/private/Setup.php
+++ b/lib/private/Setup.php
@@ -544,7 +544,7 @@ class Setup {
$content .= "\n RewriteCond %{REQUEST_FILENAME} !/ocs-provider/";
$content .= "\n RewriteCond %{REQUEST_FILENAME} !/ocm-provider/";
$content .= "\n RewriteCond %{REQUEST_URI} !^/\\.well-known/(acme-challenge|pki-validation)/.*";
- $content .= "\n RewriteCond %{REQUEST_FILENAME} !/richdocumentscode/proxy.php$";
+ $content .= "\n RewriteCond %{REQUEST_FILENAME} !/richdocumentscode(_arm64)?/proxy.php$";
$content .= "\n RewriteRule . index.php [PT,E=PATH_INFO:$1]";
$content .= "\n RewriteBase " . $rewriteBase;
$content .= "\n <IfModule mod_env.c>";
diff --git a/resources/app-info.xsd b/resources/app-info.xsd
index 7c0f04efb59..f03fd0ed402 100644
--- a/resources/app-info.xsd
+++ b/resources/app-info.xsd
@@ -97,6 +97,10 @@
<xs:selector xpath="dependencies/database"/>
<xs:field xpath="."/>
</xs:unique>
+ <xs:unique name="uniqueArchitecture">
+ <xs:selector xpath="dependencies/architecture"/>
+ <xs:field xpath="."/>
+ </xs:unique>
<xs:unique name="uniqueLib">
<xs:selector xpath="dependencies/lib"/>
<xs:field xpath="."/>
@@ -552,6 +556,8 @@
maxOccurs="1"/>
<xs:element name="nextcloud" type="nextcloud" minOccurs="1"
maxOccurs="1"/>
+ <xs:element name="architecture" type="architecture" minOccurs="0"
+ maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
@@ -613,6 +619,15 @@
</xs:restriction>
</xs:simpleType>
+ <xs:simpleType name="architecture">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="x86"/>
+ <xs:enumeration value="x86_64"/>
+ <xs:enumeration value="aarch"/>
+ <xs:enumeration value="aarch64"/>
+ </xs:restriction>
+ </xs:simpleType>
+
<xs:complexType name="repair-steps">
<xs:sequence>
<xs:element name="pre-migration" type="steps" minOccurs="0"