-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathCMakeLists.txt
140 lines (122 loc) · 4.71 KB
/
CMakeLists.txt
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
project(AkLisp)
cmake_minimum_required(VERSION 2.8)
include(CheckIncludeFile)
set(VER_MAJOR 0)
set(VER_MINOR 2)
set(VER_ADDITIONAL "prealpha")
SET(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
set(SDIR "./src/")
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake" ${CMAKE_MODULE_PATH})
#if (CMAKE_BUILD_TYPE EQUAL DEBUG)
# message("Debug build")
# add_definitions(-DAKL_DEBUG)
#endif(CMAKE_BUILD_TYPE EQUAL DEBUG)
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DAKL_DEBUG")
if (UNIX)
set(PLATSRC os_unix.c)
SITE_NAME(HOSTNAME)
add_definitions(-DAKL_USER_INFO)
add_definitions(-DAKL_USER_NAME="$ENV{USER}")
add_definitions(-DAKL_HOST_NAME="${HOSTNAME}")
find_package(Readline)
find_package(DL)
if (READLINE_FOUND)
add_definitions(-DHAVE_READLINE)
endif()
CHECK_INCLUDE_FILE("getopt.h" HAVE_GETOPT_H)
add_definitions(-DAKL_MODULE_SEARCH_PATH="${CMAKE_INSTALL_PREFIX}/share/AkLisp/modules/" )
add_custom_target(modules WORKING_DIRECTORY modules COMMAND ${CMAKE_BUILD_TOOL})
add_custom_target(test WORKING_DIRECTORY tests COMMAND ${CMAKE_BUILD_TOOL})
add_custom_target(clean-modules WORKING_DIRECTORY modules COMMAND ${CMAKE_BUILD_TOOL} clean)
add_custom_target(clean-test WORKING_DIRECTORY tests COMMAND ${CMAKE_BUILD_TOOL} clean)
endif()
if (!UNIX)
set(PLATSRC os_other.c)
endif ()
set(SOURCES
${SDIR}${PLATSRC}
# ${SDIR}os_other.c
${SDIR}aklisp.c
${SDIR}lib.c
${SDIR}gc.c
${SDIR}parser.c
${SDIR}list.c
# ${SDIR}lib_file.c
${SDIR}lib_spec.c
${SDIR}types.c
${SDIR}compile.c
${SDIR}vector.c
${SDIR}module.c
${SDIR}util.c
${SDIR}lexer.c)
option(USE_COLORS "Use standard terminal colors" ON)
option(LINK_SHARED "Link the interpreter with the shared library" OFF)
if (USE_COLORS)
add_definitions(-DUSE_COLORS)
endif()
set(TARGET aklisp)
include(CheckIncludeFiles)
check_include_files(ucontext.h HAVE_UCONTEXT_H)
check_include_files(execinfo.h HAVE_EXECINFO_H)
check_include_files(dlfcn.h HAVE_DLFCN_H)
configure_file(config.h.in config.h)
add_library(${TARGET}_static STATIC ${SOURCES})
add_library(${TARGET}_shared SHARED ${SOURCES})
add_definitions(-DVER_MAJOR=${VER_MAJOR})
add_definitions(-DVER_MINOR=${VER_MINOR})
add_definitions(-DVER_ADDITIONAL="${VER_ADDITIONAL}")
add_definitions(-DAKL_SYSTEM_INFO)
add_definitions(-DAKL_SYSTEM_NAME="${CMAKE_SYSTEM_NAME}")
add_definitions(-DAKL_SYSTEM_VERSION="${CMAKE_SYSTEM_VERSION}")
add_definitions(-DAKL_PROCESSOR="${CMAKE_SYSTEM_PROCESSOR}")
set_target_properties(${TARGET}_static PROPERTIES VERSION ${VER_MAJOR}.${VER_MINOR}.0 SOVERSION 1)
set_target_properties(${TARGET}_shared PROPERTIES VERSION ${VER_MAJOR}.${VER_MINOR}.0 SOVERSION 1)
add_executable(${TARGET} ${SDIR}/main.c)
if (LINK_SHARED)
set(AKL_SHLIB ${TARGET}_shared)
else()
set(AKL_SHLIB ${TARGET}_static)
endif()
target_link_libraries(${TARGET} ${AKL_SHLIB} ${READLINE_LIBRARY} ${DL_LIBRARY})
set_target_properties(${TARGET} PROPERTIES OUTPUT_NAME aklisp)
INSTALL(TARGETS ${TARGET}
RUNTIME
DESTINATION bin
PERMISSIONS OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
INSTALL(TARGETS ${TARGET}_static
DESTINATION lib
PERMISSIONS OWNER_READ GROUP_READ WORLD_READ)
INSTALL(TARGETS ${TARGET}_shared
DESTINATION lib
PERMISSIONS OWNER_READ GROUP_READ WORLD_READ)
INSTALL(FILES ${SDIR}/aklisp.h
DESTINATION include
PERMISSIONS OWNER_READ GROUP_READ WORLD_READ)
INSTALL(FILES ${SDIR}/akl_tree.h
DESTINATION include
PERMISSIONS OWNER_READ GROUP_READ WORLD_READ)
INSTALL(FILES etc/libaklisp.pc
DESTINATION share/pkgconfig
PERMISSIONS OWNER_READ GROUP_READ WORLD_READ)
INSTALL(FILES etc/libaklisp-static.pc
DESTINATION share/pkgconfig
PERMISSIONS OWNER_READ GROUP_READ WORLD_READ)
INSTALL(FILES etc/aklisp-module.pc
DESTINATION share/pkgconfig
PERMISSIONS OWNER_READ GROUP_READ WORLD_READ)
file(GLOB MODULES modules/*.alm)
INSTALL(FILES ${MODULES}
DESTINATION share/AkLisp/modules/
PERMISSIONS OWNER_READ GROUP_READ WORLD_READ)
# Generate Debian package
SET(CPACK_GENERATOR "DEB")
SET(CPACK_DEBIAN_PACKAGE_MAINTAINER "Ákos Kovács <akoskovacs@gmx.com>")
set(CPACK_PACKAGE_VERSION_MAJOR ${VER_MAJOR})
set(CPACK_PACKAGE_VERSION_MINOR ${VER_MINOR})
set(CPACK_PACKAGE_VERSION_PATCH "0")
SET(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6, libgcc1, libreadline5")
SET(CPACK_DEBIAN_PACKAGE_SECTION "interpreters")
SET(CPACK_DEBIAN_PACKAGE_BUILDS_DEPENDS "libreadline5-dev")
SET(CPACK_DEBIAN_PACKAGE_DESCRIPTION_SUMMARY "A tiny Lisp-style language")
SET(CPACK_DEBIAN_PACKAGE_DESCRIPTION "AkLisp is a tiny, hobby Lisp dialect. It is embeddable, user-friendly and relatively fast.")
INCLUDE(CPack)