From b10520f487e7087d84182b56a5f318463ee61c00 Mon Sep 17 00:00:00 2001 From: Alexander Neundorf Date: Thu, 12 Jan 2006 21:42:58 +0000 Subject: move am2cmake from kde3/ here, since it seems it will work for kde4 too Alex svn path=/trunk/KDE/kdesdk/cmake/; revision=497482 --- am2cmake | 594 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ kde3/am2cmake | 594 ---------------------------------------------------------- 2 files changed, 594 insertions(+), 594 deletions(-) create mode 100755 am2cmake delete mode 100755 kde3/am2cmake diff --git a/am2cmake b/am2cmake new file mode 100755 index 00000000..d1154ae7 --- /dev/null +++ b/am2cmake @@ -0,0 +1,594 @@ +#!/usr/bin/env ruby + +$no_kde=false + +class InstallTarget + def initialize + @files="" + @location="" + end + def addFiles(files) + @files=@files+files + end + def setLocation(location) + @location=location + end + attr_reader :location, :files +end + +NoTarget = 0 +Executable = 1 +StaticLib = 2 +SharedLib = 3 +Part = 4 +KDEInit = 5 + +class BuildTarget + def initialize(name, type, withStdPrefix=true, install=true, test=false) + @name=name + @type=type + @sources=Array.new + @uis=Array.new + @skels=Array.new + @stubs=Array.new + @kcfgs=Array.new + @am=Array.new + @stdPrefix=withStdPrefix + @install=install + @test=test + @libs=Array.new + + @libs.push("${QT_AND_KDECORE_LIBS}") + end + + def addSourceFiles(files) + files.split.each do |currentSource| + if currentSource =~ /^\S+\.ui$/ + @uis.push(currentSource) + elsif currentSource =~ /^(\S+)\.skel$/ + @skels.push($1+".h") + elsif currentSource =~ /^(\S+)\.stub$/ + @stubs.push($1+".h") + elsif currentSource =~ /^(\S+)\.kcfgc$/ + @kcfgs.push(currentSource) + else + @sources.push(currentSource) + end + end + end + + def addLibs(libs) + lib="" + libs.split.each do |currentLib| + lib=case currentLib + when "$(LIB_KDEUI)" then "kdeui" +# when "${LIB_KDECORE}" then "${QT_AND_KDECORE_LIBS}" + when "$(LIB_KIO)" then "kio" + when "$(LIB_KDEPRINT)" then "kdeprint" + when "$(LIB_KPARTS)" then "kparts" + else + if currentLib =~ /^-l(\S+)$/ + $1 + else + "" + end + end + end + + if !lib.empty? + @libs.push(lib) +# printf("--- lib: #{lib}\n") + end + end + + + attr_reader :name, :type, :sources, :uis, :skels, :stdPrefix, :stubs, :kcfgs, :install, :test, :libs + +end + +class CMakeFile + def initialize(amFile) + printf("converting #{amFile}\n") + @amFile=amFile + amFile =~ /(.*)Makefile.am/ + @path=$1 + @listsFile=@path+"CMakeLists.txt" + @iconDir="hicolor" + @installIcons=false + + @targets=Array.new + @installs=Hash.new + + @includeDirs=Array.new + @subDirs=Array.new + @skippedSubDirs=Array.new + + parseFile + + if $no_kde==false + @includeDirs.push("${KDE3_INCLUDE_DIR}") + @includeDirs.push("${QT_INCLUDE_DIR}") + end + @includeDirs.push("${CMAKE_CURRENT_SOURCE_DIR}") + @includeDirs.push("${CMAKE_CURRENT_BINARY_DIR}") + end + + def parseFile + @lines=IO.readlines(@amFile) + cummLine="" + appendNextLine=false + for line in @lines do + if line.include?("#") + line=line[0, line.index("#")] + end + if line.length<2 + next + end + + appendNextLine=(line[line.length-2, 1]=='\\') + + if appendNextLine + cummLine+=" "+line[0, line.length-2] + else + cummLine+=" "+line.chomp #[0, line.length-1] + if not cummLine.empty? + evalLine(cummLine) + cummLine="" + end + end + end + end + + def findTarget(line) + type=SharedLib + if line =~ /^\s*lib(\S+)_la_\S+\s*=\s*\S+.*$/ + targetName=$1 +# type=SharedLib + elsif line =~ /^\s*(\S+)_la_\S+\s*=\s*\S+.*$/ + targetName=$1 +# type=Executable + elsif line =~ /^\s*(\S+)_\S+\s*=\s*\S+.*$/ + targetName=$1 +# type=Executable + end + @targets.each do |buildTarget| + amBuildTargetName=buildTarget.name.gsub(/\./, "_") + if (amBuildTargetName==targetName) + return buildTarget + end + end + + return BuildTarget.new("Dummy", NoTarget) + end + + def addTarget(line) + type=NoTarget + targets="" + installTarget=true + testTarget=false + + if line =~ /^\s*lib_LTLIBRARIES\s*=\s*(\S+.*)/ + targets=$1 + type=SharedLib +# printf("shared: %s\n", $1) + elsif line =~ /^\s*noinst_LTLIBRARIES\s*=\s*(\S+.*)/ + targets=$1 + type=StaticLib +# printf("static: %s\n", $1) + elsif line =~ /^\s*kde_module_LTLIBRARIES\s*=\s*(\S+.*)/ +# printf("part: %s\n", $1) + targets=$1 + type=Part + elsif line =~ /^\s*kde_style_LTLIBRARIES\s*=\s*(\S+.*)/ +# printf("style: %s\n", $1) + targets=$1 + type=Part + elsif line =~ /^\s*kde_widget_LTLIBRARIES\s*=\s*(\S+.*)/ +# printf("style: %s\n", $1) + targets=$1 + type=Part + elsif line =~ /^\s*kdeinit_LTLIBRARIES\s*=\s*(\S+.*)/ +# printf("kdeinitpart: %s\n", $1) + targets=$1 + type=KDEInit + elsif line =~ /^\s*bin_PROGRAMS\s*=\s*(\S+.*)$/ + targets=$1 +# printf("exec: %s\n", $1) + type=Executable + elsif line =~ /^\s*noinst_PROGRAMS\s*=\s*(\S+.*)$/ + targets=$1 + installTarget=false +# printf("exec: %s\n", $1) + type=Executable + elsif line =~ /^\s*check_PROGRAMS\s*=\s*(\S+.*)$/ + targets=$1 + installTarget=false + testTarget=true + +# printf("exec: %s\n", $1) + type=Executable + elsif line =~ /^\s*EXTRA_PROGRAMS\s*=\s*(\S+.*)$/ + targets=$1 + installTarget=false + testTarget=true +# printf("exec: %s\n", $1) + type=Executable + else + return false + end + + if type==Executable + targets.split.each{ |current| @targets.push(BuildTarget.new(current, type, true, installTarget, testTarget)) } + else + targets.split.each do |current| + if current =~ /lib(\S+)\.la/ +# printf("adding target with \"lib\": -%s-\n", $1) + @targets.push(BuildTarget.new($1, type)) + else + if current =~ /\s*(\S+)\.la/ +# printf("adding target without \"lib\": -%s-\n", $1) + @targets.push(BuildTarget.new($1, type, false)) + end + end + end + end + return true + end + + def addSourcesToTarget(line) +# printf("sources: %s\n", line) + buildTarget=findTarget(line) + if buildTarget.type==NoTarget + printf("PROBLEM: target not found: %s\n", line) + return + end + + line =~ /^\s*(lib)?\S+(_la)?_SOURCES\s*=\s*(\S+.*)$/ + buildTarget.addSourceFiles($3) + end + + def addIncludeDirectories(includeDirs) + includeDirs.split.each do |dir| + if dir =~ /^\s*-I\$\(top_srcdir\)(\S+)/ + @includeDirs.push("${CMAKE_SOURCE_DIR}"+$1) + end + end + end + + def addInstallFiles(key, files) + if @installs.has_key?(key) + inst=@installs[key] + else + inst=InstallTarget.new + end + inst.addFiles(files) + case key + when "kde_services" then inst.setLocation("/share/services") + when "kde_kcfg" then inst.setLocation("/share/config.kcfg") + when "xdg_apps" then inst.setLocation("/share/applications/kde") + end + + @installs[key]=inst + end + + def addInstallLocation(key, location) +# printf("adding loc: %s \n", location) + if @installs.has_key?(key) + inst=@installs[key] + else + inst=InstallTarget.new + end + + if location =~ /\$\((\S+)\)(\/?\S*)/ + baseDir=$1 + subDir=$2 +# printf("base: %s sub: %s\n", baseDir, subDir) + if baseDir=="kde_servicesdir" + inst.setLocation("/share/services"+subDir) + @installs[key]=inst + elsif baseDir=="kde_servicetypesdir" + inst.setLocation("/share/servicetypes"+subDir) + @installs[key]=inst + elsif baseDir=="kde_mimedir" + inst.setLocation("/share/mimelink"+subDir) + @installs[key]=inst + elsif baseDir=="kde_htmldir" + inst.setLocation("/share/doc/HTML"+subDir) + @installs[key]=inst + elsif baseDir=="kde_icondir" + inst.setLocation("/share/icons"+subDir) + @installs[key]=inst + @iconDir=key + elsif baseDir=="kde_datadir" + inst.setLocation("/share/apps"+subDir) + @installs[key]=inst + elsif baseDir=="datadir" + inst.setLocation("/share"+subDir) + @installs[key]=inst + end + end + end + + def evalLine(line) + if line =~ /^\s*METASOURCES\s*=\s*AUTO\s*$/ + @automoc=true + return + end + + if addTarget(line) + return + end + + if line =~ /^\s*KDE_ICON\s*=/ + @installIcons=true + return + end + + if (line =~ /^\s*\S+_SOURCES\s*=/) + addSourcesToTarget(line) + return + end + + if (line =~ /^\s*(\S+)_LDFLAGS\s*=\s*(\S+.*)$/) || + (line =~ /^\s*(\S+)_LIBADD\s*=\s*(\S+.*)$/) || + (line =~ /^\s*(\S+)_LDADD\s*=\s*(\S+.*)$/) + + if $1 != "AM" + buildTarget=findTarget(line) + if buildTarget.type==NoTarget + printf("PROBLEM: target %s not found: %s\n", $1, line) + return + end + +# printf("target: #{buildTarget.name} lib: #{$2} line: #{line} d1: #{$1}\n") + buildTarget.addLibs($2) + end + return + end + + if (line =~ /^\s*INCLUDES\s*=\s*(\S+.*)$/) + addIncludeDirectories($1) + return + end + + if line =~ /^\s*(\S+)dir\s*=\s*(\S+.*)$/ + addInstallLocation($1, $2) + return + end + if line =~ /^\s*(\S+)_DATA\s*=\s*(\S+.*)$/ + addInstallFiles($1, $2) + return + end + + if line =~ /^\s*SUBDIRS\s*=\s*(\S+.*)$/ + ($1).split.each do |dir| + if dir =~ /\$\(.+\)/ + @skippedSubDirs.push(dir) + else + @subDirs.push(dir) if dir!="." + end + end + end + + end + + def createListsFile +# prevLines=Array.new +# if FileTest.exists?(@listsFile) +## printf("file exists: %s\n", @listsFile) +# prevLines=File.new(@listsFile, "r").readlines +# end + + file=File.new(@listsFile, "w+"); + if @amFile=="Makefile.am" && $no_kde==false # the toplevel Makefile.am + file.printf("FIND_PACKAGE(KDE3 REQUIRED)\n\n") + file.printf("SET(CMAKE_VERBOSE_MAKEFILE ON)\n\n") + file.printf("ADD_DEFINITIONS(${QT_DEFINITIONS} ${KDE3_DEFINITIONS})\n\n") + file.printf("LINK_DIRECTORIES(${KDE3_LIB_DIR})\n\n") + + end + + if not @subDirs.empty? + @subDirs.each{ |dir| file.printf("ADD_SUBDIRECTORY( %s ) \n", dir)} + file.printf("\n") + end + if not @skippedSubDirs.empty? + @skippedSubDirs.each{ |dir| file.printf("MESSAGE(STATUS \"${CMAKE_CURRENT_SOURCE_DIR}: skipped subdir %s\")\n", dir)} + end + + + if not @includeDirs.empty? + file.printf("INCLUDE_DIRECTORIES( ") + @includeDirs.each{ |dir| file.printf("%s ", dir) } + file.printf(" )\n\n") + end + @targets.each do |buildTarget| + file.printf("\n########### next target ###############\n\n") +# printf("target name: %s\n", buildTarget.name) + + if buildTarget.type==SharedLib + srcsName=buildTarget.name+"_LIB_SRCS" + elsif buildTarget.type==StaticLib + srcsName=buildTarget.name+"_STAT_SRCS" + elsif buildTarget.type==Part + srcsName=buildTarget.name+"_PART_SRCS" + elsif buildTarget.type==KDEInit + srcsName=buildTarget.name+"_KDEINIT_SRCS" + else + srcsName=buildTarget.name+"_SRCS" + end + uisName=buildTarget.name+"_UI" + skelsName=buildTarget.name+"_DCOP_SKEL_SRCS" + stubsName=buildTarget.name+"_DCOP_STUB_SRCS" + kcfgsName=buildTarget.name+"_KCFG_SRCS" + + if buildTarget.sources.empty? + buildTarget.sources.push("dummy.cpp") + end + + if not buildTarget.sources.empty? + file.printf("SET(%s\n", srcsName) + needToCreateDummyFile=false + buildTarget.sources.each do |currentFile| + file.printf("%s\n", currentFile) + if currentFile=="dummy.cpp" + + needToCreateDummyFile=true if not FileTest.exists?(@path+"/dummy.cpp") + end + end + file.printf(")\n\n") + file.printf("KDE3_AUTOMOC(${%s})\n\n", srcsName) + + if needToCreateDummyFile +# printf("creating dummy file in #{@path} ________\n") + file.printf("FILE(WRITE dummy.cpp \"//autogenerated file by cmake\\n\")\n") + end + end + + if not buildTarget.uis.empty? + file.printf("SET( %s\n", uisName) + buildTarget.uis.each{ |currentFile| file.printf("%s\n", currentFile)} + file.printf(")\n\n") + file.printf("KDE3_ADD_UI_FILES(%s ${%s} )\n\n", srcsName, uisName) + end + + if not buildTarget.skels.empty? + file.printf("SET( %s\n", skelsName) + buildTarget.skels.each{ |currentFile| file.printf("%s\n", currentFile)} + file.printf(")\n\n") + + file.printf("KDE3_ADD_DCOP_SKELS(%s ${%s})\n\n", srcsName, skelsName) + end + + if not buildTarget.stubs.empty? + file.printf("SET( %s\n", stubsName) + buildTarget.stubs.each{ |currentFile| file.printf("%s\n", currentFile)} + file.printf(")\n\n") + + file.printf("KDE3_ADD_DCOP_STUBS(%s ${%s})\n\n", srcsName, stubsName) + end + + if not buildTarget.kcfgs.empty? + file.printf("SET( %s\n", kcfgsName) + buildTarget.kcfgs.each{ |currentFile| file.printf("%s\n", currentFile)} + file.printf(")\n\n") + + file.printf("KDE3_ADD_KCFG_FILES(%s ${%s})\n\n", srcsName, kcfgsName) + end + + if buildTarget.type==SharedLib + file.printf("ADD_LIBRARY(%s SHARED ${%s})\n\n", buildTarget.name, srcsName) + file.printf("TARGET_LINK_LIBRARIES(%s ", buildTarget.name) + buildTarget.libs.each { |currentLib| file.printf(" %s", currentLib) } + file.printf(" )\n\n") + + file.printf("SET_TARGET_PROPERTIES(%s PROPERTIES VERSION 4.2.0 SOVERSION 4 )\n", buildTarget.name) + file.printf("INSTALL_TARGETS(/lib %s )\n\n", buildTarget.name) + elsif buildTarget.type==StaticLib + file.printf("ADD_LIBRARY(%s STATIC ${%s})\n\n", buildTarget.name, srcsName) + elsif buildTarget.type==Part + if buildTarget.stdPrefix + file.printf("KDE3_ADD_KPART(%s WITH_PREFIX ${%s})\n\n", buildTarget.name, srcsName) + else + file.printf("KDE3_ADD_KPART(%s ${%s})\n\n", buildTarget.name, srcsName) + end + file.printf("TARGET_LINK_LIBRARIES(%s ", buildTarget.name) + buildTarget.libs.each { |currentLib| file.printf(" %s", currentLib) } + file.printf(" )\n\n") + + file.printf("INSTALL_TARGETS(/lib/kde3 %s )\n\n", buildTarget.name) + elsif buildTarget.type==KDEInit + file.printf("KDE3_ADD_KLM( %s ${%s})\n\n", buildTarget.name, srcsName) + + file.printf("TARGET_LINK_LIBRARIES(kdeinit_%s ", buildTarget.name) + buildTarget.libs.each { |currentLib| file.printf(" %s", currentLib) } + file.printf(" )\n\n") + + file.printf("INSTALL_TARGETS(/lib kdeinit_%s )\n\n", buildTarget.name) + + file.printf("TARGET_LINK_LIBRARIES( %s kdeinit_%s )\n", buildTarget.name, buildTarget.name) + + file.printf("INSTALL_TARGETS(/bin %s )\n", buildTarget.name) + + else #executable + if $no_kde + + file.printf("ADD_EXECUTABLE(%s ${%s})\n\n", buildTarget.name, srcsName) + + file.printf("TARGET_LINK_LIBRARIES(%s ", buildTarget.name) + buildTarget.libs.each { |currentLib| file.printf(" %s", currentLib) } + file.printf(" )\n\n") + + if buildTarget.install + file.printf("INSTALL_TARGETS(/bin %s )\n\n", buildTarget.name) + end + + else + if buildTarget.test + file.printf("IF(KDE3_BUILD_TESTS)\n") + end + + file.printf("KDE3_ADD_EXECUTABLE(%s ${%s})\n\n", buildTarget.name, srcsName) + + file.printf("TARGET_LINK_LIBRARIES(%s ", buildTarget.name) + buildTarget.libs.each { |currentLib| file.printf(" %s", currentLib) } + file.printf(" )\n\n") + + if buildTarget.install + file.printf("INSTALL_TARGETS(/bin %s )\n\n", buildTarget.name) + end + + if buildTarget.test + file.printf("ENDIF(KDE3_BUILD_TESTS)\n") + end + + end + + end + + end + + file.printf("\n########### install files ###############\n\n") + + @installs.each do |key, install| + file.printf("INSTALL_FILES( %s FILES %s )\n", install.location, install.files) + end + file.printf("\n") + + if @installIcons + file.printf("KDE3_INSTALL_ICONS( %s )\n\n",@iconDir ) + end + + file.printf("KDE3_PLACEHOLDER()\n\n") + + file.printf("\n\n#original Makefile.am contents follow:\n\n") + @lines.each{ |line| file.printf("#%s", line)} +# if !prevLines.empty? +# file.printf("\n#######################\n#previous CMakeLists.txt contents follow:\n\n") +# prevLines.each{ |line| file.printf("#%s", line)} +# end + end +end + +def convertAmFile(amFile) + cmake=CMakeFile.new(amFile) + cmake.createListsFile +end + +if (ARGV.length==1) + if ARGV[0]=="--no-kde" + $no_kde=true + elsif ARGV[0]=="--help" + printf("--help\t print this help text\n") + printf("--version\t print version information\n") + printf("--no-kde\t disable special KDE application support\n") + elsif ARGV[0]=="--version" + printf("am2cmake (C) 2005, Alexander Neundorf\n") + printf("Version 0.1, December 11th, 2005\n"); + else + printf("Invalid argument, try --help\n") + end +end +Dir["**/Makefile.am"].each{ |currentFile| convertAmFile(currentFile)} + + diff --git a/kde3/am2cmake b/kde3/am2cmake deleted file mode 100755 index d1154ae7..00000000 --- a/kde3/am2cmake +++ /dev/null @@ -1,594 +0,0 @@ -#!/usr/bin/env ruby - -$no_kde=false - -class InstallTarget - def initialize - @files="" - @location="" - end - def addFiles(files) - @files=@files+files - end - def setLocation(location) - @location=location - end - attr_reader :location, :files -end - -NoTarget = 0 -Executable = 1 -StaticLib = 2 -SharedLib = 3 -Part = 4 -KDEInit = 5 - -class BuildTarget - def initialize(name, type, withStdPrefix=true, install=true, test=false) - @name=name - @type=type - @sources=Array.new - @uis=Array.new - @skels=Array.new - @stubs=Array.new - @kcfgs=Array.new - @am=Array.new - @stdPrefix=withStdPrefix - @install=install - @test=test - @libs=Array.new - - @libs.push("${QT_AND_KDECORE_LIBS}") - end - - def addSourceFiles(files) - files.split.each do |currentSource| - if currentSource =~ /^\S+\.ui$/ - @uis.push(currentSource) - elsif currentSource =~ /^(\S+)\.skel$/ - @skels.push($1+".h") - elsif currentSource =~ /^(\S+)\.stub$/ - @stubs.push($1+".h") - elsif currentSource =~ /^(\S+)\.kcfgc$/ - @kcfgs.push(currentSource) - else - @sources.push(currentSource) - end - end - end - - def addLibs(libs) - lib="" - libs.split.each do |currentLib| - lib=case currentLib - when "$(LIB_KDEUI)" then "kdeui" -# when "${LIB_KDECORE}" then "${QT_AND_KDECORE_LIBS}" - when "$(LIB_KIO)" then "kio" - when "$(LIB_KDEPRINT)" then "kdeprint" - when "$(LIB_KPARTS)" then "kparts" - else - if currentLib =~ /^-l(\S+)$/ - $1 - else - "" - end - end - end - - if !lib.empty? - @libs.push(lib) -# printf("--- lib: #{lib}\n") - end - end - - - attr_reader :name, :type, :sources, :uis, :skels, :stdPrefix, :stubs, :kcfgs, :install, :test, :libs - -end - -class CMakeFile - def initialize(amFile) - printf("converting #{amFile}\n") - @amFile=amFile - amFile =~ /(.*)Makefile.am/ - @path=$1 - @listsFile=@path+"CMakeLists.txt" - @iconDir="hicolor" - @installIcons=false - - @targets=Array.new - @installs=Hash.new - - @includeDirs=Array.new - @subDirs=Array.new - @skippedSubDirs=Array.new - - parseFile - - if $no_kde==false - @includeDirs.push("${KDE3_INCLUDE_DIR}") - @includeDirs.push("${QT_INCLUDE_DIR}") - end - @includeDirs.push("${CMAKE_CURRENT_SOURCE_DIR}") - @includeDirs.push("${CMAKE_CURRENT_BINARY_DIR}") - end - - def parseFile - @lines=IO.readlines(@amFile) - cummLine="" - appendNextLine=false - for line in @lines do - if line.include?("#") - line=line[0, line.index("#")] - end - if line.length<2 - next - end - - appendNextLine=(line[line.length-2, 1]=='\\') - - if appendNextLine - cummLine+=" "+line[0, line.length-2] - else - cummLine+=" "+line.chomp #[0, line.length-1] - if not cummLine.empty? - evalLine(cummLine) - cummLine="" - end - end - end - end - - def findTarget(line) - type=SharedLib - if line =~ /^\s*lib(\S+)_la_\S+\s*=\s*\S+.*$/ - targetName=$1 -# type=SharedLib - elsif line =~ /^\s*(\S+)_la_\S+\s*=\s*\S+.*$/ - targetName=$1 -# type=Executable - elsif line =~ /^\s*(\S+)_\S+\s*=\s*\S+.*$/ - targetName=$1 -# type=Executable - end - @targets.each do |buildTarget| - amBuildTargetName=buildTarget.name.gsub(/\./, "_") - if (amBuildTargetName==targetName) - return buildTarget - end - end - - return BuildTarget.new("Dummy", NoTarget) - end - - def addTarget(line) - type=NoTarget - targets="" - installTarget=true - testTarget=false - - if line =~ /^\s*lib_LTLIBRARIES\s*=\s*(\S+.*)/ - targets=$1 - type=SharedLib -# printf("shared: %s\n", $1) - elsif line =~ /^\s*noinst_LTLIBRARIES\s*=\s*(\S+.*)/ - targets=$1 - type=StaticLib -# printf("static: %s\n", $1) - elsif line =~ /^\s*kde_module_LTLIBRARIES\s*=\s*(\S+.*)/ -# printf("part: %s\n", $1) - targets=$1 - type=Part - elsif line =~ /^\s*kde_style_LTLIBRARIES\s*=\s*(\S+.*)/ -# printf("style: %s\n", $1) - targets=$1 - type=Part - elsif line =~ /^\s*kde_widget_LTLIBRARIES\s*=\s*(\S+.*)/ -# printf("style: %s\n", $1) - targets=$1 - type=Part - elsif line =~ /^\s*kdeinit_LTLIBRARIES\s*=\s*(\S+.*)/ -# printf("kdeinitpart: %s\n", $1) - targets=$1 - type=KDEInit - elsif line =~ /^\s*bin_PROGRAMS\s*=\s*(\S+.*)$/ - targets=$1 -# printf("exec: %s\n", $1) - type=Executable - elsif line =~ /^\s*noinst_PROGRAMS\s*=\s*(\S+.*)$/ - targets=$1 - installTarget=false -# printf("exec: %s\n", $1) - type=Executable - elsif line =~ /^\s*check_PROGRAMS\s*=\s*(\S+.*)$/ - targets=$1 - installTarget=false - testTarget=true - -# printf("exec: %s\n", $1) - type=Executable - elsif line =~ /^\s*EXTRA_PROGRAMS\s*=\s*(\S+.*)$/ - targets=$1 - installTarget=false - testTarget=true -# printf("exec: %s\n", $1) - type=Executable - else - return false - end - - if type==Executable - targets.split.each{ |current| @targets.push(BuildTarget.new(current, type, true, installTarget, testTarget)) } - else - targets.split.each do |current| - if current =~ /lib(\S+)\.la/ -# printf("adding target with \"lib\": -%s-\n", $1) - @targets.push(BuildTarget.new($1, type)) - else - if current =~ /\s*(\S+)\.la/ -# printf("adding target without \"lib\": -%s-\n", $1) - @targets.push(BuildTarget.new($1, type, false)) - end - end - end - end - return true - end - - def addSourcesToTarget(line) -# printf("sources: %s\n", line) - buildTarget=findTarget(line) - if buildTarget.type==NoTarget - printf("PROBLEM: target not found: %s\n", line) - return - end - - line =~ /^\s*(lib)?\S+(_la)?_SOURCES\s*=\s*(\S+.*)$/ - buildTarget.addSourceFiles($3) - end - - def addIncludeDirectories(includeDirs) - includeDirs.split.each do |dir| - if dir =~ /^\s*-I\$\(top_srcdir\)(\S+)/ - @includeDirs.push("${CMAKE_SOURCE_DIR}"+$1) - end - end - end - - def addInstallFiles(key, files) - if @installs.has_key?(key) - inst=@installs[key] - else - inst=InstallTarget.new - end - inst.addFiles(files) - case key - when "kde_services" then inst.setLocation("/share/services") - when "kde_kcfg" then inst.setLocation("/share/config.kcfg") - when "xdg_apps" then inst.setLocation("/share/applications/kde") - end - - @installs[key]=inst - end - - def addInstallLocation(key, location) -# printf("adding loc: %s \n", location) - if @installs.has_key?(key) - inst=@installs[key] - else - inst=InstallTarget.new - end - - if location =~ /\$\((\S+)\)(\/?\S*)/ - baseDir=$1 - subDir=$2 -# printf("base: %s sub: %s\n", baseDir, subDir) - if baseDir=="kde_servicesdir" - inst.setLocation("/share/services"+subDir) - @installs[key]=inst - elsif baseDir=="kde_servicetypesdir" - inst.setLocation("/share/servicetypes"+subDir) - @installs[key]=inst - elsif baseDir=="kde_mimedir" - inst.setLocation("/share/mimelink"+subDir) - @installs[key]=inst - elsif baseDir=="kde_htmldir" - inst.setLocation("/share/doc/HTML"+subDir) - @installs[key]=inst - elsif baseDir=="kde_icondir" - inst.setLocation("/share/icons"+subDir) - @installs[key]=inst - @iconDir=key - elsif baseDir=="kde_datadir" - inst.setLocation("/share/apps"+subDir) - @installs[key]=inst - elsif baseDir=="datadir" - inst.setLocation("/share"+subDir) - @installs[key]=inst - end - end - end - - def evalLine(line) - if line =~ /^\s*METASOURCES\s*=\s*AUTO\s*$/ - @automoc=true - return - end - - if addTarget(line) - return - end - - if line =~ /^\s*KDE_ICON\s*=/ - @installIcons=true - return - end - - if (line =~ /^\s*\S+_SOURCES\s*=/) - addSourcesToTarget(line) - return - end - - if (line =~ /^\s*(\S+)_LDFLAGS\s*=\s*(\S+.*)$/) || - (line =~ /^\s*(\S+)_LIBADD\s*=\s*(\S+.*)$/) || - (line =~ /^\s*(\S+)_LDADD\s*=\s*(\S+.*)$/) - - if $1 != "AM" - buildTarget=findTarget(line) - if buildTarget.type==NoTarget - printf("PROBLEM: target %s not found: %s\n", $1, line) - return - end - -# printf("target: #{buildTarget.name} lib: #{$2} line: #{line} d1: #{$1}\n") - buildTarget.addLibs($2) - end - return - end - - if (line =~ /^\s*INCLUDES\s*=\s*(\S+.*)$/) - addIncludeDirectories($1) - return - end - - if line =~ /^\s*(\S+)dir\s*=\s*(\S+.*)$/ - addInstallLocation($1, $2) - return - end - if line =~ /^\s*(\S+)_DATA\s*=\s*(\S+.*)$/ - addInstallFiles($1, $2) - return - end - - if line =~ /^\s*SUBDIRS\s*=\s*(\S+.*)$/ - ($1).split.each do |dir| - if dir =~ /\$\(.+\)/ - @skippedSubDirs.push(dir) - else - @subDirs.push(dir) if dir!="." - end - end - end - - end - - def createListsFile -# prevLines=Array.new -# if FileTest.exists?(@listsFile) -## printf("file exists: %s\n", @listsFile) -# prevLines=File.new(@listsFile, "r").readlines -# end - - file=File.new(@listsFile, "w+"); - if @amFile=="Makefile.am" && $no_kde==false # the toplevel Makefile.am - file.printf("FIND_PACKAGE(KDE3 REQUIRED)\n\n") - file.printf("SET(CMAKE_VERBOSE_MAKEFILE ON)\n\n") - file.printf("ADD_DEFINITIONS(${QT_DEFINITIONS} ${KDE3_DEFINITIONS})\n\n") - file.printf("LINK_DIRECTORIES(${KDE3_LIB_DIR})\n\n") - - end - - if not @subDirs.empty? - @subDirs.each{ |dir| file.printf("ADD_SUBDIRECTORY( %s ) \n", dir)} - file.printf("\n") - end - if not @skippedSubDirs.empty? - @skippedSubDirs.each{ |dir| file.printf("MESSAGE(STATUS \"${CMAKE_CURRENT_SOURCE_DIR}: skipped subdir %s\")\n", dir)} - end - - - if not @includeDirs.empty? - file.printf("INCLUDE_DIRECTORIES( ") - @includeDirs.each{ |dir| file.printf("%s ", dir) } - file.printf(" )\n\n") - end - @targets.each do |buildTarget| - file.printf("\n########### next target ###############\n\n") -# printf("target name: %s\n", buildTarget.name) - - if buildTarget.type==SharedLib - srcsName=buildTarget.name+"_LIB_SRCS" - elsif buildTarget.type==StaticLib - srcsName=buildTarget.name+"_STAT_SRCS" - elsif buildTarget.type==Part - srcsName=buildTarget.name+"_PART_SRCS" - elsif buildTarget.type==KDEInit - srcsName=buildTarget.name+"_KDEINIT_SRCS" - else - srcsName=buildTarget.name+"_SRCS" - end - uisName=buildTarget.name+"_UI" - skelsName=buildTarget.name+"_DCOP_SKEL_SRCS" - stubsName=buildTarget.name+"_DCOP_STUB_SRCS" - kcfgsName=buildTarget.name+"_KCFG_SRCS" - - if buildTarget.sources.empty? - buildTarget.sources.push("dummy.cpp") - end - - if not buildTarget.sources.empty? - file.printf("SET(%s\n", srcsName) - needToCreateDummyFile=false - buildTarget.sources.each do |currentFile| - file.printf("%s\n", currentFile) - if currentFile=="dummy.cpp" - - needToCreateDummyFile=true if not FileTest.exists?(@path+"/dummy.cpp") - end - end - file.printf(")\n\n") - file.printf("KDE3_AUTOMOC(${%s})\n\n", srcsName) - - if needToCreateDummyFile -# printf("creating dummy file in #{@path} ________\n") - file.printf("FILE(WRITE dummy.cpp \"//autogenerated file by cmake\\n\")\n") - end - end - - if not buildTarget.uis.empty? - file.printf("SET( %s\n", uisName) - buildTarget.uis.each{ |currentFile| file.printf("%s\n", currentFile)} - file.printf(")\n\n") - file.printf("KDE3_ADD_UI_FILES(%s ${%s} )\n\n", srcsName, uisName) - end - - if not buildTarget.skels.empty? - file.printf("SET( %s\n", skelsName) - buildTarget.skels.each{ |currentFile| file.printf("%s\n", currentFile)} - file.printf(")\n\n") - - file.printf("KDE3_ADD_DCOP_SKELS(%s ${%s})\n\n", srcsName, skelsName) - end - - if not buildTarget.stubs.empty? - file.printf("SET( %s\n", stubsName) - buildTarget.stubs.each{ |currentFile| file.printf("%s\n", currentFile)} - file.printf(")\n\n") - - file.printf("KDE3_ADD_DCOP_STUBS(%s ${%s})\n\n", srcsName, stubsName) - end - - if not buildTarget.kcfgs.empty? - file.printf("SET( %s\n", kcfgsName) - buildTarget.kcfgs.each{ |currentFile| file.printf("%s\n", currentFile)} - file.printf(")\n\n") - - file.printf("KDE3_ADD_KCFG_FILES(%s ${%s})\n\n", srcsName, kcfgsName) - end - - if buildTarget.type==SharedLib - file.printf("ADD_LIBRARY(%s SHARED ${%s})\n\n", buildTarget.name, srcsName) - file.printf("TARGET_LINK_LIBRARIES(%s ", buildTarget.name) - buildTarget.libs.each { |currentLib| file.printf(" %s", currentLib) } - file.printf(" )\n\n") - - file.printf("SET_TARGET_PROPERTIES(%s PROPERTIES VERSION 4.2.0 SOVERSION 4 )\n", buildTarget.name) - file.printf("INSTALL_TARGETS(/lib %s )\n\n", buildTarget.name) - elsif buildTarget.type==StaticLib - file.printf("ADD_LIBRARY(%s STATIC ${%s})\n\n", buildTarget.name, srcsName) - elsif buildTarget.type==Part - if buildTarget.stdPrefix - file.printf("KDE3_ADD_KPART(%s WITH_PREFIX ${%s})\n\n", buildTarget.name, srcsName) - else - file.printf("KDE3_ADD_KPART(%s ${%s})\n\n", buildTarget.name, srcsName) - end - file.printf("TARGET_LINK_LIBRARIES(%s ", buildTarget.name) - buildTarget.libs.each { |currentLib| file.printf(" %s", currentLib) } - file.printf(" )\n\n") - - file.printf("INSTALL_TARGETS(/lib/kde3 %s )\n\n", buildTarget.name) - elsif buildTarget.type==KDEInit - file.printf("KDE3_ADD_KLM( %s ${%s})\n\n", buildTarget.name, srcsName) - - file.printf("TARGET_LINK_LIBRARIES(kdeinit_%s ", buildTarget.name) - buildTarget.libs.each { |currentLib| file.printf(" %s", currentLib) } - file.printf(" )\n\n") - - file.printf("INSTALL_TARGETS(/lib kdeinit_%s )\n\n", buildTarget.name) - - file.printf("TARGET_LINK_LIBRARIES( %s kdeinit_%s )\n", buildTarget.name, buildTarget.name) - - file.printf("INSTALL_TARGETS(/bin %s )\n", buildTarget.name) - - else #executable - if $no_kde - - file.printf("ADD_EXECUTABLE(%s ${%s})\n\n", buildTarget.name, srcsName) - - file.printf("TARGET_LINK_LIBRARIES(%s ", buildTarget.name) - buildTarget.libs.each { |currentLib| file.printf(" %s", currentLib) } - file.printf(" )\n\n") - - if buildTarget.install - file.printf("INSTALL_TARGETS(/bin %s )\n\n", buildTarget.name) - end - - else - if buildTarget.test - file.printf("IF(KDE3_BUILD_TESTS)\n") - end - - file.printf("KDE3_ADD_EXECUTABLE(%s ${%s})\n\n", buildTarget.name, srcsName) - - file.printf("TARGET_LINK_LIBRARIES(%s ", buildTarget.name) - buildTarget.libs.each { |currentLib| file.printf(" %s", currentLib) } - file.printf(" )\n\n") - - if buildTarget.install - file.printf("INSTALL_TARGETS(/bin %s )\n\n", buildTarget.name) - end - - if buildTarget.test - file.printf("ENDIF(KDE3_BUILD_TESTS)\n") - end - - end - - end - - end - - file.printf("\n########### install files ###############\n\n") - - @installs.each do |key, install| - file.printf("INSTALL_FILES( %s FILES %s )\n", install.location, install.files) - end - file.printf("\n") - - if @installIcons - file.printf("KDE3_INSTALL_ICONS( %s )\n\n",@iconDir ) - end - - file.printf("KDE3_PLACEHOLDER()\n\n") - - file.printf("\n\n#original Makefile.am contents follow:\n\n") - @lines.each{ |line| file.printf("#%s", line)} -# if !prevLines.empty? -# file.printf("\n#######################\n#previous CMakeLists.txt contents follow:\n\n") -# prevLines.each{ |line| file.printf("#%s", line)} -# end - end -end - -def convertAmFile(amFile) - cmake=CMakeFile.new(amFile) - cmake.createListsFile -end - -if (ARGV.length==1) - if ARGV[0]=="--no-kde" - $no_kde=true - elsif ARGV[0]=="--help" - printf("--help\t print this help text\n") - printf("--version\t print version information\n") - printf("--no-kde\t disable special KDE application support\n") - elsif ARGV[0]=="--version" - printf("am2cmake (C) 2005, Alexander Neundorf\n") - printf("Version 0.1, December 11th, 2005\n"); - else - printf("Invalid argument, try --help\n") - end -end -Dir["**/Makefile.am"].each{ |currentFile| convertAmFile(currentFile)} - - -- cgit v1.2.1