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