diff options
author | Alexander Neundorf <neundorf@kde.org> | 2006-01-22 10:29:20 +0000 |
---|---|---|
committer | Alexander Neundorf <neundorf@kde.org> | 2006-01-22 10:29:20 +0000 |
commit | 7c7a0e07ca201f1f5dd51bf87d6c023dc9dc28f0 (patch) | |
tree | 24a7fc6a27bc61b32ef736d2412508ada7e683d0 | |
parent | a6f951a920cc9b57aa36285d1201f7ebf0ad0265 (diff) | |
download | extra-cmake-modules-7c7a0e07ca201f1f5dd51bf87d6c023dc9dc28f0.tar.gz extra-cmake-modules-7c7a0e07ca201f1f5dd51bf87d6c023dc9dc28f0.tar.bz2 |
-generate_findpackage_file: a script to simplify generating simple FindFoo.cmake files
-FindLibXml2.cmake and FindLibXslt.cmake: modules to find libxml2 and libxslt, generated by the script above
-some tuning in the other modules
Alex
svn path=/trunk/KDE/kdesdk/cmake/; revision=501125
-rwxr-xr-x | am2cmake | 32 | ||||
-rwxr-xr-x | generate_findpackage_file | 85 | ||||
-rw-r--r-- | kde4/KDE4Macros.cmake | 5 | ||||
-rw-r--r-- | kde4/kde4uic.cmake | 2 | ||||
-rw-r--r-- | modules/FindLibXml2.cmake | 45 | ||||
-rw-r--r-- | modules/FindLibXslt.cmake | 45 | ||||
-rw-r--r-- | modules/FindQt4.cmake | 43 |
7 files changed, 232 insertions, 25 deletions
@@ -135,8 +135,8 @@ class BuildTarget else if currentLib =~ /^-l(\S+)$/ $1 - elsif currentLib =~ /^.+\/lib(\w+)\.la$/ - $1 + elsif currentLib =~ /^(.+\/)?lib(\w+)\.la$/ + $2 else "" end @@ -159,7 +159,7 @@ class BuildTarget end end previousWasVersionInfo= (currentLib == "-version-info") - + end end @@ -179,7 +179,7 @@ class CMakeFile @listsFile=@path+"CMakeLists.txt" @iconDir="hicolor" @installIcons=false - + @createDoxygenDocs=false @doxygenRecursive=false @doxygenInternalDocs=false @@ -415,7 +415,7 @@ class CMakeFile if line.include?("Doxyfile.am") || line.include?("DOXYGEN") parseDoxygenSettings(line) end - + if line =~ /^\s*KDE_ICON\s*=/ @installIcons=true return @@ -478,7 +478,7 @@ class CMakeFile file.printf("LINK_DIRECTORIES(${KDE3_LIB_DIR})\n\n") end - + if !@configHeaders.empty? @configHeaders.each{ |header| file.printf("CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/#{header}.cmake ${CMAKE_CURRENT_BINARY_DIR}/#{header} )\n\n") } end @@ -664,7 +664,7 @@ class CMakeFile def createKDE4ListsFile file=File.new(@listsFile, "w+"); file.printf("kde4_header()\n\n") - + if @amFile=="Makefile.am" # the toplevel Makefile.am file.printf("find_package(KDE4 REQUIRED)\n\n") file.printf("set(CMAKE_VERBOSE_MAKEFILE ON)\n\n") @@ -760,7 +760,7 @@ class CMakeFile file.printf(")\n\n") file.printf("kde4_add_ui3_files(%s ${%s} )\n\n", srcsName, ui3sName) end - + if not buildTarget.qrcs.empty? file.printf("set( %s\n", qrcsName) buildTarget.qrcs.each{ |currentFile| file.printf("%s\n", currentFile)} @@ -801,10 +801,10 @@ class CMakeFile file.printf("set_target_properties(%s PROPERTIES VERSION %d.%d.%d SOVERSION %d )\n", buildTarget.name, buildTarget.versionNumberMajor, buildTarget.versionNumberMinor, buildTarget.versionNumberPatch, buildTarget.versionNumberMajor) file.printf("install_targets(/lib %s )\n\n", buildTarget.name) - + elsif buildTarget.type==StaticLib file.printf("kde4_add_library(%s STATIC ${%s})\n\n", buildTarget.name, srcsName) - + elsif buildTarget.type==Part if buildTarget.stdPrefix file.printf("kde4_add_plugin(%s WITH_PREFIX ${%s})\n\n", buildTarget.name, srcsName) @@ -862,18 +862,18 @@ class CMakeFile if @installIcons file.printf("kde4_install_icons( %s )\n\n",@iconDir ) end - + if @createDoxygenDocs file.printf("kde4_create_doxygen_docs( ") - + if @doxygenRecursive file.printf("RECURSIVE ") end - + if @doxygenInternalDocs file.printf("INTERNAL_DOCS ") end - + if not @doxygenReferences.empty? file.printf("REFERENCES ") @doxygenReferences.each { |ref| file.printf("%s ", ref) } @@ -890,7 +890,7 @@ class CMakeFile file.printf("\n\n#original Makefile.am contents follow:\n\n") @lines.each{ |line| file.printf("#%s", line)} - + end end @@ -929,7 +929,7 @@ end if $withConvLibs $convFile=File.new("ConvenienceLibs.cmake", "w+") $convFile.printf("\n#former libtool convenience libraries:\n\n") -end +end $configHeaders=Dir["**/*.h.in"] diff --git a/generate_findpackage_file b/generate_findpackage_file new file mode 100755 index 00000000..c76e2604 --- /dev/null +++ b/generate_findpackage_file @@ -0,0 +1,85 @@ +#!/usr/bin/env ruby + +# simple script to generate simple cmake modules for finding libraries (packages) +# Alexander Neundorf <neundorf@kde.org>, 2006 +# usage: generate_findpackage_file +# then you will be prompted to enter the required parameters + +print("Name of package: ") +package=gets.chomp + +print("pkgconfig package name [e.g. \"libxml-2.0\", leave empty to skip pkgconfig]: ") +pkgconfig=gets.chomp + +print("Look for header (e.g. \"jpeglib.h\" or \"libxml/xpath.h\"): ") +header=gets.chomp + +print("Include subdir (e.g. \"libxml2\", empty to skip ): ") +incSubDir=gets.chomp +if not incSubDir.empty? + incSubDir="/"+incSubDir +end + +print("Look for library (e.g. \"jpeg\" or \"xml2\"): ") +lib=gets.chomp + +cmakeIncDirName=package.upcase+"_INCLUDE_DIR" +cmakeLibName=package.upcase+"_LIBRARY" +cmakeDefsName=package.upcase+"_DEFINITIONS" +cmakeFoundName=package.upcase+"_FOUND" +cmakeQuietName=package.upcase+"_QUIETLY" +cmakeRequiredName=package.upcase+"_REQUIRED" + +file=File.new("Find#{package}.cmake", "w+") + + +file.printf("# - Try to find #{package}\n") +file.printf("# Once done this will define\n") +file.printf("#\n") +file.printf("# #{cmakeFoundName} - system has #{package}\n") +file.printf("# #{cmakeIncDirName} - the #{package} include directory\n") +file.printf("# #{cmakeLibName} - Link these to use OpenGL and GLU\n") +file.printf("# #{cmakeDefsName} - Compiler switches required for using #{package}\n") +file.printf("#\n\n\n") + + +if not pkgconfig.empty? + file.printf("# use pkg-config to get the directories and then use these values\n") + file.printf("# in the FIND_PATH() and FIND_LIBRARY() calls\n") + file.printf("INCLUDE(UsePkgConfig)\n\n") + file.printf("PKGCONFIG(#{pkgconfig} _#{package}IncDir _#{package}LinkDir _#{package}LinkFlags _#{package}Cflags)\n\n") + file.printf("SET(#{cmakeDefsName} ${_#{package}Cflags})\n\n") +end + +file.printf("FIND_PATH(#{cmakeIncDirName} #{header}\n") +if not pkgconfig.empty? + file.printf(" ${_#{package}IncDir}#{incSubDir}\n") +end +file.printf(" /usr/include#{incSubDir}\n") +file.printf(" /usr/local/include#{incSubDir}\n") +file.printf(")\n\n") + +file.printf("FIND_LIBRARY(#{cmakeLibName} NAMES #{lib}\n") +file.printf(" PATHS\n") +if not pkgconfig.empty? + file.printf(" ${_#{package}LinkDir}\n") +end +file.printf(" /usr/lib\n") +file.printf(" /usr/local/lib\n") +file.printf(")\n\n") + +file.printf("IF(#{cmakeIncDirName} AND #{cmakeLibName})\n") +file.printf(" SET(#{cmakeFoundName} TRUE)\n") +file.printf("ENDIF(#{cmakeIncDirName} AND #{cmakeLibName})\n\n") + +file.printf("IF(#{cmakeFoundName})\n") +file.printf(" IF(NOT #{cmakeQuietName})\n") +file.printf(" MESSAGE(STATUS \"Found #{package}: ${#{cmakeLibName}}\")\n") +file.printf(" ENDIF(NOT #{cmakeQuietName})\n") +file.printf("ELSE(#{cmakeFoundName})\n") +file.printf(" IF(NOT #{cmakeRequiredName})\n") +file.printf(" MESSAGE(SEND_ERROR \"Could not find #{package}\")\n") +file.printf(" ENDIF(NOT #{cmakeRequiredName})\n") +file.printf("ENDIF(#{cmakeFoundName})\n\n") + +printf("Done, generated Find#{package}.cmake\n")
\ No newline at end of file diff --git a/kde4/KDE4Macros.cmake b/kde4/KDE4Macros.cmake index fae370b9..10370a60 100644 --- a/kde4/KDE4Macros.cmake +++ b/kde4/KDE4Macros.cmake @@ -262,7 +262,10 @@ MACRO(KDE4_AUTOMOC) SET(_tmp_FILE ${CMAKE_CURRENT_SOURCE_DIR}/${_current_FILE}) ENDIF(${_current_FILE} MATCHES "^/.+") +#message(STATUS "file: ${_tmp_FILE}") + IF (EXISTS ${_tmp_FILE}) +#message(STATUS "exists") FILE(READ ${_tmp_FILE} _contents) @@ -271,7 +274,9 @@ MACRO(KDE4_AUTOMOC) STRING(REGEX MATCHALL "#include +[^ ]+\\.moc[\">]" _match "${_contents}") IF(_match) +#message(STATUS "match 1") FOREACH (_current_MOC_INC ${_match}) +#message(STATUS "match 2") STRING(REGEX MATCH "[^ <\"]+\\.moc" _current_MOC "${_current_MOC_INC}") GET_FILENAME_COMPONENT(_basename ${_current_MOC} NAME_WE) diff --git a/kde4/kde4uic.cmake b/kde4/kde4uic.cmake index 60fa6b9b..42382aac 100644 --- a/kde4/kde4uic.cmake +++ b/kde4/kde4uic.cmake @@ -37,6 +37,8 @@ ENDIF (KDE4_HEADER) #replace tr218n("") with QString::null to avoid waring from KLocale STRING(REGEX REPLACE "tr2i18n\\(\"\"\\)" "QString::null" _uic_CONTENTS "${_uic_CONTENTS}" ) STRING(REGEX REPLACE "tr2i18n\\(\"\", \"\"\\)" "QString::null" _uic_CONTENTS "${_uic_CONTENTS}" ) +STRING(REGEX REPLACE "\nuic3: [^\n]+" "" _uic_CONTENTS "${_uic_CONTENTS}" ) +STRING(REGEX REPLACE "\n'[^\n]+' [^\n]+" "" _uic_CONTENTS "${_uic_CONTENTS}" ) #replace image15_data with img15_filename to make enable_final work STRING(REGEX REPLACE "image([0-9]+)_data" "img\\1_${KDE_UIC_BASENAME}" _uic_CONTENTS "${_uic_CONTENTS}") diff --git a/modules/FindLibXml2.cmake b/modules/FindLibXml2.cmake new file mode 100644 index 00000000..37486afc --- /dev/null +++ b/modules/FindLibXml2.cmake @@ -0,0 +1,45 @@ +# - Try to find LibXml2 +# Once done this will define +# +# LIBXML2_FOUND - system has LibXml2 +# LIBXML2_INCLUDE_DIR - the LibXml2 include directory +# LIBXML2_LIBRARY - Link these to use OpenGL and GLU +# LIBXML2_DEFINITIONS - Compiler switches required for using LibXml2 +# +# use pkg-config to get the directories and then use these values +# in the FIND_PATH() and FIND_LIBRARY() calls + + +INCLUDE(UsePkgConfig) + +PKGCONFIG(libxml-2.0 _LibXml2IncDir _LibXml2LinkDir _LibXml2LinkFlags _LibXml2Cflags) + +SET(LIBXML2_DEFINITIONS ${_LibXml2Cflags}) + +FIND_PATH(LIBXML2_INCLUDE_DIR libxml/xpath.h + ${_LibXml2IncDir}/libxml2 + /usr/include/libxml2 + /usr/local/include/libxml2 +) + +FIND_LIBRARY(LIBXML2_LIBRARY NAMES xml2 + PATHS + ${_LibXml2LinkDir} + /usr/lib + /usr/local/lib +) + +IF(LIBXML2_INCLUDE_DIR AND LIBXML2_LIBRARY) + SET(LIBXML2_FOUND TRUE) +ENDIF(LIBXML2_INCLUDE_DIR AND LIBXML2_LIBRARY) + +IF(LIBXML2_FOUND) + IF(NOT LIBXML2_QUIETLY) + MESSAGE(STATUS "Found LibXml2: ${LIBXML2_LIBRARY}") + ENDIF(NOT LIBXML2_QUIETLY) +ELSE(LIBXML2_FOUND) + IF(NOT LIBXML2_REQUIRED) + MESSAGE(SEND_ERROR "Could not find LibXml2") + ENDIF(NOT LIBXML2_REQUIRED) +ENDIF(LIBXML2_FOUND) + diff --git a/modules/FindLibXslt.cmake b/modules/FindLibXslt.cmake new file mode 100644 index 00000000..ed23fd64 --- /dev/null +++ b/modules/FindLibXslt.cmake @@ -0,0 +1,45 @@ +# - Try to find LibXslt +# Once done this will define +# +# LIBXSLT_FOUND - system has LibXslt +# LIBXSLT_INCLUDE_DIR - the LibXslt include directory +# LIBXSLT_LIBRARY - Link these to use OpenGL and GLU +# LIBXSLT_DEFINITIONS - Compiler switches required for using LibXslt +# + + +# use pkg-config to get the directories and then use these values +# in the FIND_PATH() and FIND_LIBRARY() calls +INCLUDE(UsePkgConfig) + +PKGCONFIG(libxslt _LibXsltIncDir _LibXsltLinkDir _LibXsltLinkFlags _LibXsltCflags) + +SET(LIBXSLT_DEFINITIONS ${_LibXsltCflags}) + +FIND_PATH(LIBXSLT_INCLUDE_DIR libxslt/xslt.h + ${_LibXsltIncDir} + /usr/include + /usr/local/include +) + +FIND_LIBRARY(LIBXSLT_LIBRARY NAMES xslt + PATHS + ${_LibXsltLinkDir} + /usr/lib + /usr/local/lib +) + +IF(LIBXSLT_INCLUDE_DIR AND LIBXSLT_LIBRARY) + SET(LIBXSLT_FOUND TRUE) +ENDIF(LIBXSLT_INCLUDE_DIR AND LIBXSLT_LIBRARY) + +IF(LIBXSLT_FOUND) + IF(NOT LIBXSLT_QUIETLY) + MESSAGE(STATUS "Found LibXslt: ${LIBXSLT_LIBRARY}") + ENDIF(NOT LIBXSLT_QUIETLY) +ELSE(LIBXSLT_FOUND) + IF(NOT LIBXSLT_REQUIRED) + MESSAGE(SEND_ERROR "Could not find LibXslt") + ENDIF(NOT LIBXSLT_REQUIRED) +ENDIF(LIBXSLT_FOUND) + diff --git a/modules/FindQt4.cmake b/modules/FindQt4.cmake index 47ac15d8..d2cea8a4 100644 --- a/modules/FindQt4.cmake +++ b/modules/FindQt4.cmake @@ -637,28 +637,53 @@ IF(QT4_QMAKE_FOUND) # ###################################### + MACRO(QT4_GET_ABS_PATH _abs_filename _filename) + IF(${_filename} MATCHES "^/.+") + SET(${_abs_filename} ${_filename}) + ELSE(${_filename} MATCHES "^/.+") + SET(${_abs_filename} ${CMAKE_CURRENT_SOURCE_DIR}/${_filename}) + ENDIF(${_filename} MATCHES "^/.+") + ENDMACRO(QT4_GET_ABS_PATH) + + + MACRO(QT4_GET_MOC_INC_DIRS _moc_INC_DIRS) + SET(${_moc_INC_DIRS}) + GET_DIRECTORY_PROPERTY(_inc_DIRS INCLUDE_DIRECTORIES) + + FOREACH(_current ${_inc_DIRS}) + SET(${_moc_INC_DIRS} ${${_moc_INC_DIRS}} "-I" ${_current}) + ENDFOREACH(_current ${_inc_DIRS}) + ENDMACRO(QT4_GET_MOC_INC_DIRS) + + MACRO(QT4_GENERATE_MOC infile outfile ) + # get include dirs + QT4_GET_MOC_INC_DIRS(moc_includes) + + QT4_GET_ABS_PATH(infile ${infile}) + + ADD_CUSTOM_COMMAND(OUTPUT ${outfile} + COMMAND ${QT_MOC_EXECUTABLE} + ARGS ${moc_includes} -o ${outfile} ${infile} + MAIN_DEPENDENCY ${infile}) + ENDMACRO(QT4_GENERATE_MOC) + # QT4_WRAP_CPP(outfiles inputfile ... ) # TODO perhaps add support for -D, -U and other minor options MACRO(QT4_WRAP_CPP outfiles ) - # get include dirs - GET_DIRECTORY_PROPERTY(moc_includes_tmp INCLUDE_DIRECTORIES) - SET(moc_includes) - FOREACH(it ${moc_includes_tmp}) - SET(moc_includes ${moc_includes} "-I${it}") - ENDFOREACH(it) + QT4_GET_MOC_INC_DIRS(moc_includes) FOREACH(it ${ARGN}) + QT4_GET_ABS_PATH(it ${it}) GET_FILENAME_COMPONENT(outfile ${it} NAME_WE) - SET(infile ${CMAKE_CURRENT_SOURCE_DIR}/${it}) SET(outfile ${CMAKE_CURRENT_BINARY_DIR}/moc_${outfile}.cxx) ADD_CUSTOM_COMMAND(OUTPUT ${outfile} COMMAND ${QT_MOC_EXECUTABLE} - ARGS ${moc_includes} -o ${outfile} ${infile} - MAIN_DEPENDENCY ${infile}) + ARGS ${moc_includes} -o ${outfile} ${it} + MAIN_DEPENDENCY ${it}) SET(${outfiles} ${${outfiles}} ${outfile}) ENDFOREACH(it) |