[arch-commits] Commit in 0ad/repos (4 files)
Sven-Hendrik Haase
svenstaro at gemini.archlinux.org
Thu Aug 11 03:16:33 UTC 2022
Date: Thursday, August 11, 2022 @ 03:16:33
Author: svenstaro
Revision: 1265154
archrelease: copy trunk to community-staging-x86_64
Added:
0ad/repos/community-staging-x86_64/
0ad/repos/community-staging-x86_64/PKGBUILD
(from rev 1265153, 0ad/trunk/PKGBUILD)
0ad/repos/community-staging-x86_64/glibc-2.35.patch
(from rev 1265153, 0ad/trunk/glibc-2.35.patch)
0ad/repos/community-staging-x86_64/python-3.10.patch
(from rev 1265153, 0ad/trunk/python-3.10.patch)
-------------------+
PKGBUILD | 55 ++++++++++++++++++
glibc-2.35.patch | 157 ++++++++++++++++++++++++++++++++++++++++++++++++++++
python-3.10.patch | 78 +++++++++++++++++++++++++
3 files changed, 290 insertions(+)
Copied: 0ad/repos/community-staging-x86_64/PKGBUILD (from rev 1265153, 0ad/trunk/PKGBUILD)
===================================================================
--- community-staging-x86_64/PKGBUILD (rev 0)
+++ community-staging-x86_64/PKGBUILD 2022-08-11 03:16:33 UTC (rev 1265154)
@@ -0,0 +1,55 @@
+# Maintainer: Sven-Hendrik Haase <svenstaro at archlinux.org>
+# Contributor: t3ddy <t3ddy1988 "at" gmail {dot} com>
+# Contributor: Adrián Chaves Fernández (Gallaecio) <adriyetichaves at gmail.com>
+pkgname=0ad
+pkgver=a25.b
+_pkgver=0.0.25b-alpha
+pkgrel=8
+pkgdesc="Cross-platform, 3D and historically-based real-time strategy game"
+arch=('x86_64')
+url="http://play0ad.com/"
+license=('GPL2' 'CCPL')
+depends=('0ad-data' 'binutils' 'boost-libs' 'curl' 'enet' 'libogg' 'libpng' 'libvorbis'
+ 'libxml2' 'openal' 'sdl2' 'wxwidgets-gtk3' 'zlib' 'libgl' 'glu' 'fmt'
+ 'gloox' 'miniupnpc' 'libminiupnpc.so' 'icu' 'nspr' 'libsodium')
+makedepends=('boost' 'cmake' 'mesa' 'zip' 'libsm' 'rust' 'python' 'clang')
+options=('!lto') # breaks spidermonkey linking (https://bugs.gentoo.org/746947)
+source=("https://releases.wildfiregames.com/$pkgname-$_pkgver-unix-build.tar.xz"
+ glibc-2.35.patch
+ python-3.10.patch)
+sha512sums=('e8069897b97b381099ab5ec5868d27e96c699105b3307054d1bc7bf9236a537f02625ba9034892d91f3e951b4f95c9ce5fb75ed0a7c14b8a294882482fd9c1b4'
+ 'e56fa4a3a43f7510dde50d5fd0ccda2f935d9ad2aac44d9af9e89109c655b605f8ef582e1188be3dc1d42b7feef0caefa0ec514776696603c237f054fd6778c9'
+ '42df5eb7c4a99b31365b7f15c5bcd76c978339f2837eb8bc6ec371979429d0f0a6e31e870f6851aa40fc4859cb3e82f74821a01d04b82b486342db0fa60bf55e')
+
+prepare() {
+ cd $pkgname-$_pkgver
+ patch -Np1 -i ../glibc-2.35.patch # https://code.wildfiregames.com/rP26536
+ patch -Np1 -i ../python-3.10.patch # Fix spidermonkey build with Python 3.10
+}
+
+build() {
+ cd "$pkgname-$_pkgver/build/workspaces"
+
+ ./update-workspaces.sh -j$(nproc) \
+ --without-pch \
+ --bindir=/usr/bin \
+ --libdir=/usr/lib/0ad \
+ --datadir=/usr/share/0ad/data
+
+ cd gcc
+
+ VERBOSE=1 make
+}
+
+package() {
+ cd "$pkgname-$_pkgver"
+ install -d "${pkgdir}"/usr/{bin,lib/0ad,share/"${pkgname}"/data}
+ install -Dm755 binaries/system/pyrogenesis "${pkgdir}/usr/bin"
+ install -Dm755 binaries/system/*.so "${pkgdir}/usr/lib/0ad"
+
+ cp -r binaries/data/l10n/ "${pkgdir}/usr/share/${pkgname}/data/"
+
+ install -Dm755 build/resources/${pkgname}.sh "${pkgdir}/usr/bin/${pkgname}"
+ install -Dm644 build/resources/${pkgname}.desktop "${pkgdir}/usr/share/applications/${pkgname}.desktop"
+ install -Dm644 build/resources/${pkgname}.png "${pkgdir}/usr/share/pixmaps/${pkgname}.png"
+}
Copied: 0ad/repos/community-staging-x86_64/glibc-2.35.patch (from rev 1265153, 0ad/trunk/glibc-2.35.patch)
===================================================================
--- community-staging-x86_64/glibc-2.35.patch (rev 0)
+++ community-staging-x86_64/glibc-2.35.patch 2022-08-11 03:16:33 UTC (rev 1265154)
@@ -0,0 +1,157 @@
+From 7df614338cbd41f5e254ce75f649490b2637e1d0 Mon Sep 17 00:00:00 2001
+From: vladislavbelov <vladislavbelov at 3db68df2-c116-0410-a063-a993310a9797>
+Date: Thu, 3 Mar 2022 18:10:05 +0000
+Subject: [PATCH] Replaces M_PIf by M_PI in Atlas, fixes compilation with gcc
+ 11.2.0 and glibc 2.35.
+
+There was added a workaround in glibc to fix tests.
+
+Refs:
+https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103735
+https://sourceware.org/bugzilla/show_bug.cgi?id=28713
+
+
+git-svn-id: https://svn.wildfiregames.com/public/ps/trunk@26536 3db68df2-c116-0410-a063-a993310a9797
+---
+ .../Sections/Environment/Environment.cpp | 88 ++++++++++++-------
+ 1 file changed, 57 insertions(+), 31 deletions(-)
+
+diff --git a/source/tools/atlas/AtlasUI/ScenarioEditor/Sections/Environment/Environment.cpp b/source/tools/atlas/AtlasUI/ScenarioEditor/Sections/Environment/Environment.cpp
+index d4796ec1f2f..2cc265230d9 100644
+--- a/source/tools/atlas/AtlasUI/ScenarioEditor/Sections/Environment/Environment.cpp
++++ b/source/tools/atlas/AtlasUI/ScenarioEditor/Sections/Environment/Environment.cpp
+@@ -1,4 +1,4 @@
+-/* Copyright (C) 2021 Wildfire Games.
++/* Copyright (C) 2022 Wildfire Games.
+ * This file is part of 0 A.D.
+ *
+ * 0 A.D. is free software: you can redistribute it and/or modify
+@@ -29,8 +29,6 @@ using AtlasMessage::Shareable;
+
+ static Observable<AtlasMessage::sEnvironmentSettings> g_EnvironmentSettings;
+
+-const float M_PIf = 3.14159265f;
+-
+ //////////////////////////////////////////////////////////////////////////
+
+ class VariableSliderBox : public wxPanel
+@@ -85,12 +83,15 @@ class VariableListBox : public wxPanel
+ : wxPanel(parent),
+ m_Var(var)
+ {
+- m_Conn = g_EnvironmentSettings.RegisterObserver(0, &VariableListBox::OnSettingsChange, this);
++ m_Conn = g_EnvironmentSettings.RegisterObserver(
++ 0, &VariableListBox::OnSettingsChange, this);
+
+ m_Sizer = new wxStaticBoxSizer(wxVERTICAL, this, label);
+ SetSizer(m_Sizer);
+
+- m_Combo = new wxComboBox(this, -1, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxArrayString(), wxCB_READONLY),
++ m_Combo = new wxComboBox(
++ this, -1, wxEmptyString, wxDefaultPosition, wxDefaultSize,
++ wxArrayString(), wxCB_READONLY),
+ m_Sizer->Add(m_Combo, wxSizerFlags().Expand());
+ }
+
+@@ -206,8 +207,9 @@ static void SendToGame(const AtlasMessage::sEnvironmentSettings& settings)
+ POST_COMMAND(SetEnvironmentSettings, (settings));
+ }
+
+-EnvironmentSidebar::EnvironmentSidebar(ScenarioEditor& scenarioEditor, wxWindow* sidebarContainer, wxWindow* bottomBarContainer)
+-: Sidebar(scenarioEditor, sidebarContainer, bottomBarContainer)
++EnvironmentSidebar::EnvironmentSidebar(
++ ScenarioEditor& scenarioEditor, wxWindow* sidebarContainer, wxWindow* bottomBarContainer)
++ : Sidebar(scenarioEditor, sidebarContainer, bottomBarContainer)
+ {
+ wxSizer* scrollSizer = new wxBoxSizer(wxVERTICAL);
+ wxScrolledWindow* scrolledWindow = new wxScrolledWindow(this);
+@@ -217,15 +219,24 @@ EnvironmentSidebar::EnvironmentSidebar(ScenarioEditor& scenarioEditor, wxWindow*
+
+ wxSizer* waterSizer = new wxStaticBoxSizer(wxVERTICAL, scrolledWindow, _T("Water settings"));
+ scrollSizer->Add(waterSizer, wxSizerFlags().Expand());
+- waterSizer->Add(new wxButton(scrolledWindow, ID_RecomputeWaterData, _("Reset Water Data")), wxSizerFlags().Expand());
+- waterSizer->Add(m_WaterTypeList = new VariableListBox(scrolledWindow, _("Water Type"), g_EnvironmentSettings.watertype), wxSizerFlags().Expand());
+- waterSizer->Add(new VariableSliderBox(scrolledWindow, _("Water height"), g_EnvironmentSettings.waterheight, 0.f, 1.2f), wxSizerFlags().Expand());
+- waterSizer->Add(new wxButton(scrolledWindow, ID_PickWaterHeight, _("Pick Water Height")), wxSizerFlags().Expand());
+- waterSizer->Add(new VariableSliderBox(scrolledWindow, _("Water waviness"), g_EnvironmentSettings.waterwaviness, 0.f, 10.f), wxSizerFlags().Expand());
+- waterSizer->Add(new VariableSliderBox(scrolledWindow, _("Water murkiness"), g_EnvironmentSettings.watermurkiness, 0.f, 1.f), wxSizerFlags().Expand());
+- waterSizer->Add(new VariableSliderBox(scrolledWindow, _("Wind angle"), g_EnvironmentSettings.windangle, -M_PIf, M_PIf), wxSizerFlags().Expand());
+- waterSizer->Add(new VariableColorBox(scrolledWindow, _("Water color"), g_EnvironmentSettings.watercolor), wxSizerFlags().Expand());
+- waterSizer->Add(new VariableColorBox(scrolledWindow, _("Water tint"), g_EnvironmentSettings.watertint), wxSizerFlags().Expand());
++ waterSizer->Add(new wxButton(
++ scrolledWindow, ID_RecomputeWaterData, _("Reset Water Data")), wxSizerFlags().Expand());
++ waterSizer->Add(m_WaterTypeList = new VariableListBox(
++ scrolledWindow, _("Water Type"), g_EnvironmentSettings.watertype), wxSizerFlags().Expand());
++ waterSizer->Add(new VariableSliderBox(
++ scrolledWindow, _("Water height"), g_EnvironmentSettings.waterheight, 0.f, 1.2f), wxSizerFlags().Expand());
++ waterSizer->Add(new wxButton(
++ scrolledWindow, ID_PickWaterHeight, _("Pick Water Height")), wxSizerFlags().Expand());
++ waterSizer->Add(new VariableSliderBox(
++ scrolledWindow, _("Water waviness"), g_EnvironmentSettings.waterwaviness, 0.f, 10.f), wxSizerFlags().Expand());
++ waterSizer->Add(new VariableSliderBox(
++ scrolledWindow, _("Water murkiness"), g_EnvironmentSettings.watermurkiness, 0.f, 1.f), wxSizerFlags().Expand());
++ waterSizer->Add(new VariableSliderBox(
++ scrolledWindow, _("Wind angle"), g_EnvironmentSettings.windangle, -static_cast<float>(M_PI), static_cast<float>(M_PI)), wxSizerFlags().Expand());
++ waterSizer->Add(new VariableColorBox(
++ scrolledWindow, _("Water color"), g_EnvironmentSettings.watercolor), wxSizerFlags().Expand());
++ waterSizer->Add(new VariableColorBox(
++ scrolledWindow, _("Water tint"), g_EnvironmentSettings.watertint), wxSizerFlags().Expand());
+
+ std::vector<std::wstring> list;
+ list.push_back(L"ocean"); list.push_back(L"lake"); list.push_back(L"clap");
+@@ -235,25 +246,40 @@ EnvironmentSidebar::EnvironmentSidebar(ScenarioEditor& scenarioEditor, wxWindow*
+ wxSizer* sunSizer = new wxStaticBoxSizer(wxVERTICAL, scrolledWindow, _T("Sun / lighting settings"));
+ scrollSizer->Add(sunSizer, wxSizerFlags().Expand().Border(wxTOP, 8));
+
+- sunSizer->Add(new VariableSliderBox(scrolledWindow, _("Sun rotation"), g_EnvironmentSettings.sunrotation, -M_PIf, M_PIf), wxSizerFlags().Expand());
+- sunSizer->Add(new VariableSliderBox(scrolledWindow, _("Sun elevation"), g_EnvironmentSettings.sunelevation, -M_PIf/2, M_PIf/2), wxSizerFlags().Expand());
+- sunSizer->Add(new VariableSliderBox(scrolledWindow, _("Sun overbrightness"), g_EnvironmentSettings.sunoverbrightness, 1.0f, 3.0f), wxSizerFlags().Expand());
+- sunSizer->Add(new LightControl(scrolledWindow, wxSize(150, 150), g_EnvironmentSettings));
+- sunSizer->Add(new VariableColorBox(scrolledWindow, _("Sun color"), g_EnvironmentSettings.suncolor), wxSizerFlags().Expand());
+- sunSizer->Add(m_SkyList = new VariableListBox(scrolledWindow, _("Sky set"), g_EnvironmentSettings.skyset), wxSizerFlags().Expand());
+- sunSizer->Add(new VariableSliderBox(scrolledWindow, _("Fog Factor"), g_EnvironmentSettings.fogfactor, 0.0f, 0.01f), wxSizerFlags().Expand());
+- sunSizer->Add(new VariableSliderBox(scrolledWindow, _("Fog Thickness"), g_EnvironmentSettings.fogmax, 0.5f, 0.0f), wxSizerFlags().Expand());
+- sunSizer->Add(new VariableColorBox(scrolledWindow, _("Fog color"), g_EnvironmentSettings.fogcolor), wxSizerFlags().Expand());
+- sunSizer->Add(new VariableColorBox(scrolledWindow, _("Ambient color"), g_EnvironmentSettings.ambientcolor), wxSizerFlags().Expand());
++ sunSizer->Add(new VariableSliderBox(
++ scrolledWindow, _("Sun rotation"), g_EnvironmentSettings.sunrotation, -static_cast<float>(M_PI), static_cast<float>(M_PI)), wxSizerFlags().Expand());
++ sunSizer->Add(new VariableSliderBox(
++ scrolledWindow, _("Sun elevation"), g_EnvironmentSettings.sunelevation, -static_cast<float>(M_PI) / 2.0f, static_cast<float>(M_PI) / 2.0f), wxSizerFlags().Expand());
++ sunSizer->Add(new VariableSliderBox(
++ scrolledWindow, _("Sun overbrightness"), g_EnvironmentSettings.sunoverbrightness, 1.0f, 3.0f), wxSizerFlags().Expand());
++ sunSizer->Add(new LightControl(
++ scrolledWindow, wxSize(150, 150), g_EnvironmentSettings));
++ sunSizer->Add(new VariableColorBox(
++ scrolledWindow, _("Sun color"), g_EnvironmentSettings.suncolor), wxSizerFlags().Expand());
++ sunSizer->Add(m_SkyList = new VariableListBox(
++ scrolledWindow, _("Sky set"), g_EnvironmentSettings.skyset), wxSizerFlags().Expand());
++ sunSizer->Add(new VariableSliderBox(
++ scrolledWindow, _("Fog Factor"), g_EnvironmentSettings.fogfactor, 0.0f, 0.01f), wxSizerFlags().Expand());
++ sunSizer->Add(new VariableSliderBox(
++ scrolledWindow, _("Fog Thickness"), g_EnvironmentSettings.fogmax, 0.5f, 0.0f), wxSizerFlags().Expand());
++ sunSizer->Add(new VariableColorBox(
++ scrolledWindow, _("Fog color"), g_EnvironmentSettings.fogcolor), wxSizerFlags().Expand());
++ sunSizer->Add(new VariableColorBox(
++ scrolledWindow, _("Ambient color"), g_EnvironmentSettings.ambientcolor), wxSizerFlags().Expand());
+
+ wxSizer* postProcSizer = new wxStaticBoxSizer(wxVERTICAL, scrolledWindow, _T("Post-processing settings"));
+ scrollSizer->Add(postProcSizer, wxSizerFlags().Expand().Border(wxTOP, 8));
+
+- postProcSizer->Add(m_PostEffectList = new VariableListBox(scrolledWindow, _("Post Effect"), g_EnvironmentSettings.posteffect), wxSizerFlags().Expand());
+- postProcSizer->Add(new VariableSliderBox(scrolledWindow, _("Brightness"), g_EnvironmentSettings.brightness, -0.5f, 0.5f), wxSizerFlags().Expand());
+- postProcSizer->Add(new VariableSliderBox(scrolledWindow, _("Contrast (HDR)"), g_EnvironmentSettings.contrast, 0.5f, 1.5f), wxSizerFlags().Expand());
+- postProcSizer->Add(new VariableSliderBox(scrolledWindow, _("Saturation"), g_EnvironmentSettings.saturation, 0.0f, 2.0f), wxSizerFlags().Expand());
+- postProcSizer->Add(new VariableSliderBox(scrolledWindow, _("Bloom"), g_EnvironmentSettings.bloom, 0.2f, 0.0f), wxSizerFlags().Expand());
++ postProcSizer->Add(m_PostEffectList = new VariableListBox(
++ scrolledWindow, _("Post Effect"), g_EnvironmentSettings.posteffect), wxSizerFlags().Expand());
++ postProcSizer->Add(new VariableSliderBox(
++ scrolledWindow, _("Brightness"), g_EnvironmentSettings.brightness, -0.5f, 0.5f), wxSizerFlags().Expand());
++ postProcSizer->Add(new VariableSliderBox(
++ scrolledWindow, _("Contrast (HDR)"), g_EnvironmentSettings.contrast, 0.5f, 1.5f), wxSizerFlags().Expand());
++ postProcSizer->Add(new VariableSliderBox(
++ scrolledWindow, _("Saturation"), g_EnvironmentSettings.saturation, 0.0f, 2.0f), wxSizerFlags().Expand());
++ postProcSizer->Add(new VariableSliderBox(
++ scrolledWindow, _("Bloom"), g_EnvironmentSettings.bloom, 0.2f, 0.0f), wxSizerFlags().Expand());
+
+ m_Conn = g_EnvironmentSettings.RegisterObserver(0, &SendToGame);
+ }
Copied: 0ad/repos/community-staging-x86_64/python-3.10.patch (from rev 1265153, 0ad/trunk/python-3.10.patch)
===================================================================
--- community-staging-x86_64/python-3.10.patch (rev 0)
+++ community-staging-x86_64/python-3.10.patch 2022-08-11 03:16:33 UTC (rev 1265154)
@@ -0,0 +1,78 @@
+diff -ru --new-file 0ad-0.0.25b-alpha.orig/libraries/source/spidermonkey/patch.sh 0ad-0.0.25b-alpha/libraries/source/spidermonkey/patch.sh
+--- 0ad-0.0.25b-alpha.orig/libraries/source/spidermonkey/patch.sh 2021-12-17 08:53:59.543315034 +0100
++++ 0ad-0.0.25b-alpha/libraries/source/spidermonkey/patch.sh 2021-12-17 08:53:34.789777469 +0100
+@@ -43,6 +43,8 @@
+ # Note that this isn't quite the upstream patch to match our version.
+ patch -p1 < ../FixRust150.diff
+
++patch -p1 < ../python-3.10.diff
++
+ # Patch those separately, as they might interfere with normal behaviour.
+ if [ "$(uname -s)" = "FreeBSD" ];
+ then
+diff -ru --new-file 0ad-0.0.25b-alpha.orig/libraries/source/spidermonkey/python-3.10.diff 0ad-0.0.25b-alpha/libraries/source/spidermonkey/python-3.10.diff
+--- 0ad-0.0.25b-alpha.orig/libraries/source/spidermonkey/python-3.10.diff 1970-01-01 01:00:00.000000000 +0100
++++ 0ad-0.0.25b-alpha/libraries/source/spidermonkey/python-3.10.diff 2021-12-17 09:05:09.713419684 +0100
+@@ -0,0 +1,62 @@
++diff -ru mozjs-78.6.0.orig/python/mozbuild/mozbuild/backend/configenvironment.py mozjs-78.6.0/python/mozbuild/mozbuild/backend/configenvironment.py
++--- mozjs-78.6.0.orig/python/mozbuild/mozbuild/backend/configenvironment.py 2020-11-28 17:33:58.000000000 +0100
+++++ mozjs-78.6.0/python/mozbuild/mozbuild/backend/configenvironment.py 2021-12-17 08:52:07.342371513 +0100
++@@ -9,7 +9,8 @@
++ import sys
++ import json
++
++-from collections import Iterable, OrderedDict
+++from collections.abc import Iterable
+++from collections import OrderedDict
++ from types import ModuleType
++
++ import mozpack.path as mozpath
++diff -ru mozjs-78.6.0.orig/python/mozbuild/mozbuild/makeutil.py mozjs-78.6.0/python/mozbuild/mozbuild/makeutil.py
++--- mozjs-78.6.0.orig/python/mozbuild/mozbuild/makeutil.py 2020-11-28 17:33:58.000000000 +0100
+++++ mozjs-78.6.0/python/mozbuild/mozbuild/makeutil.py 2021-12-17 09:05:02.820298351 +0100
++@@ -7,7 +7,7 @@
++ import os
++ import re
++ import six
++-from collections import Iterable
+++from collections.abc import Iterable
++
++
++ class Makefile(object):
++diff -ru mozjs-78.6.0.orig/python/mozbuild/mozbuild/util.py mozjs-78.6.0/python/mozbuild/mozbuild/util.py
++--- mozjs-78.6.0.orig/python/mozbuild/mozbuild/util.py 2020-11-28 17:33:58.000000000 +0100
+++++ mozjs-78.6.0/python/mozbuild/mozbuild/util.py 2021-12-17 08:52:31.045908142 +0100
++@@ -782,7 +782,7 @@
++ self._strings = StrictOrderingOnAppendList()
++ self._children = {}
++
++- class StringListAdaptor(collections.Sequence):
+++ class StringListAdaptor(collections.abc.Sequence):
++ def __init__(self, hsl):
++ self._hsl = hsl
++
++diff -ru mozjs-78.6.0.orig/testing/mozbase/manifestparser/manifestparser/filters.py mozjs-78.6.0/testing/mozbase/manifestparser/manifestparser/filters.py
++--- mozjs-78.6.0.orig/testing/mozbase/manifestparser/manifestparser/filters.py 2020-11-28 17:34:00.000000000 +0100
+++++ mozjs-78.6.0/testing/mozbase/manifestparser/manifestparser/filters.py 2021-12-17 09:02:44.801711871 +0100
++@@ -12,7 +12,8 @@
++
++ import itertools
++ import os
++-from collections import defaultdict, MutableSequence
+++from collections import defaultdict
+++from collections.abc import MutableSequence
++
++ import six
++ from six import string_types
++diff -ru mozjs-78.6.0.orig/third_party/python/virtualenv/virtualenv.py mozjs-78.6.0/third_party/python/virtualenv/virtualenv.py
++--- mozjs-78.6.0.orig/third_party/python/virtualenv/virtualenv.py 2020-11-28 17:34:05.000000000 +0100
+++++ mozjs-78.6.0/third_party/python/virtualenv/virtualenv.py 2021-12-17 08:58:55.798970530 +0100
++@@ -1804,7 +1804,7 @@
++ pass
++ else:
++ # noinspection PyProtectedMember
++- if sysconfig._get_default_scheme() == "posix_local":
+++ if sysconfig.get_default_scheme() == "posix_local":
++ local_path = os.path.join(home_dir, "local")
++ if not os.path.exists(local_path):
++ os.mkdir(local_path)
More information about the arch-commits
mailing list