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:
Nibbles 2bits 2011-10-24 02:02:15 -07:00 committed by Jack Nagel
parent 0ba92e46bd
commit 3ba6e208ca

View file

@ -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