diff --git a/dev-utils/perl/perl.py b/dev-utils/perl/perl.py index d56571f3..684180aa 100644 --- a/dev-utils/perl/perl.py +++ b/dev-utils/perl/perl.py @@ -1,118 +1,117 @@ import tempfile import CraftOS import info from Package.AutoToolsPackageBase import * from Package.MakeFilePackageBase import * class subinfo(info.infoclass): def setTargets(self): for ver in ["5.28.1"]: self.targets[ver] = f"https://www.cpan.org/src/5.0/perl-{ver}.tar.gz" if CraftCore.compiler.isWindows: self.targetInstSrc[ver] = f"perl-{ver}/win32" else: self.targetInstSrc[ver] = f"perl-{ver}" if CraftCore.compiler.isWindows: # With msvc2015+ and Windows 10 1803 perlglob is broken. for that reason we provide a precompiled version # https://developercommunity.visualstudio.com/content/problem/245615/first-file-name-in-command-line-wildcard-expansion.html self.patchToApply["5.28.0"] = [("perl-5.28.0-20181129.diff", 1)] self.patchToApply["5.28.1"] = [("perl-5.28.0-20181129.diff", 1), ("perl-5.28.1-20181229.diff", 2)] self.targetDigests["5.28.0"] = (['7e929f64d4cb0e9d1159d4a59fc89394e27fa1f7004d0836ca0d514685406ea8'], CraftHash.HashAlgorithm.SHA256) self.targetDigests["5.28.1"] = (['3ebf85fe65df2ee165b22596540b7d5d42f84d4b72d84834f74e2e0b8956c347'],CraftHash.HashAlgorithm.SHA256) self.description = ("Perl 5 is a highly capable, feature-rich programming language with over 30 years of " "development. Perl 5 runs on over 100 platforms from portables to mainframes and is " "suitable for both rapid prototyping and large scale development projects.") self.patchLevel["5.28.0"] = 5 self.patchLevel["5.28.1"] = 1 self.defaultTarget = "5.28.1" def setDependencies(self): self.runtimeDependencies["virtual/base"] = None - self.runtimeDependencies["libs/expat"] = None class PackageMSVC(MakeFilePackageBase): def __init__(self, **args): MakeFilePackageBase.__init__(self) self.subinfo.options.make.supportsMultijob = False self.subinfo.options.useShadowBuild = False root = OsUtils.toUnixPath(CraftCore.standardDirs.craftRoot()) config = { "CCTYPE": "MSVC141" if CraftCore.compiler.isMSVC() else "GCC", "CRAFT_DESTDIR": self.installDir(), "CRAFT_WIN64": "" if CraftCore.compiler.isX64() else "undef", "PLMAKE": "nmake" if CraftCore.compiler.isMSVC() else "mingw32-make"} if CraftCore.compiler.isMinGW(): config["CCHOME"] = os.path.join(CraftCore.standardDirs.craftRoot(), "mingw64") config["SHELL"] = os.environ["COMSPEC"] config["CRAFT_CFLAGS"] = f"\"{os.environ.get('CFLAGS', '')} -I'{root}/include' -L'{root}/lib'\"" elif CraftCore.compiler.isX86(): config["PROCESSOR_ARCHITECTURE"] = CraftCore.compiler.architecture self.subinfo.options.make.args += " ".join(["{0}={1}".format(x, y) for x, y in config.items()]) self.subinfo.options.install.args = f"{self.subinfo.options.make.args} installbare" def _globEnv(self): env = {} if CraftCore.compiler.isMSVC(): env = {"PATH": f"{self.packageDir()};{os.environ['PATH']}"} return env def make(self): with utils.ScopedEnv(self._globEnv()): return super().make() def install(self): with utils.ScopedEnv(self._globEnv()): return (super().install() and utils.globCopyDir(os.path.join(self.sourceDir(), ".."), os.path.join(self.installDir(), "lib"), ["perl5*.lib"]) and utils.globCopyDir(os.path.join(self.sourceDir(), "..", "lib", "CORE"), os.path.join(self.installDir(), "include", "perl"), ["**/*.h"])) def postInstall(self): newPrefix = OsUtils.toUnixPath(self.installPrefix()) oldPrefixes = [self.installDir(), OsUtils.toUnixPath(self.installDir()), self.installDir().replace("\\", "\\\\")] pattern = [re.compile("^.*(pl|pm)$")] files = utils.filterDirectoryContent(self.installDir(), whitelist=lambda x, root: utils.regexFileFilter(x, root, pattern), blacklist=lambda x, root: True) return self.patchInstallPrefix(files, oldPrefixes, newPrefix) class PackageAutoTools(AutoToolsPackageBase): def __init__(self, **args): AutoToolsPackageBase.__init__(self) # https://metacpan.org/pod/distribution/perl/INSTALL self.subinfo.options.install.args = "install.perl" self.subinfo.options.configure.args = f"-des -D 'prefix={self.installPrefix()}' -D mksymlinks -D userelocatableinc -U default_inc_excludes_dot" cflags = self.shell.environment["CFLAGS"] ldflags = self.shell.environment["LDFLAGS"] if CraftCore.compiler.isGCC() and not CraftCore.compiler.isNative() and CraftCore.compiler.isX86(): cflags += " -m32" ldflags += " -m32" self.subinfo.options.configure.args += " -Alddlflags='-m32 -shared' -Uuse64bitint -Uuse64bitall" self.subinfo.options.configure.args += f" -Accflags='{cflags}' -Aldflags='{ldflags}' " def configure(self): self.enterBuildDir() return self.shell.execute(self.buildDir(), os.path.join(self.sourceDir(), "Configure"), self.subinfo.options.configure.args) if CraftCore.compiler.isUnix: class Package(PackageAutoTools): pass else: class Package(PackageMSVC): pass diff --git a/perl-modules/uti-url/uti-url.py b/perl-modules/uti-url/uti-url.py new file mode 100644 index 00000000..01f050ef --- /dev/null +++ b/perl-modules/uti-url/uti-url.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +import info +from Package.PerlPackageBase import * + + +class subinfo(info.infoclass): + # def setDependencies( self ): + + def setTargets(self): + for ver in ["1.76"]: + self.targets[ver] = f"https://cpan.metacpan.org/authors/id/O/OA/OALDERS/URI-{ver}.tar.gz" + self.targetInstSrc[ver] = f"URI-{ver}" + self.targetDigests["1.76"] = (['b2c98e1d50d6f572483ee538a6f4ccc8d9185f91f0073fd8af7390898254413e'], CraftHash.HashAlgorithm.SHA256) + self.tags = 'URI::URL' + self.defaultTarget = '1.76' + + +class Package(PerlPackageBase): + def __init__(self, **args): + PerlPackageBase.__init__(self) diff --git a/perl-modules/xml-parser/xml-parser.py b/perl-modules/xml-parser/xml-parser.py new file mode 100644 index 00000000..cbea8c6c --- /dev/null +++ b/perl-modules/xml-parser/xml-parser.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +import info +from Package.PerlPackageBase import * + + +class subinfo(info.infoclass): + def setDependencies( self ): + self.runtimeDependencies["libs/expat"] = None + + def setTargets(self): + for ver in ["2.44"]: + self.targets[ver] = f"https://cpan.metacpan.org/authors/id/T/TO/TODDR/XML-Parser-{ver}.tar.gz" + self.targetInstSrc[ver] = f"XML-Parser-{ver}" + self.targetDigests["2.44"] = (['1ae9d07ee9c35326b3d9aad56eae71a6730a73a116b9fe9e8a4758b7cc033216'], CraftHash.HashAlgorithm.SHA256) + self.tags = 'XML::Parser' + self.defaultTarget = '2.44' + + +class Package(PerlPackageBase): + def __init__(self, **args): + PerlPackageBase.__init__(self)