forked from rpavlik/chromium
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgrabcmake.py
95 lines (80 loc) · 3.39 KB
/
grabcmake.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
import subprocess
import os
pathToGrabber = os.path.abspath("grab.mk")
def getVariable(var):
proc = subprocess.Popen(["make", "--silent", "-f", pathToGrabber, "GETVAR", "VARNAME=%s" % var], stdout = subprocess.PIPE)
return proc.communicate()[0].strip()
def getVariableList(var):
return [item.strip() for item in getVariable(var).split()]
#print getTargetOutput("LIBRARY")
#print getTargetOutput("FILES")
#print getTargetOutput("PROGRAM")
def getSources():
return ["%s.c" % fn.strip() for fn in getVariableList("FILES")]
def getTarget():
ret = {}
prog = getVariable("PROGRAM")
lib = getVariable("LIBRARY")
if len(prog) > 0:
return prog, "add_executable", ""
elif len(lib) > 0:
if getVariable("SHARED") == "1":
return lib, "add_library", "SHARED"
else:
return lib, "add_library", "STATIC"
else:
return None, "", ""
def doDirectory(sourcedir):
print sourcedir
os.chdir(sourcedir)
with open("CMakeLists.txt","w") as cmake:
cmake.write("include_directories(.)\n")
target, targetcommand, targettype = getTarget()
if target is not None:
generated = getVariableList("PRECOMP")
if len(generated) > 0:
cmake.write("set(GENERATED\n")
cmake.writelines(["\t%s\n" % fn for fn in generated])
cmake.write(")\n")
cmake.write("# TODO: generate these files!\n\n\n")
sources = getSources()
cmake.write("set(SOURCES\n")
cmake.writelines(["\t%s\n" % fn for fn in sources if fn not in generated])
cmake.writelines(["\t${CMAKE_CURRENT_BINARY_DIR}/%s\n" % fn for fn in generated])
cmake.writelines(["\t%s\n" % fn for fn in getVariableList("LIB_DEFS") if fn not in generated and fn not in sources])
cmake.write(")\n")
libs = [ lib.replace("-l", "") for lib in getVariableList("LIBRARIES") ]
if getVariable("OPENGL"):
libs.append("${OPENGL_LIBRARIES}")
cmake.write("include_directories(${OPENGL_INCLUDE_DIR})\n")
if getVariable("GLUT"):
libs.append("${GLUT_LIBRARIES}")
cmake.write("include_directories(${GLUT_INCLUDE_DIR})\n")
cmake.write("%s(%s %s ${SOURCES})\n" % (targetcommand, target, targettype))
if len(libs) > 0:
cmake.write("target_link_libraries(%s %s)\n" % (target, " ".join(libs)))
cmake.write("target_link_libraries(%s ${EXTRA_LIBS})\n" % target)
if "-lX11" in getVariableList("LDFLAGS"):
cmake.write("if(X11_PLATFORM)\n")
cmake.write("\ttarget_link_libraries(%s ${X11_LIBRARIES})\n" % target)
cmake.write("endif()\n")
cmake.write("""install(TARGETS %s
LIBRARY DESTINATION lib COMPONENT runtime
ARCHIVE DESTINATION lib COMPONENT dev
RUNTIME DESTINATION bin COMPONENT runtime)\n""" % target)
for copy in getVariableList("LIB_COPIES"):
copytarget = "%s_%s_copy" % (copy, target)
cmake.write("%s(%s %s ${SOURCES})\n" % (targetcommand, copytarget, targettype))
if len(libs) > 0:
cmake.write("target_link_libraries(%s %s)\n" % (copytarget, " ".join(libs)))
cmake.write("target_link_libraries(%s ${EXTRA_LIBS})\n" % copytarget)
cmake.write("""install(TARGETS %s
LIBRARY DESTINATION lib COMPONENT runtime
ARCHIVE DESTINATION lib COMPONENT dev
RUNTIME DESTINATION bin COMPONENT runtime)\n""" % copytarget)
dirs = getVariableList("SUBDIRS")
if len(dirs) > 0:
cmake.writelines(["add_subdirectory(%s)\n" % dirname for dirname in dirs])
sourcedirs = [ dirpath for (dirpath, dirnames, filenames) in os.walk(os.path.abspath(".")) if "Makefile" in filenames]
for sourcedir in sourcedirs:
doDirectory(sourcedir)