From 67095e36b2484daa4848b4d38d7e34f2fb7d4d4a Mon Sep 17 00:00:00 2001 From: Tobias Doerffel Date: Fri, 1 Aug 2008 21:09:32 +0000 Subject: [PATCH] * made cmake-files ready for NSIS-packaging * added win-resource-object to LMMS-binary git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@1427 0778d3d1-df1d-0410-868b-ea421aaaa00d --- CMakeLists.txt | 56 ++++++++++++++++------ ChangeLog | 20 ++++++++ cmake/modules/BuildPlugin.cmake | 20 ++++---- data/CMakeLists.txt | 2 + data/nsis_branding.bmp | Bin 0 -> 34254 bytes lmms.rc.in | 4 +- plugins/ladspa_effect/caps/CMakeLists.txt | 8 +++- plugins/ladspa_effect/tap/CMakeLists.txt | 7 ++- 8 files changed, 87 insertions(+), 30 deletions(-) create mode 100644 data/nsis_branding.bmp diff --git a/CMakeLists.txt b/CMakeLists.txt index cff0b94a6..513e4fa23 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -81,9 +81,16 @@ IF(HOST_IS_64BIT) ELSE(HOST_IS_64BIT) SET(LIB_DIR lib) ENDIF(HOST_IS_64BIT) -SET(PLUGIN_DIR ${LIB_DIR}/lmms) -SET(DATA_DIR ${CMAKE_INSTALL_PREFIX}/share) -SET(LMMS_DATA_DIR ${DATA_DIR}/lmms) + +IF(LMMS_BUILD_WIN32) + SET(PLUGIN_DIR plugins) + SET(DATA_DIR data) + SET(LMMS_DATA_DIR data) +ELSE(LMMS_BUILD_WIN32) + SET(PLUGIN_DIR ${LIB_DIR}/lmms) + SET(DATA_DIR share) + SET(LMMS_DATA_DIR ${DATA_DIR}/lmms) +ENDIF(LMMS_BUILD_WIN32) CHECK_INCLUDE_FILES(stdint.h LMMS_HAVE_STDINT_H) @@ -284,6 +291,8 @@ ENDIF(NOT LMMS_HAVE_SAMPLERATE) CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/lmmsconfig.h.in ${CMAKE_BINARY_DIR}/lmmsconfig.h) +CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/lmms.rc.in ${CMAKE_BINARY_DIR}/lmms.rc) + # people simply updating SVN will still have this and mess up build with it FILE(REMOVE include/lmmsconfig.h) @@ -310,9 +319,18 @@ ADD_FILE_DEPENDENCIES(lmmsconfig.h ${lmms_MOC_out}) ADD_CUSTOM_COMMAND(OUTPUT ${ER_H} COMMAND ${BIN2RES} ARGS ${lmms_EMBEDDED_RESOURCES} > ${ER_H} DEPENDS ${BIN2RES}) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions ${CXXFLAGS}") -IF(NOT WIN32) +IF(WIN32) + SET(WINRC "${CMAKE_BINARY_DIR}/lmmsrc.obj") + ADD_CUSTOM_COMMAND(OUTPUT ${WINRC} + COMMAND /opt/mingw/bin/i586-mingw32-windres + -I${CMAKE_SOURCE_DIR} + -o${CMAKE_BINARY_DIR}/lmmsrc.obj + -i${CMAKE_BINARY_DIR}/lmms.rc + DEPENDS ${CMAKE_BINARY_DIR}/lmms.rc) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-attributes") +ELSE(WIN32) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC") -ENDIF(NOT WIN32) +ENDIF(WIN32) # make sub-directories ADD_SUBDIRECTORY(plugins) @@ -327,8 +345,15 @@ INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}/include ${CMAKE_SOUR LINK_DIRECTORIES(${CMAKE_INSTALL_PREFIX}/lib ${ASOUND_LIBRARY_DIR} ${JACK_LIBRARY_DIRS} ${SAMPLERATE_LIBRARY_DIRS} ${SNDFILE_LIBRARY_DIRS}) LINK_LIBRARIES(${QT_LIBRARIES} ${ASOUND_LIBRARY} ${SDL_LIBRARY} ${PULSEAUDIO_LIBRARIES} ${JACK_LIBRARIES} ${OGGVORBIS_LIBRARIES} ${SAMPLERATE_LIBRARIES} ${SNDFILE_LIBRARIES}) -ADD_EXECUTABLE(lmms ${lmms_SOURCES} ${lmms_INCLUDES} ${LIBSAMPLERATE_SOURCES} ${ER_H} ${lmms_UI_out} lmmsconfig.h) -INSTALL(TARGETS lmms RUNTIME DESTINATION bin) +ADD_EXECUTABLE(lmms ${lmms_SOURCES} ${lmms_INCLUDES} ${LIBSAMPLERATE_SOURCES} ${ER_H} ${lmms_UI_out} lmmsconfig.h ${WINRC}) +IF(LMMS_BUILD_WIN32) + SET_TARGET_PROPERTIES(lmms PROPERTIES LINK_FLAGS "${LINK_FLAGS} -mwindows") + ADD_CUSTOM_COMMAND(TARGET lmms POST_BUILD COMMAND /opt/mingw/bin/i586-mingw32-strip ${CMAKE_BINARY_DIR}/lmms.exe) + INSTALL(TARGETS lmms RUNTIME DESTINATION .) + INSTALL(FILES /opt/mingw/bin/QtCore4.dll /opt/mingw/bin/QtGui4.dll /opt/mingw/bin/QtXml4.dll /opt/mingw/bin/libz.dll /opt/mingw/bin/libsndfile-1.dll /opt/mingw/bin/libvorbis-0.dll /opt/mingw/bin/libvorbisenc-2.dll /opt/mingw/bin/libvorbisfile-3.dll /opt/mingw/bin/libogg-0.dll /opt/mingw/bin/libfluidsynth-1.dll /opt/mingw/bin/libfftw3f-3.dll /opt/mingw/bin/SDL.dll /opt/mingw/i586-mingw32/bin/mingwm10.dll DESTINATION .) +ELSE(LMMS_BUILD_WIN32) + INSTALL(TARGETS lmms RUNTIME DESTINATION bin) +ENDIF(LMMS_BUILD_WIN32) # # rules for building localizations @@ -372,7 +397,7 @@ ADD_CUSTOM_TARGET(dist COMMAND rm -rf ${TMP}) # -# add win32-pkg-target +# add win32-pkg-target (deprecated - use "package" target instead) # ADD_CUSTOM_TARGET(win32-pkg COMMAND mkdir -p tmp/lmms/data @@ -473,22 +498,24 @@ INCLUDE(InstallRequiredSystemLibraries) SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Linux MultiMedia Studio - easy music production for everyone!") SET(CPACK_PACKAGE_VENDOR "LMMS Developers") SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_SOURCE_DIR}/README") -#SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/COPYING") +SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/COPYING") SET(CPACK_PACKAGE_VERSION_MAJOR "${VERSION_MAJOR}") SET(CPACK_PACKAGE_VERSION_MINOR "${VERSION_MINOR}") SET(CPACK_PACKAGE_VERSION_PATCH "${VERSION_PATCH}-${VERSION_SUFFIX}") SET(CPACK_PACKAGE_INSTALL_DIRECTORY "LMMS-${VERSION}") IF(WIN32) -SET(CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/data\\\\lmms.ico") -SET(CPACK_NSIS_INSTALLED_ICON_NAME "lmms.exe") +SET(CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/data\\\\nsis_branding.bmp") +SET(CPACK_NSIS_MUI_ICON "${CMAKE_SOURCE_DIR}/data\\\\lmms.ico") SET(CPACK_NSIS_INSTALLED_ICON_NAME "lmms.exe") SET(CPACK_NSIS_DISPLAY_NAME "Linux MultiMedia Studio (LMMS)") SET(CPACK_NSIS_HELP_LINK "http:\\\\\\\\lmms.sourceforge.net") SET(CPACK_NSIS_URL_INFO_ABOUT "http:\\\\\\\\lmms.sourceforge.net") SET(CPACK_NSIS_CONTACT "lmms-devel@lists.sourceforge.net") -SET(CPACK_NSIS_MODIFY_PATH ON) -ELSEIF(WIN32) -SET(CPACK_STRIP_FILES "bin/lmms") +SET(CPACK_PACKAGE_EXECUTABLES "lmms.exe;Linux MultiMedia Studio") +SET(CPACK_NSIS_MENU_LINKS "lmms.exe;Linux MultiMedia Studio") +ELSE(WIN32) +SET(CPACK_STRIP_FILES "bin/lmms;${PLUGIN_DIR}/*.so") +SET(CPACK_PACKAGE_EXECUTABLES "lmms" "LMMS binary") ENDIF(WIN32) SET(MACOSX_BUNDLE_ICON_FILE "${CMAKE_SOURCE_DIR}/data/themes/default/icon.png") @@ -499,7 +526,6 @@ SET(MACOSX_BUNDLE_SHORT_VERSION_STRING "${VERSION}") SET(MACOSX_BUNDLE_BUNDLE_VERSION "${VERSION}") SET(MACOSX_BUNDLE_COPYRIGHT "Tobias Doerffel, 2008") -SET(CPACK_PACKAGE_EXECUTABLES "lmms" "LMMS binary") SET(CPACK_SOURCE_GENERATOR "TBZ2") SET(CPACK_SOURCE_PACKAGE_FILE_NAME "lmms-${VERSION}") INCLUDE(CPack) diff --git a/ChangeLog b/ChangeLog index 2aa7d0db6..3c02a137b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,25 @@ 2008-08-01 Tobias Doerffel + * src/core/midi/midi_winmm.cpp: + added debug-code + + * src/core/song.cpp: + do not reset window title twice when creating new project + + * src/core/main.cpp: + when creating a new project, show main-window afterwards - fixes + behaviour when debugging win32-version via WINE + + * cmake/modules/BuildPlugin.cmake: + * plugins/ladspa_effect/tap/CMakeLists.txt: + * plugins/ladspa_effect/caps/CMakeLists.txt: + * data/CMakeLists.txt: + * data/nsis_branding.bmp: + * CMakeLists.txt: + * lmms.rc.in: + - made cmake-files ready for NSIS-packaging + - added win-resource-object to LMMS-binary + * plugins/sf2_player/patches_dialog.cpp: * plugins/sf2_player/sf2_player.cpp: * plugins/sf2_player/patches_dialog.h: diff --git a/cmake/modules/BuildPlugin.cmake b/cmake/modules/BuildPlugin.cmake index 24f912cad..2f27c9e93 100644 --- a/cmake/modules/BuildPlugin.cmake +++ b/cmake/modules/BuildPlugin.cmake @@ -73,25 +73,27 @@ MACRO(BUILD_PLUGIN) ADD_FILE_DEPENDENCIES(${f} ${ER_H} ${plugin_MOC_out} ${plugin_UIC_out}) ENDFOREACH(f) # SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -i-static") + + IF(LMMS_BUILD_APPLE) + LINK_DIRECTORIES(${CMAKE_BINARY_DIR}) + LINK_LIBRARIES(${QT_LIBRARIES}) + ENDIF(LMMS_BUILD_APPLE) IF(LMMS_BUILD_WIN32) LINK_DIRECTORIES(${CMAKE_BINARY_DIR}) LINK_LIBRARIES(-llmms ${QT_LIBRARIES}) ENDIF(LMMS_BUILD_WIN32) + + ADD_LIBRARY(${PLUGIN_NAME} MODULE ${PLUGIN_SOURCES}) + INSTALL(TARGETS ${PLUGIN_NAME} LIBRARY DESTINATION "${PLUGIN_DIR}") + IF(LMMS_BUILD_APPLE) - LINK_DIRECTORIES(${CMAKE_BINARY_DIR}) - LINK_LIBRARIES(${QT_LIBRARIES}) - ADD_LIBRARY(${PLUGIN_NAME} MODULE ${PLUGIN_SOURCES}) SET_TARGET_PROPERTIES(${PLUGIN_NAME} PROPERTIES LINK_FLAGS "-bundle_loader ${CMAKE_BINARY_DIR}/lmms") - INSTALL(TARGETS ${PLUGIN_NAME} LIBRARY DESTINATION "${PLUGIN_DIR}") - ELSE(LMMS_BUILD_APPLE) - ADD_LIBRARY(${PLUGIN_NAME} SHARED ${PLUGIN_SOURCES}) ENDIF(LMMS_BUILD_APPLE) - IF(LMMS_BUILD_LINUX) - INSTALL(TARGETS ${PLUGIN_NAME} LIBRARY DESTINATION "${PLUGIN_DIR}") - ENDIF(LMMS_BUILD_LINUX) IF(LMMS_BUILD_WIN32) SET_TARGET_PROPERTIES(${PLUGIN_NAME} PROPERTIES PREFIX "") + ADD_CUSTOM_COMMAND(TARGET ${PLUGIN_NAME} POST_BUILD COMMAND /opt/mingw/bin/i586-mingw32-strip ${CMAKE_CURRENT_BINARY_DIR}/${PLUGIN_NAME}.dll) ENDIF(LMMS_BUILD_WIN32) + SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${ER_H} ${plugin_MOC_out}") ENDMACRO(BUILD_PLUGIN) diff --git a/data/CMakeLists.txt b/data/CMakeLists.txt index 0813368d8..cf5f34cc1 100644 --- a/data/CMakeLists.txt +++ b/data/CMakeLists.txt @@ -5,7 +5,9 @@ ADD_SUBDIRECTORY(samples) ADD_SUBDIRECTORY(themes) ADD_SUBDIRECTORY(track_icons) +IF(LMMS_BUILD_LINUX) INSTALL(FILES lmms DESTINATION ${DATA_DIR}/menu) INSTALL(FILES lmms.desktop DESTINATION ${DATA_DIR}/applications) INSTALL(FILES lmms.xml DESTINATION ${DATA_DIR}/mime/packages) +ENDIF(LMMS_BUILD_LINUX) diff --git a/data/nsis_branding.bmp b/data/nsis_branding.bmp new file mode 100644 index 0000000000000000000000000000000000000000..94691eb51d7651d600772840d2cb003f3fad0bc4 GIT binary patch literal 34254 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