libmikmod: 3.2.0b2, use git build head only
libmikmod built from tarball is 3.2.0-beta2. libmikmod built from cvs is called 3.2.0b2 in their code. The final work on libmikmod was left in cvs and includes numerous bug fixes and improvements done over the course of a year after the tarball came out. This adds the option to build head, the final version. No work has been done in five years. Patches from Macports were merged upstream during that time. One patch was not and is still in this formula. Another patch is included against the cvs version to fix a duplicate symbol problem with vc_callback(). The 2005 era code is in need of an autoreconf -ivf, which is done after setting an environment variable to pickup glibtoolize. The build is done out of source according to the directions. This builds static and shared native libraries using llvm-2335.9, gcc-4.2.1(v5666), and clang-2.0, tested on 64bit OSX Snow Leopard. It also builds without error on Lion. EDIT: Builds from clone of cvs in mistydemeo with inline patches Closes Homebrew/homebrew#8274. Signed-off-by: Jack Nagel <jacknagel@gmail.com>
This commit is contained in:
parent
0ba92e46bd
commit
3ba6e208ca
1 changed files with 77 additions and 48 deletions
|
@ -1,61 +1,90 @@
|
|||
require 'formula'
|
||||
|
||||
class Libmikmod < Formula
|
||||
url 'http://mikmod.raphnet.net/files/libmikmod-3.2.0-beta2.tar.bz2'
|
||||
url 'https://github.com/mistydemeo/libmikmod.git', :tag => '446324a45a6d165b1941a4758f6cd221301b479e'
|
||||
homepage 'http://mikmod.raphnet.net/'
|
||||
md5 '5b05f3b1167eba7855b8e38bde2b8070'
|
||||
version '3.2.0b2'
|
||||
|
||||
def options
|
||||
[[ '--with-debug', 'Enable debugging symbols and build without optimization' ]]
|
||||
end
|
||||
|
||||
# MacPorts patches to fix broken audio in 64-bit, crash on accessing samples menu
|
||||
def patches
|
||||
DATA
|
||||
# When aclocal is run on configure.in, it is told to use a macro AM_PATH_ESD that
|
||||
# only exists if esound is installed. Here CoreAudio is used not esound.
|
||||
DATA unless Formula.factory('esound').installed?
|
||||
end
|
||||
|
||||
def install
|
||||
system "./configure", "--disable-debug", "--disable-dependency-tracking",
|
||||
"--prefix=#{prefix}", "--mandir=#{man}",
|
||||
"--infodir=#{info}"
|
||||
system "make install"
|
||||
ENV.no_optimization if ARGV.include? '--with-debug' # leave code unoptimzed 4 debug
|
||||
ENV['LIBTOOLIZE'] = '/usr/bin/glibtoolize' # system libtoolize for autoreconf
|
||||
acpath = "#{HOMEBREW_PREFIX}/share/aclocal" # esd.m4 if installed would be here
|
||||
ENV['ACLOCAL'] = "/usr/bin/aclocal -I #{acpath}" if Formula.factory('esound').installed?
|
||||
|
||||
# Macports patched libmikmod-3.2.0-beta2.tar.bz2 in 2004. Most of their work
|
||||
# was merged into the upstream source by 2005 when the devs moved to sourceforge.
|
||||
# Development stopped a year later, after many more bug fixes and improvements.
|
||||
# The version was never changed. It is still called 3.2.0b2 inside their code.
|
||||
# This formula builds 3.2.0b2 from cvs, the final libmikmod at this time.
|
||||
|
||||
# The patch below is the only one from Macports the devs didn't merge. It
|
||||
# prevents a crash on accessing the samples menu in Mikmod. Check if Samples[]
|
||||
# exists before letting the subsequent code try to access the array items.
|
||||
|
||||
# Also in cvs is one error that stops the build. Below is a new patch
|
||||
# that fixes the error when linking libmikmod.dylib, where the build outputs:
|
||||
# ld: duplicate symbol _vc_callback in .libs/virtch2.o and .libs/virtch.o
|
||||
# Problem: vc_callback is declared twice globally and once as an extern.
|
||||
# Solution: Switch it to declared once globally and twice as extern.
|
||||
|
||||
# And finally in cvs the function vc_callback() is defined to use unsigned char*.
|
||||
# With this patch, virtch2.c and virtch.c will use vc_callback() identically.
|
||||
|
||||
inreplace 'playercode/virtch_common.c', '(handle<MAXSAMPLEHANDLES)',
|
||||
'(Samples && handle<MAXSAMPLEHANDLES)'
|
||||
|
||||
inreplace 'playercode/mdriver.c', 'extern MikMod_callback_t vc_callback',
|
||||
'MikMod_callback_t vc_callback'
|
||||
inreplace 'playercode/virtch_common.c', 'MikMod_callback_t vc_callback',
|
||||
'extern MikMod_callback_t vc_callback'
|
||||
|
||||
inreplace 'playercode/virtch2.c', 'vc_callback((char*)vc_tickbuf, portion)',
|
||||
'vc_callback((unsigned char*)vc_tickbuf, portion)'
|
||||
|
||||
|
||||
# OSX has CoreAudio, but ALSA is not for this OS nor is SAM9407 nor ULTRA.
|
||||
# The osx and x11 tests may work automatically. They are explicit to be thorough.
|
||||
args = ["--prefix=#{prefix}",
|
||||
"--mandir=#{man}",
|
||||
"--infodir=#{info}",
|
||||
"--disable-alsa",
|
||||
"--disable-sam9407",
|
||||
"--disable-ultra",
|
||||
"--enable-osx",
|
||||
"--with-x",
|
||||
"--x-includes=/usr/X11/include",
|
||||
"--x-libraries=/usr/X11/lib"]
|
||||
args << ((ARGV.include? '--with-debug') ? '--enable-debug' : '--disable-debug')
|
||||
# autoreconf w/glibtoolize will fix PIC flags, flat_namespace from 2005 era code.
|
||||
system "autoreconf -ivf"
|
||||
# An oos build is recommended in the documentation.
|
||||
Dir.mkdir 'macbuild'
|
||||
Dir.chdir 'macbuild' do
|
||||
system "../configure", *args
|
||||
system "make"
|
||||
system "make install"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
__END__
|
||||
diff --git a/include/mikmod.h.in b/include/mikmod.h.in
|
||||
index 9b98f43..c39f779 100644
|
||||
--- a/include/mikmod.h.in
|
||||
+++ b/include/mikmod.h.in
|
||||
@@ -85,7 +85,7 @@ typedef char CHAR;
|
||||
|
||||
@DOES_NOT_HAVE_SIGNED@
|
||||
|
||||
-#if defined(__arch64__) || defined(__alpha)
|
||||
+#if defined(__arch64__) || defined(__alpha) || defined(_LP64)
|
||||
/* 64 bit architectures */
|
||||
|
||||
typedef signed char SBYTE; /* 1 byte, signed */
|
||||
diff --git a/include/mikmod_internals.h b/include/mikmod_internals.h
|
||||
index c61dab1..4fab08d 100644
|
||||
--- a/include/mikmod_internals.h
|
||||
+++ b/include/mikmod_internals.h
|
||||
@@ -50,7 +50,7 @@ extern "C" {
|
||||
/*========== More type definitions */
|
||||
|
||||
/* SLONGLONG: 64bit, signed */
|
||||
-#if defined (__arch64__) || defined(__alpha)
|
||||
+#if defined(__arch64__) || defined(__alpha) || defined(_LP64)
|
||||
typedef long SLONGLONG;
|
||||
#define NATIVE_64BIT_INT
|
||||
#elif defined(__WATCOMC__)
|
||||
diff --git a/playercode/virtch_common.c b/playercode/virtch_common.c
|
||||
index 17ffaac..9b4f976 100644
|
||||
--- a/playercode/virtch_common.c
|
||||
+++ b/playercode/virtch_common.c
|
||||
@@ -351,7 +351,7 @@ void VC1_VoiceSetPanning(UBYTE voice,ULONG pan)
|
||||
|
||||
void VC1_SampleUnload(SWORD handle)
|
||||
{
|
||||
- if (handle<MAXSAMPLEHANDLES) {
|
||||
+ if (Samples && handle<MAXSAMPLEHANDLES) {
|
||||
if (Samples[handle])
|
||||
free(Samples[handle]);
|
||||
Samples[handle]=NULL;
|
||||
--- a/configure.in 2007-12-03 12:50:05.000000000 -0800
|
||||
+++ b/configure.in 2011-11-18 22:08:41.000000000 -0800
|
||||
@@ -331,7 +331,6 @@
|
||||
if test $libmikmod_driver_esd = yes
|
||||
then
|
||||
libmikmod_driver_esd=no
|
||||
- AM_PATH_ESD(0.2.6,libmikmod_driver_esd=yes)
|
||||
# We also need to know if esd is compiled with alsa support
|
||||
if test $libmikmod_driver_esd = yes
|
||||
then
|
||||
|
|
Loading…
Reference in a new issue