File: cgal_create_cmake_script

package info (click to toggle)
cgal 6.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 144,912 kB
  • sloc: cpp: 810,858; ansic: 208,477; sh: 493; python: 411; makefile: 286; javascript: 174
file content (141 lines) | stat: -rwxr-xr-x 4,052 bytes parent folder | download
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
141
#!/bin/bash

# Copyright (c) 1999,2000,2002-2007
# Utrecht University (The Netherlands),
# ETH Zurich (Switzerland),
# INRIA Sophia-Antipolis (France),
# Max-Planck-Institute Saarbruecken (Germany),
# and Tel-Aviv University (Israel).  All rights reserved.
#
# This file is part of CGAL (www.cgal.org)
#
# $URL$
# $Id$
# SPDX-License-Identifier: LGPL-3.0-or-later
#
# Author(s)     : various

# This script creates a CGAL cmake script with entries for files with a common
# C++ file extension (as mentioned in the g++ man page) in the current directory.
#
# Usage: cgal_create_cmake_script TYPE
#
#  echo "  TYPE can be any of "demo", "example" or "test".. any other value is ignored"

#VERSION=2.0

create_cmake_script()
{
  # print makefile header
  cat <<EOF
# Created by the script cgal_create_cmake_script
# This is the CMake script for compiling a CGAL application.

cmake_minimum_required(VERSION 3.12...3.31)
project( ${PROJECT}${TYPE} )

find_package(CGAL REQUIRED QUIET OPTIONAL_COMPONENTS Core )

EOF
    if [ -d "${SOURCE_DIR}" ] ; then
      echo "set(CGAL_CURRENT_SOURCE_DIR \"${SOURCE_DIR}\")"
      echo
    fi
    if [ -d "${SOURCE_DIR}../include" ] ; then
      echo "include_directories (BEFORE \"${SOURCE_DIR}../include\")"
      echo
    fi
    if [ -d "${SOURCE_DIR}include" ] ; then
      echo "include_directories (BEFORE \"${SOURCE_DIR}include\")"
      echo
    fi

    for file in `ls "$SOURCE_DIR"*.cc "$SOURCE_DIR"*.cp "$SOURCE_DIR"*.cxx "$SOURCE_DIR"*.cpp "$SOURCE_DIR"*.CPP "$SOURCE_DIR"*.c++ "$SOURCE_DIR"*.C 2>/dev/null | sort` ; do
      # Create an executable for each cpp that  contains a function "main()"
      BASE=`basename $file .cc`
      BASE=`basename $BASE .cp`
      BASE=`basename $BASE .cxx`
      BASE=`basename $BASE .cpp`
      BASE=`basename $BASE .CPP`
      BASE=`basename $BASE .c++`
      BASE=`basename $BASE .C`
      grep -E '\bmain[ \t]*\(' $file >/dev/null 2>&1
      if [ $? -eq 0 ]; then
        echo "create_single_source_cgal_program( \"$file\" )"
        echo "Adding a target ${BASE}..." >&3
      fi
    done
  echo

}


usage()
{
  echo "Usage: cgal_create_cmake_script [--source_dir <source directory>]"
  echo
  echo "  Create a CMakeLists.txt file in the current working directory."
  echo
  echo "  TYPE must be any of example or test. The default is example."
  echo
  echo "  If the option --source_dir is specified with a directory, the "
  echo "  CMakeLists.txt uses source files from that directory, otherwise "
  echo "  the source directory is supposed to be the current directory."
}

SOURCE_DIR=

while [ $1 ]; do
    case "$1" in
        -h|-help|--h|--help)
            usage; exit
        ;;
        example)
            if [ -z "$TYPE" ]; then TYPE=_Examples; shift; else usage; exit 1; fi
        ;;
        demo)
            if [ -z "$TYPE" ]; then TYPE=_Demo; shift; else usage; exit 1; fi
        ;;
        test)
            if [ -z "$TYPE" ]; then TYPE=; shift; else usage; exit 1; fi
        ;;
        benchmark)
            if [ -z "$TYPE" ]; then TYPE=_Benchmarks; shift; else usage; exit 1; fi
        ;;
        --source_dir)
            if [ -d "$2" ]; then
                SOURCE_DIR=$2;
                shift;
                shift;
            else
                if [ -z "$2" ]; then
                    echo "Error: you must specify a directory after the --source_dir option!"
                    echo
                else
                    echo "Error: \"$2\" is not a directory!"
                    echo
                fi
                usage; exit 1;
            fi
        ;;
        *) 
            echo "Unknown option: $1"
            usage; exit 1
        ;;
    esac
done

OUTPUTFILE=CMakeLists.txt
if [ -n "$SOURCE_DIR" ]; then
    PROJECT=`basename $SOURCE_DIR`
    SOURCE_DIR=$SOURCE_DIR/
else
    PROJECT=`basename $PWD`
fi

if [ -f ${OUTPUTFILE} ] ; then
  echo "moving $OUTPUTFILE to ${OUTPUTFILE}.bak ..."
  mv -f $OUTPUTFILE ${OUTPUTFILE}.bak
fi
create_cmake_script 3>&1 > $OUTPUTFILE
echo "created $OUTPUTFILE in $PWD ..."