From 9ac423194c5c00598d8c509aa6413e29cdc8b3e4 Mon Sep 17 00:00:00 2001 From: Orcan Ogetbil Date: Nov 28 2009 02:18:10 +0000 Subject: - Update to 184. Build system uses cmake now. --- diff --git a/.cvsignore b/.cvsignore index 91fab93..ea39678 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -portmidi-src-131.zip +portmidi-src-184.zip diff --git a/pmdefaults.desktop b/pmdefaults.desktop new file mode 100644 index 0000000..2a6456d --- /dev/null +++ b/pmdefaults.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Name=PmDefaults +GenericName=PortMidi Settings +Comment=Set default input and output devices for PortMidi +Exec=pmdefaults +Icon=pmdefaults-icon +Terminal=false +Type=Application +Categories=Audio;AudioVideo;Midi; diff --git a/portmidi-cmake.patch b/portmidi-cmake.patch new file mode 100644 index 0000000..5c5ca98 --- /dev/null +++ b/portmidi-cmake.patch @@ -0,0 +1,104 @@ +diff -rupN portmidi.old/CMakeLists.txt portmidi/CMakeLists.txt +--- portmidi.old/CMakeLists.txt 2009-10-19 15:36:57.000000000 -0400 ++++ portmidi/CMakeLists.txt 2009-11-27 20:20:22.000000000 -0500 +@@ -8,6 +8,7 @@ if(UNIX) + # allow user to set Release or Debug + set(CMAKE_BUILD_TYPE Release CACHE STRING + "Semicolon-separate list of supported configuration types") ++ set(PROJECT_BINARY_DIR ${CMAKE_SOURCE_DIR}/build) + # set default directories but don't override cached values... + set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/${CMAKE_BUILD_TYPE} + CACHE STRING "libraries go here") +diff -rupN portmidi.old/pm_common/CMakeLists.txt portmidi/pm_common/CMakeLists.txt +--- portmidi.old/pm_common/CMakeLists.txt 2009-10-19 14:41:21.000000000 -0400 ++++ portmidi/pm_common/CMakeLists.txt 2009-11-27 20:33:36.000000000 -0500 +@@ -65,15 +65,12 @@ if(UNIX) + # JAVA_INCLUDE_PATH2; if no, then we need to make both JAVA_INCLUDE_PATH + # and JAVA_INCLUDE_PATH2 set by user (will need clear documentation + # because JAVA_INCLUDE_PATH2 is pretty obscure) +- set(JAVA_INCLUDE_PATH ${JAVA_INCLUDE_PATH-UNKNOWN} +- CACHE STRING "where to find Java SDK include directory") +- set(JAVA_INCLUDE_PATHS ${JAVA_INCLUDE_PATH} ${JAVA_INCLUDE_PATH}/linux) +- # libjvm.so is found relative to JAVA_INCLUDE_PATH: +- set(JAVAVM_LIB ${JAVA_INCLUDE_PATH}/../jre/lib/i386/client/libjvm.so) ++ set(JAVAVM_LIB ${JAVA_JVM_LIBRARY}) ++ + + set(LINUXSRC pmlinuxalsa pmlinux finddefault) + prepend_path(LIBSRC ../pm_linux/ ${LINUXSRC}) +- list(APPEND LIBSRC ../porttime/ptlinux) ++ set(LIBPTSRC ../porttime/ptlinux) + + set(PM_NEEDED_LIBS pthread asound) + endif(APPLE) +@@ -98,29 +95,29 @@ set(JNI_EXTRA_LIBS ${PM_NEEDED_LIBS} ${J + # this completes the list of library sources by adding shared code + list(APPEND LIBSRC pmutil portmidi) + +-# now add the shared files to make the complete list of library sources +-add_library(portmidi-static ${LIBSRC}) +-set_target_properties(portmidi-static PROPERTIES OUTPUT_NAME "portmidi_s") +-target_link_libraries(portmidi-static ${PM_NEEDED_LIBS}) ++add_library(porttime-dynamic SHARED ${LIBPTSRC}) ++set_target_properties(porttime-dynamic PROPERTIES SOVERSION 0 VERSION 0.${VERSION} OUTPUT_NAME "porttime") ++target_link_libraries(porttime-dynamic pthread) + + add_library(portmidi-dynamic SHARED ${LIBSRC}) +-set_target_properties(portmidi-dynamic PROPERTIES OUTPUT_NAME "portmidi") +-target_link_libraries(portmidi-dynamic ${PM_NEEDED_LIBS}) +- ++add_dependencies(portmidi-dynamic porttime-dynamic) ++set_target_properties(portmidi-dynamic PROPERTIES LINK_FLAGS "-L../build/Release" SOVERSION 0 VERSION 0.${VERSION} OUTPUT_NAME "portmidi") ++target_link_libraries(portmidi-dynamic ${PM_NEEDED_LIBS} porttime) + + # define the jni library + include_directories(${JAVA_INCLUDE_PATHS}) + + set(JNISRC ${LIBSRC} ../pm_java/pmjni/pmjni.c) + add_library(pmjni SHARED ${JNISRC}) +-target_link_libraries(pmjni ${JNI_EXTRA_LIBS}) +-set_target_properties(pmjni PROPERTIES EXECUTABLE_EXTENSION "jnilib") ++add_dependencies(pmjni porttime-dynamic) ++target_link_libraries(pmjni ${JNI_EXTRA_LIBS} porttime) ++set_target_properties(pmjni PROPERTIES LINK_FLAGS "-L../build/Release" EXECUTABLE_EXTENSION "jnilib") + + # install the libraries (Linux only) + if(UNIX AND NOT APPLE) +- INSTALL(TARGETS portmidi-static portmidi-dynamic pmjni +- LIBRARY DESTINATION /usr/local/lib +- ARCHIVE DESTINATION /usr/local/lib) ++ INSTALL(TARGETS porttime-dynamic portmidi-dynamic pmjni ++ LIBRARY DESTINATION ${LIB_INSTALL_DIR} ++ ARCHIVE DESTINATION ${LIB_INSTALL_DIR}) + INSTALL(FILES portmidi.h ../porttime/porttime.h +- DESTINATION /usr/local/include) ++ DESTINATION ${INCLUDE_INSTALL_DIR}) + endif(UNIX AND NOT APPLE) +diff -rupN portmidi.old/pm_java/CMakeLists.txt portmidi/pm_java/CMakeLists.txt +--- portmidi.old/pm_java/CMakeLists.txt 2009-10-14 14:04:06.000000000 -0400 ++++ portmidi/pm_java/CMakeLists.txt 2009-11-27 20:20:22.000000000 -0500 +@@ -39,9 +39,9 @@ if(UNIX) + + # install the libraries (Linux only) + INSTALL(FILES ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/pmdefaults.jar +- DESTINATION /usr/share/java) ++ DESTINATION ${SHARE_INSTALL_PREFIX}/java) + INSTALL(PROGRAMS ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/pmdefaults +- DESTINATION /usr/local/bin) ++ DESTINATION ${CMAKE_INSTALL_PREFIX}/bin) + endif(APPLE) + endif(UNIX) + # In windows, use pm_java/make.bat +diff -rupN portmidi.old/pm_test/CMakeLists.txt portmidi/pm_test/CMakeLists.txt +--- portmidi.old/pm_test/CMakeLists.txt 2009-10-19 14:41:21.000000000 -0400 ++++ portmidi/pm_test/CMakeLists.txt 2009-11-27 20:20:22.000000000 -0500 +@@ -8,7 +8,8 @@ endif(APPLE) + + macro(make_a_test name) + add_executable(${name} ${name}.c) +- target_link_libraries(${name} portmidi-static ${PM_NEEDED_LIBS}) ++ set_target_properties(${name} PROPERTIES LINK_FLAGS "-L${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}") ++ target_link_libraries(${name} portmidi-dynamic ${PM_NEEDED_LIBS}) + endmacro(make_a_test) + + make_a_test(test) diff --git a/portmidi-shared.patch b/portmidi-shared.patch deleted file mode 100644 index 99a6c38..0000000 --- a/portmidi-shared.patch +++ /dev/null @@ -1,111 +0,0 @@ -diff -rupN portmidi.old/pm_common/portmidi.c portmidi/pm_common/portmidi.c ---- portmidi.old/pm_common/portmidi.c 2009-01-02 18:06:13.000000000 -0500 -+++ portmidi/pm_common/portmidi.c 2009-01-11 01:20:21.000000000 -0500 -@@ -56,7 +56,7 @@ static void prompt_and_exit(void) - printf("type ENTER..."); - fgets(line, STRING_MAX, stdin); - /* this will clean up open ports: */ -- exit(-1); -+ // DO NOT EXIT SINCE THIS IS BEING COMPILED AS A SHARED LIBRARY // exit(-1); - } - - -diff -rupN portmidi.old/pm_linux/Makefile portmidi/pm_linux/Makefile ---- portmidi.old/pm_linux/Makefile 2008-06-13 20:23:43.000000000 -0400 -+++ portmidi/pm_linux/Makefile 2009-01-11 01:24:28.000000000 -0500 -@@ -30,11 +30,13 @@ VFLAGS = -DPMALSA - # ALSALIB = - # VFLAGS = -DPMNULL - --pmlib = pm_linux/libportmidi.a -+pmlib = pm_linux/libportmidi.so.0$(VERSION) - --ptlib = porttime/libporttime.a -+ptlib = porttime/libporttime.so.0$(VERSION) - --CC = gcc $(VFLAGS) $(PMFLAGS) -g -Ipm_common -Iporttime -+CC = gcc $(CFLAGS) $(VFLAGS) $(PMFLAGS) -g -Ipm_common -Iporttime -+ -+INSTALL = install - - pmobjects = pm_common/pmutil.o $(versions) pm_linux/pmlinux.o \ - pm_common/portmidi.o -@@ -43,14 +45,18 @@ ptobjects = porttime/porttime.o porttime - - current: all - --all: $(pmlib) $(ptlib) pm_test/test pm_test/sysex pm_test/midithread \ -+all: $(ptlib) $(pmlib) pm_test/test pm_test/sysex pm_test/midithread \ - pm_test/latency pm_test/midithru pm_test/qtest pm_test/mm - - $(pmlib): pm_linux/Makefile $(pmobjects) -- ar -cr $(pmlib) $(pmobjects) -+ $(CC) -shared $(ALSALIB) $(pmobjects) -Wl,-soname -Wl,libportmidi.so.0 -Lporttime -lporttime -o $(pmlib) -+ ln -sf libportmidi.so.0$(VERSION) pm_linux/libportmidi.so -+ ln -sf libportmidi.so.0$(VERSION) pm_linux/libportmidi.so.0 - - $(ptlib): pm_linux/Makefile $(ptobjects) -- ar -cr $(ptlib) $(ptobjects) -+ $(CC) -shared $(ptobjects) -Wl,-soname -Wl,libporttime.so.0 -Wl,-l,pthread -o $(ptlib) -+ ln -sf libporttime.so.0$(VERSION) porttime/libporttime.so -+ ln -sf libporttime.so.0$(VERSION) porttime/libporttime.so.0 - - pm_linux/pmlinuxalsa.o: pm_linux/Makefile pm_linux/pmlinuxalsa.c pm_linux/pmlinuxalsa.h - $(CC) -c pm_linux/pmlinuxalsa.c -o pm_linux/pmlinuxalsa.o -@@ -96,3 +102,15 @@ cleanest: cleaner - - backup: cleanest - cd ..; zip -r portmidi.zip portmidi -+ -+install: -+ $(INSTALL) -d $(DESTDIR)/$(INCLUDEDIR)/ -+ $(INSTALL) -m 644 pm_common/portmidi.h $(DESTDIR)/$(INCLUDEDIR)/ -+ $(INSTALL) -m 644 porttime/porttime.h $(DESTDIR)/$(INCLUDEDIR)/ -+ $(INSTALL) -d $(DESTDIR)/$(LIBDIR)/ -+ $(INSTALL) pm_linux/libportmidi.so.0.* $(DESTDIR)/$(LIBDIR)/ -+ $(INSTALL) porttime/libporttime.so.0.* $(DESTDIR)/$(LIBDIR)/ -+ cp -a porttime/libporttime.so $(DESTDIR)/$(LIBDIR)/ -+ cp -a porttime/libporttime.so.0 $(DESTDIR)/$(LIBDIR)/ -+ cp -a pm_linux/libportmidi.so $(DESTDIR)/$(LIBDIR)/ -+ cp -a pm_linux/libportmidi.so.0 $(DESTDIR)/$(LIBDIR)/ -diff -rupN portmidi.old/pm_linux/pmlinuxalsa.c portmidi/pm_linux/pmlinuxalsa.c ---- portmidi.old/pm_linux/pmlinuxalsa.c 2008-06-13 20:23:43.000000000 -0400 -+++ portmidi/pm_linux/pmlinuxalsa.c 2009-01-11 01:26:06.000000000 -0500 -@@ -243,8 +243,8 @@ static PmError alsa_out_close(PmInternal - alsa_descriptor_type desc = (alsa_descriptor_type) midi->descriptor; - if (!desc) return pmBadPtr; - -- if (pm_hosterror = snd_seq_disconnect_to(seq, desc->this_port, -- desc->client, desc->port)) { -+ if ((pm_hosterror = snd_seq_disconnect_to(seq, desc->this_port, -+ desc->client, desc->port))) { - // if there's an error, try to delete the port anyway, but don't - // change the pm_hosterror value so we retain the first error - snd_seq_delete_port(seq, desc->this_port); -@@ -333,8 +333,8 @@ static PmError alsa_in_close(PmInternal - { - alsa_descriptor_type desc = (alsa_descriptor_type) midi->descriptor; - if (!desc) return pmBadPtr; -- if (pm_hosterror = snd_seq_disconnect_from(seq, desc->this_port, -- desc->client, desc->port)) { -+ if ((pm_hosterror = snd_seq_disconnect_from(seq, desc->this_port, -+ desc->client, desc->port))) { - snd_seq_delete_port(seq, desc->this_port); /* try to close port */ - } else { - pm_hosterror = snd_seq_delete_port(seq, desc->this_port); -diff -rupN portmidi.old/pm_linux/pmlinux.c portmidi/pm_linux/pmlinux.c ---- portmidi.old/pm_linux/pmlinux.c 2006-11-29 18:37:09.000000000 -0500 -+++ portmidi/pm_linux/pmlinux.c 2009-01-11 01:26:48.000000000 -0500 -@@ -28,10 +28,10 @@ PmError pm_init() - * devices. - */ - #ifdef PMALSA -- pm_linuxalsa_init(); -+ return pm_linuxalsa_init(); - #endif - #ifdef PMNULL -- pm_linuxnull_init(); -+ return pm_linuxnull_init(); - #endif - return pmNoError; - } diff --git a/portmidi.spec b/portmidi.spec index d180d5b..18b28b2 100644 --- a/portmidi.spec +++ b/portmidi.spec @@ -1,21 +1,32 @@ +%global with_gcj %{!?_without_gcj:1}%{?_without_gcj:0} Summary: Real-time Midi I/O Library Name: portmidi -Version: 131 -Release: 4%{?dist} +Version: 184 +Release: 1%{?dist} License: MIT Group: System Environment/Libraries URL: http://portmedia.sourceforge.net/ Source0: http://downloads.sourceforge.net/portmedia/%{name}-src-%{version}.zip -# For building shared libraries: -Patch0: portmidi-shared.patch +Source1: pmdefaults.desktop +# Build fixes: +Patch0: portmidi-cmake.patch BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) -BuildRequires: alsa-lib-devel doxygen tex(latex) +BuildRequires: alsa-lib-devel +BuildRequires: cmake +BuildRequires: desktop-file-utils +BuildRequires: java-devel >= 1.5 +BuildRequires: jpackage-utils +BuildRequires: doxygen +BuildRequires: tex(latex) +BuildRequires: java-gcj-compat-devel >= 1.0.31 +Requires(post): java-gcj-compat >= 1.0.31 +Requires(postun): java-gcj-compat >= 1.0.31 %description PortMedia is a set of simple clean APIs and cross-platform library implementations for music and other media. PortMidi subproject provides a real-time MIDI input/output library. This package contains the PortMidi -libraries and some test applications. +libraries. %package devel Summary: Headers for developing programs that will use %{name} @@ -28,28 +39,52 @@ implementations for music and other media. PortMidi subproject provides a real-time MIDI input/output library. This package contains the header files and the documentation of PortMidi libraries. +%package tools +Summary: Tools to configure and use %{name} +Group: Applications/Multimedia +Requires: hicolor-icon-theme +Requires: java >= 1.5 +Requires: jpackage-utils +Requires: %{name} = %{version}-%{release} + +%description tools +PortMedia is a set of simple clean APIs and cross-platform library +implementations for music and other media. PortMidi subproject provides a +real-time MIDI input/output library. This package contains the PortMidi +configuration utility "pmdefaults" and some test applications. %prep %setup -q -n %{name} -%patch0 -p1 +%patch0 -p1 -b .buildfix + +# ewwww... binaries +rm -f portmidi_cdt.zip */*.exe */*/*.exe -# Fix permissions and encoding issues: +# Fix permissons and encoding issues: find . -name "*.c" -exec chmod -x {} \; find . -name "*.h" -exec chmod -x {} \; -for i in *.txt */*.txt ; do +for i in *.txt */*.txt */*/*.txt ; do + chmod -x $i sed 's|\r||' $i > $i.tmp touch -r $i $i.tmp mv -f $i.tmp $i done -# Preserve timestamps: -sed -i 's|\(INSTALL = install\)|\1 -p|' pm_linux/Makefile +# Fedora's jni library location is different +sed -i 's|loadLibrary.*|load("%{_libdir}/%{name}/libpmjni.so");|' \ + pm_java/jportmidi/JPortMidiApi.java + +# Add shebang, lib and class path +sed -i -e 's|^java|#!/bin/sh\njava \\\ + -Djava.library.path=%{_libdir}/%{name}/|' \ + -e 's|/usr/share/java/|%{_libdir}/%{name}/|' \ + pm_java/pmdefaults/pmdefaults + %build -# Parallel make not supported -make -f pm_linux/Makefile \ - CFLAGS="%{optflags} -fPIC" \ - VERSION=".%{version}" +export JAVA_HOME=%{java_home} +%cmake -DVERSION=%{version} . +make %{?_smp_flags} # Build the doxygen documentation: doxygen @@ -57,22 +92,43 @@ pushd latex make %{?_smp_flags} popd + %install rm -rf %{buildroot} -# Install the libraries and headers: -make -f pm_linux/Makefile install \ - DESTDIR=%{buildroot} \ - LIBDIR=%{_libdir} \ - INCLUDEDIR=%{_includedir} - -install -pm 644 pm_common/pmutil.h %{buildroot}%{_includedir} +make install DESTDIR=%{buildroot} # Install the test applications: install -d %{buildroot}%{_libdir}/%{name} -for app in latency midithread midithru mm qtest sysex test; do - install -m 0755 pm_test/$app %{buildroot}%{_libdir}/%{name} +for app in latency midiclock midithread midithru mm sysex test; do + install -m 0755 build/Release/$app %{buildroot}%{_libdir}/%{name}/ done +# Fedora's jni library location is different +mv %{buildroot}%{_libdir}/libpmjni.so \ + %{buildroot}%{_libdir}/%{name}/ +mv %{buildroot}%{_javadir}/pmdefaults.jar \ + %{buildroot}%{_libdir}/%{name}/ + +# pmdefaults icon +mkdir -p %{buildroot}%{_datadir}/icons/hicolor/128x128/apps/ +install -pm 644 pm_java/pmdefaults/pmdefaults-icon.png \ + %{buildroot}%{_datadir}/icons/hicolor/128x128/apps/ + +# desktop file +mkdir -p %{buildroot}%{_desktopdir}/ +desktop-file-install \ + --dir=${RPM_BUILD_ROOT}%{_desktopdir} \ + %{SOURCE1} + +# Why don't they install this header file? +install -pm 644 pm_common/pmutil.h %{buildroot}%{_includedir}/ + +# AOT bits +%if %{with_gcj} + %{_bindir}/aot-compile-rpm +%endif + + %clean rm -rf %{buildroot} @@ -80,20 +136,50 @@ rm -rf %{buildroot} %postun -p /sbin/ldconfig +%post tools +%if %{with_gcj} + if [ -x %{_bindir}/rebuild-gcj-db ] + then + %{_bindir}/rebuild-gcj-db + fi +%endif + +%postun tools +%if %{with_gcj} + if [ -x %{_bindir}/rebuild-gcj-db ] + then + %{_bindir}/rebuild-gcj-db + fi +%endif + %files %defattr(-,root,root,-) %doc CHANGELOG.txt license.txt -%{_libdir}/*.so.* -%{_libdir}/%{name} +%{_libdir}/lib*.so.* + +%files tools +%defattr(-,root,root,-) +%doc pm_java/pmdefaults/README.txt +%{_libdir}/%{name}/ +%{_bindir}/pmdefaults +%{_datadir}/icons/hicolor/128x128/apps/pmdefaults-icon.png +%{_desktopdir}/pmdefaults.desktop +%if %{with_gcj} +%{_libdir}/gcj/%{name}/ +%endif + %files devel %defattr(-,root,root,-) -%doc CHANGELOG.txt license.txt README.txt pm_linux/README_LINUX.txt +%doc README.txt %doc html latex/*.pdf %{_includedir}/* -%{_libdir}/*.so +%{_libdir}/lib*.so %changelog +* Fri Nov 27 2009 Orcan Ogetbil 184-1 +- Update to 184. Build system uses cmake now. + * Sun Jul 26 2009 Fedora Release Engineering - 131-4 - Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild diff --git a/sources b/sources index be3f9fb..59a6efd 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -1715bb3d9f63c6b259720709ef43b534 portmidi-src-131.zip +6d242a5cfe802cace10af733c185d1b6 portmidi-src-184.zip