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)}