Skip to content

Commit 784363b

Browse files
committed
Make a stab at merging master and brlcad. Not properly working yet, need to remove some files, etc.
2 parents c43d9c6 + ab86787 commit 784363b

File tree

184 files changed

+58377
-70888
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

184 files changed

+58377
-70888
lines changed

CMakeLists.txt

Lines changed: 60 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,7 @@ MARK_AS_ADVANCED(SCL_BUILD_EXPRESS_ONLY)
225225
# scl_cf.h.in - scripts may need to append to the template, so
226226
# it is read into memory initially.
227227
SET(CONFIG_H_FILE ${SCL_BINARY_DIR}/include/scl_cf.h.in)
228+
set_source_files_properties(${CONFIG_H_FILE} PROPERTIES GENERATED TRUE)
228229
set(CMAKE_CURRENT_PROJECT SCL)
229230
define_property(GLOBAL PROPERTY SCL_CONFIG_H_CONTENTS BRIEF_DOCS "config.h.in contents" FULL_DOCS "config.h.in contents for SCL project")
230231
if(NOT COMMAND CONFIG_H_APPEND)
@@ -239,14 +240,71 @@ endif(NOT COMMAND CONFIG_H_APPEND)
239240
file(READ ${SCL_SOURCE_DIR}/include/scl_cf_cmake.h.in CONFIG_H_FILE_CONTENTS)
240241
CONFIG_H_APPEND(SCL "${CONFIG_H_FILE_CONTENTS}")
241242

243+
# The Express parser uses the tools Perplex, RE2C and Lemon to generate code
244+
# from higher level inputs. Depending on available tools and options, the
245+
# SCL build can either re-generate code as part of the build, or use cached
246+
# files that are ready for compilation.
247+
#
248+
# SCL_GENERATE_LEXER_PARSER is the "high level" control a user sets to determine
249+
# how the SCL build will interact (or not) with these tools. AUTO (the
250+
# default) means it will search for the necessary tools, and use them only if
251+
# everything is found. If not, it will fall back to the cached versions. If
252+
# this option is set to ON and the necessary tools are not found, the
253+
# configure step will fail. If it is set to OFF, SCL will not even try to use
254+
# the generators and will instead use the cached sources.
255+
if(NOT SCL_GENERATE_LEXER_PARSER)
256+
set(SCL_GENERATE_LEXER_PARSER "AUTO" CACHE STRING "Use Perplex, RE2C and Lemon to generate C source code.")
257+
else(NOT SCL_GENERATE_LEXER_PARSER)
258+
string(TOUPPER "${SCL_GENERATE_LEXER_PARSER}" SCL_GENERATE_LEXER_PARSER)
259+
endif(NOT SCL_GENERATE_LEXER_PARSER)
260+
set_property(CACHE SCL_GENERATE_LEXER_PARSER PROPERTY STRINGS AUTO ON OFF)
261+
if (NOT "${SCL_GENERATE_LEXER_PARSER}" STREQUAL "AUTO" AND NOT "${SCL_GENERATE_LEXER_PARSER}" STREQUAL "ON" AND NOT "${SCL_GENERATE_LEXER_PARSER}" STREQUAL "OFF")
262+
message(WARNING "Unknown value ${SCL_GENERATE_LEXER_PARSER} supplied for BRLCAD_WORD_SIZE - defaulting to AUTO")
263+
message(WARNING "Valid options are AUTO, ON and OFF")
264+
set(SCL_GENERATE_LEXER_PARSER "AUTO" CACHE STRING "Use Perplex, RE2C and Lemon to generate C source code.")
265+
endif (NOT "${SCL_GENERATE_LEXER_PARSER}" STREQUAL "AUTO" AND NOT "${SCL_GENERATE_LEXER_PARSER}" STREQUAL "ON" AND NOT "${SCL_GENERATE_LEXER_PARSER}" STREQUAL "OFF")
266+
267+
# If the generators have not been turned off, we need to check for them
268+
if(NOT "${SCL_GENERATE_LEXER_PARSER}" STREQUAL "OFF")
269+
find_package(LEMON)
270+
find_package(RE2C)
271+
find_package(PERPLEX)
272+
if(LEMON_EXECUTABLE AND LEMON_TEMPLATE AND PERPLEX_EXECUTABLE AND PERPLEX_TEMPLATE AND RE2C_EXECUTABLE)
273+
# Templates may be anywhere - make sure we have a stable path if a relative
274+
# path was specified at CMake time
275+
get_filename_component(lemon_template_fpath "${LEMON_TEMPLATE}" ABSOLUTE)
276+
if(NOT "${lemon_template_fpath}" STREQUAL "${LEMON_TEMPLATE}")
277+
get_filename_component(LEMON_TEMPLATE "${CMAKE_BINARY_DIR}/${LEMON_TEMPLATE}" ABSOLUTE)
278+
endif(NOT "${lemon_template_fpath}" STREQUAL "${LEMON_TEMPLATE}")
279+
get_filename_component(perplex_template_fpath "${PERPLEX_TEMPLATE}" ABSOLUTE)
280+
if(NOT "${perplex_template_fpath}" STREQUAL "${PERPLEX_TEMPLATE}")
281+
get_filename_component(PERPLEX_TEMPLATE "${CMAKE_BINARY_DIR}/${PERPLEX_TEMPLATE}" ABSOLUTE)
282+
endif(NOT "${perplex_template_fpath}" STREQUAL "${PERPLEX_TEMPLATE}")
283+
284+
if(NOT COMMAND LEMON_TARGET)
285+
include(${SCL_CMAKE_DIR}/LEMON_Util.cmake)
286+
endif(NOT COMMAND LEMON_TARGET)
287+
if(NOT COMMAND PERPLEX_TARGET)
288+
include(${SCL_CMAKE_DIR}/PERPLEX_Util.cmake)
289+
endif(NOT COMMAND PERPLEX_TARGET)
290+
set(SCL_GENERATE_LP_SOURCES 1)
291+
else(LEMON_EXECUTABLE AND LEMON_TEMPLATE AND PERPLEX_EXECUTABLE AND PERPLEX_TEMPLATE AND RE2C_EXECUTABLE)
292+
if("${SCL_GENERATE_LEXER_PARSER}" STREQUAL "ON")
293+
message(FATAL_ERROR "\nSCL_GENERATE_LEXER_PARSER set to ON, but one or more components of the Perplex/RE2C/Lemon toolchain were not found.\n")
294+
else("${SCL_GENERATE_LEXER_PARSER}" STREQUAL "ON")
295+
set(SCL_GENERATE_LP_SOURCES 0)
296+
endif("${SCL_GENERATE_LEXER_PARSER}" STREQUAL "ON")
297+
endif(LEMON_EXECUTABLE AND LEMON_TEMPLATE AND PERPLEX_EXECUTABLE AND PERPLEX_TEMPLATE AND RE2C_EXECUTABLE)
298+
else(NOT "${SCL_GENERATE_LEXER_PARSER}" STREQUAL "OFF")
299+
set(SCL_GENERATE_LP_SOURCES 0)
300+
endif(NOT "${SCL_GENERATE_LEXER_PARSER}" STREQUAL "OFF")
301+
242302
INCLUDE(CheckLibraryExists)
243303
INCLUDE(CheckIncludeFile)
244304
INCLUDE(CheckFunctionExists)
245305
INCLUDE(CheckTypeSize)
246306
INCLUDE(CMakePushCheckState)
247307
INCLUDE(CheckCXXSourceRuns)
248-
INCLUDE(${SCL_CMAKE_DIR}/FindLEX.cmake)
249-
INCLUDE(${SCL_CMAKE_DIR}/FindYACC.cmake)
250308

251309
CHECK_INCLUDE_FILE(ndir.h HAVE_NDIR_H)
252310
CHECK_INCLUDE_FILE(stdarg.h HAVE_STDARG_H)

NEWS

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ types, entities, and attributes.
190190
- Fixed a bug in the casting functions for the classes handling
191191
instances of SELECT TYPEs in EXPRESS.
192192
e.g.
193-
SdaiMeasure_value::operator SCLP23(Real)()
193+
SdaiMeasure_value::operator SDAI_Real)(
194194
{
195195
// was missing stmts such as these...
196196
if( CurrentUnderlyingType () == config_control_designt_area_measure )
@@ -307,10 +307,10 @@ classes is what allows for the flexibility in dealing with problem
307307
areas when using SCL with other software.
308308

309309
An example of a name change and macro use: sdaiString has now become
310-
SCLP23(String) which could translate to SDAI::String or SDAI_String
310+
SDAI_String which could translate to SDAI::String or SDAI_String
311311
(depending on whether you use the SDAI namespace or not) or any other
312312
namespace or prefix as is necessary. To change the SDAI namespace name
313-
or prefix name the macro definition for SCLP23() could be changed in
313+
or prefix name the macro definition for SDAI_ could be changed in
314314
the sclprefixes.h file.
315315

316316
The early bound access functions that are generated by fedex_plus from

cmake/FindLEMON.cmake

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
#
2+
# - Find lemon executable and provides macros to generate custom build rules
3+
# The module defines the following variables
4+
#
5+
# LEMON_EXECUTABLE - path to the lemon program
6+
# LEMON_TEMPLATE - location of the lemon template file
7+
8+
#=============================================================================
9+
# F I N D L E M O N . C M A K E
10+
#
11+
# Originally based off of FindBISON.cmake from Kitware's CMake distribution
12+
#
13+
# Copyright (c) 2010-2012 United States Government as represented by
14+
# the U.S. Army Research Laboratory.
15+
# Copyright 2009 Kitware, Inc.
16+
# Copyright 2006 Tristan Carel
17+
# All rights reserved.
18+
#
19+
# Redistribution and use in source and binary forms, with or without
20+
# modification, are permitted provided that the following conditions
21+
# are met:
22+
#
23+
# * Redistributions of source code must retain the above copyright
24+
# notice, this list of conditions and the following disclaimer.
25+
#
26+
# * Redistributions in binary form must reproduce the above copyright
27+
# notice, this list of conditions and the following disclaimer in the
28+
# documentation and/or other materials provided with the distribution.
29+
#
30+
# * The names of the authors may not be used to endorse or promote
31+
# products derived from this software without specific prior written
32+
# permission.
33+
#
34+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
35+
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
36+
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
37+
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
38+
# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
39+
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
40+
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
41+
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
42+
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
43+
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
44+
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
45+
#=============================================================================
46+
47+
find_program(LEMON_EXECUTABLE lemon DOC "path to the lemon executable")
48+
mark_as_advanced(LEMON_EXECUTABLE)
49+
50+
if(LEMON_EXECUTABLE AND NOT LEMON_TEMPLATE)
51+
get_filename_component(lemon_path ${LEMON_EXECUTABLE} PATH)
52+
if(lemon_path)
53+
set(LEMON_TEMPLATE "")
54+
if(EXISTS ${lemon_path}/lempar.c)
55+
set(LEMON_TEMPLATE "${lemon_path}/lempar.c")
56+
endif(EXISTS ${lemon_path}/lempar.c)
57+
if(EXISTS /usr/share/lemon/lempar.c)
58+
set(LEMON_TEMPLATE "/usr/share/lemon/lempar.c")
59+
endif(EXISTS /usr/share/lemon/lempar.c)
60+
endif(lemon_path)
61+
endif(LEMON_EXECUTABLE AND NOT LEMON_TEMPLATE)
62+
include(FindPackageHandleStandardArgs)
63+
FIND_PACKAGE_HANDLE_STANDARD_ARGS(LEMON DEFAULT_MSG LEMON_EXECUTABLE LEMON_TEMPLATE)
64+
mark_as_advanced(LEMON_TEMPLATE)
65+
66+
#============================================================
67+
# FindLEMON.cmake ends here
68+
69+
# Local Variables:
70+
# tab-width: 8
71+
# mode: cmake
72+
# indent-tabs-mode: t
73+
# End:
74+
# ex: shiftwidth=2 tabstop=8

cmake/FindPERPLEX.cmake

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
#
2+
# - Find perplex executable and provides macros to generate custom build rules
3+
# The module defines the following variables
4+
#
5+
# PERPLEX_EXECUTABLE - path to the perplex program
6+
# PERPLEX_TEMPLATE - location of the perplex template file
7+
8+
#=============================================================================
9+
# F I N D P E R P L E X . C M A K E
10+
#
11+
# Originally based off of FindBISON.cmake from Kitware's CMake distribution
12+
#
13+
# Copyright (c) 2010-2012 United States Government as represented by
14+
# the U.S. Army Research Laboratory.
15+
# Copyright 2009 Kitware, Inc.
16+
# Copyright 2006 Tristan Carel
17+
# All rights reserved.
18+
#
19+
# Redistribution and use in source and binary forms, with or without
20+
# modification, are permitted provided that the following conditions
21+
# are met:
22+
#
23+
# * Redistributions of source code must retain the above copyright
24+
# notice, this list of conditions and the following disclaimer.
25+
#
26+
# * Redistributions in binary form must reproduce the above copyright
27+
# notice, this list of conditions and the following disclaimer in the
28+
# documentation and/or other materials provided with the distribution.
29+
#
30+
# * The names of the authors may not be used to endorse or promote
31+
# products derived from this software without specific prior written
32+
# permission.
33+
#
34+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
35+
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
36+
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
37+
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
38+
# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
39+
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
40+
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
41+
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
42+
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
43+
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
44+
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
45+
#=============================================================================
46+
47+
find_program(PERPLEX_EXECUTABLE perplex DOC "path to the perplex executable")
48+
mark_as_advanced(PERPLEX_EXECUTABLE)
49+
50+
if(PERPLEX_EXECUTABLE AND NOT PERPLEX_TEMPLATE)
51+
get_filename_component(perplex_path ${PERPLEX_EXECUTABLE} PATH)
52+
if(perplex_path)
53+
set(PERPLEX_TEMPLATE "")
54+
if(EXISTS ${perplex_path}/../share/perplex/perplex_template.c)
55+
get_filename_component(perplex_template_path "${perplex_path}/../share/perplex/perplex_template.c" ABSOLUTE)
56+
set(PERPLEX_TEMPLATE "${perplex_template_path}")
57+
endif(EXISTS ${perplex_path}/../share/perplex/perplex_template.c)
58+
if(EXISTS ${perplex_path}/../share/perplex_template.c AND NOT PERPLEX_TEMPLATE)
59+
get_filename_component(perplex_template_path "${perplex_path}/../share/perplex_template.c" ABSOLUTE)
60+
set(PERPLEX_TEMPLATE "${perplex_template_path}")
61+
endif(EXISTS ${perplex_path}/../share/perplex_template.c AND NOT PERPLEX_TEMPLATE)
62+
endif(perplex_path)
63+
if(EXISTS /usr/share/perplex/perplex_template.c AND NOT PERPLEX_TEMPLATE)
64+
set(PERPLEX_TEMPLATE "/usr/share/perplex/perplex_template.c")
65+
endif(EXISTS /usr/share/perplex/perplex_template.c AND NOT PERPLEX_TEMPLATE)
66+
endif(PERPLEX_EXECUTABLE AND NOT PERPLEX_TEMPLATE)
67+
include(FindPackageHandleStandardArgs)
68+
FIND_PACKAGE_HANDLE_STANDARD_ARGS(PERPLEX DEFAULT_MSG PERPLEX_EXECUTABLE PERPLEX_TEMPLATE)
69+
mark_as_advanced(PERPLEX_TEMPLATE)
70+
71+
#============================================================
72+
# FindPERPLEX.cmake ends here
73+
74+
# Local Variables:
75+
# tab-width: 8
76+
# mode: cmake
77+
# indent-tabs-mode: t
78+
# End:
79+
# ex: shiftwidth=2 tabstop=8

cmake/FindRE2C.cmake

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# The module defines the following variables:
2+
# RE2C_EXECUTABLE - the path to the re2c executable
3+
#
4+
#=============================================================================
5+
6+
find_program(RE2C_EXECUTABLE re2c DOC "path to the re2c executable")
7+
mark_as_advanced(RE2C_EXECUTABLE)
8+
9+
include(FindPackageHandleStandardArgs)
10+
FIND_PACKAGE_HANDLE_STANDARD_ARGS(RE2C DEFAULT_MSG RE2C_EXECUTABLE)

cmake/Generated_Source_Utils.cmake

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
# Utility routines for managing generated files with CMake
2+
3+
macro(MD5 filename md5sum)
4+
file(READ "${filename}" RAW_MD5_FILE)
5+
string(REGEX REPLACE "\r?\n" "" STRIPPED_MD5_FILE "${RAW_MD5_FILE}")
6+
file(WRITE ${CMAKE_BINARY_DIR}/CMakeTmp/md5_file "${STRIPPED_MD5_FILE}")
7+
execute_process(COMMAND ${CMAKE_COMMAND} -E md5sum ${CMAKE_BINARY_DIR}/CMakeTmp/md5_file OUTPUT_VARIABLE md5string)
8+
file(REMOVE ${CMAKE_BINARY_DIR}/CMakeTmp/md5_file)
9+
string(REPLACE " ${CMAKE_BINARY_DIR}/CMakeTmp/md5_file" "" md5string "${md5string}")
10+
string(STRIP "${md5string}" ${md5sum})
11+
endmacro(MD5)
12+
13+
macro(FILEVAR filename var)
14+
string(REGEX REPLACE "[^a-zA-Z0-9]" "_" ${var} ${filename})
15+
endmacro(FILEVAR)
16+
17+
macro(VERIFY_FILES filelist warn resultvar)
18+
set(${resultvar} 1)
19+
foreach(fileitem ${filelist})
20+
# Deal with absolute and relative paths a bit differently
21+
get_filename_component(ITEM_ABS_PATH "${fileitem}" ABSOLUTE)
22+
if("${fileitem}" STREQUAL "${ITEM_ABS_PATH}")
23+
set(filefullname "${fileitem}")
24+
else("${fileitem}" STREQUAL "${ITEM_ABS_PATH}")
25+
set(filefullname "${CURRENT_SOURCE_DIR}/${fileitem}")
26+
endif("${fileitem}" STREQUAL "${ITEM_ABS_PATH}")
27+
get_filename_component(filename "${fileitem}" NAME)
28+
# Got filename components sorted - proceed
29+
if(NOT EXISTS ${filefullname})
30+
message(FATAL_ERROR "Attempted to verify non-existant file ${filefullname}")
31+
endif(NOT EXISTS ${filefullname})
32+
FILEVAR(${filename} filevar)
33+
if(NOT baseline_${filevar}_md5)
34+
message(FATAL_ERROR "No baseline MD5 available for ${filename} - baseline_${filevar}_md5 is not defined")
35+
endif(NOT baseline_${filevar}_md5)
36+
MD5(${filefullname} ${filevar}_md5)
37+
if(NOT "${${filevar}_md5}" STREQUAL "${baseline_${filevar}_md5}")
38+
if("${warn}" STREQUAL "1")
39+
message("\n${filename} differs from baseline: baseline md5 hash is ${baseline_${filevar}_md5} and current hash is ${${filevar}_md5}\n")
40+
endif("${warn}" STREQUAL "1")
41+
set(${resultvar} 0)
42+
else(NOT "${${filevar}_md5}" STREQUAL "${baseline_${filevar}_md5}")
43+
if("${warn}" STREQUAL "1")
44+
message("${fileitem} OK")
45+
endif("${warn}" STREQUAL "1")
46+
endif(NOT "${${filevar}_md5}" STREQUAL "${baseline_${filevar}_md5}")
47+
endforeach(fileitem ${filelist})
48+
endmacro(VERIFY_FILES filelist resultvar)
49+
50+
macro(WRITE_MD5_SUMS filelist outfile)
51+
foreach(fileitem ${filelist})
52+
# Deal with absolute and relative paths a bit differently
53+
get_filename_component(ITEM_ABS_PATH "${fileitem}" ABSOLUTE)
54+
if("${fileitem}" STREQUAL "${ITEM_ABS_PATH}")
55+
set(filefullname "${fileitem}")
56+
else("${fileitem}" STREQUAL "${ITEM_ABS_PATH}")
57+
set(filefullname "${CURRENT_SOURCE_DIR}/${fileitem}")
58+
endif("${fileitem}" STREQUAL "${ITEM_ABS_PATH}")
59+
get_filename_component(filename "${fileitem}" NAME)
60+
# Got filename components sorted - proceed
61+
if(NOT EXISTS ${filefullname})
62+
message(FATAL_ERROR "Attempted to get MD5 sum of non-existant file ${filefullname}")
63+
endif(NOT EXISTS ${filefullname})
64+
FILEVAR(${filename} filevar)
65+
MD5(${filefullname} ${filevar}_md5)
66+
file(APPEND ${outfile} "set(baseline_${filevar}_md5 ${${filevar}_md5})\n")
67+
endforeach(fileitem ${filelist})
68+
endmacro(WRITE_MD5_SUMS)
69+
70+
71+
macro(GET_GENERATOR_EXEC_VERSIONS)
72+
# Read lemon version
73+
execute_process(COMMAND ${LEMON_EXECUTABLE} -x OUTPUT_VARIABLE lemon_version)
74+
string(REPLACE "Lemon version " "" lemon_version "${lemon_version}")
75+
string(STRIP "${lemon_version}" lemon_version)
76+
# Read re2c version
77+
execute_process(COMMAND ${RE2C_EXECUTABLE} -V OUTPUT_VARIABLE re2c_version)
78+
string(STRIP "${re2c_version}" re2c_version)
79+
# Read perplex version
80+
execute_process(COMMAND ${PERPLEX_EXECUTABLE} -v OUTPUT_VARIABLE perplex_version)
81+
string(STRIP "${perplex_version}" perplex_version)
82+
endmacro(GET_GENERATOR_EXEC_VERSIONS)
83+
84+
# Local Variables:
85+
# tab-width: 8
86+
# mode: cmake
87+
# indent-tabs-mode: t
88+
# End:
89+
# ex: shiftwidth=2 tabstop=8

0 commit comments

Comments
 (0)