44# found in the LICENSE file.
55
66import os
7+ from typing import Dict , Set
78
89TAG = 'release-2.8.0'
910HASH = '494ccd74540f74e717f7e4f1dc7f96398c0f4b1883ab00c4a76b0c7239bd2c185cb4358a35ef47819c49e7c14dac7c37b98a29c7b5237478121571f5e7ac4dfc'
1617 'sdl2_mixer-none-mt' : {'SDL2_MIXER_FORMATS' : [], 'PTHREADS' : 1 },
1718}
1819
20+ OPTIONS = {
21+ 'formats' : 'A comma separated list of formats (ex: --use-port=sdl2_mixer:formats=ogg,mp3)'
22+ }
23+
24+ SUPPORTED_FORMATS = {'ogg' , 'mp3' , 'mod' , 'mid' }
25+
26+ # user options (from --use-port)
27+ opts : Dict [str , Set ] = {
28+ 'formats' : set ()
29+ }
30+
1931
2032def needed (settings ):
2133 return settings .USE_SDL_MIXER == 2
2234
2335
36+ def get_formats (settings ):
37+ return opts ['formats' ].union (settings .SDL2_MIXER_FORMATS )
38+
39+
2440def get_lib_name (settings ):
25- settings .SDL2_MIXER_FORMATS .sort ()
26- formats = '-' .join (settings .SDL2_MIXER_FORMATS )
41+ formats = '-' .join (sorted (get_formats (settings )))
2742
2843 libname = 'libSDL2_mixer'
2944 if formats != '' :
@@ -41,30 +56,33 @@ def get(ports, settings, shared):
4156
4257 def create (final ):
4358 source_path = ports .get_dir ('sdl2_mixer' , 'SDL_mixer-' + TAG )
59+
60+ formats = get_formats (settings )
61+
4462 flags = [
4563 '-sUSE_SDL=2' ,
4664 '-DMUSIC_WAV' ,
4765 ]
4866
49- if "ogg" in settings . SDL2_MIXER_FORMATS :
67+ if "ogg" in formats :
5068 flags += [
5169 '-sUSE_VORBIS' ,
5270 '-DMUSIC_OGG' ,
5371 ]
5472
55- if "mp3" in settings . SDL2_MIXER_FORMATS :
73+ if "mp3" in formats :
5674 flags += [
5775 '-sUSE_MPG123' ,
5876 '-DMUSIC_MP3_MPG123' ,
5977 ]
6078
61- if "mod" in settings . SDL2_MIXER_FORMATS :
79+ if "mod" in formats :
6280 flags += [
6381 '-sUSE_MODPLUG' ,
6482 '-DMUSIC_MOD_MODPLUG' ,
6583 ]
6684
67- if "mid" in settings . SDL2_MIXER_FORMATS :
85+ if "mid" in formats :
6886 flags += [
6987 '-DMUSIC_MID_TIMIDITY' ,
7088 ]
@@ -107,16 +125,27 @@ def clear(ports, settings, shared):
107125
108126def process_dependencies (settings ):
109127 settings .USE_SDL = 2
110- if "ogg" in settings .SDL2_MIXER_FORMATS :
128+ formats = get_formats (settings )
129+ if "ogg" in formats :
111130 deps .append ('vorbis' )
112131 settings .USE_VORBIS = 1
113- if "mp3" in settings . SDL2_MIXER_FORMATS :
132+ if "mp3" in formats :
114133 deps .append ('mpg123' )
115134 settings .USE_MPG123 = 1
116- if "mod" in settings . SDL2_MIXER_FORMATS :
135+ if "mod" in formats :
117136 deps .append ('libmodplug' )
118137 settings .USE_MODPLUG = 1
119138
120139
140+ def handle_options (options , error_handler ):
141+ formats = options ['formats' ].split (',' )
142+ for format in formats :
143+ format = format .lower ().strip ()
144+ if format not in SUPPORTED_FORMATS :
145+ error_handler (f'{ format } is not a supported format' )
146+ else :
147+ opts ['formats' ].add (format )
148+
149+
121150def show ():
122151 return 'sdl2_mixer (-sUSE_SDL_MIXER=2 or --use-port=sdl2_mixer; zlib license)'
0 commit comments