summaryrefslogtreecommitdiff
path: root/var
diff options
context:
space:
mode:
Diffstat (limited to 'var')
-rw-r--r--var/spack/repos/builtin/packages/libogg/package.py37
-rw-r--r--var/spack/repos/builtin/packages/libtheora/libtheora-inc-external-ogg.patch35
-rw-r--r--var/spack/repos/builtin/packages/libtheora/package.py102
3 files changed, 163 insertions, 11 deletions
diff --git a/var/spack/repos/builtin/packages/libogg/package.py b/var/spack/repos/builtin/packages/libogg/package.py
index c0fad6bbf3..c82794e9ba 100644
--- a/var/spack/repos/builtin/packages/libogg/package.py
+++ b/var/spack/repos/builtin/packages/libogg/package.py
@@ -3,10 +3,13 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
+import os
+
+from spack.build_systems.generic import GenericBuilder
from spack.package import *
-class Libogg(AutotoolsPackage):
+class Libogg(CMakePackage, AutotoolsPackage, Package):
"""Ogg is a multimedia container format, and the native file and stream
format for the Xiph.org multimedia codecs."""
@@ -24,3 +27,35 @@ class Libogg(AutotoolsPackage):
sha256="0f4d289aecb3d5f7329d51f1a72ab10c04c336b25481a40d6d841120721be485",
when="@1.3.4 platform=darwin",
)
+ build_system(
+ conditional("cmake", when="@1.3.4:"),
+ conditional("generic", when="@1.3.2 platform=windows"),
+ "autotools",
+ default="autotools",
+ )
+
+
+class GenericBuilder(GenericBuilder):
+ phases = ["build", "install"]
+
+ def is_64bit(self):
+ return "64" in self.pkg.spec.target.family
+
+ def build(self, spec, prefix):
+ if spec.satisfies("%msvc"):
+ plat_tools = self.pkg.compiler.msvc_version
+ else:
+ raise RuntimeError("Package does not support non MSVC compilers on Windows")
+ ms_build_args = ["libogg_static.vcxproj", "/p:PlatformToolset=v%s" % plat_tools]
+ msbuild(*ms_build_args)
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.include.ogg)
+ mkdirp(prefix.lib)
+ mkdirp(prefix.share)
+ install(
+ os.path.join(self.pkg.stage.source_path, "include", "ogg", "*.h"), prefix.include.ogg
+ )
+ plat_prefix = "x64" if self.is_64bit() else "x86"
+ install(os.path.join(plat_prefix, "Debug", "*.lib"), prefix.lib)
+ install_tree(os.path.join(self.pkg.stage.source_path, "doc"), prefix.share)
diff --git a/var/spack/repos/builtin/packages/libtheora/libtheora-inc-external-ogg.patch b/var/spack/repos/builtin/packages/libtheora/libtheora-inc-external-ogg.patch
new file mode 100644
index 0000000000..fd88480e7c
--- /dev/null
+++ b/var/spack/repos/builtin/packages/libtheora/libtheora-inc-external-ogg.patch
@@ -0,0 +1,35 @@
+diff --git a/win32/VS2008/libogg.vsprops b/win32/VS2008/libogg.vsprops
+index 1355b50..8b3c5b8 100644
+--- a/win32/VS2008/libogg.vsprops
++++ b/win32/VS2008/libogg.vsprops
+@@ -6,11 +6,11 @@
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+- AdditionalIncludeDirectories="&quot;..\..\..\..\libogg-$(LIBOGG_VERSION)\include&quot;;..\..\..\..\ogg\include;..\..\..\..\..\..\..\core\ogg\libogg\include"
++ AdditionalIncludeDirectories="$(SPACK_OGG_PREFIX)\include;&quot;..\..\..\..\libogg-$(LIBOGG_VERSION)\include&quot;;..\..\..\..\ogg\include;..\..\..\..\..\..\..\core\ogg\libogg\include"
+ />
+ <Tool
+ Name="VCLinkerTool"
+- AdditionalLibraryDirectories="&quot;..\..\..\..\libogg-$(LIBOGG_VERSION)\win32\VS2008\$(PlatformName)\$(ConfigurationName)&quot;;&quot;..\..\..\..\ogg\win32\VS2008\$(PlatformName)\$(ConfigurationName)&quot;;&quot;..\..\..\..\..\..\..\core\ogg\libogg\win32\VS2008\$(PlatformName)\$(ConfigurationName)&quot;"
++ AdditionalLibraryDirectories="$(SPACK_OGG_PREFIX)\lib;&quot;..\..\..\..\libogg-$(LIBOGG_VERSION)\win32\VS2008\$(PlatformName)\$(ConfigurationName)&quot;;&quot;..\..\..\..\ogg\win32\VS2008\$(PlatformName)\$(ConfigurationName)&quot;;&quot;..\..\..\..\..\..\..\core\ogg\libogg\win32\VS2008\$(PlatformName)\$(ConfigurationName)&quot;"
+ />
+ <UserMacro
+ Name="LIBOGG_VERSION"
+diff --git a/win32/VS2008/libtheora_static.sln b/win32/VS2008/libtheora_static.sln
+index 2b39635..fa40518 100644
+--- a/win32/VS2008/libtheora_static.sln
++++ b/win32/VS2008/libtheora_static.sln
+@@ -1,12 +1,8 @@
+
+ Microsoft Visual Studio Solution File, Format Version 10.00
+ # Visual Studio 2008
+-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dump_video_static", "dump_video\dump_video_static.vcproj", "{1A8CA99D-B6C7-48CB-B263-6CECDADF5FBF}"
+-EndProject
+ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libtheora_static", "libtheora\libtheora_static.vcproj", "{653F3841-3F26-49B9-AFCF-091DB4B67031}"
+ EndProject
+-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "encoder_example_static", "encoder_example\encoder_example_static.vcproj", "{AD710263-EBFA-4388-BAA9-AD73C32AFF26}"
+-EndProject
+ Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
diff --git a/var/spack/repos/builtin/packages/libtheora/package.py b/var/spack/repos/builtin/packages/libtheora/package.py
index 280d838bdd..5d3f181272 100644
--- a/var/spack/repos/builtin/packages/libtheora/package.py
+++ b/var/spack/repos/builtin/packages/libtheora/package.py
@@ -3,10 +3,16 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
+import glob
+import os
+import sys
+
+from spack.build_systems.autotools import AutotoolsBuilder
+from spack.build_systems.msbuild import MSBuildBuilder
from spack.package import *
-class Libtheora(AutotoolsPackage):
+class Libtheora(AutotoolsPackage, MSBuildPackage):
"""Theora Video Compression."""
homepage = "https://www.theora.org"
@@ -17,13 +23,25 @@ class Libtheora(AutotoolsPackage):
variant("doc", default=False, description="Build documentation")
- depends_on("autoconf", type="build")
- depends_on("automake", type="build")
- depends_on("libtool", type="build")
- depends_on("m4", type="build")
depends_on("doxygen", when="+doc", type="build")
depends_on("libogg")
depends_on("libpng")
+ with when("build_system=autotools"):
+ depends_on("autoconf", type="build")
+ depends_on("automake", type="build")
+ depends_on("libtool", type="build")
+ depends_on("m4", type="build")
+
+ with when("platform=windows"):
+ variant(
+ "static",
+ default=True,
+ description="Enable static build, if false shared library is built",
+ )
+
+ build_system(
+ "msbuild", "autotools", default="autotools" if sys.platform != "win32" else "msbuild"
+ )
patch("exit-prior-to-running-configure.patch", when="@1.1.1")
patch("fix_encoding.patch", when="@1.1:")
@@ -32,15 +50,79 @@ class Libtheora(AutotoolsPackage):
sha256="8b1f256fa6bfb4ce1355c5be1104e8cfe695c8484d8ea19db06c006880a02298",
when="^libpng@1.6:",
)
+ patch("libtheora-inc-external-ogg.patch", when="platform=windows")
+
- def autoreconf(self, spec, prefix):
+class AutotoolsBuilder(AutotoolsBuilder):
+ def configure_args(self):
+ args = []
+ args += self.enable_or_disable("doc")
+ return args
+
+ def autoreconf(self, pkg, spec, prefix):
sh = which("sh")
if self.spec.satisfies("target=aarch64:"):
sh("./autogen.sh", "prefix={0}".format(prefix), "--build=arm-linux")
else:
sh("./autogen.sh", "prefix={0}".format(prefix))
- def configure_args(self):
- args = []
- args += self.enable_or_disable("doc")
- return args
+
+class MSBuildBuilder(MSBuildBuilder):
+ def is_64bit(self):
+ return "64" in self.pkg.spec.target.family
+
+ def setup_build_environment(self, env):
+ spec = self.pkg.spec
+ env.set("SPACK_OGG_PREFIX", spec["libogg"].prefix)
+ # devenv is needed to convert ancient MSbuild project to modern
+ # msbuild project so MSBuild versions older than 2010 can build this
+ # project
+ devenv_path = os.path.join(self.pkg.compiler.vs_root, "Common7", "IDE")
+ env.prepend_path("PATH", devenv_path)
+
+ @property
+ def build_directory(self):
+ win_dir = os.path.join(super().build_directory, "win32")
+ vs_dir = "VS2008"
+ return os.path.join(win_dir, vs_dir)
+
+ @property
+ def sln_file(self):
+ if self.pkg.spec.satisfies("+static"):
+ f = "libtheora_static.sln"
+ else:
+ f = "libtheora_dynamic.sln"
+ return f
+
+ def msbuild_args(self):
+ return [self.define("Configuration", "Release"), self.sln_file]
+
+ def build(self, pkg, spec, prefix):
+ with working_dir(self.build_directory):
+ devenv = Executable("devenv")
+ devenv(self.sln_file, "/Upgrade")
+ super().build(pkg, spec, prefix)
+
+ def install(self, pkg, spec, prefix):
+ mkdirp(prefix.lib)
+ libs_to_install = glob.glob(
+ os.path.join(self.build_directory, "**", "*.lib"), recursive=True
+ )
+ if self.pkg.spec.satisfies("~static"):
+ libs_to_install.extend(
+ glob.glob(os.path.join(self.build_directory, "**", "*.dll"), recursive=True)
+ )
+ for library in libs_to_install:
+ install(library, prefix.lib)
+ rename(
+ os.path.join(prefix.lib, "libtheora_static.lib"),
+ os.path.join(prefix.lib, "theora.lib"),
+ )
+ # The encoder and decoder libs are baked into the theora lib on Windows, so we spoof them
+ # here so libtheora is detectable by CMake and pkg-config and linkable by
+ # consuming projects
+ with working_dir(prefix.lib):
+ copy("theora.lib", "theoradec.lib")
+ copy("theora.lib", "theoraenc.lib")
+ with working_dir(pkg.stage.source_path):
+ install_tree("include", prefix.include)