<commit_before>require 'formula'

class Libmikmod < Formula
  url 'http://mikmod.raphnet.net/files/libmikmod-3.2.0-beta2.tar.bz2'
  homepage 'http://mikmod.raphnet.net/'
  md5 '5b05f3b1167eba7855b8e38bde2b8070'

  # MacPorts patches to fix broken audio in 64-bit, crash on accessing samples menu
  def patches
    DATA
  end

  def install
    system "./configure", "--disable-debug", "--disable-dependency-tracking",
                          "--prefix=#{prefix}", "--mandir=#{man}",
                          "--infodir=#{info}"
    system "make install"
  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;<commit_msg>libmikmod: 3.2.0b2, use git build head only<commit_after>require 'formula'

class Libmikmod < Formula
  url 'https://github.com/mistydemeo/libmikmod.git', :tag => '446324a45a6d165b1941a4758f6cd221301b479e'
  homepage 'http://mikmod.raphnet.net/'
  version '3.2.0b2'

  def options
    [[ '--with-debug', 'Enable debugging symbols and build without optimization' ]]
  end

  def patches
    # 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
    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__
--- 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
{'fraction_non_alphanumeric': 0.11735205616850551, 'fraction_numerical': 0.042962219993313275, 'mean_word_length': 2.9207077326343382, 'pattern_counts': {'":': 0, '<': 11, '<?xml version=': 0, '>': 4, 'https://': 1, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 2, 'word_list_counts': {'cursed_substrings.json': 7, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3280899', 'n_tokens_mistral': 2181, 'n_tokens_neox': 1958, 'n_words': 551}