Browse Source

autodetect ALSA in Makefile; rename option CLIMIDIPlayer to MIDIClient and use it in ALSA Native MIDI

M-HT 6 years ago
parent
commit
503bb05f38
5 changed files with 21 additions and 16 deletions
  1. 8 8
      palcfg.c
  2. 2 2
      palcfg.h
  3. 6 2
      unix/Makefile
  4. 2 2
      unix/native_midi.cpp
  5. 3 2
      unix/native_midi_alsa.c

+ 8 - 8
palcfg.c

@@ -65,7 +65,7 @@ static const ConfigItem gConfigItems[PALCFG_ALL_MAX] = {
 	{ PALCFG_OPL,               PALCFG_STRING,   "OPL",                3, MAKE_VALUE("DOSBOX", NULL, NULL) },
 	{ PALCFG_LOGFILE,           PALCFG_STRING,   "LogFileName",       11, MAKE_VALUE(NULL,     NULL, NULL) },
 	{ PALCFG_RIXEXTRAINIT,      PALCFG_STRING,   "RIXExtraInit",      12, MAKE_VALUE(NULL,     NULL, NULL) },
-	{ PALCFG_CLIMIDIPLAYER,     PALCFG_STRING,   "CLIMIDIPlayer",     13, MAKE_VALUE(NULL,     NULL, NULL) },
+	{ PALCFG_MIDICLIENT,        PALCFG_STRING,   "MIDIClient",        10, MAKE_VALUE(NULL,     NULL, NULL) },
     { PALCFG_SCALEQUALITY,      PALCFG_STRING,   "ScaleQuality",      12, MAKE_VALUE("0",      NULL, NULL) },
     { PALCFG_ASPECTRATIO,       PALCFG_STRING,   "AspectRatio",       11, MAKE_VALUE("16:10",  NULL, NULL) },
 };
@@ -415,8 +415,8 @@ PAL_LoadConfig(
 #endif
 					break;
 				}
-				case PALCFG_CLIMIDIPLAYER:
-					gConfig.pszCLIMIDIPlayerPath = ParseStringValue(value.sValue, gConfig.pszCLIMIDIPlayerPath);
+				case PALCFG_MIDICLIENT:
+					gConfig.pszMIDIClient = ParseStringValue(value.sValue, gConfig.pszMIDIClient);
 					break;
                 case PALCFG_SCALEQUALITY:
                     gConfig.pszScaleQuality = ParseStringValue(value.sValue, gConfig.pszScaleQuality);
@@ -527,7 +527,7 @@ PAL_SaveConfig(
 		if (gConfig.pszMsgFile && *gConfig.pszMsgFile) { sprintf(buf, "%s=%s\n", PAL_ConfigName(PALCFG_MESSAGEFILE), gConfig.pszMsgFile); fputs(buf, fp); }
 		if (gConfig.pszFontFile && *gConfig.pszFontFile) { sprintf(buf, "%s=%s\n", PAL_ConfigName(PALCFG_FONTFILE), gConfig.pszFontFile); fputs(buf, fp); }
 		if (gConfig.pszLogFile && *gConfig.pszLogFile) { sprintf(buf, "%s=%s\n", PAL_ConfigName(PALCFG_LOGFILE), gConfig.pszLogFile); fputs(buf, fp); }
-        if (gConfig.pszCLIMIDIPlayerPath && *gConfig.pszCLIMIDIPlayerPath) { sprintf(buf, "%s=%s\n", PAL_ConfigName(PALCFG_CLIMIDIPLAYER), gConfig.pszCLIMIDIPlayerPath); fputs(buf, fp); }
+        if (gConfig.pszMIDIClient && *gConfig.pszMIDIClient) { sprintf(buf, "%s=%s\n", PAL_ConfigName(PALCFG_MIDICLIENT), gConfig.pszMIDIClient); fputs(buf, fp); }
         if (gConfig.pszScaleQuality && *gConfig.pszScaleQuality) { sprintf(buf, "%s=%s\n", PAL_ConfigName(PALCFG_SCALEQUALITY), gConfig.pszScaleQuality); fputs(buf, fp); }
         if (gConfig.dwAspectX > 0 && gConfig.dwAspectY > 0) { sprintf(buf, "%s=%s\n", PAL_ConfigName(PALCFG_ASPECTRATIO), PAL_va(0,"%d:%d",gConfig.dwAspectX,gConfig.dwAspectY)); fputs(buf, fp); }
 
@@ -574,7 +574,7 @@ PAL_GetConfigItem(
 		case PALCFG_MESSAGEFILE:       value.sValue = gConfig.pszMsgFile; break;
 		case PALCFG_FONTFILE:          value.sValue = gConfig.pszFontFile; break;
 		case PALCFG_LOGFILE:           value.sValue = gConfig.pszLogFile; break;
-		case PALCFG_CLIMIDIPLAYER:     value.sValue = gConfig.pszCLIMIDIPlayerPath; break;
+		case PALCFG_MIDICLIENT:        value.sValue = gConfig.pszMIDIClient; break;
 		case PALCFG_SCALEQUALITY:      value.sValue = gConfig.pszScaleQuality; break;
 		case PALCFG_MUSIC:             value.sValue = music_types[gConfig.eMusicType]; break;
 		case PALCFG_OPL:               value.sValue = opl_types[gConfig.eOPLType]; break;
@@ -643,9 +643,9 @@ PAL_SetConfigItem(
 		if (gConfig.pszLogFile) free(gConfig.pszLogFile);
 		gConfig.pszLogFile = value.sValue && value.sValue[0] ? strdup(value.sValue) : NULL;
 		break;
-	case PALCFG_CLIMIDIPLAYER:
-		if (gConfig.pszCLIMIDIPlayerPath) free(gConfig.pszCLIMIDIPlayerPath);
-		gConfig.pszCLIMIDIPlayerPath = value.sValue && value.sValue[0] ? strdup(value.sValue) : NULL;
+	case PALCFG_MIDICLIENT:
+		if (gConfig.pszMIDIClient) free(gConfig.pszMIDIClient);
+		gConfig.pszMIDIClient = value.sValue && value.sValue[0] ? strdup(value.sValue) : NULL;
 		break;
 	case PALCFG_SCALEQUALITY:
 		if (gConfig.pszScaleQuality) free(gConfig.pszScaleQuality);

+ 2 - 2
palcfg.h

@@ -79,7 +79,7 @@ typedef enum tagPALCFG_ITEM
 	PALCFG_OPL,
 	PALCFG_LOGFILE,
 	PALCFG_RIXEXTRAINIT,
-	PALCFG_CLIMIDIPLAYER,
+	PALCFG_MIDICLIENT,
     PALCFG_SCALEQUALITY,
     PALCFG_ASPECTRATIO,
 	/* Strings */
@@ -168,7 +168,7 @@ typedef struct tagCONFIGURATION
 	char            *pszSavePath;
 	char            *pszMsgFile;
 	char            *pszFontFile;
-	char            *pszCLIMIDIPlayerPath;
+	char            *pszMIDIClient;
 	char            *pszLogFile;
     char            *pszScaleQuality;
 	DWORD            dwWordLength;

+ 6 - 2
unix/Makefile

@@ -14,7 +14,9 @@ DEPFLAGS = -MT $@ -MMD -MP -MF $*$(INTER).Td
 
 GTEST_DIR = ../3rd/googletest/googletest
 
-ifeq ($(NATIVE_MIDI),alsa)
+
+ALSA_INSTALLED := $(shell echo "int main(){}" | gcc -o /dev/null -x c - -lasound 2>/dev/null && echo found)
+ifdef ALSA_INSTALLED
 	MIDI_CFILES = $(wildcard ../native_midi/*.c) native_midi_alsa.c
 	MIDI_CPPFILES =
 	MIDI_LDFLAGS = -lasound
@@ -32,7 +34,9 @@ TEST_CPPFILES = $(wildcard ../tests/*.cpp)
 TEST_OBJFILES = $(TEST_CPPFILES:.cpp=.o)
 SDL_CONFIG = sdl2-config
 
-ifneq ($(GUI),no)
+
+FLTK_INSTALLED := $(shell command -v fltk-config 2> /dev/null)
+ifdef FLTK_INSTALLED
 	FLTK_CXXFLAGS = `fltk-config --cxxflags`
 	FLTK_CFLAGS = `fltk-config --cflags`
 	FLTK_LDFLAGS = `fltk-config --ldflags`

+ 2 - 2
unix/native_midi.cpp

@@ -56,7 +56,7 @@ extern "C" int native_midi_detect()
         free(cliplayer);
         cliplayer = nullptr;
     }
-    char *path = (gConfig.pszCLIMIDIPlayerPath ? gConfig.pszCLIMIDIPlayerPath : CLIPLAYER_EXECUTABLE);
+    char *path = (gConfig.pszMIDIClient ? gConfig.pszMIDIClient : CLIPLAYER_EXECUTABLE);
     if (path && access(path,F_OK) == 0)
     {
         cliplayer = strdup(path);
@@ -105,7 +105,7 @@ extern "C" void native_midi_freesong(NativeMidiSong *song)
 {
     if (song)
     {
-	if (native_midi_active(song)) 
+	if (native_midi_active(song))
 		native_midi_stop(song);
         if (song->file) delete []song->file;
         delete song;

+ 3 - 2
unix/native_midi_alsa.c

@@ -1,5 +1,6 @@
 #include "native_midi/native_midi.h"
 #include "native_midi/native_midi_common.h"
+#include "palcfg.h"
 
 #include <SDL_thread.h>
 #include <alsa/asoundlib.h>
@@ -83,7 +84,7 @@ static int find_dst_port(NativeMidiSong *song, const char *midi_client)
     snd_seq_port_info_t *pinfo;
     int client_id, port_id;
 
-    if (midi_client != NULL)
+    if ((midi_client != NULL) && (*midi_client != 0))
     {
         snd_seq_addr_t addr;
         if (snd_seq_parse_address(song->sequencer, &addr, midi_client) < 0) return -1;
@@ -179,7 +180,7 @@ static int open_alsa_port(NativeMidiSong *song)
 
     if (dst_client_id == 0)
     {
-        if (find_dst_port(song, getenv("MIDI_CLIENT")) < 0)
+        if (find_dst_port(song, gConfig.pszMIDIClient) < 0)
         {
             snd_seq_close(song->sequencer);
             song->sequencer = NULL;