]> Some of my projects - openlase.git/commitdiff
Clean up CMakeFiles and make most libs optional
authorHector Martin <hector@marcansoft.com>
Thu, 10 Mar 2011 12:23:36 +0000 (13:23 +0100)
committerHector Martin <hector@marcansoft.com>
Sat, 12 Mar 2011 17:56:11 +0000 (18:56 +0100)
This will disable building various tools when the libraries that they
require are missing. The only absolutely mandatory dependencies now are
JACK and pthreads (both required for libol).

CMakeLists.txt
Modules/FindFFmpeg.cmake [new file with mode: 0644]
examples/27c3_slides/CMakeLists.txt
examples/CMakeLists.txt
libol/CMakeLists.txt
output/CMakeLists.txt
tools/CMakeLists.txt

index 0b2fc330b73c1e50efdd9b3c3bc90b21e52ab82c..53d22e69a68a04b3cd091689c9a460fb5ee9ad26 100644 (file)
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 #
 
-PROJECT(openlase)
+project(openlase)
 
 cmake_minimum_required(VERSION 2.6)
 
 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/Modules/")
 
-find_package(Qt4 REQUIRED)
+find_package(Threads REQUIRED)
 find_package(JACK REQUIRED)
+find_package(Qt4)
+find_package(FFmpeg)
+find_package(OpenGL)
+find_package(GLUT)
+find_package(ALSA)
+find_package(Curses)
 
 set(CMAKE_C_FLAGS "-Wall -O3 -g")
 
diff --git a/Modules/FindFFmpeg.cmake b/Modules/FindFFmpeg.cmake
new file mode 100644 (file)
index 0000000..d6259b0
--- /dev/null
@@ -0,0 +1,116 @@
+# - Try to find ffmpeg
+# Once done this will define
+#
+#  FFMPEG_FOUND - system has ffmpeg
+#  FFMPEG_INCLUDE_DIR - Include directory necessary for using the ffmpeg headers
+#  FFMPEG_LIBRARIES - Link these to use ffmpeg
+#  FFMPEG_DEFINITIONS - Compiler switches required for using ffmpeg
+
+# Copyright (c) 2006, Matthias Kretz, <kretz@kde.org>
+# Copyright (c) 2008, Alexander Neundorf, <neundorf@kde.org>
+#
+# Redistribution and use is allowed according to the terms of the BSD license.
+# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
+
+
+if (FFMPEG_LIBRARIES)
+
+  # in cache already
+  set(FFMPEG_FOUND TRUE)
+
+else (FFMPEG_LIBRARIES)
+
+if (NOT WIN32)
+   # use pkg-config to get the directories and then use these values
+   # in the FIND_PATH() and FIND_LIBRARY() calls
+   find_package(PkgConfig)
+   pkg_check_modules(PC_LIBAVCODEC libavcodec)
+   set(FFMPEG_DEFINITIONS ${PC_LIBAVCODEC_CFLAGS_OTHER})
+
+endif (NOT WIN32)
+
+  #
+  # #include <libXXXX/XXXX.h> is the new style for FFMPEG headers
+  # This has been verified at least since 0.4.9
+  # Please do not change to the old format, since this will break for
+  # people who are using newer versions. Instead, upgrade your ffmpeg
+  # installation.
+  #
+  find_path(FFMPEG_INCLUDE_DIR libavcodec/avcodec.h
+    HINTS
+    ${PC_LIBAVCODEC_INCLUDEDIR}
+    ${PC_LIBAVCODEC_INCLUDE_DIRS}
+  )
+
+  # also search for the old style include dir, just for the purpose
+  # of giving a useful error message if an old libavcodec is installed
+  # and the user might wonder why it is not found
+  find_path(FFMPEG_INCLUDE_DIR_OLD_STYLE ffmpeg/avcodec.h
+    HINTS
+    ${PC_LIBAVCODEC_INCLUDEDIR}
+    ${PC_LIBAVCODEC_INCLUDE_DIRS}
+  )
+
+  find_library(AVCODEC_LIBRARIES NAMES avcodec
+    HINTS
+    ${PC_LIBAVCODEC_LIBDIR}
+    ${PC_LIBAVCODEC_LIBRARY_DIRS}
+  )
+
+  find_library(AVFORMAT_LIBRARIES NAMES avformat
+    HINTS
+    ${PC_LIBAVCODEC_LIBDIR}
+    ${PC_LIBAVCODEC_LIBRARY_DIRS}
+  )
+
+  find_library(AVUTIL_LIBRARIES NAMES avutil
+    HINTS
+    ${PC_LIBAVCODEC_LIBDIR}
+    ${PC_LIBAVCODEC_LIBRARY_DIRS}
+  )
+
+
+
+  set(FFMPEG_LIBRARIES )
+  if (AVCODEC_LIBRARIES)
+    set(FFMPEG_LIBRARIES ${FFMPEG_LIBRARIES} ${AVCODEC_LIBRARIES})
+  endif (AVCODEC_LIBRARIES)
+
+  if (AVFORMAT_LIBRARIES)
+    set(FFMPEG_LIBRARIES ${FFMPEG_LIBRARIES} ${AVFORMAT_LIBRARIES})
+  endif (AVFORMAT_LIBRARIES)
+
+  if (AVUTIL_LIBRARIES)
+    set(FFMPEG_LIBRARIES ${FFMPEG_LIBRARIES} ${AVUTIL_LIBRARIES})
+  endif (AVUTIL_LIBRARIES)
+
+  if (FFMPEG_LIBRARIES  AND  FFMPEG_INCLUDE_DIR)
+     set(FFMPEG_FOUND TRUE)
+  endif (FFMPEG_LIBRARIES  AND  FFMPEG_INCLUDE_DIR)
+
+  if (FFMPEG_FOUND)
+    if (NOT FFmpeg_FIND_QUIETLY)
+      message(STATUS "Found FFMPEG: ${FFMPEG_LIBRARIES} ${FFMPEG_INCLUDE_DIR}")
+    endif (NOT FFmpeg_FIND_QUIETLY)
+  else (FFMPEG_FOUND)
+    # only an old libavcodec was found ?
+    if (FFMPEG_INCLUDE_DIR_OLD_STYLE  AND NOT  FFMPEG_INCLUDE_DIR  AND NOT  FFmpeg_FIND_QUIETLY)
+      message(STATUS "Found old version of libavcodec, but a newer version is required.")
+    endif (FFMPEG_INCLUDE_DIR_OLD_STYLE  AND NOT  FFMPEG_INCLUDE_DIR  AND NOT  FFmpeg_FIND_QUIETLY)
+
+    if (FFmpeg_FIND_REQUIRED)
+      message(FATAL_ERROR "Could NOT find FFMPEG")
+    else (FFmpeg_FIND_REQUIRED)
+      if (NOT FFmpeg_FIND_QUIETLY)
+        message(STATUS "Could NOT find FFMPEG")
+      endif (NOT FFmpeg_FIND_QUIETLY)
+    endif (FFmpeg_FIND_REQUIRED)
+  endif (FFMPEG_FOUND)
+
+  mark_as_advanced(AVCODEC_LIBRARIES 
+                   AVFORMAT_LIBRARIES
+                   AVUTIL_LIBRARIES
+                   FFMPEG_INCLUDE_DIR
+                   FFMPEG_INCLUDE_DIR_OLD_STYLE)
+
+endif (FFMPEG_LIBRARIES)# AND FFMPEG_DEFINITIONS)
index 1960214f9b0c26d1f674ea4a7019cffb4f9c6621..4ea1626ce7f4124dbc737ff58f204005ab2125b9 100644 (file)
@@ -1,30 +1,48 @@
-
-
-find_package(Curses REQUIRED)
-
-include_directories(${CMAKE_SOURCE_DIR}/tools ${CURSES_INCLUDE_DIR})
-
-add_executable(slides
-       main.c 3ddemos.c static.c metaballs.c circlescope.c avstream.c video.c pong.c
-       ${CMAKE_SOURCE_DIR}/tools/trace.c
-
-       ${CMAKE_CURRENT_BINARY_DIR}/openlase-logo.ild
-       ${CMAKE_CURRENT_BINARY_DIR}/27c3-logo.ild
-       ${CMAKE_CURRENT_BINARY_DIR}/jack-logo.ild
-       ${CMAKE_CURRENT_BINARY_DIR}/output.ild
-)
-
-target_link_libraries(slides openlase avformat avcodec ${CURSES_LIBRARIES})
-
-function(svg2ild NAME)
-       add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${NAME}.ild
-           DEPENDS ${CMAKE_SOURCE_DIR}/tools/svg2ild.py
-           MAIN_DEPENDENCY ${NAME}.svg
-           DEPENDS ${NAME}.svg ${NAME}.cfg
-           COMMAND python ${CMAKE_SOURCE_DIR}/tools/svg2ild.py -q ${ARGN} -cfg ${CMAKE_CURRENT_SOURCE_DIR}/${NAME}.cfg ${CMAKE_CURRENT_SOURCE_DIR}/${NAME}.svg ${CMAKE_CURRENT_BINARY_DIR}/${NAME}.ild)
-endfunction()
-
-svg2ild(openlase-logo -noopt)
-svg2ild(27c3-logo)
-svg2ild(jack-logo)
-svg2ild(output)
+#         OpenLase - a realtime laser graphics toolkit
+#
+# Copyright (C) 2009-2011 Hector Martin "marcan" <hector@marcansoft.com>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 or version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+#
+
+if(CURSES_FOUND AND FFMPEG_FOUND)
+  include_directories(${CMAKE_SOURCE_DIR}/tools ${CURSES_INCLUDE_DIR})
+
+  add_executable(slides
+    main.c 3ddemos.c static.c metaballs.c circlescope.c avstream.c video.c pong.c
+    ${CMAKE_SOURCE_DIR}/tools/trace.c
+
+    ${CMAKE_CURRENT_BINARY_DIR}/openlase-logo.ild
+    ${CMAKE_CURRENT_BINARY_DIR}/27c3-logo.ild
+    ${CMAKE_CURRENT_BINARY_DIR}/jack-logo.ild
+    ${CMAKE_CURRENT_BINARY_DIR}/output.ild
+  )
+
+  target_link_libraries(slides openlase ${FFMPEG_LIBRARIES} ${CURSES_LIBRARIES})
+
+  function(svg2ild NAME)
+    add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${NAME}.ild
+      DEPENDS ${CMAKE_SOURCE_DIR}/tools/svg2ild.py
+      MAIN_DEPENDENCY ${NAME}.svg
+      DEPENDS ${NAME}.svg ${NAME}.cfg
+      COMMAND python ${CMAKE_SOURCE_DIR}/tools/svg2ild.py -q ${ARGN} -cfg ${CMAKE_CURRENT_SOURCE_DIR}/${NAME}.cfg ${CMAKE_CURRENT_SOURCE_DIR}/${NAME}.svg ${CMAKE_CURRENT_BINARY_DIR}/${NAME}.ild)
+  endfunction()
+
+  svg2ild(openlase-logo -noopt)
+  svg2ild(27c3-logo)
+  svg2ild(jack-logo)
+  svg2ild(output)
+else()
+  message(STATUS "Will NOT build 27c3_slides (curses or FFmpeg missing)")
+endif()
index 5995a62a8cd013f58cfac887fefcffb34922ab15..0fe680d5210f150f95d8da419c0af500d685e8cc 100644 (file)
@@ -28,9 +28,12 @@ target_link_libraries(simple openlase)
 add_executable(pong pong.c)
 target_link_libraries(pong openlase)
 
-find_package(ALSA REQUIRED)
-add_executable(midiview midiview.c)
-target_link_libraries(midiview openlase ${ALSA_LIBRARIES})
+if(ALSA_FOUND)
+  add_executable(midiview midiview.c)
+  target_link_libraries(midiview openlase ${ALSA_LIBRARIES})
+else()
+  message(STATUS "Will NOT build midiview (ALSA missing)")
+endif()
 
 add_executable(harp harp.c)
 target_link_libraries(harp openlase)
index 53b680649d718e5f141f11f768d764251b0b6c1f..c537e35c51e17c3e04c2094b21e2c09c82c5b6f4 100644 (file)
 #
 
 include_directories (${CMAKE_SOURCE_DIR}/include)
-find_package(Threads)
 
 add_library (openlase libol.c text.c ilda.c ${CMAKE_CURRENT_BINARY_DIR}/fontdef.c)
-find_library (PTHREAD pthread)
 target_link_libraries (openlase ${CMAKE_THREAD_LIBS_INIT} m jack)
 
 add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/fontdef.c
index a18622da78615b25ce2980e9671b930dd522991a..5ca4472e6af7fe414a5dcf59adf8b2e415b791dd 100644 (file)
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 #
 
-include(${QT_USE_FILE})
+if(QT4_FOUND)
+  include(${QT_USE_FILE})
 
-QT4_WRAP_UI(output_UIS_H output_settings.ui)
-QT4_AUTOMOC(output_settings.cpp output.cpp)
+  QT4_WRAP_UI(output_UIS_H output_settings.ui)
+  QT4_AUTOMOC(output_settings.cpp output.cpp)
 
-include_directories(${CMAKE_CURRENT_BINARY_DIR})
-
-add_executable(output output.cpp output_settings.cpp ${output_UIS_H})
-target_link_libraries(output ${JACK_LIBRARIES} ${QT_LIBRARIES})
+  include_directories(${CMAKE_CURRENT_BINARY_DIR})
 
+  add_executable(output output.cpp output_settings.cpp ${output_UIS_H})
+  target_link_libraries(output ${JACK_LIBRARIES} ${QT_LIBRARIES})
+else()
+  message(STATUS "Will NOT build output (Qt4 missing)")
+endif()
index 7643ab31890e64500e1a63b482326c4a0619c048..c88cf76e83203446102a7b358e14a11d64e68928 100644 (file)
@@ -22,16 +22,17 @@ link_directories (${CMAKE_BINARY_DIR}/libol)
 add_executable(playilda playilda.c)
 target_link_libraries(playilda ${JACK_LIBRARIES})
 
-add_executable(playvid playvid.c trace.c)
-target_link_libraries(playvid openlase avformat avcodec)
+if(FFMPEG_FOUND)
+  add_executable(playvid playvid.c trace.c)
+  target_link_libraries(playvid openlase ${FFMPEG_LIBRARIES})
+else()
+  message(STATUS "Will NOT build playvid (FFmpeg missing)")
+endif()
 
-include_directories (${CMAKE_SOURCE_DIR}/include)
-link_directories (${CMAKE_BINARY_DIR}/libol)
-
-find_package(OpenGL REQUIRED)
-find_package(GLUT REQUIRED)
-
-add_executable(simulator simulator.c)
-
-include_directories(${OPENGL_INCLUDE_DIRS} ${GLUT_INCLUDE_DIRS})
-target_link_libraries(simulator ${OPENGL_LIBRARIES} ${GLUT_LIBRARY} ${JACK_LIBRARIES})
+if(OPENGL_FOUND AND GLUT_FOUND)
+  add_executable(simulator simulator.c)
+  include_directories(${OPENGL_INCLUDE_DIRS} ${GLUT_INCLUDE_DIRS})
+  target_link_libraries(simulator m ${OPENGL_LIBRARIES} ${GLUT_LIBRARY} ${JACK_LIBRARIES})
+else()
+  message(STATUS "Will NOT build simulator (OpenGL or GLUT missing)")
+endif()