aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Neundorf <neundorf@kde.org>2006-01-22 10:29:20 +0000
committerAlexander Neundorf <neundorf@kde.org>2006-01-22 10:29:20 +0000
commit7c7a0e07ca201f1f5dd51bf87d6c023dc9dc28f0 (patch)
tree24a7fc6a27bc61b32ef736d2412508ada7e683d0
parenta6f951a920cc9b57aa36285d1201f7ebf0ad0265 (diff)
downloadextra-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-xam2cmake32
-rwxr-xr-xgenerate_findpackage_file85
-rw-r--r--kde4/KDE4Macros.cmake5
-rw-r--r--kde4/kde4uic.cmake2
-rw-r--r--modules/FindLibXml2.cmake45
-rw-r--r--modules/FindLibXslt.cmake45
-rw-r--r--modules/FindQt4.cmake43
7 files changed, 232 insertions, 25 deletions
diff --git a/am2cmake b/am2cmake
index 298447db..3d2109a9 100755
--- a/am2cmake
+++ b/am2cmake
@@ -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)