Warning, /sdk/kde-dev-scripts/cmake-utils/scripts/am2cmake is written in an unsupported language. File is not indexed.
0001 #!/usr/bin/env ruby 0002 0003 0004 NoTarget = 0 0005 Executable = 1 0006 StaticLib = 2 0007 SharedLib = 3 0008 Part = 4 0009 KDEInit = 5 0010 0011 BuildNoKDE=0 0012 BuildKDE3=1 0013 BuildKDE4=2 0014 0015 $withConv=false 0016 0017 0018 $buildType=BuildKDE4 0019 0020 $allTargets=Array.new 0021 0022 LibMappingKDE3 = { 0023 "$(LIB_QT3SUPPORT)" => "${QT_QT3SUPPORT_LIBRARY}", 0024 "$(DCOP_LIB)" => "DCOP", 0025 "$(LIB_KDEUI)" => "kdeui", 0026 "$(LIB_KIO)" => "kio", 0027 "$(LIB_KDEPRINT)" => "kdeprint", 0028 "$(LIB_KPARTS)" => "kparts", 0029 "$(LIB_KSPELL2)" => "kspell2", 0030 "$(LIB_KDE3SUPPORT)" => "kde3support", 0031 "$(LIB_KJS)" => "kjs", 0032 "$(LIB_KHTML)" => "khtml", 0033 "$(LIB_KNEWSTUFF)" => "knewstuff", 0034 "$(LIB_KDEPIM)" => "kdepim", 0035 "$(LIB_KDNSSD)" => "kdnssd", 0036 "$(LIB_KIMPROXY)" => "kimproxy", 0037 "$(LIB_KUTILS)" => "kutils", 0038 "$(LIB_KSYCOCA)" => "kio" 0039 } 0040 0041 LibMappingKDE4 = { 0042 "$(LIB_QT3SUPPORT)" => "${QT_QT3SUPPORT_LIBRARY}", 0043 "$(LIB_KDEUI)" => "${KDE4_KDEUI_LIBS}", 0044 "$(LIB_KIO)" => "${KDE4_KIO_LIBS}", 0045 "$(LIB_KDEPRINT)" => "kdeprint", 0046 "$(LIB_KPARTS)" => "${KDE4_KPARTS_LIBS}", 0047 "$(LIB_KSPELL2)" => "${KDE4_KSPELL2_LIBS}", 0048 "$(LIB_KDE3SUPPORT)" => "${KDE4_KDE3SUPPORT_LIBS}", 0049 "$(LIB_KJS)" => "${KDE4_KJS_LIBS}", 0050 "$(LIB_KHTML)" => "${KDE4_KHTML_LIBS}", 0051 "$(LIB_KNEWSTUFF)" => "knewstuff", 0052 "$(LIB_KDNSSD)" => "${KDE4_KDNSSD_LIBS}", 0053 "$(LIB_KDEPIM)" => "kdepim", 0054 "$(LIB_KIMPROXY)" => "kimproxy", 0055 "$(LIB_KUTILS)" => "${KDE4_KUTILS_LIBS}", 0056 "$(LIB_KSYCOCA)" => "${KDE4_KIO_LIBS}", 0057 "$(LIB_KOFFICEUI)" => "kofficeui", 0058 "$(LIB_KOFFICECORE)" => "kofficecore", 0059 "$(LIB_KSTORE)" => "kstore", 0060 "$(LIB_KOTEXT)" => "kotext", 0061 "$(LIB_KOPAINTER)" => "kopainter", 0062 "$(LIB_KOPALETTE)" => "kopalette", 0063 "$(LIB_KWMF)" => "kwmf", 0064 "$(LIB_KOWMF)" => "kowmf", 0065 "$(LIB_KFORMULA)" => "kformulalib", 0066 "$(LIB_KOPROPERTY)" => "koproperty", 0067 "$(LIB_KROSS_API)" => "krossapi", 0068 "$(LIB_KROSS_MAIN)" => "krossmain" 0069 } 0070 0071 $libMapping=LibMappingKDE3 0072 0073 InstallDirsKDE3 = { 0074 "kde_apps" => "share/applnk", 0075 "kde_conf" => "share/config", 0076 "kde_data" => "share/apps", 0077 "kde_html" => "share/doc/HTML", 0078 "kde_icon" => "share/icons", 0079 "kde_kcfg" => "share/config.kcfg", 0080 "kde_libs_html"=> "share/doc/HTML", 0081 "kde_locale" => "share/locale", 0082 "kde_mime" => "share/mimelink", 0083 "kde_services" => "share/services", 0084 "kde_servicetypes" => "share/servicetypes", 0085 "kde_sound" => "share/sounds", 0086 "kde_templates"=> "share/templates", 0087 "kde_wallpaper"=> "share/wallpapers", 0088 "xdg_apps" => "share/applications/kde", 0089 "xdg_directory"=> "share/desktop-directories", 0090 "data" => "share", 0091 "include" => "include" 0092 } 0093 0094 InstallDirsKDE4 = { 0095 "kde_apps" => "${APPLNK_INSTALL_DIR}", 0096 "kde_conf" => "${CONFIG_INSTALL_DIR}", 0097 "kde_data" => "${DATA_INSTALL_DIR}", 0098 "kde_html" => "${HTML_INSTALL_DIR}", 0099 "kde_icon" => "${KDE4_ICON_DIR}", 0100 "kde_kcfg" => "${KCFG_INSTALL_DIR}", 0101 "kde_libs_html"=> "${LIBS_HTML_INSTALL_DIR}", 0102 "kde_locale" => "${LOCALE_INSTALL_DIR}", 0103 "kde_mime" => "${MIME_INSTALL_DIR}", 0104 "kde_services" => "${SERVICES_INSTALL_DIR}", 0105 "kde_servicetypes" => "${SERVICETYPES_INSTALL_DIR}", 0106 "kde_sound" => "${SOUND_INSTALL_DIR}", 0107 "kde_templates"=> "${TEMPLATES_INSTALL_DIR}", 0108 "kde_wallpaper"=> "${WALLPAPER_INSTALL_DIR}", 0109 "xdg_apps" => "${XDG_APPS_INSTALL_DIR}", 0110 "xdg_directory"=> "${XDG_DIRECTORY_INSTALL_DIR}", 0111 "data" => "${DATA_INSTALL_DIR}", 0112 "include" => "${INCLUDE_INSTALL_DIR}" 0113 } 0114 0115 $installDirs=InstallDirsKDE3 0116 0117 class InstallTarget 0118 def initialize 0119 @files="" 0120 @location="" 0121 end 0122 def addFiles(files) 0123 @files=@files+" "+files 0124 end 0125 def setLocation(location) 0126 @location=location 0127 end 0128 attr_reader :location, :files 0129 end 0130 0131 class BuildTarget 0132 def initialize(name, type, withStdPrefix=true, install=true, test=false) 0133 @name=name 0134 @type=type 0135 @sources=Array.new 0136 @ui3s=Array.new # for ui3 files in a kde4 build 0137 @uis=Array.new 0138 @skels=Array.new 0139 @stubs=Array.new 0140 @kcfgs=Array.new 0141 @qrcs=Array.new 0142 @am=Array.new 0143 @stdPrefix=withStdPrefix 0144 @install=install 0145 @test=test 0146 @libs=Array.new 0147 @versionNumberMajor=1 0148 @versionNumberMinor=0 0149 @versionNumberPatch=0 0150 0151 if $buildType==BuildKDE4 0152 @libs.push("${KDE4_KDECORE_LIBS}") 0153 elsif $buildType==BuildKDE3 0154 @libs.push("${QT_AND_KDECORE_LIBS}") 0155 end 0156 $allTargets.push(self) 0157 end 0158 0159 def addSourceFiles(files) 0160 files.split.each do |currentSource| 0161 if currentSource =~ /^\S+\.ui$/ 0162 @uis.push(currentSource) 0163 elsif currentSource =~ /^(\S+)\.ui4$/ 0164 @uis.push(currentSource) 0165 elsif currentSource =~ /^(\S+)\.ui3$/ #Qt3 ui file in a KDE 4 build 0166 @ui3s.push(currentSource) 0167 elsif currentSource =~ /^(\S+)\.skel$/ 0168 @skels.push($1+".h") 0169 elsif currentSource =~ /^(\S+)\.stub$/ 0170 @stubs.push($1+".h") 0171 elsif currentSource =~ /^(\S+)\.kcfgc$/ 0172 @kcfgs.push(currentSource) 0173 elsif currentSource =~ /^(\S+)\.qrc$/ 0174 @qrcs.push(currentSource) 0175 else 0176 @sources.push(currentSource) 0177 end 0178 end 0179 end 0180 0181 def addLibs(libs) 0182 lib="" 0183 previousWasVersionInfo=false 0184 libs.split.each do |currentLib| 0185 if $libMapping.has_key?(currentLib) 0186 lib=$libMapping[currentLib] 0187 else 0188 if currentLib =~ /^-l(\S+)$/ 0189 lib=$1 0190 elsif currentLib =~ /^(.+\/)?lib(\w+)\.la$/ 0191 lib=$2 0192 elsif currentLib =~ /^(.+\/)?lib(\w+)\.a$/ 0193 lib=$2 0194 else 0195 lib="" 0196 end 0197 end 0198 0199 if !lib.empty? 0200 @libs.push(lib) 0201 end 0202 0203 #handle libtool version info, not sure it is correct 0204 if previousWasVersionInfo 0205 if currentLib =~ /^(\d+):(\d+):(\d+)$/ 0206 @versionNumberMajor=$1.to_i-$3.to_i 0207 @versionNumberMinor=$3.to_i 0208 @versionNumberPatch=$2.to_i 0209 elsif previousWasVersionInfo && currentLib =~ /^(\d+):(\d+)$/ 0210 @versionNumberMajor=$1.to_i 0211 @versionNumberMinor=$2.to_i 0212 @versionNumberPatch=0 0213 end 0214 end 0215 previousWasVersionInfo= (currentLib == "-version-info") 0216 0217 end 0218 0219 end 0220 0221 0222 attr_reader :name, :type, :sources, :uis, :ui3s, :skels, :stdPrefix, :stubs, :kcfgs, :install, :test, :libs, :qrcs 0223 attr_reader :versionNumberMajor, :versionNumberMinor, :versionNumberPatch 0224 0225 end 0226 0227 class CMakeFile 0228 def initialize(amFile) 0229 printf("converting #{amFile}\n") 0230 @amFile=amFile 0231 amFile =~ /(.*)Makefile.am/ 0232 @path=$1 0233 @listsFile=@path+"CMakeLists.txt" 0234 @iconDir="hicolor" 0235 @installIcons=false 0236 @installDoc=false 0237 0238 @createDoxygenDocs=false 0239 @doxygenRecursive=false 0240 @doxygenInternalDocs=false 0241 @doxygenReferences=Array.new 0242 @doxygenExcludes=Array.new 0243 0244 @targets=Array.new 0245 @installs=Hash.new 0246 0247 @includeDirs=Array.new 0248 @subDirs=Array.new 0249 @skippedSubDirs=Array.new 0250 0251 @configHeaders=Array.new 0252 $configHeaders.each do |header| 0253 @configHeaders.push($1) if header=~ Regexp.new("^"+@path+"([^\\/]+\\.h)\\.in") 0254 end 0255 0256 parseFile 0257 0258 if $buildType==BuildKDE3 0259 @includeDirs.push("${CMAKE_CURRENT_SOURCE_DIR}") 0260 @includeDirs.push("${CMAKE_CURRENT_BINARY_DIR}") 0261 @includeDirs.push("${KDE3_INCLUDE_DIR}") 0262 @includeDirs.push("${QT_INCLUDE_DIR}") 0263 elsif $buildType==BuildKDE4 0264 @includeDirs.push("${KDE4_INCLUDES}") 0265 @includeDirs.push("${KDE4_INCLUDE_DIR}") 0266 @includeDirs.push("${QT_INCLUDES}") 0267 end 0268 end 0269 0270 def parseFile 0271 @lines=IO.readlines(@amFile) 0272 cummLine="" 0273 appendNextLine=false 0274 for line in @lines do 0275 if line.include?("#") 0276 line=line[0, line.index("#")] 0277 end 0278 if line.length<2 0279 next 0280 end 0281 0282 appendNextLine=(line[line.length-2, 1]=='\\') 0283 0284 if appendNextLine 0285 cummLine+=" "+line[0, line.length-2] 0286 else 0287 cummLine+=" "+line.chomp #[0, line.length-1] 0288 if not cummLine.empty? 0289 parseLine(cummLine) 0290 cummLine="" 0291 end 0292 end 0293 end 0294 end 0295 0296 def findTarget(line) 0297 type=SharedLib 0298 if line =~ /^\s*lib(\S+)_la_\S+\s*=\s*\S+.*$/ 0299 targetName=$1 0300 # type=SharedLib 0301 elsif line =~ /^\s*(\S+)_la_\S+\s*=\s*\S+.*$/ 0302 targetName=$1 0303 # type=Executable 0304 elsif line =~ /^\s*lib(\S+)_a_\S+\s*=\s*\S+.*$/ 0305 targetName=$1 0306 # type=StaticLib 0307 elsif line =~ /^\s*(\S+)_\S+\s*=\s*\S+.*$/ 0308 targetName=$1 0309 # type=Executable 0310 end 0311 0312 @targets.each do |buildTarget| 0313 amBuildTargetName=buildTarget.name.gsub(/\./, "_") 0314 # printf("- %s [%s]\n", amBuildTargetName, targetName) 0315 if (amBuildTargetName==targetName) 0316 return buildTarget 0317 end 0318 end 0319 0320 return BuildTarget.new("Dummy", NoTarget) 0321 end 0322 0323 def addTarget(line) 0324 type=NoTarget 0325 targets="" 0326 installTarget=true 0327 testTarget=false 0328 0329 if line =~ /^\s*lib_LTLIBRARIES\s*=\s*(\S+.*)/ 0330 targets=$1 0331 type=SharedLib 0332 # printf("shared: %s\n", $1) 0333 elsif line =~ /^\s*noinst_LTLIBRARIES\s*=\s*(\S+.*)/ 0334 targets=$1 0335 type=StaticLib 0336 # printf("static: %s\n", $1) 0337 elsif line =~ /^\s*noinst_LIBRARIES\s*=\s*(\S+.*)/ 0338 targets=$1 0339 type=StaticLib 0340 # printf("static: %s\n", $1) 0341 elsif line =~ /^\s*kde_module_LTLIBRARIES\s*=\s*(\S+.*)/ 0342 # printf("part: %s\n", $1) 0343 targets=$1 0344 type=Part 0345 elsif line =~ /^\s*kde_style_LTLIBRARIES\s*=\s*(\S+.*)/ 0346 # printf("style: %s\n", $1) 0347 targets=$1 0348 type=Part 0349 elsif line =~ /^\s*kde_widget_LTLIBRARIES\s*=\s*(\S+.*)/ 0350 # printf("style: %s\n", $1) 0351 targets=$1 0352 type=Part 0353 elsif line =~ /^\s*kdeinit_LTLIBRARIES\s*=\s*(\S+.*)/ 0354 # printf("kdeinitpart: %s\n", $1) 0355 targets=$1 0356 type=KDEInit 0357 elsif line =~ /^\s*bin_PROGRAMS\s*=\s*(\S+.*)$/ 0358 targets=$1 0359 # printf("exec: %s\n", $1) 0360 type=Executable 0361 elsif line =~ /^\s*noinst_PROGRAMS\s*=\s*(\S+.*)$/ 0362 targets=$1 0363 installTarget=false 0364 # printf("exec: %s\n", $1) 0365 type=Executable 0366 elsif line =~ /^\s*check_PROGRAMS\s*=\s*(\S+.*)$/ 0367 targets=$1 0368 installTarget=false 0369 testTarget=true 0370 0371 # printf("exec: %s\n", $1) 0372 type=Executable 0373 elsif line =~ /^\s*EXTRA_PROGRAMS\s*=\s*(\S+.*)$/ 0374 targets=$1 0375 installTarget=false 0376 testTarget=true 0377 # printf("exec: %s\n", $1) 0378 type=Executable 0379 else 0380 return false 0381 end 0382 0383 if type==Executable 0384 targets.split.each{ |current| @targets.push(BuildTarget.new(current, type, true, installTarget, testTarget)) } 0385 else 0386 targets.split.each do |current| 0387 if current =~ /lib(\S+)\.la/ 0388 # printf("adding target with \"lib\": -%s-\n", $1) 0389 @targets.push(BuildTarget.new($1, type)) 0390 elsif current =~ /\s*(\S+)\.la/ 0391 # printf("adding target without \"lib\": -%s-\n", $1) 0392 @targets.push(BuildTarget.new($1, type, false)) 0393 elsif current =~ /lib(\S+)\.a/ 0394 @targets.push(BuildTarget.new($1, type)) 0395 elsif current =~ /\s*(\S+)\.a/ 0396 @targets.push(BuildTarget.new($1, type, false)) 0397 end 0398 end 0399 end 0400 return true 0401 end 0402 0403 def addSourcesToTarget(line) 0404 # printf("sources: %s\n", line) 0405 buildTarget=findTarget(line) 0406 if buildTarget.type==NoTarget 0407 $stderr.printf("%s PROBLEM: target not found: %s\n", @amFile, line) 0408 return 0409 end 0410 0411 if line =~ /^\s*(lib)?\S+(_la)?_SOURCES\s*=\s*(\S+.*)$/ 0412 buildTarget.addSourceFiles($3) 0413 elsif line =~ /^\s*(lib)?\S+(_a)?_SOURCES\s*=\s*(\S+.*)$/ 0414 buildTarget.addSourceFiles($3) 0415 end 0416 end 0417 0418 def addIncludeDirectories(includeDirs) 0419 includeDirs.split.each do |dir| 0420 if dir =~ /^\s*-I\$\(top_srcdir\)(\S+)/ 0421 @includeDirs.push("${CMAKE_SOURCE_DIR}"+$1) 0422 end 0423 end 0424 end 0425 0426 def addInstallFiles(key, files) 0427 if @installs.has_key?(key) 0428 inst=@installs[key] 0429 else 0430 inst=InstallTarget.new 0431 end 0432 inst.addFiles(files) 0433 if $installDirs.has_key?(key) 0434 inst.setLocation($installDirs[key]) 0435 end 0436 @installs[key]=inst 0437 end 0438 0439 def addInstallLocation(key, location) 0440 # printf("adding loc: %s \n", location) 0441 if @installs.has_key?(key) 0442 inst=@installs[key] 0443 else 0444 inst=InstallTarget.new 0445 end 0446 0447 if location =~ /\$\((\S+)dir\)(\/?\S*)/ 0448 baseDir=$1 0449 subDir=$2 0450 if $installDirs.has_key?(baseDir) 0451 inst.setLocation($installDirs[baseDir]+subDir) 0452 @installs[key]=inst 0453 end 0454 if baseDir=="kde_icon" 0455 @iconDir=key 0456 end 0457 end 0458 end 0459 0460 def parseDoxygenSettings(line) 0461 if line.include?("Doxyfile.am") 0462 @createDoxygenDocs=true 0463 elsif line =~ /^\s*DOXYGEN_SET_INTERNAL_DOCS\s*=\sYES.*/ 0464 @doxygenInternalDocs = true 0465 elsif line =~ /^\s*DOXYGEN_SET_RECURSIVE\s*=\sYES.*/ 0466 @doxygenRecursive = true 0467 elsif line =~ /^\s*DOXYGEN_REFERENCES\s*=\s*(\S+.*)$/ 0468 ($1).split.each { |ref| @doxygenReferences.push(ref) } 0469 elsif line =~ /^\s*DOXYGEN_EXCLUDE\s*=\s*(\S+.*)$/ 0470 ($1).split.each { |exclude| @doxygenExcludes.push(exclude) } 0471 end 0472 end 0473 0474 def parseLine(line) 0475 if line =~ /^\s*METASOURCES\s*=\s*AUTO\s*$/ 0476 @automoc=true 0477 return 0478 end 0479 0480 if addTarget(line) 0481 return 0482 end 0483 0484 0485 if line.include?("Doxyfile.am") || line.include?("DOXYGEN") 0486 parseDoxygenSettings(line) 0487 end 0488 0489 if line =~ /^\s*KDE_ICON\s*=/ 0490 @installIcons=true 0491 return 0492 end 0493 0494 if line =~ /^\s*KDE_DOCS\s*=/ 0495 @installDoc=true 0496 return 0497 end 0498 0499 if (line =~ /^\s*\S+_SOURCES\s*=/) 0500 addSourcesToTarget(line) 0501 return 0502 end 0503 0504 if (line =~ /^\s*(\S+)_LDFLAGS\s*=\s*(\S+.*)$/) || 0505 (line =~ /^\s*(\S+)_LIBADD\s*=\s*(\S+.*)$/) || 0506 (line =~ /^\s*(\S+)_LDADD\s*=\s*(\S+.*)$/) 0507 0508 if $1 != "AM" 0509 buildTarget=findTarget(line) 0510 if buildTarget.type==NoTarget 0511 $stderr.printf("%s PROBLEM: target %s not found: %s\n", @amFile, $1, line) 0512 return 0513 end 0514 0515 # $stderr.printf("target: #{buildTarget.name} lib: #{$2} line: #{line} d1: #{$1}\n") 0516 buildTarget.addLibs($2) 0517 end 0518 return 0519 end 0520 0521 if (line =~ /^\s*INCLUDES\s*=\s*(\S+.*)$/) 0522 addIncludeDirectories($1) 0523 return 0524 end 0525 0526 if line =~ /^\s*(\S+)dir\s*=\s*(\S+.*)$/ 0527 addInstallLocation($1, $2) 0528 return 0529 end 0530 if line =~ /^\s*(\S+)_DATA\s*=\s*(\S+.*)$/ 0531 addInstallFiles($1, $2) 0532 return 0533 end 0534 if line =~ /^\s*(\S+)_SCRIPTS\s*=\s*(\S+.*)$/ 0535 addInstallFiles($1, $2) 0536 return 0537 end 0538 if line =~ /^\s*(\w*include)_HEADERS\s*=\s*(\S+.*)$/ 0539 addInstallFiles($1, $2) 0540 return 0541 end 0542 0543 if line =~ /^\s*SUBDIRS\s*=\s*(\S+.*)$/ || line =~ /^\s*COMPILE_FIRST\s*=\s*(\S+.*)$/ 0544 ($1).split.each do |dir| 0545 if dir =~ /\$\(.+\)/ 0546 @skippedSubDirs.push(dir) 0547 else 0548 @subDirs.push(dir) if dir!="." 0549 end 0550 end 0551 end 0552 end 0553 0554 0555 def createKDE3ListsFile 0556 0557 file=File.new(@listsFile, "w+"); 0558 if @amFile=="Makefile.am" && $buildType == BuildKDE3 # the toplevel Makefile.am 0559 file.printf("find_package(KDE3 REQUIRED)\n\n") 0560 file.printf("set(CMAKE_VERBOSE_MAKEFILE ON)\n\n") 0561 file.printf("add_definitions(${QT_DEFINITIONS} ${KDE3_DEFINITIONS})\n\n") 0562 file.printf("link_directories(${KDE3_LIB_DIR})\n\n") 0563 0564 end 0565 0566 if !@configHeaders.empty? 0567 @configHeaders.each{ |header| file.printf("configure_file(${CMAKE_CURRENT_SOURCE_DIR}/#{header}.cmake ${CMAKE_CURRENT_BINARY_DIR}/#{header})\n\n") } 0568 end 0569 0570 if not @subDirs.empty? 0571 @subDirs.each{ |dir| file.printf("add_subdirectory(%s)\n", dir)} 0572 file.printf("\n") 0573 end 0574 if not @skippedSubDirs.empty? 0575 @skippedSubDirs.each{ |dir| file.printf("message(STATUS \"${CMAKE_CURRENT_SOURCE_DIR}: skipped subdir %s\")\n", dir)} 0576 end 0577 0578 0579 if not @includeDirs.empty? 0580 file.printf("include_directories(") 0581 @includeDirs.each{ |dir| file.printf("%s ", dir) } 0582 file.printf(")\n\n") 0583 end 0584 @targets.each do |buildTarget| 0585 file.printf("\n########### next target ###############\n\n") 0586 # printf("target name: %s\n", buildTarget.name) 0587 0588 if buildTarget.type==SharedLib 0589 srcsName=buildTarget.name+"_LIB_SRCS" 0590 elsif buildTarget.type==StaticLib 0591 srcsName=buildTarget.name+"_STAT_SRCS" 0592 elsif buildTarget.type==Part 0593 srcsName=buildTarget.name+"_PART_SRCS" 0594 elsif buildTarget.type==KDEInit 0595 srcsName=buildTarget.name+"_KDEINIT_SRCS" 0596 else 0597 srcsName=buildTarget.name+"_SRCS" 0598 end 0599 uisName=buildTarget.name+"_UI" 0600 skelsName=buildTarget.name+"_DCOP_SKEL_SRCS" 0601 stubsName=buildTarget.name+"_DCOP_STUB_SRCS" 0602 kcfgsName=buildTarget.name+"_KCFG_SRCS" 0603 0604 if buildTarget.sources.empty? 0605 buildTarget.sources.push("dummy.cpp") 0606 end 0607 0608 if not buildTarget.sources.empty? 0609 file.printf("SET(%s\n", srcsName) 0610 needToCreateDummyFile=false 0611 buildTarget.sources.each do |currentFile| 0612 file.printf(" %s\n", currentFile) 0613 if currentFile=="dummy.cpp" 0614 0615 needToCreateDummyFile=true if not FileTest.exists?(@path+"/dummy.cpp") 0616 end 0617 end 0618 file.printf(")\n\n") 0619 0620 if $buildType == BuildKDE3 0621 file.printf("kde3_automoc(${%s})\n\n", srcsName) 0622 end 0623 0624 if needToCreateDummyFile 0625 # printf("creating dummy file in #{@path} ________\n") 0626 file.printf("file(WRITE dummy.cpp \"//autogenerated file by cmake\\n\")\n") 0627 end 0628 end 0629 0630 if not buildTarget.uis.empty? 0631 file.printf("set(%s\n", uisName) 0632 buildTarget.uis.each{ |currentFile| file.printf(" %s\n", currentFile)} 0633 file.printf(")\n\n") 0634 file.printf("kde3_add_ui_files(%s ${%s})\n\n", srcsName, uisName) 0635 end 0636 0637 if not buildTarget.skels.empty? 0638 file.printf("set(%s\n", skelsName) 0639 buildTarget.skels.each{ |currentFile| file.printf(" %s\n", currentFile)} 0640 file.printf(")\n\n") 0641 0642 file.printf("kde3_add_dcop_skels(%s ${%s})\n\n", srcsName, skelsName) 0643 end 0644 0645 if not buildTarget.stubs.empty? 0646 file.printf("set(%s\n", stubsName) 0647 buildTarget.stubs.each{ |currentFile| file.printf(" %s\n", currentFile)} 0648 file.printf(")\n\n") 0649 0650 file.printf("kde3_add_dcop_stubs(%s ${%s})\n\n", srcsName, stubsName) 0651 end 0652 0653 if not buildTarget.kcfgs.empty? 0654 file.printf("set(%s\n", kcfgsName) 0655 buildTarget.kcfgs.each{ |currentFile| file.printf(" %s\n", currentFile)} 0656 file.printf(")\n\n") 0657 0658 file.printf("kde3_add_kcfg_files(%s ${%s})\n\n", srcsName, kcfgsName) 0659 end 0660 0661 if buildTarget.type==SharedLib 0662 file.printf("add_library(%s SHARED ${%s})\n\n", buildTarget.name, srcsName) 0663 file.printf("target_link_libraries(%s", buildTarget.name) 0664 buildTarget.libs.each { |currentLib| file.printf(" %s", currentLib) } 0665 file.printf(")\n\n") 0666 0667 file.printf("set_target_properties(%s PROPERTIES VERSION 4.2.0 SOVERSION 4)\n", buildTarget.name) 0668 file.printf("install(TARGETS %s DESTINATION lib)\n\n", buildTarget.name) 0669 elsif buildTarget.type==StaticLib 0670 file.printf("add_library(%s STATIC ${%s})\n\n", buildTarget.name, srcsName) 0671 elsif buildTarget.type==Part 0672 if buildTarget.stdPrefix 0673 file.printf("kde3_add_kpart(%s WITH_PREFIX ${%s})\n\n", buildTarget.name, srcsName) 0674 else 0675 file.printf("kde3_add_kpart(%s ${%s})\n\n", buildTarget.name, srcsName) 0676 end 0677 file.printf("target_link_libraries(%s", buildTarget.name) 0678 buildTarget.libs.each { |currentLib| file.printf(" %s", currentLib) } 0679 file.printf(")\n\n") 0680 0681 file.printf("install(TARGETS %s DESTINATION lib/kde3)\n\n", buildTarget.name) 0682 elsif buildTarget.type==KDEInit 0683 file.printf("kde3_add_kdeinit_executable(%s ${%s})\n\n", buildTarget.name, srcsName) 0684 0685 file.printf("target_link_libraries(kdeinit_%s", buildTarget.name) 0686 buildTarget.libs.each { |currentLib| file.printf(" %s", currentLib) } 0687 file.printf(")\n\n") 0688 0689 file.printf("install(TARGETS kdeinit_%s DESTINATION lib)\n\n", buildTarget.name) 0690 0691 file.printf("target_link_libraries(%s kdeinit_%s)\n", buildTarget.name, buildTarget.name) 0692 0693 file.printf("install(TARGETS %s DESTINATION bin)\n", buildTarget.name) 0694 0695 else #executable 0696 if $buildType == BuildNoKDE 0697 0698 file.printf("add_executable(%s ${%s})\n\n", buildTarget.name, srcsName) 0699 0700 file.printf("target_link_libraries(%s", buildTarget.name) 0701 buildTarget.libs.each { |currentLib| file.printf(" %s", currentLib) } 0702 file.printf(")\n\n") 0703 0704 if buildTarget.install 0705 file.printf("install(TARGETS %s DESTINATION bin)\n\n", buildTarget.name) 0706 end 0707 0708 else 0709 if buildTarget.test 0710 file.printf("if(KDE3_BUILD_TESTS)\n\n") 0711 end 0712 0713 file.printf("kde3_add_executable(%s ${%s})\n\n", buildTarget.name, srcsName) 0714 0715 file.printf("target_link_libraries(%s", buildTarget.name) 0716 buildTarget.libs.each { |currentLib| file.printf(" %s", currentLib) } 0717 file.printf(")\n\n") 0718 0719 if buildTarget.install 0720 file.printf("install(TARGETS %s DESTINATION bin)\n\n", buildTarget.name) 0721 end 0722 0723 if buildTarget.test 0724 file.printf("endif(KDE3_BUILD_TESTS)\n") 0725 end 0726 0727 end 0728 0729 end 0730 0731 end 0732 0733 file.printf("\n########### install files ###############\n\n") 0734 0735 @installs.each do |key, install| 0736 file.printf("install(FILES %s DESTINATION %s)\n", install.files, install.location) 0737 end 0738 file.printf("\n") 0739 0740 if @installIcons 0741 file.printf("kde3_install_icons(%s)\n\n", @iconDir) 0742 end 0743 0744 file.printf("\n\n#original Makefile.am contents follow:\n\n") 0745 @lines.each{ |line| file.printf("#%s", line)} 0746 end 0747 0748 0749 def createKDE4ListsFile 0750 file=File.new(@listsFile, "w+"); 0751 file.printf("\n") 0752 0753 if @amFile=="Makefile.am" # the toplevel Makefile.am 0754 file.printf("find_package(KDE4 REQUIRED)\n\n") 0755 file.printf("add_definitions(${QT_DEFINITIONS} ${KDE4_DEFINITIONS})\n\n") 0756 file.printf("include(KDE4Defaults)\n\n") 0757 file.printf("include(MacroLibrary)\n\n") 0758 file.printf("include(ConvenienceLibs.cmake)\n\n") 0759 file.printf("include(ManualStuff.cmake)\n\n") 0760 file.printf("include(ConfigureChecks.cmake)\n\n") 0761 end 0762 0763 if not @includeDirs.empty? 0764 file.printf("include_directories(") 0765 @includeDirs.each{ |dir| file.printf("%s ", dir) } 0766 file.printf(")\n\n") 0767 end 0768 0769 0770 if !@configHeaders.empty? 0771 @configHeaders.each{ |header| file.printf("configure_file(${CMAKE_CURRENT_SOURCE_DIR}/#{header}.cmake ${CMAKE_CURRENT_BINARY_DIR}/#{header})\n\n") } 0772 end 0773 0774 if not @subDirs.empty? 0775 @subDirs.each{ |dir| file.printf("add_subdirectory(%s)\n", dir)} 0776 file.printf("\n") 0777 end 0778 if not @skippedSubDirs.empty? 0779 @skippedSubDirs.each{ |dir| file.printf("message(STATUS \"${CMAKE_CURRENT_SOURCE_DIR}: skipped subdir %s\")\n", dir)} 0780 end 0781 0782 @targets.each do |buildTarget| 0783 file.printf("\n########### next target ###############\n\n") 0784 # printf("target name: %s\n", buildTarget.name) 0785 0786 if buildTarget.type==SharedLib 0787 srcsName=buildTarget.name+"_LIB_SRCS" 0788 elsif buildTarget.type==StaticLib 0789 srcsName=buildTarget.name+"_STAT_SRCS" 0790 #</porting info for libtool convenience libs> 0791 elsif buildTarget.type==Part 0792 srcsName=buildTarget.name+"_PART_SRCS" 0793 elsif buildTarget.type==KDEInit 0794 srcsName=buildTarget.name+"_KDEINIT_SRCS" 0795 else 0796 srcsName=buildTarget.name+"_SRCS" 0797 end 0798 uisName=buildTarget.name+"_UI" 0799 ui3sName=buildTarget.name+"_UI3" 0800 skelsName=buildTarget.name+"_DCOP_SKEL_SRCS" 0801 stubsName=buildTarget.name+"_DCOP_STUB_SRCS" 0802 kcfgsName=buildTarget.name+"_KCFG_SRCS" 0803 qrcsName=buildTarget.name+"_QRC" 0804 0805 0806 if buildTarget.type==StaticLib && $withConvLibs 0807 #<porting info for libtool convenience libs> 0808 $convFile.printf("# %s: %s\n\n", @amFile, buildTarget.name) 0809 0810 if buildTarget.sources.empty? 0811 $convFile.printf("set(%s\n", srcsName) 0812 buildTarget.sources.each { |currentFile| $convFile.printf(" ${CMAKE_SOURCE_DIR}/%s%s\n", @path, currentFile) } 0813 $convFile.printf(")\n\n", srcsName) 0814 end 0815 if not buildTarget.uis.empty? 0816 $convFile.printf("set(%s\n", uisName) 0817 buildTarget.uis.each{ |currentFile| $convFile.printf("%s\n", currentFile)} 0818 $convFile.printf(")\n\n") 0819 end 0820 if not buildTarget.ui3s.empty? 0821 $convFile.printf("set(%s\n", ui3sName) 0822 buildTarget.ui3s.each{ |currentFile| $convFile.printf("%s\n", currentFile)} 0823 $convFile.printf(")\n\n") 0824 end 0825 if not buildTarget.qrcs.empty? 0826 $convFile.printf("set(%s\n", qrcsName) 0827 buildTarget.qrcs.each{ |currentFile| $convFile.printf("%s\n", currentFile)} 0828 $convFile.printf(")\n\n") 0829 end 0830 if not buildTarget.skels.empty? 0831 $convFile.printf("set(%s\n", skelsName) 0832 buildTarget.skels.each{ |currentFile| $convFile.printf("%s\n", currentFile)} 0833 $convFile.printf(")\n\n") 0834 end 0835 if not buildTarget.stubs.empty? 0836 $convFile.printf("set(%s\n", stubsName) 0837 buildTarget.stubs.each{ |currentFile| $convFile.printf("%s\n", currentFile)} 0838 $convFile.printf(")\n\n") 0839 end 0840 if not buildTarget.kcfgs.empty? 0841 $convFile.printf("set(%s\n", kcfgsName) 0842 buildTarget.kcfgs.each{ |currentFile| $convFile.printf("%s\n", currentFile)} 0843 $convFile.printf(")\n\n") 0844 end 0845 next # do nothing else for static libs 0846 end 0847 0848 if buildTarget.sources.empty? 0849 buildTarget.sources.push("${CMAKE_CURRENT_BINARY_DIR}/dummy.cpp") 0850 end 0851 0852 if not buildTarget.sources.empty? 0853 file.printf("set(%s", srcsName) 0854 needToCreateDummyFile=false 0855 buildTarget.sources.each do |currentFile| 0856 # if there are more than 3 files, print each of them on its own line 0857 file.printf("\n ") if buildTarget.sources.size>3 0858 file.printf(" %s", currentFile) 0859 if currentFile=="dummy.cpp" 0860 0861 needToCreateDummyFile=true if not FileTest.exists?(@path+"/dummy.cpp") 0862 end 0863 end 0864 file.printf(")\n\n") 0865 0866 if needToCreateDummyFile 0867 # printf("creating dummy file in #{@path} ________\n") 0868 file.printf("file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/dummy.cpp \"//autogenerated file by cmake\\n\")\n") 0869 end 0870 end 0871 0872 if not buildTarget.uis.empty? 0873 file.printf("kde4_add_ui_files(%s", srcsName) 0874 buildTarget.uis.each do |currentFile| 0875 # if there are more than 3 files, print each of them on its own line 0876 file.printf("\n ") if buildTarget.uis.size>3 0877 file.printf(" %s", currentFile) 0878 end 0879 file.printf(")\n\n") 0880 end 0881 0882 if not buildTarget.ui3s.empty? 0883 file.printf("kde4_add_ui3_files(%s", srcsName) 0884 buildTarget.ui3s.each do |currentFile| 0885 # if there are more than 3 files, print each of them on its own line 0886 file.printf("\n ") if buildTarget.ui3s.size>3 0887 file.printf(" %s", currentFile) 0888 end 0889 file.printf(")\n\n") 0890 end 0891 0892 if not buildTarget.qrcs.empty? 0893 file.printf("qt4_add_resources(%s", srcsName) 0894 buildTarget.qrcs.each do |currentFile| 0895 # if there are more than 3 files, print each of them on its own line 0896 file.printf("\n ") if buildTarget.qrcs.size>3 0897 file.printf(" %s", currentFile) 0898 end 0899 file.printf(")\n\n") 0900 end 0901 0902 if not buildTarget.skels.empty? 0903 file.printf("message(STATUS \"DCOP has been removed in KDE 4; port code to D-Bus. kde4_add_dcop_skels macro does not exist anymore. We keep it just to remember to port to D-Bus.\")\n") 0904 file.printf("#kde4_add_dcop_skels(%s\n", srcsName) 0905 buildTarget.skels.each do |currentFile| 0906 # if there are more than 3 files, print each of them on its own line 0907 file.printf("\n# ") if buildTarget.skels.size>3 0908 file.printf("%s ", currentFile) 0909 end 0910 file.printf(")\n\n") 0911 end 0912 0913 if not buildTarget.stubs.empty? 0914 file.printf("message(STATUS \"DCOP has been removed in KDE 4; port code to D-Bus. kde4_add_dcop_skels macro does not exist anymore. We keep it just to remember to port to D-Bus.\")\n") 0915 file.printf("#kde4_add_dcop_stubs(%s\n", srcsName) 0916 buildTarget.stubs.each do |currentFile| 0917 # if there are more than 3 files, print each of them on its own line 0918 file.printf("\n# ") if buildTarget.stubs.size>3 0919 file.printf(" %s", currentFile) 0920 end 0921 file.printf(")\n\n") 0922 end 0923 0924 if not buildTarget.kcfgs.empty? 0925 file.printf("kde4_add_kcfg_files(%s", srcsName) 0926 buildTarget.kcfgs.each do |currentFile| 0927 # if there are more than 3 files, print each of them on its own line 0928 file.printf("\n ") if buildTarget.kcfgs.size>3 0929 file.printf(" %s", currentFile) 0930 end 0931 file.printf(")\n\n") 0932 end 0933 0934 if buildTarget.type==SharedLib 0935 file.printf("kde4_add_library(%s SHARED ${%s})\n\n", buildTarget.name, srcsName) 0936 file.printf("target_link_libraries(%s", buildTarget.name) 0937 buildTarget.libs.each { |currentLib| file.printf(" %s", currentLib) } 0938 file.printf(")\n\n") 0939 0940 file.printf("set_target_properties(%s PROPERTIES VERSION %d.%d.%d SOVERSION %d)\n", buildTarget.name, buildTarget.versionNumberMajor, buildTarget.versionNumberMinor, buildTarget.versionNumberPatch, buildTarget.versionNumberMajor) 0941 file.printf("install(TARGETS %s ${INSTALL_TARGETS_DEFAULT_ARGS})\n\n", buildTarget.name) 0942 0943 elsif buildTarget.type==StaticLib 0944 file.printf("kde4_add_library(%s STATIC ${%s})\n\n", buildTarget.name, srcsName) 0945 0946 elsif buildTarget.type==Part 0947 if buildTarget.stdPrefix 0948 file.printf("kde4_add_plugin(%s WITH_PREFIX ${%s})\n\n", buildTarget.name, srcsName) 0949 else 0950 file.printf("kde4_add_plugin(%s ${%s})\n\n", buildTarget.name, srcsName) 0951 end 0952 file.printf("target_link_libraries(%s", buildTarget.name) 0953 buildTarget.libs.each { |currentLib| file.printf(" %s", currentLib) } 0954 file.printf(")\n\n") 0955 0956 file.printf("install(TARGETS %s DESTINATION ${PLUGIN_INSTALL_DIR})\n\n", buildTarget.name) 0957 elsif buildTarget.type==KDEInit 0958 file.printf("kde4_add_kdeinit_executable(%s ${%s})\n\n", buildTarget.name, srcsName) 0959 0960 file.printf("target_link_libraries(kdeinit_%s", buildTarget.name) 0961 buildTarget.libs.each { |currentLib| file.printf(" %s", currentLib) } 0962 file.printf(")\n\n") 0963 0964 file.printf("install(TARGETS kdeinit_%s DESTINATION ${LIB_INSTALL_DIR})\n\n", buildTarget.name) 0965 0966 file.printf("target_link_libraries(%s kdeinit_%s)\n", buildTarget.name, buildTarget.name) 0967 0968 file.printf("install(TARGETS %s ${INSTALL_TARGETS_DEFAULT_ARGS})\n", buildTarget.name) 0969 0970 else #executable 0971 if buildTarget.test 0972 file.printf("if(KDE4_BUILD_TESTS)\n\n") 0973 end 0974 0975 file.printf("kde4_add_executable(%s ${%s})\n\n", buildTarget.name, srcsName) 0976 0977 file.printf("target_link_libraries(%s", buildTarget.name) 0978 buildTarget.libs.each { |currentLib| file.printf(" %s", currentLib) } 0979 file.printf(")\n\n") 0980 0981 if buildTarget.install 0982 file.printf("install(TARGETS %s ${INSTALL_TARGETS_DEFAULT_ARGS})\n\n", buildTarget.name) 0983 end 0984 0985 if buildTarget.test 0986 file.printf("endif(KDE4_BUILD_TESTS)\n") 0987 end 0988 0989 end 0990 0991 end 0992 0993 file.printf("\n########### install files ###############\n\n") 0994 0995 @installs.each do |key, install| 0996 file.printf("install(FILES %s DESTINATION %s)\n", install.files, install.location) 0997 end 0998 file.printf("\n") 0999 1000 if @installIcons 1001 file.printf("kde4_install_icons(${ICON_INSTALL_DIR})\n\n") 1002 end 1003 1004 if @installDoc 1005 file.printf("kde4_create_handbook(index.docbook INSTALL_DESTINATION ${HTML_INSTALL_DIR}/en)\n\n") 1006 end 1007 #if @createDoxygenDocs 1008 # file.printf("kde4_create_doxygen_docs( ") 1009 1010 # if @doxygenRecursive 1011 # file.printf("RECURSIVE ") 1012 # end 1013 1014 # if @doxygenInternalDocs 1015 # file.printf("INTERNAL_DOCS ") 1016 # end 1017 1018 # if not @doxygenReferences.empty? 1019 # file.printf("REFERENCES ") 1020 # @doxygenReferences.each { |ref| file.printf("%s ", ref) } 1021 # end 1022 # if not @doxygenExcludes.empty? 1023 # file.printf("EXCLUDE ") 1024 # @doxygenExcludes.each { |exclude| file.printf("%s ", exclude) } 1025 # end 1026 1027 # file.printf(" )\n\n") 1028 #end 1029 1030 file.printf("\n\n#original Makefile.am contents follow:\n\n") 1031 @lines.each{ |line| file.printf("#%s", line)} 1032 1033 end 1034 end 1035 1036 def convertAmFile(amFile) 1037 cmake=CMakeFile.new(amFile) 1038 if $buildType==BuildKDE4 1039 cmake.createKDE4ListsFile 1040 else 1041 cmake.createKDE3ListsFile 1042 end 1043 end 1044 1045 if (ARGV.length==1) 1046 if ARGV[0]=="--no-kde" 1047 $buildType=BuildNoKDE 1048 printf("*** no KDE\n") 1049 elsif ARGV[0]=="--kde3" 1050 $buildType=BuildKDE3 1051 printf("*** KDE3\n") 1052 elsif ARGV[0]=="--kde4" 1053 $buildType=BuildKDE4 1054 $withConvLibs=true 1055 $installDirs=InstallDirsKDE4 1056 $libMapping=LibMappingKDE4 1057 printf("*** KDE4\n") 1058 elsif ARGV[0]=="--help" 1059 printf("--help\t print this help text\n") 1060 printf("--version\t print version information\n") 1061 printf("--no-kde\t disable special KDE application support\n") 1062 printf("--kde3\t create cmake files from KDE 3 automake files\n") 1063 printf("--kde4\t create cmake files from KDE 4 automake/unsermake files\n") 1064 exit 1065 elsif ARGV[0]=="--version" 1066 printf("am2cmake (C) 2005-2008, Alexander Neundorf\n") 1067 printf("am2cmake (C) 2005-2008, Laurent Montel\n") 1068 printf("Version 0.4, June 9th, 2008\n"); 1069 exit 1070 else 1071 printf("Invalid argument, try --help\n") 1072 exit 1073 end 1074 end 1075 1076 if $withConvLibs 1077 $convFile=File.new("ConvenienceLibs.cmake", "w+") 1078 $convFile.printf("\n#former libtool convenience libraries:\n\n") 1079 end 1080 1081 1082 $configHeaders=Dir["**/*.h.in"] 1083 $configInIns=Dir["**/*.in.in"] 1084 1085 infoFile=File.new("AdditionalInfo.txt", "w+") 1086 infoFile.printf(".h.in-Files\n") 1087 $configHeaders.each{|inFile| infoFile.printf("%s\n", inFile)} 1088 infoFile.printf("\n.in.in-Files\n") 1089 $configInIns.each{|inFile| infoFile.printf("%s\n", inFile)} 1090 1091 Dir["**/Makefile.am"].each{ |currentFile| convertAmFile(currentFile)}